[lxc-devel] [PATCH 4/9] network: allow lxc_network_move_by_index() rename netdev in moving.
Serge Hallyn
serge.hallyn at ubuntu.com
Fri Sep 19 21:34:38 UTC 2014
Quoting Dongsheng Yang (yangds.fnst at 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.fnst at cn.fujitsu.com>
Acked-by: Serge E. Hallyn <serge.hallyn at 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
>
More information about the lxc-devel
mailing list