From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v14 00/12] selftests: consolidate TCP_INQ testing into sockopt
Date: Thu, 30 Jul 2026 11:15:11 +0800 [thread overview]
Message-ID: <cover.1785380422.git.tanggeliang@kylinos.cn> (raw)
From: Geliang Tang <tanggeliang@kylinos.cn>
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/cover.1785054129.git.tanggeliang@kylinos.cn/
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/cover.1784981974.git.tanggeliang@kylinos.cn/
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/cover.1784082850.git.tanggeliang@kylinos.cn/
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/cover.1783994494.git.tanggeliang@kylinos.cn/
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/cover.1783913010.git.tanggeliang@kylinos.cn/
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/cover.1783849522.git.tanggeliang@kylinos.cn/
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/cover.1783740443.git.tanggeliang@kylinos.cn/
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/cover.1783673158.git.tanggeliang@kylinos.cn/
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/cover.1783579976.git.tanggeliang@kylinos.cn/
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/cover.1757686538.git.tanggeliang@kylinos.cn/
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/cover.1756200029.git.tanggeliang@kylinos.cn/
v2:
- patch 4, a new patch, add do_setsockopt_inq helper.
- cleanups.
- https://patchwork.kernel.org/project/mptcp/cover/cover.1754664106.git.tanggeliang@kylinos.cn/
v1:
- https://patchwork.kernel.org/project/mptcp/cover/cover.1754620968.git.tanggeliang@kylinos.cn/
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
next reply other threads:[~2026-07-30 3:15 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 3:15 Geliang Tang [this message]
2026-07-30 3:15 ` [PATCH mptcp-next v14 01/12] selftests: mptcp: sockopt: reseed RNG after fork Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 02/12] selftests: mptcp: sockopt: use exact length in connect_one_server Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 03/12] selftests: mptcp: sockopt: add check_stat_equal helper Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 04/12] selftests: mptcp: sockopt: use size_t for byte counters Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 05/12] selftests: mptcp: sockopt: add is_mptcp_socket helper Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 06/12] selftests: mptcp: sockopt: add tx/rx protocol options Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 07/12] selftests: mptcp: sockopt: add TCP_INQ test option Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 08/12] selftests: mptcp: sockopt: use unix socket instead of pipe Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 09/12] selftests: mptcp: sockopt: use recvmsg instead of read Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 10/12] selftests: mptcp: sockopt: get and verify TCP_INQ Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 11/12] selftests: mptcp: sockopt: add huge data transfer tests Geliang Tang
2026-07-30 3:15 ` [PATCH mptcp-next v14 12/12] selftests: mptcp: sockopt: replace mptcp_inq with sockopt Geliang Tang
2026-07-30 4:22 ` [PATCH mptcp-next v14 00/12] selftests: consolidate TCP_INQ testing into sockopt MPTCP CI
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1785380422.git.tanggeliang@kylinos.cn \
--to=geliang@kernel.org \
--cc=mptcp@lists.linux.dev \
--cc=tanggeliang@kylinos.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).