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 @@ +From 8712c58ab896f072cf95e3ffa3ceac1fa10f6295 Mon Sep 17 00:00:00 2001 +From: Bogdan Purcareata +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 +Signed-off-by: Serge Hallyn +--- + 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 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} = " \ 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"