@@ -589,6 +589,26 @@ wait_rm_addr()
589589 done
590590}
591591
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+
592612wait_mpj ()
593613{
594614 local ns=" ${1} "
@@ -813,7 +833,6 @@ do_transfer()
813833
814834 local port=$(( 10000 + TEST_COUNT - 1 ))
815835 local cappid
816- local userspace_pm=0
817836
818837 :> " $cout "
819838 :> " $sout "
@@ -850,11 +869,6 @@ do_transfer()
850869 extra_args=" -r ${speed: 6} "
851870 fi
852871
853- if [[ " ${addr_nr_ns1} " = " userspace_" * ]]; then
854- userspace_pm=1
855- addr_nr_ns1=${addr_nr_ns1: 10}
856- fi
857-
858872 local flags=" subflow"
859873 local extra_cl_args=" "
860874 local extra_srv_args=" "
@@ -882,9 +896,6 @@ do_transfer()
882896 return 1
883897 fi
884898 addr_nr_ns2=0
885- elif [[ " ${addr_nr_ns2} " = " userspace_" * ]]; then
886- userspace_pm=1
887- addr_nr_ns2=${addr_nr_ns2: 10}
888899 elif [[ " ${addr_nr_ns2} " = " fullmesh_" * ]]; then
889900 flags=" ${flags} ,fullmesh"
890901 addr_nr_ns2=${addr_nr_ns2: 9}
@@ -938,32 +949,14 @@ do_transfer()
938949 local counter=2
939950 local add_nr_ns1=${addr_nr_ns1}
940951 local id=10
941- local tk
942952 while [ $add_nr_ns1 -gt 0 ]; do
943953 local addr
944954 if is_v6 " ${connect_addr} " ; then
945955 addr=" dead:beef:$counter ::1"
946956 else
947957 addr=" 10.0.$counter .1"
948958 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
967960 counter=$(( counter + 1 ))
968961 add_nr_ns1=$(( add_nr_ns1 - 1 ))
969962 id=$(( id + 1 ))
@@ -1008,29 +1001,14 @@ do_transfer()
10081001 local add_nr_ns2=${addr_nr_ns2}
10091002 local counter=3
10101003 local id=20
1011- local tk da dp sp
10121004 while [ $add_nr_ns2 -gt 0 ]; do
10131005 local addr
10141006 if is_v6 " ${connect_addr} " ; then
10151007 addr=" dead:beef:$counter ::2"
10161008 else
10171009 addr=" 10.0.$counter .2"
10181010 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
10341012 counter=$(( counter + 1 ))
10351013 add_nr_ns2=$(( add_nr_ns2 - 1 ))
10361014 id=$(( id + 1 ))
@@ -3205,6 +3183,71 @@ fail_tests()
32053183 fi
32063184}
32073185
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+
32083251userspace_tests ()
32093252{
32103253 # userspace pm type prevents add_addr
@@ -3283,22 +3326,32 @@ userspace_tests()
32833326 continue_if mptcp_lib_has_file ' /proc/sys/net/mptcp/pm_type' ; then
32843327 set_userspace_pm $ns1
32853328 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
32873333 chk_join_nr 1 1 1
32883334 chk_add_nr 1 1
3335+ userspace_pm_rm_sf_addr_ns1 10.0.2.1 10
32893336 chk_rm_nr 1 1 invert
32903337 kill_events_pids
3338+ wait $tests_pid
32913339 fi
32923340
32933341 # userspace pm create destroy subflow
32943342 if reset_with_events " userspace pm create destroy subflow" &&
32953343 continue_if mptcp_lib_has_file ' /proc/sys/net/mptcp/pm_type' ; then
32963344 set_userspace_pm $ns2
32973345 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
32993350 chk_join_nr 1 1 1
3351+ userspace_pm_rm_sf_addr_ns2 10.0.3.2 20
33003352 chk_rm_nr 1 1
33013353 kill_events_pids
3354+ wait $tests_pid
33023355 fi
33033356}
33043357
0 commit comments