]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
xfrmmonitor: allows to monitor in several netns
authorNicolas Dichtel <nicolas.dichtel@6wind.com>
Wed, 20 May 2015 14:20:01 +0000 (16:20 +0200)
committerStephen Hemminger <shemming@brocade.com>
Thu, 21 May 2015 22:28:56 +0000 (15:28 -0700)
With this patch, it's now possible to listen in all netns that have an nsid
assigned into the netns where is socket is opened.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
ip/xfrm_monitor.c
man/man8/ip-xfrm.8

index 2119c51d92ac6debd1359691023294ff4150ae52..ebccb71c688ef0099f1bee36b2f86b29af30e6e8 100644 (file)
 #include "ip_common.h"
 
 static void usage(void) __attribute__((noreturn));
+int listen_all_nsid;
 
 static void usage(void)
 {
-       fprintf(stderr, "Usage: ip xfrm monitor [ all | OBJECTS | help ]\n");
+       fprintf(stderr, "Usage: ip xfrm monitor [all-nsid] [ all | OBJECTS | help ]\n");
        fprintf(stderr, "OBJECTS := { acquire | expire | SA | aevent | policy | report }\n");
        exit(-1);
 }
@@ -298,6 +299,13 @@ static int xfrm_accept_msg(const struct sockaddr_nl *who,
        if (timestamp)
                print_timestamp(fp);
 
+       if (listen_all_nsid) {
+               if (ctrl == NULL || ctrl->nsid < 0)
+                       fprintf(fp, "[nsid current]");
+               else
+                       fprintf(fp, "[nsid %d]", ctrl->nsid);
+       }
+
        switch (n->nlmsg_type) {
        case XFRM_MSG_NEWSA:
        case XFRM_MSG_DELSA:
@@ -360,6 +368,8 @@ int do_xfrm_monitor(int argc, char **argv)
                if (matches(*argv, "file") == 0) {
                        NEXT_ARG();
                        file = *argv;
+               } else if (matches(*argv, "all-nsid") == 0) {
+                       listen_all_nsid = 1;
                } else if (matches(*argv, "acquire") == 0) {
                        lacquire=1;
                        groups = 0;
@@ -412,6 +422,8 @@ int do_xfrm_monitor(int argc, char **argv)
 
        if (rtnl_open_byproto(&rth, groups, NETLINK_XFRM) < 0)
                exit(1);
+       if (listen_all_nsid && rtnl_listen_all_nsid(&rth) < 0)
+               exit(1);
 
        if (rtnl_listen(&rth, xfrm_accept_msg, (void*)stdout) < 0)
                exit(2);
index 29b397f3595937f22bcb020a1ec45931e098b8e0..489ab6ed4964f6292c28d4c379d5e198c130d6a6 100644 (file)
@@ -364,7 +364,11 @@ ip-xfrm \- transform configuration
 .BR required " | " use
 
 .ti -8
-.BR "ip xfrm monitor" " [ " all " |"
+.BR "ip xfrm monitor" " ["
+.BI all-nsid
+] [
+.BI all
+ |
 .IR LISTofXFRM-OBJECTS " ]"
 
 .ti -8
@@ -669,7 +673,22 @@ ip xfrm monitor    state monitoring for xfrm objects
 .PP
 The xfrm objects to monitor can be optionally specified.
 
+.P
+If the
+.BI all-nsid
+option is set, the program listens to all network namespaces that have a
+nsid assigned into the network namespace were the program is running.
+A prefix is displayed to show the network namespace where the message
+originates. Example:
+.sp
+.in +2
+[nsid 1]Flushed state proto 0
+.in -2
+.sp
+
 .SH AUTHOR
 Manpage revised by David Ward <david.ward@ll.mit.edu>
 .br
 Manpage revised by Christophe Gouault <christophe.gouault@6wind.com>
+.br
+Manpage revised by Nicolas Dichtel <nicolas.dichtel@6wind.com>