From: Paolo Abeni pabeni@redhat.com
[ Upstream commit b4b51d36bbaa3ddb93b3e1ca3a1ef0aa629d6521 ]
The mptcp diag interface already experienced a few locking bugs that lockdep and appropriate coverage have detected in advance.
Let's add a test-case triggering the relevant code path, to prevent similar issues in the future.
Be careful to cope with very slow environments.
Note that we don't need an explicit timeout on the mptcp_connect subprocess to cope with eventual bug/hang-up as the final cleanup terminating the child processes will take care of that.
Signed-off-by: Paolo Abeni pabeni@redhat.com Reviewed-by: Matthieu Baerts (NGI0) matttbe@kernel.org Signed-off-by: Matthieu Baerts (NGI0) matttbe@kernel.org Reviewed-by: Simon Horman horms@kernel.org Link: https://lore.kernel.org/r/20240223-upstream-net-20240223-misc-fixes-v1-10-16... Signed-off-by: Jakub Kicinski kuba@kernel.org Signed-off-by: Sasha Levin sashal@kernel.org --- tools/testing/selftests/net/mptcp/diag.sh | 30 ++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/mptcp/diag.sh b/tools/testing/selftests/net/mptcp/diag.sh index 4d8c59be1b30c..ff9a4f45f852f 100755 --- a/tools/testing/selftests/net/mptcp/diag.sh +++ b/tools/testing/selftests/net/mptcp/diag.sh @@ -20,7 +20,7 @@ flush_pids()
ip netns pids "${ns}" | xargs --no-run-if-empty kill -SIGUSR1 &>/dev/null
- for _ in $(seq 10); do + for _ in $(seq $((timeout_poll * 10))); do [ -z "$(ip netns pids "${ns}")" ] && break sleep 0.1 done @@ -91,6 +91,15 @@ chk_msk_nr() __chk_msk_nr "grep -c token:" "$@" }
+chk_listener_nr() +{ + local expected=$1 + local msg="$2" + + __chk_nr "ss -inmlHMON $ns | wc -l" "$expected" "$msg - mptcp" 0 + __chk_nr "ss -inmlHtON $ns | wc -l" "$expected" "$msg - subflows" +} + wait_msk_nr() { local condition="grep -c token:" @@ -306,5 +315,24 @@ flush_pids chk_msk_inuse 0 "many->0" chk_msk_cestab 0 "many->0"
+chk_listener_nr 0 "no listener sockets" +NR_SERVERS=100 +for I in $(seq 1 $NR_SERVERS); do + ip netns exec $ns ./mptcp_connect -p $((I + 20001)) \ + -t ${timeout_poll} -l 0.0.0.0 >/dev/null 2>&1 & +done + +for I in $(seq 1 $NR_SERVERS); do + mptcp_lib_wait_local_port_listen $ns $((I + 20001)) +done + +chk_listener_nr $NR_SERVERS "many listener sockets" + +# graceful termination +for I in $(seq 1 $NR_SERVERS); do + echo a | ip netns exec $ns ./mptcp_connect -p $((I + 20001)) 127.0.0.1 >/dev/null 2>&1 & +done +flush_pids + mptcp_lib_result_print_all_tap exit $ret
Hi Sasha,
On 11/03/2024 16:11, Sasha Levin wrote:
From: Paolo Abeni pabeni@redhat.com
[ Upstream commit b4b51d36bbaa3ddb93b3e1ca3a1ef0aa629d6521 ]
Thank you for having backported this patch to v6.7 and v6.6 versions. But it looks like it depends on commit 9369777c2939 ("selftests: mptcp: add mptcp_lib_wait_local_port_listen") which is not in these versions.
Because CIs will soon use the kselftests from the new v6.8, I think it is better to drop this patch from v6.7 and v6.6 versions.
Cheers, Matt
On Mon, Mar 11, 2024 at 04:28:01PM +0100, Matthieu Baerts wrote:
Hi Sasha,
On 11/03/2024 16:11, Sasha Levin wrote:
From: Paolo Abeni pabeni@redhat.com
[ Upstream commit b4b51d36bbaa3ddb93b3e1ca3a1ef0aa629d6521 ]
Thank you for having backported this patch to v6.7 and v6.6 versions. But it looks like it depends on commit 9369777c2939 ("selftests: mptcp: add mptcp_lib_wait_local_port_listen") which is not in these versions.
Because CIs will soon use the kselftests from the new v6.8, I think it is better to drop this patch from v6.7 and v6.6 versions.
Cheers, Matt
I'll drop it, thanks.
linux-kselftest-mirror@lists.linaro.org