uevent when moving nic between network namespaces?

Eric W. Biederman ebiederm at xmission.com
Sat Oct 13 05:27:16 UTC 2012


Serge Hallyn <serge.hallyn at canonical.com> writes:

[snip old comments]

> Yup all still looks good with the following trivial patch.  And now when
> I pass a netdev into a running container, it gets a network-interface
> upstart job just as it does on a real host.
>
> And no network-interface jobs stick around after the container shuts
> down, meaning this solves the kernel part of bug 1065589
> (https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1065589).
>
> (Pre-existing nics don't get a network-interface job - the fact that lxc
> first passes in the netdevs and then execs init therefore still causes
> some asymmetry wrt a real host, where netdevs always come up after init
> starts.  AFAIK we don't care, but Stéphane might know of a reason why we
> do  - in either case it's not the kernel's problem)
>
> From 01dc08273fa63a50f6dbb7377397ec52a7a337f8 Mon Sep 17 00:00:00 2001
> From: Serge Hallyn <serge.hallyn at canonical.com>
> Date: Fri, 12 Oct 2012 21:42:05 +0100
> Subject: [PATCH 1/1] dev_change_net_namespace: send a KOBJ_REMOVED to
>  original netns
>
> v2: also send KOBJ_ADD to new netns.  There will then be a
> _MOVE event from the device_rename() call, but that should
> be innocuous.

This patch looks reasonable to me. I would add to the changelog the
motivation.  Something like your comments just above this patch.

Acked-by: "Eric W. Biederman" <ebiederm at xmission.com>

> Signed-off-by: Serge Hallyn <serge.hallyn at canonical.com>
> ---
>  net/core/dev.c |    6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index e2215ee..2c43aaf 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -6172,6 +6172,9 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
>  	dev_uc_flush(dev);
>  	dev_mc_flush(dev);
>  
> +	/* Send a netdev-removed uevent to the old namespace */
> +	kobject_uevent(&dev->dev.kobj, KOBJ_REMOVE);
> +
>  	/* Actually switch the network namespace */
>  	dev_net_set(dev, net);
>  
> @@ -6183,6 +6186,9 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
>  			dev->iflink = dev->ifindex;
>  	}
>  
> +	/* Send a netdev-add uevent to the new namespace */
> +	kobject_uevent(&dev->dev.kobj, KOBJ_ADD);
> +
>  	/* Fixup kobjects */
>  	err = device_rename(&dev->dev, dev->name);
>  	WARN_ON(err);


More information about the Containers mailing list