Commit b466dc33 by Bogdan Purcareata Committed by Serge Hallyn

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, because it's 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: 's avatarBogdan Purcareata <bogdan.purcareata@freescale.com> Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
parent a9a0ed90
...@@ -2144,6 +2144,14 @@ static int setup_netdev(struct lxc_netdev *netdev) ...@@ -2144,6 +2144,14 @@ static int setup_netdev(struct lxc_netdev *netdev)
return 0; 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 */ /* retrieve the name of the interface */
if (!if_indextoname(netdev->ifindex, current_ifname)) { if (!if_indextoname(netdev->ifindex, current_ifname)) {
ERROR("no interface corresponding to index '%d'", ERROR("no interface corresponding to index '%d'",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment