]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: do not restart radv engine when adding prefix 16383/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 7 Jul 2020 02:19:49 +0000 (11:19 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 7 Jul 2020 02:20:35 +0000 (11:20 +0900)
Replaces d469cea3bde53bc39317c8b433c825bb4790cbe5.

src/network/networkd-dhcp6.c
src/network/networkd-radv.c
src/network/networkd-radv.h

index 4e49a3c5fc75a1abab1baa0305e6cac535df8c32..ad90c0badc3e21b180fd7b859d251a444f0d1865 100644 (file)
@@ -6,7 +6,6 @@
 #include <netinet/in.h>
 #include <linux/if.h>
 #include <linux/if_arp.h>
-#include "sd-radv.h"
 
 #include "sd-dhcp6-client.h"
 
@@ -18,6 +17,7 @@
 #include "networkd-dhcp6.h"
 #include "networkd-link.h"
 #include "networkd-manager.h"
+#include "networkd-radv.h"
 #include "siphash24.h"
 #include "string-table.h"
 #include "string-util.h"
@@ -167,34 +167,12 @@ static int dhcp6_pd_prefix_assign(Link *link, struct in6_addr *prefix,
                                   uint8_t prefix_len,
                                   uint32_t lifetime_preferred,
                                   uint32_t lifetime_valid) {
-        sd_radv *radv = link->radv;
         int r;
-        _cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
 
-        r = sd_radv_prefix_new(&p);
+        r = radv_add_prefix(link, prefix, prefix_len, lifetime_preferred, lifetime_valid);
         if (r < 0)
                 return r;
 
-        r = sd_radv_prefix_set_prefix(p, prefix, prefix_len);
-        if (r < 0)
-                return r;
-
-        r = sd_radv_prefix_set_preferred_lifetime(p, lifetime_preferred);
-        if (r < 0)
-                return r;
-
-        r = sd_radv_prefix_set_valid_lifetime(p, lifetime_valid);
-        if (r < 0)
-                return r;
-
-        r = sd_radv_stop(radv);
-        if (r < 0)
-                return r;
-
-        r = sd_radv_add_prefix(radv, p, true);
-        if (r < 0 && r != -EEXIST)
-                return r;
-
         r = dhcp6_prefix_add(link->manager, prefix, link);
         if (r < 0)
                 return r;
@@ -205,7 +183,7 @@ static int dhcp6_pd_prefix_assign(Link *link, struct in6_addr *prefix,
                         return r;
         }
 
-        return sd_radv_start(radv);
+        return 0;
 }
 
 static int dhcp6_route_remove_handler(sd_netlink *nl, sd_netlink_message *m, Link *link) {
index f5f8ec65ed7d4980820dadd8c7a9e93b728d7557..d52aadecfa2a65912ca8fd64093189324badb68b 100644 (file)
@@ -672,6 +672,37 @@ int radv_configure(Link *link) {
         return 0;
 }
 
+int radv_add_prefix(Link *link, struct in6_addr *prefix, uint8_t prefix_len,
+                    uint32_t lifetime_preferred, uint32_t lifetime_valid) {
+        _cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
+        int r;
+
+        assert(link);
+        assert(link->radv);
+
+        r = sd_radv_prefix_new(&p);
+        if (r < 0)
+                return r;
+
+        r = sd_radv_prefix_set_prefix(p, prefix, prefix_len);
+        if (r < 0)
+                return r;
+
+        r = sd_radv_prefix_set_preferred_lifetime(p, lifetime_preferred);
+        if (r < 0)
+                return r;
+
+        r = sd_radv_prefix_set_valid_lifetime(p, lifetime_valid);
+        if (r < 0)
+                return r;
+
+        r = sd_radv_add_prefix(link->radv, p, true);
+        if (r < 0 && r != -EEXIST)
+                return r;
+
+        return 0;
+}
+
 int config_parse_radv_dns(
                 const char *unit,
                 const char *filename,
index b115243ef5c0c4ac0849e927980f8fd32b4c9816..741aa8692f040540ed91bd8866e9e57faf78ba59 100644 (file)
@@ -52,6 +52,8 @@ DEFINE_NETWORK_SECTION_FUNCTIONS(RoutePrefix, route_prefix_free);
 
 int radv_emit_dns(Link *link);
 int radv_configure(Link *link);
+int radv_add_prefix(Link *link, struct in6_addr *prefix, uint8_t prefix_len,
+                    uint32_t lifetime_preferred, uint32_t lifetime_valid);
 
 const char* radv_prefix_delegation_to_string(RADVPrefixDelegation i) _const_;
 RADVPrefixDelegation radv_prefix_delegation_from_string(const char *s) _pure_;