Commit | Line | Data |
---|---|---|
b08fbf24 PA |
1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0 | |
3 | ||
4 | ret=0 | |
5 | sin="" | |
6 | sout="" | |
7 | cin="" | |
8b819a84 | 8 | cinsent="" |
b08fbf24 PA |
9 | cout="" |
10 | ksft_skip=4 | |
5888a61c MB |
11 | timeout_poll=30 |
12 | timeout_test=$((timeout_poll * 2 + 1)) | |
dd72b0fe | 13 | mptcp_connect="" |
b08fbf24 | 14 | capture=0 |
af66d3e1 | 15 | checksum=0 |
a673321a | 16 | do_all_tests=1 |
b08fbf24 PA |
17 | |
18 | TEST_COUNT=0 | |
19 | ||
8d014eaa GT |
20 | # generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) == 0x30) || |
21 | # (ip6 && (ip6[74] & 0xf0) == 0x30)'" | |
22 | CBPF_MPTCP_SUBOPTION_ADD_ADDR="14, | |
23 | 48 0 0 0, | |
24 | 84 0 0 240, | |
25 | 21 0 3 64, | |
26 | 48 0 0 54, | |
27 | 84 0 0 240, | |
28 | 21 6 7 48, | |
29 | 48 0 0 0, | |
30 | 84 0 0 240, | |
31 | 21 0 4 96, | |
32 | 48 0 0 74, | |
33 | 84 0 0 240, | |
34 | 21 0 1 48, | |
35 | 6 0 0 65535, | |
36 | 6 0 0 0" | |
37 | ||
b08fbf24 PA |
38 | init() |
39 | { | |
40 | capout=$(mktemp) | |
41 | ||
42 | rndh=$(printf %x $sec)-$(mktemp -u XXXXXX) | |
43 | ||
44 | ns1="ns1-$rndh" | |
45 | ns2="ns2-$rndh" | |
46 | ||
47 | for netns in "$ns1" "$ns2";do | |
48 | ip netns add $netns || exit $ksft_skip | |
49 | ip -net $netns link set lo up | |
50 | ip netns exec $netns sysctl -q net.mptcp.enabled=1 | |
51 | ip netns exec $netns sysctl -q net.ipv4.conf.all.rp_filter=0 | |
52 | ip netns exec $netns sysctl -q net.ipv4.conf.default.rp_filter=0 | |
af66d3e1 GT |
53 | if [ $checksum -eq 1 ]; then |
54 | ip netns exec $netns sysctl -q net.mptcp.checksum_enabled=1 | |
55 | fi | |
b08fbf24 PA |
56 | done |
57 | ||
58 | # ns1 ns2 | |
59 | # ns1eth1 ns2eth1 | |
60 | # ns1eth2 ns2eth2 | |
61 | # ns1eth3 ns2eth3 | |
62 | # ns1eth4 ns2eth4 | |
63 | ||
64 | for i in `seq 1 4`; do | |
65 | ip link add ns1eth$i netns "$ns1" type veth peer name ns2eth$i netns "$ns2" | |
66 | ip -net "$ns1" addr add 10.0.$i.1/24 dev ns1eth$i | |
67 | ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad | |
68 | ip -net "$ns1" link set ns1eth$i up | |
69 | ||
70 | ip -net "$ns2" addr add 10.0.$i.2/24 dev ns2eth$i | |
71 | ip -net "$ns2" addr add dead:beef:$i::2/64 dev ns2eth$i nodad | |
72 | ip -net "$ns2" link set ns2eth$i up | |
73 | ||
74 | # let $ns2 reach any $ns1 address from any interface | |
75 | ip -net "$ns2" route add default via 10.0.$i.1 dev ns2eth$i metric 10$i | |
76 | done | |
77 | } | |
78 | ||
79 | cleanup_partial() | |
80 | { | |
81 | rm -f "$capout" | |
82 | ||
83 | for netns in "$ns1" "$ns2"; do | |
84 | ip netns del $netns | |
c2a55e8f | 85 | rm -f /tmp/$netns.{nstat,out} |
b08fbf24 PA |
86 | done |
87 | } | |
88 | ||
89 | cleanup() | |
90 | { | |
91 | rm -f "$cin" "$cout" | |
8b819a84 | 92 | rm -f "$sin" "$sout" "$cinsent" |
b08fbf24 PA |
93 | cleanup_partial |
94 | } | |
95 | ||
96 | reset() | |
97 | { | |
98 | cleanup_partial | |
99 | init | |
100 | } | |
101 | ||
00587187 FW |
102 | reset_with_cookies() |
103 | { | |
104 | reset | |
105 | ||
106 | for netns in "$ns1" "$ns2";do | |
107 | ip netns exec $netns sysctl -q net.ipv4.tcp_syncookies=2 | |
108 | done | |
109 | } | |
110 | ||
8d014eaa GT |
111 | reset_with_add_addr_timeout() |
112 | { | |
113 | local ip="${1:-4}" | |
114 | local tables | |
115 | ||
116 | tables="iptables" | |
117 | if [ $ip -eq 6 ]; then | |
118 | tables="ip6tables" | |
119 | fi | |
120 | ||
121 | reset | |
122 | ||
123 | ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1 | |
124 | ip netns exec $ns2 $tables -A OUTPUT -p tcp \ | |
125 | -m tcp --tcp-option 30 \ | |
126 | -m bpf --bytecode \ | |
127 | "$CBPF_MPTCP_SUBOPTION_ADD_ADDR" \ | |
128 | -j DROP | |
129 | } | |
130 | ||
af66d3e1 GT |
131 | reset_with_checksum() |
132 | { | |
133 | local ns1_enable=$1 | |
134 | local ns2_enable=$2 | |
135 | ||
136 | reset | |
137 | ||
138 | ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=$ns1_enable | |
139 | ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=$ns2_enable | |
140 | } | |
141 | ||
b08fbf24 PA |
142 | ip -Version > /dev/null 2>&1 |
143 | if [ $? -ne 0 ];then | |
144 | echo "SKIP: Could not run test without ip tool" | |
145 | exit $ksft_skip | |
146 | fi | |
147 | ||
8d014eaa GT |
148 | iptables -V > /dev/null 2>&1 |
149 | if [ $? -ne 0 ];then | |
150 | echo "SKIP: Could not run all tests without iptables tool" | |
151 | exit $ksft_skip | |
152 | fi | |
153 | ||
154 | ip6tables -V > /dev/null 2>&1 | |
155 | if [ $? -ne 0 ];then | |
156 | echo "SKIP: Could not run all tests without ip6tables tool" | |
157 | exit $ksft_skip | |
158 | fi | |
b08fbf24 | 159 | |
8b819a84 FW |
160 | print_file_err() |
161 | { | |
162 | ls -l "$1" 1>&2 | |
163 | echo "Trailing bytes are: " | |
164 | tail -c 27 "$1" | |
165 | } | |
166 | ||
b08fbf24 PA |
167 | check_transfer() |
168 | { | |
169 | in=$1 | |
170 | out=$2 | |
171 | what=$3 | |
172 | ||
173 | cmp "$in" "$out" > /dev/null 2>&1 | |
174 | if [ $? -ne 0 ] ;then | |
175 | echo "[ FAIL ] $what does not match (in, out):" | |
176 | print_file_err "$in" | |
177 | print_file_err "$out" | |
8b819a84 | 178 | ret=1 |
b08fbf24 PA |
179 | |
180 | return 1 | |
181 | fi | |
182 | ||
183 | return 0 | |
184 | } | |
185 | ||
186 | do_ping() | |
187 | { | |
188 | listener_ns="$1" | |
189 | connector_ns="$2" | |
190 | connect_addr="$3" | |
191 | ||
192 | ip netns exec ${connector_ns} ping -q -c 1 $connect_addr >/dev/null | |
193 | if [ $? -ne 0 ] ; then | |
194 | echo "$listener_ns -> $connect_addr connectivity [ FAIL ]" 1>&2 | |
195 | ret=1 | |
196 | fi | |
197 | } | |
198 | ||
8b819a84 FW |
199 | link_failure() |
200 | { | |
201 | ns="$1" | |
202 | ||
203 | l=$((RANDOM%4)) | |
204 | l=$((l+1)) | |
205 | ||
206 | veth="ns1eth$l" | |
207 | ip -net "$ns" link set "$veth" down | |
208 | } | |
209 | ||
523514ed GT |
210 | # $1: IP address |
211 | is_v6() | |
212 | { | |
213 | [ -z "${1##*:*}" ] | |
214 | } | |
215 | ||
b08fbf24 PA |
216 | do_transfer() |
217 | { | |
218 | listener_ns="$1" | |
219 | connector_ns="$2" | |
220 | cl_proto="$3" | |
221 | srv_proto="$4" | |
222 | connect_addr="$5" | |
8b819a84 | 223 | test_link_fail="$6" |
2e8cbf45 GT |
224 | addr_nr_ns1="$7" |
225 | addr_nr_ns2="$8" | |
8b819a84 | 226 | speed="$9" |
718eb44e | 227 | bkup="${10}" |
b08fbf24 PA |
228 | |
229 | port=$((10000+$TEST_COUNT)) | |
230 | TEST_COUNT=$((TEST_COUNT+1)) | |
231 | ||
232 | :> "$cout" | |
233 | :> "$sout" | |
234 | :> "$capout" | |
235 | ||
236 | if [ $capture -eq 1 ]; then | |
237 | if [ -z $SUDO_USER ] ; then | |
238 | capuser="" | |
239 | else | |
240 | capuser="-Z $SUDO_USER" | |
241 | fi | |
242 | ||
00587187 | 243 | capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}") |
b08fbf24 PA |
244 | |
245 | echo "Capturing traffic for test $TEST_COUNT into $capfile" | |
246 | ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 & | |
247 | cappid=$! | |
248 | ||
249 | sleep 1 | |
250 | fi | |
251 | ||
c2a55e8f MB |
252 | NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ |
253 | nstat -n | |
254 | NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ | |
255 | nstat -n | |
256 | ||
8d014eaa | 257 | if [ $speed = "fast" ]; then |
dd72b0fe | 258 | mptcp_connect="./mptcp_connect -j" |
8da6229b GT |
259 | elif [ $speed = "slow" ]; then |
260 | mptcp_connect="./mptcp_connect -r 50" | |
261 | elif [ $speed = "least" ]; then | |
262 | mptcp_connect="./mptcp_connect -r 10" | |
dd72b0fe GT |
263 | fi |
264 | ||
523514ed GT |
265 | local local_addr |
266 | if is_v6 "${connect_addr}"; then | |
267 | local_addr="::" | |
268 | else | |
269 | local_addr="0.0.0.0" | |
270 | fi | |
271 | ||
5888a61c MB |
272 | timeout ${timeout_test} \ |
273 | ip netns exec ${listener_ns} \ | |
274 | $mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \ | |
275 | ${local_addr} < "$sin" > "$sout" & | |
b08fbf24 PA |
276 | spid=$! |
277 | ||
278 | sleep 1 | |
279 | ||
8b819a84 | 280 | if [ "$test_link_fail" -eq 0 ];then |
5888a61c MB |
281 | timeout ${timeout_test} \ |
282 | ip netns exec ${connector_ns} \ | |
283 | $mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ | |
284 | $connect_addr < "$cin" > "$cout" & | |
8b819a84 | 285 | else |
5888a61c MB |
286 | ( cat "$cin" ; sleep 2; link_failure $listener_ns ; cat "$cin" ) | \ |
287 | tee "$cinsent" | \ | |
288 | timeout ${timeout_test} \ | |
289 | ip netns exec ${connector_ns} \ | |
290 | $mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \ | |
291 | $connect_addr > "$cout" & | |
8b819a84 | 292 | fi |
b08fbf24 PA |
293 | cpid=$! |
294 | ||
6208fd82 GT |
295 | if [ $addr_nr_ns1 -gt 0 ]; then |
296 | let add_nr_ns1=addr_nr_ns1 | |
297 | counter=2 | |
298 | sleep 1 | |
299 | while [ $add_nr_ns1 -gt 0 ]; do | |
300 | local addr | |
301 | if is_v6 "${connect_addr}"; then | |
302 | addr="dead:beef:$counter::1" | |
303 | else | |
304 | addr="10.0.$counter.1" | |
305 | fi | |
306 | ip netns exec $ns1 ./pm_nl_ctl add $addr flags signal | |
307 | let counter+=1 | |
308 | let add_nr_ns1-=1 | |
309 | done | |
310 | sleep 1 | |
311 | elif [ $addr_nr_ns1 -lt 0 ]; then | |
2e8cbf45 | 312 | let rm_nr_ns1=-addr_nr_ns1 |
6fe4ccdc GT |
313 | if [ $rm_nr_ns1 -lt 8 ]; then |
314 | counter=1 | |
f87744ad GT |
315 | dump=(`ip netns exec ${listener_ns} ./pm_nl_ctl dump`) |
316 | if [ ${#dump[@]} -gt 0 ]; then | |
317 | id=${dump[1]} | |
6fe4ccdc | 318 | sleep 1 |
f87744ad GT |
319 | |
320 | while [ $counter -le $rm_nr_ns1 ] | |
321 | do | |
322 | ip netns exec ${listener_ns} ./pm_nl_ctl del $id | |
323 | sleep 1 | |
324 | let counter+=1 | |
325 | let id+=1 | |
326 | done | |
327 | fi | |
5e287fe7 | 328 | elif [ $rm_nr_ns1 -eq 8 ]; then |
dd72b0fe | 329 | sleep 1 |
6fe4ccdc | 330 | ip netns exec ${listener_ns} ./pm_nl_ctl flush |
5e287fe7 GT |
331 | elif [ $rm_nr_ns1 -eq 9 ]; then |
332 | sleep 1 | |
333 | ip netns exec ${listener_ns} ./pm_nl_ctl del 0 ${connect_addr} | |
6fe4ccdc | 334 | fi |
dd72b0fe GT |
335 | fi |
336 | ||
6208fd82 GT |
337 | if [ $addr_nr_ns2 -gt 0 ]; then |
338 | let add_nr_ns2=addr_nr_ns2 | |
339 | counter=3 | |
340 | sleep 1 | |
341 | while [ $add_nr_ns2 -gt 0 ]; do | |
342 | local addr | |
343 | if is_v6 "${connect_addr}"; then | |
344 | addr="dead:beef:$counter::2" | |
345 | else | |
346 | addr="10.0.$counter.2" | |
347 | fi | |
348 | ip netns exec $ns2 ./pm_nl_ctl add $addr flags subflow | |
349 | let counter+=1 | |
350 | let add_nr_ns2-=1 | |
351 | done | |
352 | sleep 1 | |
353 | elif [ $addr_nr_ns2 -lt 0 ]; then | |
2e8cbf45 | 354 | let rm_nr_ns2=-addr_nr_ns2 |
6fe4ccdc GT |
355 | if [ $rm_nr_ns2 -lt 8 ]; then |
356 | counter=1 | |
f87744ad GT |
357 | dump=(`ip netns exec ${connector_ns} ./pm_nl_ctl dump`) |
358 | if [ ${#dump[@]} -gt 0 ]; then | |
359 | id=${dump[1]} | |
6fe4ccdc | 360 | sleep 1 |
f87744ad GT |
361 | |
362 | while [ $counter -le $rm_nr_ns2 ] | |
363 | do | |
364 | ip netns exec ${connector_ns} ./pm_nl_ctl del $id | |
365 | sleep 1 | |
366 | let counter+=1 | |
367 | let id+=1 | |
368 | done | |
369 | fi | |
5e287fe7 | 370 | elif [ $rm_nr_ns2 -eq 8 ]; then |
dd72b0fe | 371 | sleep 1 |
6fe4ccdc | 372 | ip netns exec ${connector_ns} ./pm_nl_ctl flush |
5e287fe7 GT |
373 | elif [ $rm_nr_ns2 -eq 9 ]; then |
374 | local addr | |
375 | if is_v6 "${connect_addr}"; then | |
376 | addr="dead:beef:1::2" | |
377 | else | |
378 | addr="10.0.1.2" | |
379 | fi | |
380 | sleep 1 | |
381 | ip netns exec ${connector_ns} ./pm_nl_ctl del 0 $addr | |
6fe4ccdc | 382 | fi |
dd72b0fe GT |
383 | fi |
384 | ||
718eb44e GT |
385 | if [ ! -z $bkup ]; then |
386 | sleep 1 | |
387 | for netns in "$ns1" "$ns2"; do | |
388 | dump=(`ip netns exec $netns ./pm_nl_ctl dump`) | |
389 | if [ ${#dump[@]} -gt 0 ]; then | |
390 | addr=${dump[${#dump[@]} - 1]} | |
391 | backup="ip netns exec $netns ./pm_nl_ctl set $addr flags $bkup" | |
392 | $backup | |
393 | fi | |
394 | done | |
395 | fi | |
396 | ||
b08fbf24 PA |
397 | wait $cpid |
398 | retc=$? | |
399 | wait $spid | |
400 | rets=$? | |
401 | ||
402 | if [ $capture -eq 1 ]; then | |
403 | sleep 1 | |
404 | kill $cappid | |
405 | fi | |
406 | ||
c2a55e8f MB |
407 | NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \ |
408 | nstat | grep Tcp > /tmp/${listener_ns}.out | |
409 | NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \ | |
410 | nstat | grep Tcp > /tmp/${connector_ns}.out | |
411 | ||
b08fbf24 PA |
412 | if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then |
413 | echo " client exit code $retc, server $rets" 1>&2 | |
8b974778 | 414 | echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2 |
c2a55e8f MB |
415 | ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port" |
416 | cat /tmp/${listener_ns}.out | |
8b974778 | 417 | echo -e "\nnetns ${connector_ns} socket stat for ${port}:" 1>&2 |
c2a55e8f MB |
418 | ip netns exec ${connector_ns} ss -Menita 1>&2 -o "dport = :$port" |
419 | cat /tmp/${connector_ns}.out | |
b08fbf24 PA |
420 | |
421 | cat "$capout" | |
8b819a84 | 422 | ret=1 |
b08fbf24 PA |
423 | return 1 |
424 | fi | |
425 | ||
426 | check_transfer $sin $cout "file received by client" | |
427 | retc=$? | |
8b819a84 FW |
428 | if [ "$test_link_fail" -eq 0 ];then |
429 | check_transfer $cin $sout "file received by server" | |
430 | else | |
431 | check_transfer $cinsent $sout "file received by server" | |
432 | fi | |
b08fbf24 PA |
433 | rets=$? |
434 | ||
435 | if [ $retc -eq 0 ] && [ $rets -eq 0 ];then | |
436 | cat "$capout" | |
437 | return 0 | |
438 | fi | |
439 | ||
440 | cat "$capout" | |
441 | return 1 | |
442 | } | |
443 | ||
444 | make_file() | |
445 | { | |
446 | name=$1 | |
447 | who=$2 | |
8b819a84 | 448 | size=$3 |
b08fbf24 | 449 | |
8b819a84 | 450 | dd if=/dev/urandom of="$name" bs=1024 count=$size 2> /dev/null |
b08fbf24 PA |
451 | echo -e "\nMPTCP_TEST_FILE_END_MARKER" >> "$name" |
452 | ||
8b819a84 | 453 | echo "Created $name (size $size KB) containing data sent by $who" |
b08fbf24 PA |
454 | } |
455 | ||
456 | run_tests() | |
457 | { | |
458 | listener_ns="$1" | |
459 | connector_ns="$2" | |
460 | connect_addr="$3" | |
8b819a84 | 461 | test_linkfail="${4:-0}" |
2e8cbf45 GT |
462 | addr_nr_ns1="${5:-0}" |
463 | addr_nr_ns2="${6:-0}" | |
8b819a84 | 464 | speed="${7:-fast}" |
718eb44e | 465 | bkup="${8:-""}" |
b08fbf24 | 466 | lret=0 |
8b819a84 FW |
467 | oldin="" |
468 | ||
469 | if [ "$test_linkfail" -eq 1 ];then | |
470 | size=$((RANDOM%1024)) | |
471 | size=$((size+1)) | |
472 | size=$((size*128)) | |
473 | ||
474 | oldin=$(mktemp) | |
475 | cp "$cin" "$oldin" | |
476 | make_file "$cin" "client" $size | |
477 | fi | |
b08fbf24 | 478 | |
8d014eaa | 479 | do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP ${connect_addr} \ |
2e8cbf45 | 480 | ${test_linkfail} ${addr_nr_ns1} ${addr_nr_ns2} ${speed} ${bkup} |
b08fbf24 | 481 | lret=$? |
8b819a84 FW |
482 | |
483 | if [ "$test_linkfail" -eq 1 ];then | |
484 | cp "$oldin" "$cin" | |
485 | rm -f "$oldin" | |
486 | fi | |
487 | ||
b08fbf24 PA |
488 | if [ $lret -ne 0 ]; then |
489 | ret=$lret | |
490 | return | |
491 | fi | |
492 | } | |
493 | ||
af66d3e1 GT |
494 | chk_csum_nr() |
495 | { | |
496 | local msg=${1:-""} | |
497 | local count | |
498 | local dump_stats | |
499 | ||
500 | if [ ! -z "$msg" ]; then | |
501 | printf "%02u" "$TEST_COUNT" | |
502 | else | |
503 | echo -n " " | |
504 | fi | |
505 | printf " %-36s %s" "$msg" "sum" | |
506 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'` | |
507 | [ -z "$count" ] && count=0 | |
508 | if [ "$count" != 0 ]; then | |
509 | echo "[fail] got $count data checksum error[s] expected 0" | |
510 | ret=1 | |
511 | dump_stats=1 | |
512 | else | |
513 | echo -n "[ ok ]" | |
514 | fi | |
515 | echo -n " - csum " | |
516 | count=`ip netns exec $ns2 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'` | |
517 | [ -z "$count" ] && count=0 | |
518 | if [ "$count" != 0 ]; then | |
519 | echo "[fail] got $count data checksum error[s] expected 0" | |
520 | ret=1 | |
521 | dump_stats=1 | |
522 | else | |
523 | echo "[ ok ]" | |
524 | fi | |
525 | if [ "${dump_stats}" = 1 ]; then | |
526 | echo Server ns stats | |
527 | ip netns exec $ns1 nstat -as | grep MPTcp | |
528 | echo Client ns stats | |
529 | ip netns exec $ns2 nstat -as | grep MPTcp | |
530 | fi | |
531 | } | |
532 | ||
b08fbf24 PA |
533 | chk_join_nr() |
534 | { | |
535 | local msg="$1" | |
536 | local syn_nr=$2 | |
537 | local syn_ack_nr=$3 | |
538 | local ack_nr=$4 | |
539 | local count | |
540 | local dump_stats | |
541 | ||
00587187 | 542 | printf "%02u %-36s %s" "$TEST_COUNT" "$msg" "syn" |
b08fbf24 PA |
543 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinSynRx | awk '{print $2}'` |
544 | [ -z "$count" ] && count=0 | |
545 | if [ "$count" != "$syn_nr" ]; then | |
546 | echo "[fail] got $count JOIN[s] syn expected $syn_nr" | |
547 | ret=1 | |
548 | dump_stats=1 | |
549 | else | |
550 | echo -n "[ ok ]" | |
551 | fi | |
552 | ||
553 | echo -n " - synack" | |
554 | count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinSynAckRx | awk '{print $2}'` | |
555 | [ -z "$count" ] && count=0 | |
556 | if [ "$count" != "$syn_ack_nr" ]; then | |
557 | echo "[fail] got $count JOIN[s] synack expected $syn_ack_nr" | |
558 | ret=1 | |
559 | dump_stats=1 | |
560 | else | |
561 | echo -n "[ ok ]" | |
562 | fi | |
563 | ||
564 | echo -n " - ack" | |
565 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinAckRx | awk '{print $2}'` | |
566 | [ -z "$count" ] && count=0 | |
567 | if [ "$count" != "$ack_nr" ]; then | |
568 | echo "[fail] got $count JOIN[s] ack expected $ack_nr" | |
569 | ret=1 | |
570 | dump_stats=1 | |
571 | else | |
572 | echo "[ ok ]" | |
573 | fi | |
574 | if [ "${dump_stats}" = 1 ]; then | |
575 | echo Server ns stats | |
576 | ip netns exec $ns1 nstat -as | grep MPTcp | |
577 | echo Client ns stats | |
578 | ip netns exec $ns2 nstat -as | grep MPTcp | |
579 | fi | |
af66d3e1 GT |
580 | if [ $checksum -eq 1 ]; then |
581 | chk_csum_nr | |
582 | fi | |
b08fbf24 PA |
583 | } |
584 | ||
be613160 GT |
585 | chk_add_nr() |
586 | { | |
587 | local add_nr=$1 | |
588 | local echo_nr=$2 | |
8a127bf6 GT |
589 | local port_nr=${3:-0} |
590 | local syn_nr=${4:-$port_nr} | |
591 | local syn_ack_nr=${5:-$port_nr} | |
592 | local ack_nr=${6:-$port_nr} | |
593 | local mis_syn_nr=${7:-0} | |
594 | local mis_ack_nr=${8:-0} | |
be613160 GT |
595 | local count |
596 | local dump_stats | |
597 | ||
598 | printf "%-39s %s" " " "add" | |
599 | count=`ip netns exec $ns2 nstat -as | grep MPTcpExtAddAddr | awk '{print $2}'` | |
600 | [ -z "$count" ] && count=0 | |
601 | if [ "$count" != "$add_nr" ]; then | |
602 | echo "[fail] got $count ADD_ADDR[s] expected $add_nr" | |
603 | ret=1 | |
604 | dump_stats=1 | |
605 | else | |
606 | echo -n "[ ok ]" | |
607 | fi | |
608 | ||
609 | echo -n " - echo " | |
610 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtEchoAdd | awk '{print $2}'` | |
611 | [ -z "$count" ] && count=0 | |
612 | if [ "$count" != "$echo_nr" ]; then | |
613 | echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr" | |
614 | ret=1 | |
615 | dump_stats=1 | |
616 | else | |
8a127bf6 GT |
617 | echo -n "[ ok ]" |
618 | fi | |
619 | ||
620 | if [ $port_nr -gt 0 ]; then | |
621 | echo -n " - pt " | |
622 | count=`ip netns exec $ns2 nstat -as | grep MPTcpExtPortAdd | awk '{print $2}'` | |
623 | [ -z "$count" ] && count=0 | |
624 | if [ "$count" != "$port_nr" ]; then | |
625 | echo "[fail] got $count ADD_ADDR[s] with a port-number expected $port_nr" | |
626 | ret=1 | |
627 | dump_stats=1 | |
628 | else | |
629 | echo "[ ok ]" | |
630 | fi | |
631 | ||
632 | printf "%-39s %s" " " "syn" | |
633 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinPortSynRx | | |
634 | awk '{print $2}'` | |
635 | [ -z "$count" ] && count=0 | |
636 | if [ "$count" != "$syn_nr" ]; then | |
637 | echo "[fail] got $count JOIN[s] syn with a different \ | |
638 | port-number expected $syn_nr" | |
639 | ret=1 | |
640 | dump_stats=1 | |
641 | else | |
642 | echo -n "[ ok ]" | |
643 | fi | |
644 | ||
645 | echo -n " - synack" | |
646 | count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinPortSynAckRx | | |
647 | awk '{print $2}'` | |
648 | [ -z "$count" ] && count=0 | |
649 | if [ "$count" != "$syn_ack_nr" ]; then | |
650 | echo "[fail] got $count JOIN[s] synack with a different \ | |
651 | port-number expected $syn_ack_nr" | |
652 | ret=1 | |
653 | dump_stats=1 | |
654 | else | |
655 | echo -n "[ ok ]" | |
656 | fi | |
657 | ||
658 | echo -n " - ack" | |
659 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinPortAckRx | | |
660 | awk '{print $2}'` | |
661 | [ -z "$count" ] && count=0 | |
662 | if [ "$count" != "$ack_nr" ]; then | |
663 | echo "[fail] got $count JOIN[s] ack with a different \ | |
664 | port-number expected $ack_nr" | |
665 | ret=1 | |
666 | dump_stats=1 | |
667 | else | |
668 | echo "[ ok ]" | |
669 | fi | |
670 | ||
671 | printf "%-39s %s" " " "syn" | |
672 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMismatchPortSynRx | | |
673 | awk '{print $2}'` | |
674 | [ -z "$count" ] && count=0 | |
675 | if [ "$count" != "$mis_syn_nr" ]; then | |
676 | echo "[fail] got $count JOIN[s] syn with a mismatched \ | |
677 | port-number expected $mis_syn_nr" | |
678 | ret=1 | |
679 | dump_stats=1 | |
680 | else | |
681 | echo -n "[ ok ]" | |
682 | fi | |
683 | ||
684 | echo -n " - ack " | |
685 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMismatchPortAckRx | | |
686 | awk '{print $2}'` | |
687 | [ -z "$count" ] && count=0 | |
688 | if [ "$count" != "$mis_ack_nr" ]; then | |
689 | echo "[fail] got $count JOIN[s] ack with a mismatched \ | |
690 | port-number expected $mis_ack_nr" | |
691 | ret=1 | |
692 | dump_stats=1 | |
693 | else | |
694 | echo "[ ok ]" | |
695 | fi | |
696 | else | |
697 | echo "" | |
be613160 GT |
698 | fi |
699 | ||
700 | if [ "${dump_stats}" = 1 ]; then | |
701 | echo Server ns stats | |
702 | ip netns exec $ns1 nstat -as | grep MPTcp | |
703 | echo Client ns stats | |
704 | ip netns exec $ns2 nstat -as | grep MPTcp | |
705 | fi | |
706 | } | |
707 | ||
dd72b0fe GT |
708 | chk_rm_nr() |
709 | { | |
710 | local rm_addr_nr=$1 | |
711 | local rm_subflow_nr=$2 | |
7028ba8a | 712 | local invert=${3:-""} |
dd72b0fe GT |
713 | local count |
714 | local dump_stats | |
7028ba8a GT |
715 | local addr_ns |
716 | local subflow_ns | |
717 | ||
718 | if [ -z $invert ]; then | |
719 | addr_ns=$ns1 | |
720 | subflow_ns=$ns2 | |
721 | elif [ $invert = "invert" ]; then | |
722 | addr_ns=$ns2 | |
723 | subflow_ns=$ns1 | |
724 | fi | |
dd72b0fe GT |
725 | |
726 | printf "%-39s %s" " " "rm " | |
7028ba8a | 727 | count=`ip netns exec $addr_ns nstat -as | grep MPTcpExtRmAddr | awk '{print $2}'` |
dd72b0fe GT |
728 | [ -z "$count" ] && count=0 |
729 | if [ "$count" != "$rm_addr_nr" ]; then | |
730 | echo "[fail] got $count RM_ADDR[s] expected $rm_addr_nr" | |
731 | ret=1 | |
732 | dump_stats=1 | |
733 | else | |
734 | echo -n "[ ok ]" | |
735 | fi | |
736 | ||
737 | echo -n " - sf " | |
7028ba8a | 738 | count=`ip netns exec $subflow_ns nstat -as | grep MPTcpExtRmSubflow | awk '{print $2}'` |
dd72b0fe GT |
739 | [ -z "$count" ] && count=0 |
740 | if [ "$count" != "$rm_subflow_nr" ]; then | |
741 | echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr" | |
742 | ret=1 | |
743 | dump_stats=1 | |
744 | else | |
745 | echo "[ ok ]" | |
746 | fi | |
747 | ||
748 | if [ "${dump_stats}" = 1 ]; then | |
749 | echo Server ns stats | |
750 | ip netns exec $ns1 nstat -as | grep MPTcp | |
751 | echo Client ns stats | |
752 | ip netns exec $ns2 nstat -as | grep MPTcp | |
753 | fi | |
754 | } | |
755 | ||
718eb44e GT |
756 | chk_prio_nr() |
757 | { | |
758 | local mp_prio_nr_tx=$1 | |
759 | local mp_prio_nr_rx=$2 | |
760 | local count | |
761 | local dump_stats | |
762 | ||
763 | printf "%-39s %s" " " "ptx" | |
764 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioTx | awk '{print $2}'` | |
765 | [ -z "$count" ] && count=0 | |
766 | if [ "$count" != "$mp_prio_nr_tx" ]; then | |
767 | echo "[fail] got $count MP_PRIO[s] TX expected $mp_prio_nr_tx" | |
768 | ret=1 | |
769 | dump_stats=1 | |
770 | else | |
771 | echo -n "[ ok ]" | |
772 | fi | |
773 | ||
774 | echo -n " - prx " | |
775 | count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPPrioRx | awk '{print $2}'` | |
776 | [ -z "$count" ] && count=0 | |
777 | if [ "$count" != "$mp_prio_nr_rx" ]; then | |
778 | echo "[fail] got $count MP_PRIO[s] RX expected $mp_prio_nr_rx" | |
779 | ret=1 | |
780 | dump_stats=1 | |
781 | else | |
782 | echo "[ ok ]" | |
783 | fi | |
784 | ||
785 | if [ "${dump_stats}" = 1 ]; then | |
786 | echo Server ns stats | |
787 | ip netns exec $ns1 nstat -as | grep MPTcp | |
788 | echo Client ns stats | |
789 | ip netns exec $ns2 nstat -as | grep MPTcp | |
790 | fi | |
791 | } | |
792 | ||
1002b89f GT |
793 | subflows_tests() |
794 | { | |
795 | reset | |
796 | run_tests $ns1 $ns2 10.0.1.1 | |
797 | chk_join_nr "no JOIN" "0" "0" "0" | |
798 | ||
799 | # subflow limited by client | |
800 | reset | |
801 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
802 | run_tests $ns1 $ns2 10.0.1.1 | |
803 | chk_join_nr "single subflow, limited by client" 0 0 0 | |
804 | ||
805 | # subflow limited by server | |
806 | reset | |
807 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
808 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
809 | run_tests $ns1 $ns2 10.0.1.1 | |
810 | chk_join_nr "single subflow, limited by server" 1 1 0 | |
811 | ||
812 | # subflow | |
813 | reset | |
814 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
815 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
816 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
817 | run_tests $ns1 $ns2 10.0.1.1 | |
818 | chk_join_nr "single subflow" 1 1 1 | |
819 | ||
820 | # multiple subflows | |
821 | reset | |
822 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
823 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
824 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
825 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow | |
826 | run_tests $ns1 $ns2 10.0.1.1 | |
827 | chk_join_nr "multiple subflows" 2 2 2 | |
828 | ||
829 | # multiple subflows limited by serverf | |
830 | reset | |
831 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
832 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
833 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
834 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow | |
835 | run_tests $ns1 $ns2 10.0.1.1 | |
836 | chk_join_nr "multiple subflows, limited by server" 2 2 1 | |
c3eaa5f6 GT |
837 | |
838 | # single subflow, dev | |
839 | reset | |
840 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
841 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
842 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow dev ns2eth3 | |
843 | run_tests $ns1 $ns2 10.0.1.1 | |
844 | chk_join_nr "single subflow, dev" 1 1 1 | |
1002b89f GT |
845 | } |
846 | ||
847 | signal_address_tests() | |
848 | { | |
849 | # add_address, unused | |
850 | reset | |
851 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
852 | run_tests $ns1 $ns2 10.0.1.1 | |
853 | chk_join_nr "unused signal address" 0 0 0 | |
854 | chk_add_nr 1 1 | |
855 | ||
856 | # accept and use add_addr | |
857 | reset | |
858 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
859 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
860 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
861 | run_tests $ns1 $ns2 10.0.1.1 | |
862 | chk_join_nr "signal address" 1 1 1 | |
863 | chk_add_nr 1 1 | |
864 | ||
865 | # accept and use add_addr with an additional subflow | |
866 | # note: signal address in server ns and local addresses in client ns must | |
867 | # belong to different subnets or one of the listed local address could be | |
868 | # used for 'add_addr' subflow | |
869 | reset | |
870 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
871 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
872 | ip netns exec $ns2 ./pm_nl_ctl limits 1 2 | |
873 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
874 | run_tests $ns1 $ns2 10.0.1.1 | |
875 | chk_join_nr "subflow and signal" 2 2 2 | |
876 | chk_add_nr 1 1 | |
877 | ||
878 | # accept and use add_addr with additional subflows | |
879 | reset | |
880 | ip netns exec $ns1 ./pm_nl_ctl limits 0 3 | |
881 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
882 | ip netns exec $ns2 ./pm_nl_ctl limits 1 3 | |
883 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
884 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
885 | run_tests $ns1 $ns2 10.0.1.1 | |
886 | chk_join_nr "multiple subflows and signal" 3 3 3 | |
887 | chk_add_nr 1 1 | |
ef360019 GT |
888 | |
889 | # signal addresses | |
890 | reset | |
891 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
892 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
893 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
894 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal | |
895 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
896 | run_tests $ns1 $ns2 10.0.1.1 | |
897 | chk_join_nr "signal addresses" 3 3 3 | |
898 | chk_add_nr 3 3 | |
899 | ||
900 | # signal invalid addresses | |
901 | reset | |
902 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
903 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal | |
904 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
905 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.14.1 flags signal | |
906 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
907 | run_tests $ns1 $ns2 10.0.1.1 | |
908 | chk_join_nr "signal invalid addresses" 1 1 1 | |
909 | chk_add_nr 3 3 | |
1002b89f GT |
910 | } |
911 | ||
912 | link_failure_tests() | |
913 | { | |
914 | # accept and use add_addr with additional subflows and link loss | |
915 | reset | |
916 | ip netns exec $ns1 ./pm_nl_ctl limits 0 3 | |
917 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
918 | ip netns exec $ns2 ./pm_nl_ctl limits 1 3 | |
919 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
920 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
921 | run_tests $ns1 $ns2 10.0.1.1 1 | |
922 | chk_join_nr "multiple flows, signal, link failure" 3 3 3 | |
923 | chk_add_nr 1 1 | |
924 | } | |
925 | ||
926 | add_addr_timeout_tests() | |
927 | { | |
928 | # add_addr timeout | |
929 | reset_with_add_addr_timeout | |
930 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
931 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
932 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
933 | run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow | |
934 | chk_join_nr "signal address, ADD_ADDR timeout" 1 1 1 | |
935 | chk_add_nr 4 0 | |
936 | ||
937 | # add_addr timeout IPv6 | |
938 | reset_with_add_addr_timeout 6 | |
939 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
940 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
941 | ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal | |
942 | run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow | |
943 | chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1 | |
944 | chk_add_nr 4 0 | |
8da6229b GT |
945 | |
946 | # signal addresses timeout | |
947 | reset_with_add_addr_timeout | |
948 | ip netns exec $ns1 ./pm_nl_ctl limits 2 2 | |
949 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
950 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
951 | ip netns exec $ns2 ./pm_nl_ctl limits 2 2 | |
952 | run_tests $ns1 $ns2 10.0.1.1 0 0 0 least | |
953 | chk_join_nr "signal addresses, ADD_ADDR timeout" 2 2 2 | |
954 | chk_add_nr 8 0 | |
955 | ||
956 | # signal invalid addresses timeout | |
957 | reset_with_add_addr_timeout | |
958 | ip netns exec $ns1 ./pm_nl_ctl limits 2 2 | |
959 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal | |
960 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
961 | ip netns exec $ns2 ./pm_nl_ctl limits 2 2 | |
962 | run_tests $ns1 $ns2 10.0.1.1 0 0 0 least | |
963 | chk_join_nr "invalid address, ADD_ADDR timeout" 1 1 1 | |
964 | chk_add_nr 8 0 | |
1002b89f GT |
965 | } |
966 | ||
967 | remove_tests() | |
968 | { | |
969 | # single subflow, remove | |
970 | reset | |
971 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
972 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
973 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
974 | run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow | |
975 | chk_join_nr "remove single subflow" 1 1 1 | |
976 | chk_rm_nr 1 1 | |
977 | ||
978 | # multiple subflows, remove | |
979 | reset | |
980 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
981 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
982 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow | |
983 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
984 | run_tests $ns1 $ns2 10.0.1.1 0 0 -2 slow | |
985 | chk_join_nr "remove multiple subflows" 2 2 2 | |
986 | chk_rm_nr 2 2 | |
987 | ||
988 | # single address, remove | |
989 | reset | |
990 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
991 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
992 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
993 | run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow | |
994 | chk_join_nr "remove single address" 1 1 1 | |
995 | chk_add_nr 1 1 | |
7028ba8a | 996 | chk_rm_nr 1 1 invert |
1002b89f GT |
997 | |
998 | # subflow and signal, remove | |
999 | reset | |
1000 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1001 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1002 | ip netns exec $ns2 ./pm_nl_ctl limits 1 2 | |
1003 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1004 | run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow | |
1005 | chk_join_nr "remove subflow and signal" 2 2 2 | |
1006 | chk_add_nr 1 1 | |
1007 | chk_rm_nr 1 1 | |
1008 | ||
1009 | # subflows and signal, remove | |
1010 | reset | |
1011 | ip netns exec $ns1 ./pm_nl_ctl limits 0 3 | |
1012 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1013 | ip netns exec $ns2 ./pm_nl_ctl limits 1 3 | |
1014 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1015 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
1016 | run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 slow | |
1017 | chk_join_nr "remove subflows and signal" 3 3 3 | |
1018 | chk_add_nr 1 1 | |
1019 | chk_rm_nr 2 2 | |
1020 | ||
ef360019 GT |
1021 | # addresses remove |
1022 | reset | |
1023 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
1024 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal id 250 | |
1025 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
1026 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal | |
1027 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
1028 | run_tests $ns1 $ns2 10.0.1.1 0 -3 0 slow | |
1029 | chk_join_nr "remove addresses" 3 3 3 | |
1030 | chk_add_nr 3 3 | |
1031 | chk_rm_nr 3 3 invert | |
1032 | ||
1033 | # invalid addresses remove | |
1034 | reset | |
1035 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
1036 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal | |
1037 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
1038 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.14.1 flags signal | |
1039 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
1040 | run_tests $ns1 $ns2 10.0.1.1 0 -3 0 slow | |
1041 | chk_join_nr "remove invalid addresses" 1 1 1 | |
1042 | chk_add_nr 3 3 | |
1043 | chk_rm_nr 3 1 invert | |
1044 | ||
1002b89f GT |
1045 | # subflows and signal, flush |
1046 | reset | |
1047 | ip netns exec $ns1 ./pm_nl_ctl limits 0 3 | |
1048 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1049 | ip netns exec $ns2 ./pm_nl_ctl limits 1 3 | |
1050 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1051 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
1052 | run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow | |
1053 | chk_join_nr "flush subflows and signal" 3 3 3 | |
1054 | chk_add_nr 1 1 | |
1055 | chk_rm_nr 2 2 | |
d2c4333a GT |
1056 | |
1057 | # subflows flush | |
1058 | reset | |
1059 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
1060 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
1061 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow id 150 | |
1062 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1063 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
1064 | run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow | |
1065 | chk_join_nr "flush subflows" 3 3 3 | |
1066 | chk_rm_nr 3 3 | |
1067 | ||
1068 | # addresses flush | |
1069 | reset | |
1070 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
1071 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal id 250 | |
1072 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
1073 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.4.1 flags signal | |
1074 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
1075 | run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow | |
1076 | chk_join_nr "flush addresses" 3 3 3 | |
1077 | chk_add_nr 3 3 | |
1078 | chk_rm_nr 3 3 invert | |
ef360019 GT |
1079 | |
1080 | # invalid addresses flush | |
1081 | reset | |
1082 | ip netns exec $ns1 ./pm_nl_ctl limits 3 3 | |
1083 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.12.1 flags signal | |
1084 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal | |
1085 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.14.1 flags signal | |
1086 | ip netns exec $ns2 ./pm_nl_ctl limits 3 3 | |
1087 | run_tests $ns1 $ns2 10.0.1.1 0 -8 0 slow | |
1088 | chk_join_nr "flush invalid addresses" 1 1 1 | |
1089 | chk_add_nr 3 3 | |
1090 | chk_rm_nr 3 1 invert | |
5e287fe7 GT |
1091 | |
1092 | # remove id 0 subflow | |
1093 | reset | |
1094 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1095 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1096 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1097 | run_tests $ns1 $ns2 10.0.1.1 0 0 -9 slow | |
1098 | chk_join_nr "remove id 0 subflow" 1 1 1 | |
1099 | chk_rm_nr 1 1 | |
1100 | ||
1101 | # remove id 0 address | |
1102 | reset | |
1103 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1104 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1105 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1106 | run_tests $ns1 $ns2 10.0.1.1 0 -9 0 slow | |
1107 | chk_join_nr "remove id 0 address" 1 1 1 | |
1108 | chk_add_nr 1 1 | |
1109 | chk_rm_nr 1 1 invert | |
1002b89f GT |
1110 | } |
1111 | ||
1112 | add_tests() | |
1113 | { | |
1114 | # add single subflow | |
1115 | reset | |
1116 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1117 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1118 | run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow | |
1119 | chk_join_nr "add single subflow" 1 1 1 | |
1120 | ||
1121 | # add signal address | |
1122 | reset | |
1123 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1124 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1125 | run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow | |
1126 | chk_join_nr "add signal address" 1 1 1 | |
1127 | chk_add_nr 1 1 | |
1128 | ||
1129 | # add multiple subflows | |
1130 | reset | |
1131 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1132 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
1133 | run_tests $ns1 $ns2 10.0.1.1 0 0 2 slow | |
1134 | chk_join_nr "add multiple subflows" 2 2 2 | |
1135 | ||
1136 | # add multiple subflows IPv6 | |
1137 | reset | |
1138 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1139 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
1140 | run_tests $ns1 $ns2 dead:beef:1::1 0 0 2 slow | |
1141 | chk_join_nr "add multiple subflows IPv6" 2 2 2 | |
1142 | ||
1143 | # add multiple addresses IPv6 | |
1144 | reset | |
1145 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1146 | ip netns exec $ns2 ./pm_nl_ctl limits 2 2 | |
1147 | run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow | |
1148 | chk_join_nr "add multiple addresses IPv6" 2 2 2 | |
1149 | chk_add_nr 2 2 | |
1150 | } | |
1151 | ||
1152 | ipv6_tests() | |
1153 | { | |
1154 | # subflow IPv6 | |
1155 | reset | |
1156 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1157 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1158 | ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow | |
1159 | run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow | |
1160 | chk_join_nr "single subflow IPv6" 1 1 1 | |
1161 | ||
1162 | # add_address, unused IPv6 | |
1163 | reset | |
1164 | ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal | |
1165 | run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow | |
1166 | chk_join_nr "unused signal address IPv6" 0 0 0 | |
1167 | chk_add_nr 1 1 | |
1168 | ||
1169 | # signal address IPv6 | |
1170 | reset | |
1171 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1172 | ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal | |
1173 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1174 | run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow | |
1175 | chk_join_nr "single address IPv6" 1 1 1 | |
1176 | chk_add_nr 1 1 | |
1177 | ||
1178 | # single address IPv6, remove | |
1179 | reset | |
1180 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1181 | ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal | |
1182 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1183 | run_tests $ns1 $ns2 dead:beef:1::1 0 -1 0 slow | |
1184 | chk_join_nr "remove single address IPv6" 1 1 1 | |
1185 | chk_add_nr 1 1 | |
7028ba8a | 1186 | chk_rm_nr 1 1 invert |
1002b89f GT |
1187 | |
1188 | # subflow and signal IPv6, remove | |
1189 | reset | |
1190 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1191 | ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal | |
1192 | ip netns exec $ns2 ./pm_nl_ctl limits 1 2 | |
1193 | ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow | |
1194 | run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow | |
1195 | chk_join_nr "remove subflow and signal IPv6" 2 2 2 | |
1196 | chk_add_nr 1 1 | |
1197 | chk_rm_nr 1 1 | |
1198 | } | |
1199 | ||
1200 | v4mapped_tests() | |
1201 | { | |
1202 | # subflow IPv4-mapped to IPv4-mapped | |
1203 | reset | |
1204 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1205 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1206 | ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow | |
1207 | run_tests $ns1 $ns2 "::ffff:10.0.1.1" | |
1208 | chk_join_nr "single subflow IPv4-mapped" 1 1 1 | |
1209 | ||
1210 | # signal address IPv4-mapped with IPv4-mapped sk | |
1211 | reset | |
1212 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1213 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1214 | ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal | |
1215 | run_tests $ns1 $ns2 "::ffff:10.0.1.1" | |
1216 | chk_join_nr "signal address IPv4-mapped" 1 1 1 | |
1217 | chk_add_nr 1 1 | |
1218 | ||
1219 | # subflow v4-map-v6 | |
1220 | reset | |
1221 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1222 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1223 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1224 | run_tests $ns1 $ns2 "::ffff:10.0.1.1" | |
1225 | chk_join_nr "single subflow v4-map-v6" 1 1 1 | |
1226 | ||
1227 | # signal address v4-map-v6 | |
1228 | reset | |
1229 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1230 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1231 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1232 | run_tests $ns1 $ns2 "::ffff:10.0.1.1" | |
1233 | chk_join_nr "signal address v4-map-v6" 1 1 1 | |
1234 | chk_add_nr 1 1 | |
1235 | ||
1236 | # subflow v6-map-v4 | |
1237 | reset | |
1238 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1239 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1240 | ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow | |
1241 | run_tests $ns1 $ns2 10.0.1.1 | |
1242 | chk_join_nr "single subflow v6-map-v4" 1 1 1 | |
1243 | ||
1244 | # signal address v6-map-v4 | |
1245 | reset | |
1246 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1247 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1248 | ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal | |
1249 | run_tests $ns1 $ns2 10.0.1.1 | |
1250 | chk_join_nr "signal address v6-map-v4" 1 1 1 | |
1251 | chk_add_nr 1 1 | |
1252 | ||
1253 | # no subflow IPv6 to v4 address | |
1254 | reset | |
1255 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1256 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1257 | ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::2 flags subflow | |
1258 | run_tests $ns1 $ns2 10.0.1.1 | |
1259 | chk_join_nr "no JOIN with diff families v4-v6" 0 0 0 | |
1260 | ||
1261 | # no subflow IPv6 to v4 address even if v6 has a valid v4 at the end | |
1262 | reset | |
1263 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1264 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1265 | ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::10.0.3.2 flags subflow | |
1266 | run_tests $ns1 $ns2 10.0.1.1 | |
1267 | chk_join_nr "no JOIN with diff families v4-v6-2" 0 0 0 | |
1268 | ||
1269 | # no subflow IPv4 to v6 address, no need to slow down too then | |
1270 | reset | |
1271 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1272 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1273 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1274 | run_tests $ns1 $ns2 dead:beef:1::1 | |
1275 | chk_join_nr "no JOIN with diff families v6-v4" 0 0 0 | |
1276 | } | |
1277 | ||
1278 | backup_tests() | |
1279 | { | |
1280 | # single subflow, backup | |
1281 | reset | |
1282 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1283 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1284 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow,backup | |
1285 | run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup | |
1286 | chk_join_nr "single subflow, backup" 1 1 1 | |
1287 | chk_prio_nr 0 1 | |
1288 | ||
1289 | # single address, backup | |
1290 | reset | |
1291 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1292 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1293 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1294 | run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup | |
1295 | chk_join_nr "single address, backup" 1 1 1 | |
1296 | chk_add_nr 1 1 | |
1297 | chk_prio_nr 1 0 | |
1298 | } | |
1299 | ||
1300 | add_addr_ports_tests() | |
1301 | { | |
1302 | # signal address with port | |
1303 | reset | |
1304 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1305 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1306 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1307 | run_tests $ns1 $ns2 10.0.1.1 | |
1308 | chk_join_nr "signal address with port" 1 1 1 | |
1309 | chk_add_nr 1 1 1 | |
1310 | ||
1311 | # subflow and signal with port | |
1312 | reset | |
1313 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1314 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1315 | ip netns exec $ns2 ./pm_nl_ctl limits 1 2 | |
1316 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1317 | run_tests $ns1 $ns2 10.0.1.1 | |
1318 | chk_join_nr "subflow and signal with port" 2 2 2 | |
1319 | chk_add_nr 1 1 1 | |
1320 | ||
1321 | # single address with port, remove | |
1322 | reset | |
1323 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1324 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1325 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1326 | run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow | |
1327 | chk_join_nr "remove single address with port" 1 1 1 | |
1328 | chk_add_nr 1 1 1 | |
7028ba8a | 1329 | chk_rm_nr 1 1 invert |
1002b89f GT |
1330 | |
1331 | # subflow and signal with port, remove | |
1332 | reset | |
1333 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1334 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1335 | ip netns exec $ns2 ./pm_nl_ctl limits 1 2 | |
1336 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1337 | run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow | |
1338 | chk_join_nr "remove subflow and signal with port" 2 2 2 | |
1339 | chk_add_nr 1 1 1 | |
1340 | chk_rm_nr 1 1 | |
1341 | ||
1342 | # subflows and signal with port, flush | |
1343 | reset | |
1344 | ip netns exec $ns1 ./pm_nl_ctl limits 0 3 | |
1345 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1346 | ip netns exec $ns2 ./pm_nl_ctl limits 1 3 | |
1347 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1348 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
1349 | run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow | |
1350 | chk_join_nr "flush subflows and signal with port" 3 3 3 | |
1351 | chk_add_nr 1 1 | |
1352 | chk_rm_nr 2 2 | |
1353 | ||
1354 | # multiple addresses with port | |
1355 | reset | |
1356 | ip netns exec $ns1 ./pm_nl_ctl limits 2 2 | |
1357 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1358 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10100 | |
1359 | ip netns exec $ns2 ./pm_nl_ctl limits 2 2 | |
1360 | run_tests $ns1 $ns2 10.0.1.1 | |
1361 | chk_join_nr "multiple addresses with port" 2 2 2 | |
1362 | chk_add_nr 2 2 2 | |
1363 | ||
1364 | # multiple addresses with ports | |
1365 | reset | |
1366 | ip netns exec $ns1 ./pm_nl_ctl limits 2 2 | |
1367 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 | |
1368 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10101 | |
1369 | ip netns exec $ns2 ./pm_nl_ctl limits 2 2 | |
1370 | run_tests $ns1 $ns2 10.0.1.1 | |
1371 | chk_join_nr "multiple addresses with ports" 2 2 2 | |
1372 | chk_add_nr 2 2 2 | |
1373 | } | |
1374 | ||
1375 | syncookies_tests() | |
1376 | { | |
1377 | # single subflow, syncookies | |
1378 | reset_with_cookies | |
1379 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1380 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1381 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1382 | run_tests $ns1 $ns2 10.0.1.1 | |
1383 | chk_join_nr "single subflow with syn cookies" 1 1 1 | |
1384 | ||
1385 | # multiple subflows with syn cookies | |
1386 | reset_with_cookies | |
1387 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1388 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
1389 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1390 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow | |
1391 | run_tests $ns1 $ns2 10.0.1.1 | |
1392 | chk_join_nr "multiple subflows with syn cookies" 2 2 2 | |
1393 | ||
1394 | # multiple subflows limited by server | |
1395 | reset_with_cookies | |
1396 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1397 | ip netns exec $ns2 ./pm_nl_ctl limits 0 2 | |
1398 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1399 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow | |
1400 | run_tests $ns1 $ns2 10.0.1.1 | |
1401 | chk_join_nr "subflows limited by server w cookies" 2 2 1 | |
1402 | ||
1403 | # test signal address with cookies | |
1404 | reset_with_cookies | |
1405 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1406 | ip netns exec $ns2 ./pm_nl_ctl limits 1 1 | |
1407 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1408 | run_tests $ns1 $ns2 10.0.1.1 | |
1409 | chk_join_nr "signal address with syn cookies" 1 1 1 | |
1410 | chk_add_nr 1 1 | |
1411 | ||
1412 | # test cookie with subflow and signal | |
1413 | reset_with_cookies | |
1414 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1415 | ip netns exec $ns1 ./pm_nl_ctl limits 0 2 | |
1416 | ip netns exec $ns2 ./pm_nl_ctl limits 1 2 | |
1417 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1418 | run_tests $ns1 $ns2 10.0.1.1 | |
1419 | chk_join_nr "subflow and signal w cookies" 2 2 2 | |
1420 | chk_add_nr 1 1 | |
1421 | ||
1422 | # accept and use add_addr with additional subflows | |
1423 | reset_with_cookies | |
1424 | ip netns exec $ns1 ./pm_nl_ctl limits 0 3 | |
1425 | ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal | |
1426 | ip netns exec $ns2 ./pm_nl_ctl limits 1 3 | |
1427 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow | |
1428 | ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow | |
1429 | run_tests $ns1 $ns2 10.0.1.1 | |
1430 | chk_join_nr "subflows and signal w. cookies" 3 3 3 | |
1431 | chk_add_nr 1 1 | |
1432 | } | |
1433 | ||
af66d3e1 GT |
1434 | checksum_tests() |
1435 | { | |
1436 | # checksum test 0 0 | |
1437 | reset_with_checksum 0 0 | |
1438 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1439 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1440 | run_tests $ns1 $ns2 10.0.1.1 | |
1441 | chk_csum_nr "checksum test 0 0" | |
1442 | ||
1443 | # checksum test 1 1 | |
1444 | reset_with_checksum 1 1 | |
1445 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1446 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1447 | run_tests $ns1 $ns2 10.0.1.1 | |
1448 | chk_csum_nr "checksum test 1 1" | |
1449 | ||
1450 | # checksum test 0 1 | |
1451 | reset_with_checksum 0 1 | |
1452 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1453 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1454 | run_tests $ns1 $ns2 10.0.1.1 | |
1455 | chk_csum_nr "checksum test 0 1" | |
1456 | ||
1457 | # checksum test 1 0 | |
1458 | reset_with_checksum 1 0 | |
1459 | ip netns exec $ns1 ./pm_nl_ctl limits 0 1 | |
1460 | ip netns exec $ns2 ./pm_nl_ctl limits 0 1 | |
1461 | run_tests $ns1 $ns2 10.0.1.1 | |
1462 | chk_csum_nr "checksum test 1 0" | |
1463 | } | |
1464 | ||
1002b89f GT |
1465 | all_tests() |
1466 | { | |
1467 | subflows_tests | |
1468 | signal_address_tests | |
1469 | link_failure_tests | |
1470 | add_addr_timeout_tests | |
1471 | remove_tests | |
1472 | add_tests | |
1473 | ipv6_tests | |
1474 | v4mapped_tests | |
1475 | backup_tests | |
1476 | add_addr_ports_tests | |
1477 | syncookies_tests | |
af66d3e1 | 1478 | checksum_tests |
1002b89f GT |
1479 | } |
1480 | ||
1481 | usage() | |
1482 | { | |
1483 | echo "mptcp_join usage:" | |
1484 | echo " -f subflows_tests" | |
1485 | echo " -s signal_address_tests" | |
1486 | echo " -l link_failure_tests" | |
1487 | echo " -t add_addr_timeout_tests" | |
1488 | echo " -r remove_tests" | |
1489 | echo " -a add_tests" | |
1490 | echo " -6 ipv6_tests" | |
1491 | echo " -4 v4mapped_tests" | |
1492 | echo " -b backup_tests" | |
1493 | echo " -p add_addr_ports_tests" | |
a673321a | 1494 | echo " -k syncookies_tests" |
af66d3e1 | 1495 | echo " -S checksum_tests" |
a673321a | 1496 | echo " -c capture pcap files" |
af66d3e1 | 1497 | echo " -C enable data checksum" |
1002b89f GT |
1498 | echo " -h help" |
1499 | } | |
1500 | ||
b08fbf24 PA |
1501 | sin=$(mktemp) |
1502 | sout=$(mktemp) | |
1503 | cin=$(mktemp) | |
8b819a84 | 1504 | cinsent=$(mktemp) |
b08fbf24 PA |
1505 | cout=$(mktemp) |
1506 | init | |
8b819a84 FW |
1507 | make_file "$cin" "client" 1 |
1508 | make_file "$sin" "server" 1 | |
b08fbf24 PA |
1509 | trap cleanup EXIT |
1510 | ||
a673321a | 1511 | for arg in "$@"; do |
af66d3e1 | 1512 | # check for "capture/checksum" args before launching tests |
a673321a MM |
1513 | if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"c"[0-9a-zA-Z]*$ ]]; then |
1514 | capture=1 | |
1515 | fi | |
af66d3e1 GT |
1516 | if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"C"[0-9a-zA-Z]*$ ]]; then |
1517 | checksum=1 | |
1518 | fi | |
a673321a | 1519 | |
af66d3e1 GT |
1520 | # exception for the capture/checksum options, the rest means: a part of the tests |
1521 | if [ "${arg}" != "-c" ] && [ "${arg}" != "-C" ]; then | |
a673321a MM |
1522 | do_all_tests=0 |
1523 | fi | |
1524 | done | |
1525 | ||
1526 | if [ $do_all_tests -eq 1 ]; then | |
1002b89f GT |
1527 | all_tests |
1528 | exit $ret | |
1529 | fi | |
1530 | ||
af66d3e1 | 1531 | while getopts 'fsltra64bpkchCS' opt; do |
1002b89f GT |
1532 | case $opt in |
1533 | f) | |
1534 | subflows_tests | |
1535 | ;; | |
1536 | s) | |
1537 | signal_address_tests | |
1538 | ;; | |
1539 | l) | |
1540 | link_failure_tests | |
1541 | ;; | |
1542 | t) | |
1543 | add_addr_timeout_tests | |
1544 | ;; | |
1545 | r) | |
1546 | remove_tests | |
1547 | ;; | |
1548 | a) | |
1549 | add_tests | |
1550 | ;; | |
1551 | 6) | |
1552 | ipv6_tests | |
1553 | ;; | |
1554 | 4) | |
1555 | v4mapped_tests | |
1556 | ;; | |
1557 | b) | |
1558 | backup_tests | |
1559 | ;; | |
1560 | p) | |
1561 | add_addr_ports_tests | |
1562 | ;; | |
a673321a | 1563 | k) |
1002b89f GT |
1564 | syncookies_tests |
1565 | ;; | |
af66d3e1 GT |
1566 | S) |
1567 | checksum_tests | |
1568 | ;; | |
a673321a MM |
1569 | c) |
1570 | ;; | |
af66d3e1 GT |
1571 | C) |
1572 | ;; | |
1002b89f GT |
1573 | h | *) |
1574 | usage | |
1575 | ;; | |
1576 | esac | |
1577 | done | |
00587187 | 1578 | |
b08fbf24 | 1579 | exit $ret |