mirror of
git://github.com/lxc/lxc
synced 2025-09-04 01:09:31 +00:00
Merge pull request #3731 from samboyles1/master
network: handle name collisions when returning interfaces to host
This commit is contained in:
@@ -3612,6 +3612,10 @@ static bool lxc_delete_network_priv(struct lxc_handler *handler)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (netdev->type == LXC_NET_PHYS) {
|
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);
|
ret = lxc_netdev_rename_by_index(netdev->ifindex, netdev->link);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
WARN("Failed to rename interface with index %d "
|
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.veth1[0] = '\0';
|
||||||
netdev->priv.veth_attr.ifindex = 0;
|
netdev->priv.veth_attr.ifindex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clear transient name */
|
||||||
|
if (!is_empty_string (netdev->transient_name))
|
||||||
|
{
|
||||||
|
netdev->transient_name[0] = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -3761,7 +3771,10 @@ int lxc_restore_phys_nics_to_netns(struct lxc_handler *handler)
|
|||||||
continue;
|
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)
|
if (ret < 0)
|
||||||
WARN("Error moving network device \"%s\" back to network namespace", ifname);
|
WARN("Error moving network device \"%s\" back to network namespace", ifname);
|
||||||
else
|
else
|
||||||
|
@@ -136,6 +136,7 @@ union netdev_p {
|
|||||||
* @created_name : the name with which this interface got created before
|
* @created_name : the name with which this interface got created before
|
||||||
* being renamed to final_name.
|
* being renamed to final_name.
|
||||||
* Currenly only used for veth devices.
|
* Currenly only used for veth devices.
|
||||||
|
* @transient_name : temporary name to avoid namespace collisions
|
||||||
* @hwaddr : mac address
|
* @hwaddr : mac address
|
||||||
* @mtu : maximum transmission unit
|
* @mtu : maximum transmission unit
|
||||||
* @priv : information specific to the specificed network type
|
* @priv : information specific to the specificed network type
|
||||||
|
Reference in New Issue
Block a user