diff --git a/src/lxc/conf.c b/src/lxc/conf.c index e493899cde..9ba18fe88a 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2703,7 +2703,7 @@ void restore_phys_nics_to_netns(int netnsfd, struct lxc_conf *conf) } for (i=0; inum_savednics; i++) { struct saved_nic *s = &conf->saved_nics[i]; - if (lxc_netdev_move_by_index(s->ifindex, 1)) + if (lxc_netdev_move_by_index(s->ifindex, 1, NULL)) WARN("Error moving nic index:%d back to host netns", s->ifindex); } @@ -3285,7 +3285,7 @@ int lxc_assign_network(struct lxc_list *network, pid_t pid) if (!netdev->ifindex) continue; - err = lxc_netdev_move_by_index(netdev->ifindex, pid); + err = lxc_netdev_move_by_index(netdev->ifindex, pid, NULL); if (err) { ERROR("failed to move '%s' to the container : %s", netdev->link, strerror(-err)); diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c index fc6f9db13c..59a231e578 100644 --- a/src/lxc/lxc_unshare.c +++ b/src/lxc/lxc_unshare.c @@ -240,7 +240,7 @@ int main(int argc, char *argv[]) if (my_iflist) { for (tmpif = my_iflist; tmpif; tmpif = tmpif->mi_next) { - if (lxc_netdev_move_by_name(tmpif->mi_ifname, pid) < 0) + if (lxc_netdev_move_by_name(tmpif->mi_ifname, pid, NULL) < 0) fprintf(stderr,"Could not move interface %s into container %d: %s\n", tmpif->mi_ifname, pid, strerror(errno)); } } diff --git a/src/lxc/lxc_user_nic.c b/src/lxc/lxc_user_nic.c index 02f2a2cbb1..a990994f2c 100644 --- a/src/lxc/lxc_user_nic.c +++ b/src/lxc/lxc_user_nic.c @@ -268,7 +268,7 @@ static bool create_nic(char *nic, char *br, int pid, char **cnic) } /* pass veth2 to target netns */ - ret = lxc_netdev_move_by_name(veth2buf, pid); + ret = lxc_netdev_move_by_name(veth2buf, pid, NULL); if (ret < 0) { fprintf(stderr, "Error moving %s to netns %d\n", veth2buf, pid); goto out_del; diff --git a/src/lxc/network.c b/src/lxc/network.c index 909f3fe355..4c577b17df 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -103,7 +103,7 @@ struct rt_req { struct rtmsg rt; }; -int lxc_netdev_move_by_index(int ifindex, pid_t pid) +int lxc_netdev_move_by_index(int ifindex, pid_t pid, const char* ifname) { struct nl_handler nlh; struct nlmsg *nlmsg = NULL; @@ -129,6 +129,11 @@ int lxc_netdev_move_by_index(int ifindex, pid_t pid) if (nla_put_u32(nlmsg, IFLA_NET_NS_PID, pid)) goto out; + if (ifname != NULL) { + if (nla_put_string(nlmsg, IFLA_IFNAME, ifname)) + goto out; + } + err = netlink_transaction(&nlh, nlmsg, nlmsg); out: netlink_close(&nlh); @@ -136,7 +141,7 @@ int lxc_netdev_move_by_index(int ifindex, pid_t pid) return err; } -int lxc_netdev_move_by_name(const char *ifname, pid_t pid) +int lxc_netdev_move_by_name(const char *ifname, pid_t pid, const char* newname) { int index; @@ -147,7 +152,7 @@ int lxc_netdev_move_by_name(const char *ifname, pid_t pid) if (!index) return -EINVAL; - return lxc_netdev_move_by_index(index, pid); + return lxc_netdev_move_by_index(index, pid, newname); } int lxc_netdev_delete_by_index(int ifindex) diff --git a/src/lxc/network.h b/src/lxc/network.h index a8e0612c11..768489df0d 100644 --- a/src/lxc/network.h +++ b/src/lxc/network.h @@ -31,8 +31,8 @@ extern int lxc_convert_mac(char *macaddr, struct sockaddr *sockaddr); /* * Move a device between namespaces */ -extern int lxc_netdev_move_by_index(int ifindex, pid_t pid); -extern int lxc_netdev_move_by_name(const char *ifname, pid_t pid); +extern int lxc_netdev_move_by_index(int ifindex, pid_t pid, const char* ifname); +extern int lxc_netdev_move_by_name(const char *ifname, pid_t pid, const char* newname); /* * Delete a network device