]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce link_stop_ipv4_dad()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Oct 2020 03:12:25 +0000 (12:12 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:50:50 +0000 (02:50 +0900)
src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-link.c

index 5fa3bf50c8fa5ce0422088c949991ef52df816db..3f985c849f414e1a627c19f36cba0b22edc78708 100644 (file)
@@ -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,
index 658ef1baca8336cc6792277923dc41f8780e2303..a78fadc885cfec31a790780bd7dc310491a647df 100644 (file)
@@ -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);
 
index 2896a1badaddaef82a43df5c3970d22e5c43d576..dc6960b00b2745757eba309393130242bc74d37d 100644 (file)
@@ -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);