Merge 6.4-rc5 into usb-next
[platform/kernel/linux-starfive.git] / tools / testing / selftests / net / mptcp / pm_netlink.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3
4 . "$(dirname "${0}")/mptcp_lib.sh"
5
6 ksft_skip=4
7 ret=0
8
9 usage() {
10         echo "Usage: $0 [ -h ]"
11 }
12
13
14 while 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
25 done
26
27 sec=$(date +%s)
28 rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
29 ns1="ns1-$rndh"
30 err=$(mktemp)
31 ret=0
32
33 cleanup()
34 {
35         rm -f $err
36         ip netns del $ns1
37 }
38
39 mptcp_lib_check_mptcp
40
41 ip -Version > /dev/null 2>&1
42 if [ $? -ne 0 ];then
43         echo "SKIP: Could not run test without ip tool"
44         exit $ksft_skip
45 fi
46
47 trap cleanup EXIT
48
49 ip netns add $ns1 || exit $ksft_skip
50 ip -net $ns1 link set lo up
51 ip netns exec $ns1 sysctl -q net.mptcp.enabled=1
52
53 check()
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
75 check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list"
76 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
77 subflows 2" "defaults limits"
78
79 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
80 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo
81 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup
82 check "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags  10.0.1.1" "simple add/get addr"
83
84 check "ip netns exec $ns1 ./pm_nl_ctl dump" \
85 "id 1 flags  10.0.1.1
86 id 2 flags subflow dev lo 10.0.1.2
87 id 3 flags signal,backup 10.0.1.3" "dump addrs"
88
89 ip netns exec $ns1 ./pm_nl_ctl del 2
90 check "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr"
91 check "ip netns exec $ns1 ./pm_nl_ctl dump" \
92 "id 1 flags  10.0.1.1
93 id 3 flags signal,backup 10.0.1.3" "dump addrs after del"
94
95 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3
96 check "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr"
97
98 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 flags signal
99 check "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment"
100
101 for 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
103 done
104 check "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit"
105 check "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit"
106
107 ip netns exec $ns1 ./pm_nl_ctl del 9
108 for 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
111 done
112 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags  10.0.1.1
113 id 3 flags signal,backup 10.0.1.3
114 id 4 flags signal 10.0.1.4
115 id 5 flags signal 10.0.1.5
116 id 6 flags signal 10.0.1.6
117 id 7 flags signal 10.0.1.7
118 id 8 flags signal 10.0.1.8" "id limit"
119
120 ip netns exec $ns1 ./pm_nl_ctl flush
121 check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs"
122
123 ip netns exec $ns1 ./pm_nl_ctl limits 9 1
124 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
125 subflows 2" "rcv addrs above hard limit"
126
127 ip netns exec $ns1 ./pm_nl_ctl limits 1 9
128 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
129 subflows 2" "subflows above hard limit"
130
131 ip netns exec $ns1 ./pm_nl_ctl limits 8 8
132 check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8
133 subflows 8" "set limits"
134
135 ip netns exec $ns1 ./pm_nl_ctl flush
136 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
137 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2
138 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 id 100
139 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4
140 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.5 id 254
141 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.6
142 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.7
143 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.8
144 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags  10.0.1.1
145 id 2 flags  10.0.1.2
146 id 3 flags  10.0.1.7
147 id 4 flags  10.0.1.8
148 id 100 flags  10.0.1.3
149 id 101 flags  10.0.1.4
150 id 254 flags  10.0.1.5
151 id 255 flags  10.0.1.6" "set ids"
152
153 ip netns exec $ns1 ./pm_nl_ctl flush
154 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.1
155 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.2 id 254
156 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.3
157 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.4
158 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.5 id 253
159 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.6
160 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.7
161 ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.8
162 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags  10.0.0.1
163 id 2 flags  10.0.0.4
164 id 3 flags  10.0.0.6
165 id 4 flags  10.0.0.7
166 id 5 flags  10.0.0.8
167 id 253 flags  10.0.0.5
168 id 254 flags  10.0.0.2
169 id 255 flags  10.0.0.3" "wrap-around ids"
170
171 ip netns exec $ns1 ./pm_nl_ctl flush
172 ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags subflow
173 ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags backup
174 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
175 subflow,backup 10.0.1.1" "set flags (backup)"
176 ip netns exec $ns1 ./pm_nl_ctl set 10.0.1.1 flags nobackup
177 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
178 subflow 10.0.1.1" "          (nobackup)"
179 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags fullmesh
180 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
181 subflow,fullmesh 10.0.1.1" "          (fullmesh)"
182 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags nofullmesh
183 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
184 subflow 10.0.1.1" "          (nofullmesh)"
185 ip netns exec $ns1 ./pm_nl_ctl set id 1 flags backup,fullmesh
186 check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags \
187 subflow,backup,fullmesh 10.0.1.1" "          (backup,fullmesh)"
188
189 exit $ret