Atomically changing NIC dev name + namespace ?
Serge Hallyn
serge.hallyn at canonical.com
Mon Aug 6 13:34:15 UTC 2012
Quoting Daniel P. Berrange (berrange at redhat.com):
> Another feature I'd like to provide in libvirt LXC is "hotplug" of NIC
> devices to containers.
>
> eg, I have a NIC eth1 in the host and I want to make it appear as eth0
> in the container. There are two ways I can do this
>
> # ip link set eth1 name eth0
> # ip link set eth0 ns $PID
>
> Or
>
> # ip link set eth1 ns $PID
> # setns --net $PID (assume it opens /proc/$PID/ns/net & does setns(fd))
> # ip link set eth1 name eth0
>
>
> Both these approaches suffer from flaws though. The first approach fails
> on step one, if there is already another NIC in the host, that has the
> same name as the target we want to use in the container. The second
> approach fails on step 1 if there is already a NIC in the container
> which has the same name as the original device on the host.
>
> To get around this, we'd basically need to temporarily use a completely
> random NIC name eg
>
> # ip link set eth1 name $RANDOMNAME
> # ip link set $RANDOMNAME ns $PID
> # setns --net $PID (assume it opens /proc/$PID/ns/net & does setns(fd))
> # ip link set $RANDOMNAME name eth0
>
> This is workable, but feels slightly unpleasant. So IMHO if would be
Yes, it feels racy. I assume 'ip' will give a helpful error if RANDOMNAME
happens to be already taken though.
> desirable if the kernel allowed us to atomically change the NIC device
> name and namespace at the same time. eg
>
> # ip link set eth1 name eth0 ns $PID
An alternative would be to encode the above logic in the ip program
itself, but not the kernel. I think that's the way to go. We don't
want every user of this to have to do the ugly steps, but I don't
know that this quite justifies kernel help.
> Although that 'ip' CLI syntax is allowed, it appears to implement it in
> two steps, doing the rename first and then setting the namespace, so you
> still hit the NIC name clash problem.
>
> Regards,
> Daniel
> --
> |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
> |: http://libvirt.org -o- http://virt-manager.org :|
> |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
> |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
> _______________________________________________
> Containers mailing list
> Containers at lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/containers
More information about the Containers
mailing list