]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/dhcp6: refactoring for verify_dhcp6_address()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 20 Jun 2025 18:48:51 +0000 (03:48 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 25 Jun 2025 17:17:42 +0000 (18:17 +0100)
No functional change. Preparation for later changes.

(cherry picked from commit 03f0658460964bcc63b5194b69885b1dbf33f77d)
(cherry picked from commit 97d34af16068ba3a3d25f628cf620e2997738947)

src/network/networkd-dhcp6.c

index 4815b8b7df4d0ef593cc1242d4a3dd8c4077c173..19deb103c63bf5b71cf3fabcf342716bed985540 100644 (file)
@@ -143,46 +143,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(