]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: drop static prefixes and static route prefixes earlier if IPv6PrefixDelegati...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 16 Oct 2020 06:48:50 +0000 (15:48 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 19 Oct 2020 01:09:38 +0000 (10:09 +0900)
src/network/networkd-address.c
src/network/networkd-radv.c

index a6f8bcac145bbabe5f410e78d3cffeb2aed6ae5c..ebb9d43371eff748a5feb09ccdcc2d8ed8d22dc3 100644 (file)
@@ -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) {
index 4fc207dce585b8aa893bbd85f3a28de4f2229c21..cb9e0262e68cd3121ceb27630831c64ee00ff17d 100644 (file)
@@ -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;