Lines Matching +full:1 +full:- +full:2

2 # SPDX-License-Identifier: GPL-2.0
31 timeout_test=$((timeout_poll * 2 + 1))
44 last_test_ignored=1
46 declare -A all_tests
47 declare -a only_tests_ids
48 declare -a only_tests_names
49 declare -A failed_tests
80 21 0 1 48,
90 rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
92 ns1="ns1-$rndh"
93 ns2="ns2-$rndh"
98 ip -net $netns link set lo up
99 ip netns exec $netns sysctl -q net.mptcp.enabled=1
100 ip netns exec $netns sysctl -q net.mptcp.pm_type=0 2>/dev/null || true
101 ip netns exec $netns sysctl -q net.ipv4.conf.all.rp_filter=0
102 ip netns exec $netns sysctl -q net.ipv4.conf.default.rp_filter=0
103 if [ $checksum -eq 1 ]; then
104 ip netns exec $netns sysctl -q net.mptcp.checksum_enabled=1
118 for i in $(seq 1 4); do
120 ip -net "$ns1" addr add 10.0.$i.1/24 dev ns1eth$i
121 ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad
122 ip -net "$ns1" link set ns1eth$i up
124 ip -net "$ns2" addr add 10.0.$i.2/24 dev ns2eth$i
125 ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad
126 ip -net "$ns2" link set ns2eth$i up
129 ip -net "$ns2" route add default via 10.0.$i.1 dev ns2eth$i metric 10$i
130 ip -net "$ns2" route add default via dead:beef:$i::1 dev ns2eth$i metric 10$i
137 for i in $(seq 1 4); do
138 tc -n $ns1 qdisc add dev ns1eth$i root netem rate 20mbit delay 1
139 tc -n $ns2 qdisc add dev ns2eth$i root netem rate 20mbit delay 1
145 rm -f "$capout"
150 rm -f /tmp/$netns.{nstat,out}
159 if ! ip -Version &> /dev/null; then
164 if ! ss -h | grep -q MPTCP; then
170 if iptables-legacy -V &> /dev/null; then
171 iptables="iptables-legacy"
172 ip6tables="ip6tables-legacy"
173 elif ! iptables -V &> /dev/null; then
176 elif ! ip6tables -V &> /dev/null; then
183 init=1
197 make_file "$cin" "client" 1 >/dev/null
198 make_file "$sin" "server" 1 >/dev/null
203 rm -f "$cin" "$cout" "$sinfail"
204 rm -f "$sin" "$sout" "$cinsent" "$cinfail"
205 rm -f "$tmpfile"
206 rm -rf $evts_ns1 $evts_ns2
217 printf "%-${nr_blank}s%-36s" " " "${*}"
223 [ -z "${1}" ] && return
230 mptcp_lib_print_ok "[ ok ]${1:+ ${*}}"
235 mptcp_lib_print_err "[fail]${1:+ ${*}}"
240 mptcp_lib_print_warn "[skip]${1:+ ${*}}"
243 # [ $1: fail msg ]
246 local msg="${1:-"Feature not supported"}"
253 last_test_skipped=1
261 return 1
267 if [ "${#only_tests_ids[@]}" -eq 0 ] && [ "${#only_tests_names[@]}" -eq 0 ]; then
268 return 1
273 if [ "${TEST_COUNT}" -eq "${i}" ]; then
274 return 1
279 return 1
288 if [ ${last_test_failed} -eq 1 ]; then
290 elif [ ${last_test_skipped} -eq 1 ]; then
292 elif [ ${last_test_ignored} -ne 1 ]; then
301 # $1: test name
306 TEST_NAME="${1}"
308 TEST_COUNT=$((TEST_COUNT+1))
311 last_test_ignored=1
312 return 1
317 if [ "${init}" != "1" ]; then
328 # $1: test name ; $2: counter to check
331 reset "${1}" || return 1
333 local counter="${2}"
335 if ! nstat -asz "${counter}" | grep -wq "${counter}"; then
337 return 1
341 # $1: test name
344 reset "${1}" || return 1
348 ip netns exec $netns sysctl -q net.ipv4.tcp_syncookies=2
352 # $1: test name
355 local ip="${2:-4}"
358 reset "${1}" || return 1
361 if [ $ip -eq 6 ]; then
365 ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
367 if ! ip netns exec $ns2 $tables -A OUTPUT -p tcp \
368 -m tcp --tcp-option 30 \
369 -m bpf --bytecode \
371 -j DROP; then
373 return 1
377 # $1: test name
380 local ns1_enable=$1
381 local ns2_enable=$2
383 reset "checksum test ${1} ${2}" || return 1
385 ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=$ns1_enable
386 ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=$ns2_enable
388 validate_checksum=1
393 local ns1_enable=$2
396 reset "${1}" || return 1
398 ip netns exec $ns1 sysctl -q net.mptcp.allow_join_initial_addr_port=$ns1_enable
399 ip netns exec $ns2 sysctl -q net.mptcp.allow_join_initial_addr_port=$ns2_enable
404 # This rule inverts a 8-bit word at byte offset 148 for the 2nd TCP ACK packets
420 check_invert=1
421 validate_checksum=1
422 local i="$1"
423 local ip="${2:-4}"
427 if [ $ip -eq 6 ]; then
432 -t mangle \
433 -A OUTPUT \
434 -o ns2eth$i \
435 -p tcp \
436 -m length --length 150:9999 \
437 -m statistic --mode nth --packet 1 --every 99999 \
438 -j MARK --set-mark 42 || return ${ksft_skip}
440 tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${ksft_skip}
441 tc -n $ns2 filter add dev ns2eth$i egress \
451 reset_check_counter "${1}" "MPTcpExtInfiniteMapTx" || return 1
454 ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=1
455 ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=1
460 if [ ${rc} -eq ${ksft_skip} ]; then
462 return 1
468 reset "${1}" || return 1
472 ip netns exec $ns1 ./pm_nl_ctl events >> "$evts_ns1" 2>&1 &
474 ip netns exec $ns2 ./pm_nl_ctl events >> "$evts_ns2" 2>&1 &
480 reset "${1}" || return 1
483 local ns="${!1}"
484 local src="${2}"
488 -A INPUT \
489 -s "${src}" \
490 -p tcp \
491 -j "${target}"; then
493 return 1
497 # $1: err msg
500 ret=1
505 if [ ${last_test_failed} -eq 0 ]; then
508 last_test_failed=1
518 done | sort -n
523 local in=$1
524 local out=$2
530 if [ -n "$bytes" ]; then
533 out_size=$(wc -c $out | awk '{print $1}')
534 if [ $out_size -ne $bytes ]; then
536 return 1
539 # note: BusyBox's "cmp" command doesn't support --bytes
541 head --bytes="$bytes" "$in" > "$tmpfile"
543 head --bytes="$bytes" "$out" > "$tmpfile"
547 cmp -l "$in" "$out" | while read -r i a b; do
549 if [ $check_invert -eq 0 ] || [ $sum -ne $((0xff)) ]; then
554 return 1
565 local listener_ns="$1"
566 local connector_ns="$2"
569 if ! ip netns exec ${connector_ns} ping -q -c 1 $connect_addr >/dev/null; then
570 fail_test "$listener_ns -> $connect_addr connectivity"
576 local ns="$1"
578 if [ -z "$FAILING_LINKS" ]; then
580 FAILING_LINKS=$((l+1))
586 ip -net "$ns" link set "$veth" down
592 mptcp_lib_get_counter "${1}" "MPTcpExtRmAddr"
595 # $1: ns, $2: old rm_addr counter in $ns
598 local ns="${1}"
599 local old_cnt="${2}"
612 mptcp_lib_get_counter "${1}" "MPTcpExtRmSubflow"
615 # $1: ns, $2: old rm_sf counter in $ns
618 local ns="${1}"
619 local old_cnt="${2}"
632 local ns="${1}"
653 local ns=$1
654 local addrs=$2
657 if [ $ip_mptcp -eq 1 ]; then
658 ip -n $ns mptcp limits set add_addr_accepted $addrs subflows $subflows
666 local ns=$1
667 local addr=$2
672 local nr=2
679 [ -n "$_flags" ]; flags="flags $_flags"
683 [ -n "$_dev" ]; dev="dev $_dev"
687 [ -n "$_id" ]; id="id $_id"
691 [ -n "$_port" ]; port="port $_port"
694 nr=$((nr + 1))
697 if [ $ip_mptcp -eq 1 ]; then
698 ip -n $ns mptcp endpoint add $addr ${_flags//","/" "} $dev $id $port
706 local ns=$1
707 local id=$2
710 if [ $ip_mptcp -eq 1 ]; then
711 [ $id -ne 0 ] && addr=''
712 ip -n $ns mptcp endpoint delete id $id $addr
720 local ns=$1
722 if [ $ip_mptcp -eq 1 ]; then
723 ip -n $ns mptcp endpoint flush
731 local ns=$1
733 if [ $ip_mptcp -eq 1 ]; then
734 ip -n $ns mptcp endpoint show
742 local ns=$1
743 local id=$2
746 if [ $ip_mptcp -eq 1 ]; then
747 ip -n $ns mptcp endpoint change id $id ${flags//","/" "}
756 local msg="$1"
757 local ns=$2
770 while [ -n "$1" ]; do
771 if [ $1 = "flags" ]; then
772 _flags=$2
773 [ -n "$_flags" ]; flags="flags $_flags"
775 elif [ $1 = "dev" ]; then
776 [ -n "$2" ]; dev="dev $1"
778 elif [ $1 = "id" ]; then
779 _id=$2
780 [ -n "$_id" ]; id="id $_id"
782 elif [ $1 = "port" ]; then
783 _port=$2
784 [ -n "$_port" ]; port=" port $_port"
791 if [ -z "$id" ]; then
792 test_fail "bad test - missing endpoint id"
796 if [ $ip_mptcp -eq 1 ]; then
798 line=$(ip -n $ns mptcp endpoint show $id)
801 [ -n "$addr" ] && expected_line="$addr"
803 [ -n "$_flags" ] && expected_line="$expected_line ${_flags//","/" "}"
804 [ -n "$dev" ] && expected_line="$expected_line $dev"
805 [ -n "$port" ] && expected_line="$expected_line $port"
810 [ -n "$flags" ] && expected_line="$expected_line $flags"
811 [ -n "$dev" ] && expected_line="$expected_line $dev"
812 [ -n "$addr" ] && expected_line="$expected_line $addr"
813 [ -n "$_port" ] && expected_line="$expected_line $_port"
824 local listener_ns="$1"
825 local connector_ns="$2"
828 local addr_nr_ns1=${addr_nr_ns1:-0}
829 local addr_nr_ns2=${addr_nr_ns2:-0}
830 local sflags=${sflags:-""}
831 local fullmesh=${fullmesh:-""}
834 if [ -n "${fullmesh}" ]; then
842 sleep 1
845 if [ $addr_nr_ns1 -gt 0 ]; then
846 local counter=2
849 while [ $add_nr_ns1 -gt 0 ]; do
852 addr="dead:beef:$counter::1"
854 addr="10.0.$counter.1"
857 counter=$((counter + 1))
858 add_nr_ns1=$((add_nr_ns1 - 1))
859 id=$((id + 1))
861 elif [ $addr_nr_ns1 -lt 0 ]; then
862 local rm_nr_ns1=$((-addr_nr_ns1))
863 if [ $rm_nr_ns1 -lt 8 ]; then
866 pm_nl_show_endpoints ${listener_ns} | while read -r line; do
874 if [ $counter -eq $rm_nr_ns1 ]; then
877 id=${arr[$nr+1]}
881 counter=$((counter + 1))
883 nr=$((nr + 1))
886 elif [ $rm_nr_ns1 -eq 8 ]; then
888 elif [ $rm_nr_ns1 -eq 9 ]; then
895 [ $addr_nr_ns1 -gt 0 ] && [ $addr_nr_ns2 -lt 0 ] && sleep 1
897 if [ $addr_nr_ns2 -gt 0 ]; then
901 while [ $add_nr_ns2 -gt 0 ]; do
904 addr="dead:beef:$counter::2"
906 addr="10.0.$counter.2"
909 counter=$((counter + 1))
910 add_nr_ns2=$((add_nr_ns2 - 1))
911 id=$((id + 1))
913 elif [ $addr_nr_ns2 -lt 0 ]; then
914 local rm_nr_ns2=$((-addr_nr_ns2))
915 if [ $rm_nr_ns2 -lt 8 ]; then
918 pm_nl_show_endpoints ${connector_ns} | while read -r line; do
926 if [ $counter -eq $rm_nr_ns2 ]; then
932 id=${arr[$nr+1]}
936 counter=$((counter + 1))
938 nr=$((nr + 1))
941 elif [ $rm_nr_ns2 -eq 8 ]; then
943 elif [ $rm_nr_ns2 -eq 9 ]; then
946 addr="dead:beef:1::2"
954 if [ -n "${sflags}" ]; then
955 sleep 1
960 pm_nl_show_endpoints $netns | while read -r line; do
969 id=${arr[$nr+1]}
971 nr=$((nr + 1))
981 local ns=$1
982 local cestab=$2
987 if [ -z "$count" ]; then
996 # $1 namespace 1, $2 namespace 2
999 if [ -n "${cestab_ns1}" ]; then
1000 chk_cestab_nr ${1} ${cestab_ns1}
1002 if [ -n "${cestab_ns2}" ]; then
1003 chk_cestab_nr ${2} ${cestab_ns2}
1009 local listener_ns="$1"
1010 local connector_ns="$2"
1015 local port=$((10000 + TEST_COUNT - 1))
1017 local FAILING_LINKS=${FAILING_LINKS:-""}
1018 local fastclose=${fastclose:-""}
1019 local speed=${speed:-"fast"}
1025 if [ $capture -eq 1 ]; then
1027 if [ -z $SUDO_USER ] ; then
1030 capuser="-Z $SUDO_USER"
1033 capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}")
1036 …ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&
1039 sleep 1
1043 nstat -n
1045 nstat -n
1049 extra_args="-j"
1051 extra_args="-r 50"
1052 elif [ $speed -gt 0 ]; then
1053 extra_args="-r ${speed}"
1059 if [ -n "${fastclose}" ]; then
1060 if [ ${test_linkfail} -le 1 ]; then
1062 return 1
1070 extra_cl_args="-f ${test_linkfail}"
1071 extra_srv_args="-f -1"
1073 extra_srv_args="-f ${test_linkfail}"
1074 extra_cl_args="-f -1"
1077 return 1
1082 if [ "$test_linkfail" -gt 1 ];then
1085 ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
1090 ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
1098 if [ "$test_linkfail" -eq 0 ];then
1101 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
1103 elif [ "$test_linkfail" -eq 1 ] || [ "$test_linkfail" -eq 2 ];then
1104 ( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" ) | \
1108 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
1114 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
1127 if [ $capture -eq 1 ]; then
1128 sleep 1
1137 if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then
1139 echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2
1140 ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port"
1142 echo -e "\nnetns ${connector_ns} socket stat for ${port}:" 1>&2
1143 ip netns exec ${connector_ns} ss -Menita 1>&2 -o "dport = :$port"
1147 return 1
1150 if [ "$test_linkfail" -gt 1 ];then
1156 if [ "$test_linkfail" -eq 0 ];then
1163 if [ $retc -eq 0 ] && [ $rets -eq 0 ];then
1169 return 1
1174 local name=$1
1175 local who=$2
1185 local listener_ns="$1"
1186 local connector_ns="$2"
1190 local test_linkfail=${test_linkfail:-0}
1192 # The values above 2 are reused to make test files
1194 if [ "$test_linkfail" -gt 2 ]; then
1197 if [ -z "$cinfail" ]; then
1203 elif [ "$test_linkfail" -ne 0 ] && [ -z "$cinfail" ]; then
1207 size=$((RANDOM%2))
1208 size=$((size+1))
1216 if [ "$test_linkfail" -gt 2 ]; then
1219 if [ -z "$sinfail" ]; then
1223 elif [ "$test_linkfail" -eq 2 ] && [ -z "$sinfail" ]; then
1225 size=$((size+1))
1238 ip netns exec $ns1 nstat -as | grep Tcp
1240 ip netns exec $ns2 nstat -as | grep Tcp
1245 local csum_ns1=${1:-0}
1246 local csum_ns2=${2:-0}
1253 allow_multi_errors_ns1=1
1254 csum_ns1=${csum_ns1:1}
1257 allow_multi_errors_ns2=1
1258 csum_ns2=${csum_ns2:1}
1266 if [ -z "$count" ]; then
1268 elif { [ "$count" != $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 0 ]; } ||
1269 { [ "$count" -lt $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 1 ]; }; then
1279 if [ -z "$count" ]; then
1281 elif { [ "$count" != $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 0 ]; } ||
1282 { [ "$count" -lt $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 1 ]; }; then
1293 local fail_tx=$1
1294 local fail_rx=$2
1295 local ns_invert=${3:-""}
1309 if [[ "${fail_tx}" = "-"* ]]; then
1310 allow_tx_lost=1
1311 fail_tx=${fail_tx:1}
1313 if [[ "${fail_rx}" = "-"* ]]; then
1314 allow_rx_lost=1
1315 fail_rx=${fail_rx:1}
1323 if [ -z "$count" ]; then
1325 elif { [ "$count" != "$fail_tx" ] && [ $allow_tx_lost -eq 0 ]; } ||
1326 { [ "$count" -gt "$fail_tx" ] && [ $allow_tx_lost -eq 1 ]; }; then
1337 if [ -z "$count" ]; then
1339 elif { [ "$count" != "$fail_rx" ] && [ $allow_rx_lost -eq 0 ]; } ||
1340 { [ "$count" -gt "$fail_rx" ] && [ $allow_rx_lost -eq 1 ]; }; then
1351 local fclose_tx=$1
1352 local fclose_rx=$2
1367 if [ -z "$count" ]; then
1378 if [ -z "$count" ]; then
1392 local rst_tx=$1
1393 local rst_rx=$2
1394 local ns_invert=${3:-""}
1408 if [ -z "$count" ]; then
1411 elif { [ $rst_tx -ne 0 ] && [ $count -lt $rst_tx ]; } ||
1412 { [ $rst_tx -eq 0 ] && [ $count -ne 0 ]; }; then
1420 if [ -z "$count" ]; then
1423 elif { [ $rst_rx -ne 0 ] && [ $count -lt $rst_rx ]; } ||
1424 { [ $rst_rx -eq 0 ] && [ $count -ne 0 ]; }; then
1435 local infi_tx=$1
1436 local infi_rx=$2
1441 if [ -z "$count" ]; then
1451 if [ -z "$count" ]; then
1462 local syn_nr=$1
1463 local syn_ack_nr=$2
1465 local csum_ns1=${4:-0}
1466 local csum_ns2=${5:-0}
1467 local fail_nr=${6:-0}
1468 local rst_nr=${7:-0}
1469 local infi_nr=${8:-0}
1470 local corrupted_pkts=${9:-0}
1474 if [ "${corrupted_pkts}" -gt 0 ]; then
1480 if [ -z "$count" ]; then
1489 with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies)
1491 if [ -z "$count" ]; then
1497 if [ "$with_cookie" = 2 ] && [ "$count" -gt "$syn_ack_nr" ] && [ "$count" -le "$syn_nr" ]; then
1508 if [ -z "$count" ]; then
1515 if [ $validate_checksum -eq 1 ]; then
1525 # - as these tests do - we can have a quite high number of
1527 # sleep duration/ MPTCP-level RTX interval.
1530 local ns=$1
1531 local stale_min=$2
1542 if [ -z "$stale_nr" ] || [ -z "$recover_nr" ]; then
1544 elif [ $stale_nr -lt $stale_min ] ||
1545 { [ $stale_max -gt 0 ] && [ $stale_nr -gt $stale_max ]; } ||
1546 [ $((stale_nr - recover_nr)) -ne $stale_delta ]; then
1549 " stale-recover delta $stale_delta"
1550 dump_stats=1
1555 if [ "${dump_stats}" = 1 ]; then
1557 ip netns exec $ns ip -s link show
1558 ip netns exec $ns nstat -as | grep MPTcp
1564 local add_nr=$1
1565 local echo_nr=$2
1566 local port_nr=${3:-0}
1567 local syn_nr=${4:-$port_nr}
1568 local syn_ack_nr=${5:-$port_nr}
1569 local ack_nr=${6:-$port_nr}
1570 local mis_syn_nr=${7:-0}
1571 local mis_ack_nr=${8:-0}
1575 timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
1579 if [ -z "$count" ]; then
1583 elif [ "$count" != "$add_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_nr" ]; }; then
1591 if [ -z "$count" ]; then
1599 if [ $port_nr -gt 0 ]; then
1602 if [ -z "$count" ]; then
1605 fail_test "got $count ADD_ADDR[s] with a port-number expected $port_nr"
1612 if [ -z "$count" ]; then
1616 port-number expected $syn_nr"
1623 if [ -z "$count" ]; then
1627 port-number expected $syn_ack_nr"
1634 if [ -z "$count" ]; then
1638 port-number expected $ack_nr"
1645 if [ -z "$count" ]; then
1649 port-number expected $mis_syn_nr"
1656 if [ -z "$count" ]; then
1660 port-number expected $mis_ack_nr"
1669 local add_tx_nr=$1
1670 local echo_tx_nr=$2
1674 timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
1678 if [ -z "$count" ]; then
1682 …elif [ "$count" != "$add_tx_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_tx_nr" ]; }; t…
1690 if [ -z "$count" ]; then
1701 local rm_addr_nr=$1
1702 local rm_subflow_nr=$2
1710 shift 2
1711 while [ -n "$1" ]; do
1712 [ "$1" = "invert" ] && invert=true
1713 [ "$1" = "simult" ] && simult=true
1717 if [ -z $invert ]; then
1728 if [ -z "$count" ]; then
1738 if [ -z "$count" ]; then
1740 elif [ -n "$simult" ]; then
1749 suffix="$count in [$rm_subflow_nr:$((rm_subflow_nr*2))]"
1752 if [ $count -ge "$rm_subflow_nr" ] && \
1753 [ "$count" -le "$((rm_subflow_nr *2 ))" ]; then
1756 fail_test "got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]"
1769 local rm_addr_tx_nr=$1
1773 if [ -z "$count" ]; then
1784 local mp_prio_nr_tx=$1
1785 local mp_prio_nr_rx=$2
1790 if [ -z "$count" ]; then
1800 if [ -z "$count" ]; then
1811 local msg="$1"
1812 local subflow_nr=$2
1819 cnt1=$(ss -N $ns1 -tOni | grep -c token)
1820 cnt2=$(ss -N $ns2 -tOni | grep -c token)
1823 dump_stats=1
1828 if [ "${dump_stats}" = 1 ]; then
1829 ss -N $ns1 -tOni
1830 ss -N $ns1 -tOni | grep token
1831 ip -n $ns1 mptcp endpoint
1837 local info1=$1
1838 local exp1=$2
1847 cnt1=$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value "$info1" "$info1")
1848 cnt2=$(ss -N $ns2 -inmHM | mptcp_lib_get_info_value "$info2" "$info2")
1850 [ -z "$cnt1" ] && cnt1=0
1851 [ -z "$cnt2" ] && cnt2=0
1855 dump_stats=1
1860 if [ "$dump_stats" = 1 ]; then
1861 ss -N $ns1 -inmHM
1862 ss -N $ns2 -inmHM
1866 # $1: subflows in ns1 ; $2: subflows in ns2
1876 if [ -n "$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value $info $info)" ]; then
1877 chk_mptcp_info $info $1 $info $2
1881 print_check "$info $1:$2"
1884 cnt1=$(ss -N $ns1 -ti state established state syn-sent state syn-recv |
1885 grep -c tcp-ulp-mptcp)
1886 cnt2=$(ss -N $ns2 -ti state established state syn-sent state syn-recv |
1887 grep -c tcp-ulp-mptcp)
1889 if [ "$1" != "$cnt1" ] || [ "$2" != "$cnt2" ]; then
1890 fail_test "got subflows $cnt1:$cnt2 expected $1:$2"
1891 dump_stats=1
1896 if [ "$dump_stats" = 1 ]; then
1897 ss -N $ns1 -ti
1898 ss -N $ns2 -ti
1904 local ns=$1
1905 local link=$2
1911 tx_total=$(stat --format=%s $out)
1916 if [ $tx_rate -lt $((expected_rate - tolerance)) ] || \
1917 [ $tx_rate -gt $((expected_rate + tolerance)) ]; then
1928 local ns=$1
1930 while [ $time -lt $timeout_ms ]; do
1935 [ "$cnt" = 1 ] && return 1
1939 return 1
1944 local ns=$1
1946 ip netns exec $ns sysctl -q net.mptcp.pm_type=1
1968 pm_nl_set_limits $ns2 0 1
1971 chk_join_nr 1 1 0
1976 pm_nl_set_limits $ns1 0 1
1977 pm_nl_set_limits $ns2 0 1
1980 chk_join_nr 1 1 1
1985 pm_nl_set_limits $ns1 0 2
1986 pm_nl_set_limits $ns2 0 2
1990 chk_join_nr 2 2 2
1995 pm_nl_set_limits $ns1 0 1
1996 pm_nl_set_limits $ns2 0 2
2000 chk_join_nr 2 2 1
2005 pm_nl_set_limits $ns1 0 1
2006 pm_nl_set_limits $ns2 0 1
2009 chk_join_nr 1 1 1
2018 pm_nl_set_limits $ns1 0 1
2019 pm_nl_set_limits $ns2 0 1
2029 pm_nl_set_limits $ns1 0 2
2030 pm_nl_set_limits $ns2 0 2
2035 chk_join_nr 1 1 1
2041 pm_nl_set_limits $ns1 0 2
2042 pm_nl_set_limits $ns2 0 2
2047 chk_join_nr 1 1 1
2055 pm_nl_set_limits $ns1 0 1
2056 pm_nl_set_limits $ns2 0 1
2068 chk_join_nr 1 1 1
2079 chk_add_tx_nr 1 1
2080 chk_add_nr 1 1
2085 pm_nl_set_limits $ns1 0 1
2086 pm_nl_set_limits $ns2 1 1
2089 chk_join_nr 1 1 1
2090 chk_add_nr 1 1
2099 pm_nl_set_limits $ns1 0 2
2100 pm_nl_set_limits $ns2 1 2
2103 chk_join_nr 2 2 2
2104 chk_add_nr 1 1
2111 pm_nl_set_limits $ns2 1 3
2116 chk_add_nr 1 1
2139 chk_join_nr 1 1 1
2157 ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
2164 chk_join_nr 3 3 2
2183 # active backup and link switch-over.
2188 pm_nl_set_limits $ns2 1 3
2191 test_linkfail=1 \
2194 chk_add_nr 1 1
2195 chk_stale_nr $ns2 1 5 1
2204 pm_nl_set_limits $ns2 1 3
2207 test_linkfail=2 \
2210 chk_add_nr 1 1
2211 chk_stale_nr $ns2 1 -1 1
2214 # 2 subflows plus 1 backup subflow with a lossy link, backup
2218 pm_nl_set_limits $ns1 0 2
2220 pm_nl_set_limits $ns2 1 2
2222 FAILING_LINKS="1" test_linkfail=1 \
2224 chk_join_nr 2 2 2
2225 chk_add_nr 1 1
2229 # 2 lossy links after half transfer, backup will get half of
2233 pm_nl_set_limits $ns1 0 2
2235 pm_nl_set_limits $ns2 1 2
2237 FAILING_LINKS="1 2" test_linkfail=1 \
2239 chk_join_nr 2 2 2
2240 chk_add_nr 1 1
2241 chk_stale_nr $ns2 2 4 2
2249 pm_nl_set_limits $ns1 0 2
2251 pm_nl_set_limits $ns2 1 3
2253 FAILING_LINKS="1 2" test_linkfail=2 \
2255 chk_join_nr 2 2 2
2256 chk_add_nr 1 1
2257 chk_stale_nr $ns2 1 -1 2
2266 pm_nl_set_limits $ns1 0 1
2267 pm_nl_set_limits $ns2 1 1
2271 chk_join_nr 1 1 1
2278 pm_nl_set_limits $ns1 0 1
2279 pm_nl_set_limits $ns2 1 1
2280 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2282 run_tests $ns1 $ns2 dead:beef:1::1
2283 chk_join_nr 1 1 1
2289 pm_nl_set_limits $ns1 2 2
2292 pm_nl_set_limits $ns2 2 2
2295 chk_join_nr 2 2 2
2301 pm_nl_set_limits $ns1 2 2
2304 pm_nl_set_limits $ns2 2 2
2307 chk_join_nr 1 1 1
2316 pm_nl_set_limits $ns1 0 1
2317 pm_nl_set_limits $ns2 0 1
2319 addr_nr_ns2=-1 speed=slow \
2321 chk_join_nr 1 1 1
2322 chk_rm_tx_nr 1
2323 chk_rm_nr 1 1
2329 pm_nl_set_limits $ns1 0 2
2330 pm_nl_set_limits $ns2 0 2
2333 addr_nr_ns2=-2 speed=slow \
2335 chk_join_nr 2 2 2
2336 chk_rm_nr 2 2
2342 pm_nl_set_limits $ns1 0 1
2344 pm_nl_set_limits $ns2 1 1
2345 addr_nr_ns1=-1 speed=slow \
2347 chk_join_nr 1 1 1
2348 chk_add_nr 1 1
2349 chk_rm_nr 1 1 invert
2355 pm_nl_set_limits $ns1 0 2
2357 pm_nl_set_limits $ns2 1 2
2359 addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
2361 chk_join_nr 2 2 2
2362 chk_add_nr 1 1
2363 chk_rm_nr 1 1
2371 pm_nl_set_limits $ns2 1 3
2374 addr_nr_ns1=-1 addr_nr_ns2=-2 speed=10 \
2377 chk_add_nr 1 1
2378 chk_rm_nr 2 2
2389 addr_nr_ns1=-3 speed=10 \
2404 addr_nr_ns1=-3 speed=10 \
2406 chk_join_nr 1 1 1
2408 chk_rm_nr 3 1 invert
2416 pm_nl_set_limits $ns2 1 3
2419 addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
2422 chk_add_nr 1 1
2423 chk_rm_nr 1 3 invert simult
2434 addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
2454 addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
2469 addr_nr_ns1=-8 speed=slow \
2471 chk_join_nr 1 1 1
2473 chk_rm_nr 3 1 invert
2479 pm_nl_set_limits $ns1 0 1
2480 pm_nl_set_limits $ns2 0 1
2482 addr_nr_ns2=-9 speed=slow \
2484 chk_join_nr 1 1 1
2485 chk_rm_nr 1 1
2491 pm_nl_set_limits $ns1 0 1
2493 pm_nl_set_limits $ns2 1 1
2494 addr_nr_ns1=-9 speed=slow \
2496 chk_join_nr 1 1 1
2497 chk_add_nr 1 1
2498 chk_rm_nr 1 1 invert
2507 pm_nl_set_limits $ns1 0 1
2508 pm_nl_set_limits $ns2 0 1
2509 addr_nr_ns2=1 speed=slow cestab_ns2=1 \
2511 chk_join_nr 1 1 1
2517 pm_nl_set_limits $ns1 0 1
2518 pm_nl_set_limits $ns2 1 1
2519 addr_nr_ns1=1 speed=slow cestab_ns1=1 \
2521 chk_join_nr 1 1 1
2522 chk_add_nr 1 1
2528 pm_nl_set_limits $ns1 0 2
2529 pm_nl_set_limits $ns2 0 2
2530 addr_nr_ns2=2 speed=slow cestab_ns2=1 \
2532 chk_join_nr 2 2 2
2538 pm_nl_set_limits $ns1 0 2
2539 pm_nl_set_limits $ns2 0 2
2540 addr_nr_ns2=2 speed=slow cestab_ns2=1 \
2541 run_tests $ns1 $ns2 dead:beef:1::1
2542 chk_join_nr 2 2 2
2548 pm_nl_set_limits $ns1 0 2
2549 pm_nl_set_limits $ns2 2 2
2550 addr_nr_ns1=2 speed=slow cestab_ns1=1 \
2551 run_tests $ns1 $ns2 dead:beef:1::1
2552 chk_join_nr 2 2 2
2553 chk_add_nr 2 2
2562 pm_nl_set_limits $ns1 0 1
2563 pm_nl_set_limits $ns2 0 1
2564 pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow
2566 run_tests $ns1 $ns2 dead:beef:1::1
2567 chk_join_nr 1 1 1
2572 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2574 run_tests $ns1 $ns2 dead:beef:1::1
2576 chk_add_nr 1 1
2581 pm_nl_set_limits $ns1 0 1
2582 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2583 pm_nl_set_limits $ns2 1 1
2585 run_tests $ns1 $ns2 dead:beef:1::1
2586 chk_join_nr 1 1 1
2587 chk_add_nr 1 1
2592 pm_nl_set_limits $ns1 0 1
2593 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2594 pm_nl_set_limits $ns2 1 1
2595 addr_nr_ns1=-1 speed=slow \
2596 run_tests $ns1 $ns2 dead:beef:1::1
2597 chk_join_nr 1 1 1
2598 chk_add_nr 1 1
2599 chk_rm_nr 1 1 invert
2604 pm_nl_set_limits $ns1 0 2
2605 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2606 pm_nl_set_limits $ns2 1 2
2607 pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow
2608 addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
2609 run_tests $ns1 $ns2 dead:beef:1::1
2610 chk_join_nr 2 2 2
2611 chk_add_nr 1 1
2612 chk_rm_nr 1 1
2618 # subflow IPv4-mapped to IPv4-mapped
2619 if reset "single subflow IPv4-mapped"; then
2620 pm_nl_set_limits $ns1 0 1
2621 pm_nl_set_limits $ns2 0 1
2624 chk_join_nr 1 1 1
2627 # signal address IPv4-mapped with IPv4-mapped sk
2628 if reset "signal address IPv4-mapped"; then
2629 pm_nl_set_limits $ns1 0 1
2630 pm_nl_set_limits $ns2 1 1
2633 chk_join_nr 1 1 1
2634 chk_add_nr 1 1
2637 # subflow v4-map-v6
2638 if reset "single subflow v4-map-v6"; then
2639 pm_nl_set_limits $ns1 0 1
2640 pm_nl_set_limits $ns2 0 1
2643 chk_join_nr 1 1 1
2646 # signal address v4-map-v6
2647 if reset "signal address v4-map-v6"; then
2648 pm_nl_set_limits $ns1 0 1
2649 pm_nl_set_limits $ns2 1 1
2652 chk_join_nr 1 1 1
2653 chk_add_nr 1 1
2656 # subflow v6-map-v4
2657 if reset "single subflow v6-map-v4"; then
2658 pm_nl_set_limits $ns1 0 1
2659 pm_nl_set_limits $ns2 0 1
2662 chk_join_nr 1 1 1
2665 # signal address v6-map-v4
2666 if reset "signal address v6-map-v4"; then
2667 pm_nl_set_limits $ns1 0 1
2668 pm_nl_set_limits $ns2 1 1
2671 chk_join_nr 1 1 1
2672 chk_add_nr 1 1
2676 if reset "no JOIN with diff families v4-v6"; then
2677 pm_nl_set_limits $ns1 0 1
2678 pm_nl_set_limits $ns2 0 1
2679 pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow
2685 if reset "no JOIN with diff families v4-v6-2"; then
2686 pm_nl_set_limits $ns1 0 1
2687 pm_nl_set_limits $ns2 0 1
2688 pm_nl_add_endpoint $ns2 dead:beef:2::10.0.3.2 flags subflow
2694 if reset "no JOIN with diff families v6-v4"; then
2695 pm_nl_set_limits $ns1 0 1
2696 pm_nl_set_limits $ns2 0 1
2698 run_tests $ns1 $ns2 dead:beef:1::1
2707 pm_nl_set_limits $ns1 0 1
2708 pm_nl_set_limits $ns2 1 1
2709 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2718 pm_nl_set_limits $ns1 0 1
2719 pm_nl_set_limits $ns2 1 1
2722 run_tests $ns1 $ns2 dead:beef:2::1
2723 chk_join_nr 1 1 1
2727 if reset "simult IPv4 and IPv6 subflows, fullmesh 1x1" &&
2730 pm_nl_set_limits $ns2 1 4
2731 pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow,fullmesh
2734 run_tests $ns1 $ns2 dead:beef:2::1
2735 chk_join_nr 1 1 1
2740 if reset "simult IPv4 and IPv6 subflows, fullmesh 2x2" &&
2743 pm_nl_set_limits $ns2 2 4
2745 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2746 fullmesh=1 speed=slow \
2747 run_tests $ns1 $ns2 dead:beef:1::1
2757 pm_nl_set_limits $ns1 0 1
2758 pm_nl_set_limits $ns2 0 1
2762 chk_join_nr 1 1 1
2763 chk_prio_nr 0 1
2769 pm_nl_set_limits $ns1 0 1
2771 pm_nl_set_limits $ns2 1 1
2774 chk_join_nr 1 1 1
2775 chk_add_nr 1 1
2776 chk_prio_nr 1 1
2782 pm_nl_set_limits $ns1 0 1
2784 pm_nl_set_limits $ns2 1 1
2787 chk_join_nr 1 1 1
2788 chk_add_nr 1 1
2789 chk_prio_nr 1 1
2798 chk_prio_nr 0 1
2808 chk_prio_nr 1 1
2817 chk_prio_nr 0 1
2827 chk_prio_nr 1 1
2835 AF_INET=2
2840 local evt=$1
2841 local e_type=$2
2889 pm_nl_set_limits $ns1 0 1
2890 pm_nl_set_limits $ns2 1 1
2893 chk_join_nr 1 1 1
2894 chk_add_nr 1 1 1
2900 pm_nl_set_limits $ns1 0 2
2901 pm_nl_set_limits $ns2 1 2
2904 chk_join_nr 2 2 2
2905 chk_add_nr 1 1 1
2911 pm_nl_set_limits $ns1 0 1
2913 pm_nl_set_limits $ns2 1 1
2914 addr_nr_ns1=-1 speed=slow \
2916 chk_join_nr 1 1 1
2917 chk_add_nr 1 1 1
2918 chk_rm_nr 1 1 invert
2927 pm_nl_set_limits $ns1 0 2
2929 pm_nl_set_limits $ns2 1 2
2931 addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
2933 chk_join_nr 2 2 2
2934 chk_add_nr 1 1 1
2935 chk_rm_nr 1 1
2942 pm_nl_set_limits $ns2 1 3
2945 addr_nr_ns1=-8 addr_nr_ns2=-2 speed=slow \
2948 chk_add_nr 1 1
2949 chk_rm_nr 1 3 invert simult
2954 pm_nl_set_limits $ns1 2 2
2957 pm_nl_set_limits $ns2 2 2
2959 chk_join_nr 2 2 2
2960 chk_add_nr 2 2 2
2965 pm_nl_set_limits $ns1 2 2
2968 pm_nl_set_limits $ns2 2 2
2970 chk_join_nr 2 2 2
2971 chk_add_nr 2 2 2
2979 pm_nl_set_limits $ns1 0 1
2980 pm_nl_set_limits $ns2 0 1
2983 chk_join_nr 1 1 1
2988 pm_nl_set_limits $ns1 0 2
2989 pm_nl_set_limits $ns2 0 2
2993 chk_join_nr 2 2 2
2998 pm_nl_set_limits $ns1 0 1
2999 pm_nl_set_limits $ns2 0 2
3003 chk_join_nr 2 1 1
3008 pm_nl_set_limits $ns1 0 1
3009 pm_nl_set_limits $ns2 1 1
3012 chk_join_nr 1 1 1
3013 chk_add_nr 1 1
3019 pm_nl_set_limits $ns1 0 2
3020 pm_nl_set_limits $ns2 1 2
3023 chk_join_nr 2 2 2
3024 chk_add_nr 1 1
3031 pm_nl_set_limits $ns2 1 3
3036 chk_add_nr 1 1
3044 pm_nl_set_limits $ns1 0 1
3045 pm_nl_set_limits $ns2 0 1
3050 # checksum test 1 1
3051 if reset_with_checksum 1 1; then
3052 pm_nl_set_limits $ns1 0 1
3053 pm_nl_set_limits $ns2 0 1
3058 # checksum test 0 1
3059 if reset_with_checksum 0 1; then
3060 pm_nl_set_limits $ns1 0 1
3061 pm_nl_set_limits $ns2 0 1
3066 # checksum test 1 0
3067 if reset_with_checksum 1 0; then
3068 pm_nl_set_limits $ns1 0 1
3069 pm_nl_set_limits $ns2 0 1
3078 if reset_with_allow_join_id0 "single subflow allow join id0 ns1" 1 0; then
3079 pm_nl_set_limits $ns1 1 1
3080 pm_nl_set_limits $ns2 1 1
3083 chk_join_nr 1 1 1
3087 if reset_with_allow_join_id0 "single subflow allow join id0 ns2" 0 1; then
3088 pm_nl_set_limits $ns1 1 1
3089 pm_nl_set_limits $ns2 1 1
3097 if reset_with_allow_join_id0 "signal address allow join id0 ns1" 1 0; then
3098 pm_nl_set_limits $ns1 1 1
3099 pm_nl_set_limits $ns2 1 1
3102 chk_join_nr 1 1 1
3103 chk_add_nr 1 1
3108 if reset_with_allow_join_id0 "signal address allow join id0 ns2" 0 1; then
3109 pm_nl_set_limits $ns1 1 1
3110 pm_nl_set_limits $ns2 1 1
3113 chk_join_nr 1 1 1
3114 chk_add_nr 1 1
3118 if reset_with_allow_join_id0 "subflow and address allow join id0 1" 1 0; then
3119 pm_nl_set_limits $ns1 2 2
3120 pm_nl_set_limits $ns2 2 2
3124 chk_join_nr 2 2 2
3128 if reset_with_allow_join_id0 "subflow and address allow join id0 2" 0 1; then
3129 pm_nl_set_limits $ns1 2 2
3130 pm_nl_set_limits $ns2 2 2
3134 chk_join_nr 1 1 1
3140 # fullmesh 1
3141 # 2 fullmesh addrs in ns2, added before the connection,
3142 # 1 non-fullmesh addr in ns1, added during the connection.
3143 if reset "fullmesh test 2x1"; then
3145 pm_nl_set_limits $ns2 1 4
3148 addr_nr_ns1=1 speed=slow \
3151 chk_add_nr 1 1
3154 # fullmesh 2
3155 # 1 non-fullmesh addr in ns1, added before the connection,
3156 # 1 fullmesh addr in ns2, added during the connection.
3157 if reset "fullmesh test 1x1"; then
3158 pm_nl_set_limits $ns1 1 3
3159 pm_nl_set_limits $ns2 1 3
3161 fullmesh=1 speed=slow \
3164 chk_add_nr 1 1
3168 # 1 non-fullmesh addr in ns1, added before the connection,
3169 # 2 fullmesh addrs in ns2, added during the connection.
3170 if reset "fullmesh test 1x2"; then
3171 pm_nl_set_limits $ns1 2 5
3172 pm_nl_set_limits $ns2 1 5
3174 fullmesh=2 speed=slow \
3177 chk_add_nr 1 1
3181 # 1 non-fullmesh addr in ns1, added before the connection,
3182 # 2 fullmesh addrs in ns2, added during the connection,
3184 if reset "fullmesh test 1x2, limited"; then
3185 pm_nl_set_limits $ns1 2 4
3186 pm_nl_set_limits $ns2 1 4
3188 fullmesh=2 speed=slow \
3191 chk_add_nr 1 1
3200 addr_nr_ns2=1 sflags=fullmesh speed=slow \
3202 chk_join_nr 2 2 2
3203 chk_rm_nr 0 1
3212 fullmesh=1 sflags=nofullmesh speed=slow \
3214 chk_join_nr 2 2 2
3215 chk_rm_nr 0 1
3224 addr_nr_ns2=1 sflags=backup,fullmesh speed=slow \
3226 chk_join_nr 2 2 2
3227 chk_prio_nr 0 1
3228 chk_rm_nr 0 1
3239 chk_join_nr 2 2 2
3240 chk_prio_nr 0 1
3241 chk_rm_nr 0 1
3251 chk_fclose_nr 1 1
3252 chk_rst_nr 1 1 invert
3258 chk_join_nr 0 0 0 0 0 0 1
3259 chk_fclose_nr 1 1 invert
3260 chk_rst_nr 1 1
3266 tc -n $ns2 -j -s action show action pedit index 100 | \
3273 if reset_with_fail "Infinite map" 1; then
3276 chk_join_nr 0 0 0 +1 +0 1 0 1 "$(pedit_action_pkts)"
3277 chk_fail_nr 1 -1 invert
3281 if reset_with_fail "MP_FAIL MP_RST" 2; then
3282 tc -n $ns2 qdisc add dev ns2eth1 root netem rate 1mbit delay 5
3283 pm_nl_set_limits $ns1 0 1
3284 pm_nl_set_limits $ns2 0 1
3288 chk_join_nr 1 1 1 1 0 1 1 0 "$(pedit_action_pkts)"
3292 # $1: ns ; $2: addr ; $3: id
3298 [ "$1" == "$ns2" ] && evts=$evts_ns2
3301 ip netns exec $1 ./pm_nl_ctl ann $2 token $tk id $3
3302 sleep 1
3305 # $1: ns ; $2: id
3312 [ "$1" == "$ns2" ] && evts=$evts_ns2
3315 cnt=$(rm_addr_count ${1})
3316 ip netns exec $1 ./pm_nl_ctl rem token $tk id $2
3317 wait_rm_addr $1 "${cnt}"
3320 # $1: ns ; $2: addr ; $3: id
3326 [ "$1" == "$ns2" ] && evts=$evts_ns2
3331 ip netns exec $1 ./pm_nl_ctl csf lip $2 lid $3 \
3333 sleep 1
3336 # $1: ns ; $2: addr $3: event type
3340 local t=${3:-1}
3345 [ "$1" == "$ns2" ] && evts=$evts_ns2
3346 [ -n "$(mptcp_lib_evts_get_info "saddr4" "$evts" $t)" ] && ip=4
3347 [ -n "$(mptcp_lib_evts_get_info "saddr6" "$evts" $t)" ] && ip=6
3349 da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t $2)
3350 dp=$(mptcp_lib_evts_get_info dport "$evts" $t $2)
3351 sp=$(mptcp_lib_evts_get_info sport "$evts" $t $2)
3353 cnt=$(rm_sf_count ${1})
3354 ip netns exec $1 ./pm_nl_ctl dsf lip $2 lport $sp \
3356 wait_rm_sf $1 "${cnt}"
3365 pm_nl_set_limits $ns1 0 2
3366 pm_nl_set_limits $ns2 0 2
3377 pm_nl_set_limits $ns1 0 2
3378 pm_nl_set_limits $ns2 0 2
3382 chk_add_nr 1 0
3389 pm_nl_set_limits $ns1 1 1
3390 pm_nl_set_limits $ns2 1 1
3393 chk_join_nr 1 1 0
3400 pm_nl_set_limits $ns1 1 1
3401 pm_nl_set_limits $ns2 1 1
3411 pm_nl_set_limits $ns1 1 1
3412 pm_nl_set_limits $ns2 1 1
3416 chk_join_nr 1 1 0
3425 pm_nl_set_limits $ns1 0 1
3426 pm_nl_set_limits $ns2 0 1
3428 addr_nr_ns2=-1 speed=slow \
3438 pm_nl_set_limits $ns2 2 2
3445 chk_join_nr 2 2 2
3446 chk_add_nr 2 2
3447 chk_mptcp_info subflows 2 subflows 2
3449 chk_mptcp_info add_addr_signal 2 add_addr_accepted 2
3454 chk_rm_nr 2 2 invert
3456 chk_subflows_total 1 1
3465 pm_nl_set_limits $ns1 0 1
3471 chk_join_nr 1 1 1
3472 chk_mptcp_info subflows 1 subflows 1
3473 chk_subflows_total 2 2
3476 chk_rm_nr 1 1
3478 chk_subflows_total 1 1
3487 pm_nl_set_limits $ns1 0 1
3493 chk_subflows_total 1 1
3495 chk_join_nr 1 1 1
3496 chk_mptcp_info subflows 1 subflows 1
3497 chk_subflows_total 2 2
3506 pm_nl_set_limits $ns1 0 1
3512 chk_join_nr 1 1 1
3513 chk_mptcp_info subflows 1 subflows 1
3514 chk_subflows_total 2 2
3518 chk_rm_nr 0 1
3520 chk_mptcp_info subflows 1 subflows 1
3521 chk_subflows_total 1 1
3530 pm_nl_set_limits $ns2 1 1
3536 chk_join_nr 1 1 1
3537 chk_add_nr 1 1
3538 chk_mptcp_info subflows 1 subflows 1
3539 chk_subflows_total 2 2
3540 chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
3544 chk_rm_nr 1 0 invert
3546 chk_mptcp_info subflows 1 subflows 1
3547 chk_subflows_total 1 1
3559 pm_nl_set_limits $ns1 2 2
3560 pm_nl_set_limits $ns2 2 2
3568 $ns2 10.0.2.2 id 1 flags implicit
3569 chk_mptcp_info subflows 1 subflows 1
3570 chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
3572 pm_nl_add_endpoint $ns2 10.0.2.2 id 33 2>/dev/null
3574 $ns2 10.0.2.2 id 1 flags implicit
3578 $ns2 10.0.2.2 id 1 flags signal
3582 if reset "delete and re-add" &&
3584 pm_nl_set_limits $ns1 1 1
3585 pm_nl_set_limits $ns2 1 1
3586 pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
3592 chk_subflow_nr "before delete" 2
3593 chk_mptcp_info subflows 1 subflows 1
3595 pm_nl_del_endpoint $ns2 2 10.0.2.2
3597 chk_subflow_nr "after delete" 1
3602 chk_subflow_nr "after re-add" 2
3603 chk_mptcp_info subflows 1 subflows 1
3608 # [$1: error message]
3611 if [ -n "${1}" ]; then
3612 echo "${1}"
3613 ret=1
3620 echo " -${key} ${all_tests[${key}]}"
3623 echo " -c capture pcap files"
3624 echo " -C enable data checksum"
3625 echo " -i use ip mptcp"
3626 echo " -h help"
3676 capture=1
3679 checksum=1
3682 ip_mptcp=1
3688 usage "Unknown option: -${opt}"
3693 shift $((OPTIND - 1))
3696 if [[ "${arg}" =~ ^[0-9]+$ ]]; then
3703 if [ ${#tests[@]} -eq 0 ]; then
3711 if [ ${ret} -ne 0 ]; then
3715 echo -e "\t- ${i}: ${failed_tests[${i}]}"