free(link->lease_file);
sd_ipv4ll_unref(link->ipv4ll);
-
sd_dhcp6_client_unref(link->dhcp6_client);
+ sd_icmp6_nd_unref(link->icmp6_router_discovery);
hashmap_remove(link->manager->links, &link->ifindex);
}
if (link->network->dhcp6) {
- assert(link->dhcp6_client);
+ assert(link->icmp6_router_discovery);
+
+ if (link->dhcp6_client) {
+ k = sd_dhcp6_client_stop(link->dhcp6_client);
+ if (k < 0) {
+ log_warning_link(link, "Could not stop DHCPv6 client: %s", strerror(-r));
+ r = k;
+ }
+ }
- k = sd_dhcp6_client_stop(link->dhcp6_client);
+ k = sd_icmp6_nd_stop(link->icmp6_router_discovery);
if (k < 0) {
- log_warning_link(link, "Could not stop DHCPv6 client: %s", strerror(-r));
+ log_warning_link(link, "Could not stop ICMPv6 router discovery: %s", strerror(-r));
r = k;
}
}
assert(link->network);
assert(link->state == LINK_STATE_SETTING_ROUTES);
- if (link->network->dhcp_server) {
+ if (link->network->dhcp_server &&
+ !sd_dhcp_server_is_running(link->dhcp_server)) {
struct in_addr pool_start;
Address *address;