0001
0002
0003
0004 ksft_skip=4
0005 ret=0
0006
0007 usage() {
0008 echo "Usage: $0 [ -h ]"
0009 }
0010
0011
0012 while getopts "$optstring" option;do
0013 case "$option" in
0014 "h")
0015 usage $0
0016 exit 0
0017 ;;
0018 "?")
0019 usage $0
0020 exit 1
0021 ;;
0022 esac
0023 done
0024
0025 sec=$(date +%s)
0026 rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
0027 ns1="ns1-$rndh"
0028 err=$(mktemp)
0029 ret=0
0030
0031 cleanup()
0032 {
0033 rm -f $err
0034 ip netns del $ns1
0035 }
0036
0037 ip -Version > /dev/null 2>&1
0038 if [ $? -ne 0 ];then
0039 echo "SKIP: Could not run test without ip tool"
0040 exit $ksft_skip
0041 fi
0042
0043 trap cleanup EXIT
0044
0045 ip netns add $ns1 || exit $ksft_skip
0046 ip -net $ns1 link set lo up
0047 ip netns exec $ns1 sysctl -q net.mptcp.enabled=1
0048
0049 check()
0050 {
0051 local cmd="$1"
0052 local expected="$2"
0053 local msg="$3"
0054 local out=`$cmd 2>$err`
0055 local cmd_ret=$?
0056
0057 printf "%-50s %s" "$msg"
0058 if [ $cmd_ret -ne 0 ]; then
0059 echo "[FAIL] command execution '$cmd' stderr "
0060 cat $err
0061 ret=1
0062 elif [ "$out" = "$expected" ]; then
0063 echo "[ OK ]"
0064 else
0065 echo -n "[FAIL] "
0066 echo "expected '$expected' got '$out'"
0067 ret=1
0068 fi
0069 }
0070
0071 check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list"
0072 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
0073 subflows 2" "defaults limits"
0074
0075 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
0076 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo
0077 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup
0078 check "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags 10.0.1.1" "simple add/get addr"
0079
0080 check "ip netns exec $ns1 ./pm_nl_ctl dump" \
0081 "id 1 flags 10.0.1.1
0082 id 2 flags subflow dev lo 10.0.1.2
0083 id 3 flags signal,backup 10.0.1.3" "dump addrs"
0084
0085 ip netns exec $ns1 ./pm_nl_ctl del 2
0086 check "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr"
0087 check "ip netns exec $ns1 ./pm_nl_ctl dump" \
0088 "id 1 flags 10.0.1.1
0089 id 3 flags signal,backup 10.0.1.3" "dump addrs after del"
0090
0091 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3
0092 check "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr"
0093
0094 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 flags signal
0095 check "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment"
0096
0097 for i in `seq 5 9`; do
0098 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1
0099 done
0100 check "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit"
0101 check "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit"
0102
0103 ip netns exec $ns1 ./pm_nl_ctl del 9
0104 for i in `seq 10 255`; do
0105 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9 id $i
0106 ip netns exec $ns1 ./pm_nl_ctl del $i
0107 done
0108 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1
0109 id 3 flags signal,backup 10.0.1.3
0110 id 4 flags signal 10.0.1.4
0111 id 5 flags signal 10.0.1.5
0112 id 6 flags signal 10.0.1.6
0113 id 7 flags signal 10.0.1.7
0114 id 8 flags signal 10.0.1.8" "id limit"
0115
0116 ip netns exec $ns1 ./pm_nl_ctl flush
0117 check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs"
0118
0119 ip netns exec $ns1 ./pm_nl_ctl limits 9 1
0120 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
0121 subflows 2" "rcv addrs above hard limit"
0122
0123 ip netns exec $ns1 ./pm_nl_ctl limits 1 9
0124 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
0125 subflows 2" "subflows above hard limit"
0126
0127 ip netns exec $ns1 ./pm_nl_ctl limits 8 8
0128 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8
0129 subflows 8" "set limits"
0130
0131 ip netns exec $ns1 ./pm_nl_ctl flush
0132 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
0133 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2
0134 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 id 100
0135 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4
0136 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.5 id 254
0137 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.6
0138 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.7
0139 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.8
0140 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1
0141 id 2 flags 10.0.1.2
0142 id 3 flags 10.0.1.7
0143 id 4 flags 10.0.1.8
0144 id 100 flags 10.0.1.3
0145 id 101 flags 10.0.1.4
0146 id 254 flags 10.0.1.5
0147 id 255 flags 10.0.1.6" "set ids"
0148
0149 ip netns exec $ns1 ./pm_nl_ctl flush
0150 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.1
0151 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.2 id 254
0152 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.3
0153 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.4
0154 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.5 id 253
0155 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.6
0156 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.7
0157 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.8
0158 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.0.1
0159 id 2 flags 10.0.0.4
0160 id 3 flags 10.0.0.6
0161 id 4 flags 10.0.0.7
0162 id 5 flags 10.0.0.8
0163 id 253 flags 10.0.0.5
0164 id 254 flags 10.0.0.2
0165 id 255 flags 10.0.0.3" "wrap-around ids"
0166
0167 ip netns exec $ns1 ./pm_nl_ctl flush
0168 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags subflow
0169 ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags backup
0170 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
0171 subflow,backup 10.0.1.1" "set flags (backup)"
0172 ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup
0173 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
0174 subflow 10.0.1.1" " (nobackup)"
0175 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh
0176 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
0177 subflow,fullmesh 10.0.1.1" " (fullmesh)"
0178 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh
0179 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
0180 subflow 10.0.1.1" " (nofullmesh)"
0181 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh
0182 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
0183 subflow,backup,fullmesh 10.0.1.1" " (backup,fullmesh)"
0184
0185 exit $ret