From: Yu Watanabe Date: Fri, 20 Jun 2025 18:48:51 +0000 (+0900) Subject: network/dhcp6: refactoring for verify_dhcp6_address() X-Git-Tag: v258-rc1~264^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03f0658460964bcc63b5194b69885b1dbf33f77d;p=thirdparty%2Fsystemd.git network/dhcp6: refactoring for verify_dhcp6_address() No functional change. Preparation for later changes. --- diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 4806980993a..e8b9bc10579 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -155,46 +155,37 @@ static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques } static int verify_dhcp6_address(Link *link, const Address *address) { - bool by_ndisc = false; - Address *existing; - int log_level; - assert(link); assert(address); assert(address->family == AF_INET6); - const char *pretty = IN6_ADDR_TO_STRING(&address->in_addr.in6); - - if (address_get_harder(link, address, &existing) < 0) { - /* New address. */ - log_level = LOG_INFO; - goto simple_log; - } else - log_level = LOG_DEBUG; - - if (address_can_update(existing, address)) - goto simple_log; + Address *existing = NULL; + (void) address_get_harder(link, address, &existing); + + if (!existing || address_can_update(existing, address)) { + log_link_full(link, + /* Downgrade the log level if the address already exists or has been requested. */ + existing ? LOG_DEBUG : LOG_INFO, + "DHCPv6 address %s (valid %s, preferred %s)", + IN6_ADDR_PREFIX_TO_STRING(&address->in_addr.in6, address->prefixlen), + FORMAT_LIFETIME(address->lifetime_valid_usec), + FORMAT_LIFETIME(address->lifetime_preferred_usec)); + return 0; + } - if (existing->source == NETWORK_CONFIG_SOURCE_NDISC) - by_ndisc = true; + bool by_ndisc = existing->source == NETWORK_CONFIG_SOURCE_NDISC; - log_link_warning(link, "Ignoring DHCPv6 address %s/%u (valid %s, preferred %s) which conflicts with %s/%u%s.", - pretty, address->prefixlen, - FORMAT_LIFETIME(address->lifetime_valid_usec), - FORMAT_LIFETIME(address->lifetime_preferred_usec), - pretty, existing->prefixlen, - by_ndisc ? " assigned by NDisc" : ""); - if (by_ndisc) - log_link_warning(link, "Hint: use IPv6Token= setting to change the address generated by NDisc or set UseAutonomousPrefix=no."); + log_link_full(link, + LOG_WARNING, + "Ignoring DHCPv6 address %s (valid %s, preferred %s) which conflicts with %s%s.%s", + IN6_ADDR_PREFIX_TO_STRING(&address->in_addr.in6, address->prefixlen), + FORMAT_LIFETIME(address->lifetime_valid_usec), + FORMAT_LIFETIME(address->lifetime_preferred_usec), + IN6_ADDR_PREFIX_TO_STRING(&existing->in_addr.in6, existing->prefixlen), + by_ndisc ? " assigned by NDisc" : "", + by_ndisc ? "\nHint: use IPv6Token= setting to change the address generated by NDisc or set UseAutonomousPrefix=no." : ""); return -EEXIST; - -simple_log: - log_link_full(link, log_level, "DHCPv6 address %s/%u (valid %s, preferred %s)", - pretty, address->prefixlen, - FORMAT_LIFETIME(address->lifetime_valid_usec), - FORMAT_LIFETIME(address->lifetime_preferred_usec)); - return 0; } static int dhcp6_request_address(