From 111ce984190f98de24a1a3b83b259827bb23fc69 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 4 Feb 2021 01:00:59 +0900 Subject: [PATCH] network: dhcp6: change link state into "configuring" only when a new address or route will be assigned --- src/network/networkd-dhcp6.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 0498d5af56d..326c9f3fcf3 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -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) -- 2.47.3