diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 6637e81c66..73b49a5ec0 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -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; } diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 053aa3b4ce..71e6976a30 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1184,7 +1184,7 @@ static int link_request_set_neighbors(Link *link) { return 0; } -int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { +static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { int r; assert(rtnl); diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index f53b9da2e3..f615e7e62d 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -220,7 +220,6 @@ int link_request_set_routes(Link *link); int link_request_set_nexthop(Link *link); int link_reconfigure(Link *link, bool force); -int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link); int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg); #define log_link_message_error_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_ERR, err, msg)