MPTCP Linux Development
 help / color / mirror / Atom feed
From: Matthieu Baerts <matttbe@kernel.org>
To: Shardul Bankar <shardulsb08@gmail.com>, mptcp@lists.linux.dev
Cc: martineau@kernel.org, geliang@kernel.org, pabeni@redhat.com,
	janak@mpiric.us, kalpan.jani@mpiricsoftware.com,
	Shardul Bankar <shardul.b@mpiricsoftware.com>
Subject: Re: [PATCH v3 2/2] selftests: mptcp: extend chk_rst_nr to validate per-event RST counters
Date: Wed, 27 May 2026 16:24:17 +1000	[thread overview]
Message-ID: <b69a2221-bd18-4435-a477-1ba830cc4f19@kernel.org> (raw)
In-Reply-To: <20260512103331.1934343-3-shardul.b@mpiricsoftware.com>

Hi Shardul,

On 12/05/2026 20:33, Shardul Bankar wrote:
> Extend chk_rst_nr() with named env-var expectations for each
> per-event MPTCP_RST_EMPTCP counter, matching the pattern used by
> chk_join_nr().  Each counter defaults to 0 and is checked silently
> on success; mismatches print a check line and fail the test.
> Counters absent from the running kernel are skipped silently so
> older kernels do not false-fail.
> 
> Add a test at the end of signal_address_tests that triggers
> MPJoinSynAckNoMPJoin: ns1 signals an address that is already bound
> on the client (ns2), where a TCP-only mptcp_connect listener is
> started.  The client's MP_JOIN routes locally to the TCP listener,
> which responds with a plain SYN/ACK without the MP_JOIN option, and
> the new counter increments on the client side.
> 
> Other per-event counters (MD5SigReset, MPJoinAckNoMPJoin,
> MPJoinAckNoCtx, DssReset, MPJoinNotEstablished) are not currently
> reachable from mptcp_join.sh; the env-var hooks are in place for
> future tests to set expectations explicitly.
> 
> Assisted-by: Claude:claude-opus-4-7
> Signed-off-by: Shardul Bankar <shardul.b@mpiricsoftware.com>
> ---
> v3:
>   - Drop the third-netns approach for triggering
>     MPJoinSynAckNoMPJoin.  Use ns1 signalling an address that is
>     already bound on ns2 (10.0.2.2) with a TCP-only mptcp_connect
>     listener on ns2; the client's MP_JOIN routes locally to that
>     listener and the SYN/ACK arrives without MP_JOIN.
>   - Move the test into signal_address_tests; drop the standalone
>     rst_emptcp_tests group and its sorted-list entry.
>   - Drop speed=slow (not needed: only one ADD_ADDR, no in-flight
>     actions).
>   - The local-and-assign that tripped shellcheck SC2155 is gone
>     with the old test.
> v2: https://lore.kernel.org/all/20260509183335.969018-1-shardul.b@mpiricsoftware.com/
> 
>  .../testing/selftests/net/mptcp/mptcp_join.sh | 72 +++++++++++++++++++
>  1 file changed, 72 insertions(+)
> 
> diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> index 5d4d0f127f795..c6ef7f785a558 100755
> --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> @@ -76,6 +76,13 @@ unset join_create_err
>  unset join_bind_err
>  unset join_connect_err
>  
> +unset rst_md5sig_reset
> +unset rst_synack_no_mpjoin
> +unset rst_ack_no_mpjoin
> +unset rst_ack_no_ctx
> +unset rst_dss_reset
> +unset rst_not_established

See below: I think you can use the 'join_' prefix and attach them above,
except for md5sig and dss that could also simply be called rst_dss and
rst_md5sig.

> +
>  unset fb_ns1
>  unset fb_ns2
>  unset fb_infinite_map_tx
> @@ -1349,6 +1356,12 @@ chk_rst_nr()
>  	local rst_tx=$1
>  	local rst_rx=$2
>  	local ns_invert=${3:-""}
> +	local md5sig_reset=${rst_md5sig_reset:-0}
> +	local synack_no_mpjoin=${rst_synack_no_mpjoin:-0}
> +	local ack_no_mpjoin=${rst_ack_no_mpjoin:-0}
> +	local ack_no_ctx=${rst_ack_no_ctx:-0}
> +	local dss_reset=${rst_dss_reset:-0}
> +	local not_established=${rst_not_established:-0}
>  	local count
>  	local ns_tx=$ns1
>  	local ns_rx=$ns2
> @@ -1385,6 +1398,43 @@ chk_rst_nr()
>  	else
>  		print_ok
>  	fi
> +
> +	# Per-event MPTCP_RST_EMPTCP counters; default 0, gated on availability.
> +	count=$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMD5SigReset")
> +	if [ -n "$count" ] && [ "$count" != "$md5sig_reset" ]; then
> +		print_check "MD5SigReset ${tx}"
> +		fail_test "got $count MD5SigReset expected $md5sig_reset"
> +	fi
> +
> +	count=$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtMPJoinSynAckNoMPJoin")

Here, the netns should be fixed: only the client should get it, and
using "chk_rst_nr ... invert" will not check at the right netns.

In fact, I think this counter and other MPJoin counters here below
should probably be added to the chk_join_nr() helper, no? Leaving here
only the MD5Sig and DSS related one. WDYT?

> +	if [ -n "$count" ] && [ "$count" != "$synack_no_mpjoin" ]; then
> +		print_check "MPJoinSynAckNoMPJoin ${rx}"
> +		fail_test "got $count MPJoinSynAckNoMPJoin expected $synack_no_mpjoin"
> +	fi
> +
> +	count=$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPJoinAckNoMPJoin")
> +	if [ -n "$count" ] && [ "$count" != "$ack_no_mpjoin" ]; then
> +		print_check "MPJoinAckNoMPJoin ${tx}"
> +		fail_test "got $count MPJoinAckNoMPJoin expected $ack_no_mpjoin"
> +	fi
> +
> +	count=$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPJoinAckNoCtx")
> +	if [ -n "$count" ] && [ "$count" != "$ack_no_ctx" ]; then
> +		print_check "MPJoinAckNoCtx ${tx}"
> +		fail_test "got $count MPJoinAckNoCtx expected $ack_no_ctx"
> +	fi
> +
> +	count=$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtDssReset")
> +	if [ -n "$count" ] && [ "$count" != "$dss_reset" ]; then
> +		print_check "DssReset ${rx}"
> +		fail_test "got $count DssReset expected $dss_reset"
> +	fi
> +
> +	count=$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtMPJoinNotEstablished")
> +	if [ -n "$count" ] && [ "$count" != "$not_established" ]; then
> +		print_check "MPJoinNotEstablished ${rx}"
> +		fail_test "got $count MPJoinNotEstablished expected $not_established"
> +	fi
>  }
>  
>  chk_infi_nr()
> @@ -2378,6 +2428,28 @@ signal_address_tests()
>  			chk_add_nr 4 4
>  		fi
>  	fi
> +
> +	# signalled address belongs to the client, where a TCP-only
> +	# listener is bound at it: the client's MP_JOIN routes locally
> +	# to the listener and receives a SYN/ACK without MP_JOIN.
> +	# MPJoinSynAckNoMPJoin increments on the client side.
> +	if reset "signal address, TCP-only listener on client"; then
> +		local extra_bind
> +
> +		pm_nl_set_limits $ns1 0 1
> +		pm_nl_set_limits $ns2 1 1
> +		pm_nl_add_endpoint $ns1 10.0.2.2 flags signal
> +
> +		ip netns exec ${ns2} ./mptcp_connect -l -t -1 -p "$(get_port)" \
> +			-s TCP 10.0.2.2 &
> +		extra_bind=$!

It would be better to call mptcp_lib_wait_local_port_listen(), just to
be sure it is listening. (Even if 'run_tests' will also call it on the
other netns)

On the other end, I see we didn't call it in similar other cases.

> +		run_tests $ns1 $ns2 10.0.1.1

See above: so here, call chk_join_nr() after, like in most tests, but
here check with join_synack_no_mpjoin=1.

> +		rst_synack_no_mpjoin=1 \
> +			chk_rst_nr 0 0
> +
> +		kill ${extra_bind} 2>/dev/null
> +	fi
>  }
>  
>  laminar_endp_tests()

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.


  reply	other threads:[~2026-05-27  6:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 10:33 [PATCH v3 0/2] mptcp: per-event MIB counters for MPTCP_RST_EMPTCP Shardul Bankar
2026-05-12 10:33 ` [PATCH v3 1/2] mptcp: add per-event MIB counters for MPTCP_RST_EMPTCP resets Shardul Bankar
2026-05-27  6:50   ` Matthieu Baerts
2026-05-12 10:33 ` [PATCH v3 2/2] selftests: mptcp: extend chk_rst_nr to validate per-event RST counters Shardul Bankar
2026-05-27  6:24   ` Matthieu Baerts [this message]
2026-05-12 11:47 ` [PATCH v3 0/2] mptcp: per-event MIB counters for MPTCP_RST_EMPTCP MPTCP CI
2026-05-27  7:43 ` Matthieu Baerts

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=b69a2221-bd18-4435-a477-1ba830cc4f19@kernel.org \
    --to=matttbe@kernel.org \
    --cc=geliang@kernel.org \
    --cc=janak@mpiric.us \
    --cc=kalpan.jani@mpiricsoftware.com \
    --cc=martineau@kernel.org \
    --cc=mptcp@lists.linux.dev \
    --cc=pabeni@redhat.com \
    --cc=shardul.b@mpiricsoftware.com \
    --cc=shardulsb08@gmail.com \
    /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