1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun 4*4882a593Smuzhiyunksft_skip=4 5*4882a593Smuzhiyunret=0 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunusage() { 8*4882a593Smuzhiyun echo "Usage: $0 [ -h ]" 9*4882a593Smuzhiyun} 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunwhile getopts "$optstring" option;do 13*4882a593Smuzhiyun case "$option" in 14*4882a593Smuzhiyun "h") 15*4882a593Smuzhiyun usage $0 16*4882a593Smuzhiyun exit 0 17*4882a593Smuzhiyun ;; 18*4882a593Smuzhiyun "?") 19*4882a593Smuzhiyun usage $0 20*4882a593Smuzhiyun exit 1 21*4882a593Smuzhiyun ;; 22*4882a593Smuzhiyun esac 23*4882a593Smuzhiyundone 24*4882a593Smuzhiyun 25*4882a593Smuzhiyunsec=$(date +%s) 26*4882a593Smuzhiyunrndh=$(printf %x $sec)-$(mktemp -u XXXXXX) 27*4882a593Smuzhiyunns1="ns1-$rndh" 28*4882a593Smuzhiyunerr=$(mktemp) 29*4882a593Smuzhiyunret=0 30*4882a593Smuzhiyun 31*4882a593Smuzhiyuncleanup() 32*4882a593Smuzhiyun{ 33*4882a593Smuzhiyun rm -f $err 34*4882a593Smuzhiyun ip netns del $ns1 35*4882a593Smuzhiyun} 36*4882a593Smuzhiyun 37*4882a593Smuzhiyunip -Version > /dev/null 2>&1 38*4882a593Smuzhiyunif [ $? -ne 0 ];then 39*4882a593Smuzhiyun echo "SKIP: Could not run test without ip tool" 40*4882a593Smuzhiyun exit $ksft_skip 41*4882a593Smuzhiyunfi 42*4882a593Smuzhiyun 43*4882a593Smuzhiyuntrap cleanup EXIT 44*4882a593Smuzhiyun 45*4882a593Smuzhiyunip netns add $ns1 || exit $ksft_skip 46*4882a593Smuzhiyunip -net $ns1 link set lo up 47*4882a593Smuzhiyunip netns exec $ns1 sysctl -q net.mptcp.enabled=1 48*4882a593Smuzhiyun 49*4882a593Smuzhiyuncheck() 50*4882a593Smuzhiyun{ 51*4882a593Smuzhiyun local cmd="$1" 52*4882a593Smuzhiyun local expected="$2" 53*4882a593Smuzhiyun local msg="$3" 54*4882a593Smuzhiyun local out=`$cmd 2>$err` 55*4882a593Smuzhiyun local cmd_ret=$? 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun printf "%-50s %s" "$msg" 58*4882a593Smuzhiyun if [ $cmd_ret -ne 0 ]; then 59*4882a593Smuzhiyun echo "[FAIL] command execution '$cmd' stderr " 60*4882a593Smuzhiyun cat $err 61*4882a593Smuzhiyun ret=1 62*4882a593Smuzhiyun elif [ "$out" = "$expected" ]; then 63*4882a593Smuzhiyun echo "[ OK ]" 64*4882a593Smuzhiyun else 65*4882a593Smuzhiyun echo -n "[FAIL] " 66*4882a593Smuzhiyun echo "expected '$expected' got '$out'" 67*4882a593Smuzhiyun ret=1 68*4882a593Smuzhiyun fi 69*4882a593Smuzhiyun} 70*4882a593Smuzhiyun 71*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list" 72*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 73*4882a593Smuzhiyunsubflows 0" "defaults limits" 74*4882a593Smuzhiyun 75*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 76*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo 77*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup 78*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags 10.0.1.1" "simple add/get addr" 79*4882a593Smuzhiyun 80*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl dump" \ 81*4882a593Smuzhiyun"id 1 flags 10.0.1.1 82*4882a593Smuzhiyunid 2 flags subflow dev lo 10.0.1.2 83*4882a593Smuzhiyunid 3 flags signal,backup 10.0.1.3" "dump addrs" 84*4882a593Smuzhiyun 85*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl del 2 86*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr" 87*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl dump" \ 88*4882a593Smuzhiyun"id 1 flags 10.0.1.1 89*4882a593Smuzhiyunid 3 flags signal,backup 10.0.1.3" "dump addrs after del" 90*4882a593Smuzhiyun 91*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 92*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr" 93*4882a593Smuzhiyun 94*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 id 10 flags signal 95*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment" 96*4882a593Smuzhiyun 97*4882a593Smuzhiyunfor i in `seq 5 9`; do 98*4882a593Smuzhiyun ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1 99*4882a593Smuzhiyundone 100*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit" 101*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit" 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunfor i in `seq 9 256`; do 104*4882a593Smuzhiyun ip netns exec $ns1 ./pm_nl_ctl del $i 105*4882a593Smuzhiyun ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9 106*4882a593Smuzhiyundone 107*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1 108*4882a593Smuzhiyunid 3 flags signal,backup 10.0.1.3 109*4882a593Smuzhiyunid 4 flags signal 10.0.1.4 110*4882a593Smuzhiyunid 5 flags signal 10.0.1.5 111*4882a593Smuzhiyunid 6 flags signal 10.0.1.6 112*4882a593Smuzhiyunid 7 flags signal 10.0.1.7 113*4882a593Smuzhiyunid 8 flags signal 10.0.1.8" "id limit" 114*4882a593Smuzhiyun 115*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl flush 116*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs" 117*4882a593Smuzhiyun 118*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl limits 9 1 119*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 120*4882a593Smuzhiyunsubflows 0" "rcv addrs above hard limit" 121*4882a593Smuzhiyun 122*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl limits 1 9 123*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0 124*4882a593Smuzhiyunsubflows 0" "subflows above hard limit" 125*4882a593Smuzhiyun 126*4882a593Smuzhiyunip netns exec $ns1 ./pm_nl_ctl limits 8 8 127*4882a593Smuzhiyuncheck "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8 128*4882a593Smuzhiyunsubflows 8" "set limits" 129*4882a593Smuzhiyun 130*4882a593Smuzhiyunexit $ret 131