[PATCH 1/3] sockaddr: Implement decoding of AF_TIPC socket addresses
sahilcdq0 at gmail.com
sahilcdq0 at gmail.com
Thu May 22 19:33:59 UTC 2025
From: Sahil Siddiq <sahilcdq0 at gmail.com>
* src/sockaddr.c: Include <linux/tipc.h> and "xlat/af_tipc_*" headers.
(print_sockaddr_data_tipc): New function.
(print_sockaddr_data_raw): Add AF_TIPC decoding.
* src/xlat/af_tipc_scope.in: New file.
* src/xlat/af_tipc_types.in: New file.
Signed-off-by: Sahil Siddiq <sahilcdq0 at gmail.com>
---
src/sockaddr.c | 75 +++++++++++++++++++++++++++++++++++++++
src/xlat/af_tipc_scope.in | 2 ++
src/xlat/af_tipc_types.in | 4 +++
3 files changed, 81 insertions(+)
create mode 100644 src/xlat/af_tipc_scope.in
create mode 100644 src/xlat/af_tipc_types.in
diff --git a/src/sockaddr.c b/src/sockaddr.c
index ee1ce8828..6d15da352 100644
--- a/src/sockaddr.c
+++ b/src/sockaddr.c
@@ -27,6 +27,7 @@
#include <linux/mctp.h>
#include <linux/nfc.h>
#include <linux/qrtr.h>
+#include <linux/tipc.h>
#include <linux/vm_sockets.h>
#include <linux/x25.h>
@@ -35,6 +36,9 @@
#include "xlat/ethernet_protocols.h"
#include "xlat/af_packet_types.h"
+#include "xlat/af_tipc_scope.h"
+#include "xlat/af_tipc_types.h"
+
#include "xlat/bdaddr_types.h"
#include "xlat/bluetooth_l2_cid.h"
#include "xlat/bluetooth_l2_psm.h"
@@ -580,6 +584,76 @@ print_sockaddr_data_ll(struct tcb *tcp, const void *const buf,
}
}
+static void
+print_sockaddr_data_tipc(struct tcb *tcp, const void *const buf,
+ const int len)
+{
+ const struct sockaddr_tipc *const sa = buf;
+
+ PRINT_FIELD_XVAL_VERBOSE(*sa, addrtype, af_tipc_types, "TIPC_ADDR_???");
+ tprint_struct_next();
+ tprints_field_name("scope");
+
+ signed char scope = sa->scope;
+
+ if (scope < 0) {
+ tprints_string("-");
+ scope = -scope;
+ }
+
+ printxval(af_tipc_scope, scope, "TIPC_???_SCOPE");
+ tprint_struct_next();
+ tprints_field_name("addr");
+
+ const void *const addr_buf = buf + offsetof(struct sockaddr_tipc, addr);
+ const int addr_len = sizeof(struct sockaddr_tipc) - offsetof(struct sockaddr_tipc, addr);
+
+ switch (sa->addrtype) {
+ case TIPC_SERVICE_RANGE:
+ tprint_union_begin();
+ tprints_field_name("nameseq");
+ tprint_struct_begin();
+ PRINT_FIELD_U(sa->addr.nameseq, type);
+ tprint_struct_next();
+ PRINT_FIELD_U(sa->addr.nameseq, lower);
+ tprint_struct_next();
+ PRINT_FIELD_U(sa->addr.nameseq, upper);
+ tprint_struct_end();
+ break;
+
+ case TIPC_SERVICE_ADDR:
+ tprint_union_begin();
+ tprints_field_name("name");
+ tprint_struct_begin();
+ tprints_field_name("name");
+ tprint_struct_begin();
+ PRINT_FIELD_U(sa->addr.name.name, type);
+ tprint_struct_next();
+ PRINT_FIELD_U(sa->addr.name.name, instance);
+ tprint_struct_end();
+ tprint_struct_next();
+ PRINT_FIELD_X(sa->addr.name, domain);
+ tprint_struct_end();
+ break;
+
+ case TIPC_SOCKET_ADDR:
+ tprint_union_begin();
+ tprints_field_name("id");
+ tprint_struct_begin();
+ PRINT_FIELD_U(sa->addr.id, ref);
+ tprint_struct_next();
+ PRINT_FIELD_X(sa->addr.id, node);
+ tprint_struct_end();
+ break;
+
+ default:
+ print_quoted_string(addr_buf, addr_len, 0);
+ return;
+ }
+
+ tprint_union_end();
+}
+
static void
print_sockaddr_data_raw(const void *const buf, const int addrlen)
{
@@ -1037,6 +1111,7 @@ static const struct {
[AF_INET6] = { print_sockaddr_data_in6, SIN6_MIN_LEN },
[AF_NETLINK] = { print_sockaddr_data_nl, sizeof(struct sockaddr_nl) },
[AF_PACKET] = { print_sockaddr_data_ll, sizeof(struct sockaddr_ll) },
+ [AF_TIPC] = { print_sockaddr_data_tipc, sizeof(struct sockaddr_tipc) },
[AF_BLUETOOTH] = { print_sockaddr_data_bt, SIZEOF_SA_FAMILY + 1 },
[AF_RXRPC] = { print_sockaddr_data_rxrpc, sizeof(struct sockaddr_rxrpc) },
[AF_IEEE802154] = { print_sockaddr_data_ieee802154, sizeof(struct sockaddr_ieee802154) },
diff --git a/src/xlat/af_tipc_scope.in b/src/xlat/af_tipc_scope.in
new file mode 100644
index 000000000..b026019c5
--- /dev/null
+++ b/src/xlat/af_tipc_scope.in
@@ -0,0 +1,2 @@
+TIPC_CLUSTER_SCOPE 2
+TIPC_NODE_SCOPE 3
diff --git a/src/xlat/af_tipc_types.in b/src/xlat/af_tipc_types.in
new file mode 100644
index 000000000..8f6d778e7
--- /dev/null
+++ b/src/xlat/af_tipc_types.in
@@ -0,0 +1,4 @@
+#value_indexed
+TIPC_SERVICE_RANGE 1
+TIPC_SERVICE_ADDR 2
+TIPC_SOCKET_ADDR 3
--
2.49.0
More information about the Strace-devel
mailing list