net: veth -- Don't force to create master peer index if no nsid

In case if master peer of veth device is laying inside
node root net-ns we should not request device index
but rather allow the kernel to number it automatically.

When there is separate net-ns for master peer it should
be safe to request an index though.

Signed-off-by: Cyrill Gorcunov <gorcunov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
Cyrill Gorcunov 2018-06-21 19:35:23 +03:00 committed by Andrei Vagin
parent 1e35bd8213
commit b75d898bcb

View file

@ -1251,7 +1251,17 @@ static int veth_link_info(struct ns_id *ns, struct net_link *link, struct newlin
peer_data = NLMSG_TAIL(&req->h);
memset(&ifm, 0, sizeof(ifm));
ifm.ifi_index = nde->peer_ifindex;
/*
* Peer index might lay on the node root net namespace,
* where the device index may be already borrowed by
* some other device, so we should ignore it.
*
* Still if peer is laying in some other net-namespace,
* we should recreate the device index as well as the
* as we do for the master peer end.
*/
if (nde->has_peer_nsid)
ifm.ifi_index = nde->peer_ifindex;
addattr_l(&req->h, sizeof(*req), VETH_INFO_PEER, &ifm, sizeof(ifm));
veth_peer_info(link, req, ns, ns_fd);