1
1
#! /bin/bash
2
2
# SPDX-License-Identifier: GPL-2.0
3
3
4
+ # Double quotes to prevent globbing and word splitting is recommended in new
5
+ # code but we accept it, especially because there were too many before having
6
+ # address all other issues detected by shellcheck.
7
+ # shellcheck disable=SC2086
8
+
4
9
. " $( dirname " ${0} " ) /mptcp_lib.sh"
5
10
6
11
time_start=$( date +%s)
@@ -13,7 +18,6 @@ sout=""
13
18
cin_disconnect=" "
14
19
cin=" "
15
20
cout=" "
16
- ksft_skip=4
17
21
capture=false
18
22
timeout_poll=30
19
23
timeout_test=$(( timeout_poll * 2 + 1 ))
@@ -121,38 +125,29 @@ while getopts "$optstring" option;do
121
125
esac
122
126
done
123
127
124
- sec=$( date +%s)
125
- rndh=$( printf %x $sec ) -$( mktemp -u XXXXXX)
126
- ns1=" ns1-$rndh "
127
- ns2=" ns2-$rndh "
128
- ns3=" ns3-$rndh "
129
- ns4=" ns4-$rndh "
128
+ ns1=" "
129
+ ns2=" "
130
+ ns3=" "
131
+ ns4=" "
130
132
131
133
TEST_COUNT=0
132
134
TEST_GROUP=" "
133
135
136
+ # This function is used in the cleanup trap
137
+ # shellcheck disable=SC2317
134
138
cleanup ()
135
139
{
136
140
rm -f " $cin_disconnect " " $cout_disconnect "
137
141
rm -f " $cin " " $cout "
138
142
rm -f " $sin " " $sout "
139
143
rm -f " $capout "
140
144
141
- local netns
142
- for netns in " $ns1 " " $ns2 " " $ns3 " " $ns4 " ; do
143
- ip netns del $netns
144
- rm -f /tmp/$netns .{nstat,out}
145
- done
145
+ mptcp_lib_ns_exit " ${ns1} " " ${ns2} " " ${ns3} " " ${ns4} "
146
146
}
147
147
148
148
mptcp_lib_check_mptcp
149
149
mptcp_lib_check_kallsyms
150
-
151
- ip -Version > /dev/null 2>&1
152
- if [ $? -ne 0 ]; then
153
- echo " SKIP: Could not run test without ip tool"
154
- exit $ksft_skip
155
- fi
150
+ mptcp_lib_check_tools ip
156
151
157
152
sin=$( mktemp)
158
153
sout=$( mktemp)
@@ -163,10 +158,7 @@ cin_disconnect="$cin".disconnect
163
158
cout_disconnect=" $cout " .disconnect
164
159
trap cleanup EXIT
165
160
166
- for i in " $ns1 " " $ns2 " " $ns3 " " $ns4 " ; do
167
- ip netns add $i || exit $ksft_skip
168
- ip -net $i link set lo up
169
- done
161
+ mptcp_lib_ns_init ns1 ns2 ns3 ns4
170
162
171
163
# "$ns1" ns2 ns3 ns4
172
164
# ns1eth2 ns2eth1 ns2eth3 ns3eth2 ns3eth4 ns4eth3
@@ -225,8 +217,9 @@ set_ethtool_flags() {
225
217
local dev=" $2 "
226
218
local flags=" $3 "
227
219
228
- ip netns exec $ns ethtool -K $dev $flags 2> /dev/null
229
- [ $? -eq 0 ] && echo " INFO: set $ns dev $dev : ethtool -K $flags "
220
+ if ip netns exec $ns ethtool -K $dev $flags 2> /dev/null; then
221
+ echo " INFO: set $ns dev $dev : ethtool -K $flags "
222
+ fi
230
223
}
231
224
232
225
set_random_ethtool_flags () {
256
249
257
250
check_mptcp_disabled ()
258
251
{
259
- local disabled_ns= " ns_disabled- $rndh "
260
- ip netns add ${ disabled_ns} || exit $ksft_skip
252
+ local disabled_ns
253
+ mptcp_lib_ns_init disabled_ns
261
254
262
255
# net.mptcp.enabled should be enabled by default
263
256
if [ " $( ip netns exec ${disabled_ns} sysctl net.mptcp.enabled | awk ' { print $3 }' ) " -ne 1 ]; then
@@ -271,7 +264,7 @@ check_mptcp_disabled()
271
264
local err=0
272
265
LC_ALL=C ip netns exec ${disabled_ns} ./mptcp_connect -p 10000 -s MPTCP 127.0.0.1 < " $cin " 2>&1 | \
273
266
grep -q " ^socket: Protocol not available$" && err=1
274
- ip netns delete ${disabled_ns}
267
+ mptcp_lib_ns_exit " ${disabled_ns} "
275
268
276
269
if [ ${err} -eq 0 ]; then
277
270
echo -e " New MPTCP socket cannot be blocked via sysctl\t\t[ FAIL ]"
@@ -321,7 +314,7 @@ do_transfer()
321
314
local extra_args=" $7 "
322
315
323
316
local port
324
- port=$(( 10000 + $ TEST_COUNT))
317
+ port=$(( 10000 + TEST_COUNT))
325
318
TEST_COUNT=$(( TEST_COUNT+ 1 ))
326
319
327
320
if [ " $rcvbuf " -gt 0 ]; then
@@ -353,6 +346,7 @@ do_transfer()
353
346
354
347
if $capture ; then
355
348
local capuser
349
+ local rndh=" ${connector_ns: 4} "
356
350
if [ -z $SUDO_USER ] ; then
357
351
capuser=" "
358
352
else
@@ -378,12 +372,18 @@ do_transfer()
378
372
nstat -n
379
373
fi
380
374
381
- local stat_synrx_last_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableSYNRX" )
382
- local stat_ackrx_last_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableACKRX" )
383
- local stat_cookietx_last=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesSent" )
384
- local stat_cookierx_last=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesRecv" )
385
- local stat_csum_err_s=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtDataCsumErr" )
386
- local stat_csum_err_c=$( mptcp_lib_get_counter " ${connector_ns} " " MPTcpExtDataCsumErr" )
375
+ local stat_synrx_last_l
376
+ local stat_ackrx_last_l
377
+ local stat_cookietx_last
378
+ local stat_cookierx_last
379
+ local stat_csum_err_s
380
+ local stat_csum_err_c
381
+ stat_synrx_last_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableSYNRX" )
382
+ stat_ackrx_last_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableACKRX" )
383
+ stat_cookietx_last=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesSent" )
384
+ stat_cookierx_last=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesRecv" )
385
+ stat_csum_err_s=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtDataCsumErr" )
386
+ stat_csum_err_c=$( mptcp_lib_get_counter " ${connector_ns} " " MPTcpExtDataCsumErr" )
387
387
388
388
timeout ${timeout_test} \
389
389
ip netns exec ${listener_ns} \
@@ -446,11 +446,16 @@ do_transfer()
446
446
mptcp_lib_check_transfer $cin $sout " file received by server"
447
447
rets=$?
448
448
449
- local stat_synrx_now_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableSYNRX" )
450
- local stat_ackrx_now_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableACKRX" )
451
- local stat_cookietx_now=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesSent" )
452
- local stat_cookierx_now=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesRecv" )
453
- local stat_ooo_now=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtTCPOFOQueue" )
449
+ local stat_synrx_now_l
450
+ local stat_ackrx_now_l
451
+ local stat_cookietx_now
452
+ local stat_cookierx_now
453
+ local stat_ooo_now
454
+ stat_synrx_now_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableSYNRX" )
455
+ stat_ackrx_now_l=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtMPCapableACKRX" )
456
+ stat_cookietx_now=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesSent" )
457
+ stat_cookierx_now=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtSyncookiesRecv" )
458
+ stat_ooo_now=$( mptcp_lib_get_counter " ${listener_ns} " " TcpExtTCPOFOQueue" )
454
459
455
460
expect_synrx=$(( stat_synrx_last_l))
456
461
expect_ackrx=$(( stat_ackrx_last_l))
@@ -459,16 +464,16 @@ do_transfer()
459
464
cookies=${cookies##* =}
460
465
461
466
if [ ${cl_proto} = " MPTCP" ] && [ ${srv_proto} = " MPTCP" ]; then
462
- expect_synrx=$(( stat_synrx_last_l+ $ connect_per_transfer))
463
- expect_ackrx=$(( stat_ackrx_last_l+ $ connect_per_transfer))
467
+ expect_synrx=$(( stat_synrx_last_l+ connect_per_transfer))
468
+ expect_ackrx=$(( stat_ackrx_last_l+ connect_per_transfer))
464
469
fi
465
470
466
471
if [ ${stat_synrx_now_l} -lt ${expect_synrx} ]; then
467
472
printf " [ FAIL ] lower MPC SYN rx (%d) than expected (%d)\n" \
468
473
" ${stat_synrx_now_l} " " ${expect_synrx} " 1>&2
469
474
retc=1
470
475
fi
471
- if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} -a ${stat_ooo_now} -eq 0 ]; then
476
+ if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ] && [ ${stat_ooo_now} -eq 0 ]; then
472
477
if [ ${stat_ooo_now} -eq 0 ]; then
473
478
printf " [ FAIL ] lower MPC ACK rx (%d) than expected (%d)\n" \
474
479
" ${stat_ackrx_now_l} " " ${expect_ackrx} " 1>&2
@@ -479,18 +484,20 @@ do_transfer()
479
484
fi
480
485
481
486
if $checksum ; then
482
- local csum_err_s=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtDataCsumErr" )
483
- local csum_err_c=$( mptcp_lib_get_counter " ${connector_ns} " " MPTcpExtDataCsumErr" )
487
+ local csum_err_s
488
+ local csum_err_c
489
+ csum_err_s=$( mptcp_lib_get_counter " ${listener_ns} " " MPTcpExtDataCsumErr" )
490
+ csum_err_c=$( mptcp_lib_get_counter " ${connector_ns} " " MPTcpExtDataCsumErr" )
484
491
485
492
local csum_err_s_nr=$(( csum_err_s - stat_csum_err_s))
486
493
if [ $csum_err_s_nr -gt 0 ]; then
487
- printf " [ FAIL ]\nserver got $csum_err_s_nr data checksum error[s]"
494
+ printf " [ FAIL ]\nserver got %d data checksum error[s]" ${csum_err_s_nr}
488
495
rets=1
489
496
fi
490
497
491
498
local csum_err_c_nr=$(( csum_err_c - stat_csum_err_c))
492
499
if [ $csum_err_c_nr -gt 0 ]; then
493
- printf " [ FAIL ]\nclient got $csum_err_c_nr data checksum error[s]"
500
+ printf " [ FAIL ]\nclient got %d data checksum error[s]" ${csum_err_c_nr}
494
501
retc=1
495
502
fi
496
503
fi
@@ -658,7 +665,7 @@ run_test_transparent()
658
665
return
659
666
fi
660
667
661
- ip netns exec " $listener_ns " nft -f /dev/stdin << "EOF "
668
+ if ! ip netns exec " $listener_ns " nft -f /dev/stdin << "EOF "
662
669
flush ruleset
663
670
table inet mangle {
664
671
chain divert {
@@ -669,7 +676,7 @@ table inet mangle {
669
676
}
670
677
}
671
678
EOF
672
- if [ $? -ne 0 ] ; then
679
+ then
673
680
echo " SKIP: $msg , could not load nft ruleset"
674
681
mptcp_lib_fail_if_expected_feature " nft rules"
675
682
mptcp_lib_result_skip " ${TEST_GROUP} "
@@ -684,17 +691,15 @@ EOF
684
691
local_addr=" 0.0.0.0"
685
692
fi
686
693
687
- ip -net " $listener_ns " $r6flag rule add fwmark 1 lookup 100
688
- if [ $? -ne 0 ]; then
694
+ if ! ip -net " $listener_ns " $r6flag rule add fwmark 1 lookup 100; then
689
695
ip netns exec " $listener_ns " nft flush ruleset
690
696
echo " SKIP: $msg , ip $r6flag rule failed"
691
697
mptcp_lib_fail_if_expected_feature " ip rule"
692
698
mptcp_lib_result_skip " ${TEST_GROUP} "
693
699
return
694
700
fi
695
701
696
- ip -net " $listener_ns " route add local $local_addr /0 dev lo table 100
697
- if [ $? -ne 0 ]; then
702
+ if ! ip -net " $listener_ns " route add local $local_addr /0 dev lo table 100; then
698
703
ip netns exec " $listener_ns " nft flush ruleset
699
704
ip -net " $listener_ns " $r6flag rule del fwmark 1 lookup 100
700
705
echo " SKIP: $msg , ip route add local $local_addr failed"
@@ -857,7 +862,7 @@ stop_if_error "Could not even run ping tests"
857
862
echo -n " INFO: Using loss of $tc_loss "
858
863
test " $tc_delay " -gt 0 && echo -n " delay $tc_delay ms "
859
864
860
- reorder_delay=$(( $ tc_delay / 4 ))
865
+ reorder_delay=$(( tc_delay / 4 ))
861
866
862
867
if [ -z " ${tc_reorder} " ]; then
863
868
reorder1=$(( RANDOM% 10 ))
0 commit comments