Re: [PATCH] net: clear iflink when moving to a new netns
From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2014-02-12 16:33:26
On Tue, 11 Feb 2014 15:51:28 -0800 Cong Wang [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Cong Wang <redacted> BZ: https://bugzilla.kernel.org/show_bug.cgi?id=66691 macvlan and vlan both use iflink to identify its lower device, however, after such device is moved to the new netns, its iflink would become meaningless as ifindex is per netns. So, instead of forbid them moving to another netns, just clear this field so that it will not be dumped at least. Cc: David S. Miller <davem@davemloft.net> Cc: Eric W. Biederman <redacted> Cc: Eric Dumazet <redacted> Cc: Hannes Frederic Sowa <redacted>, Signed-off-by: Cong Wang <redacted> Signed-off-by: Cong Wang <redacted> --- net/core/dev.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)diff --git a/net/core/dev.c b/net/core/dev.c index 4ad1b78..5e88b0c2 100644 --- a/net/core/dev.c +++ b/net/core/dev.c@@ -6608,12 +6608,11 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char dev_net_set(dev, net); /* If there is an ifindex conflict assign a new one */ - if (__dev_get_by_index(net, dev->ifindex)) { - int iflink = (dev->iflink == dev->ifindex); + if (__dev_get_by_index(net, dev->ifindex)) dev->ifindex = dev_new_index(net); - if (iflink) - dev->iflink = dev->ifindex; - } + + /* Old iflink is meaningless in the new namespace */ + dev->iflink = dev->ifindex; /* Send a netdev-add uevent to the new namespace */ kobject_uevent(&dev->dev.kobj, KOBJ_ADD);
This also breaks propogation of state changes from lower device to upper device. Things like carrier and up/down.