Commit d8785794 authored by Michal Luczaj's avatar Michal Luczaj Committed by Martin KaFai Lau
Browse files

selftests/bpf: Add socket_kind_to_str() to socket_helpers



Add function that returns string representation of socket's domain/type.

Suggested-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
Signed-off-by: default avatarMichal Luczaj <mhal@rbox.co>
Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
Reviewed-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20250515-selftests-sockmap-redir-v3-2-a1ea723f7e7e@rbox.co
parent fb1131d5
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -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__