@@ -589,6 +589,26 @@ wait_rm_addr()
589
589
done
590
590
}
591
591
592
+ rm_sf_count ()
593
+ {
594
+ get_counter " ${1} " " MPTcpExtRmSubflow"
595
+ }
596
+
597
+ # $1: ns, $2: old rm_sf counter in $ns
598
+ wait_rm_sf ()
599
+ {
600
+ local ns=" ${1} "
601
+ local old_cnt=" ${2} "
602
+ local cnt
603
+
604
+ local i
605
+ for i in $( seq 10) ; do
606
+ cnt=$( rm_sf_count ${ns} )
607
+ [ " $cnt " = " ${old_cnt} " ] || break
608
+ sleep 0.1
609
+ done
610
+ }
611
+
592
612
wait_mpj ()
593
613
{
594
614
local ns=" ${1} "
@@ -813,7 +833,6 @@ do_transfer()
813
833
814
834
local port=$(( 10000 + TEST_COUNT - 1 ))
815
835
local cappid
816
- local userspace_pm=0
817
836
818
837
:> " $cout "
819
838
:> " $sout "
@@ -850,11 +869,6 @@ do_transfer()
850
869
extra_args=" -r ${speed: 6} "
851
870
fi
852
871
853
- if [[ " ${addr_nr_ns1} " = " userspace_" * ]]; then
854
- userspace_pm=1
855
- addr_nr_ns1=${addr_nr_ns1: 10}
856
- fi
857
-
858
872
local flags=" subflow"
859
873
local extra_cl_args=" "
860
874
local extra_srv_args=" "
@@ -882,9 +896,6 @@ do_transfer()
882
896
return 1
883
897
fi
884
898
addr_nr_ns2=0
885
- elif [[ " ${addr_nr_ns2} " = " userspace_" * ]]; then
886
- userspace_pm=1
887
- addr_nr_ns2=${addr_nr_ns2: 10}
888
899
elif [[ " ${addr_nr_ns2} " = " fullmesh_" * ]]; then
889
900
flags=" ${flags} ,fullmesh"
890
901
addr_nr_ns2=${addr_nr_ns2: 9}
@@ -938,32 +949,14 @@ do_transfer()
938
949
local counter=2
939
950
local add_nr_ns1=${addr_nr_ns1}
940
951
local id=10
941
- local tk
942
952
while [ $add_nr_ns1 -gt 0 ]; do
943
953
local addr
944
954
if is_v6 " ${connect_addr} " ; then
945
955
addr=" dead:beef:$counter ::1"
946
956
else
947
957
addr=" 10.0.$counter .1"
948
958
fi
949
- if [ $userspace_pm -eq 0 ]; then
950
- pm_nl_add_endpoint $ns1 $addr flags signal
951
- else
952
- tk=$( grep " type:1," " $evts_ns1 " |
953
- sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' )
954
- ip netns exec ${listener_ns} ./pm_nl_ctl ann $addr token $tk id $id
955
- sleep 1
956
- sp=$( grep " type:10" " $evts_ns1 " |
957
- sed -n ' s/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' )
958
- da=$( grep " type:10" " $evts_ns1 " |
959
- sed -n ' s/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' )
960
- dp=$( grep " type:10" " $evts_ns1 " |
961
- sed -n ' s/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' )
962
- ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
963
- ip netns exec ${listener_ns} ./pm_nl_ctl dsf lip " ::ffff:$addr " \
964
- lport $sp rip $da rport $dp token $tk
965
- fi
966
-
959
+ pm_nl_add_endpoint $ns1 $addr flags signal
967
960
counter=$(( counter + 1 ))
968
961
add_nr_ns1=$(( add_nr_ns1 - 1 ))
969
962
id=$(( id + 1 ))
@@ -1008,29 +1001,14 @@ do_transfer()
1008
1001
local add_nr_ns2=${addr_nr_ns2}
1009
1002
local counter=3
1010
1003
local id=20
1011
- local tk da dp sp
1012
1004
while [ $add_nr_ns2 -gt 0 ]; do
1013
1005
local addr
1014
1006
if is_v6 " ${connect_addr} " ; then
1015
1007
addr=" dead:beef:$counter ::2"
1016
1008
else
1017
1009
addr=" 10.0.$counter .2"
1018
1010
fi
1019
- if [ $userspace_pm -eq 0 ]; then
1020
- pm_nl_add_endpoint $ns2 $addr flags $flags
1021
- else
1022
- tk=$( sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns2 " )
1023
- da=$( sed -n ' s/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' " $evts_ns2 " )
1024
- dp=$( sed -n ' s/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns2 " )
1025
- ip netns exec ${connector_ns} ./pm_nl_ctl csf lip $addr lid $id \
1026
- rip $da rport $dp token $tk
1027
- sleep 1
1028
- sp=$( grep " type:10" " $evts_ns2 " |
1029
- sed -n ' s/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' )
1030
- ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
1031
- ip netns exec ${connector_ns} ./pm_nl_ctl dsf lip $addr lport $sp \
1032
- rip $da rport $dp token $tk
1033
- fi
1011
+ pm_nl_add_endpoint $ns2 $addr flags $flags
1034
1012
counter=$(( counter + 1 ))
1035
1013
add_nr_ns2=$(( add_nr_ns2 - 1 ))
1036
1014
id=$(( id + 1 ))
@@ -3205,6 +3183,71 @@ fail_tests()
3205
3183
fi
3206
3184
}
3207
3185
3186
+ userspace_pm_add_addr ()
3187
+ {
3188
+ local addr=$1
3189
+ local id=$2
3190
+ local tk
3191
+
3192
+ tk=$( grep " type:1," " $evts_ns1 " |
3193
+ sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' )
3194
+ ip netns exec $ns1 ./pm_nl_ctl ann $addr token $tk id $id
3195
+ sleep 1
3196
+ }
3197
+
3198
+ userspace_pm_rm_sf_addr_ns1 ()
3199
+ {
3200
+ local addr=$1
3201
+ local id=$2
3202
+ local tk sp da dp
3203
+
3204
+ tk=$( grep " type:1," " $evts_ns1 " |
3205
+ sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' )
3206
+ sp=$( grep " type:10" " $evts_ns1 " |
3207
+ sed -n ' s/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' )
3208
+ da=$( grep " type:10" " $evts_ns1 " |
3209
+ sed -n ' s/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' )
3210
+ dp=$( grep " type:10" " $evts_ns1 " |
3211
+ sed -n ' s/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' )
3212
+ ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id
3213
+ ip netns exec $ns1 ./pm_nl_ctl dsf lip " ::ffff:$addr " \
3214
+ lport $sp rip $da rport $dp token $tk
3215
+ wait_rm_addr $ns1 1
3216
+ wait_rm_sf $ns1 1
3217
+ }
3218
+
3219
+ userspace_pm_add_sf ()
3220
+ {
3221
+ local addr=$1
3222
+ local id=$2
3223
+ local tk da dp
3224
+
3225
+ tk=$( sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns2 " )
3226
+ da=$( sed -n ' s/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' " $evts_ns2 " )
3227
+ dp=$( sed -n ' s/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns2 " )
3228
+ ip netns exec $ns2 ./pm_nl_ctl csf lip $addr lid $id \
3229
+ rip $da rport $dp token $tk
3230
+ sleep 1
3231
+ }
3232
+
3233
+ userspace_pm_rm_sf_addr_ns2 ()
3234
+ {
3235
+ local addr=$1
3236
+ local id=$2
3237
+ local tk da dp sp
3238
+
3239
+ tk=$( sed -n ' s/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns2 " )
3240
+ da=$( sed -n ' s/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' " $evts_ns2 " )
3241
+ dp=$( sed -n ' s/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' " $evts_ns2 " )
3242
+ sp=$( grep " type:10" " $evts_ns2 " |
3243
+ sed -n ' s/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' )
3244
+ ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id
3245
+ ip netns exec $ns2 ./pm_nl_ctl dsf lip $addr lport $sp \
3246
+ rip $da rport $dp token $tk
3247
+ wait_rm_addr $ns2 1
3248
+ wait_rm_sf $ns2 1
3249
+ }
3250
+
3208
3251
userspace_tests ()
3209
3252
{
3210
3253
# userspace pm type prevents add_addr
@@ -3283,22 +3326,32 @@ userspace_tests()
3283
3326
continue_if mptcp_lib_has_file ' /proc/sys/net/mptcp/pm_type' ; then
3284
3327
set_userspace_pm $ns1
3285
3328
pm_nl_set_limits $ns2 1 1
3286
- run_tests $ns1 $ns2 10.0.1.1 0 userspace_1 0 slow
3329
+ run_tests $ns1 $ns2 10.0.1.1 0 0 0 speed_10 &
3330
+ local tests_pid=$!
3331
+ wait_mpj $ns1
3332
+ userspace_pm_add_addr 10.0.2.1 10
3287
3333
chk_join_nr 1 1 1
3288
3334
chk_add_nr 1 1
3335
+ userspace_pm_rm_sf_addr_ns1 10.0.2.1 10
3289
3336
chk_rm_nr 1 1 invert
3290
3337
kill_events_pids
3338
+ wait $tests_pid
3291
3339
fi
3292
3340
3293
3341
# userspace pm create destroy subflow
3294
3342
if reset_with_events " userspace pm create destroy subflow" &&
3295
3343
continue_if mptcp_lib_has_file ' /proc/sys/net/mptcp/pm_type' ; then
3296
3344
set_userspace_pm $ns2
3297
3345
pm_nl_set_limits $ns1 0 1
3298
- run_tests $ns1 $ns2 10.0.1.1 0 0 userspace_1 slow
3346
+ run_tests $ns1 $ns2 10.0.1.1 0 0 0 speed_10 &
3347
+ local tests_pid=$!
3348
+ wait_mpj $ns2
3349
+ userspace_pm_add_sf 10.0.3.2 20
3299
3350
chk_join_nr 1 1 1
3351
+ userspace_pm_rm_sf_addr_ns2 10.0.3.2 20
3300
3352
chk_rm_nr 1 1
3301
3353
kill_events_pids
3354
+ wait $tests_pid
3302
3355
fi
3303
3356
}
3304
3357
0 commit comments