selftests/bpf: Add socket_kind_to_str() to socket_helpers
authorMichal Luczaj <mhal@rbox.co>
Wed, 14 May 2025 22:15:25 +0000 (00:15 +0200)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 22 May 2025 21:26:58 +0000 (14:26 -0700)
Add function that returns string representation of socket's domain/type.

Suggested-by: Jakub Sitnicki <jakub@cloudflare.com>
Signed-off-by: Michal Luczaj <mhal@rbox.co>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20250515-selftests-sockmap-redir-v3-2-a1ea723f7e7e@rbox.co
tools/testing/selftests/bpf/prog_tests/socket_helpers.h

index e505c2f2595a24be9dd5b534deef4793f9a02f77..e02cabcc814e9a6a11d61ad02cf38696fb0f27ff 100644 (file)
@@ -410,4 +410,59 @@ static inline int create_socket_pairs(int family, int sotype, int *c0, int *c1,
        return err;
 }
 
+static inline const char *socket_kind_to_str(int sock_fd)
+{
+       socklen_t opt_len;
+       int domain, type;
+
+       opt_len = sizeof(domain);
+       if (getsockopt(sock_fd, SOL_SOCKET, SO_DOMAIN, &domain, &opt_len))
+               FAIL_ERRNO("getsockopt(SO_DOMAIN)");
+
+       opt_len = sizeof(type);
+       if (getsockopt(sock_fd, SOL_SOCKET, SO_TYPE, &type, &opt_len))
+               FAIL_ERRNO("getsockopt(SO_TYPE)");
+
+       switch (domain) {
+       case AF_INET:
+               switch (type) {
+               case SOCK_STREAM:
+                       return "tcp4";
+               case SOCK_DGRAM:
+                       return "udp4";
+               }
+               break;
+       case AF_INET6:
+               switch (type) {
+               case SOCK_STREAM:
+                       return "tcp6";
+               case SOCK_DGRAM:
+                       return "udp6";
+               }
+               break;
+       case AF_UNIX:
+               switch (type) {
+               case SOCK_STREAM:
+                       return "u_str";
+               case SOCK_DGRAM:
+                       return "u_dgr";
+               case SOCK_SEQPACKET:
+                       return "u_seq";
+               }
+               break;
+       case AF_VSOCK:
+               switch (type) {
+               case SOCK_STREAM:
+                       return "v_str";
+               case SOCK_DGRAM:
+                       return "v_dgr";
+               case SOCK_SEQPACKET:
+                       return "v_seq";
+               }
+               break;
+       }
+
+       return "???";
+}
+
 #endif // __SOCKET_HELPERS__