From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8749933B6F8; Fri, 14 Nov 2025 18:12:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143946; cv=none; b=fP52CpvU8xL3cO//ErOr1Fn0a7WHv58s4GIIiKi6E+lJ6xv99gQKiKglGX8T2msYL21tMvk+c29/4C2cVR7E0qIjpCoO5qE+Gf3yQSEb1WefUXz07/fV9BeGV7GbSXxesdCCTcmM131BMaSl2rESD6s8Szt2nY/jn5WVCa0waqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143946; c=relaxed/simple; bh=VFfgcD5O4JfxyrkN935fmcvNNxEM+LjCCXwyjzecXi8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zm+HWE3HNt3qZFfJLa5AH7863f7ouNiRUbRdagOQBKWLcx+fs9/qEX3lH6ogcOtPkBnfRiRXx3Qo/fCqDaqqPzqjMqmxWf4DmIiA2REAbjFxpzv0yLf1pVq6fL08YV6oEcpnGVUfKydULCoW4kH/pa+9+kIATG+tTDa+3Z/8DEA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QfCeJ6aM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QfCeJ6aM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E2C49C113D0; Fri, 14 Nov 2025 18:12:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143946; bh=VFfgcD5O4JfxyrkN935fmcvNNxEM+LjCCXwyjzecXi8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QfCeJ6aMUm+JtEpCOJOVS9XT11WZpQbeG2xNi828ZF/vThljVCHQFjH82qCO0wCyl Pi+/XkFTobxjxm9avZrpSCBYVvpmWoJgVQcL+MeOJmZP+ZFU3l8gLBQJtMDa5OWwGl 4qHdhrA3xKKcIzsox3H+zeq7zefygeC5fRjhNFXfr8c8K97P2AJK/q2UDy7w/DUpPm ZcFHqDKlip0Gup5Ii98Bczsf87KiiHIS8TTqHUXldQxYC0miG6yKqfS2O+pGm7rfIx d/yjyYdn9dX1Gm/J/hK5i4CKWwHizgCSP2t4AHOVWRtAJoUPy7LfgDZOI1oZyMZIzN kFm+z3Zg+IhPw== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:05 +0100 Subject: [PATCH net-next 1/8] selftests: mptcp: lib: introduce 'nstat_{init,get}' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-1-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5895; i=matttbe@kernel.org; h=from:subject:message-id; bh=VFfgcD5O4JfxyrkN935fmcvNNxEM+LjCCXwyjzecXi8=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFC34bb9Jn3BOwzn6pY2kI8z7OHyZny5RSkmdOyDhr+ D/03n7BjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgIkwMzD8L5jHFjv/xNOZIWdm pwjEbtmgmF8xkXfa5dKs37onRM/07mNk+Fr5Kbx2y46JRg1ZyRVPzpSzVa7+1rk57qO1/fMqyR+ 3OAE= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 These new helpers are easier to read than the long and multi lines commands. Plus it will ease the addition of new features related to that in the next commits. No behavioural changes intended. Acked-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_connect.sh | 12 ++++-------- tools/testing/selftests/net/mptcp/mptcp_join.sh | 12 ++++-------- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 14 ++++++++++++++ tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 12 ++++-------- tools/testing/selftests/net/mptcp/simult_flows.sh | 12 ++++-------- 5 files changed, 30 insertions(+), 32 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index 9b7b93f8eb0c..e1f34508490a 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -384,11 +384,9 @@ do_transfer() sleep 1 fi =20 - NSTAT_HISTORY=3D/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ - nstat -n + mptcp_lib_nstat_init "${listener_ns}" if [ ${listener_ns} !=3D ${connector_ns} ]; then - NSTAT_HISTORY=3D/tmp/${connector_ns}.nstat ip netns exec ${connector_ns}= \ - nstat -n + mptcp_lib_nstat_init "${connector_ns}" fi =20 local stat_synrx_last_l @@ -436,11 +434,9 @@ do_transfer() kill ${cappid_connector} fi =20 - NSTAT_HISTORY=3D/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ - nstat | grep Tcp > /tmp/${listener_ns}.out + mptcp_lib_nstat_get "${listener_ns}" if [ ${listener_ns} !=3D ${connector_ns} ]; then - NSTAT_HISTORY=3D/tmp/${connector_ns}.nstat ip netns exec ${connector_ns}= \ - nstat | grep Tcp > /tmp/${connector_ns}.out + mptcp_lib_nstat_get "${connector_ns}" fi =20 local duration diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index f0efbf985625..f51c9bf2d37f 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -983,10 +983,8 @@ do_transfer() =20 cond_start_capture ${listener_ns} =20 - NSTAT_HISTORY=3D/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ - nstat -n - NSTAT_HISTORY=3D/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ - nstat -n + mptcp_lib_nstat_init "${listener_ns}" + mptcp_lib_nstat_init "${connector_ns}" =20 local extra_args if [ $speed =3D "fast" ]; then @@ -1068,10 +1066,8 @@ do_transfer() =20 cond_stop_capture =20 - NSTAT_HISTORY=3D/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ - nstat | grep Tcp > /tmp/${listener_ns}.out - NSTAT_HISTORY=3D/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ - nstat | grep Tcp > /tmp/${connector_ns}.out + mptcp_lib_nstat_get "${listener_ns}" + mptcp_lib_nstat_get "${connector_ns}" =20 if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then fail_test "client exit code $retc, server $rets" diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index f4388900016a..1f31746cc519 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -376,6 +376,20 @@ mptcp_lib_is_v6() { [ -z "${1##*:*}" ] } =20 +mptcp_lib_nstat_init() { + local ns=3D"${1}" + + NSTAT_HISTORY=3D"/tmp/${ns}.nstat" ip netns exec "${ns}" nstat -n +} + +mptcp_lib_nstat_get() { + local ns=3D"${1}" + + # filter out non-*TCP stats + NSTAT_HISTORY=3D"/tmp/${ns}.nstat" ip netns exec "${ns}" nstat | + grep Tcp > "/tmp/${ns}.out" +} + # $1: ns, $2: MIB counter mptcp_lib_get_counter() { local ns=3D"${1}" diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index f01989be6e9b..343615908558 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -169,10 +169,8 @@ do_transfer() cmsg+=3D",TCPINQ" fi =20 - NSTAT_HISTORY=3D/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ - nstat -n - NSTAT_HISTORY=3D/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ - nstat -n + mptcp_lib_nstat_init "${listener_ns}" + mptcp_lib_nstat_init "${connector_ns}" =20 timeout ${timeout_test} \ ip netns exec ${listener_ns} \ @@ -194,10 +192,8 @@ do_transfer() wait $spid local rets=3D$? =20 - NSTAT_HISTORY=3D/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ - nstat | grep Tcp > /tmp/${listener_ns}.out - NSTAT_HISTORY=3D/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ - nstat | grep Tcp > /tmp/${connector_ns}.out + mptcp_lib_nstat_get "${listener_ns}" + mptcp_lib_nstat_get "${connector_ns}" =20 print_title "Transfer ${ip:2}" if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/test= ing/selftests/net/mptcp/simult_flows.sh index 1903e8e84a31..fbd1685d1adc 100755 --- a/tools/testing/selftests/net/mptcp/simult_flows.sh +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh @@ -155,10 +155,8 @@ do_transfer() sleep 1 fi =20 - NSTAT_HISTORY=3D/tmp/${ns3}.nstat ip netns exec ${ns3} \ - nstat -n - NSTAT_HISTORY=3D/tmp/${ns1}.nstat ip netns exec ${ns1} \ - nstat -n + mptcp_lib_nstat_init "${ns3}" + mptcp_lib_nstat_init "${ns1}" =20 timeout ${timeout_test} \ ip netns exec ${ns3} \ @@ -185,10 +183,8 @@ do_transfer() kill ${cappid_connector} fi =20 - NSTAT_HISTORY=3D/tmp/${ns3}.nstat ip netns exec ${ns3} \ - nstat | grep Tcp > /tmp/${ns3}.out - NSTAT_HISTORY=3D/tmp/${ns1}.nstat ip netns exec ${ns1} \ - nstat | grep Tcp > /tmp/${ns1}.out + mptcp_lib_nstat_get "${ns3}" + mptcp_lib_nstat_get "${ns1}" =20 cmp $sin $cout > /dev/null 2>&1 local cmps=3D$? --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A437345CC3; Fri, 14 Nov 2025 18:12:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143949; cv=none; b=e/pB3a51AAxzTmD2dal4kzT+l+zUCh/6aaar+4B7pHlH/WpD09UH84C5QkyJHcMxLChz4+Z8izPwRroYdvnhzTAR+f+DbeXJcESaofJbUh6p4kH2FhGJB2gcx34xO5Vur9QTJHCsLNbfBmw1EoE+uIeNN8xsoOm003+PjRThORU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143949; c=relaxed/simple; bh=Rf2tQO+wcr7dGmYv1QqAhIhJCKf3ecXEYZ07njQP2Qc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RC0XXUYvs/EnjhybtZAp/+mJDYQLmGwsul2+bhXI3Q2xc5z6bSgtRKvmJCns+yHUxIyr68CBMgfqJvna36wh7IH4R8GFIi/plyuZQgRMWK9pBmBjMzom4IjwRppjGE/icmpk64tiKahm7e+PilTsmxzNRyMlC0JvxAy3IShh2UI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kVVBLfZP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kVVBLfZP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8528BC2BC87; Fri, 14 Nov 2025 18:12:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143948; bh=Rf2tQO+wcr7dGmYv1QqAhIhJCKf3ecXEYZ07njQP2Qc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=kVVBLfZPSs04t/HutQP+8QJbl328ArwWA6t03ZRt34g1xIw9f67/CdzTxAkQIuwYt SMLRvcVhy/URGQKvSeUWFvtqseUuJGkddFvdc61I4JWD2FtQ5Fwb03ZH5vRbIdUh5U BesnE1bKfr/UEOAm6Z+2gLr+pOhH7X5cBLxKEiAMrKJ6+43A+9k24pYfeRV067oz/T VLSBt8+YWFNuI2hTzRpz5poABhrNEXCRnhLme+zFtTxodktuWBpqwTbddejzrZApHk 1VMFbjTNBlmdT3g0IBwMm2lFTGOb+XWmiDIPxrx+b0ZCr9hmqhIb5vWj5fFNdDrhZH uUNhrjqW4v5tQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:06 +0100 Subject: [PATCH net-next 2/8] selftests: mptcp: lib: remove stats files args Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-2-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4541; i=matttbe@kernel.org; h=from:subject:message-id; bh=Rf2tQO+wcr7dGmYv1QqAhIhJCKf3ecXEYZ07njQP2Qc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFC/4sc3r3/izjvoPH3ya2ln7f5v59gfzasqJvMpxX6 qUsl23k7ShlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZjIHk2G/3lVema+jWuDDDNq OQrebWWRfn/revQNjcUdhadOfyvIWM3w32dC3ZRKuczlS7nLFXufXZrX7KG04Yfj/I1WnKscHi8 4xgsA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Now that these files are written from MPTCP lib helpers, the stats file paths are uniformed. Then, no need to specify them from the each selftest. No behavioural changes intended. Acked-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_connect.sh | 3 +-- tools/testing/selftests/net/mptcp/mptcp_join.sh | 3 +-- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 15 ++++++++++----- tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 3 +-- tools/testing/selftests/net/mptcp/simult_flows.sh | 3 +-- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index e1f34508490a..4ff2d02429d3 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -444,8 +444,7 @@ do_transfer() printf "(duration %05sms) " "${duration}" if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then mptcp_lib_pr_fail "client exit code $retc, server $rets" - mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" \ - "/tmp/${listener_ns}.out" "/tmp/${connector_ns}.out" + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" =20 echo cat "$capout" diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index f51c9bf2d37f..aee215d73b7c 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1071,8 +1071,7 @@ do_transfer() =20 if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then fail_test "client exit code $retc, server $rets" - mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" \ - "/tmp/${listener_ns}.out" "/tmp/${connector_ns}.out" + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" return 1 fi =20 diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index 1f31746cc519..4a26d4150603 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -106,23 +106,28 @@ mptcp_lib_pr_info() { mptcp_lib_print_info "INFO: ${*}" } =20 -# $1-2: listener/connector ns ; $3 port ; $4-5 listener/connector stat file +mptcp_lib_pr_nstat() { + local ns=3D"${1}" + local hist=3D"/tmp/${ns}.out" + + cat "${hist}" +} + +# $1-2: listener/connector ns ; $3 port mptcp_lib_pr_err_stats() { local lns=3D"${1}" local cns=3D"${2}" local port=3D"${3}" - local lstat=3D"${4}" - local cstat=3D"${5}" =20 echo -en "${MPTCP_LIB_COLOR_RED}" { printf "\nnetns %s (listener) socket stat for %d:\n" "${lns}" "${port}" ip netns exec "${lns}" ss -Menitam -o "sport =3D :${port}" - cat "${lstat}" + mptcp_lib_pr_nstat "${lns}" =20 printf "\nnetns %s (connector) socket stat for %d:\n" "${cns}" "${port}" ip netns exec "${cns}" ss -Menitam -o "dport =3D :${port}" - [ "${lstat}" !=3D "${cstat}" ] && cat "${cstat}" + [ "${lns}" !=3D "${cns}" ] && mptcp_lib_pr_nstat "${cns}" } 1>&2 echo -en "${MPTCP_LIB_COLOR_RESET}" } diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 343615908558..42d533b95ec7 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -198,8 +198,7 @@ do_transfer() print_title "Transfer ${ip:2}" if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then mptcp_lib_pr_fail "client exit code $retc, server $rets" - mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" \ - "/tmp/${listener_ns}.out" "/tmp/${connector_ns}.out" + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" =20 mptcp_lib_result_fail "transfer ${ip}" =20 diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/test= ing/selftests/net/mptcp/simult_flows.sh index fbd1685d1adc..503cb59571a4 100755 --- a/tools/testing/selftests/net/mptcp/simult_flows.sh +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh @@ -200,8 +200,7 @@ do_transfer() fi =20 mptcp_lib_pr_fail "client exit code $retc, server $rets" - mptcp_lib_pr_err_stats "${ns3}" "${ns1}" "${port}" \ - "/tmp/${ns3}.out" "/tmp/${ns1}.out" + mptcp_lib_pr_err_stats "${ns3}" "${ns1}" "${port}" ls -l $sin $cout ls -l $cin $sout =20 --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD57A346FB0; Fri, 14 Nov 2025 18:12:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143951; cv=none; b=EpVMnr7KHb426KiQN80xt7GYq+y6M6JgwpAZ5EeLNCVXfPn8rl7IOAVWNZGByYXbtqvIr7mONzbGKFo3RgWP0HdPrN3SwdFmZYgnqUz7m22gKGYaQuHQ6j1vIyw1BV46BYP0eujMM0hHcpEsTAg1fVpUbE6eio8svxTiNyehHJc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143951; c=relaxed/simple; bh=QIeCsov8dwW62lkBk2JAwnnC41VOoAFnNv9LbRKTX48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gMWLJ8ugETuAsFAF4XdphkmeQfS8AfMeOG/XQ4xCKtuXrIViU1dhqSpmSfdnwLlxV+KZoTXWB0iQlSW0SoKacQ8aSC1p3vQN1x5xKOfPdhHoz8StslxW9OcTAazVfZaxklbqNVdes2N3RNujLcS19SViVJD5By3b/2eaFaqoXXU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MLo+abK7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MLo+abK7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 24AE8C113D0; Fri, 14 Nov 2025 18:12:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143951; bh=QIeCsov8dwW62lkBk2JAwnnC41VOoAFnNv9LbRKTX48=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MLo+abK7zGyHmt55J48u9HpiGXojztohRugY45NagXgTTF34XNWrFVztoaJmOhg2L BRkeLijwJozZa2WWNPVHDpGY5p/WVsNL/tvxxb6w1n+cnYhLTGKNDL1U7MfHvmklxb b07MYNy2mp6Wm+eTuzkrBaAy//TsRP61eFD6+pkwMetbS1PdkWyhFZyrDsXU+4VBdW 0dttS+YzNZE1EnACqAlkDpLVnBBxS6xlV5XazDM/Zm48Lc2p2+u3K1D/YcNC8F0+of CJdtTZLiBB3xfRr3z0JgccDFMBuoRkiwbkSjvXWv/It5JcH2QWPJ03/JpmoW69GODC UY5CEvhotbiqg== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:07 +0100 Subject: [PATCH net-next 3/8] selftests: mptcp: lib: stats: remove nstat rate columns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-3-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1076; i=matttbe@kernel.org; h=from:subject:message-id; bh=QIeCsov8dwW62lkBk2JAwnnC41VOoAFnNv9LbRKTX48=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFC/4+s0/muvJF+BuLU9mfA8sFnq7mtWX5u+KNmX2vE 0+f37xDHaUsDGJcDLJiiizSbZH5M59X8ZZ4+VnAzGFlAhnCwMUpABOxF2f4wxP1pF/wxzwNHV3O 9Fz3BJerziabF58wucJ13ufAlpSvygz/U47yJS8Qn3k3lPnih8w3DOeWe+zzvztt6/FSrS3OT9j y+AE= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 With the MPTCP selftests, the nstat daemon is not used. It means that the last column (the rate) is always 0.0, and that's not something interesting to display. Then, this last column can be filtered out. Acked-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index 4a26d4150603..c5571100f797 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -390,9 +390,9 @@ mptcp_lib_nstat_init() { mptcp_lib_nstat_get() { local ns=3D"${1}" =20 - # filter out non-*TCP stats + # filter out non-*TCP stats, and the rate (last column) NSTAT_HISTORY=3D"/tmp/${ns}.nstat" ip netns exec "${ns}" nstat | - grep Tcp > "/tmp/${ns}.out" + grep -o ".*Tcp\S\+\s\+[0-9]\+" > "/tmp/${ns}.out" } =20 # $1: ns, $2: MIB counter --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 604C3347BBA; Fri, 14 Nov 2025 18:12:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143954; cv=none; b=PNtUtGEqPwS0RglTDr37yc4tiq+HPEXgKMf1iEifAN6cV7rRxOijJ+S6arQctgMW5ZhhG96BYXNs3e30dPLNK7LyLdXEBrwYTT8mfEEfvY68rTKUvNC/GE4N/jpCpebZyb6GQAWv7+K2tyyyPLrM/p9oCUFnOP0AgOK7vSvIfjE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143954; c=relaxed/simple; bh=m+kDsxek/MV31g8PwZ4leaY6woK2369gM187AjK76Vg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jT2nhtQHzHzZz4FolPycdyp0tL8kUA1BcMwC2AXAHVWMXPM4YC8OdSGfU+N4Nd7O5JsCURuJJVMqrOTBEcz+V5bjrgpt8hBADtBskR1QzkwRhrVt2e2TsEnH8dM1SB5Y4oTq64+RUmRVTGzUn6mHgcSn4r6QXN68ulNAUNCu9+o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Zt9+8bYo; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Zt9+8bYo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8530C19421; Fri, 14 Nov 2025 18:12:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143953; bh=m+kDsxek/MV31g8PwZ4leaY6woK2369gM187AjK76Vg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Zt9+8bYoYMhpZ/WOHHpYLPchJXO4hObiOgZbmZ52wwPSght1nglmTQqDlBDADVjpX KWVG8SwD4zP5h48tFPVmzMOMaktxIbWc+XpBRwbYnKaiJYwy1zSE73UUkvVYVLNhzm ViHxy4D+oU0X34k3zau8EVRitPU1WAiIqVdbPYNZJxE1g5hakC/ZT+ie+gX9nY+sHh vPB9QdHCK4m9kw/z+Tatg/dtKvxZPR8I/r98S1LVRpg5J80BCIb+ZKjnqPBZaqmrwK 7ladNJ2hxeM5KcG1XbM/hS9v0SqjmgcT6G2o40a78ANcm8mB1HSAlRII+blQRDJjLx k2rOYjG6vpY6Q== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:08 +0100 Subject: [PATCH net-next 4/8] selftests: mptcp: join: dump stats from history Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-4-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2233; i=matttbe@kernel.org; h=from:subject:message-id; bh=m+kDsxek/MV31g8PwZ4leaY6woK2369gM187AjK76Vg=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFC/43Jje6hu0t/rE+7qHUPymRxV++Odksuzz/8CfBO B0dp2yejlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgIkoT2dkeDKz9t/7OKugVA3R qQ+rVn89Fr1bYO9k3RmdVe/nrCv+MI/hr/RjaY3DC70THhY0J/AmeZrdq5IX77kc6vZ0Lte5Vkc LdgA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 In case of errors, dump the stats from history instead of using nstat. There are multiple advantages to that: - The same filters from pr_err_stats are used, e.g. the unused 'rate' column is not displayed. - The counters are closer to the ones from when the test stopped. - While at it, the errors can be better presented: error colours, a small indentation to distinguish the different parts, extra new lines. Even if it should only happen in rare cases -- internal errors, or netns issues -- if no history is available, 'nstat' is used like before, just in case. Acked-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 16 ++++++++++++---- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 6 +++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index aee215d73b7c..54bac074f184 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1146,12 +1146,20 @@ run_tests() do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP ${connect_addr} } =20 +_dump_stats() +{ + local ns=3D"${1}" + local side=3D"${2}" + + mptcp_lib_print_err "${side} ns stats (${ns2})" + mptcp_lib_pr_nstat "${ns}" + echo +} + dump_stats() { - echo Server ns stats - ip netns exec $ns1 nstat -as | grep Tcp - echo Client ns stats - ip netns exec $ns2 nstat -as | grep Tcp + _dump_stats "${ns1}" "Server" + _dump_stats "${ns2}" "Client" } =20 chk_csum_nr() diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index c5571100f797..fa91eebdbc47 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -110,7 +110,11 @@ mptcp_lib_pr_nstat() { local ns=3D"${1}" local hist=3D"/tmp/${ns}.out" =20 - cat "${hist}" + if [ -f "${hist}" ]; then + awk '{ print " "$0 }' "${hist}" + else + ip netns exec "${ns}" nstat -as | grep Tcp + fi } =20 # $1-2: listener/connector ns ; $3 port --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA19E34A78D; Fri, 14 Nov 2025 18:12:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143956; cv=none; b=YOBtIio5K+AdvGY5XPawceczOsGTZ6XRBO3oaN9FQrF0kSyqLYtzysbaw3FDXAwNNjVwxCB53ppL8cr+OI5QDdDsjfmHhA8RvfcHf+BcXrZLp4WwM/gTjjR54QJafdO1a3JLzQSSGv3vnXtIVpYGL/iyXqpyexITWRDymORp0rg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143956; c=relaxed/simple; bh=K4SzendUUYN9DOQQta3hYzu5L/TjoJ7vxCCcZDK4XbU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ukOclbFjo/w2ekeofQdD01qktQZoGolnJTkO5w5JAy9uqQKLhSJmKgKvkuI52hCVPPfdrDcPZKsl2IyBlV97C5X/IuSB4820QB5Yi5q/+Jh+s7iYPoWWG/8s6CH3vJ61VodwfwFlpBKW0IMBJVxxJyxFAaxc5/2ZAjol37n9hJA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F7mY24nA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="F7mY24nA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 583B7C4CEF8; Fri, 14 Nov 2025 18:12:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143956; bh=K4SzendUUYN9DOQQta3hYzu5L/TjoJ7vxCCcZDK4XbU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=F7mY24nA7QDU2jOhVJC0N/kl8cIEFaXQrLE0Zdtp5XMdryIszSWxGfLyHH75TWVXS 5TVdtM4eUtY3bDskow2ksKuvdUCNDGD7jyXb85tqL3aMO7pcm5Cf+Qm5CeRJhK6s3D FS49QGoYk6sACTVxRR78fk/qXuNla+oC+MpKzoxjuCJapdeWlq8k5Y4QhSyqLv3bOZ HDfRkmgGeVb5Tr18A+pKI2ma4vqU07pzi0D+4ibMwDjb5xO2k+IxP/pUml4zAcVEdj 6QJaGZVnSebSqDIlP7YuSHwof4Gyq7tzRFfg1i36jMffgJqwpxRIRRUQ3SlhxVSg8+ 7uUYYWk2owxCQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:09 +0100 Subject: [PATCH net-next 5/8] selftests: mptcp: lib: get counters from nstat history Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-5-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=9455; i=matttbe@kernel.org; h=from:subject:message-id; bh=K4SzendUUYN9DOQQta3hYzu5L/TjoJ7vxCCcZDK4XbU=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFCxnmVO7XNg/K+6Xgcnuecez8cIUjUYcd7oeum1+Y3 q2X47qho5SFQYyLQVZMkUW6LTJ/5vMq3hIvPwuYOaxMIEMYuDgFYCLVNxkZFvhYMd3/tVn7U6aW 1eTa3dXHXrdPVaw801U/Xannxp3Epwz/1HMOfHqzX8R4a/KO0twZDF7XNuUk3yjdr9rveUyHadl EJgA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before, 'nstat' was used to retrieve each individual counter: this means querying 4 different sources from /proc/net and iterating over 100+ counters each time. Instead, the stats could be retrieved once, and the output file could be parsed for each counter. Even better, such file is already present: the nstat history file. To be able to get this working, the nstat history file also needs to contains zero counters too, so it is still possible to know if a counter is missing or set to 0. This also simplifies mptcp_connect.sh: instead of checking multiple counters before and after a test to compute the difference, the stats history files can be reset before each test, and nstat can display only the difference. mptcp_lib_get_counter() continues to work when no history file is available: by fetching nstat directly, like before. This is the case in diag.sh and userspace_pm.sh where there is no need to save the history file. This is also the case in mptcp_join.sh, when 'run_tests' is executed in the background: easier to continue fetching counters than updating the history each time it is needed. Note: 'nstat' is called with '-s' in mptcp_lib_nstat_get(), so this helper can be called multiple times during the test if needed. Acked-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_connect.sh | 85 +++++++++---------= ---- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 16 +++- 2 files changed, 46 insertions(+), 55 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index 4ff2d02429d3..3a804abebd2c 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -389,21 +389,6 @@ do_transfer() mptcp_lib_nstat_init "${connector_ns}" fi =20 - local stat_synrx_last_l - local stat_ackrx_last_l - local stat_cookietx_last - local stat_cookierx_last - local stat_csum_err_s - local stat_csum_err_c - local stat_tcpfb_last_l - stat_synrx_last_l=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPC= apableSYNRX") - stat_ackrx_last_l=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPC= apableACKRX") - stat_cookietx_last=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSync= ookiesSent") - stat_cookierx_last=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSync= ookiesRecv") - stat_csum_err_s=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtDataC= sumErr") - stat_csum_err_c=3D$(mptcp_lib_get_counter "${connector_ns}" "MPTcpExtData= CsumErr") - stat_tcpfb_last_l=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPC= apableFallbackACK") - timeout ${timeout_test} \ ip netns exec ${listener_ns} \ ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \ @@ -458,38 +443,38 @@ do_transfer() rets=3D$? =20 local extra=3D"" - local stat_synrx_now_l - local stat_ackrx_now_l - local stat_cookietx_now - local stat_cookierx_now - local stat_ooo_now - local stat_tcpfb_now_l - stat_synrx_now_l=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCa= pableSYNRX") - stat_ackrx_now_l=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCa= pableACKRX") - stat_cookietx_now=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSynco= okiesSent") - stat_cookierx_now=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSynco= okiesRecv") - stat_ooo_now=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtTCPOFOQueu= e") - stat_tcpfb_now_l=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCa= pableFallbackACK") + local stat_synrx + local stat_ackrx + local stat_cookietx + local stat_cookierx + local stat_ooo + local stat_tcpfb + stat_synrx=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableS= YNRX") + stat_ackrx=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableA= CKRX") + stat_cookietx=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookie= sSent") + stat_cookierx=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtSyncookie= sRecv") + stat_ooo=3D$(mptcp_lib_get_counter "${listener_ns}" "TcpExtTCPOFOQueue") + stat_tcpfb=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtMPCapableF= allbackACK") =20 - expect_synrx=3D$((stat_synrx_last_l)) - expect_ackrx=3D$((stat_ackrx_last_l)) + expect_synrx=3D0 + expect_ackrx=3D0 =20 cookies=3D$(ip netns exec ${listener_ns} sysctl net.ipv4.tcp_syncookies) cookies=3D${cookies##*=3D} =20 if [ ${cl_proto} =3D "MPTCP" ] && [ ${srv_proto} =3D "MPTCP" ]; then - expect_synrx=3D$((stat_synrx_last_l+connect_per_transfer)) - expect_ackrx=3D$((stat_ackrx_last_l+connect_per_transfer)) + expect_synrx=3D${connect_per_transfer} + expect_ackrx=3D${connect_per_transfer} fi =20 - if [ ${stat_synrx_now_l} -lt ${expect_synrx} ]; then - mptcp_lib_pr_fail "lower MPC SYN rx (${stat_synrx_now_l})" \ + if [ ${stat_synrx} -lt ${expect_synrx} ]; then + mptcp_lib_pr_fail "lower MPC SYN rx (${stat_synrx})" \ "than expected (${expect_synrx})" retc=3D1 fi - if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ]; then - if [ ${stat_ooo_now} -eq 0 ]; then - mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx_now_l})" \ + if [ ${stat_ackrx} -lt ${expect_ackrx} ]; then + if [ ${stat_ooo} -eq 0 ]; then + mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx})" \ "than expected (${expect_ackrx})" rets=3D1 else @@ -503,47 +488,45 @@ do_transfer() csum_err_s=3D$(mptcp_lib_get_counter "${listener_ns}" "MPTcpExtDataCsumE= rr") csum_err_c=3D$(mptcp_lib_get_counter "${connector_ns}" "MPTcpExtDataCsum= Err") =20 - local csum_err_s_nr=3D$((csum_err_s - stat_csum_err_s)) - if [ $csum_err_s_nr -gt 0 ]; then - mptcp_lib_pr_fail "server got ${csum_err_s_nr} data checksum error[s]" + if [ $csum_err_s -gt 0 ]; then + mptcp_lib_pr_fail "server got ${csum_err_s} data checksum error[s]" rets=3D1 fi =20 - local csum_err_c_nr=3D$((csum_err_c - stat_csum_err_c)) - if [ $csum_err_c_nr -gt 0 ]; then - mptcp_lib_pr_fail "client got ${csum_err_c_nr} data checksum error[s]" + if [ $csum_err_c -gt 0 ]; then + mptcp_lib_pr_fail "client got ${csum_err_c} data checksum error[s]" retc=3D1 fi fi =20 - if [ ${stat_ooo_now} -eq 0 ] && [ ${stat_tcpfb_last_l} -ne ${stat_tcpfb_n= ow_l} ]; then + if [ ${stat_ooo} -eq 0 ] && [ ${stat_tcpfb} -gt 0 ]; then mptcp_lib_pr_fail "unexpected fallback to TCP" rets=3D1 fi =20 if [ $cookies -eq 2 ];then - if [ $stat_cookietx_last -ge $stat_cookietx_now ] ;then + if [ $stat_cookietx -eq 0 ] ;then extra+=3D" WARN: CookieSent: did not advance" fi - if [ $stat_cookierx_last -ge $stat_cookierx_now ] ;then + if [ $stat_cookierx -eq 0 ] ;then extra+=3D" WARN: CookieRecv: did not advance" fi else - if [ $stat_cookietx_last -ne $stat_cookietx_now ] ;then + if [ $stat_cookietx -gt 0 ] ;then extra+=3D" WARN: CookieSent: changed" fi - if [ $stat_cookierx_last -ne $stat_cookierx_now ] ;then + if [ $stat_cookierx -gt 0 ] ;then extra+=3D" WARN: CookieRecv: changed" fi fi =20 - if [ ${stat_synrx_now_l} -gt ${expect_synrx} ]; then + if [ ${stat_synrx} -gt ${expect_synrx} ]; then extra+=3D" WARN: SYNRX: expect ${expect_synrx}," - extra+=3D" got ${stat_synrx_now_l} (probably retransmissions)" + extra+=3D" got ${stat_synrx} (probably retransmissions)" fi - if [ ${stat_ackrx_now_l} -gt ${expect_ackrx} ]; then + if [ ${stat_ackrx} -gt ${expect_ackrx} ]; then extra+=3D" WARN: ACKRX: expect ${expect_ackrx}," - extra+=3D" got ${stat_ackrx_now_l} (probably retransmissions)" + extra+=3D" got ${stat_ackrx} (probably retransmissions)" fi =20 if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index fa91eebdbc47..91ec75ddcb96 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -111,7 +111,7 @@ mptcp_lib_pr_nstat() { local hist=3D"/tmp/${ns}.out" =20 if [ -f "${hist}" ]; then - awk '{ print " "$0 }' "${hist}" + awk '$2 !=3D 0 { print " "$0 }' "${hist}" else ip netns exec "${ns}" nstat -as | grep Tcp fi @@ -388,6 +388,7 @@ mptcp_lib_is_v6() { mptcp_lib_nstat_init() { local ns=3D"${1}" =20 + rm -f "/tmp/${ns}."{nstat,out} NSTAT_HISTORY=3D"/tmp/${ns}.nstat" ip netns exec "${ns}" nstat -n } =20 @@ -395,18 +396,25 @@ mptcp_lib_nstat_get() { local ns=3D"${1}" =20 # filter out non-*TCP stats, and the rate (last column) - NSTAT_HISTORY=3D"/tmp/${ns}.nstat" ip netns exec "${ns}" nstat | + NSTAT_HISTORY=3D"/tmp/${ns}.nstat" ip netns exec "${ns}" nstat -sz | grep -o ".*Tcp\S\+\s\+[0-9]\+" > "/tmp/${ns}.out" } =20 # $1: ns, $2: MIB counter +# Get the counter from the history (mptcp_lib_nstat_{init,get}()) if avail= able. +# If not, get the counter from nstat ignoring any history. mptcp_lib_get_counter() { local ns=3D"${1}" local counter=3D"${2}" + local hist=3D"/tmp/${ns}.out" local count =20 - count=3D$(ip netns exec "${ns}" nstat -asz "${counter}" | - awk 'NR=3D=3D1 {next} {print $2}') + if [[ -s "${hist}" && "${counter}" =3D=3D *"Tcp"* ]]; then + count=3D$(awk "/^${counter} / {print \$2; exit}" "${hist}") + else + count=3D$(ip netns exec "${ns}" nstat -asz "${counter}" | + awk 'NR=3D=3D1 {next} {print $2}') + fi if [ -z "${count}" ]; then mptcp_lib_fail_if_expected_feature "${counter} counter" return 1 --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 494D934B18B; Fri, 14 Nov 2025 18:12:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143959; cv=none; b=F1f1S5myMHl03gy36x6LxGX/tBgM9SpK+E6yrJSQS6ccZT03ml7sXiwu0EgOD1t0ozpSrQqrAtN08czUdydNQEBbqQGk8KbzUzJ/YSNELubPf6aulpCSwrAf1du4fWo09xVGxR5P4vPd6lDMlWhBU6E2Gbz2gyld52CBIzgxIOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143959; c=relaxed/simple; bh=nEl2T66irRmp4tRPy8x4wUYialN5rIBEJihyOUMUTDU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BGfIZbdRkwwJ/61YwIzCc3+e0ej93NYnURBgbCpix8NeRxotKCoSEBDj3CXvfJMQAfguJya8WC5IGTNfI09FKfL7zfHaFa+f6feo0oNU3BJ4v54AXqlOg05l3VBg7zDfeVnCC3wgK720p9zvVzck747T4TRIjqWQucfTs60cXv4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r2dDt7mr; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r2dDt7mr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBB09C4CEF5; Fri, 14 Nov 2025 18:12:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143959; bh=nEl2T66irRmp4tRPy8x4wUYialN5rIBEJihyOUMUTDU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=r2dDt7mrCia0ncEYdI+eZONIldJ83NCTuw5j08iMa2CO+w0Bq1pfmR8AgVBHBtnDS MZR3QfdIrKGKYj84UVp3NWvxyDon7JhYMX4cwJqd4ufTFRFiLTmvPVhHNHh9qybRrK 21wATF5eqFeM4HCMmzyyD8sVRb6qdcq5NhcYDdpTYrGIoXDVmtbcxy/2hXEH1xXnk/ QUQMhPWDuXG0OUX1hDpiudnm5L5TXJZcPriPmyVUGut4tQtn2Efhx9oLXyE9wyF8GZ DsTycb4jR0ZylFpV1Jvkmz12+cw9SnqwWm3gPTS/YM6hLs/N9ZOzz6FxA2TZvociTH mc33CFGzg+J9A== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:10 +0100 Subject: [PATCH net-next 6/8] selftests: mptcp: connect: avoid double packet traces Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-6-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1962; i=matttbe@kernel.org; h=from:subject:message-id; bh=nEl2T66irRmp4tRPy8x4wUYialN5rIBEJihyOUMUTDU=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFCxmtv57jlc52acpbqX9eyS3AhONDwIH1b/6eqmKwv 1Ue3jy/o5SFQYyLQVZMkUW6LTJ/5vMq3hIvPwuYOaxMIEMYuDgFYCLm3IwMZ+4LTbc8GqPzNt/Q JuOGVer2Nwf63PcU8q3Zahng7SoewPBPidfSOG+ey9tLwgx/fIMv3w16lvw7d+Ea4zAdM50qvVJ mAA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When the same netns is used for the listener and the connector, no need to take exactly the same packet trace twice, one is enough. This avoids confusions when the traces are the same, and wasting resources which might not help reproducing an issue. While at it, avoid long lines and double spaces now that these lines are no longer aligned. Reviewed-by: Geliang Tang Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_connect.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index 3a804abebd2c..e0bfd9b4730c 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -375,11 +375,15 @@ do_transfer() local capfile=3D"${rndh}-${connector_ns:0:3}-${listener_ns:0:3}-${cl_pro= to}-${srv_proto}-${connect_addr}-${port}" local capopt=3D"-i any -s 65535 -B 32768 ${capuser}" =20 - ip netns exec ${listener_ns} tcpdump ${capopt} -w "${capfile}-listener.= pcap" >> "${capout}" 2>&1 & + ip netns exec ${listener_ns} tcpdump ${capopt} \ + -w "${capfile}-listener.pcap" >> "${capout}" 2>&1 & local cappid_listener=3D$! =20 - ip netns exec ${connector_ns} tcpdump ${capopt} -w "${capfile}-connector= .pcap" >> "${capout}" 2>&1 & - local cappid_connector=3D$! + if [ ${listener_ns} !=3D ${connector_ns} ]; then + ip netns exec ${connector_ns} tcpdump ${capopt} \ + -w "${capfile}-connector.pcap" >> "${capout}" 2>&1 & + local cappid_connector=3D$! + fi =20 sleep 1 fi @@ -416,7 +420,9 @@ do_transfer() if $capture; then sleep 1 kill ${cappid_listener} - kill ${cappid_connector} + if [ ${listener_ns} !=3D ${connector_ns} ]; then + kill ${cappid_connector} + fi fi =20 mptcp_lib_nstat_get "${listener_ns}" --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6533225A38; Fri, 14 Nov 2025 18:12:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143962; cv=none; b=WTikGMbJ3Mr4h5E098n7rXKAcB0s1Kec3A26040rtpD4FYzEUMSCXOivbwFIcTrJyPgyUiW/2tAQNS/JCZ3+TwzoGZuYipNay7ERTFtAjRE9xUc8xp0+ulN79v5vKjFK9N13G4zATlNu/y9BeamtYUcPDOJx6+GDZtMZVLDhLQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143962; c=relaxed/simple; bh=tvWbDLJvMCusXB4MivXMB5KMx6BdY5fajVKVbvHmzSg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r4+zsB+dgp4+MKnPMaQGFz+AQ1SzuoRXZfebsegd3kL/5/vPKVMQEQHhUT9Yci5Ef/Wss2qcNB9q1spQtAbIscRXH8oGlkVF7OAAJRQjnxSIBgyFAqXplGhKnv3LTluHmq7RStBDOzWisyYbyL3EuDGmcRxXAX7qWkHPT4XErWs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mJBmJsGR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mJBmJsGR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8B524C116D0; Fri, 14 Nov 2025 18:12:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143961; bh=tvWbDLJvMCusXB4MivXMB5KMx6BdY5fajVKVbvHmzSg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mJBmJsGRGtzjXu3MoutQqFm2kguaytRSUepx2estzTJOq+LAUwU/VAeInyRXrW2b4 UMbIFXzxKZTkuSEzTXSQCJOBQb+9vOqBjd5fz5yKa4ppQu5dQ1q/fbCXohYI/Hf+lI jiSbxMHIw9icaU5npKWBOCL5OyudmnV4VihK46PQ5HLPzxjZyXtD0QLkKSH/7ZSK8O sUCOL1M/3VpLDNGI/0ML7BPj0yMYq+99JPVRRagq79lZsKSZuwHRu8XuNxhN5lZI3T Ei3IgRkmBs3Iamt2VLfKeZwFTMSbhpWhO9NkYiuHwB4fXtaFP3WZh3WMch5c5z6Tw9 C9vazwMLr3+VQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:11 +0100 Subject: [PATCH net-next 7/8] selftests: mptcp: wait for port instead of sleep Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-7-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1768; i=matttbe@kernel.org; h=from:subject:message-id; bh=tvWbDLJvMCusXB4MivXMB5KMx6BdY5fajVKVbvHmzSg=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFC5mPbefr3qdfMT2FUf6378STyyZzLdmf3PdkZx73D D2Ou46zO0pZGMS4GGTFFFmk2yLzZz6v4i3x8rOAmcPKBDKEgYtTACaSr83IMF1XZKXD5Vr/Q39T 091LHvyb7TPZp7y6kO//lLbEmxx9uYwMe+Yt72h6bFnGbplRbpucoXJRJ4ThFrPvYcEtuSkzln3 jBgA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 After having started mptcp_connect in listening mode, 'mptcp_lib_wait_local_port_listen' can be used to wait for the listening socket to be ready. This is better than using the 'sleep' command, not to pause for a fixed amount of time, but waiting for an event. This helper is used in all other MPTCP selftests, but not in these two. Reviewed-by: Geliang Tang Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 2 +- tools/testing/selftests/net/mptcp/userspace_pm.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 42d533b95ec7..6cde7429104b 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -178,7 +178,7 @@ do_transfer() ${local_addr} < "$sin" > "$sout" & local spid=3D$! =20 - sleep 1 + mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" =20 timeout ${timeout_test} \ ip netns exec ${connector_ns} \ diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/test= ing/selftests/net/mptcp/userspace_pm.sh index 87323942cb8a..e9ae1806ab07 100755 --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh @@ -211,7 +211,8 @@ make_connection() ip netns exec "$ns1" \ ./mptcp_connect -s MPTCP -w 300 -p $app_port -l $listen_addr > /dev/nu= ll 2>&1 & local server_pid=3D$! - sleep 0.5 + + mptcp_lib_wait_local_port_listen "${ns1}" "${port}" =20 # Run the client, transfer $file and stay connected to the server # to conduct tests --=20 2.51.0 From nobody Thu Nov 27 12:35:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3A3034D383; Fri, 14 Nov 2025 18:12:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143964; cv=none; b=jrZp+0CxH83XMoYJLIVbOrkgoa/pfg04MNSdEkoxGXUVwOkMQhOubzB/qDYJNZIz9pVask7Vl7Syfcim6+wKf/q1cK4Suv3mSseaCwLzbUv286rWBJUJ0d4eiCsaB+Cx5m5g/lo47pAIY8M7mV/Dv0/wPKJPukovKC1+szSVUwI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763143964; c=relaxed/simple; bh=FEOSCr2hMTBDDkz3/20oFIn06yOc0640jfd06Qv+9K4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZRMGt9Jhtsh0ZN8U04E6k1cbviW2QhDuCY1cNMclt8BcOnDXU+1MSe/v/c/5U4fNR1CRvv3JmcDcRI+Zn64sn1/qd6VJCNiGfRD0PmUh67Iiyvp9YiHSyeImNxPgG16j8pEi5J8KyKRuwYTX8lG9scTuK66bKX2t0rYDt5/4VSU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Hko6eBnl; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Hko6eBnl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C21AC113D0; Fri, 14 Nov 2025 18:12:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763143964; bh=FEOSCr2hMTBDDkz3/20oFIn06yOc0640jfd06Qv+9K4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Hko6eBnlhvBs27rmxVov+yL1ypJ1chy3nFm3FVxgMFDsRiNqYoSuKQ64bOPh32NET vAlYRiZW8vo8oKgTc69iXNJmaGXuS9fzvau1gdPLldq82T9zpFyOUOqWahTb98EFNN dn4BlZVQ9A8dBuJUFl1+xl0+EidjtoeN24bngBn4MoC9WtgsbGEwQtOTLFRg0wUrwF XJtfLyA3UpO9Bb/y2zlk2Ib35L10UoIsiRz5D/KGSqeYgl6p5id91VHbrSPRwIkrYs 2QS5MqMQXVjmI513oFyb/HnngQTHz+LY5OuarWT5sHj6rJMKtKqp18Kbk3FWYkR8PZ f0FHrh95FuY/w== From: "Matthieu Baerts (NGI0)" Date: Fri, 14 Nov 2025 19:12:12 +0100 Subject: [PATCH net-next 8/8] selftests: mptcp: get stats just before timing out Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-8-863cb04e1b7b@kernel.org> References: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> In-Reply-To: <20251114-net-next-mptcp-sft-count-cache-stats-timeout-v1-0-863cb04e1b7b@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=10625; i=matttbe@kernel.org; h=from:subject:message-id; bh=FEOSCr2hMTBDDkz3/20oFIn06yOc0640jfd06Qv+9K4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLFC1m8Ax/qnrlQL1QknMit6Dp5s2+FSaf98sXccrccj lrwvOvpKGVhEONikBVTZJFui8yf+byKt8TLzwJmDisTyBAGLk4BmIiGFMNfiZtls8+q/ZHVm7WX LcG85P6U204lEzqXXWvbKlQ3lz/GneF/TNtnXZXI6FnWb0qatU9F+SXtC/t+6OGXny51HHbnb4v zAgA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Recently, some debugging happened around a test that was timing out. The stats were showing connections being closed which was confusing because the closing state was caused by the timeout stopping the transfer. To avoid such confusion, the timeout is no longer done per mptcp_connect process, but separately. In case of timeout, the stats are now printed, then the apps are killed. The stats will still be printed after the kill, but that's fine, and this might even be useful, just in case. Timeout should be exceptional. Reviewed-by: Geliang Tang Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_connect.sh | 26 +++++++++++------ tools/testing/selftests/net/mptcp/mptcp_join.sh | 34 +++++++++++++-----= ---- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 13 +++++++++ tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 26 +++++++++++------ tools/testing/selftests/net/mptcp/simult_flows.sh | 29 +++++++++++------- 5 files changed, 86 insertions(+), 42 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_connect.sh index e0bfd9b4730c..a6447f7a31fe 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh @@ -393,27 +393,35 @@ do_transfer() mptcp_lib_nstat_init "${connector_ns}" fi =20 - timeout ${timeout_test} \ - ip netns exec ${listener_ns} \ - ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \ - $extra_args $local_addr < "$sin" > "$sout" & + ip netns exec ${listener_ns} \ + ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \ + $extra_args $local_addr < "$sin" > "$sout" & local spid=3D$! =20 mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" =20 local start start=3D$(date +%s%3N) - timeout ${timeout_test} \ - ip netns exec ${connector_ns} \ - ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ - $extra_args $connect_addr < "$cin" > "$cout" & + ip netns exec ${connector_ns} \ + ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ + $extra_args $connect_addr < "$cin" > "$cout" & local cpid=3D$! =20 + mptcp_lib_wait_timeout "${timeout_test}" "${listener_ns}" \ + "${connector_ns}" "${port}" "${cpid}" "${spid}" & + local timeout_pid=3D$! + wait $cpid local retc=3D$? wait $spid local rets=3D$? =20 + if kill -0 $timeout_pid; then + # Finished before the timeout: kill the background job + mptcp_lib_kill_group_wait $timeout_pid + timeout_pid=3D0 + fi + local stop stop=3D$(date +%s%3N) =20 @@ -433,7 +441,7 @@ do_transfer() local duration duration=3D$((stop-start)) printf "(duration %05sms) " "${duration}" - if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then + if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ] || [ ${timeout_pid} -ne 0 ]; th= en mptcp_lib_pr_fail "client exit code $retc, server $rets" mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" =20 diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 54bac074f184..be61612f68fe 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1024,38 +1024,38 @@ do_transfer() if [ "$test_linkfail" -gt 1 ];then listener_in=3D"${sinfail}" fi - timeout ${timeout_test} \ - ip netns exec ${listener_ns} \ - ./mptcp_connect -t ${timeout_poll} -l -p ${port} -s ${srv_proto} \ - ${extra_srv_args} "${bind_addr}" < "${listener_in}" > "${sout}" & + ip netns exec ${listener_ns} \ + ./mptcp_connect -t ${timeout_poll} -l -p ${port} -s ${srv_proto} \ + ${extra_srv_args} "${bind_addr}" < "${listener_in}" > "${sout}" & local spid=3D$! =20 mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" =20 extra_cl_args=3D"$extra_args $extra_cl_args" if [ "$test_linkfail" -eq 0 ];then - timeout ${timeout_test} \ - ip netns exec ${connector_ns} \ - ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ - $extra_cl_args $connect_addr < "$cin" > "$cout" & + ip netns exec ${connector_ns} \ + ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ + $extra_cl_args $connect_addr < "$cin" > "$cout" & elif [ "$test_linkfail" -eq 1 ] || [ "$test_linkfail" -eq 2 ];then connector_in=3D"${cinsent}" ( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" )= | \ tee "$cinsent" | \ - timeout ${timeout_test} \ ip netns exec ${connector_ns} \ ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ $extra_cl_args $connect_addr > "$cout" & else connector_in=3D"${cinsent}" tee "$cinsent" < "$cinfail" | \ - timeout ${timeout_test} \ - ip netns exec ${connector_ns} \ - ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ - $extra_cl_args $connect_addr > "$cout" & + ip netns exec ${connector_ns} \ + ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ + $extra_cl_args $connect_addr > "$cout" & fi local cpid=3D$! =20 + mptcp_lib_wait_timeout "${timeout_test}" "${listener_ns}" \ + "${connector_ns}" "${port}" "${cpid}" "${spid}" & + local timeout_pid=3D$! + pm_nl_set_endpoint $listener_ns $connector_ns $connect_addr check_cestab $listener_ns $connector_ns =20 @@ -1064,12 +1064,18 @@ do_transfer() wait $spid local rets=3D$? =20 + if kill -0 $timeout_pid; then + # Finished before the timeout: kill the background job + mptcp_lib_kill_group_wait $timeout_pid + timeout_pid=3D0 + fi + cond_stop_capture =20 mptcp_lib_nstat_get "${listener_ns}" mptcp_lib_nstat_get "${connector_ns}" =20 - if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then + if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ] || [ ${timeout_pid} -ne 0 ]; th= en fail_test "client exit code $retc, server $rets" mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" return 1 diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing= /selftests/net/mptcp/mptcp_lib.sh index 91ec75ddcb96..5fea7e7df628 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh @@ -350,6 +350,19 @@ mptcp_lib_evts_get_info() { mptcp_lib_get_info_value "${1}" "^type:${3:-1}," } =20 +mptcp_lib_wait_timeout() { + local timeout_test=3D"${1}" + local listener_ns=3D"${2}" + local connector_ns=3D"${3}" + local port=3D"${4}" + shift 4 # rest are PIDs + + sleep "${timeout_test}" + mptcp_lib_print_err "timeout" + mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" + kill "${@}" 2>/dev/null +} + # $1: PID mptcp_lib_kill_wait() { [ "${1}" -eq 0 ] && return 0 diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 6cde7429104b..ab8bce06b262 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -172,31 +172,39 @@ do_transfer() mptcp_lib_nstat_init "${listener_ns}" mptcp_lib_nstat_init "${connector_ns}" =20 - timeout ${timeout_test} \ - ip netns exec ${listener_ns} \ - $mptcp_connect -t ${timeout_poll} -l -M 1 -p $port -s ${srv_proto} -c "= ${cmsg}" \ - ${local_addr} < "$sin" > "$sout" & + ip netns exec ${listener_ns} \ + $mptcp_connect -t ${timeout_poll} -l -M 1 -p $port -s ${srv_proto} -c "$= {cmsg}" \ + ${local_addr} < "$sin" > "$sout" & local spid=3D$! =20 mptcp_lib_wait_local_port_listen "${listener_ns}" "${port}" =20 - timeout ${timeout_test} \ - ip netns exec ${connector_ns} \ - $mptcp_connect -t ${timeout_poll} -M 2 -p $port -s ${cl_proto} -c "${cm= sg}" \ - $connect_addr < "$cin" > "$cout" & + ip netns exec ${connector_ns} \ + $mptcp_connect -t ${timeout_poll} -M 2 -p $port -s ${cl_proto} -c "${cms= g}" \ + $connect_addr < "$cin" > "$cout" & =20 local cpid=3D$! =20 + mptcp_lib_wait_timeout "${timeout_test}" "${listener_ns}" \ + "${connector_ns}" "${port}" "${cpid}" "${spid}" & + local timeout_pid=3D$! + wait $cpid local retc=3D$? wait $spid local rets=3D$? =20 + if kill -0 $timeout_pid; then + # Finished before the timeout: kill the background job + mptcp_lib_kill_group_wait $timeout_pid + timeout_pid=3D0 + fi + mptcp_lib_nstat_get "${listener_ns}" mptcp_lib_nstat_get "${connector_ns}" =20 print_title "Transfer ${ip:2}" - if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then + if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ] || [ ${timeout_pid} -ne 0 ]; th= en mptcp_lib_pr_fail "client exit code $retc, server $rets" mptcp_lib_pr_err_stats "${listener_ns}" "${connector_ns}" "${port}" =20 diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/test= ing/selftests/net/mptcp/simult_flows.sh index 503cb59571a4..806aaa7d2d61 100755 --- a/tools/testing/selftests/net/mptcp/simult_flows.sh +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh @@ -158,25 +158,33 @@ do_transfer() mptcp_lib_nstat_init "${ns3}" mptcp_lib_nstat_init "${ns1}" =20 - timeout ${timeout_test} \ - ip netns exec ${ns3} \ - ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \ - 0.0.0.0 < "$sin" > "$sout" & + ip netns exec ${ns3} \ + ./mptcp_connect -jt ${timeout_poll} -l -p $port -T $max_time \ + 0.0.0.0 < "$sin" > "$sout" & local spid=3D$! =20 mptcp_lib_wait_local_port_listen "${ns3}" "${port}" =20 - timeout ${timeout_test} \ - ip netns exec ${ns1} \ - ./mptcp_connect -jt ${timeout_poll} -p $port -T $max_time \ - 10.0.3.3 < "$cin" > "$cout" & + ip netns exec ${ns1} \ + ./mptcp_connect -jt ${timeout_poll} -p $port -T $max_time \ + 10.0.3.3 < "$cin" > "$cout" & local cpid=3D$! =20 + mptcp_lib_wait_timeout "${timeout_test}" "${ns3}" "${ns1}" "${port}" \ + "${cpid}" "${spid}" & + local timeout_pid=3D$! + wait $cpid local retc=3D$? wait $spid local rets=3D$? =20 + if kill -0 $timeout_pid; then + # Finished before the timeout: kill the background job + mptcp_lib_kill_group_wait $timeout_pid + timeout_pid=3D0 + fi + if $capture; then sleep 1 kill ${cappid_listener} @@ -191,8 +199,9 @@ do_transfer() cmp $cin $sout > /dev/null 2>&1 local cmpc=3D$? =20 - if [ $retc -eq 0 ] && [ $rets -eq 0 ] && \ - [ $cmpc -eq 0 ] && [ $cmps -eq 0 ]; then + if [ $retc -eq 0 ] && [ $rets -eq 0 ] && + [ $cmpc -eq 0 ] && [ $cmps -eq 0 ] && + [ $timeout_pid -eq 0 ]; then printf "%-16s" " max $max_time " mptcp_lib_pr_ok cat "$capout" --=20 2.51.0