]>
Commit | Line | Data |
---|---|---|
8002656c GKH |
1 | From 050003433737f47a3e2bc7e46eaf5a1269a7ac02 Mon Sep 17 00:00:00 2001 |
2 | From: Lorenzo Colitti <lorenzo@google.com> | |
3 | Date: Sun, 3 Mar 2013 20:46:46 +0000 | |
4 | Subject: net: ipv6: Don't purge default router if accept_ra=2 | |
5 | ||
6 | ||
7 | From: Lorenzo Colitti <lorenzo@google.com> | |
8 | ||
9 | [ Upstream commit 3e8b0ac3e41e3c882222a5522d5df7212438ab51 ] | |
10 | ||
11 | Setting net.ipv6.conf.<interface>.accept_ra=2 causes the kernel | |
12 | to accept RAs even when forwarding is enabled. However, enabling | |
13 | forwarding purges all default routes on the system, breaking | |
14 | connectivity until the next RA is received. Fix this by not | |
15 | purging default routes on interfaces that have accept_ra=2. | |
16 | ||
17 | Signed-off-by: Lorenzo Colitti <lorenzo@google.com> | |
18 | Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> | |
19 | Acked-by: Eric Dumazet <edumazet@google.com> | |
20 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
22 | --- | |
23 | net/ipv6/route.c | 3 ++- | |
24 | 1 file changed, 2 insertions(+), 1 deletion(-) | |
25 | ||
26 | --- a/net/ipv6/route.c | |
27 | +++ b/net/ipv6/route.c | |
28 | @@ -1990,7 +1990,8 @@ void rt6_purge_dflt_routers(struct net * | |
29 | restart: | |
30 | read_lock_bh(&table->tb6_lock); | |
31 | for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) { | |
32 | - if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { | |
33 | + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) && | |
34 | + (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) { | |
35 | dst_hold(&rt->dst); | |
36 | read_unlock_bh(&table->tb6_lock); | |
37 | ip6_del_rt(rt); |