]> git.ozlabs.org Git - petitboot/blobdiff - discover/network.c
sysinfo: Add interface link status to sysinfo data
[petitboot] / discover / network.c
index 87075fcf91925666ed2b8c13757d13dff45b59fc..7ddecc03b658a59e88e00bfcf9156114ca7f13c6 100644 (file)
@@ -69,7 +69,7 @@ static const struct interface_config *find_config_by_hwaddr(
                uint8_t *hwaddr)
 {
        const struct config *config;
-       int i;
+       unsigned int i;
 
        config = config_get();
        if (!config)
@@ -219,6 +219,7 @@ static void configure_interface_dhcp(struct interface *interface)
                pb_system_apps.udhcpc,
                "-R",
                "-n",
+               "-O", "pxeconffile",
                "-p", pidfile,
                "-i", interface->name,
                NULL,
@@ -415,14 +416,15 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg)
                memcpy(interface->hwaddr, ifaddr, sizeof(interface->hwaddr));
                strncpy(interface->name, ifname, sizeof(interface->name) - 1);
                add_interface(network, interface);
-
-               /* tell the sysinfo code about this interface */
-               if (strcmp(interface->name, "lo"))
-                       system_info_register_interface(
-                                       sizeof(interface->hwaddr),
-                                       interface->hwaddr, interface->name);
        }
 
+       /* notify the sysinfo code about changes to this interface */
+       if (strcmp(interface->name, "lo"))
+               system_info_register_interface(
+                               sizeof(interface->hwaddr),
+                               interface->hwaddr, interface->name,
+                               info->ifi_flags & IFF_LOWER_UP);
+
        configure_interface(network, interface,
                        info->ifi_flags & IFF_UP,
                        info->ifi_flags & IFF_LOWER_UP);
@@ -484,7 +486,8 @@ retry:
 static void network_init_dns(struct network *network)
 {
        const struct config *config;
-       int i, rc, len;
+       unsigned int i;
+       int rc, len;
        bool modified;
        char *buf;
 
@@ -545,8 +548,8 @@ struct network *network_init(struct device_handler *handler,
        network = talloc(handler, struct network);
        list_init(&network->interfaces);
        network->handler = handler;
-       network->manual_config = false;
        network->dry_run = dry_run;
+       network->manual_config = config_get()->network.n_interfaces != 0;
 
        network_init_dns(network);