From: Yu Watanabe Date: Fri, 2 Oct 2020 03:12:25 +0000 (+0900) Subject: network: introduce link_stop_ipv4_dad() X-Git-Tag: v247-rc1~117^2~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2488e4d934ddc7ea2c8a743ab7a93ad88ee34fe5;p=thirdparty%2Fsystemd.git network: introduce link_stop_ipv4_dad() --- diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index 5fa3bf50c8f..3f985c849f4 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -1379,6 +1379,27 @@ int link_configure_ipv4_dad(Link *link) { return 0; } +int link_stop_ipv4_dad(Link *link) { + Address *address; + int k, r = 0; + + assert(link); + + if (!link->network) + return 0; + + LIST_FOREACH(addresses, address, link->network->static_addresses) { + if (!address->acd) + continue; + + k = sd_ipv4acd_stop(address->acd); + if (k < 0 && r >= 0) + r = k; + } + + return r; +} + int config_parse_broadcast( const char *unit, const char *filename, diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index 658ef1baca8..a78fadc885c 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -79,6 +79,7 @@ int link_drop_foreign_addresses(Link *link); int link_serialize_addresses(Link *link, FILE *f); int link_deserialize_addresses(Link *link, const char *addresses); int link_configure_ipv4_dad(Link *link); +int link_stop_ipv4_dad(Link *link); int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, Manager *m); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 2896a1badad..dc6960b00b2 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -813,7 +813,6 @@ static void link_enter_unmanaged(Link *link) { int link_stop_clients(Link *link, bool may_keep_dhcp) { int r = 0, k; - Address *ad; assert(link); assert(link->manager); @@ -836,13 +835,9 @@ int link_stop_clients(Link *link, bool may_keep_dhcp) { r = log_link_warning_errno(link, k, "Could not stop IPv4 link-local: %m"); } - if (link->network) - LIST_FOREACH(addresses, ad, link->network->static_addresses) - if (ad->acd && sd_ipv4acd_is_running(ad->acd) == 0) { - k = sd_ipv4acd_stop(ad->acd); - if (k < 0) - r = log_link_warning_errno(link, k, "Could not stop IPv4 ACD client: %m"); - } + k = link_stop_ipv4_dad(link); + if (k < 0) + r = log_link_warning_errno(link, k, "Could not stop IPv4 ACD client: %m"); if (link->dhcp6_client) { k = sd_dhcp6_client_stop(link->dhcp6_client);