Skip to content

Commit 176ba65

Browse files
aditighagMartin KaFai Lau
authored andcommitted
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: Stanislav Fomichev <sdf@google.com> Signed-off-by: Aditi Ghag <aditi.ghag@isovalent.com> Link: https://lore.kernel.org/r/20230519225157.760788-9-aditi.ghag@isovalent.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
1 parent 4ddbcb8 commit 176ba65

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

tools/testing/selftests/bpf/network_helpers.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,3 +427,26 @@ void close_netns(struct nstoken *token)
427427
close(token->orig_netns_fd);
428428
free(token);
429429
}
430+
431+
int get_socket_local_port(int sock_fd)
432+
{
433+
struct sockaddr_storage addr;
434+
socklen_t addrlen = sizeof(addr);
435+
int err;
436+
437+
err = getsockname(sock_fd, (struct sockaddr *)&addr, &addrlen);
438+
if (err < 0)
439+
return err;
440+
441+
if (addr.ss_family == AF_INET) {
442+
struct sockaddr_in *sin = (struct sockaddr_in *)&addr;
443+
444+
return sin->sin_port;
445+
} else if (addr.ss_family == AF_INET6) {
446+
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)&addr;
447+
448+
return sin->sin6_port;
449+
}
450+
451+
return -1;
452+
}

tools/testing/selftests/bpf/network_helpers.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
5656
int make_sockaddr(int family, const char *addr_str, __u16 port,
5757
struct sockaddr_storage *addr, socklen_t *len);
5858
char *ping_command(int family);
59+
int get_socket_local_port(int sock_fd);
5960

6061
struct nstoken;
6162
/**

0 commit comments

Comments
 (0)