Lines Matching +full:1 +full:- +full:2
2 # SPDX-License-Identifier: GPL-2.0
32 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
90 21 0 1 48,
102 ip netns exec $netns sysctl -q net.mptcp.pm_type=0 2>/dev/null || true
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 1ms
139 tc -n $ns2 qdisc add dev ns2eth$i root netem rate 20mbit delay 1ms
145 rm -f "$capout"
151 init=1
168 make_file "$cin" "client" 1 >/dev/null
169 make_file "$sin" "server" 1 >/dev/null
174 rm -f "$cin" "$cout" "$sinfail"
175 rm -f "$sin" "$sout" "$cinsent" "$cinfail"
176 rm -f "$tmpfile"
177 rm -rf $evts_ns1 $evts_ns2
178 rm -f "$err"
184 printf "%-${nr_blank}s%-36s" " " "${*}"
190 [ -z "${1}" ] && return
210 # $1: check name; $2: rc
213 local check="${1}"
214 local rc=${2}
226 # [ $1: fail msg ]
229 local msg="${1:-"Feature not supported"}"
236 last_test_skipped=1
244 return 1
250 if [ "${#only_tests_ids[@]}" -eq 0 ] && [ "${#only_tests_names[@]}" -eq 0 ]; then
251 return 1
256 if [ "$((MPTCP_LIB_TEST_COUNTER+1))" -eq "${i}" ]; then
257 return 1
262 return 1
271 if [ ${last_test_failed} -eq 1 ]; then
273 elif [ ${last_test_skipped} -eq 1 ]; then
275 elif [ ${last_test_ignored} -ne 1 ]; then
284 # $1: test name
289 TEST_NAME="${1}"
294 MPTCP_LIB_TEST_COUNTER=$((MPTCP_LIB_TEST_COUNTER+1))
295 last_test_ignored=1
296 return 1
301 if [ "${init}" != "1" ]; then
312 # $1: test name ; $2: counter to check
315 reset "${1}" || return 1
317 local counter="${2}"
319 if ! nstat -asz "${counter}" | grep -wq "${counter}"; then
321 return 1
325 # $1: test name
328 reset "${1}" || return 1
332 ip netns exec $netns sysctl -q net.ipv4.tcp_syncookies=2
336 # $1: test name
339 local ip="${2:-4}"
342 reset "${1}" || return 1
345 if [ $ip -eq 6 ]; then
349 ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
351 if ! ip netns exec $ns2 $tables -A OUTPUT -p tcp \
352 -m tcp --tcp-option 30 \
353 -m bpf --bytecode \
355 -j DROP; then
357 return 1
361 # $1: test name
364 local ns1_enable=$1
365 local ns2_enable=$2
367 reset "checksum test ${ns1_enable} ${ns2_enable}" || return 1
369 ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=$ns1_enable
370 ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=$ns2_enable
377 local ns1_enable=$2
380 reset "${1}" || return 1
382 ip netns exec $ns1 sysctl -q net.mptcp.allow_join_initial_addr_port=$ns1_enable
383 ip netns exec $ns2 sysctl -q net.mptcp.allow_join_initial_addr_port=$ns2_enable
388 # This rule inverts a 8-bit word at byte offset 148 for the 2nd TCP ACK packets
404 check_invert=1
406 local i="$1"
407 local ip="${2:-4}"
411 if [ $ip -eq 6 ]; then
416 -t mangle \
417 -A OUTPUT \
418 -o ns2eth$i \
419 -p tcp \
420 -m length --length 150:9999 \
421 -m statistic --mode nth --packet 1 --every 99999 \
422 -j MARK --set-mark 42 || return ${KSFT_SKIP}
424 tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${KSFT_SKIP}
425 tc -n $ns2 filter add dev ns2eth$i egress \
435 reset_check_counter "${1}" "MPTcpExtInfiniteMapTx" || return 1
438 ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=1
439 ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=1
444 if [ ${rc} -eq ${KSFT_SKIP} ]; then
446 return 1
458 reset "${1}" || return 1
465 reset "${1}" || return 1
468 local ns="${!1}"
469 local src="${2}"
471 local chain="${4:-INPUT}"
474 -A "${chain}" \
475 -s "${src}" \
476 -p tcp \
477 -j "${target}"; then
479 return 1
483 # $1: err msg
490 if [ ${#} -gt 0 ]; then
495 if [ ${last_test_failed} -eq 0 ]; then
498 last_test_failed=1
508 done | sort -n
513 local in=$1
514 local out=$2
520 if [ -n "$bytes" ]; then
523 out_size=$(wc -c $out | awk '{print $1}')
524 if [ $out_size -ne $bytes ]; then
526 return 1
529 # note: BusyBox's "cmp" command doesn't support --bytes
531 head --bytes="$bytes" "$in" > "$tmpfile"
533 head --bytes="$bytes" "$out" > "$tmpfile"
537 cmp -l "$in" "$out" | while read -r i a b; do
539 if [ $check_invert -eq 0 ] || [ $sum -ne $((0xff)) ]; then
544 return 1
555 local listener_ns="$1"
556 local connector_ns="$2"
559 if ! ip netns exec ${connector_ns} ping -q -c 1 $connect_addr >/dev/null; then
560 fail_test "$listener_ns -> $connect_addr connectivity"
566 local ns="$1"
568 if [ -z "$FAILING_LINKS" ]; then
570 FAILING_LINKS=$((l+1))
576 ip -net "$ns" link set "$veth" down
582 mptcp_lib_get_counter "${1}" "MPTcpExtRmAddr"
585 # $1: ns, $2: old rm_addr counter in $ns
588 local ns="${1}"
589 local old_cnt="${2}"
602 mptcp_lib_get_counter "${1}" "MPTcpExtRmSubflow"
605 # $1: ns, $2: old rm_sf counter in $ns
608 local ns="${1}"
609 local old_cnt="${2}"
622 local ns="${1}"
675 local msg="$1"
676 local ns=$2
683 while [ -n "$1" ]; do
684 case "${1}" in
686 eval "${1}"="${2}"
696 if [ -z "${id}" ]; then
697 fail_test "bad test - missing endpoint id"
708 local listener_ns="$1"
709 local connector_ns="$2"
712 local addr_nr_ns1=${addr_nr_ns1:-0}
713 local addr_nr_ns2=${addr_nr_ns2:-0}
714 local sflags=${sflags:-""}
715 local fullmesh=${fullmesh:-""}
718 if [ -n "${fullmesh}" ]; then
726 sleep 1
729 if [ $addr_nr_ns1 -gt 0 ]; then
730 local counter=2
733 while [ $add_nr_ns1 -gt 0 ]; do
736 addr="dead:beef:$counter::1"
738 addr="10.0.$counter.1"
741 counter=$((counter + 1))
742 add_nr_ns1=$((add_nr_ns1 - 1))
743 id=$((id + 1))
745 elif [ $addr_nr_ns1 -lt 0 ]; then
746 local rm_nr_ns1=$((-addr_nr_ns1))
747 if [ $rm_nr_ns1 -lt 8 ]; then
750 pm_nl_show_endpoints ${listener_ns} | while read -r line; do
758 if [ $counter -eq $rm_nr_ns1 ]; then
761 id=${arr[$nr+1]}
765 counter=$((counter + 1))
767 nr=$((nr + 1))
770 elif [ $rm_nr_ns1 -eq 8 ]; then
772 elif [ $rm_nr_ns1 -eq 9 ]; then
779 [ $addr_nr_ns1 -gt 0 ] && [ $addr_nr_ns2 -lt 0 ] && sleep 1
781 if [ $addr_nr_ns2 -gt 0 ]; then
785 while [ $add_nr_ns2 -gt 0 ]; do
788 addr="dead:beef:$counter::2"
790 addr="10.0.$counter.2"
793 counter=$((counter + 1))
794 add_nr_ns2=$((add_nr_ns2 - 1))
795 id=$((id + 1))
797 elif [ $addr_nr_ns2 -lt 0 ]; then
798 local rm_nr_ns2=$((-addr_nr_ns2))
799 if [ $rm_nr_ns2 -lt 8 ]; then
802 pm_nl_show_endpoints ${connector_ns} | while read -r line; do
810 if [ $counter -eq $rm_nr_ns2 ]; then
816 id=${arr[$nr+1]}
820 counter=$((counter + 1))
822 nr=$((nr + 1))
825 elif [ $rm_nr_ns2 -eq 8 ]; then
827 elif [ $rm_nr_ns2 -eq 9 ]; then
830 addr="dead:beef:1::2"
838 if [ -n "${sflags}" ]; then
839 sleep 1
844 pm_nl_show_endpoints $netns | while read -r line; do
853 id=${arr[$nr+1]}
855 nr=$((nr + 1))
865 local ns=$1
866 local cestab=$2
871 if [ -z "$count" ]; then
880 # $1 namespace 1, $2 namespace 2
883 if [ -n "${cestab_ns1}" ]; then
884 chk_cestab_nr ${1} ${cestab_ns1}
886 if [ -n "${cestab_ns2}" ]; then
887 chk_cestab_nr ${2} ${cestab_ns2}
893 local ns="$1"
899 if [ -z $SUDO_USER ]; then
902 capuser="-Z $SUDO_USER"
905 capfile=$(printf "mp_join-%02u-%s.pcap" "$MPTCP_LIB_TEST_COUNTER" "$ns")
908 ip netns exec "$ns" tcpdump -i any -s 65535 -B 32768 $capuser -w "$capfile" > "$capout" 2>&1 &
911 sleep 1
918 sleep 1
926 echo "$((10000 + MPTCP_LIB_TEST_COUNTER - 1))"
931 local listener_ns="$1"
932 local connector_ns="$2"
938 local FAILING_LINKS=${FAILING_LINKS:-""}
939 local fastclose=${fastclose:-""}
940 local speed=${speed:-"fast"}
949 nstat -n
951 nstat -n
955 extra_args="-j"
957 extra_args="-r 50"
958 elif [ $speed -gt 0 ]; then
959 extra_args="-r ${speed}"
965 if [ -n "${fastclose}" ]; then
966 if [ ${test_linkfail} -le 1 ]; then
968 return 1
976 extra_cl_args="-f ${test_linkfail}"
977 extra_srv_args="-f -1"
979 extra_srv_args="-f ${test_linkfail}"
980 extra_cl_args="-f -1"
983 return 1
988 if [ "$test_linkfail" -gt 1 ];then
991 ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
996 ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
1004 if [ "$test_linkfail" -eq 0 ];then
1007 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
1009 elif [ "$test_linkfail" -eq 1 ] || [ "$test_linkfail" -eq 2 ];then
1010 ( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" ) | \
1014 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
1020 ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
1040 if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then
1044 return 1
1047 if [ "$test_linkfail" -gt 1 ];then
1053 if [ "$test_linkfail" -eq 0 ];then
1060 [ $retc -eq 0 ] && [ $rets -eq 0 ]
1065 local name=$1
1066 local who=$2
1076 local listener_ns="$1"
1077 local connector_ns="$2"
1081 local test_linkfail=${test_linkfail:-0}
1083 # The values above 2 are reused to make test files
1085 if [ "$test_linkfail" -gt 2 ]; then
1088 if [ -z "$cinfail" ]; then
1094 elif [ "$test_linkfail" -ne 0 ] && [ -z "$cinfail" ]; then
1098 size=$((RANDOM%2))
1099 size=$((size+1))
1107 if [ "$test_linkfail" -gt 2 ]; then
1110 if [ -z "$sinfail" ]; then
1114 elif [ "$test_linkfail" -eq 2 ] && [ -z "$sinfail" ]; then
1116 size=$((size+1))
1129 ip netns exec $ns1 nstat -as | grep Tcp
1131 ip netns exec $ns2 nstat -as | grep Tcp
1136 local csum_ns1=${1:-0}
1137 local csum_ns2=${2:-0}
1144 allow_multi_errors_ns1=1
1145 csum_ns1=${csum_ns1:1}
1148 allow_multi_errors_ns2=1
1149 csum_ns2=${csum_ns2:1}
1154 if [ -n "$count" ] && [ "$count" != "$csum_ns1" ]; then
1157 if [ -z "$count" ]; then
1159 elif { [ "$count" != $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 0 ]; } ||
1160 { [ "$count" -lt $csum_ns1 ] && [ $allow_multi_errors_ns1 -eq 1 ]; }; then
1168 if [ -n "$count" ] && [ "$count" != "$csum_ns2" ]; then
1171 if [ -z "$count" ]; then
1173 elif { [ "$count" != $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 0 ]; } ||
1174 { [ "$count" -lt $csum_ns2 ] && [ $allow_multi_errors_ns2 -eq 1 ]; }; then
1185 local fail_tx=$1
1186 local fail_rx=$2
1187 local ns_invert=${3:-""}
1204 if [[ "${fail_tx}" = "-"* ]]; then
1205 allow_tx_lost=1
1206 fail_tx=${fail_tx:1}
1208 if [[ "${fail_rx}" = "-"* ]]; then
1209 allow_rx_lost=1
1210 fail_rx=${fail_rx:1}
1215 if [ -n "$count" ] && [ "$count" != "$fail_tx" ]; then
1218 if [ -z "$count" ]; then
1220 elif { [ "$count" != "$fail_tx" ] && [ $allow_tx_lost -eq 0 ]; } ||
1221 { [ "$count" -gt "$fail_tx" ] && [ $allow_tx_lost -eq 1 ]; }; then
1229 if [ -n "$count" ] && [ "$count" != "$fail_rx" ]; then
1232 if [ -z "$count" ]; then
1234 elif { [ "$count" != "$fail_rx" ] && [ $allow_rx_lost -eq 0 ]; } ||
1235 { [ "$count" -gt "$fail_rx" ] && [ $allow_rx_lost -eq 1 ]; }; then
1246 local fclose_tx=$1
1247 local fclose_rx=$2
1264 if [ -z "$count" ]; then
1274 if [ -z "$count" ]; then
1285 local rst_tx=$1
1286 local rst_rx=$2
1287 local ns_invert=${3:-""}
1303 if [ -z "$count" ]; then
1306 elif { [ $rst_tx -ne 0 ] && [ $count -lt $rst_tx ]; } ||
1307 { [ $rst_tx -eq 0 ] && [ $count -ne 0 ]; }; then
1315 if [ -z "$count" ]; then
1318 elif { [ $rst_rx -ne 0 ] && [ $count -lt $rst_rx ]; } ||
1319 { [ $rst_rx -eq 0 ] && [ $count -ne 0 ]; }; then
1328 local infi_tx=$1
1329 local infi_rx=$2
1334 if [ -z "$count" ]; then
1344 if [ -z "$count" ]; then
1355 local syn_tx=${join_syn_tx:-0}
1356 local create=${join_create_err:-0}
1357 local bind=${join_bind_err:-0}
1358 local connect=${join_connect_err:-0}
1363 if [ -z "$count" ]; then
1372 if [ -z "$count" ]; then
1381 if [ -z "$count" ]; then
1390 if [ -z "$count" ]; then
1403 local syn_nr=$1
1404 local syn_ack_nr=$2
1406 local csum_ns1=${join_csum_ns1:-0}
1407 local csum_ns2=${join_csum_ns2:-0}
1408 local fail_nr=${join_fail_nr:-0}
1409 local rst_nr=${join_rst_nr:-0}
1410 local infi_nr=${join_infi_nr:-0}
1411 local corrupted_pkts=${join_corrupted_pkts:-0}
1416 if [ "${corrupted_pkts}" -gt 0 ]; then
1421 if [ -z "$count" ]; then
1429 with_cookie=$(ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies)
1431 if [ -z "$count" ]; then
1437 if [ "$with_cookie" != 2 ] || [ "$count" -le "$syn_ack_nr" ] || [ "$count" -gt "$syn_nr" ]; then
1445 if [ -z "$count" ]; then
1454 if [ -z "$count" ]; then
1463 if [ -z "$count" ]; then
1473 join_syn_tx="${join_syn_tx:-${syn_nr}}" \
1486 # - as these tests do - we can have a quite high number of
1488 # sleep duration/ MPTCP-level RTX interval.
1491 local ns=$1
1492 local stale_min=$2
1503 if [ -z "$stale_nr" ] || [ -z "$recover_nr" ]; then
1505 elif [ $stale_nr -lt $stale_min ] ||
1506 { [ $stale_max -gt 0 ] && [ $stale_nr -gt $stale_max ]; } ||
1507 [ $((stale_nr - recover_nr)) -ne $stale_delta ]; then
1510 " stale-recover delta $stale_delta"
1511 dump_stats=1
1516 if [ "${dump_stats}" = 1 ]; then
1518 ip netns exec $ns ip -s link show
1519 ip netns exec $ns nstat -as | grep MPTcp
1525 local add_nr=$1
1526 local echo_nr=$2
1527 local port_nr=${3:-0}
1528 local ns_invert=${4:-""}
1548 timeout=$(ip netns exec ${ns_tx} sysctl -n net.mptcp.add_addr_timeout)
1552 if [ -z "$count" ]; then
1556 elif [ "$count" != "$add_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_nr" ]; }; then
1564 if [ -z "$count" ]; then
1572 if [ $port_nr -gt 0 ]; then
1575 if [ -z "$count" ]; then
1578 fail_test "got $count ADD_ADDR[s] with a port-number expected $port_nr"
1585 if [ -z "$count" ]; then
1589 port-number expected $syn_nr"
1596 if [ -z "$count" ]; then
1600 port-number expected $syn_ack_nr"
1607 if [ -z "$count" ]; then
1611 port-number expected $ack_nr"
1618 if [ -z "$count" ]; then
1622 port-number expected $mis_syn_nr"
1629 if [ -z "$count" ]; then
1633 port-number expected $mis_ack_nr"
1642 local add_tx_nr=$1
1643 local echo_tx_nr=$2
1647 timeout=$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout)
1651 if [ -z "$count" ]; then
1655 …elif [ "$count" != "$add_tx_nr" ] && { [ "$timeout" -gt 1 ] || [ "$count" -lt "$add_tx_nr" ]; }; t…
1663 if [ -z "$count" ]; then
1674 local rm_addr_nr=$1
1675 local rm_subflow_nr=$2
1685 shift 2
1686 while [ -n "$1" ]; do
1687 [ "$1" = "invert" ] && invert=true
1688 [ "$1" = "simult" ] && simult=true
1701 if [ -z "$count" ]; then
1711 if [ -z "$count" ]; then
1713 elif [ -n "$simult" ]; then
1722 suffix="$count in [$rm_subflow_nr:$((rm_subflow_nr*2))]"
1725 if [ $count -ge "$rm_subflow_nr" ] && \
1726 [ "$count" -le "$((rm_subflow_nr *2 ))" ]; then
1729 fail_test "got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr:$((rm_subflow_nr*2))]"
1742 local rm_addr_tx_nr=$1
1746 if [ -z "$count" ]; then
1757 local mp_prio_nr_tx=$1
1758 local mp_prio_nr_rx=$2
1765 if [ -z "$count" ]; then
1775 if [ -z "$count" ]; then
1785 if [ -z "$count" ]; then
1795 if [ -z "$count" ]; then
1806 local msg="$1"
1807 local subflow_nr=$2
1814 cnt1=$(ss -N $ns1 -tOni | grep -c token)
1815 cnt2=$(ss -N $ns2 -tOni | grep -c token)
1818 dump_stats=1
1823 if [ "${dump_stats}" = 1 ]; then
1824 ss -N $ns1 -tOni
1825 ss -N $ns1 -tOni | grep token
1826 ip -n $ns1 mptcp endpoint
1832 local info1=$1
1833 local exp1=$2
1842 cnt1=$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value "$info1" "$info1")
1843 cnt2=$(ss -N $ns2 -inmHM | mptcp_lib_get_info_value "$info2" "$info2")
1845 [ -z "$cnt1" ] && cnt1=0
1846 [ -z "$cnt2" ] && cnt2=0
1850 dump_stats=1
1855 if [ "$dump_stats" = 1 ]; then
1856 ss -N $ns1 -inmHM
1857 ss -N $ns2 -inmHM
1861 # $1: subflows in ns1 ; $2: subflows in ns2
1871 if [ -n "$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value $info $info)" ]; then
1872 chk_mptcp_info $info $1 $info $2
1876 print_check "$info $1:$2"
1879 cnt1=$(ss -N $ns1 -ti state established state syn-sent state syn-recv |
1880 grep -c tcp-ulp-mptcp)
1881 cnt2=$(ss -N $ns2 -ti state established state syn-sent state syn-recv |
1882 grep -c tcp-ulp-mptcp)
1884 if [ "$1" != "$cnt1" ] || [ "$2" != "$cnt2" ]; then
1885 fail_test "got subflows $cnt1:$cnt2 expected $1:$2"
1886 dump_stats=1
1891 if [ "$dump_stats" = 1 ]; then
1892 ss -N $ns1 -ti
1893 ss -N $ns2 -ti
1899 local ns=$1
1900 local link=$2
1906 tx_total=$(stat --format=%s $out)
1911 if [ $tx_rate -lt $((expected_rate - tolerance)) ] || \
1912 [ $tx_rate -gt $((expected_rate + tolerance)) ]; then
1923 local ns=$1
1925 while [ $time -lt $timeout_ms ]; do
1930 [ "$cnt" = 1 ] && return 1
1934 return 1
1939 local ns=$1
1941 ip netns exec $ns sysctl -q net.mptcp.pm_type=1
1963 pm_nl_set_limits $ns2 0 1
1966 chk_join_nr 1 1 0
1971 pm_nl_set_limits $ns1 0 1
1972 pm_nl_set_limits $ns2 0 1
1975 chk_join_nr 1 1 1
1980 pm_nl_set_limits $ns1 0 2
1981 pm_nl_set_limits $ns2 0 2
1985 chk_join_nr 2 2 2
1990 pm_nl_set_limits $ns1 0 1
1991 pm_nl_set_limits $ns2 0 2
1995 chk_join_nr 2 2 1
2000 pm_nl_set_limits $ns1 0 1
2001 pm_nl_set_limits $ns2 0 1
2004 chk_join_nr 1 1 1
2013 pm_nl_set_limits $ns1 0 1
2014 pm_nl_set_limits $ns2 0 1
2019 join_bind_err=1 \
2026 pm_nl_set_limits $ns1 0 2
2027 pm_nl_set_limits $ns2 0 2
2032 join_syn_tx=2 \
2033 chk_join_nr 1 1 1
2039 pm_nl_set_limits $ns1 0 2
2040 pm_nl_set_limits $ns2 0 2
2045 join_syn_tx=2 \
2046 chk_join_nr 1 1 1
2054 pm_nl_set_limits $ns1 0 1
2055 pm_nl_set_limits $ns2 0 1
2067 join_syn_tx=2 \
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 $ns1 0 2
2112 pm_nl_set_limits $ns2 0 2
2115 chk_join_nr 1 1 1
2116 chk_add_nr 1 1 0 invert # only initiated by ns2
2126 pm_nl_set_limits $ns2 1 3
2131 chk_add_nr 1 1
2155 chk_join_nr 1 1 1
2173 ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
2180 chk_join_nr 3 3 2
2199 # active backup and link switch-over.
2204 pm_nl_set_limits $ns2 1 3
2207 test_linkfail=1 \
2210 chk_add_nr 1 1
2211 chk_stale_nr $ns2 1 5 1
2220 pm_nl_set_limits $ns2 1 3
2223 test_linkfail=2 \
2226 chk_add_nr 1 1
2227 chk_stale_nr $ns2 1 -1 1
2230 # 2 subflows plus 1 backup subflow with a lossy link, backup
2234 pm_nl_set_limits $ns1 0 2
2236 pm_nl_set_limits $ns2 1 2
2238 FAILING_LINKS="1" test_linkfail=1 \
2240 chk_join_nr 2 2 2
2241 chk_add_nr 1 1
2245 # 2 lossy links after half transfer, backup will get half of
2249 pm_nl_set_limits $ns1 0 2
2251 pm_nl_set_limits $ns2 1 2
2253 FAILING_LINKS="1 2" test_linkfail=1 \
2255 chk_join_nr 2 2 2
2256 chk_add_nr 1 1
2257 chk_stale_nr $ns2 2 4 2
2265 pm_nl_set_limits $ns1 0 2
2267 pm_nl_set_limits $ns2 1 3
2269 FAILING_LINKS="1 2" test_linkfail=2 \
2271 chk_join_nr 2 2 2
2272 chk_add_nr 1 1
2273 chk_stale_nr $ns2 1 -1 2
2282 pm_nl_set_limits $ns1 0 1
2283 pm_nl_set_limits $ns2 1 1
2287 chk_join_nr 1 1 1
2294 pm_nl_set_limits $ns1 0 1
2295 pm_nl_set_limits $ns2 1 1
2296 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2298 run_tests $ns1 $ns2 dead:beef:1::1
2299 chk_join_nr 1 1 1
2305 pm_nl_set_limits $ns1 2 2
2308 pm_nl_set_limits $ns2 2 2
2311 chk_join_nr 2 2 2
2317 pm_nl_set_limits $ns1 2 2
2320 pm_nl_set_limits $ns2 2 2
2323 join_syn_tx=2 \
2324 chk_join_nr 1 1 1
2333 pm_nl_set_limits $ns1 0 1
2334 pm_nl_set_limits $ns2 0 1
2336 addr_nr_ns2=-1 speed=slow \
2338 chk_join_nr 1 1 1
2339 chk_rm_tx_nr 1
2340 chk_rm_nr 1 1
2346 pm_nl_set_limits $ns1 0 2
2347 pm_nl_set_limits $ns2 0 2
2350 addr_nr_ns2=-2 speed=slow \
2352 chk_join_nr 2 2 2
2353 chk_rm_nr 2 2
2359 pm_nl_set_limits $ns1 0 1
2361 pm_nl_set_limits $ns2 1 1
2362 addr_nr_ns1=-1 speed=slow \
2364 chk_join_nr 1 1 1
2365 chk_add_nr 1 1
2366 chk_rm_nr 1 1 invert
2372 pm_nl_set_limits $ns1 0 2
2374 pm_nl_set_limits $ns2 1 2
2376 addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
2378 chk_join_nr 2 2 2
2379 chk_add_nr 1 1
2380 chk_rm_nr 1 1
2388 pm_nl_set_limits $ns2 1 3
2391 addr_nr_ns1=-1 addr_nr_ns2=-2 speed=10 \
2394 chk_add_nr 1 1
2395 chk_rm_nr 2 2
2406 addr_nr_ns1=-3 speed=10 \
2421 pm_nl_set_limits $ns2 2 2
2422 addr_nr_ns1=-3 speed=10 \
2424 join_syn_tx=2 join_connect_err=1 \
2425 chk_join_nr 1 1 1
2427 chk_rm_nr 3 1 invert
2435 pm_nl_set_limits $ns2 1 3
2438 addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
2441 chk_add_nr 1 1
2442 chk_rm_nr 1 3 invert simult
2453 addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
2473 addr_nr_ns1=-8 addr_nr_ns2=-8 speed=slow \
2488 addr_nr_ns1=-8 speed=slow \
2491 chk_join_nr 1 1 1
2493 chk_rm_nr 3 1 invert
2499 pm_nl_set_limits $ns1 0 1
2500 pm_nl_set_limits $ns2 0 1
2502 addr_nr_ns2=-9 speed=slow \
2504 chk_join_nr 1 1 1
2505 chk_rm_nr 1 1
2511 pm_nl_set_limits $ns1 0 1
2513 pm_nl_set_limits $ns2 1 1
2514 addr_nr_ns1=-9 speed=slow \
2516 chk_join_nr 1 1 1
2517 chk_add_nr 1 1
2518 chk_rm_nr 1 1 invert
2527 pm_nl_set_limits $ns1 0 1
2528 pm_nl_set_limits $ns2 0 1
2529 addr_nr_ns2=1 speed=slow cestab_ns2=1 \
2531 chk_join_nr 1 1 1
2537 pm_nl_set_limits $ns1 0 1
2538 pm_nl_set_limits $ns2 1 1
2539 addr_nr_ns1=1 speed=slow cestab_ns1=1 \
2541 chk_join_nr 1 1 1
2542 chk_add_nr 1 1
2548 pm_nl_set_limits $ns1 0 2
2549 pm_nl_set_limits $ns2 0 2
2550 addr_nr_ns2=2 speed=slow cestab_ns2=1 \
2552 chk_join_nr 2 2 2
2558 pm_nl_set_limits $ns1 0 2
2559 pm_nl_set_limits $ns2 0 2
2560 addr_nr_ns2=2 speed=slow cestab_ns2=1 \
2561 run_tests $ns1 $ns2 dead:beef:1::1
2562 chk_join_nr 2 2 2
2568 pm_nl_set_limits $ns1 0 2
2569 pm_nl_set_limits $ns2 2 2
2570 addr_nr_ns1=2 speed=slow cestab_ns1=1 \
2571 run_tests $ns1 $ns2 dead:beef:1::1
2572 chk_join_nr 2 2 2
2573 chk_add_nr 2 2
2582 pm_nl_set_limits $ns1 0 1
2583 pm_nl_set_limits $ns2 0 1
2584 pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow
2586 run_tests $ns1 $ns2 dead:beef:1::1
2587 chk_join_nr 1 1 1
2592 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2594 run_tests $ns1 $ns2 dead:beef:1::1
2596 chk_add_nr 1 1
2601 pm_nl_set_limits $ns1 0 1
2602 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2603 pm_nl_set_limits $ns2 1 1
2605 run_tests $ns1 $ns2 dead:beef:1::1
2606 chk_join_nr 1 1 1
2607 chk_add_nr 1 1
2612 pm_nl_set_limits $ns1 0 1
2613 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2614 pm_nl_set_limits $ns2 1 1
2615 addr_nr_ns1=-1 speed=slow \
2616 run_tests $ns1 $ns2 dead:beef:1::1
2617 chk_join_nr 1 1 1
2618 chk_add_nr 1 1
2619 chk_rm_nr 1 1 invert
2624 pm_nl_set_limits $ns1 0 2
2625 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2626 pm_nl_set_limits $ns2 1 2
2627 pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow
2628 addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
2629 run_tests $ns1 $ns2 dead:beef:1::1
2630 chk_join_nr 2 2 2
2631 chk_add_nr 1 1
2632 chk_rm_nr 1 1
2638 # subflow IPv4-mapped to IPv4-mapped
2639 if reset "single subflow IPv4-mapped"; then
2640 pm_nl_set_limits $ns1 0 1
2641 pm_nl_set_limits $ns2 0 1
2644 chk_join_nr 1 1 1
2647 # signal address IPv4-mapped with IPv4-mapped sk
2648 if reset "signal address IPv4-mapped"; then
2649 pm_nl_set_limits $ns1 0 1
2650 pm_nl_set_limits $ns2 1 1
2653 chk_join_nr 1 1 1
2654 chk_add_nr 1 1
2657 # subflow v4-map-v6
2658 if reset "single subflow v4-map-v6"; then
2659 pm_nl_set_limits $ns1 0 1
2660 pm_nl_set_limits $ns2 0 1
2663 chk_join_nr 1 1 1
2666 # signal address v4-map-v6
2667 if reset "signal address v4-map-v6"; then
2668 pm_nl_set_limits $ns1 0 1
2669 pm_nl_set_limits $ns2 1 1
2672 chk_join_nr 1 1 1
2673 chk_add_nr 1 1
2676 # subflow v6-map-v4
2677 if reset "single subflow v6-map-v4"; then
2678 pm_nl_set_limits $ns1 0 1
2679 pm_nl_set_limits $ns2 0 1
2682 chk_join_nr 1 1 1
2685 # signal address v6-map-v4
2686 if reset "signal address v6-map-v4"; then
2687 pm_nl_set_limits $ns1 0 1
2688 pm_nl_set_limits $ns2 1 1
2691 chk_join_nr 1 1 1
2692 chk_add_nr 1 1
2696 if reset "no JOIN with diff families v4-v6"; then
2697 pm_nl_set_limits $ns1 0 1
2698 pm_nl_set_limits $ns2 0 1
2699 pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow
2705 if reset "no JOIN with diff families v4-v6-2"; then
2706 pm_nl_set_limits $ns1 0 1
2707 pm_nl_set_limits $ns2 0 1
2708 pm_nl_add_endpoint $ns2 dead:beef:2::10.0.3.2 flags subflow
2714 if reset "no JOIN with diff families v6-v4"; then
2715 pm_nl_set_limits $ns1 0 1
2716 pm_nl_set_limits $ns2 0 1
2718 run_tests $ns1 $ns2 dead:beef:1::1
2727 pm_nl_set_limits $ns1 0 1
2728 pm_nl_set_limits $ns2 1 1
2729 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2738 pm_nl_set_limits $ns1 0 1
2739 pm_nl_set_limits $ns2 1 1
2742 run_tests $ns1 $ns2 dead:beef:2::1
2743 chk_join_nr 1 1 1
2747 if reset "simult IPv4 and IPv6 subflows, fullmesh 1x1" &&
2750 pm_nl_set_limits $ns2 1 4
2751 pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow,fullmesh
2754 run_tests $ns1 $ns2 dead:beef:2::1
2755 chk_join_nr 1 1 1
2760 if reset "simult IPv4 and IPv6 subflows, fullmesh 2x2" &&
2763 pm_nl_set_limits $ns2 2 4
2765 pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
2766 fullmesh=1 speed=slow \
2767 run_tests $ns1 $ns2 dead:beef:1::1
2777 pm_nl_set_limits $ns1 0 1
2778 pm_nl_set_limits $ns2 0 1
2782 chk_join_nr 1 1 1
2783 chk_prio_nr 0 1 1 0
2789 pm_nl_set_limits $ns1 0 1
2791 pm_nl_set_limits $ns2 1 1
2794 chk_join_nr 1 1 1
2795 chk_add_nr 1 1
2796 chk_prio_nr 1 0 0 1
2802 pm_nl_set_limits $ns1 0 1
2804 pm_nl_set_limits $ns2 1 1
2807 chk_join_nr 1 1 1
2808 chk_add_nr 1 1
2809 chk_prio_nr 1 1 0 0
2815 pm_nl_set_limits $ns1 0 1
2817 pm_nl_set_limits $ns2 1 1
2820 chk_join_nr 1 1 1
2821 chk_add_nr 1 1
2822 chk_prio_nr 1 0 0 1
2831 chk_prio_nr 0 1 0 0
2836 pm_nl_set_limits $ns1 0 2
2837 pm_nl_set_limits $ns2 1 2
2841 # 10.0.2.2 (non-backup) -> 10.0.1.1 (backup)
2843 # 10.0.1.2 (backup) -> 10.0.2.1 (non-backup)
2845 ip -net "$ns2" route add 10.0.2.1 via 10.0.1.1 dev ns2eth1 # force this path
2849 chk_join_nr 2 2 2
2850 chk_prio_nr 1 1 1 1
2859 chk_prio_nr 0 1 0 0
2869 chk_prio_nr 1 1 0 0
2875 local e_type=$2
2904 local retl=$1
2905 local attempts=$2
2918 if [ -z "$count" ]; then
2921 fail_test "got ${count} MPC attempt[s] on port-based endpoint, expected ${attempts}"
2932 pm_nl_set_limits $ns1 0 1
2933 pm_nl_set_limits $ns2 1 1
2936 chk_join_nr 1 1 1
2937 chk_add_nr 1 1 1
2943 pm_nl_set_limits $ns1 0 2
2944 pm_nl_set_limits $ns2 1 2
2947 chk_join_nr 2 2 2
2948 chk_add_nr 1 1 1
2954 pm_nl_set_limits $ns1 0 1
2956 pm_nl_set_limits $ns2 1 1
2957 addr_nr_ns1=-1 speed=slow \
2959 chk_join_nr 1 1 1
2960 chk_add_nr 1 1 1
2961 chk_rm_nr 1 1 invert
2972 pm_nl_set_limits $ns1 0 2
2974 pm_nl_set_limits $ns2 1 2
2976 addr_nr_ns1=-1 addr_nr_ns2=-1 speed=slow \
2978 chk_join_nr 2 2 2
2979 chk_add_nr 1 1 1
2980 chk_rm_nr 1 1
2987 pm_nl_set_limits $ns2 1 3
2990 addr_nr_ns1=-8 addr_nr_ns2=-2 speed=slow \
2993 chk_add_nr 1 1
2994 chk_rm_nr 1 3 invert simult
2999 pm_nl_set_limits $ns1 2 2
3002 pm_nl_set_limits $ns2 2 2
3004 chk_join_nr 2 2 2
3005 chk_add_nr 2 2 2
3010 pm_nl_set_limits $ns1 2 2
3013 pm_nl_set_limits $ns2 2 2
3015 chk_join_nr 2 2 2
3016 chk_add_nr 2 2 2
3019 if reset "port-based signal endpoint must not accept mpc"; then
3027 timeout 1 ip netns exec ${ns2} \
3028 ./mptcp_connect -t ${timeout_poll} -p $port -s MPTCP 10.0.2.1 >/dev/null 2>&1
3032 chk_mpc_endp_attempt ${retl} 1
3040 pm_nl_set_limits $ns1 0 1
3041 pm_nl_set_limits $ns2 0 1
3044 chk_join_nr 1 1 1
3049 pm_nl_set_limits $ns1 0 2
3050 pm_nl_set_limits $ns2 0 2
3054 chk_join_nr 2 2 2
3059 pm_nl_set_limits $ns1 0 1
3060 pm_nl_set_limits $ns2 0 2
3064 chk_join_nr 2 1 1
3069 pm_nl_set_limits $ns1 0 1
3070 pm_nl_set_limits $ns2 1 1
3073 chk_join_nr 1 1 1
3074 chk_add_nr 1 1
3080 pm_nl_set_limits $ns1 0 2
3081 pm_nl_set_limits $ns2 1 2
3084 chk_join_nr 2 2 2
3085 chk_add_nr 1 1
3092 pm_nl_set_limits $ns2 1 3
3097 chk_add_nr 1 1
3104 for checksum_enable in "0 0" "1 1" "0 1" "1 0"; do
3105 # checksum test 0 0, 1 1, 0 1, 1 0
3107 pm_nl_set_limits $ns1 0 1
3108 pm_nl_set_limits $ns2 0 1
3118 if reset_with_allow_join_id0 "single subflow allow join id0 ns1" 1 0; then
3119 pm_nl_set_limits $ns1 1 1
3120 pm_nl_set_limits $ns2 1 1
3123 chk_join_nr 1 1 1
3127 if reset_with_allow_join_id0 "single subflow allow join id0 ns2" 0 1; then
3128 pm_nl_set_limits $ns1 1 1
3129 pm_nl_set_limits $ns2 1 1
3137 if reset_with_allow_join_id0 "signal address allow join id0 ns1" 1 0; then
3138 pm_nl_set_limits $ns1 1 1
3139 pm_nl_set_limits $ns2 1 1
3142 chk_join_nr 1 1 1
3143 chk_add_nr 1 1
3148 if reset_with_allow_join_id0 "signal address allow join id0 ns2" 0 1; then
3149 pm_nl_set_limits $ns1 1 1
3150 pm_nl_set_limits $ns2 1 1
3153 chk_join_nr 1 1 1
3154 chk_add_nr 1 1
3158 if reset_with_allow_join_id0 "subflow and address allow join id0 1" 1 0; then
3159 pm_nl_set_limits $ns1 2 2
3160 pm_nl_set_limits $ns2 2 2
3164 chk_join_nr 2 2 2
3168 if reset_with_allow_join_id0 "subflow and address allow join id0 2" 0 1; then
3169 pm_nl_set_limits $ns1 2 2
3170 pm_nl_set_limits $ns2 2 2
3174 chk_join_nr 1 1 1
3180 # fullmesh 1
3181 # 2 fullmesh addrs in ns2, added before the connection,
3182 # 1 non-fullmesh addr in ns1, added during the connection.
3183 if reset "fullmesh test 2x1"; then
3185 pm_nl_set_limits $ns2 1 4
3188 addr_nr_ns1=1 speed=slow \
3191 chk_add_nr 1 1
3194 # fullmesh 2
3195 # 1 non-fullmesh addr in ns1, added before the connection,
3196 # 1 fullmesh addr in ns2, added during the connection.
3197 if reset "fullmesh test 1x1"; then
3198 pm_nl_set_limits $ns1 1 3
3199 pm_nl_set_limits $ns2 1 3
3204 fullmesh=1 speed=slow \
3207 chk_add_nr 1 1
3211 # 1 non-fullmesh addr in ns1, added before the connection,
3212 # 2 fullmesh addrs in ns2, added during the connection.
3213 if reset "fullmesh test 1x2"; then
3214 pm_nl_set_limits $ns1 2 5
3215 pm_nl_set_limits $ns2 1 5
3217 fullmesh=2 speed=slow \
3220 chk_add_nr 1 1
3224 # 1 non-fullmesh addr in ns1, added before the connection,
3225 # 2 fullmesh addrs in ns2, added during the connection,
3227 if reset "fullmesh test 1x2, limited"; then
3228 pm_nl_set_limits $ns1 2 4
3229 pm_nl_set_limits $ns2 1 4
3231 fullmesh=2 speed=slow \
3234 chk_add_nr 1 1
3243 addr_nr_ns2=1 sflags=fullmesh speed=slow \
3245 chk_join_nr 2 2 2
3246 chk_rm_nr 0 1
3255 fullmesh=1 sflags=nofullmesh speed=slow \
3257 chk_join_nr 2 2 2
3258 chk_rm_nr 0 1
3267 addr_nr_ns2=1 sflags=backup,fullmesh speed=slow \
3269 chk_join_nr 2 2 2
3270 chk_prio_nr 0 1 1 0
3271 chk_rm_nr 0 1
3282 chk_join_nr 2 2 2
3283 chk_prio_nr 0 1 1 0
3284 chk_rm_nr 0 1
3291 MPTCP_LIB_SUBTEST_FLAKY=1
3295 chk_fclose_nr 1 1
3296 chk_rst_nr 1 1 invert
3300 MPTCP_LIB_SUBTEST_FLAKY=1
3303 join_rst_nr=1 \
3305 chk_fclose_nr 1 1 invert
3306 chk_rst_nr 1 1
3312 tc -n $ns2 -j -s action show action pedit index 100 | \
3319 if reset_with_fail "Infinite map" 1; then
3320 MPTCP_LIB_SUBTEST_FLAKY=1
3323 join_csum_ns1=+1 join_csum_ns2=+0 \
3324 join_fail_nr=1 join_rst_nr=0 join_infi_nr=1 \
3327 chk_fail_nr 1 -1 invert
3331 if reset_with_fail "MP_FAIL MP_RST" 2; then
3332 MPTCP_LIB_SUBTEST_FLAKY=1
3333 tc -n $ns2 qdisc add dev ns2eth1 root netem rate 1mbit delay 5ms
3334 pm_nl_set_limits $ns1 0 1
3335 pm_nl_set_limits $ns2 0 1
3339 join_csum_ns1=1 join_csum_ns2=0 \
3340 join_fail_nr=1 join_rst_nr=1 join_infi_nr=0 \
3342 chk_join_nr 1 1 1
3346 # $1: ns ; $2: addr ; $3: id
3352 [ "$1" == "$ns2" ] && evts=$evts_ns2
3355 ip netns exec $1 ./pm_nl_ctl ann $2 token $tk id $3
3356 sleep 1
3359 # $1: ns ; $2: id
3366 [ "$1" == "$ns2" ] && evts=$evts_ns2
3369 cnt=$(rm_addr_count ${1})
3370 ip netns exec $1 ./pm_nl_ctl rem token $tk id $2
3371 wait_rm_addr $1 "${cnt}"
3374 # $1: ns ; $2: addr ; $3: id
3380 [ "$1" == "$ns2" ] && evts=$evts_ns2
3385 ip netns exec $1 ./pm_nl_ctl csf lip $2 lid $3 \
3387 sleep 1
3390 # $1: ns ; $2: addr $3: event type
3394 local t=${3:-1}
3399 [ "$1" == "$ns2" ] && evts=$evts_ns2
3400 [ -n "$(mptcp_lib_evts_get_info "saddr4" "$evts" $t)" ] && ip=4
3401 [ -n "$(mptcp_lib_evts_get_info "saddr6" "$evts" $t)" ] && ip=6
3403 da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t $2)
3404 dp=$(mptcp_lib_evts_get_info dport "$evts" $t $2)
3405 sp=$(mptcp_lib_evts_get_info sport "$evts" $t $2)
3407 cnt=$(rm_sf_count ${1})
3408 ip netns exec $1 ./pm_nl_ctl dsf lip $2 lport $sp \
3410 wait_rm_sf $1 "${cnt}"
3415 local cmd="$1"
3416 local expected="$2"
3421 if [ ${rc} -eq 2 ]; then
3423 elif [ ${rc} -eq 0 ]; then
3425 elif [ ${rc} -eq 1 ]; then
3430 # $1: ns
3436 [ "$1" == "$ns2" ] && evts=$evts_ns2
3439 ip netns exec $1 ./pm_nl_ctl dump token $tk
3442 # $1: ns ; $2: id
3448 [ "$1" == "$ns2" ] && evts=$evts_ns2
3451 ip netns exec $1 ./pm_nl_ctl get $2 token $tk
3456 local ns="${1}"
3457 local exp="${2}"
3471 local ns="${1}"
3472 local id="${2}"
3484 # $1: ns ; $2: event type ; $3: count
3487 local ns=${1}
3488 local evt_name="${2}"
3506 count=$(grep -cw "type:${evt}" "${evts}")
3520 pm_nl_set_limits $ns1 0 2
3521 pm_nl_set_limits $ns2 0 2
3532 pm_nl_set_limits $ns1 0 2
3533 pm_nl_set_limits $ns2 0 2
3537 chk_add_nr 1 0
3544 pm_nl_set_limits $ns1 1 1
3545 pm_nl_set_limits $ns2 1 1
3548 chk_join_nr 1 1 0
3555 pm_nl_set_limits $ns1 1 1
3556 pm_nl_set_limits $ns2 1 1
3566 pm_nl_set_limits $ns1 1 1
3567 pm_nl_set_limits $ns2 1 1
3571 chk_join_nr 1 1 0
3580 pm_nl_set_limits $ns1 0 1
3581 pm_nl_set_limits $ns2 0 1
3583 addr_nr_ns2=-1 speed=slow \
3593 pm_nl_set_limits $ns2 2 2
3595 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3600 chk_join_nr 2 2 2
3601 chk_add_nr 2 2
3602 chk_mptcp_info subflows 2 subflows 2
3604 chk_mptcp_info add_addr_signal 2 add_addr_accepted 2
3615 chk_rm_nr 1 1 invert
3617 chk_subflows_total 1 1
3626 pm_nl_set_limits $ns1 0 1
3628 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3632 chk_join_nr 1 1 1
3633 chk_mptcp_info subflows 1 subflows 1
3634 chk_subflows_total 2 2
3643 chk_rm_nr 0 1
3645 chk_subflows_total 1 1
3654 pm_nl_set_limits $ns1 0 1
3656 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3660 chk_subflows_total 1 1
3664 chk_join_nr 1 1 1
3665 chk_mptcp_info subflows 1 subflows 1
3666 chk_subflows_total 2 2
3675 pm_nl_set_limits $ns1 0 1
3677 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3681 chk_join_nr 1 1 1
3682 chk_mptcp_info subflows 1 subflows 1
3683 chk_subflows_total 2 2
3687 chk_rm_nr 0 1
3689 chk_mptcp_info subflows 1 subflows 1
3690 chk_subflows_total 1 1
3699 pm_nl_set_limits $ns2 1 1
3701 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3705 chk_join_nr 1 1 1
3706 chk_add_nr 1 1
3707 chk_mptcp_info subflows 1 subflows 1
3708 chk_subflows_total 2 2
3709 chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
3713 chk_rm_nr 1 0 invert
3715 chk_mptcp_info subflows 1 subflows 1
3716 chk_subflows_total 1 1
3728 pm_nl_set_limits $ns1 2 2
3729 pm_nl_set_limits $ns2 2 2
3732 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3737 $ns2 10.0.2.2 id 1 flags implicit
3738 chk_mptcp_info subflows 1 subflows 1
3739 chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
3741 pm_nl_add_endpoint $ns2 10.0.2.2 id 33 2>/dev/null
3743 $ns2 10.0.2.2 id 1 flags implicit
3747 $ns2 10.0.2.2 id 1 flags signal
3751 if reset_with_tcp_filter "delete and re-add" ns2 10.0.3.2 REJECT OUTPUT &&
3756 pm_nl_add_endpoint $ns2 10.0.1.2 id 1 dev ns2eth1 flags subflow
3757 pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
3759 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3764 $ns2 10.0.2.2 id 2 flags subflow dev ns2eth2
3765 chk_subflow_nr "before delete id 2" 2
3766 chk_mptcp_info subflows 1 subflows 1
3768 pm_nl_del_endpoint $ns2 2 10.0.2.2
3770 chk_subflow_nr "after delete id 2" 1
3773 pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
3775 chk_subflow_nr "after re-add id 2" 2
3776 chk_mptcp_info subflows 1 subflows 1
3780 chk_subflow_nr "after new reject" 2
3781 chk_mptcp_info subflows 1 subflows 1
3783 ip netns exec "${ns2}" ${iptables} -D OUTPUT -s "10.0.3.2" -p tcp -j REJECT
3788 chk_mptcp_info subflows 2 subflows 2
3792 pm_nl_del_endpoint $ns2 1 10.0.1.2
3794 chk_subflow_nr "after delete id 0 ($i)" 2
3795 chk_mptcp_info subflows 2 subflows 2 # only decr for additional sf
3797 pm_nl_add_endpoint $ns2 10.0.1.2 id 1 dev ns2eth1 flags subflow
3799 chk_subflow_nr "after re-add id 0 ($i)" 3
3806 chk_evt_nr ns1 MPTCP_LIB_EVENT_LISTENER_CREATED 1
3807 chk_evt_nr ns1 MPTCP_LIB_EVENT_CREATED 1
3808 chk_evt_nr ns1 MPTCP_LIB_EVENT_ESTABLISHED 1
3814 chk_evt_nr ns2 MPTCP_LIB_EVENT_CREATED 1
3815 chk_evt_nr ns2 MPTCP_LIB_EVENT_ESTABLISHED 1
3826 # remove and re-add
3827 if reset_with_events "delete re-add signal" &&
3831 pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal
3833 pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
3836 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3841 $ns1 10.0.2.1 id 1 flags signal
3842 chk_subflow_nr "before delete" 2
3843 chk_mptcp_info subflows 1 subflows 1
3845 pm_nl_del_endpoint $ns1 1 10.0.2.1
3846 pm_nl_del_endpoint $ns1 2 224.0.0.1
3848 chk_subflow_nr "after delete" 1
3851 pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal
3852 pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal
3854 chk_subflow_nr "after re-add" 3
3855 chk_mptcp_info subflows 2 subflows 2
3859 chk_subflow_nr "after delete ID 0" 2
3860 chk_mptcp_info subflows 2 subflows 2
3864 chk_subflow_nr "after re-add ID 0" 3
3869 chk_subflow_nr "after re-delete ID 0" 2
3870 chk_mptcp_info subflows 2 subflows 2
3874 chk_subflow_nr "after re-re-add ID 0" 3
3879 chk_evt_nr ns1 MPTCP_LIB_EVENT_LISTENER_CREATED 1
3880 chk_evt_nr ns1 MPTCP_LIB_EVENT_CREATED 1
3881 chk_evt_nr ns1 MPTCP_LIB_EVENT_ESTABLISHED 1
3887 chk_evt_nr ns2 MPTCP_LIB_EVENT_CREATED 1
3888 chk_evt_nr ns2 MPTCP_LIB_EVENT_ESTABLISHED 1
3894 join_connect_err=1 \
3900 # flush and re-add
3901 if reset_with_tcp_filter "flush re-add" ns2 10.0.3.2 REJECT OUTPUT &&
3903 pm_nl_set_limits $ns1 0 2
3904 pm_nl_set_limits $ns2 1 2
3906 pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
3909 run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
3913 chk_subflow_nr "before flush" 1
3919 ip netns exec "${ns2}" ${iptables} -D OUTPUT -s "10.0.3.2" -p tcp -j REJECT
3922 pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal
3926 join_syn_tx=3 join_connect_err=1 \
3927 chk_join_nr 2 2 2
3928 chk_add_nr 2 2
3929 chk_rm_nr 1 0 invert
3933 # [$1: error message]
3936 if [ -n "${1}" ]; then
3937 echo "${1}"
3945 echo " -${key} ${all_tests[${key}]}"
3948 echo " -c capture pcap files"
3949 echo " -C enable data checksum"
3950 echo " -i use ip mptcp"
3951 echo " -h help"
4013 usage "Unknown option: -${opt}"
4018 shift $((OPTIND - 1))
4021 if [[ "${arg}" =~ ^[0-9]+$ ]]; then
4028 if [ ${#tests[@]} -eq 0 ]; then
4038 if [ ${ret} -ne 0 ]; then
4042 echo -e "\t- ${i}: ${failed_tests[${i}]}"