[PATCH mptcp-next v14 00/12] selftests: consolidate TCP_INQ testing into sockopt
Geliang Tang <[email protected]> Thu, 30 Jul 2026 11:15:11 +0800
| Newsgroups | dev.linux.lists.mptcp |
|---|---|
| Message-ID | <[email protected]> |
From: Geliang Tang <[email protected]> This series consolidates the TCP_INQ test functionality from mptcp_inq into mptcp_sockopt, simplifying the test suite while maintaining full test coverage. The first version of this series was sent out a year ago. Recently, I refactored it and addressed all the review comments from Sashiko. During this process, I fixed several bugs in the original code, so this is a much better version. All CI tests are currently passing, including Sashiko and nipa/ai-review. The two checkpatch warnings are false positives. In addition, I've also run extensive loop stability tests, and they all passed as well. v14: - Patch 5: add a fallback definition for TCP_IS_MPTCP; check if errno is ENOPROTOOPT in is_mptcp_socket; set default value of is_mptcp to 0. - Patch 6: mv proto_tx/proto_rx variables after the fallback definition of IPPROTO_MPTCP. v13: - Patch 1: seed RNG per child in init_rng fallback. The previous fallback 'srand(time(NULL))' collided for two children forked in the same second (1-second resolution); mixing in getpid() (per-process unique) gives each child an independent seed even when /dev/urandom is unavailable. - Patch 5: fail loud on legacy kernels lacking TCP_IS_MPTCP. Previously, getsockopt() returning -1 left is_mptcp at 0 and do_getsockopts() saw 0 and silently skipped every MPTCP-specific assert. Initialize is_mptcp to -1 and die_perror() on getsockopt failure, and update call sites to handle the tri-state return ('<= 0' / '> 0'). - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v12: - Patch 6 is the only one updated. It no longer uses proto_tx == IPPROTO_MPTCP && proto_rx == IPPROTO_MPTCP to check for MPTCP sockets - now it uses TCP_IS_MPTCP via a new helper in patch 5, which is more accurate. This also makes it work for future TCP_MD5SIG tests that use fallback MPTCP sockets. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v11: - Drop "replace /dev/urandom with getrandom". - Add check_stat_equal() helper to centralize and simplify MPTCP stats validation. - Fix cmsg_len format specifier in get_tcp_inq() (%u -> %zu) to match size_t type. - Fix format specifier in EOF error message (%lu -> %zd) for ssize_t type. - Add poll() with POLLRDHUP in client_huge_transfer() to wait for FIN arrival before reading the final byte, preventing flaky EOF detection. - Pass total to server_huge_transfer(), instead of len. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v10: - Patch 1, a new fix. - Patch 3, change the type of r/w as size_t. - Patch 12, in client_huge_transfer(), do a blocking read for EOF on unixfd instead of sleeping. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v9: - No code changes compared to v8. - To address Sashiko's complaints that the implementation of server_huge_transfer() was split across several patches, the patch order has been rearranged, some patches have been squashed into fewer ones, and the commit logs have been updated. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v8: - patch 2, a new patch to replace /dev/urandom with getrandom(). - patch 4, check against the accumulated total r instead of ret in process_one_client(). - patch 7 and patch 9, update commit logs. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v7: - Add a new patch to reseed RNG in child after fork. - Add a new patch to fix bytes_acked validation against sent bytes. - Add a new patch to use r/w for byte counts in process_one_client(). - Split v6-0004 into two separate patches: read exact payload length, and pass len over unixfd. - Change socketpair type from SOCK_DGRAM to SOCK_STREAM to avoid indefinite blocking when peer exits. - Fully initialize buf in server_huge_transfer() to silence MSAN/Valgrind warnings. - Use a union containing struct cmsghdr for control message buffers to prevent unaligned access on strict-alignment architectures. - Reorder and renumber patches accordingly. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v6: - A new patch to use recvmsg instead of read. - Squash the four original patches into two. - Reset msg.msg_controllen. - Check cmsg_len in get_tcp_inq. - Check return value of client_huge_transfer. - Address other comments from Sashiko. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v5: - Continue using the approach from v3 and fix the instability issues. This version has undergone extensive loop testing. - The new two separate functions, server_huge_transfer() and client_huge_transfer(), improve code structure. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v4: - v3 changed the behavior of process_one_client and connect_one_server, causing intermittent failures during loop testing. Revert to using the v2 approach, along with some cleanups. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v3: - No longer using process_one_client_inq() and connect_one_server_inq() for switching; instead, the inq-related code has been merged into process_one_client() and connect_one_server(). - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v2: - patch 4, a new patch, add do_setsockopt_inq helper. - cleanups. - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ v1: - https://patchwork.kernel.org/project/mptcp/cover/[email protected]/ Geliang Tang (12): selftests: mptcp: sockopt: reseed RNG after fork selftests: mptcp: sockopt: use exact length in connect_one_server selftests: mptcp: sockopt: add check_stat_equal helper selftests: mptcp: sockopt: use size_t for byte counters selftests: mptcp: sockopt: add is_mptcp_socket helper selftests: mptcp: sockopt: add tx/rx protocol options selftests: mptcp: sockopt: add TCP_INQ test option selftests: mptcp: sockopt: use unix socket instead of pipe selftests: mptcp: sockopt: use recvmsg instead of read selftests: mptcp: sockopt: get and verify TCP_INQ selftests: mptcp: sockopt: add huge data transfer tests selftests: mptcp: sockopt: replace mptcp_inq with sockopt tools/testing/selftests/net/mptcp/.gitignore | 1 - tools/testing/selftests/net/mptcp/Makefile | 1 - tools/testing/selftests/net/mptcp/mptcp_inq.c | 614 ------------------ .../selftests/net/mptcp/mptcp_sockopt.c | 472 ++++++++++++-- .../selftests/net/mptcp/mptcp_sockopt.sh | 8 +- 5 files changed, 416 insertions(+), 680 deletions(-) delete mode 100644 tools/testing/selftests/net/mptcp/mptcp_inq.c -- 2.53.0