summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
Diffstat (limited to 'discover')
-rw-r--r--discover/network.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/discover/network.c b/discover/network.c
index 2d606e4..eaf6d1b 100644
--- a/discover/network.c
+++ b/discover/network.c
@@ -138,6 +138,18 @@ static int network_send_link_query(struct network *network)
return 0;
}
+static void add_interface(struct network *network,
+ struct interface *interface)
+{
+ list_add(&network->interfaces, &interface->list);
+}
+
+static void remove_interface(struct interface *interface)
+{
+ list_remove(&interface->list);
+ talloc_free(interface);
+}
+
static int interface_change(struct interface *interface, bool up)
{
const char *statestr = up ? "up" : "down";
@@ -371,8 +383,7 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg)
if (!interface)
return 0;
pb_log("network: interface %s removed\n", interface->name);
- list_remove(&interface->list);
- talloc_free(interface);
+ remove_interface(interface);
return 0;
}
@@ -384,6 +395,7 @@ 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);
+ add_interface(network, interface);
}
configure_interface(network, interface,
OpenPOWER on IntegriCloud