From: Yu Watanabe Date: Thu, 21 Oct 2021 08:54:06 +0000 (+0900) Subject: network: dhcp6pd: also call dhcp6_pd_prepare() and dhcp6_pd_finalize() for upstream... X-Git-Tag: v250-rc1~439^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a3ad6acf7b7a1cbec077e777ca603f0eb0ee5157;p=thirdparty%2Fsystemd.git network: dhcp6pd: also call dhcp6_pd_prepare() and dhcp6_pd_finalize() for upstream interface As now the subnet prefix may be assigned to the upstream interface. --- diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index b0ce0187f63..fb13027337f 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -844,12 +844,17 @@ static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) { return log_link_warning_errno(dhcp6_link, r, "Failed to get timestamp of DHCPv6 lease: %m"); HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) { - if (link == dhcp6_link) - continue; - r = dhcp6_pd_prepare(link); - if (r < 0) + if (r < 0) { + /* When failed on the upstream interface (i.e., the case link == dhcp6_link), + * immediately abort the assignment of the prefixes. As, the all assigned + * prefixes will be dropped soon in link_enter_failed(), and it is meaningless + * to continue the assignment. */ + if (link == dhcp6_link) + return r; + link_enter_failed(link); + } } for (sd_dhcp6_lease_reset_pd_prefix_iter(dhcp6_link->dhcp6_lease);;) { @@ -921,12 +926,13 @@ static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) { } HASHMAP_FOREACH(link, dhcp6_link->manager->links_by_index) { - if (link == dhcp6_link) - continue; - r = dhcp6_pd_finalize(link); - if (r < 0) + if (r < 0) { + if (link == dhcp6_link) + return r; + link_enter_failed(link); + } } return 0;