netns: make netns_{save,restore} static
The netns_{save,restore} functions are only used in ipnetns.c now, since
the restore is not needed anymore after the netns exec command.
Move them in ipnetns.c, and make them static.
Signed-off-by: Matteo Croce <mcroce@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
parent
d81d4ba15d
commit
b2e2922373
|
|
@ -49,8 +49,6 @@ static inline int setns(int fd, int nstype)
|
|||
}
|
||||
#endif /* HAVE_SETNS */
|
||||
|
||||
void netns_save(void);
|
||||
void netns_restore(void);
|
||||
int netns_switch(char *netns);
|
||||
int netns_get_fd(const char *netns);
|
||||
int netns_foreach(int (*func)(char *nsname, void *arg), void *arg);
|
||||
|
|
|
|||
1
ip/ip.c
1
ip/ip.c
|
|
@ -158,7 +158,6 @@ static int batch(const char *name)
|
|||
if (!force)
|
||||
break;
|
||||
}
|
||||
netns_restore();
|
||||
}
|
||||
if (line)
|
||||
free(line);
|
||||
|
|
|
|||
31
ip/ipnetns.c
31
ip/ipnetns.c
|
|
@ -44,6 +44,7 @@ static int usage(void)
|
|||
static struct rtnl_handle rtnsh = { .fd = -1 };
|
||||
|
||||
static int have_rtnl_getnsid = -1;
|
||||
static int saved_netns = -1;
|
||||
|
||||
static int ipnetns_accept_msg(struct rtnl_ctrl_data *ctrl,
|
||||
struct nlmsghdr *n, void *arg)
|
||||
|
|
@ -634,6 +635,33 @@ static int create_netns_dir(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Obtain a FD for the current namespace, so we can reenter it later */
|
||||
static void netns_save(void)
|
||||
{
|
||||
if (saved_netns != -1)
|
||||
return;
|
||||
|
||||
saved_netns = open("/proc/self/ns/net", O_RDONLY | O_CLOEXEC);
|
||||
if (saved_netns == -1) {
|
||||
perror("Cannot open init namespace");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void netns_restore(void)
|
||||
{
|
||||
if (saved_netns == -1)
|
||||
return;
|
||||
|
||||
if (setns(saved_netns, CLONE_NEWNET)) {
|
||||
perror("setns");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
close(saved_netns);
|
||||
saved_netns = -1;
|
||||
}
|
||||
|
||||
static int netns_add(int argc, char **argv, bool create)
|
||||
{
|
||||
/* This function creates a new network namespace and
|
||||
|
|
@ -727,9 +755,12 @@ static int netns_add(int argc, char **argv, bool create)
|
|||
proc_path, netns_path, strerror(errno));
|
||||
goto out_delete;
|
||||
}
|
||||
netns_restore();
|
||||
|
||||
return 0;
|
||||
out_delete:
|
||||
if (create) {
|
||||
netns_restore();
|
||||
netns_delete(argc, argv);
|
||||
} else if (unlink(netns_path) < 0) {
|
||||
fprintf(stderr, "Cannot remove namespace file \"%s\": %s\n",
|
||||
|
|
|
|||
|
|
@ -15,35 +15,6 @@
|
|||
#include "utils.h"
|
||||
#include "namespace.h"
|
||||
|
||||
static int saved_netns = -1;
|
||||
|
||||
/* Obtain a FD for the current namespace, so we can reenter it later */
|
||||
void netns_save(void)
|
||||
{
|
||||
if (saved_netns != -1)
|
||||
return;
|
||||
|
||||
saved_netns = open("/proc/self/ns/net", O_RDONLY | O_CLOEXEC);
|
||||
if (saved_netns == -1) {
|
||||
perror("Cannot open init namespace");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void netns_restore(void)
|
||||
{
|
||||
if (saved_netns == -1)
|
||||
return;
|
||||
|
||||
if (setns(saved_netns, CLONE_NEWNET)) {
|
||||
perror("setns");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
close(saved_netns);
|
||||
saved_netns = -1;
|
||||
}
|
||||
|
||||
static void bind_etc(const char *name)
|
||||
{
|
||||
char etc_netns_path[sizeof(NETNS_ETC_DIR) + NAME_MAX];
|
||||
|
|
@ -90,8 +61,6 @@ int netns_switch(char *name)
|
|||
return -1;
|
||||
}
|
||||
|
||||
netns_save();
|
||||
|
||||
if (setns(netns, CLONE_NEWNET) < 0) {
|
||||
fprintf(stderr, "setting the network namespace \"%s\" failed: %s\n",
|
||||
name, strerror(errno));
|
||||
|
|
|
|||
Loading…
Reference in New Issue