All of lore.kernel.org
 help / color / mirror / Atom feed
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


             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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.