diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index b52a5f2e26..d7fbb6eac5 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -471,8 +471,8 @@ static void log_address_debug(const Address *address, const char *str, const Lin if (DEBUG_LOGGING) { _cleanup_free_ char *addr = NULL, *peer = NULL; - char valid_buf[FORMAT_TIMESPAN_MAX]; - const char *valid_str = NULL; + char valid_buf[FORMAT_TIMESPAN_MAX], preferred_buf[FORMAT_TIMESPAN_MAX]; + const char *valid_str = NULL, *preferred_str = NULL; bool has_peer; (void) in_addr_to_string(address->family, &address->in_addr, &addr); @@ -485,10 +485,16 @@ static void log_address_debug(const Address *address, const char *str, const Lin address->cinfo.ifa_valid * USEC_PER_SEC, USEC_PER_SEC); - log_link_debug(link, "%s address: %s%s%s/%u (valid %s%s)", + if (address->cinfo.ifa_prefered != CACHE_INFO_INFINITY_LIFE_TIME) + preferred_str = format_timespan(preferred_buf, FORMAT_TIMESPAN_MAX, + address->cinfo.ifa_prefered * USEC_PER_SEC, + USEC_PER_SEC); + + log_link_debug(link, "%s address: %s%s%s/%u (valid %s%s, preferred %s%s)", str, strnull(addr), has_peer ? " peer " : "", has_peer ? strnull(peer) : "", address->prefixlen, - valid_str ? "for " : "forever", strempty(valid_str)); + valid_str ? "for " : "forever", strempty(valid_str), + preferred_str ? "for " : "forever", strempty(preferred_str)); } } @@ -799,12 +805,12 @@ int address_configure( const Address *address, Link *link, link_netlink_message_handler_t callback, - bool update, Address **ret) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL; Address *acquired_address, *a; uint32_t flags; + bool update; int r; assert(address); @@ -827,6 +833,8 @@ int address_configure( if (acquired_address) address = acquired_address; + update = address_get(link, address, NULL) >= 0; + log_address_debug(address, update ? "Updating" : "Configuring", link); if (update) @@ -988,14 +996,14 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) return 1; } -static int static_address_configure(const Address *address, Link *link, bool update) { +static int static_address_configure(const Address *address, Link *link) { Address *ret; int r; assert(address); assert(link); - r = address_configure(address, link, address_handler, update, &ret); + r = address_configure(address, link, address_handler, &ret); if (r < 0) return log_link_warning_errno(link, r, "Could not configure static address: %m"); @@ -1030,10 +1038,7 @@ int link_set_addresses(Link *link) { } ORDERED_HASHMAP_FOREACH(ad, link->network->addresses_by_section) { - bool update; - - update = address_get(link, ad, NULL) > 0; - r = static_address_configure(ad, link, update); + r = static_address_configure(ad, link); if (r < 0) return r; } @@ -1057,7 +1062,7 @@ int link_set_addresses(Link *link) { return log_link_warning_errno(link, r, "Could not generate EUI64 address: %m"); address->family = AF_INET6; - r = static_address_configure(address, link, true); + r = static_address_configure(address, link); if (r < 0) return r; } diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index 4764766996..7c2d0db3d0 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -49,7 +49,7 @@ typedef struct Address { int address_new(Address **ret); Address *address_free(Address *address); int address_get(Link *link, const Address *in, Address **ret); -int address_configure(const Address *address, Link *link, link_netlink_message_handler_t callback, bool update, Address **ret); +int address_configure(const Address *address, Link *link, link_netlink_message_handler_t callback, Address **ret); int address_remove(const Address *address, Link *link, link_netlink_message_handler_t callback); bool address_equal(const Address *a1, const Address *a2); bool address_is_ready(const Address *a); diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index bbdd31a93d..1559e0cfd8 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -870,7 +870,7 @@ static int dhcp4_update_address(Link *link, bool announce) { /* allow reusing an existing address and simply update its lifetime * in case it already exists */ - r = address_configure(addr, link, dhcp4_address_handler, true, &ret); + r = address_configure(addr, link, dhcp4_address_handler, &ret); if (r < 0) return log_link_error_errno(link, r, "Failed to set DHCPv4 address: %m"); diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index e643a92247..451b552345 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -391,7 +391,7 @@ static int dhcp6_set_pd_address( address->cinfo.ifa_valid = lifetime_valid; SET_FLAG(address->flags, IFA_F_MANAGETEMPADDR, link->network->dhcp6_pd_manage_temporary_address); - r = address_configure(address, link, dhcp6_pd_address_handler, true, &ret); + 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"); @@ -1034,7 +1034,7 @@ static int dhcp6_update_address( log_dhcp6_address(link, addr, &buffer); - r = address_configure(addr, link, dhcp6_address_handler, true, &ret); + r = address_configure(addr, link, dhcp6_address_handler, &ret); if (r < 0) return log_link_error_errno(link, r, "Failed to set DHCPv6 address %s/%u: %m", strnull(buffer), addr->prefixlen); diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index 7e1c1ac16e..65266633e3 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -92,7 +92,7 @@ static int ipv4ll_address_claimed(sd_ipv4ll *ll, Link *link) { ll_addr->broadcast.s_addr = ll_addr->in_addr.in.s_addr | htobe32(0xfffffffflu >> ll_addr->prefixlen); ll_addr->scope = RT_SCOPE_LINK; - r = address_configure(ll_addr, link, ipv4ll_address_handler, false, NULL); + r = address_configure(ll_addr, link, ipv4ll_address_handler, NULL); if (r < 0) return r; diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index bcde253909..47b35bd543 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -434,7 +434,7 @@ static int ndisc_address_configure(Address *address, Link *link, sd_ndisc_router assert(link); assert(rt); - r = address_configure(address, link, ndisc_address_handler, true, &ret); + r = address_configure(address, link, ndisc_address_handler, &ret); if (r < 0) return log_link_error_errno(link, r, "Failed to set NDisc SLAAC address: %m");