Subject: [RFC] ipv6: don't flush routes when setting loopback down

From: Stephen Hemminger <[email-masked]>
Date: Thu, 16 Dec 2010 13:28:12 -0800

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 <[email-masked]>

---
patch versus current net-next tree, but if this acceptable
it should be applied to net-2.6 as well.

--- a/net/ipv6/addrconf.c	2010-12-16 10:29:34.035408392 -0800
+++ b/net/ipv6/addrconf.c	2010-12-16 10:30:37.366834482 -0800
@@ -2669,7 +2669,9 @@ static int addrconf_ifdown(struct net_de
 
 	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);