discover/network: leave udhcpc processes running
[petitboot] / discover / network.c
index c300f3dc7719619aa6092df5b476837ff8177b74..1801710773b975106e43d6592de4a85d8ad55322 100644 (file)
@@ -181,6 +181,15 @@ static int interface_change(struct interface *interface, bool up)
                process_release(interface->udhcpc_process);
        }
 
+       if (!up) {
+               rc = process_run_simple(interface, pb_system_apps.ip,
+                               "address", "flush", "dev", interface->name,
+                               NULL);
+               if (rc)
+                       pb_log("failed to flush addresses from interface %s\n",
+                               interface->name);
+       }
+
        rc = process_run_simple(interface, pb_system_apps.ip,
                        "link", "set", interface->name, statestr, NULL);
        if (rc) {
@@ -219,7 +228,7 @@ static void configure_interface_dhcp(struct interface *interface)
        const char *argv[] = {
                pb_system_apps.udhcpc,
                "-R",
-               "-n",
+               "-f",
                "-O", "pxeconffile",
                "-O", "pxepathprefix",
                "-p", pidfile,
@@ -533,7 +542,7 @@ static void network_init_dns(struct network *network)
                buf = talloc_realloc(network, buf, char, len + dns_conf_len + 1);
                memcpy(buf + len, dns_conf, dns_conf_len);
                len += dns_conf_len;
-               buf[len - 1] = '\0';
+               buf[len] = '\0';
                modified = true;
 
                talloc_free(dns_conf);
@@ -584,7 +593,6 @@ err:
        return NULL;
 }
 
-
 int network_shutdown(struct network *network)
 {
        struct interface *interface;