Commit 3e8b0ac3e41e3c882222a5522d5df7212438ab51

Authored by Lorenzo Colitti
Committed by David S. Miller
1 parent de5fb0a053

net: ipv6: Don't purge default router if accept_ra=2

Setting net.ipv6.conf.<interface>.accept_ra=2 causes the kernel
to accept RAs even when forwarding is enabled. However, enabling
forwarding purges all default routes on the system, breaking
connectivity until the next RA is received. Fix this by not
purging default routes on interfaces that have accept_ra=2.

Signed-off-by: Lorenzo Colitti <lorenzo@google.com>
Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 2 additions and 1 deletions Side-by-side Diff

... ... @@ -1915,7 +1915,8 @@
1915 1915 restart:
1916 1916 read_lock_bh(&table->tb6_lock);
1917 1917 for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) {
1918   - if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
  1918 + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
  1919 + (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) {
1919 1920 dst_hold(&rt->dst);
1920 1921 read_unlock_bh(&table->tb6_lock);
1921 1922 ip6_del_rt(rt);