Set accept_ra to "2" if enabled in config

This causes the kernel to accept router advertisments even if
ip forwarding is enabled for this interface.

This fixes #1340.
This commit is contained in:
Georg Müller 2015-09-23 10:27:45 +02:00
parent 5c781d6b0d
commit 6a512301bb

View 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) {