Quoting Eric W. Biederman (ebied...@xmission.com):
> Serge Hallyn <serge.hal...@canonical.com> writes:
> 
> > Hi,
> >
> > Dan Kegel (cc:d) found an interesting nuisance relating to upstart
> > and network interfaces with lxc containers.  In particular, when you
> > start a container, two veths are created.  A uevent for their creation
> > is sent, and so a 'network-interface' upstart job is created for each.
> > One of the veths is passed into the container.  When the container
> > shuts down, the veth in the init-net-ns gets a net-device-removed
> > uevent, so the network-interface upstart job goes away.  But the veth
> > in the container doesn't cause a net-device-removed upstart uevent
> > to be sent.  So its network-interface upstart job sticks around.
> >
> > The details are at:
> >
> > https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1065589
> >
> > I notice that when simply renaming a netdev (sudo ip link set veth1 name
> > veth2) then udevadm monitor shows:
> >
> > KERNEL[17945.234850] move     /devices/virtual/net/veth2 (net)
> > UDEV  [17945.235758] move     /devices/virtual/net/veth2 (net)
> >
> > but when I do 'sudo ip link set veth2 netns 27689' then 'udevadm
> > monitor' shows nothing.
> >
> > When I do
> >
> >     sudo ip link set veth1 netns 32296
> >     (in process 32296) sudo ip link set veth1 name veth2
> >
> > then, again udevadm monitor shows nothing.
> >
> > So the question is, should the kernel be sending uevents for
> > net-device-removed and then net-device-added when a nic is moved
> > between network namespaces?  Or should lxc just fake that?
> 
> To the best of my memory I wired up those events, and they should be
> delivered.  Now they uevents will only be delivered in the relevant
> network namespace.
> 
> Hmm.  But the relevant code in the kernel is device_rename, and it
> happens after we switch the network namespace on the device.
> 
> Which probably means that in practice only the new network namespace is
> seeing uevents.
> 
> Grr.

Ah, indeed.  A few more experiments show that:

1. 'sudo ip link add type veth' on the host ends up with some kernel
messages, namely

KERNEL[389.393581] add      /devices/virtual/net/veth1/queues/rx-0 (queues)
KERNEL[389.394953] add      /devices/virtual/net/veth1/queues/tx-0 (queues)

sent to all namespaces - though the 

UDEV  [389.405255] add      /devices/virtual/net/veth1 (net)

only gets sent to the initial namespace.

2. Then when I 'sudo ip link set veth1 netns <pid-in-container>', I get

KERNEL[405.041296] move     /devices/virtual/net/veth2 (net)

only in the container's namespace - exactly as you said above should
happen.

Eric, are you working on a patch for this?  Should we just explicitly
add a remove uevent before doing the transition, or is it more
complicated than that?

thanks,
-serge

------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users

Reply via email to