Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Aditi Ghag and committed by
Martin KaFai Lau
176ba657 4ddbcb88

+24
+23
tools/testing/selftests/bpf/network_helpers.c
··· 427 427 close(token->orig_netns_fd); 428 428 free(token); 429 429 } 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 + }
+1
tools/testing/selftests/bpf/network_helpers.h
··· 56 56 int make_sockaddr(int family, const char *addr_str, __u16 port, 57 57 struct sockaddr_storage *addr, socklen_t *len); 58 58 char *ping_command(int family); 59 + int get_socket_local_port(int sock_fd); 59 60 60 61 struct nstoken; 61 62 /**