1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4ret=0 5sin="" 6sout="" 7cin="" 8cinsent="" 9cout="" 10ksft_skip=4 11timeout=30 12mptcp_connect="" 13capture=0 14do_all_tests=1 15 16TEST_COUNT=0 17 18# generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) == 0x30) || 19# (ip6 && (ip6[74] & 0xf0) == 0x30)'" 20CBPF_MPTCP_SUBOPTION_ADD_ADDR="14, 21 48 0 0 0, 22 84 0 0 240, 23 21 0 3 64, 24 48 0 0 54, 25 84 0 0 240, 26 21 6 7 48, 27 48 0 0 0, 28 84 0 0 240, 29 21 0 4 96, 30 48 0 0 74, 31 84 0 0 240, 32 21 0 1 48, 33 6 0 0 65535, 34 6 0 0 0" 35 36init() 37{ 38 capout=$(mktemp) 39 40 rndh=$(printf %x $sec)-$(mktemp -u XXXXXX) 41 42 ns1="ns1-$rndh" 43 ns2="ns2-$rndh" 44 45 for netns in "$ns1" "$ns2";do 46 ip netns add $netns || exit $ksft_skip 47 ip -net $netns link set lo up 48 ip netns exec $netns sysctl -q net.mptcp.enabled=1 49 ip netns exec $netns sysctl -q net.ipv4.conf.all.rp_filter=0 50 ip netns exec $netns sysctl -q net.ipv4.conf.default.rp_filter=0 51 done 52 53 # ns1 ns2 54 # ns1eth1 ns2eth1 55 # ns1eth2 ns2eth2 56 # ns1eth3 ns2eth3 57 # ns1eth4 ns2eth4 58 59 for i in `seq 1 4`; do 60 ip link add ns1eth$i netns "$ns1" type veth peer name ns2eth$i netns "$ns2" 61 ip -net "$ns1" addr add 10.0.$i.1/24 dev ns1eth$i 62 ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad 63 ip -net "$ns1" link set ns1eth$i up 64 65 ip -net "$ns2" addr add 10.0.$i.2/24 dev ns2eth$i 66 ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad 67 ip -net "$ns2" link set ns2eth$i up 68 69 # let $ns2 reach any $ns1 address from any interface 70 ip -net "$ns2" route add default via 10.0.$i.1 dev ns2eth$i metric 10$i 71 done 72} 73 74cleanup_partial() 75{ 76 rm -f "$capout" 77 78 for netns in "$ns1" "$ns2"; do 79 ip netns del $netns 80 done 81} 82 83cleanup() 84{ 85 rm -f "$cin" "$cout" 86 rm -f "$sin" "$sout" "$cinsent" 87 cleanup_partial 88} 89 90reset() 91{ 92 cleanup_partial 93 init 94} 95 96reset_with_cookies() 97{ 98 reset 99 100 for netns in "$ns1" "$ns2";do 101 ip netns exec $netns sysctl -q net.ipv4.tcp_syncookies=2 102 done 103} 104 105reset_with_add_addr_timeout() 106{ 107 local ip="${1:-4}" 108 local tables 109 110 tables="iptables" 111 if [ $ip -eq 6 ]; then 112 tables="ip6tables" 113 fi 114 115 reset 116 117 ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1 118 ip netns exec $ns2 $tables -A OUTPUT -p tcp \ 119 -m tcp --tcp-option 30 \ 120 -m bpf --bytecode \ 121 "$CBPF_MPTCP_SUBOPTION_ADD_ADDR" \ 122 -j DROP 123} 124 125ip -Version > /dev/null 2>&1 126if [ $? -ne 0 ];then 127 echo "SKIP: Could not run test without ip tool" 128 exit $ksft_skip 129fi 130 131iptables -V > /dev/null 2>&1 132if [ $? -ne 0 ];then 133 echo "SKIP: Could not run all tests without iptables tool" 134 exit $ksft_skip 135fi 136 137ip6tables -V > /dev/null 2>&1 138if [ $? -ne 0 ];then 139 echo "SKIP: Could not run all tests without ip6tables tool" 140 exit $ksft_skip 141fi 142 143print_file_err() 144{ 145 ls -l "$1" 1>&2 146 echo "Trailing bytes are: " 147 tail -c 27 "$1" 148} 149 150check_transfer() 151{ 152 in=$1 153 out=$2 154 what=$3 155 156 cmp "$in" "$out" > /dev/null 2>&1 157 if [ $? -ne 0 ] ;then 158 echo "[ FAIL ] $what does not match (in, out):" 159 print_file_err "$in" 160 print_file_err "$out" 161 ret=1 162 163 return 1 164 fi 165 166 return 0 167} 168 169do_ping() 170{ 171 listener_ns="$1" 172 connector_ns="$2" 173 connect_addr="$3" 174 175 ip netns exec ${connector_ns} ping -q -c 1 $connect_addr >/dev/null 176 if [ $? -ne 0 ] ; then 177 echo "$listener_ns -> $connect_addr connectivity [ FAIL ]" 1>&2 178 ret=1 179 fi 180} 181 182link_failure() 183{ 184 ns="$1" 185 186 l=$((RANDOM%4)) 187 l=$((l+1)) 188 189 veth="ns1eth$l" 190 ip -net "$ns" link set "$veth" down 191} 192 193# $1: IP address 194is_v6() 195{ 196 [ -z "${1##*:*}" ] 197} 198 199do_transfer() 200{ 201 listener_ns="$1" 202 connector_ns="$2" 203 cl_proto="$3" 204 srv_proto="$4" 205 connect_addr="$5" 206 test_link_fail="$6" 207 addr_nr_ns1="$7" 208 addr_nr_ns2="$8" 209 speed="$9" 210 bkup="${10}" 211 212 port=$((10000+$TEST_COUNT)) 213 TEST_COUNT=$((TEST_COUNT+1)) 214 215 :> "$cout" 216 :> "$sout" 217 :> "$capout" 218 219 if [ $capture -eq 1 ]; then 220 if [ -z $SUDO_USER ] ; then 221 capuser="" 222 else 223 capuser="-Z $SUDO_USER" 224 fi 225 226 capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}") 227 228 echo "Capturing traffic for test $TEST_COUNT into $capfile" 229 ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 & 230 cappid=$! 231 232 sleep 1 233 fi 234 235 if [ $speed = "fast" ]; then 236 mptcp_connect="./mptcp_connect -j" 237 else 238 mptcp_connect="./mptcp_connect -r" 239 fi 240 241 local local_addr 242 if is_v6 "${connect_addr}"; then 243 local_addr="::" 244 else 245 local_addr="0.0.0.0" 246 fi 247 248 ip netns exec ${listener_ns} $mptcp_connect -t $timeout -l -p $port \ 249 -s ${srv_proto} ${local_addr} < "$sin" > "$sout" & 250 spid=$! 251 252 sleep 1 253 254 if [ "$test_link_fail" -eq 0 ];then 255 ip netns exec ${connector_ns} $mptcp_connect -t $timeout -p $port -s ${cl_proto} $connect_addr < "$cin" > "$cout" & 256 else 257 ( cat "$cin" ; sleep 2; link_failure $listener_ns ; cat "$cin" ) | tee "$cinsent" | \ 258 ip netns exec ${connector_ns} $mptcp_connect -t $timeout -p $port -s ${cl_proto} $connect_addr > "$cout" & 259 fi 260 cpid=$! 261 262 if [ $addr_nr_ns1 -gt 0 ]; then 263 let add_nr_ns1=addr_nr_ns1 264 counter=2 265 sleep 1 266 while [ $add_nr_ns1 -gt 0 ]; do 267 local addr 268 if is_v6 "${connect_addr}"; then 269 addr="dead:beef:$counter::1" 270 else 271 addr="10.0.$counter.1" 272 fi 273 ip netns exec $ns1 ./pm_nl_ctl add $addr flags signal 274 let counter+=1 275 let add_nr_ns1-=1 276 done 277 sleep 1 278 elif [ $addr_nr_ns1 -lt 0 ]; then 279 let rm_nr_ns1=-addr_nr_ns1 280 if [ $rm_nr_ns1 -lt 8 ]; then 281 counter=1 282 sleep 1 283 284 while [ $counter -le $rm_nr_ns1 ] 285 do 286 ip netns exec ${listener_ns} ./pm_nl_ctl del $counter 287 sleep 1 288 let counter+=1 289 done 290 else 291 sleep 1 292 ip netns exec ${listener_ns} ./pm_nl_ctl flush 293 fi 294 fi 295 296 if [ $addr_nr_ns2 -gt 0 ]; then 297 let add_nr_ns2=addr_nr_ns2 298 counter=3 299 sleep 1 300 while [ $add_nr_ns2 -gt 0 ]; do 301 local addr 302 if is_v6 "${connect_addr}"; then 303 addr="dead:beef:$counter::2" 304 else 305 addr="10.0.$counter.2" 306 fi 307 ip netns exec $ns2 ./pm_nl_ctl add $addr flags subflow 308 let counter+=1 309 let add_nr_ns2-=1 310 done 311 sleep 1 312 elif [ $addr_nr_ns2 -lt 0 ]; then 313 let rm_nr_ns2=-addr_nr_ns2 314 if [ $rm_nr_ns2 -lt 8 ]; then 315 counter=1 316 sleep 1 317 318 while [ $counter -le $rm_nr_ns2 ] 319 do 320 ip netns exec ${connector_ns} ./pm_nl_ctl del $counter 321 sleep 1 322 let counter+=1 323 done 324 else 325 sleep 1 326 ip netns exec ${connector_ns} ./pm_nl_ctl flush 327 fi 328 fi 329 330 if [ ! -z $bkup ]; then 331 sleep 1 332 for netns in "$ns1" "$ns2"; do 333 dump=(`ip netns exec $netns ./pm_nl_ctl dump`) 334 if [ ${#dump[@]} -gt 0 ]; then 335 addr=${dump[${#dump[@]} - 1]} 336 backup="ip netns exec $netns ./pm_nl_ctl set $addr flags $bkup" 337 $backup 338 fi 339 done 340 fi 341 342 wait $cpid 343 retc=$? 344 wait $spid 345 rets=$? 346 347 if [ $capture -eq 1 ]; then 348 sleep 1 349 kill $cappid 350 fi 351 352 if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then 353 echo " client exit code $retc, server $rets" 1>&2 354 echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2 355 ip netns exec ${listener_ns} ss -nita 1>&2 -o "sport = :$port" 356 echo -e "\nnetns ${connector_ns} socket stat for ${port}:" 1>&2 357 ip netns exec ${connector_ns} ss -nita 1>&2 -o "dport = :$port" 358 359 cat "$capout" 360 ret=1 361 return 1 362 fi 363 364 check_transfer $sin $cout "file received by client" 365 retc=$? 366 if [ "$test_link_fail" -eq 0 ];then 367 check_transfer $cin $sout "file received by server" 368 else 369 check_transfer $cinsent $sout "file received by server" 370 fi 371 rets=$? 372 373 if [ $retc -eq 0 ] && [ $rets -eq 0 ];then 374 cat "$capout" 375 return 0 376 fi 377 378 cat "$capout" 379 return 1 380} 381 382make_file() 383{ 384 name=$1 385 who=$2 386 size=$3 387 388 dd if=/dev/urandom of="$name" bs=1024 count=$size 2> /dev/null 389 echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name" 390 391 echo "Created $name (size $size KB) containing data sent by $who" 392} 393 394run_tests() 395{ 396 listener_ns="$1" 397 connector_ns="$2" 398 connect_addr="$3" 399 test_linkfail="${4:-0}" 400 addr_nr_ns1="${5:-0}" 401 addr_nr_ns2="${6:-0}" 402 speed="${7:-fast}" 403 bkup="${8:-""}" 404 lret=0 405 oldin="" 406 407 if [ "$test_linkfail" -eq 1 ];then 408 size=$((RANDOM%1024)) 409 size=$((size+1)) 410 size=$((size*128)) 411 412 oldin=$(mktemp) 413 cp "$cin" "$oldin" 414 make_file "$cin" "client" $size 415 fi 416 417 do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP ${connect_addr} \ 418 ${test_linkfail} ${addr_nr_ns1} ${addr_nr_ns2} ${speed} ${bkup} 419 lret=$? 420 421 if [ "$test_linkfail" -eq 1 ];then 422 cp "$oldin" "$cin" 423 rm -f "$oldin" 424 fi 425 426 if [ $lret -ne 0 ]; then 427 ret=$lret 428 return 429 fi 430} 431 432chk_join_nr() 433{ 434 local msg="$1" 435 local syn_nr=$2 436 local syn_ack_nr=$3 437 local ack_nr=$4 438 local count 439 local dump_stats 440 441 printf "%02u %-36s %s" "$TEST_COUNT" "$msg" "syn" 442 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinSynRx | awk '{print $2}'` 443 [ -z "$count" ] && count=0 444 if [ "$count" != "$syn_nr" ]; then 445 echo "[fail] got $count JOIN[s] syn expected $syn_nr" 446 ret=1 447 dump_stats=1 448 else 449 echo -n "[ ok ]" 450 fi 451 452 echo -n " - synack" 453 count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinSynAckRx | awk '{print $2}'` 454 [ -z "$count" ] && count=0 455 if [ "$count" != "$syn_ack_nr" ]; then 456 echo "[fail] got $count JOIN[s] synack expected $syn_ack_nr" 457 ret=1 458 dump_stats=1 459 else 460 echo -n "[ ok ]" 461 fi 462 463 echo -n " - ack" 464 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinAckRx | awk '{print $2}'` 465 [ -z "$count" ] && count=0 466 if [ "$count" != "$ack_nr" ]; then 467 echo "[fail] got $count JOIN[s] ack expected $ack_nr" 468 ret=1 469 dump_stats=1 470 else 471 echo "[ ok ]" 472 fi 473 if [ "${dump_stats}" = 1 ]; then 474 echo Server ns stats 475 ip netns exec $ns1 nstat -as | grep MPTcp 476 echo Client ns stats 477 ip netns exec $ns2 nstat -as | grep MPTcp 478 fi 479} 480 481chk_add_nr() 482{ 483 local add_nr=$1 484 local echo_nr=$2 485 local port_nr=${3:-0} 486 local syn_nr=${4:-$port_nr} 487 local syn_ack_nr=${5:-$port_nr} 488 local ack_nr=${6:-$port_nr} 489 local mis_syn_nr=${7:-0} 490 local mis_ack_nr=${8:-0} 491 local count 492 local dump_stats 493 494 printf "%-39s %s" " " "add" 495 count=`ip netns exec $ns2 nstat -as | grep MPTcpExtAddAddr | awk '{print $2}'` 496 [ -z "$count" ] && count=0 497 if [ "$count" != "$add_nr" ]; then 498 echo "[fail] got $count ADD_ADDR[s] expected $add_nr" 499 ret=1 500 dump_stats=1 501 else 502 echo -n "[ ok ]" 503 fi 504 505 echo -n " - echo " 506 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtEchoAdd | awk '{print $2}'` 507 [ -z "$count" ] && count=0 508 if [ "$count" != "$echo_nr" ]; then 509 echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr" 510 ret=1 511 dump_stats=1 512 else 513 echo -n "[ ok ]" 514 fi 515 516 if [ $port_nr -gt 0 ]; then 517 echo -n " - pt " 518 count=`ip netns exec $ns2 nstat -as | grep MPTcpExtPortAdd | awk '{print $2}'` 519 [ -z "$count" ] && count=0 520 if [ "$count" != "$port_nr" ]; then 521 echo "[fail] got $count ADD_ADDR[s] with a port-number expected $port_nr" 522 ret=1 523 dump_stats=1 524 else 525 echo "[ ok ]" 526 fi 527 528 printf "%-39s %s" " " "syn" 529 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinPortSynRx | 530 awk '{print $2}'` 531 [ -z "$count" ] && count=0 532 if [ "$count" != "$syn_nr" ]; then 533 echo "[fail] got $count JOIN[s] syn with a different \ 534 port-number expected $syn_nr" 535 ret=1 536 dump_stats=1 537 else 538 echo -n "[ ok ]" 539 fi 540 541 echo -n " - synack" 542 count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinPortSynAckRx | 543 awk '{print $2}'` 544 [ -z "$count" ] && count=0 545 if [ "$count" != "$syn_ack_nr" ]; then 546 echo "[fail] got $count JOIN[s] synack with a different \ 547 port-number expected $syn_ack_nr" 548 ret=1 549 dump_stats=1 550 else 551 echo -n "[ ok ]" 552 fi 553 554 echo -n " - ack" 555 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinPortAckRx | 556 awk '{print $2}'` 557 [ -z "$count" ] && count=0 558 if [ "$count" != "$ack_nr" ]; then 559 echo "[fail] got $count JOIN[s] ack with a different \ 560 port-number expected $ack_nr" 561 ret=1 562 dump_stats=1 563 else 564 echo "[ ok ]" 565 fi 566 567 printf "%-39s %s" " " "syn" 568 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMismatchPortSynRx | 569 awk '{print $2}'` 570 [ -z "$count" ] && count=0 571 if [ "$count" != "$mis_syn_nr" ]; then 572 echo "[fail] got $count JOIN[s] syn with a mismatched \ 573 port-number expected $mis_syn_nr" 574 ret=1 575 dump_stats=1 576 else 577 echo -n "[ ok ]" 578 fi 579 580 echo -n " - ack " 581 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMismatchPortAckRx | 582 awk '{print $2}'` 583 [ -z "$count" ] && count=0 584 if [ "$count" != "$mis_ack_nr" ]; then 585 echo "[fail] got $count JOIN[s] ack with a mismatched \ 586 port-number expected $mis_ack_nr" 587 ret=1 588 dump_stats=1 589 else 590 echo "[ ok ]" 591 fi 592 else 593 echo "" 594 fi 595 596 if [ "${dump_stats}" = 1 ]; then 597 echo Server ns stats 598 ip netns exec $ns1 nstat -as | grep MPTcp 599 echo Client ns stats 600 ip netns exec $ns2 nstat -as | grep MPTcp 601 fi 602} 603 604chk_rm_nr() 605{ 606 local rm_addr_nr=$1 607 local rm_subflow_nr=$2 608 local count 609 local dump_stats 610 611 printf "%-39s %s" " " "rm " 612 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtRmAddr | awk '{print $2}'` 613 [ -z "$count" ] && count=0 614 if [ "$count" != "$rm_addr_nr" ]; then 615 echo "[fail] got $count RM_ADDR[s] expected $rm_addr_nr" 616 ret=1 617 dump_stats=1 618 else 619 echo -n "[ ok ]" 620 fi 621 622 echo -n " - sf " 623 count=`ip netns exec $ns2 nstat -as | grep MPTcpExtRmSubflow | awk '{print $2}'` 624 [ -z "$count" ] && count=0 625 if [ "$count" != "$rm_subflow_nr" ]; then 626 echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr" 627 ret=1 628 dump_stats=1 629 else 630 echo "[ ok ]" 631 fi 632 633 if [ "${dump_stats}" = 1 ]; then 634 echo Server ns stats 635 ip netns exec $ns1 nstat -as | grep MPTcp 636 echo Client ns stats 637 ip netns exec $ns2 nstat -as | grep MPTcp 638 fi 639} 640 641chk_prio_nr() 642{ 643 local mp_prio_nr_tx=$1 644 local mp_prio_nr_rx=$2 645 local count 646 local dump_stats 647 648 printf "%-39s %s" " " "ptx" 649 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioTx | awk '{print $2}'` 650 [ -z "$count" ] && count=0 651 if [ "$count" != "$mp_prio_nr_tx" ]; then 652 echo "[fail] got $count MP_PRIO[s] TX expected $mp_prio_nr_tx" 653 ret=1 654 dump_stats=1 655 else 656 echo -n "[ ok ]" 657 fi 658 659 echo -n " - prx " 660 count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioRx | awk '{print $2}'` 661 [ -z "$count" ] && count=0 662 if [ "$count" != "$mp_prio_nr_rx" ]; then 663 echo "[fail] got $count MP_PRIO[s] RX expected $mp_prio_nr_rx" 664 ret=1 665 dump_stats=1 666 else 667 echo "[ ok ]" 668 fi 669 670 if [ "${dump_stats}" = 1 ]; then 671 echo Server ns stats 672 ip netns exec $ns1 nstat -as | grep MPTcp 673 echo Client ns stats 674 ip netns exec $ns2 nstat -as | grep MPTcp 675 fi 676} 677 678subflows_tests() 679{ 680 reset 681 run_tests $ns1 $ns2 10.0.1.1 682 chk_join_nr "no JOIN" "0" "0" "0" 683 684 # subflow limited by client 685 reset 686 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 687 run_tests $ns1 $ns2 10.0.1.1 688 chk_join_nr "single subflow, limited by client" 0 0 0 689 690 # subflow limited by server 691 reset 692 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 693 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 694 run_tests $ns1 $ns2 10.0.1.1 695 chk_join_nr "single subflow, limited by server" 1 1 0 696 697 # subflow 698 reset 699 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 700 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 701 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 702 run_tests $ns1 $ns2 10.0.1.1 703 chk_join_nr "single subflow" 1 1 1 704 705 # multiple subflows 706 reset 707 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 708 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 709 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 710 ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 711 run_tests $ns1 $ns2 10.0.1.1 712 chk_join_nr "multiple subflows" 2 2 2 713 714 # multiple subflows limited by serverf 715 reset 716 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 717 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 718 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 719 ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 720 run_tests $ns1 $ns2 10.0.1.1 721 chk_join_nr "multiple subflows, limited by server" 2 2 1 722} 723 724signal_address_tests() 725{ 726 # add_address, unused 727 reset 728 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 729 run_tests $ns1 $ns2 10.0.1.1 730 chk_join_nr "unused signal address" 0 0 0 731 chk_add_nr 1 1 732 733 # accept and use add_addr 734 reset 735 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 736 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 737 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 738 run_tests $ns1 $ns2 10.0.1.1 739 chk_join_nr "signal address" 1 1 1 740 chk_add_nr 1 1 741 742 # accept and use add_addr with an additional subflow 743 # note: signal address in server ns and local addresses in client ns must 744 # belong to different subnets or one of the listed local address could be 745 # used for 'add_addr' subflow 746 reset 747 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 748 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 749 ip netns exec $ns2 ./pm_nl_ctl limits 1 2 750 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 751 run_tests $ns1 $ns2 10.0.1.1 752 chk_join_nr "subflow and signal" 2 2 2 753 chk_add_nr 1 1 754 755 # accept and use add_addr with additional subflows 756 reset 757 ip netns exec $ns1 ./pm_nl_ctl limits 0 3 758 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 759 ip netns exec $ns2 ./pm_nl_ctl limits 1 3 760 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 761 ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 762 run_tests $ns1 $ns2 10.0.1.1 763 chk_join_nr "multiple subflows and signal" 3 3 3 764 chk_add_nr 1 1 765} 766 767link_failure_tests() 768{ 769 # accept and use add_addr with additional subflows and link loss 770 reset 771 ip netns exec $ns1 ./pm_nl_ctl limits 0 3 772 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 773 ip netns exec $ns2 ./pm_nl_ctl limits 1 3 774 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 775 ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 776 run_tests $ns1 $ns2 10.0.1.1 1 777 chk_join_nr "multiple flows, signal, link failure" 3 3 3 778 chk_add_nr 1 1 779} 780 781add_addr_timeout_tests() 782{ 783 # add_addr timeout 784 reset_with_add_addr_timeout 785 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 786 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 787 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 788 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 789 chk_join_nr "signal address, ADD_ADDR timeout" 1 1 1 790 chk_add_nr 4 0 791 792 # add_addr timeout IPv6 793 reset_with_add_addr_timeout 6 794 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 795 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 796 ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 797 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 798 chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1 799 chk_add_nr 4 0 800} 801 802remove_tests() 803{ 804 # single subflow, remove 805 reset 806 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 807 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 808 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 809 run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow 810 chk_join_nr "remove single subflow" 1 1 1 811 chk_rm_nr 1 1 812 813 # multiple subflows, remove 814 reset 815 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 816 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 817 ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 818 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 819 run_tests $ns1 $ns2 10.0.1.1 0 0 -2 slow 820 chk_join_nr "remove multiple subflows" 2 2 2 821 chk_rm_nr 2 2 822 823 # single address, remove 824 reset 825 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 826 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 827 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 828 run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow 829 chk_join_nr "remove single address" 1 1 1 830 chk_add_nr 1 1 831 chk_rm_nr 0 0 832 833 # subflow and signal, remove 834 reset 835 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 836 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 837 ip netns exec $ns2 ./pm_nl_ctl limits 1 2 838 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 839 run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow 840 chk_join_nr "remove subflow and signal" 2 2 2 841 chk_add_nr 1 1 842 chk_rm_nr 1 1 843 844 # subflows and signal, remove 845 reset 846 ip netns exec $ns1 ./pm_nl_ctl limits 0 3 847 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 848 ip netns exec $ns2 ./pm_nl_ctl limits 1 3 849 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 850 ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 851 run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 slow 852 chk_join_nr "remove subflows and signal" 3 3 3 853 chk_add_nr 1 1 854 chk_rm_nr 2 2 855 856 # subflows and signal, flush 857 reset 858 ip netns exec $ns1 ./pm_nl_ctl limits 0 3 859 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 860 ip netns exec $ns2 ./pm_nl_ctl limits 1 3 861 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 862 ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 863 run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow 864 chk_join_nr "flush subflows and signal" 3 3 3 865 chk_add_nr 1 1 866 chk_rm_nr 2 2 867} 868 869add_tests() 870{ 871 # add single subflow 872 reset 873 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 874 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 875 run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow 876 chk_join_nr "add single subflow" 1 1 1 877 878 # add signal address 879 reset 880 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 881 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 882 run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow 883 chk_join_nr "add signal address" 1 1 1 884 chk_add_nr 1 1 885 886 # add multiple subflows 887 reset 888 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 889 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 890 run_tests $ns1 $ns2 10.0.1.1 0 0 2 slow 891 chk_join_nr "add multiple subflows" 2 2 2 892 893 # add multiple subflows IPv6 894 reset 895 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 896 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 897 run_tests $ns1 $ns2 dead:beef:1::1 0 0 2 slow 898 chk_join_nr "add multiple subflows IPv6" 2 2 2 899 900 # add multiple addresses IPv6 901 reset 902 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 903 ip netns exec $ns2 ./pm_nl_ctl limits 2 2 904 run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow 905 chk_join_nr "add multiple addresses IPv6" 2 2 2 906 chk_add_nr 2 2 907} 908 909ipv6_tests() 910{ 911 # subflow IPv6 912 reset 913 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 914 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 915 ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow 916 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 917 chk_join_nr "single subflow IPv6" 1 1 1 918 919 # add_address, unused IPv6 920 reset 921 ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 922 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 923 chk_join_nr "unused signal address IPv6" 0 0 0 924 chk_add_nr 1 1 925 926 # signal address IPv6 927 reset 928 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 929 ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 930 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 931 run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow 932 chk_join_nr "single address IPv6" 1 1 1 933 chk_add_nr 1 1 934 935 # single address IPv6, remove 936 reset 937 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 938 ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 939 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 940 run_tests $ns1 $ns2 dead:beef:1::1 0 -1 0 slow 941 chk_join_nr "remove single address IPv6" 1 1 1 942 chk_add_nr 1 1 943 chk_rm_nr 0 0 944 945 # subflow and signal IPv6, remove 946 reset 947 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 948 ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal 949 ip netns exec $ns2 ./pm_nl_ctl limits 1 2 950 ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow 951 run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow 952 chk_join_nr "remove subflow and signal IPv6" 2 2 2 953 chk_add_nr 1 1 954 chk_rm_nr 1 1 955} 956 957v4mapped_tests() 958{ 959 # subflow IPv4-mapped to IPv4-mapped 960 reset 961 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 962 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 963 ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow 964 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 965 chk_join_nr "single subflow IPv4-mapped" 1 1 1 966 967 # signal address IPv4-mapped with IPv4-mapped sk 968 reset 969 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 970 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 971 ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal 972 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 973 chk_join_nr "signal address IPv4-mapped" 1 1 1 974 chk_add_nr 1 1 975 976 # subflow v4-map-v6 977 reset 978 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 979 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 980 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 981 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 982 chk_join_nr "single subflow v4-map-v6" 1 1 1 983 984 # signal address v4-map-v6 985 reset 986 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 987 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 988 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 989 run_tests $ns1 $ns2 "::ffff:10.0.1.1" 990 chk_join_nr "signal address v4-map-v6" 1 1 1 991 chk_add_nr 1 1 992 993 # subflow v6-map-v4 994 reset 995 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 996 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 997 ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow 998 run_tests $ns1 $ns2 10.0.1.1 999 chk_join_nr "single subflow v6-map-v4" 1 1 1 1000 1001 # signal address v6-map-v4 1002 reset 1003 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1004 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1005 ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal 1006 run_tests $ns1 $ns2 10.0.1.1 1007 chk_join_nr "signal address v6-map-v4" 1 1 1 1008 chk_add_nr 1 1 1009 1010 # no subflow IPv6 to v4 address 1011 reset 1012 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1013 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1014 ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::2 flags subflow 1015 run_tests $ns1 $ns2 10.0.1.1 1016 chk_join_nr "no JOIN with diff families v4-v6" 0 0 0 1017 1018 # no subflow IPv6 to v4 address even if v6 has a valid v4 at the end 1019 reset 1020 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1021 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1022 ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::10.0.3.2 flags subflow 1023 run_tests $ns1 $ns2 10.0.1.1 1024 chk_join_nr "no JOIN with diff families v4-v6-2" 0 0 0 1025 1026 # no subflow IPv4 to v6 address, no need to slow down too then 1027 reset 1028 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1029 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1030 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1031 run_tests $ns1 $ns2 dead:beef:1::1 1032 chk_join_nr "no JOIN with diff families v6-v4" 0 0 0 1033} 1034 1035backup_tests() 1036{ 1037 # single subflow, backup 1038 reset 1039 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1040 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1041 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow,backup 1042 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup 1043 chk_join_nr "single subflow, backup" 1 1 1 1044 chk_prio_nr 0 1 1045 1046 # single address, backup 1047 reset 1048 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1049 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1050 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1051 run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup 1052 chk_join_nr "single address, backup" 1 1 1 1053 chk_add_nr 1 1 1054 chk_prio_nr 1 0 1055} 1056 1057add_addr_ports_tests() 1058{ 1059 # signal address with port 1060 reset 1061 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1062 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1063 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1064 run_tests $ns1 $ns2 10.0.1.1 1065 chk_join_nr "signal address with port" 1 1 1 1066 chk_add_nr 1 1 1 1067 1068 # subflow and signal with port 1069 reset 1070 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1071 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1072 ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1073 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1074 run_tests $ns1 $ns2 10.0.1.1 1075 chk_join_nr "subflow and signal with port" 2 2 2 1076 chk_add_nr 1 1 1 1077 1078 # single address with port, remove 1079 reset 1080 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1081 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1082 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1083 run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow 1084 chk_join_nr "remove single address with port" 1 1 1 1085 chk_add_nr 1 1 1 1086 chk_rm_nr 0 0 1087 1088 # subflow and signal with port, remove 1089 reset 1090 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1091 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1092 ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1093 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1094 run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow 1095 chk_join_nr "remove subflow and signal with port" 2 2 2 1096 chk_add_nr 1 1 1 1097 chk_rm_nr 1 1 1098 1099 # subflows and signal with port, flush 1100 reset 1101 ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1102 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1103 ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1104 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1105 ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1106 run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow 1107 chk_join_nr "flush subflows and signal with port" 3 3 3 1108 chk_add_nr 1 1 1109 chk_rm_nr 2 2 1110 1111 # multiple addresses with port 1112 reset 1113 ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1114 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1115 ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10100 1116 ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1117 run_tests $ns1 $ns2 10.0.1.1 1118 chk_join_nr "multiple addresses with port" 2 2 2 1119 chk_add_nr 2 2 2 1120 1121 # multiple addresses with ports 1122 reset 1123 ip netns exec $ns1 ./pm_nl_ctl limits 2 2 1124 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 1125 ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10101 1126 ip netns exec $ns2 ./pm_nl_ctl limits 2 2 1127 run_tests $ns1 $ns2 10.0.1.1 1128 chk_join_nr "multiple addresses with ports" 2 2 2 1129 chk_add_nr 2 2 2 1130} 1131 1132syncookies_tests() 1133{ 1134 # single subflow, syncookies 1135 reset_with_cookies 1136 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1137 ip netns exec $ns2 ./pm_nl_ctl limits 0 1 1138 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1139 run_tests $ns1 $ns2 10.0.1.1 1140 chk_join_nr "single subflow with syn cookies" 1 1 1 1141 1142 # multiple subflows with syn cookies 1143 reset_with_cookies 1144 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1145 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1146 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1147 ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1148 run_tests $ns1 $ns2 10.0.1.1 1149 chk_join_nr "multiple subflows with syn cookies" 2 2 2 1150 1151 # multiple subflows limited by server 1152 reset_with_cookies 1153 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1154 ip netns exec $ns2 ./pm_nl_ctl limits 0 2 1155 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1156 ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow 1157 run_tests $ns1 $ns2 10.0.1.1 1158 chk_join_nr "subflows limited by server w cookies" 2 2 1 1159 1160 # test signal address with cookies 1161 reset_with_cookies 1162 ip netns exec $ns1 ./pm_nl_ctl limits 0 1 1163 ip netns exec $ns2 ./pm_nl_ctl limits 1 1 1164 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1165 run_tests $ns1 $ns2 10.0.1.1 1166 chk_join_nr "signal address with syn cookies" 1 1 1 1167 chk_add_nr 1 1 1168 1169 # test cookie with subflow and signal 1170 reset_with_cookies 1171 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1172 ip netns exec $ns1 ./pm_nl_ctl limits 0 2 1173 ip netns exec $ns2 ./pm_nl_ctl limits 1 2 1174 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1175 run_tests $ns1 $ns2 10.0.1.1 1176 chk_join_nr "subflow and signal w cookies" 2 2 2 1177 chk_add_nr 1 1 1178 1179 # accept and use add_addr with additional subflows 1180 reset_with_cookies 1181 ip netns exec $ns1 ./pm_nl_ctl limits 0 3 1182 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal 1183 ip netns exec $ns2 ./pm_nl_ctl limits 1 3 1184 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow 1185 ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow 1186 run_tests $ns1 $ns2 10.0.1.1 1187 chk_join_nr "subflows and signal w. cookies" 3 3 3 1188 chk_add_nr 1 1 1189} 1190 1191all_tests() 1192{ 1193 subflows_tests 1194 signal_address_tests 1195 link_failure_tests 1196 add_addr_timeout_tests 1197 remove_tests 1198 add_tests 1199 ipv6_tests 1200 v4mapped_tests 1201 backup_tests 1202 add_addr_ports_tests 1203 syncookies_tests 1204} 1205 1206usage() 1207{ 1208 echo "mptcp_join usage:" 1209 echo " -f subflows_tests" 1210 echo " -s signal_address_tests" 1211 echo " -l link_failure_tests" 1212 echo " -t add_addr_timeout_tests" 1213 echo " -r remove_tests" 1214 echo " -a add_tests" 1215 echo " -6 ipv6_tests" 1216 echo " -4 v4mapped_tests" 1217 echo " -b backup_tests" 1218 echo " -p add_addr_ports_tests" 1219 echo " -k syncookies_tests" 1220 echo " -c capture pcap files" 1221 echo " -h help" 1222} 1223 1224sin=$(mktemp) 1225sout=$(mktemp) 1226cin=$(mktemp) 1227cinsent=$(mktemp) 1228cout=$(mktemp) 1229init 1230make_file "$cin" "client" 1 1231make_file "$sin" "server" 1 1232trap cleanup EXIT 1233 1234for arg in "$@"; do 1235 # check for "capture" arg before launching tests 1236 if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"c"[0-9a-zA-Z]*$ ]]; then 1237 capture=1 1238 fi 1239 1240 # exception for the capture option, the rest means: a part of the tests 1241 if [ "${arg}" != "-c" ]; then 1242 do_all_tests=0 1243 fi 1244done 1245 1246if [ $do_all_tests -eq 1 ]; then 1247 all_tests 1248 exit $ret 1249fi 1250 1251while getopts 'fsltra64bpkch' opt; do 1252 case $opt in 1253 f) 1254 subflows_tests 1255 ;; 1256 s) 1257 signal_address_tests 1258 ;; 1259 l) 1260 link_failure_tests 1261 ;; 1262 t) 1263 add_addr_timeout_tests 1264 ;; 1265 r) 1266 remove_tests 1267 ;; 1268 a) 1269 add_tests 1270 ;; 1271 6) 1272 ipv6_tests 1273 ;; 1274 4) 1275 v4mapped_tests 1276 ;; 1277 b) 1278 backup_tests 1279 ;; 1280 p) 1281 add_addr_ports_tests 1282 ;; 1283 k) 1284 syncookies_tests 1285 ;; 1286 c) 1287 ;; 1288 h | *) 1289 usage 1290 ;; 1291 esac 1292done 1293 1294exit $ret 1295