mirror of
git://git.yoctoproject.org/meta-virtualization.git
synced 2025-07-19 20:59:41 +02:00

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@freescale.com> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
From 8712c58ab896f072cf95e3ffa3ceac1fa10f6295 Mon Sep 17 00:00:00 2001
|
|
From: Bogdan Purcareata <bogdan.purcareata@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@freescale.com>
|
|
Signed-off-by: Serge Hallyn <serge.hallyn@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
|
|
|