Commit 176ba657 authored by Aditi Ghag's avatar Aditi Ghag Committed by Martin KaFai Lau
Browse files

selftests/bpf: Add helper to get port using getsockname



The helper will be used to programmatically retrieve
and pass ports in userspace and kernel selftest programs.

Suggested-by: default avatarStanislav Fomichev <sdf@google.com>
Signed-off-by: default avatarAditi Ghag <aditi.ghag@isovalent.com>
Link: https://lore.kernel.org/r/20230519225157.760788-9-aditi.ghag@isovalent.com


Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
parent 4ddbcb88
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -427,3 +427,26 @@ void close_netns(struct nstoken *token)
	close(token->orig_netns_fd);
	free(token);
}

int get_socket_local_port(int sock_fd)
{
	struct sockaddr_storage addr;
	socklen_t addrlen = sizeof(addr);
	int err;

	err = getsockname(sock_fd, (struct sockaddr *)&addr, &addrlen);
	if (err < 0)
		return err;

	if (addr.ss_family == AF_INET) {
		struct sockaddr_in *sin = (struct sockaddr_in *)&addr;

		return sin->sin_port;
	} else if (addr.ss_family == AF_INET6) {
		struct sockaddr_in6 *sin = (struct sockaddr_in6 *)&addr;

		return sin->sin6_port;
	}

	return -1;
}
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
int make_sockaddr(int family, const char *addr_str, __u16 port,
		  struct sockaddr_storage *addr, socklen_t *len);
char *ping_command(int family);
int get_socket_local_port(int sock_fd);

struct nstoken;
/**