aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorstephen hemminger <shemminger@vyatta.com>2010-12-16 11:28:12 +0000
committerDavid S. Miller <davem@davemloft.net>2010-12-16 18:26:26 -0800
commit29ba5fed1bbd09c2cba890798c8f9eaab251401d (patch)
treeb3e553db3b756b3714dcce42cd92f2e6bb266ddc /net/ipv6
parentsctp: fix the return value of getting the sctp partial delivery point (diff)
downloadlinux-dev-29ba5fed1bbd09c2cba890798c8f9eaab251401d.tar.xz
linux-dev-29ba5fed1bbd09c2cba890798c8f9eaab251401d.zip
ipv6: don't flush routes when setting loopback down
When loopback device is being brought down, then keep the route table entries because they are special. The entries in the local table for linklocal routes and ::1 address should not be purged. This is a sub optimal solution to the problem and should be replaced by a better fix in future. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/addrconf.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 93b7a933a775..848b35591042 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2669,7 +2669,9 @@ static int addrconf_ifdown(struct net_device *dev, int how)
ASSERT_RTNL();
- rt6_ifdown(net, dev);
+ /* Flush routes if device is being removed or it is not loopback */
+ if (how || !(dev->flags & IFF_LOOPBACK))
+ rt6_ifdown(net, dev);
neigh_ifdown(&nd_tbl, dev);
idev = __in6_dev_get(dev);