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,
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);
int link_stop_clients(Link *link, bool may_keep_dhcp) {
int r = 0, k;
- Address *ad;
assert(link);
assert(link->manager);
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);