1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4. "$(dirname "${0}")/mptcp_lib.sh" 5 6ksft_skip=4 7ret=0 8 9usage() { 10 echo "Usage: $0 [ -h ]" 11} 12 13 14while getopts "$optstring" option;do 15 case "$option" in 16 "h") 17 usage $0 18 exit 0 19 ;; 20 "?") 21 usage $0 22 exit 1 23 ;; 24 esac 25done 26 27sec=$(date +%s) 28rndh=$(printf %x $sec)-$(mktemp -u XXXXXX) 29ns1="ns1-$rndh" 30err=$(mktemp) 31ret=0 32 33cleanup() 34{ 35 rm -f $err 36 ip netns del $ns1 37} 38 39mptcp_lib_check_mptcp 40 41ip -Version > /dev/null 2>&1 42if [ $? -ne 0 ];then 43 echo "SKIP: Could not run test without ip tool" 44 exit $ksft_skip 45fi 46 47trap cleanup EXIT 48 49ip netns add $ns1 || exit $ksft_skip 50ip -net $ns1 link set lo up 51ip netns exec $ns1 sysctl -q net.mptcp.enabled=1 52 53check() 54{ 55 local cmd="$1" 56 local expected="$2" 57 local msg="$3" 58 local out=`$cmd 2>$err` 59 local cmd_ret=$? 60 61 printf "%-50s %s" "$msg" 62 if [ $cmd_ret -ne 0 ]; then 63 echo "[FAIL] command execution '$cmd' stderr " 64 cat $err 65 ret=1 66 elif [ "$out" = "$expected" ]; then 67 echo "[ OK ]" 68 else 69 echo -n "[FAIL] " 70 echo "expected '$expected' got '$out'" 71 ret=1 72 fi 73} 74 75check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list" 76check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 77subflows 2" "defaults limits" 78 79ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 80ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo 81ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup 82check "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags 10.0.1.1" "simple add/get addr" 83 84check "ip netns exec $ns1 ./pm_nl_ctl dump" \ 85"id 1 flags 10.0.1.1 86id 2 flags subflow dev lo 10.0.1.2 87id 3 flags signal,backup 10.0.1.3" "dump addrs" 88 89ip netns exec $ns1 ./pm_nl_ctl del 2 90check "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr" 91check "ip netns exec $ns1 ./pm_nl_ctl dump" \ 92"id 1 flags 10.0.1.1 93id 3 flags signal,backup 10.0.1.3" "dump addrs after del" 94 95ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 96check "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr" 97 98ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 flags signal 99check "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment" 100 101for i in `seq 5 9`; do 102 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1 103done 104check "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit" 105check "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit" 106 107ip netns exec $ns1 ./pm_nl_ctl del 9 108for i in `seq 10 255`; do 109 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9 id $i 110 ip netns exec $ns1 ./pm_nl_ctl del $i 111done 112check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 113id 3 flags signal,backup 10.0.1.3 114id 4 flags signal 10.0.1.4 115id 5 flags signal 10.0.1.5 116id 6 flags signal 10.0.1.6 117id 7 flags signal 10.0.1.7 118id 8 flags signal 10.0.1.8" "id limit" 119 120ip netns exec $ns1 ./pm_nl_ctl flush 121check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs" 122 123ip netns exec $ns1 ./pm_nl_ctl limits 9 1 124check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 125subflows 2" "rcv addrs above hard limit" 126 127ip netns exec $ns1 ./pm_nl_ctl limits 1 9 128check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 129subflows 2" "subflows above hard limit" 130 131ip netns exec $ns1 ./pm_nl_ctl limits 8 8 132check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8 133subflows 8" "set limits" 134 135ip netns exec $ns1 ./pm_nl_ctl flush 136ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 137ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 138ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 id 100 139ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 140ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.5 id 254 141ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.6 142ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.7 143ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.8 144check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 145id 2 flags 10.0.1.2 146id 3 flags 10.0.1.7 147id 4 flags 10.0.1.8 148id 100 flags 10.0.1.3 149id 101 flags 10.0.1.4 150id 254 flags 10.0.1.5 151id 255 flags 10.0.1.6" "set ids" 152 153ip netns exec $ns1 ./pm_nl_ctl flush 154ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.1 155ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.2 id 254 156ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.3 157ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.4 158ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.5 id 253 159ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.6 160ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.7 161ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.8 162check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.0.1 163id 2 flags 10.0.0.4 164id 3 flags 10.0.0.6 165id 4 flags 10.0.0.7 166id 5 flags 10.0.0.8 167id 253 flags 10.0.0.5 168id 254 flags 10.0.0.2 169id 255 flags 10.0.0.3" "wrap-around ids" 170 171ip netns exec $ns1 ./pm_nl_ctl flush 172ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags subflow 173ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags backup 174check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 175subflow,backup 10.0.1.1" "set flags (backup)" 176ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup 177check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 178subflow 10.0.1.1" " (nobackup)" 179ip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh 180check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 181subflow,fullmesh 10.0.1.1" " (fullmesh)" 182ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh 183check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 184subflow 10.0.1.1" " (nofullmesh)" 185ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh 186check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \ 187subflow,backup,fullmesh 10.0.1.1" " (backup,fullmesh)" 188 189exit $ret 190