mirror of
https://github.com/systemd/systemd
synced 2025-10-06 00:13:24 +02:00
network/dhcp6: refactoring for verify_dhcp6_address()
No functional change. Preparation for later changes.
This commit is contained in:
@@ -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);
|
||||
Address *existing = NULL;
|
||||
(void) address_get_harder(link, address, &existing);
|
||||
|
||||
if (address_get_harder(link, address, &existing) < 0) {
|
||||
/* New address. */
|
||||
log_level = LOG_INFO;
|
||||
goto simple_log;
|
||||
} else
|
||||
log_level = LOG_DEBUG;
|
||||
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 (address_can_update(existing, address))
|
||||
goto simple_log;
|
||||
bool by_ndisc = existing->source == NETWORK_CONFIG_SOURCE_NDISC;
|
||||
|
||||
if (existing->source == NETWORK_CONFIG_SOURCE_NDISC)
|
||||
by_ndisc = true;
|
||||
|
||||
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(
|
||||
|
Reference in New Issue
Block a user