@@ -101,7 +101,7 @@ static const struct interface_config *find_config_by_hwaddr(
for (i = 0; i < config->network.n_interfaces; i++) {
struct interface_config *ifconf = config->network.interfaces[i];
- if (!memcmp(ifconf->hwaddr, hwaddr, HWADDR_SIZE))
+ if (!hwaddr_cmp(ifconf->hwaddr, ifconf->hwaddr_len, hwaddr, hwaddr_len))
return ifconf;
}
@@ -618,8 +618,8 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg)
strncpy(interface->name, ifname, sizeof(interface->name) - 1);
list_for_each_entry(&network->interfaces, tmp, list)
- if (memcmp(interface->hwaddr, tmp->hwaddr,
- sizeof(interface->hwaddr)) == 0) {
+ if (hwaddr_cmp(interface->hwaddr, interface->hwaddr_len,
+ tmp->hwaddr, tmp->hwaddr_len) == 0) {
pb_log("%s: %s has duplicate MAC address, ignoring\n",
__func__, interface->name);
talloc_free(interface);
@@ -691,8 +691,8 @@ void network_mark_interface_ready(struct device_handler *handler,
strncpy(interface->name, ifname, sizeof(interface->name) - 1);
list_for_each_entry(&network->interfaces, tmp, list)
- if (memcmp(interface->hwaddr, tmp->hwaddr,
- sizeof(interface->hwaddr)) == 0) {
+ if (hwaddr_cmp(interface->hwaddr, interface->hwaddr_len,
+ tmp->hwaddr, tmp->hwaddr_len) == 0) {
pb_log("%s: %s has duplicate MAC address, ignoring\n",
__func__, interface->name);
talloc_free(interface);
@@ -716,7 +716,7 @@ void network_mark_interface_ready(struct device_handler *handler,
talloc_strdup(interface->dev->device, ifname);
}
- if (memcmp(interface->hwaddr, mac, hwsize) != 0) {
+ if (hwaddr_cmp(interface->hwaddr, interface->hwaddr_len, mac, hwsize) != 0) {
macstr = mac_bytes_to_string(interface, mac, hwsize);
pb_log("Warning - new MAC for interface %d does not match: %s\n",
ifindex, macstr);
@@ -5,6 +5,7 @@
#include <process/process.h>
#include <log/log.h>
+#include <util/util.h>
#include "discover-server.h"
#include "platform.h"
#include "sysinfo.h"
@@ -37,10 +38,7 @@ void system_info_set_interface_address(unsigned int hwaddr_size,
for (i = 0; i < sysinfo->n_interfaces; i++) {
if_info = sysinfo->interfaces[i];
- if (if_info->hwaddr_size != hwaddr_size)
- continue;
-
- if (memcmp(if_info->hwaddr, hwaddr, hwaddr_size))
+ if (hwaddr_cmp(if_info->hwaddr, if_info->hwaddr_size, hwaddr, hwaddr_size))
continue;
/* Found an existing interface. Notify clients if a new address
@@ -68,10 +66,7 @@ void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr,
if_info = sysinfo->interfaces[i];
- if (if_info->hwaddr_size != hwaddr_size)
- continue;
-
- if (memcmp(if_info->hwaddr, hwaddr, hwaddr_size))
+ if (hwaddr_cmp(if_info->hwaddr, if_info->hwaddr_size, hwaddr, hwaddr_size))
continue;
/* Found an existing interface. Notify clients on any name or
@@ -29,6 +29,7 @@
#include <log/log.h>
#include <i18n/i18n.h>
+#include <util/util.h>
#include "nc-cui.h"
#include "nc-config.h"
#include "nc-widgets.h"
@@ -988,8 +989,8 @@ static void config_screen_setup_widgets(struct config_screen *screen,
char str[50], mac[20];
bool is_default;
- is_default = ifcfg && !memcmp(ifcfg->hwaddr, info->hwaddr,
- sizeof(ifcfg->hwaddr));
+ is_default = ifcfg && !hwaddr_cmp(ifcfg->hwaddr, ifcfg->hwaddr_len, info->hwaddr,
+ info->hwaddr_size);
mac_str(info->hwaddr, info->hwaddr_size, mac, sizeof(mac));
snprintf(str, sizeof(str), "%s [%s, %s]", info->name, mac,
Since hwaddr fields may store hardware addresses of different lengths, it's necessary to use hwaddr_cmp which will compare lengths before comparing contents. In some cases this was already done but the helper has been substituted for consistency. Signed-off-by: Daniel M. Weeks <weeksd2@rpi.edu> --- discover/network.c | 12 ++++++------ discover/sysinfo.c | 11 +++-------- ui/ncurses/nc-config.c | 5 +++-- 3 files changed, 12 insertions(+), 16 deletions(-)