[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