X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fnetwork.c;fp=discover%2Fnetwork.c;h=8ca4561614f866fc1c45ef77f44ffc03c8c7fd85;hp=6ae44175ab134dd408f52060b20773b7e6884fbf;hb=58b86dca9e65824e8fd25df58794a88ac31ab01f;hpb=0e2792afaf5a2d576ed12b965468069819057c07 diff --git a/discover/network.c b/discover/network.c index 6ae4417..8ca4561 100644 --- a/discover/network.c +++ b/discover/network.c @@ -497,7 +497,7 @@ static void configure_interface(struct network *network, static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg) { bool have_ifaddr, have_ifname; - struct interface *interface; + struct interface *interface, *tmp; struct ifinfomsg *info; struct rtattr *attr; unsigned int mtu; @@ -562,6 +562,16 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg) interface->state = IFSTATE_NEW; memcpy(interface->hwaddr, ifaddr, sizeof(interface->hwaddr)); 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) { + pb_log("%s: %s has duplicate MAC address, ignoring\n", + __func__, interface->name); + talloc_free(interface); + return -1; + } + list_add(&network->interfaces, &interface->list); create_interface_dev(network, interface); }