Fixed network port object to accept host name option of host-n-port writes. (#997)

This commit is contained in:
Steve Karg
2025-05-20 15:44:47 -05:00
committed by GitHub
parent 524fd162f9
commit b3fd374c84
9 changed files with 1077 additions and 133 deletions
@@ -29,6 +29,7 @@ add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_ALL=1
BACNET_NETWORK_PORT_IP_DHCP_ENABLED=1
BACNET_SECURE_CONNECT_ROUTING_TABLE=1
BSC_CONF_HUB_FUNCTIONS_NUM=1
BSC_CONF_HUB_CONNECTORS_NUM=1
+140 -19
View File
@@ -37,32 +37,51 @@ static void test_network_port(void)
};
uint8_t test_address[16] = { 0 };
uint8_t mac_len;
uint8_t max_master, max_info_frames;
uint8_t ip_prefix;
uint32_t object_instance = 0;
uint32_t object_instance = 1234, test_object_instance = 0;
unsigned object_index = 0, test_object_index = 0;
BACNET_HOST_N_PORT host_n_port, test_host_n_port = { 0 };
BACNET_OCTET_STRING ip_address;
BACNET_IP_BROADCAST_DISTRIBUTION_TABLE_ENTRY bdt[2] = {
{ .valid = true,
.dest_address = { .address = { 1, 2, 3, 4 }, .port = 47808 },
.broadcast_mask = { .address = { 255, 255, 255, 255 } } },
{ .valid = true,
.dest_address = { .address = { 5, 6, 7, 8 }, .port = 47808 },
.broadcast_mask = { .address = { 255, 255, 255, 0 } } }
};
BACNET_IP_BROADCAST_DISTRIBUTION_TABLE_ENTRY *test_bdt;
BACNET_IP_FOREIGN_DEVICE_TABLE_ENTRY fdt[2] = {
{ .valid = true,
.dest_address = { .address = { 1, 2, 3, 4 }, .port = 47808 },
.ttl_seconds = 30,
.ttl_seconds_remaining = 30 },
{ .valid = true,
.dest_address = { .address = { 5, 6, 7, 8 }, .port = 47808 },
.ttl_seconds = 60,
.ttl_seconds_remaining = 60 }
};
BACNET_IP_FOREIGN_DEVICE_TABLE_ENTRY *test_fdt;
uint8_t port_type[] = { PORT_TYPE_ETHERNET, PORT_TYPE_ARCNET,
PORT_TYPE_MSTP, PORT_TYPE_PTP,
PORT_TYPE_LONTALK, PORT_TYPE_BIP,
PORT_TYPE_ZIGBEE, PORT_TYPE_VIRTUAL,
PORT_TYPE_NON_BACNET, PORT_TYPE_BIP6,
PORT_TYPE_BSC, PORT_TYPE_MAX };
const int known_fail_property_list[] = {
PROP_IP_DNS_SERVER,
PROP_BBMD_BROADCAST_DISTRIBUTION_TABLE,
PROP_BBMD_FOREIGN_DEVICE_TABLE,
PROP_FD_BBMD_ADDRESS,
PROP_IPV6_DNS_SERVER,
PROP_ISSUER_CERTIFICATE_FILES,
PROP_SC_HUB_FUNCTION_CONNECTION_STATUS,
PROP_SC_DIRECT_CONNECT_CONNECTION_STATUS,
PROP_SC_FAILED_CONNECTION_REQUESTS,
-1
};
const int known_fail_property_list[] = { -1 };
while (port_type[port] != PORT_TYPE_MAX) {
Network_Port_Init();
object_instance = 1234;
status = Network_Port_Object_Instance_Number_Set(0, object_instance);
status = Network_Port_Object_Instance_Number_Set(
object_index, object_instance);
zassert_true(status, NULL);
test_object_index = Network_Port_Instance_To_Index(object_instance);
zassert_equal(object_index, test_object_index, NULL);
test_object_instance = Network_Port_Index_To_Instance(object_index);
zassert_equal(object_instance, test_object_instance, NULL);
test_object_instance = Network_Port_Index_To_Instance(UINT_MAX);
zassert_equal(test_object_instance, BACNET_MAX_INSTANCE, NULL);
status = Network_Port_Type_Set(object_instance, port_type[port]);
zassert_true(status, NULL);
count = Network_Port_Count();
@@ -118,8 +137,18 @@ static void test_network_port(void)
zassert_equal(address[0], 127, NULL);
status = Network_Port_MSTP_Max_Info_Frames_Set(object_instance, 1);
zassert_true(status, NULL);
zassert_equal(
Network_Port_MSTP_Max_Info_Frames(object_instance), 1, NULL);
max_info_frames =
Network_Port_MSTP_Max_Info_Frames(object_instance);
zassert_equal(max_info_frames, 1, NULL);
Network_Port_MSTP_Max_Master_Set(object_instance, 127);
max_master = Network_Port_MSTP_Max_Master(object_instance);
zassert_equal(max_master, 127, NULL);
Network_Port_Changes_Pending_Set(object_instance, false);
status = Network_Port_MSTP_Max_Master_Set(object_instance, 63);
zassert_true(status, NULL);
max_master = Network_Port_MSTP_Max_Master(object_instance);
zassert_equal(max_master, 63, NULL);
zassert_true(Network_Port_Changes_Pending(object_instance), NULL);
}
if (port_type[port] == PORT_TYPE_BIP) {
status = Network_Port_IP_Address_Set(object_instance, 1, 2, 3, 4);
@@ -134,6 +163,16 @@ static void test_network_port(void)
zassert_true(status, NULL);
status = Network_Port_IP_DHCP_Enable(object_instance);
zassert_true(status, NULL);
Network_Port_IP_DHCP_Lease_Time_Set(object_instance, 60);
zassert_equal(
Network_Port_IP_DHCP_Lease_Time(object_instance), 60, NULL);
zassert_equal(
Network_Port_IP_DHCP_Lease_Time_Remaining(object_instance), 60,
NULL);
octetstring_init_ascii_hex(&ip_address, "0x0A0B0C0D");
status =
Network_Port_IP_DHCP_Server_Set(object_instance, &ip_address);
zassert_true(status, NULL);
status = Network_Port_IP_DNS_Server_Set(
object_instance, 0, 9, 10, 11, 12);
zassert_true(status, NULL);
@@ -151,21 +190,70 @@ static void test_network_port(void)
status = Network_Port_BBMD_BD_Table_Set(object_instance, NULL);
zassert_true(status, NULL);
zassert_is_null(Network_Port_BBMD_BD_Table(object_instance), NULL);
bvlc_broadcast_distribution_table_link_array(bdt, ARRAY_SIZE(bdt));
status = Network_Port_BBMD_BD_Table_Set(object_instance, bdt);
zassert_true(status, NULL);
test_bdt = Network_Port_BBMD_BD_Table(object_instance);
zassert_not_null(test_bdt, NULL);
zassert_equal(
test_bdt->dest_address.address[0],
bdt[0].dest_address.address[0], NULL);
status = Network_Port_BBMD_FD_Table_Set(object_instance, NULL);
zassert_true(status, NULL);
zassert_is_null(Network_Port_BBMD_FD_Table(object_instance), NULL);
bvlc_foreign_device_table_link_array(fdt, ARRAY_SIZE(fdt));
status = Network_Port_BBMD_FD_Table_Set(object_instance, &fdt[0]);
zassert_true(status, NULL);
test_fdt = Network_Port_BBMD_FD_Table(object_instance);
zassert_not_null(test_fdt, NULL);
zassert_equal(
test_fdt->dest_address.address[0],
fdt[0].dest_address.address[0], NULL);
status = Network_Port_Remote_BBMD_IP_Address(
object_instance, NULL, NULL, NULL, NULL);
zassert_true(status, NULL);
zassert_false(status, NULL);
status = Network_Port_Remote_BBMD_IP_Address_Set(
object_instance, 1, 2, 3, 4);
zassert_true(status, NULL);
status = Network_Port_Remote_BBMD_IP_Address(
object_instance, &test_address[0], &test_address[1],
&test_address[2], &test_address[3]);
zassert_true(status, NULL);
status = Network_Port_Remote_BBMD_IP_Address(
object_instance, NULL, NULL, NULL, NULL);
zassert_true(status, NULL);
zassert_equal(test_address[0], 1, NULL);
zassert_equal(test_address[1], 2, NULL);
zassert_equal(test_address[2], 3, NULL);
zassert_equal(test_address[3], 4, NULL);
Network_Port_Changes_Pending_Set(object_instance, false);
status = Network_Port_Remote_BBMD_IP_Address_Set(
object_instance, 5, 6, 7, 8);
zassert_true(status, NULL);
zassert_true(Network_Port_Changes_Pending(object_instance), NULL);
status =
Network_Port_Remote_BBMD_BIP_Port_Set(object_instance, 47808);
zassert_true(status, NULL);
zassert_equal(
Network_Port_Remote_BBMD_BIP_Port(object_instance), 47808,
NULL);
Network_Port_Remote_BBMD_Address(object_instance, &host_n_port);
zassert_false(host_n_port.host_name, NULL);
zassert_true(host_n_port.host_ip_address, NULL);
zassert_equal(host_n_port.port, 47808, NULL);
test_host_n_port.host_ip_address = false;
test_host_n_port.host_name = true;
characterstring_init_ansi(
&test_host_n_port.host.name, "bbmd.example.com");
test_host_n_port.port = 47808;
Network_Port_Remote_BBMD_Address_Set(
object_instance, &test_host_n_port);
Network_Port_Remote_BBMD_Address(object_instance, &host_n_port);
zassert_false(host_n_port.host_ip_address, NULL);
zassert_true(host_n_port.host_name, NULL);
zassert_equal(host_n_port.port, 47808, NULL);
characterstring_ansi_same(
&test_host_n_port.host.name, "bbmd.example.com");
status =
Network_Port_Remote_BBMD_BIP_Lifetime_Set(object_instance, 60);
zassert_true(status, NULL);
@@ -192,16 +280,33 @@ static void test_network_port(void)
Network_Port_BBMD_IP6_FD_Table(object_instance), NULL);
status =
Network_Port_Remote_BBMD_IP6_Address(object_instance, address);
zassert_true(status, NULL);
zassert_false(status, NULL);
status = Network_Port_Remote_BBMD_IP6_Address_Set(
object_instance, address);
zassert_true(status, NULL);
status =
Network_Port_Remote_BBMD_BIP6_Port_Set(object_instance, 47808);
zassert_true(status, NULL);
status =
Network_Port_Remote_BBMD_IP6_Address(object_instance, address);
zassert_true(status, NULL);
zassert_equal(
Network_Port_Remote_BBMD_BIP6_Port(object_instance), 47808,
NULL);
Network_Port_Remote_BBMD_Address(object_instance, &host_n_port);
zassert_true(host_n_port.host_ip_address, NULL);
zassert_equal(host_n_port.port, 47808, NULL);
test_host_n_port.host_ip_address = false;
test_host_n_port.host_name = true;
characterstring_init_ansi(
&test_host_n_port.host.name, "bbmd.example.com");
test_host_n_port.port = 47808;
Network_Port_Remote_BBMD_Address_Set(
object_instance, &test_host_n_port);
Network_Port_Remote_BBMD_Address(object_instance, &host_n_port);
zassert_false(host_n_port.host_ip_address, NULL);
zassert_true(host_n_port.host_name, NULL);
zassert_equal(host_n_port.port, 47808, NULL);
status =
Network_Port_Remote_BBMD_BIP6_Lifetime_Set(object_instance, 60);
zassert_true(status, NULL);
@@ -226,8 +331,21 @@ static void test_network_port(void)
status = Network_Port_IPv6_Multicast_Address_Set(
object_instance, address);
zassert_true(status, NULL);
status = Network_Port_IP_DHCP_Enable_Set(object_instance, true);
zassert_true(status, NULL);
status = Network_Port_IP_DHCP_Enable(object_instance);
zassert_true(status, NULL);
Network_Port_IP_DHCP_Lease_Time_Set(object_instance, 60);
zassert_equal(
Network_Port_IP_DHCP_Lease_Time(object_instance), 60, NULL);
zassert_equal(
Network_Port_IP_DHCP_Lease_Time_Remaining(object_instance), 60,
NULL);
status =
Network_Port_IPv6_DHCP_Server_Set(object_instance, address);
octetstring_init(&ip_address, address, sizeof(address));
status =
Network_Port_IP_DHCP_Server_Set(object_instance, &ip_address);
zassert_true(status, NULL);
status = Network_Port_BIP6_Port_Set(object_instance, 47808);
zassert_true(status, NULL);
@@ -257,7 +375,10 @@ static void test_network_port(void)
Network_Port_Object_Name_ASCII);
port++;
Network_Port_Changes_Activate();
zassert_false(Network_Port_Changes_Pending(object_instance), NULL);
Network_Port_Changes_Pending_Set(object_instance, true);
Network_Port_Changes_Discard();
zassert_false(Network_Port_Changes_Pending(object_instance), NULL);
Network_Port_Cleanup();
}