[PATCH 3/4] nfnetlink: introduce generic netfilter subsystem decoder

Chen Jingpiao chenjingpiao at gmail.com
Thu Jan 18 14:02:34 UTC 2018


* defs.h (nl_netfilter_msg_types): New xlat prototype.
* netlink_netfilter.c: Include "nlattr.h".
(decode_netlink_netfilter): Call decode_nlattr.
---
 defs.h              |  1 +
 netlink_netfilter.c | 11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/defs.h b/defs.h
index 6b51626..cf75802 100644
--- a/defs.h
+++ b/defs.h
@@ -287,6 +287,7 @@ extern const struct xlat inet_protocols[];
 extern const struct xlat ip_type_of_services[];
 extern const struct xlat msg_flags[];
 extern const struct xlat netlink_protocols[];
+extern const struct xlat nl_netfilter_msg_types[];
 extern const struct xlat nl_route_types[];
 extern const struct xlat open_access_modes[];
 extern const struct xlat open_mode_flags[];
diff --git a/netlink_netfilter.c b/netlink_netfilter.c
index a5efeb6..2840301 100644
--- a/netlink_netfilter.c
+++ b/netlink_netfilter.c
@@ -31,6 +31,7 @@
 #ifdef HAVE_LINUX_NETFILTER_NFNETLINK_H
 
 # include "print_fields.h"
+# include "nlattr.h"
 
 # include <netinet/in.h>
 # include <arpa/inet.h>
@@ -77,8 +78,14 @@ decode_netlink_netfilter(struct tcb *const tcp,
 		const size_t offset = NLMSG_ALIGN(sizeof(nfmsg));
 		if (len > offset) {
 			tprints(", ");
-			printstr_ex(tcp, addr + offset,
-				    len - offset, QUOTE_FORCE_HEX);
+			if (subsys_id >= NFNL_SUBSYS_COUNT
+			    || xlookup(nl_netfilter_msg_types,
+				       nlmsghdr->nlmsg_type))
+				printstr_ex(tcp, addr + offset,
+					    len - offset, QUOTE_FORCE_HEX);
+			else
+				decode_nlattr(tcp, addr + offset, len - offset,
+					      NULL, NULL, NULL, 0, NULL);
 		}
 	}
 
-- 
2.7.4





More information about the Strace-devel mailing list