[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