X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fnetwork.c;h=60d1f6e0f4e1790ba4b2bb2b18bd3a7b81efe70b;hp=c300f3dc7719619aa6092df5b476837ff8177b74;hb=ae3c354e844698bdb4ed35a6845aa9dca1e9205f;hpb=a984595cfb4910ba6f464c69c316f1613f10f894 diff --git a/discover/network.c b/discover/network.c index c300f3d..60d1f6e 100644 --- a/discover/network.c +++ b/discover/network.c @@ -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) { @@ -220,6 +229,7 @@ static void configure_interface_dhcp(struct interface *interface) pb_system_apps.udhcpc, "-R", "-n", + "-f", "-O", "pxeconffile", "-O", "pxepathprefix", "-p", pidfile, @@ -533,7 +543,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 +594,6 @@ err: return NULL; } - int network_shutdown(struct network *network) { struct interface *interface;