]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: dhcp6pd: check link state earlier before assigning prefixes to downstream 21082/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 21 Oct 2021 07:09:44 +0000 (16:09 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 22 Oct 2021 06:58:42 +0000 (15:58 +0900)
Also, narrow the acceptable range of the states.

src/network/networkd-dhcp6.c

index fb13027337fc65442c7add7205a378f3086ee87a..a92394554af1b6f41d6ddfafc316817d3ab12e7c 100644 (file)
@@ -547,13 +547,13 @@ static int dhcp6_pd_prefix_distribute(
                 _cleanup_free_ char *buf = NULL;
                 struct in6_addr assigned_prefix;
 
-                if (!link_dhcp6_pd_is_enabled(link))
+                if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                         continue;
 
-                if (link == dhcp6_link && !link->network->dhcp6_pd_assign)
+                if (!link_dhcp6_pd_is_enabled(link))
                         continue;
 
-                if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                if (link == dhcp6_link && !link->network->dhcp6_pd_assign)
                         continue;
 
                 if (assign_preferred_subnet_id != link_has_preferred_subnet_id(link))
@@ -581,7 +581,7 @@ static int dhcp6_pd_prefix_distribute(
 }
 
 static int dhcp6_pd_prepare(Link *link) {
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                 return 0;
 
         if (!link_dhcp6_pd_is_enabled(link))
@@ -596,7 +596,7 @@ static int dhcp6_pd_prepare(Link *link) {
 static int dhcp6_pd_finalize(Link *link) {
         int r;
 
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+        if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                 return 0;
 
         if (!link_dhcp6_pd_is_enabled(link))