162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci. "$(dirname "${0}")/mptcp_lib.sh" 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciksft_skip=4 762306a36Sopenharmony_ciret=0 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciusage() { 1062306a36Sopenharmony_ci echo "Usage: $0 [ -h ]" 1162306a36Sopenharmony_ci} 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciwhile getopts "$optstring" option;do 1562306a36Sopenharmony_ci case "$option" in 1662306a36Sopenharmony_ci "h") 1762306a36Sopenharmony_ci usage $0 1862306a36Sopenharmony_ci exit 0 1962306a36Sopenharmony_ci ;; 2062306a36Sopenharmony_ci "?") 2162306a36Sopenharmony_ci usage $0 2262306a36Sopenharmony_ci exit 1 2362306a36Sopenharmony_ci ;; 2462306a36Sopenharmony_ci esac 2562306a36Sopenharmony_cidone 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cisec=$(date +%s) 2862306a36Sopenharmony_cirndh=$(printf %x $sec)-$(mktemp -u XXXXXX) 2962306a36Sopenharmony_cins1="ns1-$rndh" 3062306a36Sopenharmony_cierr=$(mktemp) 3162306a36Sopenharmony_ciret=0 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cicleanup() 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci rm -f $err 3662306a36Sopenharmony_ci ip netns del $ns1 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cimptcp_lib_check_mptcp 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciip -Version > /dev/null 2>&1 4262306a36Sopenharmony_ciif [ $? -ne 0 ];then 4362306a36Sopenharmony_ci echo "SKIP: Could not run test without ip tool" 4462306a36Sopenharmony_ci exit $ksft_skip 4562306a36Sopenharmony_cifi 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_citrap cleanup EXIT 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciip netns add $ns1 || exit $ksft_skip 5062306a36Sopenharmony_ciip -net $ns1 link set lo up 5162306a36Sopenharmony_ciip netns exec $ns1 sysctl -q net.mptcp.enabled=1 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cicheck() 5462306a36Sopenharmony_ci{ 5562306a36Sopenharmony_ci local cmd="$1" 5662306a36Sopenharmony_ci local expected="$2" 5762306a36Sopenharmony_ci local msg="$3" 5862306a36Sopenharmony_ci local out=`$cmd 2>$err` 5962306a36Sopenharmony_ci local cmd_ret=$? 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci printf "%-50s" "$msg" 6262306a36Sopenharmony_ci if [ $cmd_ret -ne 0 ]; then 6362306a36Sopenharmony_ci echo "[FAIL] command execution '$cmd' stderr " 6462306a36Sopenharmony_ci cat $err 6562306a36Sopenharmony_ci mptcp_lib_result_fail "${msg} # error ${cmd_ret}" 6662306a36Sopenharmony_ci ret=1 6762306a36Sopenharmony_ci elif [ "$out" = "$expected" ]; then 6862306a36Sopenharmony_ci echo "[ OK ]" 6962306a36Sopenharmony_ci mptcp_lib_result_pass "${msg}" 7062306a36Sopenharmony_ci else 7162306a36Sopenharmony_ci echo -n "[FAIL] " 7262306a36Sopenharmony_ci echo "expected '$expected' got '$out'" 7362306a36Sopenharmony_ci mptcp_lib_result_fail "${msg} # different output" 7462306a36Sopenharmony_ci ret=1 7562306a36Sopenharmony_ci fi 7662306a36Sopenharmony_ci} 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list" 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_cidefault_limits="$(ip netns exec $ns1 ./pm_nl_ctl limits)" 8162306a36Sopenharmony_ciif mptcp_lib_expect_all_features; then 8262306a36Sopenharmony_ci check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 8362306a36Sopenharmony_cisubflows 2" "defaults limits" 8462306a36Sopenharmony_cifi 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 8762306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo 8862306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup 8962306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags 10.0.1.1" "simple add/get addr" 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" \ 9262306a36Sopenharmony_ci"id 1 flags 10.0.1.1 9362306a36Sopenharmony_ciid 2 flags subflow dev lo 10.0.1.2 9462306a36Sopenharmony_ciid 3 flags signal,backup 10.0.1.3" "dump addrs" 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl del 2 9762306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr" 9862306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" \ 9962306a36Sopenharmony_ci"id 1 flags 10.0.1.1 10062306a36Sopenharmony_ciid 3 flags signal,backup 10.0.1.3" "dump addrs after del" 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 2>/dev/null 10362306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr" 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 flags signal 10662306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment" 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_cifor i in `seq 5 9`; do 10962306a36Sopenharmony_ci ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1 11062306a36Sopenharmony_cidone 11162306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit" 11262306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit" 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl del 9 11562306a36Sopenharmony_cifor i in `seq 10 255`; do 11662306a36Sopenharmony_ci ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9 id $i 11762306a36Sopenharmony_ci ip netns exec $ns1 ./pm_nl_ctl del $i 11862306a36Sopenharmony_cidone 11962306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 12062306a36Sopenharmony_ciid 3 flags signal,backup 10.0.1.3 12162306a36Sopenharmony_ciid 4 flags signal 10.0.1.4 12262306a36Sopenharmony_ciid 5 flags signal 10.0.1.5 12362306a36Sopenharmony_ciid 6 flags signal 10.0.1.6 12462306a36Sopenharmony_ciid 7 flags signal 10.0.1.7 12562306a36Sopenharmony_ciid 8 flags signal 10.0.1.8" "id limit" 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl flush 12862306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs" 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl limits 9 1 2>/dev/null 13162306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "rcv addrs above hard limit" 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl limits 1 9 2>/dev/null 13462306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "subflows above hard limit" 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl limits 8 8 13762306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8 13862306a36Sopenharmony_cisubflows 8" "set limits" 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl flush 14162306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 14262306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 14362306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 id 100 14462306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 14562306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.5 id 254 14662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.6 14762306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.7 14862306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.8 14962306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 15062306a36Sopenharmony_ciid 2 flags 10.0.1.2 15162306a36Sopenharmony_ciid 3 flags 10.0.1.7 15262306a36Sopenharmony_ciid 4 flags 10.0.1.8 15362306a36Sopenharmony_ciid 100 flags 10.0.1.3 15462306a36Sopenharmony_ciid 101 flags 10.0.1.4 15562306a36Sopenharmony_ciid 254 flags 10.0.1.5 15662306a36Sopenharmony_ciid 255 flags 10.0.1.6" "set ids" 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl flush 15962306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.1 16062306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.2 id 254 16162306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.3 16262306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.4 16362306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.5 id 253 16462306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.6 16562306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.7 16662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.0.8 16762306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.0.1 16862306a36Sopenharmony_ciid 2 flags 10.0.0.4 16962306a36Sopenharmony_ciid 3 flags 10.0.0.6 17062306a36Sopenharmony_ciid 4 flags 10.0.0.7 17162306a36Sopenharmony_ciid 5 flags 10.0.0.8 17262306a36Sopenharmony_ciid 253 flags 10.0.0.5 17362306a36Sopenharmony_ciid 254 flags 10.0.0.2 17462306a36Sopenharmony_ciid 255 flags 10.0.0.3" "wrap-around ids" 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl flush 17762306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags subflow 17862306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags backup 17962306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 18062306a36Sopenharmony_cisubflow,backup 10.0.1.1" "set flags (backup)" 18162306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup 18262306a36Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 18362306a36Sopenharmony_cisubflow 10.0.1.1" " (nobackup)" 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci# fullmesh support has been added later 18662306a36Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh 2>/dev/null 18762306a36Sopenharmony_ciif ip netns exec $ns1 ./pm_nl_ctl dump | grep -q "fullmesh" || 18862306a36Sopenharmony_ci mptcp_lib_expect_all_features; then 18962306a36Sopenharmony_ci check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 19062306a36Sopenharmony_cisubflow,fullmesh 10.0.1.1" " (fullmesh)" 19162306a36Sopenharmony_ci ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh 19262306a36Sopenharmony_ci check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 19362306a36Sopenharmony_cisubflow 10.0.1.1" " (nofullmesh)" 19462306a36Sopenharmony_ci ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh 19562306a36Sopenharmony_ci check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 19662306a36Sopenharmony_cisubflow,backup,fullmesh 10.0.1.1" " (backup,fullmesh)" 19762306a36Sopenharmony_cielse 19862306a36Sopenharmony_ci for st in fullmesh nofullmesh backup,fullmesh; do 19962306a36Sopenharmony_ci st=" (${st})" 20062306a36Sopenharmony_ci printf "%-50s%s\n" "${st}" "[SKIP]" 20162306a36Sopenharmony_ci mptcp_lib_result_skip "${st}" 20262306a36Sopenharmony_ci done 20362306a36Sopenharmony_cifi 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_cimptcp_lib_result_print_all_tap 20662306a36Sopenharmony_ciexit $ret 207