]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: move logic for setting proxy_ndp sysctl to networkd-sysctl.c
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 18 May 2021 05:00:48 +0000 (14:00 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 7 Jun 2021 21:33:27 +0000 (06:33 +0900)
src/network/networkd-ipv6-proxy-ndp.c
src/network/networkd-sysctl.c

index 897447a20cdb4f08a930c174a3f1612b358e5dfc..df96d8ac9ce5e0a132f5e91fed37ae1501b9df8f 100644 (file)
@@ -10,7 +10,6 @@
 #include "networkd-network.h"
 #include "socket-util.h"
 #include "string-util.h"
-#include "sysctl-util.h"
 
 void network_adjust_ipv6_proxy_ndp(Network *network) {
         assert(network);
@@ -70,40 +69,6 @@ static int ipv6_proxy_ndp_address_configure(Link *link, const struct in6_addr *a
         return 0;
 }
 
-static bool ipv6_proxy_ndp_is_needed(Link *link) {
-        assert(link);
-
-        if (link->flags & IFF_LOOPBACK)
-                return false;
-
-        if (!link->network)
-                return false;
-
-        if (link->network->ipv6_proxy_ndp >= 0)
-                return link->network->ipv6_proxy_ndp;
-
-        return !set_isempty(link->network->ipv6_proxy_ndp_addresses);
-}
-
-static int ipv6_proxy_ndp_set(Link *link) {
-        bool v;
-        int r;
-
-        assert(link);
-
-        if (!socket_ipv6_is_supported())
-                return 0;
-
-        v = ipv6_proxy_ndp_is_needed(link);
-
-        r = sysctl_write_ip_property_boolean(AF_INET6, link->ifname, "proxy_ndp", v);
-        if (r < 0)
-                return log_link_warning_errno(link, r, "Cannot configure proxy NDP for the interface, ignoring: %m");
-
-        return v;
-}
-
-/* configure all ipv6 proxy ndp addresses */
 int link_set_ipv6_proxy_ndp_addresses(Link *link) {
         struct in6_addr *address;
         int r;
@@ -111,11 +76,6 @@ int link_set_ipv6_proxy_ndp_addresses(Link *link) {
         assert(link);
         assert(link->network);
 
-        /* enable or disable proxy_ndp itself depending on whether ipv6_proxy_ndp_addresses are set or not */
-        r = ipv6_proxy_ndp_set(link);
-        if (r <= 0)
-                return 0;
-
         SET_FOREACH(address, link->network->ipv6_proxy_ndp_addresses) {
                 r = ipv6_proxy_ndp_address_configure(link, address);
                 if (r < 0)
index 11681286e0118fef414f6fcecb9690435e01e1d1..7ce92a17a4842acdbe88f19c0bc3b534dac3e41a 100644 (file)
@@ -161,6 +161,28 @@ static int link_set_ipv6_hop_limit(Link *link) {
         return sysctl_write_ip_property_int(AF_INET6, link->ifname, "hop_limit", link->network->ipv6_hop_limit);
 }
 
+static int link_set_ipv6_proxy_ndp(Link *link) {
+        bool v;
+
+        assert(link);
+
+        if (!socket_ipv6_is_supported())
+                return 0;
+
+        if (link->flags & IFF_LOOPBACK)
+                return 0;
+
+        if (!link->network)
+                return 0;
+
+        if (link->network->ipv6_proxy_ndp >= 0)
+                v = link->network->ipv6_proxy_ndp;
+        else
+                v = !set_isempty(link->network->ipv6_proxy_ndp_addresses);
+
+        return sysctl_write_ip_property_boolean(AF_INET6, link->ifname, "proxy_ndp", v);
+}
+
 static int link_set_ipv4_accept_local(Link *link) {
         assert(link);
 
@@ -224,6 +246,10 @@ int link_set_sysctl(Link *link) {
         if (r < 0)
                 log_link_warning_errno(link, r, "Cannot set IPv6 hop limit for interface, ignoring: %m");
 
+        r = link_set_ipv6_proxy_ndp(link);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Cannot set IPv6 proxy NDP, ignoring: %m");
+
         r = link_set_ipv4_accept_local(link);
         if (r < 0)
                 log_link_warning_errno(link, r, "Cannot set IPv4 accept_local flag for interface, ignoring: %m");