]> git.ozlabs.org Git - petitboot/blobdiff - discover/network.c
ui: add URL for static configurations to load a specified file
[petitboot] / discover / network.c
index 3946694615fd4d931352610fd8abbafafd8a8264..f763687f8b53bbb8c57b14f1c0abe63e171e147b 100644 (file)
@@ -336,7 +336,8 @@ static void configure_interface_dhcp(struct interface *interface)
        return;
 }
 
        return;
 }
 
-static void configure_interface_static(struct interface *interface,
+static void configure_interface_static(struct network *network,
+               struct interface *interface,
                const struct interface_config *config)
 {
        int rc;
                const struct interface_config *config)
 {
        int rc;
@@ -370,6 +371,12 @@ static void configure_interface_static(struct interface *interface,
                                interface->name);
        }
 
                                interface->name);
        }
 
+       if (config->static_config.url) {
+               pb_log("config URL %s\n", config->static_config.url);
+               device_handler_process_url(network->handler,
+                               config->static_config.url);
+       }
+
        return;
 }
 
        return;
 }
 
@@ -438,7 +445,7 @@ static void configure_interface(struct network *network,
                configure_interface_dhcp(interface);
 
        } else if (config->method == CONFIG_METHOD_STATIC) {
                configure_interface_dhcp(interface);
 
        } else if (config->method == CONFIG_METHOD_STATIC) {
-               configure_interface_static(interface, config);
+               configure_interface_static(network, interface, config);
        }
 }
 
        }
 }
 
@@ -510,6 +517,15 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg)
                add_interface(network, interface);
        }
 
                add_interface(network, interface);
        }
 
+       /* A repeated RTM_NEWLINK can represent an interface name change */
+       if (strncmp(interface->name, ifname, IFNAMSIZ)) {
+               pb_debug("ifname update: %s -> %s\n", interface->name, ifname);
+               strncpy(interface->name, ifname, sizeof(interface->name) - 1);
+               talloc_free(interface->dev->device->id);
+               interface->dev->device->id =
+                       talloc_strdup(interface->dev->device, ifname);
+       }
+
        /* notify the sysinfo code about changes to this interface */
        if (strcmp(interface->name, "lo"))
                system_info_register_interface(
        /* notify the sysinfo code about changes to this interface */
        if (strcmp(interface->name, "lo"))
                system_info_register_interface(