]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: dhcp6: change link state into "configuring" only when a new address or route... 18455/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 3 Feb 2021 16:00:59 +0000 (01:00 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 Feb 2021 13:44:05 +0000 (22:44 +0900)
src/network/networkd-dhcp6.c

index 0498d5af56d478a778bc10ea39fa69fca7576856..326c9f3fcf356a85a197251262c3810c53221199 100644 (file)
@@ -281,6 +281,8 @@ static int dhcp6_set_pd_route(Link *link, const union in_addr_union *prefix, con
         r = route_configure(route, link, dhcp6_pd_route_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv6 prefix route: %m");
+        if (r > 0)
+                link->dhcp6_pd_route_configured = false;
 
         link->dhcp6_pd_route_messages++;
 
@@ -394,6 +396,8 @@ static int dhcp6_set_pd_address(
         r = address_configure(address, link, dhcp6_pd_address_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv6 delegated prefix address: %m");
+        if (r > 0)
+                link->dhcp6_pd_address_configured = false;
 
         link->dhcp6_pd_address_messages++;
 
@@ -576,8 +580,6 @@ static int dhcp6_pd_prepare(Link *link) {
         if (!link_dhcp6_pd_is_enabled(link))
                 return 0;
 
-        link->dhcp6_pd_address_configured = false;
-        link->dhcp6_pd_route_configured = false;
         link->dhcp6_pd_prefixes_assigned = true;
 
         while ((address = set_steal_first(link->dhcp6_pd_addresses))) {
@@ -816,6 +818,8 @@ static int dhcp6_set_unreachable_route(Link *link, const union in_addr_union *ad
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set unreachable route for DHCPv6 delegated subnet %s/%u: %m",
                                             strna(buf), prefixlen);
+        if (r > 0)
+                link->dhcp6_route_configured = false;
 
         link->dhcp6_route_messages++;
 
@@ -1038,6 +1042,8 @@ static int dhcp6_update_address(
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv6 address %s/%u: %m",
                                             strnull(buffer), addr->prefixlen);
+        if (r > 0)
+                link->dhcp6_address_configured = false;
 
         link->dhcp6_address_messages++;
 
@@ -1103,9 +1109,6 @@ static int dhcp6_lease_ip_acquired(sd_dhcp6_client *client, Link *link) {
         Route *rt;
         int r;
 
-        link->dhcp6_address_configured = false;
-        link->dhcp6_route_configured = false;
-
         while ((a = set_steal_first(link->dhcp6_addresses))) {
                 r = set_ensure_put(&link->dhcp6_addresses_old, &address_hash_ops, a);
                 if (r < 0)