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

selftests/bpf: Verify first of struct mptcp_sock

This patch verifies the 'first' struct member of struct mptcp_sock, which
points to the first subflow of msk. Save 'sk' in mptcp_storage, and verify
it with 'first' in verify_msk().

v5:
- Use ASSERT_EQ() instead of a manual comparison + log (Andrii).

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Link: https://lore.kernel.org/bpf/20220519233016.105670-8-mathew.j.martineau@linux.intel.com

authored by

Geliang Tang and committed by
Andrii Nakryiko
4f90d034 ccc090f4

+11
+1
tools/testing/selftests/bpf/bpf_tcp_helpers.h
··· 234 234 struct inet_connection_sock sk; 235 235 236 236 __u32 token; 237 + struct sock *first; 237 238 char ca_name[TCP_CA_NAME_MAX]; 238 239 } __attribute__((preserve_access_index)); 239 240
+5
tools/testing/selftests/bpf/prog_tests/mptcp.c
··· 14 14 struct mptcp_storage { 15 15 __u32 invoked; 16 16 __u32 is_mptcp; 17 + struct sock *sk; 17 18 __u32 token; 19 + struct sock *first; 18 20 char ca_name[TCP_CA_NAME_MAX]; 19 21 }; 20 22 ··· 80 78 err++; 81 79 82 80 if (!ASSERT_EQ(val.token, token, "unexpected token")) 81 + err++; 82 + 83 + if (!ASSERT_EQ(val.first, val.sk, "unexpected first")) 83 84 err++; 84 85 85 86 if (!ASSERT_STRNEQ(val.ca_name, ca_name, TCP_CA_NAME_MAX, "unexpected ca_name"))
+5
tools/testing/selftests/bpf/progs/mptcp_sock.c
··· 12 12 struct mptcp_storage { 13 13 __u32 invoked; 14 14 __u32 is_mptcp; 15 + struct sock *sk; 15 16 __u32 token; 17 + struct sock *first; 16 18 char ca_name[TCP_CA_NAME_MAX]; 17 19 }; 18 20 ··· 55 53 56 54 storage->token = 0; 57 55 __builtin_memset(storage->ca_name, 0, TCP_CA_NAME_MAX); 56 + storage->first = NULL; 58 57 } else { 59 58 msk = bpf_skc_to_mptcp_sock(sk); 60 59 if (!msk) ··· 68 65 69 66 storage->token = msk->token; 70 67 __builtin_memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX); 68 + storage->first = msk->first; 71 69 } 72 70 storage->invoked++; 73 71 storage->is_mptcp = is_mptcp; 72 + storage->sk = (struct sock *)sk; 74 73 75 74 return 1; 76 75 }