From: Yu Watanabe Date: Fri, 16 Oct 2020 06:48:50 +0000 (+0900) Subject: network: drop static prefixes and static route prefixes earlier if IPv6PrefixDelegati... X-Git-Tag: v247-rc1~16^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8a08bbfc98663ee9979ce7dcd5f0f67ee6bc42dd;p=thirdparty%2Fsystemd.git network: drop static prefixes and static route prefixes earlier if IPv6PrefixDelegation=no or dhcpv6 --- diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index a6f8bcac145..ebb9d43371e 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -980,6 +980,7 @@ static int static_address_configure(const Address *address, Link *link, bool upd int link_set_addresses(Link *link) { Address *ad; + Prefix *p; int r; assert(link); @@ -1000,32 +1001,28 @@ int link_set_addresses(Link *link) { return r; } - if (link->network->router_prefix_delegation & RADV_PREFIX_DELEGATION_STATIC) { - Prefix *p; + HASHMAP_FOREACH(p, link->network->prefixes_by_section) { + _cleanup_(address_freep) Address *address = NULL; - HASHMAP_FOREACH(p, link->network->prefixes_by_section) { - _cleanup_(address_freep) Address *address = NULL; - - if (!p->assign) - continue; + if (!p->assign) + continue; - r = address_new(&address); - if (r < 0) - return log_oom(); + r = address_new(&address); + if (r < 0) + return log_oom(); - r = sd_radv_prefix_get_prefix(p->radv_prefix, &address->in_addr.in6, &address->prefixlen); - if (r < 0) - return log_link_warning_errno(link, r, "Could not get RA prefix: %m"); + r = sd_radv_prefix_get_prefix(p->radv_prefix, &address->in_addr.in6, &address->prefixlen); + if (r < 0) + return log_link_warning_errno(link, r, "Could not get RA prefix: %m"); - r = generate_ipv6_eui_64_address(link, &address->in_addr.in6); - if (r < 0) - return log_link_warning_errno(link, r, "Could not generate EUI64 address: %m"); + r = generate_ipv6_eui_64_address(link, &address->in_addr.in6); + if (r < 0) + return log_link_warning_errno(link, r, "Could not generate EUI64 address: %m"); - address->family = AF_INET6; - r = static_address_configure(address, link, true); - if (r < 0) - return r; - } + address->family = AF_INET6; + r = static_address_configure(address, link, true); + if (r < 0) + return r; } if (link->address_messages == 0) { diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 4fc207dce58..cb9e0262e68 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -195,6 +195,9 @@ void network_adjust_radv(Network *network) { network->n_router_dns = 0; network->router_dns = mfree(network->router_dns); network->router_search_domains = ordered_set_free(network->router_search_domains); + } + + if (!FLAGS_SET(network->router_prefix_delegation, RADV_PREFIX_DELEGATION_STATIC)) { network->prefixes_by_section = hashmap_free_with_destructor(network->prefixes_by_section, prefix_free); network->route_prefixes_by_section = hashmap_free_with_destructor(network->route_prefixes_by_section, route_prefix_free); } @@ -632,6 +635,8 @@ static bool link_radv_enabled(Link *link) { } int radv_configure(Link *link) { + RoutePrefix *q; + Prefix *p; int r; assert(link); @@ -678,29 +683,24 @@ int radv_configure(Link *link) { return r; } - if (link->network->router_prefix_delegation & RADV_PREFIX_DELEGATION_STATIC) { - RoutePrefix *q; - Prefix *p; - - HASHMAP_FOREACH(p, link->network->prefixes_by_section) { - r = sd_radv_add_prefix(link->radv, p->radv_prefix, false); - if (r == -EEXIST) - continue; - if (r == -ENOEXEC) { - log_link_warning_errno(link, r, "[IPv6Prefix] section configured without Prefix= setting, ignoring section."); - continue; - } - if (r < 0) - return r; + HASHMAP_FOREACH(p, link->network->prefixes_by_section) { + r = sd_radv_add_prefix(link->radv, p->radv_prefix, false); + if (r == -EEXIST) + continue; + if (r == -ENOEXEC) { + log_link_warning_errno(link, r, "[IPv6Prefix] section configured without Prefix= setting, ignoring section."); + continue; } + if (r < 0) + return r; + } - HASHMAP_FOREACH(q, link->network->route_prefixes_by_section) { - r = sd_radv_add_route_prefix(link->radv, q->radv_route_prefix, false); - if (r == -EEXIST) - continue; - if (r < 0) - return r; - } + HASHMAP_FOREACH(q, link->network->route_prefixes_by_section) { + r = sd_radv_add_route_prefix(link->radv, q->radv_route_prefix, false); + if (r == -EEXIST) + continue; + if (r < 0) + return r; } return 0;