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" 76 77default_limits="$(ip netns exec $ns1 ./pm_nl_ctl limits)" 78if mptcp_lib_expect_all_features; then 79 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 80subflows 0" "defaults limits" 81fi 82 83ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 84ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo 85ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup 86check "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags 10.0.1.1" "simple add/get addr" 87 88check "ip netns exec $ns1 ./pm_nl_ctl dump" \ 89"id 1 flags 10.0.1.1 90id 2 flags subflow dev lo 10.0.1.2 91id 3 flags signal,backup 10.0.1.3" "dump addrs" 92 93ip netns exec $ns1 ./pm_nl_ctl del 2 94check "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr" 95check "ip netns exec $ns1 ./pm_nl_ctl dump" \ 96"id 1 flags 10.0.1.1 97id 3 flags signal,backup 10.0.1.3" "dump addrs after del" 98 99ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 100check "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr" 101 102ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 id 10 flags signal 103check "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment" 104 105for i in `seq 5 9`; do 106 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1 107done 108check "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit" 109check "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit" 110 111for i in `seq 9 256`; do 112 ip netns exec $ns1 ./pm_nl_ctl del $i 113 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9 114done 115check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 116id 3 flags signal,backup 10.0.1.3 117id 4 flags signal 10.0.1.4 118id 5 flags signal 10.0.1.5 119id 6 flags signal 10.0.1.6 120id 7 flags signal 10.0.1.7 121id 8 flags signal 10.0.1.8" "id limit" 122 123ip netns exec $ns1 ./pm_nl_ctl flush 124check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs" 125 126ip netns exec $ns1 ./pm_nl_ctl limits 9 1 127check "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "rcv addrs above hard limit" 128 129ip netns exec $ns1 ./pm_nl_ctl limits 1 9 130check "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "subflows above hard limit" 131 132ip netns exec $ns1 ./pm_nl_ctl limits 8 8 133check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8 134subflows 8" "set limits" 135 136exit $ret 137