You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
selftests/bpf: Tests for BPF_SK_LOOKUP attach point
Add tests to test_progs that exercise: - attaching/detaching/querying programs to BPF_SK_LOOKUP hook, - redirecting socket lookup to a socket selected by BPF program, - failing a socket lookup on BPF program's request, - error scenarios for selecting a socket from BPF program, - accessing BPF program context, - attaching and running multiple BPF programs. Run log: bash-5.0# ./test_progs -n 70 #70/1 query lookup prog:OK #70/2 TCP IPv4 redir port:OK #70/3 TCP IPv4 redir addr:OK #70/4 TCP IPv4 redir with reuseport:OK #70/5 TCP IPv4 redir skip reuseport:OK #70/6 TCP IPv6 redir port:OK #70/7 TCP IPv6 redir addr:OK #70/8 TCP IPv4->IPv6 redir port:OK #70/9 TCP IPv6 redir with reuseport:OK #70/10 TCP IPv6 redir skip reuseport:OK #70/11 UDP IPv4 redir port:OK #70/12 UDP IPv4 redir addr:OK #70/13 UDP IPv4 redir with reuseport:OK #70/14 UDP IPv4 redir skip reuseport:OK #70/15 UDP IPv6 redir port:OK #70/16 UDP IPv6 redir addr:OK #70/17 UDP IPv4->IPv6 redir port:OK #70/18 UDP IPv6 redir and reuseport:OK #70/19 UDP IPv6 redir skip reuseport:OK #70/20 TCP IPv4 drop on lookup:OK #70/21 TCP IPv6 drop on lookup:OK #70/22 UDP IPv4 drop on lookup:OK #70/23 UDP IPv6 drop on lookup:OK #70/24 TCP IPv4 drop on reuseport:OK #70/25 TCP IPv6 drop on reuseport:OK #70/26 UDP IPv4 drop on reuseport:OK #70/27 TCP IPv6 drop on reuseport:OK #70/28 sk_assign returns EEXIST:OK #70/29 sk_assign honors F_REPLACE:OK #70/30 sk_assign accepts NULL socket:OK #70/31 access ctx->sk:OK #70/32 narrow access to ctx v4:OK #70/33 narrow access to ctx v6:OK #70/34 sk_assign rejects TCP established:OK #70/35 sk_assign rejects UDP connected:OK #70/36 multi prog - pass, pass:OK #70/37 multi prog - drop, drop:OK #70/38 multi prog - pass, drop:OK #70/39 multi prog - drop, pass:OK #70/40 multi prog - pass, redir:OK #70/41 multi prog - redir, pass:OK #70/42 multi prog - drop, redir:OK #70/43 multi prog - redir, drop:OK #70/44 multi prog - redir, redir:OK #70 sk_lookup:OK Summary: 1/44 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20200717103536.397595-16-jakub@cloudflare.com
This commit is contained in:
committed by
Alexei Starovoitov
parent
f7726cbea4
commit
0ab5539f85
@@ -73,29 +73,8 @@ int start_server(int family, int type, const char *addr_str, __u16 port,
|
||||
socklen_t len;
|
||||
int fd;
|
||||
|
||||
if (family == AF_INET) {
|
||||
struct sockaddr_in *sin = (void *)&addr;
|
||||
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_port = htons(port);
|
||||
if (addr_str &&
|
||||
inet_pton(AF_INET, addr_str, &sin->sin_addr) != 1) {
|
||||
log_err("inet_pton(AF_INET, %s)", addr_str);
|
||||
return -1;
|
||||
}
|
||||
len = sizeof(*sin);
|
||||
} else {
|
||||
struct sockaddr_in6 *sin6 = (void *)&addr;
|
||||
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_port = htons(port);
|
||||
if (addr_str &&
|
||||
inet_pton(AF_INET6, addr_str, &sin6->sin6_addr) != 1) {
|
||||
log_err("inet_pton(AF_INET6, %s)", addr_str);
|
||||
return -1;
|
||||
}
|
||||
len = sizeof(*sin6);
|
||||
}
|
||||
if (make_sockaddr(family, addr_str, port, &addr, &len))
|
||||
return -1;
|
||||
|
||||
fd = socket(family, type, 0);
|
||||
if (fd < 0) {
|
||||
@@ -194,3 +173,36 @@ int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int make_sockaddr(int family, const char *addr_str, __u16 port,
|
||||
struct sockaddr_storage *addr, socklen_t *len)
|
||||
{
|
||||
if (family == AF_INET) {
|
||||
struct sockaddr_in *sin = (void *)addr;
|
||||
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_port = htons(port);
|
||||
if (addr_str &&
|
||||
inet_pton(AF_INET, addr_str, &sin->sin_addr) != 1) {
|
||||
log_err("inet_pton(AF_INET, %s)", addr_str);
|
||||
return -1;
|
||||
}
|
||||
if (len)
|
||||
*len = sizeof(*sin);
|
||||
return 0;
|
||||
} else if (family == AF_INET6) {
|
||||
struct sockaddr_in6 *sin6 = (void *)addr;
|
||||
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_port = htons(port);
|
||||
if (addr_str &&
|
||||
inet_pton(AF_INET6, addr_str, &sin6->sin6_addr) != 1) {
|
||||
log_err("inet_pton(AF_INET6, %s)", addr_str);
|
||||
return -1;
|
||||
}
|
||||
if (len)
|
||||
*len = sizeof(*sin6);
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -37,5 +37,7 @@ int start_server(int family, int type, const char *addr, __u16 port,
|
||||
int timeout_ms);
|
||||
int connect_to_fd(int server_fd, int timeout_ms);
|
||||
int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms);
|
||||
int make_sockaddr(int family, const char *addr_str, __u16 port,
|
||||
struct sockaddr_storage *addr, socklen_t *len);
|
||||
|
||||
#endif
|
||||
|
||||
1282
tools/testing/selftests/bpf/prog_tests/sk_lookup.c
Normal file
1282
tools/testing/selftests/bpf/prog_tests/sk_lookup.c
Normal file
File diff suppressed because it is too large
Load Diff
641
tools/testing/selftests/bpf/progs/test_sk_lookup.c
Normal file
641
tools/testing/selftests/bpf/progs/test_sk_lookup.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user