Skip to content

Commit 7a6fa4f

Browse files
committed
Merge branch 'selftests-mptcp-join-fix-some-flaky-tests'
Matthieu Baerts says: ==================== selftests: mptcp: join: fix some flaky tests When looking at the recent CI results on NIPA and MPTCP CIs, a few MPTCP Join tests are marked as unstable. Here are some fixes for that. - Patch 1: a small fix for mptcp_connect.sh, printing a note as initially intended. For >=v5.13. - Patch 2: avoid unexpected reset when closing subflows. For >= 5.13. - Patches 3-4: longer transfer when not waiting for the end. For >=5.18. - Patch 5: read all received data when expecting a reset. For >= v6.1. - Patch 6: a fix to properly kill background tasks. For >= v6.5. ==================== Link: https://patch.msgid.link/20251110-net-mptcp-sft-join-unstable-v1-0-a4332c714e10@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents 27bcc05 + 852b644 commit 7a6fa4f

4 files changed

Lines changed: 80 additions & 51 deletions

File tree

tools/testing/selftests/net/mptcp/mptcp_connect.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -710,8 +710,14 @@ static int copyfd_io_poll(int infd, int peerfd, int outfd,
710710

711711
bw = do_rnd_write(peerfd, winfo->buf + winfo->off, winfo->len);
712712
if (bw < 0) {
713-
if (cfg_rcv_trunc)
714-
return 0;
713+
/* expected reset, continue to read */
714+
if (cfg_rcv_trunc &&
715+
(errno == ECONNRESET ||
716+
errno == EPIPE)) {
717+
fds.events &= ~POLLOUT;
718+
continue;
719+
}
720+
715721
perror("write");
716722
return 111;
717723
}
@@ -737,8 +743,10 @@ static int copyfd_io_poll(int infd, int peerfd, int outfd,
737743
}
738744

739745
if (fds.revents & (POLLERR | POLLNVAL)) {
740-
if (cfg_rcv_trunc)
741-
return 0;
746+
if (cfg_rcv_trunc) {
747+
fds.events &= ~(POLLERR | POLLNVAL);
748+
continue;
749+
}
742750
fprintf(stderr, "Unexpected revents: "
743751
"POLLERR/POLLNVAL(%x)\n", fds.revents);
744752
return 5;
@@ -1433,7 +1441,7 @@ static void parse_opts(int argc, char **argv)
14331441
*/
14341442
if (cfg_truncate < 0) {
14351443
cfg_rcv_trunc = true;
1436-
signal(SIGPIPE, handle_signal);
1444+
signal(SIGPIPE, SIG_IGN);
14371445
}
14381446
break;
14391447
case 'j':

tools/testing/selftests/net/mptcp/mptcp_connect.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ do_transfer()
492492
"than expected (${expect_synrx})"
493493
retc=1
494494
fi
495-
if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ] && [ ${stat_ooo_now} -eq 0 ]; then
495+
if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ]; then
496496
if [ ${stat_ooo_now} -eq 0 ]; then
497497
mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx_now_l})" \
498498
"than expected (${expect_ackrx})"

tools/testing/selftests/net/mptcp/mptcp_join.sh

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2532,7 +2532,7 @@ remove_tests()
25322532
if reset "remove single subflow"; then
25332533
pm_nl_set_limits $ns1 0 1
25342534
pm_nl_set_limits $ns2 0 1
2535-
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
2535+
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
25362536
addr_nr_ns2=-1 speed=slow \
25372537
run_tests $ns1 $ns2 10.0.1.1
25382538
chk_join_nr 1 1 1
@@ -2545,8 +2545,8 @@ remove_tests()
25452545
if reset "remove multiple subflows"; then
25462546
pm_nl_set_limits $ns1 0 2
25472547
pm_nl_set_limits $ns2 0 2
2548-
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
2549-
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
2548+
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow,backup
2549+
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
25502550
addr_nr_ns2=-2 speed=slow \
25512551
run_tests $ns1 $ns2 10.0.1.1
25522552
chk_join_nr 2 2 2
@@ -2557,7 +2557,7 @@ remove_tests()
25572557
# single address, remove
25582558
if reset "remove single address"; then
25592559
pm_nl_set_limits $ns1 0 1
2560-
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
2560+
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal,backup
25612561
pm_nl_set_limits $ns2 1 1
25622562
addr_nr_ns1=-1 speed=slow \
25632563
run_tests $ns1 $ns2 10.0.1.1
@@ -2570,9 +2570,9 @@ remove_tests()
25702570
# subflow and signal, remove
25712571
if reset "remove subflow and signal"; then
25722572
pm_nl_set_limits $ns1 0 2
2573-
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
2573+
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal,backup
25742574
pm_nl_set_limits $ns2 1 2
2575-
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
2575+
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
25762576
addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
25772577
run_tests $ns1 $ns2 10.0.1.1
25782578
chk_join_nr 2 2 2
@@ -2584,10 +2584,10 @@ remove_tests()
25842584
# subflows and signal, remove
25852585
if reset "remove subflows and signal"; then
25862586
pm_nl_set_limits $ns1 0 3
2587-
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
2587+
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal,backup
25882588
pm_nl_set_limits $ns2 1 3
2589-
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
2590-
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
2589+
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
2590+
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow,backup
25912591
addr_nr_ns1=-1 addr_nr_ns2=-2 speed=10 \
25922592
run_tests $ns1 $ns2 10.0.1.1
25932593
chk_join_nr 3 3 3
@@ -2599,9 +2599,9 @@ remove_tests()
25992599
# addresses remove
26002600
if reset "remove addresses"; then
26012601
pm_nl_set_limits $ns1 3 3
2602-
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal id 250
2603-
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
2604-
pm_nl_add_endpoint $ns1 10.0.4.1 flags signal
2602+
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal,backup id 250
2603+
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal,backup
2604+
pm_nl_add_endpoint $ns1 10.0.4.1 flags signal,backup
26052605
pm_nl_set_limits $ns2 3 3
26062606
addr_nr_ns1=-3 speed=10 \
26072607
run_tests $ns1 $ns2 10.0.1.1
@@ -2614,10 +2614,10 @@ remove_tests()
26142614
# invalid addresses remove
26152615
if reset "remove invalid addresses"; then
26162616
pm_nl_set_limits $ns1 3 3
2617-
pm_nl_add_endpoint $ns1 10.0.12.1 flags signal
2617+
pm_nl_add_endpoint $ns1 10.0.12.1 flags signal,backup
26182618
# broadcast IP: no packet for this address will be received on ns1
2619-
pm_nl_add_endpoint $ns1 224.0.0.1 flags signal
2620-
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
2619+
pm_nl_add_endpoint $ns1 224.0.0.1 flags signal,backup
2620+
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal,backup
26212621
pm_nl_set_limits $ns2 2 2
26222622
addr_nr_ns1=-3 speed=10 \
26232623
run_tests $ns1 $ns2 10.0.1.1
@@ -2631,10 +2631,10 @@ remove_tests()
26312631
# subflows and signal, flush
26322632
if reset "flush subflows and signal"; then
26332633
pm_nl_set_limits $ns1 0 3
2634-
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
2634+
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal,backup
26352635
pm_nl_set_limits $ns2 1 3
2636-
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
2637-
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
2636+
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
2637+
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow,backup
26382638
addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
26392639
run_tests $ns1 $ns2 10.0.1.1
26402640
chk_join_nr 3 3 3
@@ -2647,9 +2647,9 @@ remove_tests()
26472647
if reset "flush subflows"; then
26482648
pm_nl_set_limits $ns1 3 3
26492649
pm_nl_set_limits $ns2 3 3
2650-
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow id 150
2651-
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
2652-
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
2650+
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow,backup id 150
2651+
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
2652+
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow,backup
26532653
addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
26542654
run_tests $ns1 $ns2 10.0.1.1
26552655
chk_join_nr 3 3 3
@@ -2666,9 +2666,9 @@ remove_tests()
26662666
# addresses flush
26672667
if reset "flush addresses"; then
26682668
pm_nl_set_limits $ns1 3 3
2669-
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal id 250
2670-
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
2671-
pm_nl_add_endpoint $ns1 10.0.4.1 flags signal
2669+
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal,backup id 250
2670+
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal,backup
2671+
pm_nl_add_endpoint $ns1 10.0.4.1 flags signal,backup
26722672
pm_nl_set_limits $ns2 3 3
26732673
addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
26742674
run_tests $ns1 $ns2 10.0.1.1
@@ -2681,9 +2681,9 @@ remove_tests()
26812681
# invalid addresses flush
26822682
if reset "flush invalid addresses"; then
26832683
pm_nl_set_limits $ns1 3 3
2684-
pm_nl_add_endpoint $ns1 10.0.12.1 flags signal
2685-
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
2686-
pm_nl_add_endpoint $ns1 10.0.14.1 flags signal
2684+
pm_nl_add_endpoint $ns1 10.0.12.1 flags signal,backup
2685+
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal,backup
2686+
pm_nl_add_endpoint $ns1 10.0.14.1 flags signal,backup
26872687
pm_nl_set_limits $ns2 3 3
26882688
addr_nr_ns1=-8 speed=slow \
26892689
run_tests $ns1 $ns2 10.0.1.1
@@ -3806,7 +3806,7 @@ userspace_tests()
38063806
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
38073807
set_userspace_pm $ns1
38083808
pm_nl_set_limits $ns2 2 2
3809-
{ speed=5 \
3809+
{ test_linkfail=128 speed=5 \
38103810
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
38113811
local tests_pid=$!
38123812
wait_mpj $ns1
@@ -3831,15 +3831,15 @@ userspace_tests()
38313831
chk_mptcp_info subflows 0 subflows 0
38323832
chk_subflows_total 1 1
38333833
kill_events_pids
3834-
mptcp_lib_kill_wait $tests_pid
3834+
mptcp_lib_kill_group_wait $tests_pid
38353835
fi
38363836

38373837
# userspace pm create destroy subflow
38383838
if reset_with_events "userspace pm create destroy subflow" &&
38393839
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
38403840
set_userspace_pm $ns2
38413841
pm_nl_set_limits $ns1 0 1
3842-
{ speed=5 \
3842+
{ test_linkfail=128 speed=5 \
38433843
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
38443844
local tests_pid=$!
38453845
wait_mpj $ns2
@@ -3859,15 +3859,15 @@ userspace_tests()
38593859
chk_mptcp_info subflows 0 subflows 0
38603860
chk_subflows_total 1 1
38613861
kill_events_pids
3862-
mptcp_lib_kill_wait $tests_pid
3862+
mptcp_lib_kill_group_wait $tests_pid
38633863
fi
38643864

38653865
# userspace pm create id 0 subflow
38663866
if reset_with_events "userspace pm create id 0 subflow" &&
38673867
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
38683868
set_userspace_pm $ns2
38693869
pm_nl_set_limits $ns1 0 1
3870-
{ speed=5 \
3870+
{ test_linkfail=128 speed=5 \
38713871
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
38723872
local tests_pid=$!
38733873
wait_mpj $ns2
@@ -3880,15 +3880,15 @@ userspace_tests()
38803880
chk_mptcp_info subflows 1 subflows 1
38813881
chk_subflows_total 2 2
38823882
kill_events_pids
3883-
mptcp_lib_kill_wait $tests_pid
3883+
mptcp_lib_kill_group_wait $tests_pid
38843884
fi
38853885

38863886
# userspace pm remove initial subflow
38873887
if reset_with_events "userspace pm remove initial subflow" &&
38883888
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
38893889
set_userspace_pm $ns2
38903890
pm_nl_set_limits $ns1 0 1
3891-
{ speed=5 \
3891+
{ test_linkfail=128 speed=5 \
38923892
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
38933893
local tests_pid=$!
38943894
wait_mpj $ns2
@@ -3904,15 +3904,15 @@ userspace_tests()
39043904
chk_mptcp_info subflows 1 subflows 1
39053905
chk_subflows_total 1 1
39063906
kill_events_pids
3907-
mptcp_lib_kill_wait $tests_pid
3907+
mptcp_lib_kill_group_wait $tests_pid
39083908
fi
39093909

39103910
# userspace pm send RM_ADDR for ID 0
39113911
if reset_with_events "userspace pm send RM_ADDR for ID 0" &&
39123912
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
39133913
set_userspace_pm $ns1
39143914
pm_nl_set_limits $ns2 1 1
3915-
{ speed=5 \
3915+
{ test_linkfail=128 speed=5 \
39163916
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
39173917
local tests_pid=$!
39183918
wait_mpj $ns1
@@ -3930,7 +3930,7 @@ userspace_tests()
39303930
chk_mptcp_info subflows 1 subflows 1
39313931
chk_subflows_total 1 1
39323932
kill_events_pids
3933-
mptcp_lib_kill_wait $tests_pid
3933+
mptcp_lib_kill_group_wait $tests_pid
39343934
fi
39353935
}
39363936

@@ -3943,7 +3943,7 @@ endpoint_tests()
39433943
pm_nl_set_limits $ns1 2 2
39443944
pm_nl_set_limits $ns2 2 2
39453945
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
3946-
{ speed=slow \
3946+
{ test_linkfail=128 speed=slow \
39473947
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
39483948
local tests_pid=$!
39493949

@@ -3960,7 +3960,7 @@ endpoint_tests()
39603960
pm_nl_add_endpoint $ns2 10.0.2.2 flags signal
39613961
pm_nl_check_endpoint "modif is allowed" \
39623962
$ns2 10.0.2.2 id 1 flags signal
3963-
mptcp_lib_kill_wait $tests_pid
3963+
mptcp_lib_kill_group_wait $tests_pid
39643964
fi
39653965

39663966
if reset_with_tcp_filter "delete and re-add" ns2 10.0.3.2 REJECT OUTPUT &&
@@ -3970,7 +3970,7 @@ endpoint_tests()
39703970
pm_nl_set_limits $ns2 0 3
39713971
pm_nl_add_endpoint $ns2 10.0.1.2 id 1 dev ns2eth1 flags subflow
39723972
pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
3973-
{ test_linkfail=4 speed=5 \
3973+
{ test_linkfail=128 speed=5 \
39743974
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
39753975
local tests_pid=$!
39763976

@@ -4015,7 +4015,7 @@ endpoint_tests()
40154015
chk_mptcp_info subflows 3 subflows 3
40164016
done
40174017

4018-
mptcp_lib_kill_wait $tests_pid
4018+
mptcp_lib_kill_group_wait $tests_pid
40194019

40204020
kill_events_pids
40214021
chk_evt_nr ns1 MPTCP_LIB_EVENT_LISTENER_CREATED 1
@@ -4048,7 +4048,7 @@ endpoint_tests()
40484048
# broadcast IP: no packet for this address will be received on ns1
40494049
pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
40504050
pm_nl_add_endpoint $ns1 10.0.1.1 id 42 flags signal
4051-
{ test_linkfail=4 speed=5 \
4051+
{ test_linkfail=128 speed=5 \
40524052
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
40534053
local tests_pid=$!
40544054

@@ -4089,7 +4089,7 @@ endpoint_tests()
40894089
wait_mpj $ns2
40904090
chk_subflow_nr "after re-re-add ID 0" 3
40914091
chk_mptcp_info subflows 3 subflows 3
4092-
mptcp_lib_kill_wait $tests_pid
4092+
mptcp_lib_kill_group_wait $tests_pid
40934093

40944094
kill_events_pids
40954095
chk_evt_nr ns1 MPTCP_LIB_EVENT_LISTENER_CREATED 1
@@ -4121,7 +4121,7 @@ endpoint_tests()
41214121
# broadcast IP: no packet for this address will be received on ns1
41224122
pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
41234123
pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow
4124-
{ test_linkfail=4 speed=20 \
4124+
{ test_linkfail=128 speed=20 \
41254125
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
41264126
local tests_pid=$!
41274127

@@ -4137,7 +4137,7 @@ endpoint_tests()
41374137
wait_mpj $ns2
41384138
pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal
41394139
wait_mpj $ns2
4140-
mptcp_lib_kill_wait $tests_pid
4140+
mptcp_lib_kill_group_wait $tests_pid
41414141

41424142
join_syn_tx=3 join_connect_err=1 \
41434143
chk_join_nr 2 2 2

tools/testing/selftests/net/mptcp/mptcp_lib.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,27 @@ mptcp_lib_kill_wait() {
350350
wait "${1}" 2>/dev/null
351351
}
352352

353+
# $1: PID
354+
mptcp_lib_pid_list_children() {
355+
local curr="${1}"
356+
# evoke 'ps' only once
357+
local pids="${2:-"$(ps o pid,ppid)"}"
358+
359+
echo "${curr}"
360+
361+
local pid
362+
for pid in $(echo "${pids}" | awk "\$2 == ${curr} { print \$1 }"); do
363+
mptcp_lib_pid_list_children "${pid}" "${pids}"
364+
done
365+
}
366+
367+
# $1: PID
368+
mptcp_lib_kill_group_wait() {
369+
# Some users might not have procps-ng: cannot use "kill -- -PID"
370+
mptcp_lib_pid_list_children "${1}" | xargs -r kill &>/dev/null
371+
wait "${1}" 2>/dev/null
372+
}
373+
353374
# $1: IP address
354375
mptcp_lib_is_v6() {
355376
[ -z "${1##*:*}" ]

0 commit comments

Comments
 (0)