Skip to content

Commit 9b3a386

Browse files
committed
selftests/bpf: Add helper to get port using getsockname
JIRA: https://issues.redhat.com/browse/RHEL-65787 commit 176ba65 Author: Aditi Ghag <aditi.ghag@isovalent.com> Date: Fri May 19 22:51:56 2023 +0000 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> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
1 parent e9b6f5c commit 9b3a386

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
@@ -57,6 +57,7 @@ int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
5757
int make_sockaddr(int family, const char *addr_str, __u16 port,
5858
struct sockaddr_storage *addr, socklen_t *len);
5959
char *ping_command(int family);
60+
int get_socket_local_port(int sock_fd);
6061

6162
struct nstoken;
6263
/**

0 commit comments

Comments
 (0)