}
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(