C2: Validate MAC network IDs

This commit is contained in:
David Rebbe
2026-07-21 13:30:21 -04:00
committed by Kyle Schwarz
parent aff547b738
commit 77a886bbe0
4 changed files with 35 additions and 4 deletions
+7 -2
View File
@@ -5,6 +5,7 @@
#include "icsneo/device/devicefinder.h"
#include "icsneo/icsneocpp.h"
#include "icsneo/communication/io.h"
#include "icsneo/communication/network.h"
#include <string>
#include <vector>
@@ -505,14 +506,18 @@ icsneoc2_error_t icsneoc2_device_mac_addresses_enumerate(const icsneoc2_device_t
}
tail = node;
}
*mac_entries = head;
return icsneoc2_error_success;
}
icsneoc2_error_t icsneoc2_mac_network_id_get(const icsneoc2_mac_addr_entry_t* mac_address, _icsneoc2_netid_t* network_id) {
icsneoc2_error_t icsneoc2_mac_network_id_get(const icsneoc2_mac_addr_entry_t* mac_address, icsneoc2_netid_t* network_id) {
if(!mac_address || !network_id) {
return icsneoc2_error_invalid_parameters;
}
*network_id = static_cast<_icsneoc2_netid_t>(mac_address->network_id);
const auto netid = static_cast<Network::NetID>(mac_address->network_id);
*network_id = Network::GetCoreMiniNetworkFromNetID(netid).has_value()
? mac_address->network_id
: static_cast<icsneoc2_netid_t>(icsneoc2_netid_invalid);
return icsneoc2_error_success;
}
+1 -1
View File
@@ -112,7 +112,7 @@ int main() {
}
printf("MACs: %u entr%s\n", mac_count, mac_count == 1 ? "y" : "ies");
for(icsneoc2_mac_addr_entry_t* cur = macs; cur; cur = icsneoc2_mac_addresses_next(cur)) {
_icsneoc2_netid_t network_id;
icsneoc2_netid_t network_id;
icsneoc2_mac_network_id_get(cur, &network_id);
printf(" Network %-5u ", (unsigned)network_id);
uint8_t address[6];
+2 -1
View File
@@ -372,10 +372,11 @@ icsneoc2_error_t icsneoc2_device_mac_addresses_enumerate(const icsneoc2_device_t
*
* @param[in] mac_address The MAC address object to get the network ID of.
* @param[out] network_id Pointer to an icsneoc2_netid_t to copy the network ID into.
* Unrecognized values are normalized to icsneoc2_netid_invalid.
*
* @return icsneoc2_error_t icsneoc2_error success if successful, icsneoc2_error_invalid_parameters on failure.
*/
icsneoc2_error_t icsneoc2_mac_network_id_get(const icsneoc2_mac_addr_entry_t* mac_address, _icsneoc2_netid_t* network_id);
icsneoc2_error_t icsneoc2_mac_network_id_get(const icsneoc2_mac_addr_entry_t* mac_address, icsneoc2_netid_t* network_id);
/**
* Get the MAC Address bytes of a MAC address.
+25
View File
@@ -2153,3 +2153,28 @@ TEST(icsneoc2, test_gptp_enum_alignment)
ASSERT_EQ(sizeof(RADGPTPRole), sizeof(icsneoc2_gptp_role_t));
}
TEST(icsneoc2, test_mac_network_id_get)
{
icsneoc2_mac_addr_entry_t entry {};
icsneoc2_netid_t network_id = 0;
entry.network_id = icsneoc2_netid_ethernet_01;
ASSERT_EQ(icsneoc2_error_success, icsneoc2_mac_network_id_get(&entry, &network_id));
ASSERT_EQ(icsneoc2_netid_ethernet_01, network_id);
entry.network_id = 43;
network_id = 0;
ASSERT_EQ(icsneoc2_error_success, icsneoc2_mac_network_id_get(&entry, &network_id));
ASSERT_EQ(icsneoc2_netid_invalid, network_id);
entry.network_id = icsneoc2_netid_invalid;
network_id = 0;
ASSERT_EQ(icsneoc2_error_success, icsneoc2_mac_network_id_get(&entry, &network_id));
ASSERT_EQ(icsneoc2_netid_invalid, network_id);
ASSERT_EQ(icsneoc2_error_invalid_parameters,
icsneoc2_mac_network_id_get(nullptr, &network_id));
ASSERT_EQ(icsneoc2_error_invalid_parameters,
icsneoc2_mac_network_id_get(&entry, nullptr));
}