Skip to content

Commit 0ab5539

Browse files
jsitnickiAlexei Starovoitov
authored andcommitted
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 <[email protected]> Signed-off-by: Alexei Starovoitov <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent f7726cb commit 0ab5539

File tree

4 files changed

+1960
-23
lines changed

4 files changed

+1960
-23
lines changed

tools/testing/selftests/bpf/network_helpers.c

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,29 +73,8 @@ int start_server(int family, int type, const char *addr_str, __u16 port,
7373
socklen_t len;
7474
int fd;
7575

76-
if (family == AF_INET) {
77-
struct sockaddr_in *sin = (void *)&addr;
78-
79-
sin->sin_family = AF_INET;
80-
sin->sin_port = htons(port);
81-
if (addr_str &&
82-
inet_pton(AF_INET, addr_str, &sin->sin_addr) != 1) {
83-
log_err("inet_pton(AF_INET, %s)", addr_str);
84-
return -1;
85-
}
86-
len = sizeof(*sin);
87-
} else {
88-
struct sockaddr_in6 *sin6 = (void *)&addr;
89-
90-
sin6->sin6_family = AF_INET6;
91-
sin6->sin6_port = htons(port);
92-
if (addr_str &&
93-
inet_pton(AF_INET6, addr_str, &sin6->sin6_addr) != 1) {
94-
log_err("inet_pton(AF_INET6, %s)", addr_str);
95-
return -1;
96-
}
97-
len = sizeof(*sin6);
98-
}
76+
if (make_sockaddr(family, addr_str, port, &addr, &len))
77+
return -1;
9978

10079
fd = socket(family, type, 0);
10180
if (fd < 0) {
@@ -194,3 +173,36 @@ int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms)
194173

195174
return 0;
196175
}
176+
177+
int make_sockaddr(int family, const char *addr_str, __u16 port,
178+
struct sockaddr_storage *addr, socklen_t *len)
179+
{
180+
if (family == AF_INET) {
181+
struct sockaddr_in *sin = (void *)addr;
182+
183+
sin->sin_family = AF_INET;
184+
sin->sin_port = htons(port);
185+
if (addr_str &&
186+
inet_pton(AF_INET, addr_str, &sin->sin_addr) != 1) {
187+
log_err("inet_pton(AF_INET, %s)", addr_str);
188+
return -1;
189+
}
190+
if (len)
191+
*len = sizeof(*sin);
192+
return 0;
193+
} else if (family == AF_INET6) {
194+
struct sockaddr_in6 *sin6 = (void *)addr;
195+
196+
sin6->sin6_family = AF_INET6;
197+
sin6->sin6_port = htons(port);
198+
if (addr_str &&
199+
inet_pton(AF_INET6, addr_str, &sin6->sin6_addr) != 1) {
200+
log_err("inet_pton(AF_INET6, %s)", addr_str);
201+
return -1;
202+
}
203+
if (len)
204+
*len = sizeof(*sin6);
205+
return 0;
206+
}
207+
return -1;
208+
}

tools/testing/selftests/bpf/network_helpers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,7 @@ int start_server(int family, int type, const char *addr, __u16 port,
3737
int timeout_ms);
3838
int connect_to_fd(int server_fd, int timeout_ms);
3939
int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms);
40+
int make_sockaddr(int family, const char *addr_str, __u16 port,
41+
struct sockaddr_storage *addr, socklen_t *len);
4042

4143
#endif

0 commit comments

Comments
 (0)