network: introduce own address handler for dhcp6 delegated prefix

Fixes #16365.
This commit is contained in:
Yu Watanabe
2020-07-07 19:48:26 +02:00
committed by Zbigniew Jędrzejewski-Szmek
parent 0da425df65
commit a211ff4b84
+26 -3
View File
@@ -998,6 +998,31 @@ static int dhcp6_prefix_remove_all(Manager *m, Link *link) {
return 0;
}
static int dhcp6_assign_delegeted_prefix_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
assert(link);
if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
return 1;
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
log_link_message_warning_errno(link, m, r, "Could not set DHCPv6 delegated prefix address ");
link_enter_failed(link);
return 1;
} else if (r >= 0)
(void) manager_rtnl_process_address(rtnl, m, link->manager);
r = link_request_set_routes(link);
if (r < 0) {
link_enter_failed(link);
return 1;
}
return 1;
}
static int dhcp6_assign_delegated_prefix(Link *link,
const struct in6_addr *prefix,
uint8_t prefix_len,
@@ -1035,11 +1060,9 @@ static int dhcp6_assign_delegated_prefix(Link *link,
link_set_state(link, LINK_STATE_CONFIGURING);
r = address_configure(address, link, address_handler, true);
r = address_configure(address, link, dhcp6_assign_delegeted_prefix_address_handler, true);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to set acquired DHCPv6 delegated prefix address: %m");
if (r > 0)
link->address_messages++;
return 0;
}