[PATCH v2 5/6] netlink: decode "family" field of Netlink GENERIC protocol

Masatake YAMATO yamato at redhat.com
Sun Jun 11 07:42:31 UTC 2017


Example session:

  $ ./strace -yy -e 'sendto' ip tcp_metrics > /dev/null
  sendto(4<NETLINK:[GENERIC:7939]>, {{len=20, type=tcp_metrics, ...
  +++ exited with 0 +++

type= is decoded well.

* netlink.c (nlmsg_types): Remove const modifiers to allow to
install a xlat table for decoding the field made at run-time.
Add an element for NETLINK_GENERIC.
(decode_nlmsg_type): Install the xlat table to the NETLINK_GENERIC
element of nlmsg_types.

Signed-off-by: Masatake YAMATO <yamato at redhat.com>
---
 netlink.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/netlink.c b/netlink.c
index 049843d..541fa59 100644
--- a/netlink.c
+++ b/netlink.c
@@ -100,11 +100,12 @@ get_fd_nl_family(struct tcb *const tcp, const int fd)
 	return NL_FAMILY_ERROR;
 }
 
-static const struct {
-	const struct xlat *const xlat;
+static struct {
+	const struct xlat *xlat;
 	const char *const dflt;
 } nlmsg_types[] = {
 	[NETLINK_AUDIT] = { nl_audit_types, "AUDIT_???" },
+	[NETLINK_GENERIC] = { NULL, "GENERIC_FAMILY_???" },
 	[NETLINK_NETFILTER] = { nl_netfilter_subsys_ids, "NFNL_SUBSYS_???" },
 	[NETLINK_ROUTE] = { nl_route_types, "RTM_???" },
 	[NETLINK_SELINUX] = { nl_selinux_types, "SELNL_MSG_???" },
@@ -119,6 +120,9 @@ static const struct {
 static void
 decode_nlmsg_type(const uint16_t type, const unsigned int family)
 {
+	if (!nlmsg_types[NETLINK_GENERIC].xlat)
+		nlmsg_types[NETLINK_GENERIC].xlat = genl_families_xlat();
+
 	if (family < ARRAY_SIZE(nlmsg_types)
 	    && nlmsg_types[family].xlat) {
 		if (family == NETLINK_NETFILTER) {
-- 
2.9.4





More information about the Strace-devel mailing list