network: drop static prefixes and static route prefixes earlier if IPv6PrefixDelegation=no or dhcpv6
This commit is contained in:
parent
db5756f3f3
commit
8a08bbfc98
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue