discover/network: Manage network->interfaces with {add,remove}_interface
authorJeremy Kerr <jk@ozlabs.org>
Thu, 19 Sep 2013 13:55:06 +0000 (21:55 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Thu, 19 Sep 2013 13:55:06 +0000 (21:55 +0800)
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/network.c

index 2d606e4c1c563a1d522e41e8e0282e2ffb57a9fe..eaf6d1b4e3e9d6b4283ac6a534692f8098bd69d1 100644 (file)
@@ -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,