[PATCH 2/3] net: Implement decoding of AF_TIPC socket options

sahilcdq0 at gmail.com sahilcdq0 at gmail.com
Thu May 22 19:34:00 UTC 2025


From: Sahil Siddiq <sahilcdq0 at gmail.com>

* src/net.c: Include <linux/tipc.h> and "xlat/af_tipc_*" headers.
(print_tipc_importance): New function.
(print_tipc_group_join): New function.
(print_getsockopt): Decode AF_TIPC socket options.
(print_setsockopt): Likewise.
* src/xlat/af_tipc_flags.in: New file.
* src/xlat/af_tipc_importance.in: New file.
* NEWS: Mention this change.

Signed-off-by: Sahil Siddiq <sahilcdq0 at gmail.com>
---
 NEWS                           |  1 +
 src/net.c                      | 80 ++++++++++++++++++++++++++++++++++
 src/xlat/af_tipc_flags.in      |  3 ++
 src/xlat/af_tipc_importance.in |  5 +++
 4 files changed, 89 insertions(+)
 create mode 100644 src/xlat/af_tipc_flags.in
 create mode 100644 src/xlat/af_tipc_importance.in

diff --git a/NEWS b/NEWS
index 7f7375855..b645eb04a 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ Noteworthy changes in release ?.?? (????-??-??)
 ===============================================
 
 * Improvements
+  * Implemented decoding of AF_TIPC socket addresses and socket options.
 
 Noteworthy changes in release 6.14 (2025-03-25)
 ===============================================
diff --git a/src/net.c b/src/net.c
index 4d3c795dd..324256477 100644
--- a/src/net.c
+++ b/src/net.c
@@ -43,6 +43,7 @@
 #include <linux/if_packet.h>
 #include <linux/icmp.h>
 #include <linux/tcp.h>
+#include <linux/tipc.h>
 #include <linux/vm_sockets.h>
 
 #include "xlat/socktypes.h"
@@ -922,6 +923,57 @@ print_tcp_ao_add_key(struct tcb *const tcp, const kernel_ulong_t addr, int len)
 	tprint_struct_end();
 }
 
+#include "xlat/af_tipc_importance.h"
+
+static void
+print_tipc_importance(struct tcb *const tcp, const kernel_ulong_t addr, int len)
+{
+	int importance;
+
+	if (len > (int) sizeof(importance))
+		len = sizeof(importance);
+	else if (len < (int) sizeof(importance)) {
+		printaddr(addr);
+		return;
+	}
+
+	if (umoven_or_printaddr(tcp, addr, len, &importance))
+		return;
+
+	tprint_indirect_begin();
+	printxval_u(af_tipc_importance, importance, "TIPC_???_IMPORTANCE");
+	tprint_indirect_end();
+}
+
+#include "xlat/af_tipc_flags.h"
+#include "xlat/af_tipc_scope.h"
+
+static void
+print_tipc_group_join(struct tcb *const tcp, const kernel_ulong_t addr, int len)
+{
+	struct tipc_group_req group = {};
+
+	if (len > (int) sizeof(group))
+		len = sizeof(group);
+	else if (len < (int) sizeof(struct tipc_group_req)) {
+		printaddr(addr);
+		return;
+	}
+
+	if (umoven_or_printaddr(tcp, addr, len, &group))
+		return;
+
+	tprint_struct_begin();
+	PRINT_FIELD_U(group, type);
+	tprint_struct_next();
+	PRINT_FIELD_U(group, instance);
+	tprint_struct_next();
+	PRINT_FIELD_XVAL_U(group, scope, af_tipc_scope, "TIPC_???_SCOPE");
+	tprint_struct_next();
+	PRINT_FIELD_FLAGS(group, flags, af_tipc_flags, "TIPC_GROUP_???");
+	tprint_struct_end();
+}
+
 static void
 print_getsockopt(struct tcb *const tcp, const unsigned int level,
 		 const unsigned int name, const kernel_ulong_t addr,
@@ -1064,6 +1116,20 @@ print_getsockopt(struct tcb *const tcp, const unsigned int level,
 			break;
 		}
 		return;
+
+	case SOL_TIPC:
+		switch(name) {
+		case TIPC_IMPORTANCE:
+			print_tipc_importance(tcp, addr, rlen);
+			break;
+		case TIPC_GROUP_JOIN:
+			print_tipc_group_join(tcp, addr, rlen);
+			break;
+		default:
+			printnum_int(tcp, addr, "%d");
+			break;
+		}
+		return;
 	}
 
 	/* default arg printing */
@@ -1383,6 +1449,20 @@ print_setsockopt(struct tcb *const tcp, const unsigned int level,
 			return;
 		}
 		break;
+
+	case SOL_TIPC:
+		switch(name) {
+		case TIPC_IMPORTANCE:
+			print_tipc_importance(tcp, addr, len);
+			break;
+		case TIPC_GROUP_JOIN:
+			print_tipc_group_join(tcp, addr, len);
+			break;
+		default:
+			printnum_int(tcp, addr, "%d");
+			break;
+		}
+		return;
 	}
 
 	/* default arg printing */
diff --git a/src/xlat/af_tipc_flags.in b/src/xlat/af_tipc_flags.in
new file mode 100644
index 000000000..08f043f5b
--- /dev/null
+++ b/src/xlat/af_tipc_flags.in
@@ -0,0 +1,3 @@
+#value_indexed
+TIPC_GROUP_LOOPBACK		1
+TIPC_GROUP_MEMBER_EVTS		2
diff --git a/src/xlat/af_tipc_importance.in b/src/xlat/af_tipc_importance.in
new file mode 100644
index 000000000..41314a41d
--- /dev/null
+++ b/src/xlat/af_tipc_importance.in
@@ -0,0 +1,5 @@
+#value_indexed
+TIPC_LOW_IMPORTANCE		0
+TIPC_MEDIUM_IMPORTANCE		1
+TIPC_HIGH_IMPORTANCE		2
+TIPC_CRITICAL_IMPORTANCE	3
-- 
2.49.0



More information about the Strace-devel mailing list