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 */
|
#endif /* HAVE_SETNS */
|
||||||
|
|
||||||
void netns_save(void);
|
|
||||||
void netns_restore(void);
|
|
||||||
int netns_switch(char *netns);
|
int netns_switch(char *netns);
|
||||||
int netns_get_fd(const char *netns);
|
int netns_get_fd(const char *netns);
|
||||||
int netns_foreach(int (*func)(char *nsname, void *arg), void *arg);
|
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)
|
if (!force)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
netns_restore();
|
|
||||||
}
|
}
|
||||||
if (line)
|
if (line)
|
||||||
free(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 struct rtnl_handle rtnsh = { .fd = -1 };
|
||||||
|
|
||||||
static int have_rtnl_getnsid = -1;
|
static int have_rtnl_getnsid = -1;
|
||||||
|
static int saved_netns = -1;
|
||||||
|
|
||||||
static int ipnetns_accept_msg(struct rtnl_ctrl_data *ctrl,
|
static int ipnetns_accept_msg(struct rtnl_ctrl_data *ctrl,
|
||||||
struct nlmsghdr *n, void *arg)
|
struct nlmsghdr *n, void *arg)
|
||||||
|
|
@ -634,6 +635,33 @@ static int create_netns_dir(void)
|
||||||
return 0;
|
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)
|
static int netns_add(int argc, char **argv, bool create)
|
||||||
{
|
{
|
||||||
/* This function creates a new network namespace and
|
/* 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));
|
proc_path, netns_path, strerror(errno));
|
||||||
goto out_delete;
|
goto out_delete;
|
||||||
}
|
}
|
||||||
|
netns_restore();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
out_delete:
|
out_delete:
|
||||||
if (create) {
|
if (create) {
|
||||||
|
netns_restore();
|
||||||
netns_delete(argc, argv);
|
netns_delete(argc, argv);
|
||||||
} else if (unlink(netns_path) < 0) {
|
} else if (unlink(netns_path) < 0) {
|
||||||
fprintf(stderr, "Cannot remove namespace file \"%s\": %s\n",
|
fprintf(stderr, "Cannot remove namespace file \"%s\": %s\n",
|
||||||
|
|
|
||||||
|
|
@ -15,35 +15,6 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "namespace.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)
|
static void bind_etc(const char *name)
|
||||||
{
|
{
|
||||||
char etc_netns_path[sizeof(NETNS_ETC_DIR) + NAME_MAX];
|
char etc_netns_path[sizeof(NETNS_ETC_DIR) + NAME_MAX];
|
||||||
|
|
@ -90,8 +61,6 @@ int netns_switch(char *name)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
netns_save();
|
|
||||||
|
|
||||||
if (setns(netns, CLONE_NEWNET) < 0) {
|
if (setns(netns, CLONE_NEWNET) < 0) {
|
||||||
fprintf(stderr, "setting the network namespace \"%s\" failed: %s\n",
|
fprintf(stderr, "setting the network namespace \"%s\" failed: %s\n",
|
||||||
name, strerror(errno));
|
name, strerror(errno));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue