]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ss: Show stats from specified network namespace
authorVadim Kochan <vadim4j@gmail.com>
Sun, 8 Feb 2015 06:58:43 +0000 (08:58 +0200)
committerStephen Hemminger <shemming@brocade.com>
Tue, 10 Feb 2015 23:11:59 +0000 (15:11 -0800)
Added new '-N NSNAME, --net=NSNAME' option to show socket stats
from the specified network namespace name.

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
man/man8/ss.8
misc/Makefile
misc/ss.c

index 450649abd4a36f6f7ef80b635f352c0364b8a181..b7fbaefaf0f1c478f21a072afec46d6ebf4c4329 100644 (file)
@@ -84,6 +84,9 @@ context of the creating process, however the context shown will reflect
 any policy role, type and/or range transition rules applied,
 and is therefore a useful reference.
 .TP
+.B \-N NSNAME, \-\-net=NSNAME
+Switch to the specified network namespace name.
+.TP
 .B \-b, \-\-bpf
 Show socket BPF filters (only administrators are allowed to get these information).
 .TP
index 004bcc3af646af9a586a2fb4ce84b84687b06f38..b7ecba90cd98b33e3e0bad5e992f176721d052a1 100644 (file)
@@ -10,6 +10,10 @@ ifeq ($(HAVE_SELINUX),y)
        CFLAGS += $(shell pkg-config --cflags libselinux) -DHAVE_SELINUX
 endif
 
+ifeq ($(IP_CONFIG_SETNS),y)
+       CFLAGS += -DHAVE_SETNS
+endif
+
 all: $(TARGETS)
 
 ss: $(SSOBJ)
index 7fc0a99ea07c4ffbcb95f11b15d9c7e50b1dfa0f..0a6a65ee40a12311c7e583564abe515a1943c383 100644 (file)
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -31,6 +31,7 @@
 #include "rt_names.h"
 #include "ll_map.h"
 #include "libnetlink.h"
+#include "namespace.h"
 #include "SNAPSHOT.h"
 
 #include <linux/tcp.h>
@@ -3246,6 +3247,7 @@ static void _usage(FILE *dest)
 "   -b, --bpf           show bpf filter socket information\n"
 "   -Z, --context       display process SELinux security contexts\n"
 "   -z, --contexts      display process and socket SELinux security contexts\n"
+"   -N, --net           switch to the specified network namespace name\n"
 "\n"
 "   -4, --ipv4          display only IP version 4 sockets\n"
 "   -6, --ipv6          display only IP version 6 sockets\n"
@@ -3345,6 +3347,7 @@ static const struct option long_opts[] = {
        { "help", 0, 0, 'h' },
        { "context", 0, 0, 'Z' },
        { "contexts", 0, 0, 'z' },
+       { "net", 1, 0, 'N' },
        { 0 }
 
 };
@@ -3360,7 +3363,7 @@ int main(int argc, char *argv[])
        struct filter dbs_filter = {};
        int state_filter = 0;
 
-       while ((ch = getopt_long(argc, argv, "dhaletuwxnro460spbf:miA:D:F:vVzZ",
+       while ((ch = getopt_long(argc, argv, "dhaletuwxnro460spbf:miA:D:F:vVzZN:",
                                 long_opts, NULL)) != EOF) {
                switch(ch) {
                case 'n':
@@ -3532,6 +3535,10 @@ int main(int argc, char *argv[])
                        show_proc_ctx++;
                        user_ent_hash_build();
                        break;
+               case 'N':
+                       if (netns_switch(optarg))
+                               exit(1);
+                       break;
                case 'h':
                case '?':
                        help();