mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
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 <jordan@jrife.io> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Acked-by: Stanislav Fomichev <sdf@fomichev.me>
This commit is contained in:
parent
346066c327
commit
f00468124a
|
|
@ -433,6 +433,7 @@ static void do_resume_test(struct test_case *tc)
|
|||
skel->rodata->ports[0] = 0;
|
||||
skel->rodata->ports[1] = 0;
|
||||
skel->rodata->sf = tc->family;
|
||||
skel->rodata->ss = 0;
|
||||
|
||||
err = sock_iter_batch__load(skel);
|
||||
if (!ASSERT_OK(err, "sock_iter_batch__load"))
|
||||
|
|
@ -498,6 +499,8 @@ static void do_test(int sock_type, bool onebyone)
|
|||
skel->rodata->ports[i] = ntohs(local_port);
|
||||
}
|
||||
skel->rodata->sf = AF_INET6;
|
||||
if (sock_type == SOCK_STREAM)
|
||||
skel->rodata->ss = TCP_LISTEN;
|
||||
|
||||
err = sock_iter_batch__load(skel);
|
||||
if (!ASSERT_OK(err, "sock_iter_batch__load"))
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ static bool ipv4_addr_loopback(__be32 a)
|
|||
}
|
||||
|
||||
volatile const unsigned int sf;
|
||||
volatile const unsigned int ss;
|
||||
volatile const __u16 ports[2];
|
||||
unsigned int bucket[2];
|
||||
|
||||
|
|
@ -42,10 +43,10 @@ int iter_tcp_soreuse(struct bpf_iter__tcp *ctx)
|
|||
sock_cookie = bpf_get_socket_cookie(sk);
|
||||
sk = bpf_core_cast(sk, struct sock);
|
||||
if (sk->sk_family != sf ||
|
||||
sk->sk_state != TCP_LISTEN ||
|
||||
sk->sk_family == AF_INET6 ?
|
||||
(ss && sk->sk_state != ss) ||
|
||||
(sk->sk_family == AF_INET6 ?
|
||||
!ipv6_addr_loopback(&sk->sk_v6_rcv_saddr) :
|
||||
!ipv4_addr_loopback(sk->sk_rcv_saddr))
|
||||
!ipv4_addr_loopback(sk->sk_rcv_saddr)))
|
||||
return 0;
|
||||
|
||||
if (sk->sk_num == ports[0])
|
||||
|
|
@ -85,9 +86,9 @@ int iter_udp_soreuse(struct bpf_iter__udp *ctx)
|
|||
sock_cookie = bpf_get_socket_cookie(sk);
|
||||
sk = bpf_core_cast(sk, struct sock);
|
||||
if (sk->sk_family != sf ||
|
||||
sk->sk_family == AF_INET6 ?
|
||||
(sk->sk_family == AF_INET6 ?
|
||||
!ipv6_addr_loopback(&sk->sk_v6_rcv_saddr) :
|
||||
!ipv4_addr_loopback(sk->sk_rcv_saddr))
|
||||
!ipv4_addr_loopback(sk->sk_rcv_saddr)))
|
||||
return 0;
|
||||
|
||||
if (sk->sk_num == ports[0])
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user