network: dhcp6: change link state into "configuring" only when a new address or route will be assigned

This commit is contained in:
Yu Watanabe
2021-02-12 22:44:05 +09:00
parent 24b445c2ce
commit 111ce98419
+8 -5
View 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)