]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Set accept_ra to "2" if enabled in config 1345/head
authorGeorg Müller <georgmueller@gmx.net>
Wed, 23 Sep 2015 08:27:45 +0000 (10:27 +0200)
committerGeorg Müller <georgmueller@gmx.net>
Wed, 23 Sep 2015 08:27:45 +0000 (10:27 +0200)
This causes the kernel to accept router advertisments even if
ip forwarding is enabled for this interface.

This fixes #1340.

src/network/networkd-link.c

index 86f1c3bb1a6a6c9f5edc57f2345c2555b59c09d5..05a1358eca960177204cd767db06e0e2ae3e4e4c 100644 (file)
@@ -1794,7 +1794,6 @@ static int link_set_ipv6_privacy_extensions(Link *link) {
 
 static int link_set_ipv6_accept_ra(Link *link) {
         const char *p = NULL, *v = NULL;
-        bool b;
         int r;
 
         /* Make this a NOP if IPv6 is not available */
@@ -1804,20 +1803,21 @@ static int link_set_ipv6_accept_ra(Link *link) {
         if (link->flags & IFF_LOOPBACK)
                 return 0;
 
-        /* if unset check the ip forwarding setting maintained for the interface
-         * and then set it to depending on that. enabled if local forwarding
-         * is disabled. disabled if local forwarding is enabled.
+        /* If unset use system default (enabled if local forwarding is disabled.
+         * disabled if local forwarding is enabled).
+         * If set, ignore or enforce RA independent of local forwarding state.
          */
         if (link->network->ipv6_accept_ra < 0) {
-                if (IN_SET(link->network->ip_forward, ADDRESS_FAMILY_YES, ADDRESS_FAMILY_IPV6))
-                        b = false;
-                else
-                        b = true;
-        } else
-                b = link->network->ipv6_accept_ra;
-
+                /* default to accept RA if ip_forward is disabled and ignore RA if ip_forward is enabled */
+                v = "1";
+        } else if (link->network->ipv6_accept_ra > 0) {
+                /* "2" means accept RA even if ip_forward is enabled */
+                v = "2";
+        } else {
+                /* "0" means ignore RA */
+                v = "0";
+        }
         p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/accept_ra");
-        v = one_zero(b);
 
         r = write_string_file(p, v, 0);
         if (r < 0) {