Quoting Dongsheng Yang (yangds.f...@cn.fujitsu.com):
> 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.f...@cn.fujitsu.com>

Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com>

> ---
>  src/lxc/conf.c         |  4 ++--
>  src/lxc/lxc_unshare.c  |  2 +-
>  src/lxc/lxc_user_nic.c |  2 +-
>  src/lxc/network.c      | 11 ++++++++---
>  src/lxc/network.h      |  4 ++--
>  5 files changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 5e61c35..f7824ed 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -2800,7 +2800,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);
>       }
> @@ -3382,7 +3382,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 fc6f9db..59a231e 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 02f2a2c..a990994 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 909f3fe..4c577b1 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 @@ 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)
> diff --git a/src/lxc/network.h b/src/lxc/network.h
> index a8e0612..768489d 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
> -- 
> 1.8.4.2
> 
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to