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:
parent
5c781d6b0d
commit
6a512301bb
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue