2
0
mirror of git://github.com/lxc/lxc synced 2025-08-31 08:49:38 +00:00

Merge pull request #3731 from samboyles1/master

network: handle name collisions when returning interfaces to host
This commit is contained in:
Christian Brauner
2021-03-26 17:18:08 +01:00
committed by GitHub
2 changed files with 15 additions and 1 deletions

View File

@@ -3612,6 +3612,10 @@ static bool lxc_delete_network_priv(struct lxc_handler *handler)
}
if (netdev->type == LXC_NET_PHYS) {
/* Physical interfaces are initially returned to the parent namespace
* with their transient name to avoid collisions
*/
netdev->ifindex = if_nametoindex(netdev->transient_name);
ret = lxc_netdev_rename_by_index(netdev->ifindex, netdev->link);
if (ret < 0)
WARN("Failed to rename interface with index %d "
@@ -3684,6 +3688,12 @@ clear_ifindices:
netdev->priv.veth_attr.veth1[0] = '\0';
netdev->priv.veth_attr.ifindex = 0;
}
/* Clear transient name */
if (!is_empty_string (netdev->transient_name))
{
netdev->transient_name[0] = '\0';
}
}
return true;
@@ -3761,7 +3771,10 @@ int lxc_restore_phys_nics_to_netns(struct lxc_handler *handler)
continue;
}
ret = lxc_netdev_move_by_index_fd(netdev->ifindex, oldfd, netdev->link);
/* Restore physical interfaces to host's network namespace with its transient name
* to avoid collisions with the host's other interfaces.
*/
ret = lxc_netdev_move_by_index_fd(netdev->ifindex, oldfd, netdev->transient_name);
if (ret < 0)
WARN("Error moving network device \"%s\" back to network namespace", ifname);
else

View File

@@ -136,6 +136,7 @@ union netdev_p {
* @created_name : the name with which this interface got created before
* being renamed to final_name.
* Currenly only used for veth devices.
* @transient_name : temporary name to avoid namespace collisions
* @hwaddr : mac address
* @mtu : maximum transmission unit
* @priv : information specific to the specificed network type