From: Marc Angel <m...@arista.com> Date: Thu, 5 May 2016 12:14:26 +0200
> When creating macvtaps that are expected to have the same ifindex > in different network namespaces, only the first one will succeed. > The others will fail with a sysfs_warn_dup warning due to them trying > to create the following sysfs link (with 'NN' the ifindex of macvtapX): > > /sys/class/macvtap/tapNN -> /sys/devices/virtual/net/macvtapX/tapNN > > This is reproducible by running the following commands: > > ip netns add ns1 > ip netns add ns2 > ip link add veth0 type veth peer name veth1 > ip link set veth0 netns ns1 > ip link set veth1 netns ns2 > ip netns exec ns1 ip l add link veth0 macvtap0 type macvtap > ip netns exec ns2 ip l add link veth1 macvtap1 type macvtap > > The last command will fail with "RTNETLINK answers: File exists" (along > with the kernel warning) but retrying it will work because the ifindex > was incremented. > > The 'net' device class is isolated between network namespaces so each > one has its own hierarchy of net devices. > This isn't the case for the 'macvtap' device class. > The problem occurs half-way through the netdev registration, when > `macvtap_device_event` is called-back to create the 'tapNN' macvtap > class device under the 'macvtapX' net class device. > > This patch adds namespace support to the 'macvtap' device class so > that /sys/class/macvtap is no longer shared between net namespaces. > > However, making the macvtap sysfs class namespace-aware has the side > effect of changing /sys/devices/virtual/net/macvtapX/tapNN into > /sys/devices/virtual/net/macvtapX/macvtap/tapNN. > > This is due to Commit 24b1442 ("Driver-core: Always create class > directories for classses that support namespaces") and the fact that > class devices supporting namespaces are really not supposed to be placed > directly under other class devices. > > To avoid breaking userland, a tapNN symlink pointing to macvtap/tapNN is > created inside the macvtapX directory. > > Signed-off-by: Marc Angel <m...@arista.com> Applied, thanks.