[meta-virtualization] [PATCH] LXC: setup_netdev: re-read ifindex in LXC_NET_PHYS case

Bogdan Purcareata bogdan.purcareata at freescale.com
Thu Nov 14 08:04:40 PST 2013


Patch to fix interface netns transition when
assigning a physical interface to a container.
Pushed to the upstream LXC repo, to be included
in future versions of LXC.

Further details in included patch description.

Signed-off-by: Bogdan Purcareata <bogdan.purcareata at freescale.com>
---
 ...tdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch | 49 ++++++++++++++++++++++
 recipes-containers/lxc/lxc_0.9.0.bb                |  5 ++-
 2 files changed, 52 insertions(+), 2 deletions(-)
 create mode 100644 recipes-containers/lxc/files/lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch

diff --git a/recipes-containers/lxc/files/lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch b/recipes-containers/lxc/files/lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch
new file mode 100644
index 0000000..5cebb50
--- /dev/null
+++ b/recipes-containers/lxc/files/lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch
@@ -0,0 +1,49 @@
+From 8712c58ab896f072cf95e3ffa3ceac1fa10f6295 Mon Sep 17 00:00:00 2001
+From: Bogdan Purcareata <bogdan.purcareata at freescale.com>
+Date: Thu, 14 Nov 2013 12:31:55 +0200
+Subject: [PATCH] setup_netdev: re-read ifindex in LXC_NET_PHYS case
+
+When moving an interface from the host netns to a container's,
+the ifindex might not remain the same. This happens when the
+index of the host interface is already assigned to another interface
+in the new netns.
+
+For veth/vlan/macvlan, virtual interfaces are first created on the host,
+and then moved in the container. Since they are created after all other
+interfaces are discovered, there is no chance for its assigned ifindex
+to be already present in a freshly created netns, since its a greater
+number.
+
+However, when moving a physical interface, there is a chance that its
+ifindex in the host netns is not free in the new netns. The patch
+forces ifindex re-read for the LXC_NET_PHYS case to update the
+lxc_netdev structure.
+
+Signed-off-by: Bogdan Purcareata <bogdan.purcareata at freescale.com>
+Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
+---
+ src/lxc/conf.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/lxc/conf.c b/src/lxc/conf.c
+index 6b3f318..08b0d0f 100644
+--- a/src/lxc/conf.c
++++ b/src/lxc/conf.c
+@@ -1846,6 +1846,14 @@ static int setup_netdev(struct lxc_netdev *netdev)
+ 		return 0;
+ 	}
+ 
++	/* get the new ifindex in case of physical netdev */
++	if (netdev->type == LXC_NET_PHYS)
++		if (!(netdev->ifindex = if_nametoindex(netdev->link))) {
++			ERROR("failed to get ifindex for %s",
++				netdev->link);
++			return -1;
++		}
++
+ 	/* retrieve the name of the interface */
+ 	if (!if_indextoname(netdev->ifindex, current_ifname)) {
+ 		ERROR("no interface corresponding to index '%d'",
+-- 
+1.7.11.7
+
diff --git a/recipes-containers/lxc/lxc_0.9.0.bb b/recipes-containers/lxc/lxc_0.9.0.bb
index 8f7736b..03d4589 100644
--- a/recipes-containers/lxc/lxc_0.9.0.bb
+++ b/recipes-containers/lxc/lxc_0.9.0.bb
@@ -24,8 +24,9 @@ RDEPENDS_${PN} = " \
 SRC_URI = "http://linuxcontainers.org/downloads/${PN}-${PV}.tar.gz \
 	file://lxc-0.9.0-disable-udhcp-from-busybox-template.patch \
 	file://lxc-0.9.0-enable-chroot-chpasswd-functionality-for-busybox-hosts.patch \
-    file://lxc-0.9.0-check-when-bind-mounting-libdirs.patch \
-    file://lxc-0.9.0-don-t-let-LXC_PATH-end-in-failure.patch \
+	file://lxc-0.9.0-check-when-bind-mounting-libdirs.patch \
+	file://lxc-0.9.0-don-t-let-LXC_PATH-end-in-failure.patch \
+	file://lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch \
 	"
 SRC_URI[md5sum] = "8552a4479090616f4bc04d8473765fc9"
 SRC_URI[sha256sum] = "1e1767eae6cc5fbf892c0e193d25da420ba19f2db203716c38f7cdea3b654120"
-- 
1.7.11.7





More information about the meta-virtualization mailing list