]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
network: allow lxc_network_move_by_index() rename netdev in moving.
authorDongsheng Yang <yangds.fnst@cn.fujitsu.com>
Tue, 16 Sep 2014 04:58:55 +0000 (12:58 +0800)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Wed, 15 Oct 2014 09:54:44 +0000 (11:54 +0200)
In netlink, we can set the dest_name of netdev when move netdev
between namespaces in one netlink request. And moving a netdev of
a src_name to a netdev with a dest_name is a common usecase.

So this patch add a parametaer to lxc_network_move_by_index() to
indicate the dest_name for the movement. NULL means same with
the src_name.

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/conf.c
src/lxc/lxc_unshare.c
src/lxc/lxc_user_nic.c
src/lxc/network.c
src/lxc/network.h

index e493899cde4f05e8c6c125119e7059e7fe97be6e..9ba18fe88abb4622236d5af191c7fe99cd837438 100644 (file)
@@ -2703,7 +2703,7 @@ void restore_phys_nics_to_netns(int netnsfd, struct lxc_conf *conf)
        }
        for (i=0; i<conf->num_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));
index fc6f9db13c6f0def7d23002cdd9f62d5ce629458..59a231e578201a625573fbbafa35fad0174adc74 100644 (file)
@@ -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));
                }
        }
index 02f2a2cbb1e92e3489a5e1ec6e893bde41427a6a..a990994f2c99f2341e41327af10ee15a47531e6a 100644 (file)
@@ -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;
index 909f3fe355b383a0a4168deea37d0bd02e9c62c5..4c577b17dfe285654b6f20363021f9df26ceda21 100644 (file)
@@ -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 @@ out:
        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)
index a8e0612c115932479b6d013b8747eb4ca4a6595f..768489df0d0f257fa0c8d97d6fda84b864e2af7b 100644 (file)
@@ -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