Commit 0fa988d1 by Christian Brauner Committed by GitHub

Merge pull request #1269 from Blub/phynet-rename-2

conf: merge network namespace move & rename on shutdown
parents 59f1c5ca 5610055a
......@@ -2397,15 +2397,17 @@ static int setup_network(struct lxc_list *network)
}
/* try to move physical nics to the init netns */
void restore_phys_nics_to_netns(int netnsfd, struct lxc_conf *conf)
void lxc_restore_phys_nics_to_netns(int netnsfd, struct lxc_conf *conf)
{
int i, ret, oldfd;
char path[MAXPATHLEN];
char ifname[IFNAMSIZ];
if (netnsfd < 0)
if (netnsfd < 0 || conf->num_savednics == 0)
return;
INFO("running to reset %d nic names", conf->num_savednics);
ret = snprintf(path, MAXPATHLEN, "/proc/self/ns/net");
if (ret < 0 || ret >= MAXPATHLEN) {
WARN("Failed to open monitor netns fd");
......@@ -2427,32 +2429,17 @@ void restore_phys_nics_to_netns(int netnsfd, struct lxc_conf *conf)
WARN("no interface corresponding to index '%d'", s->ifindex);
continue;
}
if (lxc_netdev_move_by_name(ifname, 1, NULL))
if (lxc_netdev_move_by_name(ifname, 1, s->orig_name))
WARN("Error moving nic name:%s back to host netns", ifname);
free(s->orig_name);
}
conf->num_savednics = 0;
if (setns(oldfd, 0) != 0)
SYSERROR("Failed to re-enter monitor's netns");
close(oldfd);
}
void lxc_rename_phys_nics_on_shutdown(int netnsfd, struct lxc_conf *conf)
{
int i;
if (conf->num_savednics == 0)
return;
INFO("running to reset %d nic names", conf->num_savednics);
restore_phys_nics_to_netns(netnsfd, conf);
for (i=0; i<conf->num_savednics; i++) {
struct saved_nic *s = &conf->saved_nics[i];
INFO("resetting nic %d to %s", s->ifindex, s->orig_name);
lxc_netdev_rename_by_index(s->ifindex, s->orig_name);
free(s->orig_name);
}
conf->num_savednics = 0;
}
static char *default_rootfs_mount = LXCROOTFSMOUNT;
struct lxc_conf *lxc_conf_init(void)
......
......@@ -440,7 +440,7 @@ extern int do_rootfs_setup(struct lxc_conf *conf, const char *name,
struct cgroup_process_info;
extern int lxc_setup(struct lxc_handler *handler);
extern void lxc_rename_phys_nics_on_shutdown(int netnsfd, struct lxc_conf *conf);
extern void lxc_restore_phys_nics_to_netns(int netnsfd, struct lxc_conf *conf);
extern int find_unmapped_nsuid(struct lxc_conf *conf, enum idtype idtype);
extern int mapped_hostid(unsigned id, struct lxc_conf *conf, enum idtype idtype);
......
......@@ -1420,7 +1420,7 @@ int __lxc_start(const char *name, struct lxc_conf *conf,
}
DEBUG("Pushing physical nics back to host namespace");
lxc_rename_phys_nics_on_shutdown(netnsfd, handler->conf);
lxc_restore_phys_nics_to_netns(netnsfd, handler->conf);
DEBUG("Tearing down virtual network devices used by container");
lxc_delete_network(handler);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment