ip netns: Delete all netns
Allow delete all namespace names by:
$ ip -all netns del
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
This commit is contained in:
parent
b13ba03f54
commit
3372493909
26
ip/ipnetns.c
26
ip/ipnetns.c
|
|
@ -23,7 +23,7 @@ static int usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip netns list\n");
|
fprintf(stderr, "Usage: ip netns list\n");
|
||||||
fprintf(stderr, " ip netns add NAME\n");
|
fprintf(stderr, " ip netns add NAME\n");
|
||||||
fprintf(stderr, " ip netns delete NAME\n");
|
fprintf(stderr, " ip [-all] netns delete [NAME]\n");
|
||||||
fprintf(stderr, " ip netns identify [PID]\n");
|
fprintf(stderr, " ip netns identify [PID]\n");
|
||||||
fprintf(stderr, " ip netns pids NAME\n");
|
fprintf(stderr, " ip netns pids NAME\n");
|
||||||
fprintf(stderr, " ip [-all] netns exec [NAME] cmd ...\n");
|
fprintf(stderr, " ip [-all] netns exec [NAME] cmd ...\n");
|
||||||
|
|
@ -259,18 +259,11 @@ static int netns_identify(int argc, char **argv)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int netns_delete(int argc, char **argv)
|
static int on_netns_del(char *nsname, void *arg)
|
||||||
{
|
{
|
||||||
const char *name;
|
|
||||||
char netns_path[MAXPATHLEN];
|
char netns_path[MAXPATHLEN];
|
||||||
|
|
||||||
if (argc < 1) {
|
snprintf(netns_path, sizeof(netns_path), "%s/%s", NETNS_RUN_DIR, nsname);
|
||||||
fprintf(stderr, "No netns name specified\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
name = argv[0];
|
|
||||||
snprintf(netns_path, sizeof(netns_path), "%s/%s", NETNS_RUN_DIR, name);
|
|
||||||
umount2(netns_path, MNT_DETACH);
|
umount2(netns_path, MNT_DETACH);
|
||||||
if (unlink(netns_path) < 0) {
|
if (unlink(netns_path) < 0) {
|
||||||
fprintf(stderr, "Cannot remove namespace file \"%s\": %s\n",
|
fprintf(stderr, "Cannot remove namespace file \"%s\": %s\n",
|
||||||
|
|
@ -280,6 +273,19 @@ static int netns_delete(int argc, char **argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int netns_delete(int argc, char **argv)
|
||||||
|
{
|
||||||
|
if (argc < 1 && !do_all) {
|
||||||
|
fprintf(stderr, "No netns name specified\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_all)
|
||||||
|
return netns_foreach(on_netns_del, NULL);
|
||||||
|
|
||||||
|
return on_netns_del(argv[0], NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static int create_netns_dir(void)
|
static int create_netns_dir(void)
|
||||||
{
|
{
|
||||||
/* Create the base netns directory if it doesn't exist */
|
/* Create the base netns directory if it doesn't exist */
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,13 @@ ip-netns \- process network namespace management
|
||||||
.BR "ip netns" " { " list " } "
|
.BR "ip netns" " { " list " } "
|
||||||
|
|
||||||
.ti -8
|
.ti -8
|
||||||
.BR "ip netns" " { " add " | " delete " } "
|
.B ip netns add
|
||||||
.I NETNSNAME
|
.I NETNSNAME
|
||||||
|
|
||||||
|
.ti -8
|
||||||
|
.B ip [-all] netns del
|
||||||
|
.RI "[ " NETNSNAME " ]"
|
||||||
|
|
||||||
.ti -8
|
.ti -8
|
||||||
.BR "ip netns identify"
|
.BR "ip netns identify"
|
||||||
.RI "[ " PID " ]"
|
.RI "[ " PID " ]"
|
||||||
|
|
@ -76,7 +80,7 @@ If NAME is available in /var/run/netns/ this command creates a new
|
||||||
network namespace and assigns NAME.
|
network namespace and assigns NAME.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B ip netns delete NAME - delete the name of a network namespace
|
.B ip [-all] netns delete [ NAME ] - delete the name of a network namespace(s)
|
||||||
.sp
|
.sp
|
||||||
If NAME is present in /var/run/netns it is umounted and the mount
|
If NAME is present in /var/run/netns it is umounted and the mount
|
||||||
point is removed. If this is the last user of the network namespace the
|
point is removed. If this is the last user of the network namespace the
|
||||||
|
|
@ -84,6 +88,10 @@ network namespace will be freed, otherwise the network namespace
|
||||||
persists until it has no more users. ip netns delete may fail if
|
persists until it has no more users. ip netns delete may fail if
|
||||||
the mount point is in use in another mount namespace.
|
the mount point is in use in another mount namespace.
|
||||||
|
|
||||||
|
If
|
||||||
|
.B -all
|
||||||
|
option was specified then all the network namespace names will be removed.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B ip netns identify [PID] - Report network namespaces names for process
|
.B ip netns identify [PID] - Report network namespaces names for process
|
||||||
.sp
|
.sp
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue