Skip to content

Commit f004681

Browse files
jrifeMartin KaFai Lau
authored andcommitted
selftests/bpf: Allow for iteration over multiple states
Add parentheses around loopback address check to fix up logic and make the socket state filter configurable for the TCP socket iterators. Iterators can skip the socket state check by setting ss to 0. Signed-off-by: Jordan Rife <[email protected]> Signed-off-by: Martin KaFai Lau <[email protected]> Acked-by: Stanislav Fomichev <[email protected]>
1 parent 346066c commit f004681

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

tools/testing/selftests/bpf/prog_tests/sock_iter_batch.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ static void do_resume_test(struct test_case *tc)
433433
skel->rodata->ports[0] = 0;
434434
skel->rodata->ports[1] = 0;
435435
skel->rodata->sf = tc->family;
436+
skel->rodata->ss = 0;
436437

437438
err = sock_iter_batch__load(skel);
438439
if (!ASSERT_OK(err, "sock_iter_batch__load"))
@@ -498,6 +499,8 @@ static void do_test(int sock_type, bool onebyone)
498499
skel->rodata->ports[i] = ntohs(local_port);
499500
}
500501
skel->rodata->sf = AF_INET6;
502+
if (sock_type == SOCK_STREAM)
503+
skel->rodata->ss = TCP_LISTEN;
501504

502505
err = sock_iter_batch__load(skel);
503506
if (!ASSERT_OK(err, "sock_iter_batch__load"))

tools/testing/selftests/bpf/progs/sock_iter_batch.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ static bool ipv4_addr_loopback(__be32 a)
2323
}
2424

2525
volatile const unsigned int sf;
26+
volatile const unsigned int ss;
2627
volatile const __u16 ports[2];
2728
unsigned int bucket[2];
2829

@@ -42,10 +43,10 @@ int iter_tcp_soreuse(struct bpf_iter__tcp *ctx)
4243
sock_cookie = bpf_get_socket_cookie(sk);
4344
sk = bpf_core_cast(sk, struct sock);
4445
if (sk->sk_family != sf ||
45-
sk->sk_state != TCP_LISTEN ||
46-
sk->sk_family == AF_INET6 ?
46+
(ss && sk->sk_state != ss) ||
47+
(sk->sk_family == AF_INET6 ?
4748
!ipv6_addr_loopback(&sk->sk_v6_rcv_saddr) :
48-
!ipv4_addr_loopback(sk->sk_rcv_saddr))
49+
!ipv4_addr_loopback(sk->sk_rcv_saddr)))
4950
return 0;
5051

5152
if (sk->sk_num == ports[0])
@@ -85,9 +86,9 @@ int iter_udp_soreuse(struct bpf_iter__udp *ctx)
8586
sock_cookie = bpf_get_socket_cookie(sk);
8687
sk = bpf_core_cast(sk, struct sock);
8788
if (sk->sk_family != sf ||
88-
sk->sk_family == AF_INET6 ?
89+
(sk->sk_family == AF_INET6 ?
8990
!ipv6_addr_loopback(&sk->sk_v6_rcv_saddr) :
90-
!ipv4_addr_loopback(sk->sk_rcv_saddr))
91+
!ipv4_addr_loopback(sk->sk_rcv_saddr)))
9192
return 0;
9293

9394
if (sk->sk_num == ports[0])

0 commit comments

Comments
 (0)