summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--recipes-containers/lxc/files/lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch49
-rw-r--r--recipes-containers/lxc/lxc_0.9.0.bb5
2 files changed, 52 insertions, 2 deletions
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 00000000..767e3894
--- /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 @@
1From 8712c58ab896f072cf95e3ffa3ceac1fa10f6295 Mon Sep 17 00:00:00 2001
2From: Bogdan Purcareata <bogdan.purcareata@freescale.com>
3Date: Thu, 14 Nov 2013 12:31:55 +0200
4Subject: [PATCH] setup_netdev: re-read ifindex in LXC_NET_PHYS case
5
6When moving an interface from the host netns to a container's,
7the ifindex might not remain the same. This happens when the
8index of the host interface is already assigned to another interface
9in the new netns.
10
11For veth/vlan/macvlan, virtual interfaces are first created on the host,
12and then moved in the container. Since they are created after all other
13interfaces are discovered, there is no chance for its assigned ifindex
14to be already present in a freshly created netns, since its a greater
15number.
16
17However, when moving a physical interface, there is a chance that its
18ifindex in the host netns is not free in the new netns. The patch
19forces ifindex re-read for the LXC_NET_PHYS case to update the
20lxc_netdev structure.
21
22Signed-off-by: Bogdan Purcareata <bogdan.purcareata@freescale.com>
23Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
24---
25 src/lxc/conf.c | 8 ++++++++
26 1 file changed, 8 insertions(+)
27
28diff --git a/src/lxc/conf.c b/src/lxc/conf.c
29index 6b3f318..08b0d0f 100644
30--- a/src/lxc/conf.c
31+++ b/src/lxc/conf.c
32@@ -1846,6 +1846,14 @@ static int setup_netdev(struct lxc_netdev *netdev)
33 return 0;
34 }
35
36+ /* get the new ifindex in case of physical netdev */
37+ if (netdev->type == LXC_NET_PHYS)
38+ if (!(netdev->ifindex = if_nametoindex(netdev->link))) {
39+ ERROR("failed to get ifindex for %s",
40+ netdev->link);
41+ return -1;
42+ }
43+
44 /* retrieve the name of the interface */
45 if (!if_indextoname(netdev->ifindex, current_ifname)) {
46 ERROR("no interface corresponding to index '%d'",
47--
481.7.11.7
49
diff --git a/recipes-containers/lxc/lxc_0.9.0.bb b/recipes-containers/lxc/lxc_0.9.0.bb
index 8f7736b7..03d4589e 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} = " \
24SRC_URI = "http://linuxcontainers.org/downloads/${PN}-${PV}.tar.gz \ 24SRC_URI = "http://linuxcontainers.org/downloads/${PN}-${PV}.tar.gz \
25 file://lxc-0.9.0-disable-udhcp-from-busybox-template.patch \ 25 file://lxc-0.9.0-disable-udhcp-from-busybox-template.patch \
26 file://lxc-0.9.0-enable-chroot-chpasswd-functionality-for-busybox-hosts.patch \ 26 file://lxc-0.9.0-enable-chroot-chpasswd-functionality-for-busybox-hosts.patch \
27 file://lxc-0.9.0-check-when-bind-mounting-libdirs.patch \ 27 file://lxc-0.9.0-check-when-bind-mounting-libdirs.patch \
28 file://lxc-0.9.0-don-t-let-LXC_PATH-end-in-failure.patch \ 28 file://lxc-0.9.0-don-t-let-LXC_PATH-end-in-failure.patch \
29 file://lxc-0.9.0-setup_netdev-re-read-ifindex-in-LXC_NET_PHYS-case.patch \
29 " 30 "
30SRC_URI[md5sum] = "8552a4479090616f4bc04d8473765fc9" 31SRC_URI[md5sum] = "8552a4479090616f4bc04d8473765fc9"
31SRC_URI[sha256sum] = "1e1767eae6cc5fbf892c0e193d25da420ba19f2db203716c38f7cdea3b654120" 32SRC_URI[sha256sum] = "1e1767eae6cc5fbf892c0e193d25da420ba19f2db203716c38f7cdea3b654120"