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 0" "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 id 10 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 107for i in `seq 9 256`; do 108 ip netns exec $ns1 ./pm_nl_ctl del $i 109 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9 110done 111check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 112id 3 flags signal,backup 10.0.1.3 113id 4 flags signal 10.0.1.4 114id 5 flags signal 10.0.1.5 115id 6 flags signal 10.0.1.6 116id 7 flags signal 10.0.1.7 117id 8 flags signal 10.0.1.8" "id limit" 118 119ip netns exec $ns1 ./pm_nl_ctl flush 120check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs" 121 122ip netns exec $ns1 ./pm_nl_ctl limits 9 1 123check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 124subflows 0" "rcv addrs above hard limit" 125 126ip netns exec $ns1 ./pm_nl_ctl limits 1 9 127check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 128subflows 0" "subflows above hard limit" 129 130ip netns exec $ns1 ./pm_nl_ctl limits 8 8 131check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8 132subflows 8" "set limits" 133 134exit $ret 135