]> git.proxmox.com Git - mirror_ubuntu-kernels.git/blob - tools/testing/selftests/net/fcnal-test.sh
blk-mq-debugfs: Show active requests per queue for shared tags
[mirror_ubuntu-kernels.git] / tools / testing / selftests / net / fcnal-test.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 #
4 # Copyright (c) 2019 David Ahern <dsahern@gmail.com>. All rights reserved.
5 #
6 # IPv4 and IPv6 functional tests focusing on VRF and routing lookups
7 # for various permutations:
8 # 1. icmp, tcp, udp and netfilter
9 # 2. client, server, no-server
10 # 3. global address on interface
11 # 4. global address on 'lo'
12 # 5. remote and local traffic
13 # 6. VRF and non-VRF permutations
14 #
15 # Setup:
16 # ns-A | ns-B
17 # No VRF case:
18 # [ lo ] [ eth1 ]---|---[ eth1 ] [ lo ]
19 # remote address
20 # VRF case:
21 # [ red ]---[ eth1 ]---|---[ eth1 ] [ lo ]
22 #
23 # ns-A:
24 # eth1: 172.16.1.1/24, 2001:db8:1::1/64
25 # lo: 127.0.0.1/8, ::1/128
26 # 172.16.2.1/32, 2001:db8:2::1/128
27 # red: 127.0.0.1/8, ::1/128
28 # 172.16.3.1/32, 2001:db8:3::1/128
29 #
30 # ns-B:
31 # eth1: 172.16.1.2/24, 2001:db8:1::2/64
32 # lo2: 127.0.0.1/8, ::1/128
33 # 172.16.2.2/32, 2001:db8:2::2/128
34 #
35 # ns-A to ns-C connection - only for VRF and same config
36 # as ns-A to ns-B
37 #
38 # server / client nomenclature relative to ns-A
39
40 # Kselftest framework requirement - SKIP code is 4.
41 ksft_skip=4
42
43 VERBOSE=0
44
45 NSA_DEV=eth1
46 NSA_DEV2=eth2
47 NSB_DEV=eth1
48 NSC_DEV=eth2
49 VRF=red
50 VRF_TABLE=1101
51
52 # IPv4 config
53 NSA_IP=172.16.1.1
54 NSB_IP=172.16.1.2
55 VRF_IP=172.16.3.1
56 NS_NET=172.16.1.0/24
57
58 # IPv6 config
59 NSA_IP6=2001:db8:1::1
60 NSB_IP6=2001:db8:1::2
61 VRF_IP6=2001:db8:3::1
62 NS_NET6=2001:db8:1::/120
63
64 NSA_LO_IP=172.16.2.1
65 NSB_LO_IP=172.16.2.2
66 NSA_LO_IP6=2001:db8:2::1
67 NSB_LO_IP6=2001:db8:2::2
68
69 MD5_PW=abc123
70 MD5_WRONG_PW=abc1234
71
72 MCAST=ff02::1
73 # set after namespace create
74 NSA_LINKIP6=
75 NSB_LINKIP6=
76
77 NSA=ns-A
78 NSB=ns-B
79 NSC=ns-C
80
81 NSA_CMD="ip netns exec ${NSA}"
82 NSB_CMD="ip netns exec ${NSB}"
83 NSC_CMD="ip netns exec ${NSC}"
84
85 which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
86
87 ################################################################################
88 # utilities
89
90 log_test()
91 {
92 local rc=$1
93 local expected=$2
94 local msg="$3"
95
96 [ "${VERBOSE}" = "1" ] && echo
97
98 if [ ${rc} -eq ${expected} ]; then
99 nsuccess=$((nsuccess+1))
100 printf "TEST: %-70s [ OK ]\n" "${msg}"
101 else
102 nfail=$((nfail+1))
103 printf "TEST: %-70s [FAIL]\n" "${msg}"
104 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
105 echo
106 echo "hit enter to continue, 'q' to quit"
107 read a
108 [ "$a" = "q" ] && exit 1
109 fi
110 fi
111
112 if [ "${PAUSE}" = "yes" ]; then
113 echo
114 echo "hit enter to continue, 'q' to quit"
115 read a
116 [ "$a" = "q" ] && exit 1
117 fi
118
119 kill_procs
120 }
121
122 log_test_addr()
123 {
124 local addr=$1
125 local rc=$2
126 local expected=$3
127 local msg="$4"
128 local astr
129
130 astr=$(addr2str ${addr})
131 log_test $rc $expected "$msg - ${astr}"
132 }
133
134 log_section()
135 {
136 echo
137 echo "###########################################################################"
138 echo "$*"
139 echo "###########################################################################"
140 echo
141 }
142
143 log_subsection()
144 {
145 echo
146 echo "#################################################################"
147 echo "$*"
148 echo
149 }
150
151 log_start()
152 {
153 # make sure we have no test instances running
154 kill_procs
155
156 if [ "${VERBOSE}" = "1" ]; then
157 echo
158 echo "#######################################################"
159 fi
160 }
161
162 log_debug()
163 {
164 if [ "${VERBOSE}" = "1" ]; then
165 echo
166 echo "$*"
167 echo
168 fi
169 }
170
171 show_hint()
172 {
173 if [ "${VERBOSE}" = "1" ]; then
174 echo "HINT: $*"
175 echo
176 fi
177 }
178
179 kill_procs()
180 {
181 killall nettest ping ping6 >/dev/null 2>&1
182 sleep 1
183 }
184
185 do_run_cmd()
186 {
187 local cmd="$*"
188 local out
189
190 if [ "$VERBOSE" = "1" ]; then
191 echo "COMMAND: ${cmd}"
192 fi
193
194 out=$($cmd 2>&1)
195 rc=$?
196 if [ "$VERBOSE" = "1" -a -n "$out" ]; then
197 echo "$out"
198 fi
199
200 return $rc
201 }
202
203 run_cmd()
204 {
205 do_run_cmd ${NSA_CMD} $*
206 }
207
208 run_cmd_nsb()
209 {
210 do_run_cmd ${NSB_CMD} $*
211 }
212
213 run_cmd_nsc()
214 {
215 do_run_cmd ${NSC_CMD} $*
216 }
217
218 setup_cmd()
219 {
220 local cmd="$*"
221 local rc
222
223 run_cmd ${cmd}
224 rc=$?
225 if [ $rc -ne 0 ]; then
226 # show user the command if not done so already
227 if [ "$VERBOSE" = "0" ]; then
228 echo "setup command: $cmd"
229 fi
230 echo "failed. stopping tests"
231 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
232 echo
233 echo "hit enter to continue"
234 read a
235 fi
236 exit $rc
237 fi
238 }
239
240 setup_cmd_nsb()
241 {
242 local cmd="$*"
243 local rc
244
245 run_cmd_nsb ${cmd}
246 rc=$?
247 if [ $rc -ne 0 ]; then
248 # show user the command if not done so already
249 if [ "$VERBOSE" = "0" ]; then
250 echo "setup command: $cmd"
251 fi
252 echo "failed. stopping tests"
253 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
254 echo
255 echo "hit enter to continue"
256 read a
257 fi
258 exit $rc
259 fi
260 }
261
262 setup_cmd_nsc()
263 {
264 local cmd="$*"
265 local rc
266
267 run_cmd_nsc ${cmd}
268 rc=$?
269 if [ $rc -ne 0 ]; then
270 # show user the command if not done so already
271 if [ "$VERBOSE" = "0" ]; then
272 echo "setup command: $cmd"
273 fi
274 echo "failed. stopping tests"
275 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
276 echo
277 echo "hit enter to continue"
278 read a
279 fi
280 exit $rc
281 fi
282 }
283
284 # set sysctl values in NS-A
285 set_sysctl()
286 {
287 echo "SYSCTL: $*"
288 echo
289 run_cmd sysctl -q -w $*
290 }
291
292 ################################################################################
293 # Setup for tests
294
295 addr2str()
296 {
297 case "$1" in
298 127.0.0.1) echo "loopback";;
299 ::1) echo "IPv6 loopback";;
300
301 ${NSA_IP}) echo "ns-A IP";;
302 ${NSA_IP6}) echo "ns-A IPv6";;
303 ${NSA_LO_IP}) echo "ns-A loopback IP";;
304 ${NSA_LO_IP6}) echo "ns-A loopback IPv6";;
305 ${NSA_LINKIP6}|${NSA_LINKIP6}%*) echo "ns-A IPv6 LLA";;
306
307 ${NSB_IP}) echo "ns-B IP";;
308 ${NSB_IP6}) echo "ns-B IPv6";;
309 ${NSB_LO_IP}) echo "ns-B loopback IP";;
310 ${NSB_LO_IP6}) echo "ns-B loopback IPv6";;
311 ${NSB_LINKIP6}|${NSB_LINKIP6}%*) echo "ns-B IPv6 LLA";;
312
313 ${VRF_IP}) echo "VRF IP";;
314 ${VRF_IP6}) echo "VRF IPv6";;
315
316 ${MCAST}%*) echo "multicast IP";;
317
318 *) echo "unknown";;
319 esac
320 }
321
322 get_linklocal()
323 {
324 local ns=$1
325 local dev=$2
326 local addr
327
328 addr=$(ip -netns ${ns} -6 -br addr show dev ${dev} | \
329 awk '{
330 for (i = 3; i <= NF; ++i) {
331 if ($i ~ /^fe80/)
332 print $i
333 }
334 }'
335 )
336 addr=${addr/\/*}
337
338 [ -z "$addr" ] && return 1
339
340 echo $addr
341
342 return 0
343 }
344
345 ################################################################################
346 # create namespaces and vrf
347
348 create_vrf()
349 {
350 local ns=$1
351 local vrf=$2
352 local table=$3
353 local addr=$4
354 local addr6=$5
355
356 ip -netns ${ns} link add ${vrf} type vrf table ${table}
357 ip -netns ${ns} link set ${vrf} up
358 ip -netns ${ns} route add vrf ${vrf} unreachable default metric 8192
359 ip -netns ${ns} -6 route add vrf ${vrf} unreachable default metric 8192
360
361 ip -netns ${ns} addr add 127.0.0.1/8 dev ${vrf}
362 ip -netns ${ns} -6 addr add ::1 dev ${vrf} nodad
363 if [ "${addr}" != "-" ]; then
364 ip -netns ${ns} addr add dev ${vrf} ${addr}
365 fi
366 if [ "${addr6}" != "-" ]; then
367 ip -netns ${ns} -6 addr add dev ${vrf} ${addr6}
368 fi
369
370 ip -netns ${ns} ru del pref 0
371 ip -netns ${ns} ru add pref 32765 from all lookup local
372 ip -netns ${ns} -6 ru del pref 0
373 ip -netns ${ns} -6 ru add pref 32765 from all lookup local
374 }
375
376 create_ns()
377 {
378 local ns=$1
379 local addr=$2
380 local addr6=$3
381
382 ip netns add ${ns}
383
384 ip -netns ${ns} link set lo up
385 if [ "${addr}" != "-" ]; then
386 ip -netns ${ns} addr add dev lo ${addr}
387 fi
388 if [ "${addr6}" != "-" ]; then
389 ip -netns ${ns} -6 addr add dev lo ${addr6}
390 fi
391
392 ip -netns ${ns} ro add unreachable default metric 8192
393 ip -netns ${ns} -6 ro add unreachable default metric 8192
394
395 ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1
396 ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
397 ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1
398 ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1
399 }
400
401 # create veth pair to connect namespaces and apply addresses.
402 connect_ns()
403 {
404 local ns1=$1
405 local ns1_dev=$2
406 local ns1_addr=$3
407 local ns1_addr6=$4
408 local ns2=$5
409 local ns2_dev=$6
410 local ns2_addr=$7
411 local ns2_addr6=$8
412
413 ip -netns ${ns1} li add ${ns1_dev} type veth peer name tmp
414 ip -netns ${ns1} li set ${ns1_dev} up
415 ip -netns ${ns1} li set tmp netns ${ns2} name ${ns2_dev}
416 ip -netns ${ns2} li set ${ns2_dev} up
417
418 if [ "${ns1_addr}" != "-" ]; then
419 ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr}
420 ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr}
421 fi
422
423 if [ "${ns1_addr6}" != "-" ]; then
424 ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr6}
425 ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr6}
426 fi
427 }
428
429 cleanup()
430 {
431 # explicit cleanups to check those code paths
432 ip netns | grep -q ${NSA}
433 if [ $? -eq 0 ]; then
434 ip -netns ${NSA} link delete ${VRF}
435 ip -netns ${NSA} ro flush table ${VRF_TABLE}
436
437 ip -netns ${NSA} addr flush dev ${NSA_DEV}
438 ip -netns ${NSA} -6 addr flush dev ${NSA_DEV}
439 ip -netns ${NSA} link set dev ${NSA_DEV} down
440 ip -netns ${NSA} link del dev ${NSA_DEV}
441
442 ip netns del ${NSA}
443 fi
444
445 ip netns del ${NSB}
446 ip netns del ${NSC} >/dev/null 2>&1
447 }
448
449 setup()
450 {
451 local with_vrf=${1}
452
453 # make sure we are starting with a clean slate
454 kill_procs
455 cleanup 2>/dev/null
456
457 log_debug "Configuring network namespaces"
458 set -e
459
460 create_ns ${NSA} ${NSA_LO_IP}/32 ${NSA_LO_IP6}/128
461 create_ns ${NSB} ${NSB_LO_IP}/32 ${NSB_LO_IP6}/128
462 connect_ns ${NSA} ${NSA_DEV} ${NSA_IP}/24 ${NSA_IP6}/64 \
463 ${NSB} ${NSB_DEV} ${NSB_IP}/24 ${NSB_IP6}/64
464
465 NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
466 NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
467
468 # tell ns-A how to get to remote addresses of ns-B
469 if [ "${with_vrf}" = "yes" ]; then
470 create_vrf ${NSA} ${VRF} ${VRF_TABLE} ${VRF_IP} ${VRF_IP6}
471
472 ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
473 ip -netns ${NSA} ro add vrf ${VRF} ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}
474 ip -netns ${NSA} -6 ro add vrf ${VRF} ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}
475
476 ip -netns ${NSB} ro add ${VRF_IP}/32 via ${NSA_IP} dev ${NSB_DEV}
477 ip -netns ${NSB} -6 ro add ${VRF_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}
478
479 # some VRF tests use ns-C which has the same config as
480 # ns-B but for a device NOT in the VRF
481 create_ns ${NSC} "-" "-"
482 connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \
483 ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64
484 else
485 ip -netns ${NSA} ro add ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}
486 ip -netns ${NSA} ro add ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}
487 fi
488
489
490 # tell ns-B how to get to remote addresses of ns-A
491 ip -netns ${NSB} ro add ${NSA_LO_IP}/32 via ${NSA_IP} dev ${NSB_DEV}
492 ip -netns ${NSB} ro add ${NSA_LO_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}
493
494 set +e
495
496 sleep 1
497 }
498
499 setup_lla_only()
500 {
501 # make sure we are starting with a clean slate
502 kill_procs
503 cleanup 2>/dev/null
504
505 log_debug "Configuring network namespaces"
506 set -e
507
508 create_ns ${NSA} "-" "-"
509 create_ns ${NSB} "-" "-"
510 create_ns ${NSC} "-" "-"
511 connect_ns ${NSA} ${NSA_DEV} "-" "-" \
512 ${NSB} ${NSB_DEV} "-" "-"
513 connect_ns ${NSA} ${NSA_DEV2} "-" "-" \
514 ${NSC} ${NSC_DEV} "-" "-"
515
516 NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})
517 NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})
518 NSC_LINKIP6=$(get_linklocal ${NSC} ${NSC_DEV})
519
520 create_vrf ${NSA} ${VRF} ${VRF_TABLE} "-" "-"
521 ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}
522 ip -netns ${NSA} link set dev ${NSA_DEV2} vrf ${VRF}
523
524 set +e
525
526 sleep 1
527 }
528
529 ################################################################################
530 # IPv4
531
532 ipv4_ping_novrf()
533 {
534 local a
535
536 #
537 # out
538 #
539 for a in ${NSB_IP} ${NSB_LO_IP}
540 do
541 log_start
542 run_cmd ping -c1 -w1 ${a}
543 log_test_addr ${a} $? 0 "ping out"
544
545 log_start
546 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
547 log_test_addr ${a} $? 0 "ping out, device bind"
548
549 log_start
550 run_cmd ping -c1 -w1 -I ${NSA_LO_IP} ${a}
551 log_test_addr ${a} $? 0 "ping out, address bind"
552 done
553
554 #
555 # in
556 #
557 for a in ${NSA_IP} ${NSA_LO_IP}
558 do
559 log_start
560 run_cmd_nsb ping -c1 -w1 ${a}
561 log_test_addr ${a} $? 0 "ping in"
562 done
563
564 #
565 # local traffic
566 #
567 for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
568 do
569 log_start
570 run_cmd ping -c1 -w1 ${a}
571 log_test_addr ${a} $? 0 "ping local"
572 done
573
574 #
575 # local traffic, socket bound to device
576 #
577 # address on device
578 a=${NSA_IP}
579 log_start
580 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
581 log_test_addr ${a} $? 0 "ping local, device bind"
582
583 # loopback addresses not reachable from device bind
584 # fails in a really weird way though because ipv4 special cases
585 # route lookups with oif set.
586 for a in ${NSA_LO_IP} 127.0.0.1
587 do
588 log_start
589 show_hint "Fails since address on loopback device is out of device scope"
590 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
591 log_test_addr ${a} $? 1 "ping local, device bind"
592 done
593
594 #
595 # ip rule blocks reachability to remote address
596 #
597 log_start
598 setup_cmd ip rule add pref 32765 from all lookup local
599 setup_cmd ip rule del pref 0 from all lookup local
600 setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit
601 setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit
602
603 a=${NSB_LO_IP}
604 run_cmd ping -c1 -w1 ${a}
605 log_test_addr ${a} $? 2 "ping out, blocked by rule"
606
607 # NOTE: ipv4 actually allows the lookup to fail and yet still create
608 # a viable rtable if the oif (e.g., bind to device) is set, so this
609 # case succeeds despite the rule
610 # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
611
612 a=${NSA_LO_IP}
613 log_start
614 show_hint "Response generates ICMP (or arp request is ignored) due to ip rule"
615 run_cmd_nsb ping -c1 -w1 ${a}
616 log_test_addr ${a} $? 1 "ping in, blocked by rule"
617
618 [ "$VERBOSE" = "1" ] && echo
619 setup_cmd ip rule del pref 32765 from all lookup local
620 setup_cmd ip rule add pref 0 from all lookup local
621 setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit
622 setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit
623
624 #
625 # route blocks reachability to remote address
626 #
627 log_start
628 setup_cmd ip route replace unreachable ${NSB_LO_IP}
629 setup_cmd ip route replace unreachable ${NSB_IP}
630
631 a=${NSB_LO_IP}
632 run_cmd ping -c1 -w1 ${a}
633 log_test_addr ${a} $? 2 "ping out, blocked by route"
634
635 # NOTE: ipv4 actually allows the lookup to fail and yet still create
636 # a viable rtable if the oif (e.g., bind to device) is set, so this
637 # case succeeds despite not having a route for the address
638 # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
639
640 a=${NSA_LO_IP}
641 log_start
642 show_hint "Response is dropped (or arp request is ignored) due to ip route"
643 run_cmd_nsb ping -c1 -w1 ${a}
644 log_test_addr ${a} $? 1 "ping in, blocked by route"
645
646 #
647 # remove 'remote' routes; fallback to default
648 #
649 log_start
650 setup_cmd ip ro del ${NSB_LO_IP}
651
652 a=${NSB_LO_IP}
653 run_cmd ping -c1 -w1 ${a}
654 log_test_addr ${a} $? 2 "ping out, unreachable default route"
655
656 # NOTE: ipv4 actually allows the lookup to fail and yet still create
657 # a viable rtable if the oif (e.g., bind to device) is set, so this
658 # case succeeds despite not having a route for the address
659 # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
660 }
661
662 ipv4_ping_vrf()
663 {
664 local a
665
666 # should default on; does not exist on older kernels
667 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
668
669 #
670 # out
671 #
672 for a in ${NSB_IP} ${NSB_LO_IP}
673 do
674 log_start
675 run_cmd ping -c1 -w1 -I ${VRF} ${a}
676 log_test_addr ${a} $? 0 "ping out, VRF bind"
677
678 log_start
679 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
680 log_test_addr ${a} $? 0 "ping out, device bind"
681
682 log_start
683 run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${NSA_IP} ${a}
684 log_test_addr ${a} $? 0 "ping out, vrf device + dev address bind"
685
686 log_start
687 run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${VRF_IP} ${a}
688 log_test_addr ${a} $? 0 "ping out, vrf device + vrf address bind"
689 done
690
691 #
692 # in
693 #
694 for a in ${NSA_IP} ${VRF_IP}
695 do
696 log_start
697 run_cmd_nsb ping -c1 -w1 ${a}
698 log_test_addr ${a} $? 0 "ping in"
699 done
700
701 #
702 # local traffic, local address
703 #
704 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
705 do
706 log_start
707 show_hint "Source address should be ${a}"
708 run_cmd ping -c1 -w1 -I ${VRF} ${a}
709 log_test_addr ${a} $? 0 "ping local, VRF bind"
710 done
711
712 #
713 # local traffic, socket bound to device
714 #
715 # address on device
716 a=${NSA_IP}
717 log_start
718 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
719 log_test_addr ${a} $? 0 "ping local, device bind"
720
721 # vrf device is out of scope
722 for a in ${VRF_IP} 127.0.0.1
723 do
724 log_start
725 show_hint "Fails since address on vrf device is out of device scope"
726 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
727 log_test_addr ${a} $? 1 "ping local, device bind"
728 done
729
730 #
731 # ip rule blocks address
732 #
733 log_start
734 setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit
735 setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit
736
737 a=${NSB_LO_IP}
738 run_cmd ping -c1 -w1 -I ${VRF} ${a}
739 log_test_addr ${a} $? 2 "ping out, vrf bind, blocked by rule"
740
741 log_start
742 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
743 log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
744
745 a=${NSA_LO_IP}
746 log_start
747 show_hint "Response lost due to ip rule"
748 run_cmd_nsb ping -c1 -w1 ${a}
749 log_test_addr ${a} $? 1 "ping in, blocked by rule"
750
751 [ "$VERBOSE" = "1" ] && echo
752 setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit
753 setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit
754
755 #
756 # remove 'remote' routes; fallback to default
757 #
758 log_start
759 setup_cmd ip ro del vrf ${VRF} ${NSB_LO_IP}
760
761 a=${NSB_LO_IP}
762 run_cmd ping -c1 -w1 -I ${VRF} ${a}
763 log_test_addr ${a} $? 2 "ping out, vrf bind, unreachable route"
764
765 log_start
766 run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}
767 log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
768
769 a=${NSA_LO_IP}
770 log_start
771 show_hint "Response lost by unreachable route"
772 run_cmd_nsb ping -c1 -w1 ${a}
773 log_test_addr ${a} $? 1 "ping in, unreachable route"
774 }
775
776 ipv4_ping()
777 {
778 log_section "IPv4 ping"
779
780 log_subsection "No VRF"
781 setup
782 set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null
783 ipv4_ping_novrf
784 setup
785 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
786 ipv4_ping_novrf
787
788 log_subsection "With VRF"
789 setup "yes"
790 ipv4_ping_vrf
791 }
792
793 ################################################################################
794 # IPv4 TCP
795
796 #
797 # MD5 tests without VRF
798 #
799 ipv4_tcp_md5_novrf()
800 {
801 #
802 # single address
803 #
804
805 # basic use case
806 log_start
807 run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &
808 sleep 1
809 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
810 log_test $? 0 "MD5: Single address config"
811
812 # client sends MD5, server not configured
813 log_start
814 show_hint "Should timeout due to MD5 mismatch"
815 run_cmd nettest -s &
816 sleep 1
817 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
818 log_test $? 2 "MD5: Server no config, client uses password"
819
820 # wrong password
821 log_start
822 show_hint "Should timeout since client uses wrong password"
823 run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &
824 sleep 1
825 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
826 log_test $? 2 "MD5: Client uses wrong password"
827
828 # client from different address
829 log_start
830 show_hint "Should timeout due to MD5 mismatch"
831 run_cmd nettest -s -M ${MD5_PW} -m ${NSB_LO_IP} &
832 sleep 1
833 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
834 log_test $? 2 "MD5: Client address does not match address configured with password"
835
836 #
837 # MD5 extension - prefix length
838 #
839
840 # client in prefix
841 log_start
842 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
843 sleep 1
844 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
845 log_test $? 0 "MD5: Prefix config"
846
847 # client in prefix, wrong password
848 log_start
849 show_hint "Should timeout since client uses wrong password"
850 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
851 sleep 1
852 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
853 log_test $? 2 "MD5: Prefix config, client uses wrong password"
854
855 # client outside of prefix
856 log_start
857 show_hint "Should timeout due to MD5 mismatch"
858 run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &
859 sleep 1
860 run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}
861 log_test $? 2 "MD5: Prefix config, client address not in configured prefix"
862 }
863
864 #
865 # MD5 tests with VRF
866 #
867 ipv4_tcp_md5()
868 {
869 #
870 # single address
871 #
872
873 # basic use case
874 log_start
875 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
876 sleep 1
877 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
878 log_test $? 0 "MD5: VRF: Single address config"
879
880 # client sends MD5, server not configured
881 log_start
882 show_hint "Should timeout since server does not have MD5 auth"
883 run_cmd nettest -s -I ${VRF} &
884 sleep 1
885 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
886 log_test $? 2 "MD5: VRF: Server no config, client uses password"
887
888 # wrong password
889 log_start
890 show_hint "Should timeout since client uses wrong password"
891 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
892 sleep 1
893 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
894 log_test $? 2 "MD5: VRF: Client uses wrong password"
895
896 # client from different address
897 log_start
898 show_hint "Should timeout since server config differs from client"
899 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP} &
900 sleep 1
901 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
902 log_test $? 2 "MD5: VRF: Client address does not match address configured with password"
903
904 #
905 # MD5 extension - prefix length
906 #
907
908 # client in prefix
909 log_start
910 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
911 sleep 1
912 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
913 log_test $? 0 "MD5: VRF: Prefix config"
914
915 # client in prefix, wrong password
916 log_start
917 show_hint "Should timeout since client uses wrong password"
918 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
919 sleep 1
920 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
921 log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"
922
923 # client outside of prefix
924 log_start
925 show_hint "Should timeout since client address is outside of prefix"
926 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
927 sleep 1
928 run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}
929 log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"
930
931 #
932 # duplicate config between default VRF and a VRF
933 #
934
935 log_start
936 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
937 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
938 sleep 1
939 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
940 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"
941
942 log_start
943 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
944 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
945 sleep 1
946 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
947 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"
948
949 log_start
950 show_hint "Should timeout since client in default VRF uses VRF password"
951 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
952 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
953 sleep 1
954 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
955 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"
956
957 log_start
958 show_hint "Should timeout since client in VRF uses default VRF password"
959 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &
960 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &
961 sleep 1
962 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
963 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"
964
965 log_start
966 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
967 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
968 sleep 1
969 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}
970 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"
971
972 log_start
973 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
974 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
975 sleep 1
976 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
977 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"
978
979 log_start
980 show_hint "Should timeout since client in default VRF uses VRF password"
981 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
982 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
983 sleep 1
984 run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}
985 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"
986
987 log_start
988 show_hint "Should timeout since client in VRF uses default VRF password"
989 run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &
990 run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &
991 sleep 1
992 run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}
993 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"
994
995 #
996 # negative tests
997 #
998 log_start
999 run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP}
1000 log_test $? 1 "MD5: VRF: Device must be a VRF - single address"
1001
1002 log_start
1003 run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET}
1004 log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"
1005
1006 }
1007
1008 ipv4_tcp_novrf()
1009 {
1010 local a
1011
1012 #
1013 # server tests
1014 #
1015 for a in ${NSA_IP} ${NSA_LO_IP}
1016 do
1017 log_start
1018 run_cmd nettest -s &
1019 sleep 1
1020 run_cmd_nsb nettest -r ${a}
1021 log_test_addr ${a} $? 0 "Global server"
1022 done
1023
1024 a=${NSA_IP}
1025 log_start
1026 run_cmd nettest -s -I ${NSA_DEV} &
1027 sleep 1
1028 run_cmd_nsb nettest -r ${a}
1029 log_test_addr ${a} $? 0 "Device server"
1030
1031 # verify TCP reset sent and received
1032 for a in ${NSA_IP} ${NSA_LO_IP}
1033 do
1034 log_start
1035 show_hint "Should fail 'Connection refused' since there is no server"
1036 run_cmd_nsb nettest -r ${a}
1037 log_test_addr ${a} $? 1 "No server"
1038 done
1039
1040 #
1041 # client
1042 #
1043 for a in ${NSB_IP} ${NSB_LO_IP}
1044 do
1045 log_start
1046 run_cmd_nsb nettest -s &
1047 sleep 1
1048 run_cmd nettest -r ${a} -0 ${NSA_IP}
1049 log_test_addr ${a} $? 0 "Client"
1050
1051 log_start
1052 run_cmd_nsb nettest -s &
1053 sleep 1
1054 run_cmd nettest -r ${a} -d ${NSA_DEV}
1055 log_test_addr ${a} $? 0 "Client, device bind"
1056
1057 log_start
1058 show_hint "Should fail 'Connection refused'"
1059 run_cmd nettest -r ${a}
1060 log_test_addr ${a} $? 1 "No server, unbound client"
1061
1062 log_start
1063 show_hint "Should fail 'Connection refused'"
1064 run_cmd nettest -r ${a} -d ${NSA_DEV}
1065 log_test_addr ${a} $? 1 "No server, device client"
1066 done
1067
1068 #
1069 # local address tests
1070 #
1071 for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
1072 do
1073 log_start
1074 run_cmd nettest -s &
1075 sleep 1
1076 run_cmd nettest -r ${a} -0 ${a} -1 ${a}
1077 log_test_addr ${a} $? 0 "Global server, local connection"
1078 done
1079
1080 a=${NSA_IP}
1081 log_start
1082 run_cmd nettest -s -I ${NSA_DEV} &
1083 sleep 1
1084 run_cmd nettest -r ${a} -0 ${a}
1085 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
1086
1087 for a in ${NSA_LO_IP} 127.0.0.1
1088 do
1089 log_start
1090 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
1091 run_cmd nettest -s -I ${NSA_DEV} &
1092 sleep 1
1093 run_cmd nettest -r ${a}
1094 log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
1095 done
1096
1097 a=${NSA_IP}
1098 log_start
1099 run_cmd nettest -s &
1100 sleep 1
1101 run_cmd nettest -r ${a} -0 ${a} -d ${NSA_DEV}
1102 log_test_addr ${a} $? 0 "Global server, device client, local connection"
1103
1104 for a in ${NSA_LO_IP} 127.0.0.1
1105 do
1106 log_start
1107 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
1108 run_cmd nettest -s &
1109 sleep 1
1110 run_cmd nettest -r ${a} -d ${NSA_DEV}
1111 log_test_addr ${a} $? 1 "Global server, device client, local connection"
1112 done
1113
1114 a=${NSA_IP}
1115 log_start
1116 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1117 sleep 1
1118 run_cmd nettest -d ${NSA_DEV} -r ${a} -0 ${a}
1119 log_test_addr ${a} $? 0 "Device server, device client, local connection"
1120
1121 log_start
1122 show_hint "Should fail 'Connection refused'"
1123 run_cmd nettest -d ${NSA_DEV} -r ${a}
1124 log_test_addr ${a} $? 1 "No server, device client, local conn"
1125
1126 ipv4_tcp_md5_novrf
1127 }
1128
1129 ipv4_tcp_vrf()
1130 {
1131 local a
1132
1133 # disable global server
1134 log_subsection "Global server disabled"
1135
1136 set_sysctl net.ipv4.tcp_l3mdev_accept=0
1137
1138 #
1139 # server tests
1140 #
1141 for a in ${NSA_IP} ${VRF_IP}
1142 do
1143 log_start
1144 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
1145 run_cmd nettest -s &
1146 sleep 1
1147 run_cmd_nsb nettest -r ${a}
1148 log_test_addr ${a} $? 1 "Global server"
1149
1150 log_start
1151 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1152 sleep 1
1153 run_cmd_nsb nettest -r ${a}
1154 log_test_addr ${a} $? 0 "VRF server"
1155
1156 log_start
1157 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1158 sleep 1
1159 run_cmd_nsb nettest -r ${a}
1160 log_test_addr ${a} $? 0 "Device server"
1161
1162 # verify TCP reset received
1163 log_start
1164 show_hint "Should fail 'Connection refused' since there is no server"
1165 run_cmd_nsb nettest -r ${a}
1166 log_test_addr ${a} $? 1 "No server"
1167 done
1168
1169 # local address tests
1170 # (${VRF_IP} and 127.0.0.1 both timeout)
1171 a=${NSA_IP}
1172 log_start
1173 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
1174 run_cmd nettest -s &
1175 sleep 1
1176 run_cmd nettest -r ${a} -d ${NSA_DEV}
1177 log_test_addr ${a} $? 1 "Global server, local connection"
1178
1179 # run MD5 tests
1180 ipv4_tcp_md5
1181
1182 #
1183 # enable VRF global server
1184 #
1185 log_subsection "VRF Global server enabled"
1186 set_sysctl net.ipv4.tcp_l3mdev_accept=1
1187
1188 for a in ${NSA_IP} ${VRF_IP}
1189 do
1190 log_start
1191 show_hint "client socket should be bound to VRF"
1192 run_cmd nettest -s -3 ${VRF} &
1193 sleep 1
1194 run_cmd_nsb nettest -r ${a}
1195 log_test_addr ${a} $? 0 "Global server"
1196
1197 log_start
1198 show_hint "client socket should be bound to VRF"
1199 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1200 sleep 1
1201 run_cmd_nsb nettest -r ${a}
1202 log_test_addr ${a} $? 0 "VRF server"
1203
1204 # verify TCP reset received
1205 log_start
1206 show_hint "Should fail 'Connection refused'"
1207 run_cmd_nsb nettest -r ${a}
1208 log_test_addr ${a} $? 1 "No server"
1209 done
1210
1211 a=${NSA_IP}
1212 log_start
1213 show_hint "client socket should be bound to device"
1214 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1215 sleep 1
1216 run_cmd_nsb nettest -r ${a}
1217 log_test_addr ${a} $? 0 "Device server"
1218
1219 # local address tests
1220 for a in ${NSA_IP} ${VRF_IP}
1221 do
1222 log_start
1223 show_hint "Should fail 'Connection refused' since client is not bound to VRF"
1224 run_cmd nettest -s -I ${VRF} &
1225 sleep 1
1226 run_cmd nettest -r ${a}
1227 log_test_addr ${a} $? 1 "Global server, local connection"
1228 done
1229
1230 #
1231 # client
1232 #
1233 for a in ${NSB_IP} ${NSB_LO_IP}
1234 do
1235 log_start
1236 run_cmd_nsb nettest -s &
1237 sleep 1
1238 run_cmd nettest -r ${a} -d ${VRF}
1239 log_test_addr ${a} $? 0 "Client, VRF bind"
1240
1241 log_start
1242 run_cmd_nsb nettest -s &
1243 sleep 1
1244 run_cmd nettest -r ${a} -d ${NSA_DEV}
1245 log_test_addr ${a} $? 0 "Client, device bind"
1246
1247 log_start
1248 show_hint "Should fail 'Connection refused'"
1249 run_cmd nettest -r ${a} -d ${VRF}
1250 log_test_addr ${a} $? 1 "No server, VRF client"
1251
1252 log_start
1253 show_hint "Should fail 'Connection refused'"
1254 run_cmd nettest -r ${a} -d ${NSA_DEV}
1255 log_test_addr ${a} $? 1 "No server, device client"
1256 done
1257
1258 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
1259 do
1260 log_start
1261 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1262 sleep 1
1263 run_cmd nettest -r ${a} -d ${VRF} -0 ${a}
1264 log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"
1265 done
1266
1267 a=${NSA_IP}
1268 log_start
1269 run_cmd nettest -s -I ${VRF} -3 ${VRF} &
1270 sleep 1
1271 run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}
1272 log_test_addr ${a} $? 0 "VRF server, device client, local connection"
1273
1274 log_start
1275 show_hint "Should fail 'No route to host' since client is out of VRF scope"
1276 run_cmd nettest -s -I ${VRF} &
1277 sleep 1
1278 run_cmd nettest -r ${a}
1279 log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"
1280
1281 log_start
1282 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1283 sleep 1
1284 run_cmd nettest -r ${a} -d ${VRF} -0 ${a}
1285 log_test_addr ${a} $? 0 "Device server, VRF client, local connection"
1286
1287 log_start
1288 run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1289 sleep 1
1290 run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}
1291 log_test_addr ${a} $? 0 "Device server, device client, local connection"
1292 }
1293
1294 ipv4_tcp()
1295 {
1296 log_section "IPv4/TCP"
1297 log_subsection "No VRF"
1298 setup
1299
1300 # tcp_l3mdev_accept should have no affect without VRF;
1301 # run tests with it enabled and disabled to verify
1302 log_subsection "tcp_l3mdev_accept disabled"
1303 set_sysctl net.ipv4.tcp_l3mdev_accept=0
1304 ipv4_tcp_novrf
1305 log_subsection "tcp_l3mdev_accept enabled"
1306 set_sysctl net.ipv4.tcp_l3mdev_accept=1
1307 ipv4_tcp_novrf
1308
1309 log_subsection "With VRF"
1310 setup "yes"
1311 ipv4_tcp_vrf
1312 }
1313
1314 ################################################################################
1315 # IPv4 UDP
1316
1317 ipv4_udp_novrf()
1318 {
1319 local a
1320
1321 #
1322 # server tests
1323 #
1324 for a in ${NSA_IP} ${NSA_LO_IP}
1325 do
1326 log_start
1327 run_cmd nettest -D -s -3 ${NSA_DEV} &
1328 sleep 1
1329 run_cmd_nsb nettest -D -r ${a}
1330 log_test_addr ${a} $? 0 "Global server"
1331
1332 log_start
1333 show_hint "Should fail 'Connection refused' since there is no server"
1334 run_cmd_nsb nettest -D -r ${a}
1335 log_test_addr ${a} $? 1 "No server"
1336 done
1337
1338 a=${NSA_IP}
1339 log_start
1340 run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
1341 sleep 1
1342 run_cmd_nsb nettest -D -r ${a}
1343 log_test_addr ${a} $? 0 "Device server"
1344
1345 #
1346 # client
1347 #
1348 for a in ${NSB_IP} ${NSB_LO_IP}
1349 do
1350 log_start
1351 run_cmd_nsb nettest -D -s &
1352 sleep 1
1353 run_cmd nettest -D -r ${a} -0 ${NSA_IP}
1354 log_test_addr ${a} $? 0 "Client"
1355
1356 log_start
1357 run_cmd_nsb nettest -D -s &
1358 sleep 1
1359 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP}
1360 log_test_addr ${a} $? 0 "Client, device bind"
1361
1362 log_start
1363 run_cmd_nsb nettest -D -s &
1364 sleep 1
1365 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP}
1366 log_test_addr ${a} $? 0 "Client, device send via cmsg"
1367
1368 log_start
1369 run_cmd_nsb nettest -D -s &
1370 sleep 1
1371 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP}
1372 log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF"
1373
1374 log_start
1375 show_hint "Should fail 'Connection refused'"
1376 run_cmd nettest -D -r ${a}
1377 log_test_addr ${a} $? 1 "No server, unbound client"
1378
1379 log_start
1380 show_hint "Should fail 'Connection refused'"
1381 run_cmd nettest -D -r ${a} -d ${NSA_DEV}
1382 log_test_addr ${a} $? 1 "No server, device client"
1383 done
1384
1385 #
1386 # local address tests
1387 #
1388 for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1
1389 do
1390 log_start
1391 run_cmd nettest -D -s &
1392 sleep 1
1393 run_cmd nettest -D -r ${a} -0 ${a} -1 ${a}
1394 log_test_addr ${a} $? 0 "Global server, local connection"
1395 done
1396
1397 a=${NSA_IP}
1398 log_start
1399 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1400 sleep 1
1401 run_cmd nettest -D -r ${a}
1402 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
1403
1404 for a in ${NSA_LO_IP} 127.0.0.1
1405 do
1406 log_start
1407 show_hint "Should fail 'Connection refused' since address is out of device scope"
1408 run_cmd nettest -s -D -I ${NSA_DEV} &
1409 sleep 1
1410 run_cmd nettest -D -r ${a}
1411 log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
1412 done
1413
1414 a=${NSA_IP}
1415 log_start
1416 run_cmd nettest -s -D &
1417 sleep 1
1418 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1419 log_test_addr ${a} $? 0 "Global server, device client, local connection"
1420
1421 log_start
1422 run_cmd nettest -s -D &
1423 sleep 1
1424 run_cmd nettest -D -d ${NSA_DEV} -C -r ${a}
1425 log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"
1426
1427 log_start
1428 run_cmd nettest -s -D &
1429 sleep 1
1430 run_cmd nettest -D -d ${NSA_DEV} -S -r ${a}
1431 log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection"
1432
1433 # IPv4 with device bind has really weird behavior - it overrides the
1434 # fib lookup, generates an rtable and tries to send the packet. This
1435 # causes failures for local traffic at different places
1436 for a in ${NSA_LO_IP} 127.0.0.1
1437 do
1438 log_start
1439 show_hint "Should fail since addresses on loopback are out of device scope"
1440 run_cmd nettest -D -s &
1441 sleep 1
1442 run_cmd nettest -D -r ${a} -d ${NSA_DEV}
1443 log_test_addr ${a} $? 2 "Global server, device client, local connection"
1444
1445 log_start
1446 show_hint "Should fail since addresses on loopback are out of device scope"
1447 run_cmd nettest -D -s &
1448 sleep 1
1449 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C
1450 log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"
1451
1452 log_start
1453 show_hint "Should fail since addresses on loopback are out of device scope"
1454 run_cmd nettest -D -s &
1455 sleep 1
1456 run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S
1457 log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"
1458 done
1459
1460 a=${NSA_IP}
1461 log_start
1462 run_cmd nettest -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &
1463 sleep 1
1464 run_cmd nettest -D -d ${NSA_DEV} -r ${a} -0 ${a}
1465 log_test_addr ${a} $? 0 "Device server, device client, local conn"
1466
1467 log_start
1468 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1469 log_test_addr ${a} $? 2 "No server, device client, local conn"
1470 }
1471
1472 ipv4_udp_vrf()
1473 {
1474 local a
1475
1476 # disable global server
1477 log_subsection "Global server disabled"
1478 set_sysctl net.ipv4.udp_l3mdev_accept=0
1479
1480 #
1481 # server tests
1482 #
1483 for a in ${NSA_IP} ${VRF_IP}
1484 do
1485 log_start
1486 show_hint "Fails because ingress is in a VRF and global server is disabled"
1487 run_cmd nettest -D -s &
1488 sleep 1
1489 run_cmd_nsb nettest -D -r ${a}
1490 log_test_addr ${a} $? 1 "Global server"
1491
1492 log_start
1493 run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &
1494 sleep 1
1495 run_cmd_nsb nettest -D -r ${a}
1496 log_test_addr ${a} $? 0 "VRF server"
1497
1498 log_start
1499 run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
1500 sleep 1
1501 run_cmd_nsb nettest -D -r ${a}
1502 log_test_addr ${a} $? 0 "Enslaved device server"
1503
1504 log_start
1505 show_hint "Should fail 'Connection refused' since there is no server"
1506 run_cmd_nsb nettest -D -r ${a}
1507 log_test_addr ${a} $? 1 "No server"
1508
1509 log_start
1510 show_hint "Should fail 'Connection refused' since global server is out of scope"
1511 run_cmd nettest -D -s &
1512 sleep 1
1513 run_cmd nettest -D -d ${VRF} -r ${a}
1514 log_test_addr ${a} $? 1 "Global server, VRF client, local connection"
1515 done
1516
1517 a=${NSA_IP}
1518 log_start
1519 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1520 sleep 1
1521 run_cmd nettest -D -d ${VRF} -r ${a}
1522 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
1523
1524 log_start
1525 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1526 sleep 1
1527 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1528 log_test_addr ${a} $? 0 "VRF server, enslaved device client, local connection"
1529
1530 a=${NSA_IP}
1531 log_start
1532 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1533 sleep 1
1534 run_cmd nettest -D -d ${VRF} -r ${a}
1535 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
1536
1537 log_start
1538 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1539 sleep 1
1540 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1541 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
1542
1543 # enable global server
1544 log_subsection "Global server enabled"
1545 set_sysctl net.ipv4.udp_l3mdev_accept=1
1546
1547 #
1548 # server tests
1549 #
1550 for a in ${NSA_IP} ${VRF_IP}
1551 do
1552 log_start
1553 run_cmd nettest -D -s -3 ${NSA_DEV} &
1554 sleep 1
1555 run_cmd_nsb nettest -D -r ${a}
1556 log_test_addr ${a} $? 0 "Global server"
1557
1558 log_start
1559 run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &
1560 sleep 1
1561 run_cmd_nsb nettest -D -r ${a}
1562 log_test_addr ${a} $? 0 "VRF server"
1563
1564 log_start
1565 run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
1566 sleep 1
1567 run_cmd_nsb nettest -D -r ${a}
1568 log_test_addr ${a} $? 0 "Enslaved device server"
1569
1570 log_start
1571 show_hint "Should fail 'Connection refused'"
1572 run_cmd_nsb nettest -D -r ${a}
1573 log_test_addr ${a} $? 1 "No server"
1574 done
1575
1576 #
1577 # client tests
1578 #
1579 log_start
1580 run_cmd_nsb nettest -D -s &
1581 sleep 1
1582 run_cmd nettest -d ${VRF} -D -r ${NSB_IP} -1 ${NSA_IP}
1583 log_test $? 0 "VRF client"
1584
1585 log_start
1586 run_cmd_nsb nettest -D -s &
1587 sleep 1
1588 run_cmd nettest -d ${NSA_DEV} -D -r ${NSB_IP} -1 ${NSA_IP}
1589 log_test $? 0 "Enslaved device client"
1590
1591 # negative test - should fail
1592 log_start
1593 show_hint "Should fail 'Connection refused'"
1594 run_cmd nettest -D -d ${VRF} -r ${NSB_IP}
1595 log_test $? 1 "No server, VRF client"
1596
1597 log_start
1598 show_hint "Should fail 'Connection refused'"
1599 run_cmd nettest -D -d ${NSA_DEV} -r ${NSB_IP}
1600 log_test $? 1 "No server, enslaved device client"
1601
1602 #
1603 # local address tests
1604 #
1605 a=${NSA_IP}
1606 log_start
1607 run_cmd nettest -D -s -3 ${NSA_DEV} &
1608 sleep 1
1609 run_cmd nettest -D -d ${VRF} -r ${a}
1610 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
1611
1612 log_start
1613 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1614 sleep 1
1615 run_cmd nettest -D -d ${VRF} -r ${a}
1616 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
1617
1618 log_start
1619 run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &
1620 sleep 1
1621 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1622 log_test_addr ${a} $? 0 "VRF server, device client, local conn"
1623
1624 log_start
1625 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1626 sleep 1
1627 run_cmd nettest -D -d ${VRF} -r ${a}
1628 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
1629
1630 log_start
1631 run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
1632 sleep 1
1633 run_cmd nettest -D -d ${NSA_DEV} -r ${a}
1634 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
1635
1636 for a in ${VRF_IP} 127.0.0.1
1637 do
1638 log_start
1639 run_cmd nettest -D -s -3 ${VRF} &
1640 sleep 1
1641 run_cmd nettest -D -d ${VRF} -r ${a}
1642 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
1643 done
1644
1645 for a in ${VRF_IP} 127.0.0.1
1646 do
1647 log_start
1648 run_cmd nettest -s -D -I ${VRF} -3 ${VRF} &
1649 sleep 1
1650 run_cmd nettest -D -d ${VRF} -r ${a}
1651 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
1652 done
1653
1654 # negative test - should fail
1655 # verifies ECONNREFUSED
1656 for a in ${NSA_IP} ${VRF_IP} 127.0.0.1
1657 do
1658 log_start
1659 show_hint "Should fail 'Connection refused'"
1660 run_cmd nettest -D -d ${VRF} -r ${a}
1661 log_test_addr ${a} $? 1 "No server, VRF client, local conn"
1662 done
1663 }
1664
1665 ipv4_udp()
1666 {
1667 log_section "IPv4/UDP"
1668 log_subsection "No VRF"
1669
1670 setup
1671
1672 # udp_l3mdev_accept should have no affect without VRF;
1673 # run tests with it enabled and disabled to verify
1674 log_subsection "udp_l3mdev_accept disabled"
1675 set_sysctl net.ipv4.udp_l3mdev_accept=0
1676 ipv4_udp_novrf
1677 log_subsection "udp_l3mdev_accept enabled"
1678 set_sysctl net.ipv4.udp_l3mdev_accept=1
1679 ipv4_udp_novrf
1680
1681 log_subsection "With VRF"
1682 setup "yes"
1683 ipv4_udp_vrf
1684 }
1685
1686 ################################################################################
1687 # IPv4 address bind
1688 #
1689 # verifies ability or inability to bind to an address / device
1690
1691 ipv4_addr_bind_novrf()
1692 {
1693 #
1694 # raw socket
1695 #
1696 for a in ${NSA_IP} ${NSA_LO_IP}
1697 do
1698 log_start
1699 run_cmd nettest -s -R -P icmp -l ${a} -b
1700 log_test_addr ${a} $? 0 "Raw socket bind to local address"
1701
1702 log_start
1703 run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b
1704 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
1705 done
1706
1707 #
1708 # tcp sockets
1709 #
1710 a=${NSA_IP}
1711 log_start
1712 run_cmd nettest -c ${a} -r ${NSB_IP} -t1 -b
1713 log_test_addr ${a} $? 0 "TCP socket bind to local address"
1714
1715 log_start
1716 run_cmd nettest -c ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b
1717 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
1718
1719 # Sadly, the kernel allows binding a socket to a device and then
1720 # binding to an address not on the device. The only restriction
1721 # is that the address is valid in the L3 domain. So this test
1722 # passes when it really should not
1723 #a=${NSA_LO_IP}
1724 #log_start
1725 #show_hint "Should fail with 'Cannot assign requested address'"
1726 #run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
1727 #log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address"
1728 }
1729
1730 ipv4_addr_bind_vrf()
1731 {
1732 #
1733 # raw socket
1734 #
1735 for a in ${NSA_IP} ${VRF_IP}
1736 do
1737 log_start
1738 run_cmd nettest -s -R -P icmp -l ${a} -b
1739 log_test_addr ${a} $? 0 "Raw socket bind to local address"
1740
1741 log_start
1742 run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b
1743 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
1744 log_start
1745 run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b
1746 log_test_addr ${a} $? 0 "Raw socket bind to local address after VRF bind"
1747 done
1748
1749 a=${NSA_LO_IP}
1750 log_start
1751 show_hint "Address on loopback is out of VRF scope"
1752 run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b
1753 log_test_addr ${a} $? 1 "Raw socket bind to out of scope address after VRF bind"
1754
1755 #
1756 # tcp sockets
1757 #
1758 for a in ${NSA_IP} ${VRF_IP}
1759 do
1760 log_start
1761 run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b
1762 log_test_addr ${a} $? 0 "TCP socket bind to local address"
1763
1764 log_start
1765 run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
1766 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
1767 done
1768
1769 a=${NSA_LO_IP}
1770 log_start
1771 show_hint "Address on loopback out of scope for VRF"
1772 run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b
1773 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"
1774
1775 log_start
1776 show_hint "Address on loopback out of scope for device in VRF"
1777 run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b
1778 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"
1779 }
1780
1781 ipv4_addr_bind()
1782 {
1783 log_section "IPv4 address binds"
1784
1785 log_subsection "No VRF"
1786 setup
1787 ipv4_addr_bind_novrf
1788
1789 log_subsection "With VRF"
1790 setup "yes"
1791 ipv4_addr_bind_vrf
1792 }
1793
1794 ################################################################################
1795 # IPv4 runtime tests
1796
1797 ipv4_rt()
1798 {
1799 local desc="$1"
1800 local varg="$2"
1801 local with_vrf="yes"
1802 local a
1803
1804 #
1805 # server tests
1806 #
1807 for a in ${NSA_IP} ${VRF_IP}
1808 do
1809 log_start
1810 run_cmd nettest ${varg} -s &
1811 sleep 1
1812 run_cmd_nsb nettest ${varg} -r ${a} &
1813 sleep 3
1814 run_cmd ip link del ${VRF}
1815 sleep 1
1816 log_test_addr ${a} 0 0 "${desc}, global server"
1817
1818 setup ${with_vrf}
1819 done
1820
1821 for a in ${NSA_IP} ${VRF_IP}
1822 do
1823 log_start
1824 run_cmd nettest ${varg} -s -I ${VRF} &
1825 sleep 1
1826 run_cmd_nsb nettest ${varg} -r ${a} &
1827 sleep 3
1828 run_cmd ip link del ${VRF}
1829 sleep 1
1830 log_test_addr ${a} 0 0 "${desc}, VRF server"
1831
1832 setup ${with_vrf}
1833 done
1834
1835 a=${NSA_IP}
1836 log_start
1837 run_cmd nettest ${varg} -s -I ${NSA_DEV} &
1838 sleep 1
1839 run_cmd_nsb nettest ${varg} -r ${a} &
1840 sleep 3
1841 run_cmd ip link del ${VRF}
1842 sleep 1
1843 log_test_addr ${a} 0 0 "${desc}, enslaved device server"
1844
1845 setup ${with_vrf}
1846
1847 #
1848 # client test
1849 #
1850 log_start
1851 run_cmd_nsb nettest ${varg} -s &
1852 sleep 1
1853 run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP} &
1854 sleep 3
1855 run_cmd ip link del ${VRF}
1856 sleep 1
1857 log_test_addr ${a} 0 0 "${desc}, VRF client"
1858
1859 setup ${with_vrf}
1860
1861 log_start
1862 run_cmd_nsb nettest ${varg} -s &
1863 sleep 1
1864 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP} &
1865 sleep 3
1866 run_cmd ip link del ${VRF}
1867 sleep 1
1868 log_test_addr ${a} 0 0 "${desc}, enslaved device client"
1869
1870 setup ${with_vrf}
1871
1872 #
1873 # local address tests
1874 #
1875 for a in ${NSA_IP} ${VRF_IP}
1876 do
1877 log_start
1878 run_cmd nettest ${varg} -s &
1879 sleep 1
1880 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
1881 sleep 3
1882 run_cmd ip link del ${VRF}
1883 sleep 1
1884 log_test_addr ${a} 0 0 "${desc}, global server, VRF client, local"
1885
1886 setup ${with_vrf}
1887 done
1888
1889 for a in ${NSA_IP} ${VRF_IP}
1890 do
1891 log_start
1892 run_cmd nettest ${varg} -I ${VRF} -s &
1893 sleep 1
1894 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
1895 sleep 3
1896 run_cmd ip link del ${VRF}
1897 sleep 1
1898 log_test_addr ${a} 0 0 "${desc}, VRF server and client, local"
1899
1900 setup ${with_vrf}
1901 done
1902
1903 a=${NSA_IP}
1904 log_start
1905 run_cmd nettest ${varg} -s &
1906 sleep 1
1907 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
1908 sleep 3
1909 run_cmd ip link del ${VRF}
1910 sleep 1
1911 log_test_addr ${a} 0 0 "${desc}, global server, enslaved device client, local"
1912
1913 setup ${with_vrf}
1914
1915 log_start
1916 run_cmd nettest ${varg} -I ${VRF} -s &
1917 sleep 1
1918 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
1919 sleep 3
1920 run_cmd ip link del ${VRF}
1921 sleep 1
1922 log_test_addr ${a} 0 0 "${desc}, VRF server, enslaved device client, local"
1923
1924 setup ${with_vrf}
1925
1926 log_start
1927 run_cmd nettest ${varg} -I ${NSA_DEV} -s &
1928 sleep 1
1929 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
1930 sleep 3
1931 run_cmd ip link del ${VRF}
1932 sleep 1
1933 log_test_addr ${a} 0 0 "${desc}, enslaved device server and client, local"
1934 }
1935
1936 ipv4_ping_rt()
1937 {
1938 local with_vrf="yes"
1939 local a
1940
1941 for a in ${NSA_IP} ${VRF_IP}
1942 do
1943 log_start
1944 run_cmd_nsb ping -f ${a} &
1945 sleep 3
1946 run_cmd ip link del ${VRF}
1947 sleep 1
1948 log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"
1949
1950 setup ${with_vrf}
1951 done
1952
1953 a=${NSB_IP}
1954 log_start
1955 run_cmd ping -f -I ${VRF} ${a} &
1956 sleep 3
1957 run_cmd ip link del ${VRF}
1958 sleep 1
1959 log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"
1960 }
1961
1962 ipv4_runtime()
1963 {
1964 log_section "Run time tests - ipv4"
1965
1966 setup "yes"
1967 ipv4_ping_rt
1968
1969 setup "yes"
1970 ipv4_rt "TCP active socket" "-n -1"
1971
1972 setup "yes"
1973 ipv4_rt "TCP passive socket" "-i"
1974 }
1975
1976 ################################################################################
1977 # IPv6
1978
1979 ipv6_ping_novrf()
1980 {
1981 local a
1982
1983 # should not have an impact, but make a known state
1984 set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null
1985
1986 #
1987 # out
1988 #
1989 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
1990 do
1991 log_start
1992 run_cmd ${ping6} -c1 -w1 ${a}
1993 log_test_addr ${a} $? 0 "ping out"
1994 done
1995
1996 for a in ${NSB_IP6} ${NSB_LO_IP6}
1997 do
1998 log_start
1999 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2000 log_test_addr ${a} $? 0 "ping out, device bind"
2001
2002 log_start
2003 run_cmd ${ping6} -c1 -w1 -I ${NSA_LO_IP6} ${a}
2004 log_test_addr ${a} $? 0 "ping out, loopback address bind"
2005 done
2006
2007 #
2008 # in
2009 #
2010 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}
2011 do
2012 log_start
2013 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2014 log_test_addr ${a} $? 0 "ping in"
2015 done
2016
2017 #
2018 # local traffic, local address
2019 #
2020 for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2021 do
2022 log_start
2023 run_cmd ${ping6} -c1 -w1 ${a}
2024 log_test_addr ${a} $? 0 "ping local, no bind"
2025 done
2026
2027 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2028 do
2029 log_start
2030 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2031 log_test_addr ${a} $? 0 "ping local, device bind"
2032 done
2033
2034 for a in ${NSA_LO_IP6} ::1
2035 do
2036 log_start
2037 show_hint "Fails since address on loopback is out of device scope"
2038 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2039 log_test_addr ${a} $? 2 "ping local, device bind"
2040 done
2041
2042 #
2043 # ip rule blocks address
2044 #
2045 log_start
2046 setup_cmd ip -6 rule add pref 32765 from all lookup local
2047 setup_cmd ip -6 rule del pref 0 from all lookup local
2048 setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit
2049 setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit
2050
2051 a=${NSB_LO_IP6}
2052 run_cmd ${ping6} -c1 -w1 ${a}
2053 log_test_addr ${a} $? 2 "ping out, blocked by rule"
2054
2055 log_start
2056 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2057 log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
2058
2059 a=${NSA_LO_IP6}
2060 log_start
2061 show_hint "Response lost due to ip rule"
2062 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2063 log_test_addr ${a} $? 1 "ping in, blocked by rule"
2064
2065 setup_cmd ip -6 rule add pref 0 from all lookup local
2066 setup_cmd ip -6 rule del pref 32765 from all lookup local
2067 setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit
2068 setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit
2069
2070 #
2071 # route blocks reachability to remote address
2072 #
2073 log_start
2074 setup_cmd ip -6 route del ${NSB_LO_IP6}
2075 setup_cmd ip -6 route add unreachable ${NSB_LO_IP6} metric 10
2076 setup_cmd ip -6 route add unreachable ${NSB_IP6} metric 10
2077
2078 a=${NSB_LO_IP6}
2079 run_cmd ${ping6} -c1 -w1 ${a}
2080 log_test_addr ${a} $? 2 "ping out, blocked by route"
2081
2082 log_start
2083 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2084 log_test_addr ${a} $? 2 "ping out, device bind, blocked by route"
2085
2086 a=${NSA_LO_IP6}
2087 log_start
2088 show_hint "Response lost due to ip route"
2089 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2090 log_test_addr ${a} $? 1 "ping in, blocked by route"
2091
2092
2093 #
2094 # remove 'remote' routes; fallback to default
2095 #
2096 log_start
2097 setup_cmd ip -6 ro del unreachable ${NSB_LO_IP6}
2098 setup_cmd ip -6 ro del unreachable ${NSB_IP6}
2099
2100 a=${NSB_LO_IP6}
2101 run_cmd ${ping6} -c1 -w1 ${a}
2102 log_test_addr ${a} $? 2 "ping out, unreachable route"
2103
2104 log_start
2105 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2106 log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
2107 }
2108
2109 ipv6_ping_vrf()
2110 {
2111 local a
2112
2113 # should default on; does not exist on older kernels
2114 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
2115
2116 #
2117 # out
2118 #
2119 for a in ${NSB_IP6} ${NSB_LO_IP6}
2120 do
2121 log_start
2122 run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}
2123 log_test_addr ${a} $? 0 "ping out, VRF bind"
2124 done
2125
2126 for a in ${NSB_LINKIP6}%${VRF} ${MCAST}%${VRF}
2127 do
2128 log_start
2129 show_hint "Fails since VRF device does not support linklocal or multicast"
2130 run_cmd ${ping6} -c1 -w1 ${a}
2131 log_test_addr ${a} $? 2 "ping out, VRF bind"
2132 done
2133
2134 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2135 do
2136 log_start
2137 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2138 log_test_addr ${a} $? 0 "ping out, device bind"
2139 done
2140
2141 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2142 do
2143 log_start
2144 run_cmd ip vrf exec ${VRF} ${ping6} -c1 -w1 -I ${VRF_IP6} ${a}
2145 log_test_addr ${a} $? 0 "ping out, vrf device+address bind"
2146 done
2147
2148 #
2149 # in
2150 #
2151 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}
2152 do
2153 log_start
2154 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2155 log_test_addr ${a} $? 0 "ping in"
2156 done
2157
2158 a=${NSA_LO_IP6}
2159 log_start
2160 show_hint "Fails since loopback address is out of VRF scope"
2161 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2162 log_test_addr ${a} $? 1 "ping in"
2163
2164 #
2165 # local traffic, local address
2166 #
2167 for a in ${NSA_IP6} ${VRF_IP6} ::1
2168 do
2169 log_start
2170 show_hint "Source address should be ${a}"
2171 run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}
2172 log_test_addr ${a} $? 0 "ping local, VRF bind"
2173 done
2174
2175 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}
2176 do
2177 log_start
2178 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2179 log_test_addr ${a} $? 0 "ping local, device bind"
2180 done
2181
2182 # LLA to GUA - remove ipv6 global addresses from ns-B
2183 setup_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
2184 setup_cmd_nsb ip -6 addr del ${NSB_LO_IP6}/128 dev lo
2185 setup_cmd_nsb ip -6 ro add ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}
2186
2187 for a in ${NSA_IP6} ${VRF_IP6}
2188 do
2189 log_start
2190 run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
2191 log_test_addr ${a} $? 0 "ping in, LLA to GUA"
2192 done
2193
2194 setup_cmd_nsb ip -6 ro del ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}
2195 setup_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV}
2196 setup_cmd_nsb ip -6 addr add ${NSB_LO_IP6}/128 dev lo
2197
2198 #
2199 # ip rule blocks address
2200 #
2201 log_start
2202 setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit
2203 setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit
2204
2205 a=${NSB_LO_IP6}
2206 run_cmd ${ping6} -c1 -w1 ${a}
2207 log_test_addr ${a} $? 2 "ping out, blocked by rule"
2208
2209 log_start
2210 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2211 log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"
2212
2213 a=${NSA_LO_IP6}
2214 log_start
2215 show_hint "Response lost due to ip rule"
2216 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2217 log_test_addr ${a} $? 1 "ping in, blocked by rule"
2218
2219 log_start
2220 setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit
2221 setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit
2222
2223 #
2224 # remove 'remote' routes; fallback to default
2225 #
2226 log_start
2227 setup_cmd ip -6 ro del ${NSB_LO_IP6} vrf ${VRF}
2228
2229 a=${NSB_LO_IP6}
2230 run_cmd ${ping6} -c1 -w1 ${a}
2231 log_test_addr ${a} $? 2 "ping out, unreachable route"
2232
2233 log_start
2234 run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}
2235 log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"
2236
2237 ip -netns ${NSB} -6 ro del ${NSA_LO_IP6}
2238 a=${NSA_LO_IP6}
2239 log_start
2240 run_cmd_nsb ${ping6} -c1 -w1 ${a}
2241 log_test_addr ${a} $? 2 "ping in, unreachable route"
2242 }
2243
2244 ipv6_ping()
2245 {
2246 log_section "IPv6 ping"
2247
2248 log_subsection "No VRF"
2249 setup
2250 ipv6_ping_novrf
2251
2252 log_subsection "With VRF"
2253 setup "yes"
2254 ipv6_ping_vrf
2255 }
2256
2257 ################################################################################
2258 # IPv6 TCP
2259
2260 #
2261 # MD5 tests without VRF
2262 #
2263 ipv6_tcp_md5_novrf()
2264 {
2265 #
2266 # single address
2267 #
2268
2269 # basic use case
2270 log_start
2271 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &
2272 sleep 1
2273 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2274 log_test $? 0 "MD5: Single address config"
2275
2276 # client sends MD5, server not configured
2277 log_start
2278 show_hint "Should timeout due to MD5 mismatch"
2279 run_cmd nettest -6 -s &
2280 sleep 1
2281 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2282 log_test $? 2 "MD5: Server no config, client uses password"
2283
2284 # wrong password
2285 log_start
2286 show_hint "Should timeout since client uses wrong password"
2287 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &
2288 sleep 1
2289 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2290 log_test $? 2 "MD5: Client uses wrong password"
2291
2292 # client from different address
2293 log_start
2294 show_hint "Should timeout due to MD5 mismatch"
2295 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_LO_IP6} &
2296 sleep 1
2297 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2298 log_test $? 2 "MD5: Client address does not match address configured with password"
2299
2300 #
2301 # MD5 extension - prefix length
2302 #
2303
2304 # client in prefix
2305 log_start
2306 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
2307 sleep 1
2308 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2309 log_test $? 0 "MD5: Prefix config"
2310
2311 # client in prefix, wrong password
2312 log_start
2313 show_hint "Should timeout since client uses wrong password"
2314 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
2315 sleep 1
2316 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2317 log_test $? 2 "MD5: Prefix config, client uses wrong password"
2318
2319 # client outside of prefix
2320 log_start
2321 show_hint "Should timeout due to MD5 mismatch"
2322 run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &
2323 sleep 1
2324 run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}
2325 log_test $? 2 "MD5: Prefix config, client address not in configured prefix"
2326 }
2327
2328 #
2329 # MD5 tests with VRF
2330 #
2331 ipv6_tcp_md5()
2332 {
2333 #
2334 # single address
2335 #
2336
2337 # basic use case
2338 log_start
2339 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2340 sleep 1
2341 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2342 log_test $? 0 "MD5: VRF: Single address config"
2343
2344 # client sends MD5, server not configured
2345 log_start
2346 show_hint "Should timeout since server does not have MD5 auth"
2347 run_cmd nettest -6 -s -I ${VRF} &
2348 sleep 1
2349 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2350 log_test $? 2 "MD5: VRF: Server no config, client uses password"
2351
2352 # wrong password
2353 log_start
2354 show_hint "Should timeout since client uses wrong password"
2355 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2356 sleep 1
2357 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2358 log_test $? 2 "MD5: VRF: Client uses wrong password"
2359
2360 # client from different address
2361 log_start
2362 show_hint "Should timeout since server config differs from client"
2363 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP6} &
2364 sleep 1
2365 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2366 log_test $? 2 "MD5: VRF: Client address does not match address configured with password"
2367
2368 #
2369 # MD5 extension - prefix length
2370 #
2371
2372 # client in prefix
2373 log_start
2374 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2375 sleep 1
2376 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2377 log_test $? 0 "MD5: VRF: Prefix config"
2378
2379 # client in prefix, wrong password
2380 log_start
2381 show_hint "Should timeout since client uses wrong password"
2382 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2383 sleep 1
2384 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2385 log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"
2386
2387 # client outside of prefix
2388 log_start
2389 show_hint "Should timeout since client address is outside of prefix"
2390 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2391 sleep 1
2392 run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}
2393 log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"
2394
2395 #
2396 # duplicate config between default VRF and a VRF
2397 #
2398
2399 log_start
2400 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2401 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2402 sleep 1
2403 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2404 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"
2405
2406 log_start
2407 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2408 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2409 sleep 1
2410 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2411 log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"
2412
2413 log_start
2414 show_hint "Should timeout since client in default VRF uses VRF password"
2415 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2416 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2417 sleep 1
2418 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2419 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"
2420
2421 log_start
2422 show_hint "Should timeout since client in VRF uses default VRF password"
2423 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &
2424 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &
2425 sleep 1
2426 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2427 log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"
2428
2429 log_start
2430 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2431 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2432 sleep 1
2433 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2434 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"
2435
2436 log_start
2437 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2438 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2439 sleep 1
2440 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2441 log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"
2442
2443 log_start
2444 show_hint "Should timeout since client in default VRF uses VRF password"
2445 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2446 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2447 sleep 1
2448 run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}
2449 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"
2450
2451 log_start
2452 show_hint "Should timeout since client in VRF uses default VRF password"
2453 run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &
2454 run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &
2455 sleep 1
2456 run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}
2457 log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"
2458
2459 #
2460 # negative tests
2461 #
2462 log_start
2463 run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP6}
2464 log_test $? 1 "MD5: VRF: Device must be a VRF - single address"
2465
2466 log_start
2467 run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6}
2468 log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"
2469
2470 }
2471
2472 ipv6_tcp_novrf()
2473 {
2474 local a
2475
2476 #
2477 # server tests
2478 #
2479 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2480 do
2481 log_start
2482 run_cmd nettest -6 -s &
2483 sleep 1
2484 run_cmd_nsb nettest -6 -r ${a}
2485 log_test_addr ${a} $? 0 "Global server"
2486 done
2487
2488 # verify TCP reset received
2489 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2490 do
2491 log_start
2492 show_hint "Should fail 'Connection refused'"
2493 run_cmd_nsb nettest -6 -r ${a}
2494 log_test_addr ${a} $? 1 "No server"
2495 done
2496
2497 #
2498 # client
2499 #
2500 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2501 do
2502 log_start
2503 run_cmd_nsb nettest -6 -s &
2504 sleep 1
2505 run_cmd nettest -6 -r ${a}
2506 log_test_addr ${a} $? 0 "Client"
2507 done
2508
2509 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2510 do
2511 log_start
2512 run_cmd_nsb nettest -6 -s &
2513 sleep 1
2514 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2515 log_test_addr ${a} $? 0 "Client, device bind"
2516 done
2517
2518 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2519 do
2520 log_start
2521 show_hint "Should fail 'Connection refused'"
2522 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2523 log_test_addr ${a} $? 1 "No server, device client"
2524 done
2525
2526 #
2527 # local address tests
2528 #
2529 for a in ${NSA_IP6} ${NSA_LO_IP6} ::1
2530 do
2531 log_start
2532 run_cmd nettest -6 -s &
2533 sleep 1
2534 run_cmd nettest -6 -r ${a}
2535 log_test_addr ${a} $? 0 "Global server, local connection"
2536 done
2537
2538 a=${NSA_IP6}
2539 log_start
2540 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2541 sleep 1
2542 run_cmd nettest -6 -r ${a} -0 ${a}
2543 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
2544
2545 for a in ${NSA_LO_IP6} ::1
2546 do
2547 log_start
2548 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
2549 run_cmd nettest -6 -s -I ${NSA_DEV} &
2550 sleep 1
2551 run_cmd nettest -6 -r ${a}
2552 log_test_addr ${a} $? 1 "Device server, unbound client, local connection"
2553 done
2554
2555 a=${NSA_IP6}
2556 log_start
2557 run_cmd nettest -6 -s &
2558 sleep 1
2559 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
2560 log_test_addr ${a} $? 0 "Global server, device client, local connection"
2561
2562 for a in ${NSA_LO_IP6} ::1
2563 do
2564 log_start
2565 show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"
2566 run_cmd nettest -6 -s &
2567 sleep 1
2568 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2569 log_test_addr ${a} $? 1 "Global server, device client, local connection"
2570 done
2571
2572 for a in ${NSA_IP6} ${NSA_LINKIP6}
2573 do
2574 log_start
2575 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2576 sleep 1
2577 run_cmd nettest -6 -d ${NSA_DEV} -r ${a}
2578 log_test_addr ${a} $? 0 "Device server, device client, local conn"
2579 done
2580
2581 for a in ${NSA_IP6} ${NSA_LINKIP6}
2582 do
2583 log_start
2584 show_hint "Should fail 'Connection refused'"
2585 run_cmd nettest -6 -d ${NSA_DEV} -r ${a}
2586 log_test_addr ${a} $? 1 "No server, device client, local conn"
2587 done
2588
2589 ipv6_tcp_md5_novrf
2590 }
2591
2592 ipv6_tcp_vrf()
2593 {
2594 local a
2595
2596 # disable global server
2597 log_subsection "Global server disabled"
2598
2599 set_sysctl net.ipv4.tcp_l3mdev_accept=0
2600
2601 #
2602 # server tests
2603 #
2604 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2605 do
2606 log_start
2607 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
2608 run_cmd nettest -6 -s &
2609 sleep 1
2610 run_cmd_nsb nettest -6 -r ${a}
2611 log_test_addr ${a} $? 1 "Global server"
2612 done
2613
2614 for a in ${NSA_IP6} ${VRF_IP6}
2615 do
2616 log_start
2617 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2618 sleep 1
2619 run_cmd_nsb nettest -6 -r ${a}
2620 log_test_addr ${a} $? 0 "VRF server"
2621 done
2622
2623 # link local is always bound to ingress device
2624 a=${NSA_LINKIP6}%${NSB_DEV}
2625 log_start
2626 run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &
2627 sleep 1
2628 run_cmd_nsb nettest -6 -r ${a}
2629 log_test_addr ${a} $? 0 "VRF server"
2630
2631 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2632 do
2633 log_start
2634 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2635 sleep 1
2636 run_cmd_nsb nettest -6 -r ${a}
2637 log_test_addr ${a} $? 0 "Device server"
2638 done
2639
2640 # verify TCP reset received
2641 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2642 do
2643 log_start
2644 show_hint "Should fail 'Connection refused'"
2645 run_cmd_nsb nettest -6 -r ${a}
2646 log_test_addr ${a} $? 1 "No server"
2647 done
2648
2649 # local address tests
2650 a=${NSA_IP6}
2651 log_start
2652 show_hint "Should fail 'Connection refused' since global server with VRF is disabled"
2653 run_cmd nettest -6 -s &
2654 sleep 1
2655 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2656 log_test_addr ${a} $? 1 "Global server, local connection"
2657
2658 # run MD5 tests
2659 ipv6_tcp_md5
2660
2661 #
2662 # enable VRF global server
2663 #
2664 log_subsection "VRF Global server enabled"
2665 set_sysctl net.ipv4.tcp_l3mdev_accept=1
2666
2667 for a in ${NSA_IP6} ${VRF_IP6}
2668 do
2669 log_start
2670 run_cmd nettest -6 -s -3 ${VRF} &
2671 sleep 1
2672 run_cmd_nsb nettest -6 -r ${a}
2673 log_test_addr ${a} $? 0 "Global server"
2674 done
2675
2676 for a in ${NSA_IP6} ${VRF_IP6}
2677 do
2678 log_start
2679 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2680 sleep 1
2681 run_cmd_nsb nettest -6 -r ${a}
2682 log_test_addr ${a} $? 0 "VRF server"
2683 done
2684
2685 # For LLA, child socket is bound to device
2686 a=${NSA_LINKIP6}%${NSB_DEV}
2687 log_start
2688 run_cmd nettest -6 -s -3 ${NSA_DEV} &
2689 sleep 1
2690 run_cmd_nsb nettest -6 -r ${a}
2691 log_test_addr ${a} $? 0 "Global server"
2692
2693 log_start
2694 run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &
2695 sleep 1
2696 run_cmd_nsb nettest -6 -r ${a}
2697 log_test_addr ${a} $? 0 "VRF server"
2698
2699 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2700 do
2701 log_start
2702 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2703 sleep 1
2704 run_cmd_nsb nettest -6 -r ${a}
2705 log_test_addr ${a} $? 0 "Device server"
2706 done
2707
2708 # verify TCP reset received
2709 for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2710 do
2711 log_start
2712 show_hint "Should fail 'Connection refused'"
2713 run_cmd_nsb nettest -6 -r ${a}
2714 log_test_addr ${a} $? 1 "No server"
2715 done
2716
2717 # local address tests
2718 for a in ${NSA_IP6} ${VRF_IP6}
2719 do
2720 log_start
2721 show_hint "Fails 'Connection refused' since client is not in VRF"
2722 run_cmd nettest -6 -s -I ${VRF} &
2723 sleep 1
2724 run_cmd nettest -6 -r ${a}
2725 log_test_addr ${a} $? 1 "Global server, local connection"
2726 done
2727
2728
2729 #
2730 # client
2731 #
2732 for a in ${NSB_IP6} ${NSB_LO_IP6}
2733 do
2734 log_start
2735 run_cmd_nsb nettest -6 -s &
2736 sleep 1
2737 run_cmd nettest -6 -r ${a} -d ${VRF}
2738 log_test_addr ${a} $? 0 "Client, VRF bind"
2739 done
2740
2741 a=${NSB_LINKIP6}
2742 log_start
2743 show_hint "Fails since VRF device does not allow linklocal addresses"
2744 run_cmd_nsb nettest -6 -s &
2745 sleep 1
2746 run_cmd nettest -6 -r ${a} -d ${VRF}
2747 log_test_addr ${a} $? 1 "Client, VRF bind"
2748
2749 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}
2750 do
2751 log_start
2752 run_cmd_nsb nettest -6 -s &
2753 sleep 1
2754 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2755 log_test_addr ${a} $? 0 "Client, device bind"
2756 done
2757
2758 for a in ${NSB_IP6} ${NSB_LO_IP6}
2759 do
2760 log_start
2761 show_hint "Should fail 'Connection refused'"
2762 run_cmd nettest -6 -r ${a} -d ${VRF}
2763 log_test_addr ${a} $? 1 "No server, VRF client"
2764 done
2765
2766 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}
2767 do
2768 log_start
2769 show_hint "Should fail 'Connection refused'"
2770 run_cmd nettest -6 -r ${a} -d ${NSA_DEV}
2771 log_test_addr ${a} $? 1 "No server, device client"
2772 done
2773
2774 for a in ${NSA_IP6} ${VRF_IP6} ::1
2775 do
2776 log_start
2777 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2778 sleep 1
2779 run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}
2780 log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"
2781 done
2782
2783 a=${NSA_IP6}
2784 log_start
2785 run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &
2786 sleep 1
2787 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
2788 log_test_addr ${a} $? 0 "VRF server, device client, local connection"
2789
2790 a=${NSA_IP6}
2791 log_start
2792 show_hint "Should fail since unbound client is out of VRF scope"
2793 run_cmd nettest -6 -s -I ${VRF} &
2794 sleep 1
2795 run_cmd nettest -6 -r ${a}
2796 log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"
2797
2798 log_start
2799 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2800 sleep 1
2801 run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}
2802 log_test_addr ${a} $? 0 "Device server, VRF client, local connection"
2803
2804 for a in ${NSA_IP6} ${NSA_LINKIP6}
2805 do
2806 log_start
2807 run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &
2808 sleep 1
2809 run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}
2810 log_test_addr ${a} $? 0 "Device server, device client, local connection"
2811 done
2812 }
2813
2814 ipv6_tcp()
2815 {
2816 log_section "IPv6/TCP"
2817 log_subsection "No VRF"
2818 setup
2819
2820 # tcp_l3mdev_accept should have no affect without VRF;
2821 # run tests with it enabled and disabled to verify
2822 log_subsection "tcp_l3mdev_accept disabled"
2823 set_sysctl net.ipv4.tcp_l3mdev_accept=0
2824 ipv6_tcp_novrf
2825 log_subsection "tcp_l3mdev_accept enabled"
2826 set_sysctl net.ipv4.tcp_l3mdev_accept=1
2827 ipv6_tcp_novrf
2828
2829 log_subsection "With VRF"
2830 setup "yes"
2831 ipv6_tcp_vrf
2832 }
2833
2834 ################################################################################
2835 # IPv6 UDP
2836
2837 ipv6_udp_novrf()
2838 {
2839 local a
2840
2841 #
2842 # server tests
2843 #
2844 for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2845 do
2846 log_start
2847 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
2848 sleep 1
2849 run_cmd_nsb nettest -6 -D -r ${a}
2850 log_test_addr ${a} $? 0 "Global server"
2851
2852 log_start
2853 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
2854 sleep 1
2855 run_cmd_nsb nettest -6 -D -r ${a}
2856 log_test_addr ${a} $? 0 "Device server"
2857 done
2858
2859 a=${NSA_LO_IP6}
2860 log_start
2861 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
2862 sleep 1
2863 run_cmd_nsb nettest -6 -D -r ${a}
2864 log_test_addr ${a} $? 0 "Global server"
2865
2866 # should fail since loopback address is out of scope for a device
2867 # bound server, but it does not - hence this is more documenting
2868 # behavior.
2869 #log_start
2870 #show_hint "Should fail since loopback address is out of scope"
2871 #run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
2872 #sleep 1
2873 #run_cmd_nsb nettest -6 -D -r ${a}
2874 #log_test_addr ${a} $? 1 "Device server"
2875
2876 # negative test - should fail
2877 for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}
2878 do
2879 log_start
2880 show_hint "Should fail 'Connection refused' since there is no server"
2881 run_cmd_nsb nettest -6 -D -r ${a}
2882 log_test_addr ${a} $? 1 "No server"
2883 done
2884
2885 #
2886 # client
2887 #
2888 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}
2889 do
2890 log_start
2891 run_cmd_nsb nettest -6 -D -s &
2892 sleep 1
2893 run_cmd nettest -6 -D -r ${a} -0 ${NSA_IP6}
2894 log_test_addr ${a} $? 0 "Client"
2895
2896 log_start
2897 run_cmd_nsb nettest -6 -D -s &
2898 sleep 1
2899 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP6}
2900 log_test_addr ${a} $? 0 "Client, device bind"
2901
2902 log_start
2903 run_cmd_nsb nettest -6 -D -s &
2904 sleep 1
2905 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP6}
2906 log_test_addr ${a} $? 0 "Client, device send via cmsg"
2907
2908 log_start
2909 run_cmd_nsb nettest -6 -D -s &
2910 sleep 1
2911 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP6}
2912 log_test_addr ${a} $? 0 "Client, device bind via IPV6_UNICAST_IF"
2913
2914 log_start
2915 show_hint "Should fail 'Connection refused'"
2916 run_cmd nettest -6 -D -r ${a}
2917 log_test_addr ${a} $? 1 "No server, unbound client"
2918
2919 log_start
2920 show_hint "Should fail 'Connection refused'"
2921 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}
2922 log_test_addr ${a} $? 1 "No server, device client"
2923 done
2924
2925 #
2926 # local address tests
2927 #
2928 for a in ${NSA_IP6} ${NSA_LO_IP6} ::1
2929 do
2930 log_start
2931 run_cmd nettest -6 -D -s &
2932 sleep 1
2933 run_cmd nettest -6 -D -r ${a} -0 ${a} -1 ${a}
2934 log_test_addr ${a} $? 0 "Global server, local connection"
2935 done
2936
2937 a=${NSA_IP6}
2938 log_start
2939 run_cmd nettest -6 -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &
2940 sleep 1
2941 run_cmd nettest -6 -D -r ${a}
2942 log_test_addr ${a} $? 0 "Device server, unbound client, local connection"
2943
2944 for a in ${NSA_LO_IP6} ::1
2945 do
2946 log_start
2947 show_hint "Should fail 'Connection refused' since address is out of device scope"
2948 run_cmd nettest -6 -s -D -I ${NSA_DEV} &
2949 sleep 1
2950 run_cmd nettest -6 -D -r ${a}
2951 log_test_addr ${a} $? 1 "Device server, local connection"
2952 done
2953
2954 a=${NSA_IP6}
2955 log_start
2956 run_cmd nettest -6 -s -D &
2957 sleep 1
2958 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
2959 log_test_addr ${a} $? 0 "Global server, device client, local connection"
2960
2961 log_start
2962 run_cmd nettest -6 -s -D &
2963 sleep 1
2964 run_cmd nettest -6 -D -d ${NSA_DEV} -C -r ${a}
2965 log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"
2966
2967 log_start
2968 run_cmd nettest -6 -s -D &
2969 sleep 1
2970 run_cmd nettest -6 -D -d ${NSA_DEV} -S -r ${a}
2971 log_test_addr ${a} $? 0 "Global server, device client via IPV6_UNICAST_IF, local connection"
2972
2973 for a in ${NSA_LO_IP6} ::1
2974 do
2975 log_start
2976 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
2977 run_cmd nettest -6 -D -s &
2978 sleep 1
2979 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}
2980 log_test_addr ${a} $? 1 "Global server, device client, local connection"
2981
2982 log_start
2983 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
2984 run_cmd nettest -6 -D -s &
2985 sleep 1
2986 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C
2987 log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"
2988
2989 log_start
2990 show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"
2991 run_cmd nettest -6 -D -s &
2992 sleep 1
2993 run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S
2994 log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"
2995 done
2996
2997 a=${NSA_IP6}
2998 log_start
2999 run_cmd nettest -6 -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &
3000 sleep 1
3001 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} -0 ${a}
3002 log_test_addr ${a} $? 0 "Device server, device client, local conn"
3003
3004 log_start
3005 show_hint "Should fail 'Connection refused'"
3006 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3007 log_test_addr ${a} $? 1 "No server, device client, local conn"
3008
3009 # LLA to GUA
3010 run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
3011 run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}
3012 log_start
3013 run_cmd nettest -6 -s -D &
3014 sleep 1
3015 run_cmd_nsb nettest -6 -D -r ${NSA_IP6}
3016 log_test $? 0 "UDP in - LLA to GUA"
3017
3018 run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}
3019 run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad
3020 }
3021
3022 ipv6_udp_vrf()
3023 {
3024 local a
3025
3026 # disable global server
3027 log_subsection "Global server disabled"
3028 set_sysctl net.ipv4.udp_l3mdev_accept=0
3029
3030 #
3031 # server tests
3032 #
3033 for a in ${NSA_IP6} ${VRF_IP6}
3034 do
3035 log_start
3036 show_hint "Should fail 'Connection refused' since global server is disabled"
3037 run_cmd nettest -6 -D -s &
3038 sleep 1
3039 run_cmd_nsb nettest -6 -D -r ${a}
3040 log_test_addr ${a} $? 1 "Global server"
3041 done
3042
3043 for a in ${NSA_IP6} ${VRF_IP6}
3044 do
3045 log_start
3046 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3047 sleep 1
3048 run_cmd_nsb nettest -6 -D -r ${a}
3049 log_test_addr ${a} $? 0 "VRF server"
3050 done
3051
3052 for a in ${NSA_IP6} ${VRF_IP6}
3053 do
3054 log_start
3055 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3056 sleep 1
3057 run_cmd_nsb nettest -6 -D -r ${a}
3058 log_test_addr ${a} $? 0 "Enslaved device server"
3059 done
3060
3061 # negative test - should fail
3062 for a in ${NSA_IP6} ${VRF_IP6}
3063 do
3064 log_start
3065 show_hint "Should fail 'Connection refused' since there is no server"
3066 run_cmd_nsb nettest -6 -D -r ${a}
3067 log_test_addr ${a} $? 1 "No server"
3068 done
3069
3070 #
3071 # local address tests
3072 #
3073 for a in ${NSA_IP6} ${VRF_IP6}
3074 do
3075 log_start
3076 show_hint "Should fail 'Connection refused' since global server is disabled"
3077 run_cmd nettest -6 -D -s &
3078 sleep 1
3079 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3080 log_test_addr ${a} $? 1 "Global server, VRF client, local conn"
3081 done
3082
3083 for a in ${NSA_IP6} ${VRF_IP6}
3084 do
3085 log_start
3086 run_cmd nettest -6 -D -I ${VRF} -s &
3087 sleep 1
3088 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3089 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
3090 done
3091
3092 a=${NSA_IP6}
3093 log_start
3094 show_hint "Should fail 'Connection refused' since global server is disabled"
3095 run_cmd nettest -6 -D -s &
3096 sleep 1
3097 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3098 log_test_addr ${a} $? 1 "Global server, device client, local conn"
3099
3100 log_start
3101 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3102 sleep 1
3103 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3104 log_test_addr ${a} $? 0 "VRF server, device client, local conn"
3105
3106 log_start
3107 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3108 sleep 1
3109 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3110 log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"
3111
3112 log_start
3113 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3114 sleep 1
3115 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3116 log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"
3117
3118 # disable global server
3119 log_subsection "Global server enabled"
3120 set_sysctl net.ipv4.udp_l3mdev_accept=1
3121
3122 #
3123 # server tests
3124 #
3125 for a in ${NSA_IP6} ${VRF_IP6}
3126 do
3127 log_start
3128 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3129 sleep 1
3130 run_cmd_nsb nettest -6 -D -r ${a}
3131 log_test_addr ${a} $? 0 "Global server"
3132 done
3133
3134 for a in ${NSA_IP6} ${VRF_IP6}
3135 do
3136 log_start
3137 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3138 sleep 1
3139 run_cmd_nsb nettest -6 -D -r ${a}
3140 log_test_addr ${a} $? 0 "VRF server"
3141 done
3142
3143 for a in ${NSA_IP6} ${VRF_IP6}
3144 do
3145 log_start
3146 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3147 sleep 1
3148 run_cmd_nsb nettest -6 -D -r ${a}
3149 log_test_addr ${a} $? 0 "Enslaved device server"
3150 done
3151
3152 # negative test - should fail
3153 for a in ${NSA_IP6} ${VRF_IP6}
3154 do
3155 log_start
3156 run_cmd_nsb nettest -6 -D -r ${a}
3157 log_test_addr ${a} $? 1 "No server"
3158 done
3159
3160 #
3161 # client tests
3162 #
3163 log_start
3164 run_cmd_nsb nettest -6 -D -s &
3165 sleep 1
3166 run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}
3167 log_test $? 0 "VRF client"
3168
3169 # negative test - should fail
3170 log_start
3171 run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}
3172 log_test $? 1 "No server, VRF client"
3173
3174 log_start
3175 run_cmd_nsb nettest -6 -D -s &
3176 sleep 1
3177 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}
3178 log_test $? 0 "Enslaved device client"
3179
3180 # negative test - should fail
3181 log_start
3182 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}
3183 log_test $? 1 "No server, enslaved device client"
3184
3185 #
3186 # local address tests
3187 #
3188 a=${NSA_IP6}
3189 log_start
3190 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3191 sleep 1
3192 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3193 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
3194
3195 #log_start
3196 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3197 sleep 1
3198 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3199 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
3200
3201
3202 a=${VRF_IP6}
3203 log_start
3204 run_cmd nettest -6 -D -s -3 ${VRF} &
3205 sleep 1
3206 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3207 log_test_addr ${a} $? 0 "Global server, VRF client, local conn"
3208
3209 log_start
3210 run_cmd nettest -6 -D -I ${VRF} -s -3 ${VRF} &
3211 sleep 1
3212 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3213 log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"
3214
3215 # negative test - should fail
3216 for a in ${NSA_IP6} ${VRF_IP6}
3217 do
3218 log_start
3219 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3220 log_test_addr ${a} $? 1 "No server, VRF client, local conn"
3221 done
3222
3223 # device to global IP
3224 a=${NSA_IP6}
3225 log_start
3226 run_cmd nettest -6 -D -s -3 ${NSA_DEV} &
3227 sleep 1
3228 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3229 log_test_addr ${a} $? 0 "Global server, device client, local conn"
3230
3231 log_start
3232 run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &
3233 sleep 1
3234 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3235 log_test_addr ${a} $? 0 "VRF server, device client, local conn"
3236
3237 log_start
3238 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3239 sleep 1
3240 run_cmd nettest -6 -D -d ${VRF} -r ${a}
3241 log_test_addr ${a} $? 0 "Device server, VRF client, local conn"
3242
3243 log_start
3244 run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &
3245 sleep 1
3246 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3247 log_test_addr ${a} $? 0 "Device server, device client, local conn"
3248
3249 log_start
3250 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}
3251 log_test_addr ${a} $? 1 "No server, device client, local conn"
3252
3253
3254 # link local addresses
3255 log_start
3256 run_cmd nettest -6 -D -s &
3257 sleep 1
3258 run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}
3259 log_test $? 0 "Global server, linklocal IP"
3260
3261 log_start
3262 run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}
3263 log_test $? 1 "No server, linklocal IP"
3264
3265
3266 log_start
3267 run_cmd_nsb nettest -6 -D -s &
3268 sleep 1
3269 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}
3270 log_test $? 0 "Enslaved device client, linklocal IP"
3271
3272 log_start
3273 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}
3274 log_test $? 1 "No server, device client, peer linklocal IP"
3275
3276
3277 log_start
3278 run_cmd nettest -6 -D -s &
3279 sleep 1
3280 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}
3281 log_test $? 0 "Enslaved device client, local conn - linklocal IP"
3282
3283 log_start
3284 run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}
3285 log_test $? 1 "No server, device client, local conn - linklocal IP"
3286
3287 # LLA to GUA
3288 run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}
3289 run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}
3290 log_start
3291 run_cmd nettest -6 -s -D &
3292 sleep 1
3293 run_cmd_nsb nettest -6 -D -r ${NSA_IP6}
3294 log_test $? 0 "UDP in - LLA to GUA"
3295
3296 run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}
3297 run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad
3298 }
3299
3300 ipv6_udp()
3301 {
3302 # should not matter, but set to known state
3303 set_sysctl net.ipv4.udp_early_demux=1
3304
3305 log_section "IPv6/UDP"
3306 log_subsection "No VRF"
3307 setup
3308
3309 # udp_l3mdev_accept should have no affect without VRF;
3310 # run tests with it enabled and disabled to verify
3311 log_subsection "udp_l3mdev_accept disabled"
3312 set_sysctl net.ipv4.udp_l3mdev_accept=0
3313 ipv6_udp_novrf
3314 log_subsection "udp_l3mdev_accept enabled"
3315 set_sysctl net.ipv4.udp_l3mdev_accept=1
3316 ipv6_udp_novrf
3317
3318 log_subsection "With VRF"
3319 setup "yes"
3320 ipv6_udp_vrf
3321 }
3322
3323 ################################################################################
3324 # IPv6 address bind
3325
3326 ipv6_addr_bind_novrf()
3327 {
3328 #
3329 # raw socket
3330 #
3331 for a in ${NSA_IP6} ${NSA_LO_IP6}
3332 do
3333 log_start
3334 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -b
3335 log_test_addr ${a} $? 0 "Raw socket bind to local address"
3336
3337 log_start
3338 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b
3339 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
3340 done
3341
3342 #
3343 # tcp sockets
3344 #
3345 a=${NSA_IP6}
3346 log_start
3347 run_cmd nettest -6 -s -l ${a} -t1 -b
3348 log_test_addr ${a} $? 0 "TCP socket bind to local address"
3349
3350 log_start
3351 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3352 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"
3353
3354 a=${NSA_LO_IP6}
3355 log_start
3356 show_hint "Should fail with 'Cannot assign requested address'"
3357 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3358 log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address"
3359 }
3360
3361 ipv6_addr_bind_vrf()
3362 {
3363 #
3364 # raw socket
3365 #
3366 for a in ${NSA_IP6} ${VRF_IP6}
3367 do
3368 log_start
3369 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b
3370 log_test_addr ${a} $? 0 "Raw socket bind to local address after vrf bind"
3371
3372 log_start
3373 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b
3374 log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"
3375 done
3376
3377 a=${NSA_LO_IP6}
3378 log_start
3379 show_hint "Address on loopback is out of VRF scope"
3380 run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b
3381 log_test_addr ${a} $? 1 "Raw socket bind to invalid local address after vrf bind"
3382
3383 #
3384 # tcp sockets
3385 #
3386 # address on enslaved device is valid for the VRF or device in a VRF
3387 for a in ${NSA_IP6} ${VRF_IP6}
3388 do
3389 log_start
3390 run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b
3391 log_test_addr ${a} $? 0 "TCP socket bind to local address with VRF bind"
3392 done
3393
3394 a=${NSA_IP6}
3395 log_start
3396 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3397 log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind"
3398
3399 a=${VRF_IP6}
3400 log_start
3401 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3402 log_test_addr ${a} $? 1 "TCP socket bind to VRF address with device bind"
3403
3404 a=${NSA_LO_IP6}
3405 log_start
3406 show_hint "Address on loopback out of scope for VRF"
3407 run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b
3408 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"
3409
3410 log_start
3411 show_hint "Address on loopback out of scope for device in VRF"
3412 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b
3413 log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"
3414
3415 }
3416
3417 ipv6_addr_bind()
3418 {
3419 log_section "IPv6 address binds"
3420
3421 log_subsection "No VRF"
3422 setup
3423 ipv6_addr_bind_novrf
3424
3425 log_subsection "With VRF"
3426 setup "yes"
3427 ipv6_addr_bind_vrf
3428 }
3429
3430 ################################################################################
3431 # IPv6 runtime tests
3432
3433 ipv6_rt()
3434 {
3435 local desc="$1"
3436 local varg="-6 $2"
3437 local with_vrf="yes"
3438 local a
3439
3440 #
3441 # server tests
3442 #
3443 for a in ${NSA_IP6} ${VRF_IP6}
3444 do
3445 log_start
3446 run_cmd nettest ${varg} -s &
3447 sleep 1
3448 run_cmd_nsb nettest ${varg} -r ${a} &
3449 sleep 3
3450 run_cmd ip link del ${VRF}
3451 sleep 1
3452 log_test_addr ${a} 0 0 "${desc}, global server"
3453
3454 setup ${with_vrf}
3455 done
3456
3457 for a in ${NSA_IP6} ${VRF_IP6}
3458 do
3459 log_start
3460 run_cmd nettest ${varg} -I ${VRF} -s &
3461 sleep 1
3462 run_cmd_nsb nettest ${varg} -r ${a} &
3463 sleep 3
3464 run_cmd ip link del ${VRF}
3465 sleep 1
3466 log_test_addr ${a} 0 0 "${desc}, VRF server"
3467
3468 setup ${with_vrf}
3469 done
3470
3471 for a in ${NSA_IP6} ${VRF_IP6}
3472 do
3473 log_start
3474 run_cmd nettest ${varg} -I ${NSA_DEV} -s &
3475 sleep 1
3476 run_cmd_nsb nettest ${varg} -r ${a} &
3477 sleep 3
3478 run_cmd ip link del ${VRF}
3479 sleep 1
3480 log_test_addr ${a} 0 0 "${desc}, enslaved device server"
3481
3482 setup ${with_vrf}
3483 done
3484
3485 #
3486 # client test
3487 #
3488 log_start
3489 run_cmd_nsb nettest ${varg} -s &
3490 sleep 1
3491 run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP6} &
3492 sleep 3
3493 run_cmd ip link del ${VRF}
3494 sleep 1
3495 log_test 0 0 "${desc}, VRF client"
3496
3497 setup ${with_vrf}
3498
3499 log_start
3500 run_cmd_nsb nettest ${varg} -s &
3501 sleep 1
3502 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP6} &
3503 sleep 3
3504 run_cmd ip link del ${VRF}
3505 sleep 1
3506 log_test 0 0 "${desc}, enslaved device client"
3507
3508 setup ${with_vrf}
3509
3510
3511 #
3512 # local address tests
3513 #
3514 for a in ${NSA_IP6} ${VRF_IP6}
3515 do
3516 log_start
3517 run_cmd nettest ${varg} -s &
3518 sleep 1
3519 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
3520 sleep 3
3521 run_cmd ip link del ${VRF}
3522 sleep 1
3523 log_test_addr ${a} 0 0 "${desc}, global server, VRF client"
3524
3525 setup ${with_vrf}
3526 done
3527
3528 for a in ${NSA_IP6} ${VRF_IP6}
3529 do
3530 log_start
3531 run_cmd nettest ${varg} -I ${VRF} -s &
3532 sleep 1
3533 run_cmd nettest ${varg} -d ${VRF} -r ${a} &
3534 sleep 3
3535 run_cmd ip link del ${VRF}
3536 sleep 1
3537 log_test_addr ${a} 0 0 "${desc}, VRF server and client"
3538
3539 setup ${with_vrf}
3540 done
3541
3542 a=${NSA_IP6}
3543 log_start
3544 run_cmd nettest ${varg} -s &
3545 sleep 1
3546 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
3547 sleep 3
3548 run_cmd ip link del ${VRF}
3549 sleep 1
3550 log_test_addr ${a} 0 0 "${desc}, global server, device client"
3551
3552 setup ${with_vrf}
3553
3554 log_start
3555 run_cmd nettest ${varg} -I ${VRF} -s &
3556 sleep 1
3557 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
3558 sleep 3
3559 run_cmd ip link del ${VRF}
3560 sleep 1
3561 log_test_addr ${a} 0 0 "${desc}, VRF server, device client"
3562
3563 setup ${with_vrf}
3564
3565 log_start
3566 run_cmd nettest ${varg} -I ${NSA_DEV} -s &
3567 sleep 1
3568 run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &
3569 sleep 3
3570 run_cmd ip link del ${VRF}
3571 sleep 1
3572 log_test_addr ${a} 0 0 "${desc}, device server, device client"
3573 }
3574
3575 ipv6_ping_rt()
3576 {
3577 local with_vrf="yes"
3578 local a
3579
3580 a=${NSA_IP6}
3581 log_start
3582 run_cmd_nsb ${ping6} -f ${a} &
3583 sleep 3
3584 run_cmd ip link del ${VRF}
3585 sleep 1
3586 log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"
3587
3588 setup ${with_vrf}
3589
3590 log_start
3591 run_cmd ${ping6} -f ${NSB_IP6} -I ${VRF} &
3592 sleep 1
3593 run_cmd ip link del ${VRF}
3594 sleep 1
3595 log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"
3596 }
3597
3598 ipv6_runtime()
3599 {
3600 log_section "Run time tests - ipv6"
3601
3602 setup "yes"
3603 ipv6_ping_rt
3604
3605 setup "yes"
3606 ipv6_rt "TCP active socket" "-n -1"
3607
3608 setup "yes"
3609 ipv6_rt "TCP passive socket" "-i"
3610
3611 setup "yes"
3612 ipv6_rt "UDP active socket" "-D -n -1"
3613 }
3614
3615 ################################################################################
3616 # netfilter blocking connections
3617
3618 netfilter_tcp_reset()
3619 {
3620 local a
3621
3622 for a in ${NSA_IP} ${VRF_IP}
3623 do
3624 log_start
3625 run_cmd nettest -s &
3626 sleep 1
3627 run_cmd_nsb nettest -r ${a}
3628 log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"
3629 done
3630 }
3631
3632 netfilter_icmp()
3633 {
3634 local stype="$1"
3635 local arg
3636 local a
3637
3638 [ "${stype}" = "UDP" ] && arg="-D"
3639
3640 for a in ${NSA_IP} ${VRF_IP}
3641 do
3642 log_start
3643 run_cmd nettest ${arg} -s &
3644 sleep 1
3645 run_cmd_nsb nettest ${arg} -r ${a}
3646 log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"
3647 done
3648 }
3649
3650 ipv4_netfilter()
3651 {
3652 log_section "IPv4 Netfilter"
3653 log_subsection "TCP reset"
3654
3655 setup "yes"
3656 run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
3657
3658 netfilter_tcp_reset
3659
3660 log_start
3661 log_subsection "ICMP unreachable"
3662
3663 log_start
3664 run_cmd iptables -F
3665 run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
3666 run_cmd iptables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp-port-unreachable
3667
3668 netfilter_icmp "TCP"
3669 netfilter_icmp "UDP"
3670
3671 log_start
3672 iptables -F
3673 }
3674
3675 netfilter_tcp6_reset()
3676 {
3677 local a
3678
3679 for a in ${NSA_IP6} ${VRF_IP6}
3680 do
3681 log_start
3682 run_cmd nettest -6 -s &
3683 sleep 1
3684 run_cmd_nsb nettest -6 -r ${a}
3685 log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"
3686 done
3687 }
3688
3689 netfilter_icmp6()
3690 {
3691 local stype="$1"
3692 local arg
3693 local a
3694
3695 [ "${stype}" = "UDP" ] && arg="$arg -D"
3696
3697 for a in ${NSA_IP6} ${VRF_IP6}
3698 do
3699 log_start
3700 run_cmd nettest -6 -s ${arg} &
3701 sleep 1
3702 run_cmd_nsb nettest -6 ${arg} -r ${a}
3703 log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"
3704 done
3705 }
3706
3707 ipv6_netfilter()
3708 {
3709 log_section "IPv6 Netfilter"
3710 log_subsection "TCP reset"
3711
3712 setup "yes"
3713 run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset
3714
3715 netfilter_tcp6_reset
3716
3717 log_subsection "ICMP unreachable"
3718
3719 log_start
3720 run_cmd ip6tables -F
3721 run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable
3722 run_cmd ip6tables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable
3723
3724 netfilter_icmp6 "TCP"
3725 netfilter_icmp6 "UDP"
3726
3727 log_start
3728 ip6tables -F
3729 }
3730
3731 ################################################################################
3732 # specific use cases
3733
3734 # VRF only.
3735 # ns-A device enslaved to bridge. Verify traffic with and without
3736 # br_netfilter module loaded. Repeat with SVI on bridge.
3737 use_case_br()
3738 {
3739 setup "yes"
3740
3741 setup_cmd ip link set ${NSA_DEV} down
3742 setup_cmd ip addr del dev ${NSA_DEV} ${NSA_IP}/24
3743 setup_cmd ip -6 addr del dev ${NSA_DEV} ${NSA_IP6}/64
3744
3745 setup_cmd ip link add br0 type bridge
3746 setup_cmd ip addr add dev br0 ${NSA_IP}/24
3747 setup_cmd ip -6 addr add dev br0 ${NSA_IP6}/64 nodad
3748
3749 setup_cmd ip li set ${NSA_DEV} master br0
3750 setup_cmd ip li set ${NSA_DEV} up
3751 setup_cmd ip li set br0 up
3752 setup_cmd ip li set br0 vrf ${VRF}
3753
3754 rmmod br_netfilter 2>/dev/null
3755 sleep 5 # DAD
3756
3757 run_cmd ip neigh flush all
3758 run_cmd ping -c1 -w1 -I br0 ${NSB_IP}
3759 log_test $? 0 "Bridge into VRF - IPv4 ping out"
3760
3761 run_cmd ip neigh flush all
3762 run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}
3763 log_test $? 0 "Bridge into VRF - IPv6 ping out"
3764
3765 run_cmd ip neigh flush all
3766 run_cmd_nsb ping -c1 -w1 ${NSA_IP}
3767 log_test $? 0 "Bridge into VRF - IPv4 ping in"
3768
3769 run_cmd ip neigh flush all
3770 run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
3771 log_test $? 0 "Bridge into VRF - IPv6 ping in"
3772
3773 modprobe br_netfilter
3774 if [ $? -eq 0 ]; then
3775 run_cmd ip neigh flush all
3776 run_cmd ping -c1 -w1 -I br0 ${NSB_IP}
3777 log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping out"
3778
3779 run_cmd ip neigh flush all
3780 run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}
3781 log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping out"
3782
3783 run_cmd ip neigh flush all
3784 run_cmd_nsb ping -c1 -w1 ${NSA_IP}
3785 log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping in"
3786
3787 run_cmd ip neigh flush all
3788 run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}
3789 log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping in"
3790 fi
3791
3792 setup_cmd ip li set br0 nomaster
3793 setup_cmd ip li add br0.100 link br0 type vlan id 100
3794 setup_cmd ip li set br0.100 vrf ${VRF} up
3795 setup_cmd ip addr add dev br0.100 172.16.101.1/24
3796 setup_cmd ip -6 addr add dev br0.100 2001:db8:101::1/64 nodad
3797
3798 setup_cmd_nsb ip li add vlan100 link ${NSB_DEV} type vlan id 100
3799 setup_cmd_nsb ip addr add dev vlan100 172.16.101.2/24
3800 setup_cmd_nsb ip -6 addr add dev vlan100 2001:db8:101::2/64 nodad
3801 setup_cmd_nsb ip li set vlan100 up
3802 sleep 1
3803
3804 rmmod br_netfilter 2>/dev/null
3805
3806 run_cmd ip neigh flush all
3807 run_cmd ping -c1 -w1 -I br0.100 172.16.101.2
3808 log_test $? 0 "Bridge vlan into VRF - IPv4 ping out"
3809
3810 run_cmd ip neigh flush all
3811 run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2
3812 log_test $? 0 "Bridge vlan into VRF - IPv6 ping out"
3813
3814 run_cmd ip neigh flush all
3815 run_cmd_nsb ping -c1 -w1 172.16.101.1
3816 log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"
3817
3818 run_cmd ip neigh flush all
3819 run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1
3820 log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"
3821
3822 modprobe br_netfilter
3823 if [ $? -eq 0 ]; then
3824 run_cmd ip neigh flush all
3825 run_cmd ping -c1 -w1 -I br0.100 172.16.101.2
3826 log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv4 ping out"
3827
3828 run_cmd ip neigh flush all
3829 run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2
3830 log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv6 ping out"
3831
3832 run_cmd ip neigh flush all
3833 run_cmd_nsb ping -c1 -w1 172.16.101.1
3834 log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"
3835
3836 run_cmd ip neigh flush all
3837 run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1
3838 log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"
3839 fi
3840
3841 setup_cmd ip li del br0 2>/dev/null
3842 setup_cmd_nsb ip li del vlan100 2>/dev/null
3843 }
3844
3845 # VRF only.
3846 # ns-A device is connected to both ns-B and ns-C on a single VRF but only has
3847 # LLA on the interfaces
3848 use_case_ping_lla_multi()
3849 {
3850 setup_lla_only
3851 # only want reply from ns-A
3852 setup_cmd_nsb sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
3853 setup_cmd_nsc sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1
3854
3855 log_start
3856 run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
3857 log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Pre cycle, ping out ns-B"
3858
3859 run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
3860 log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Pre cycle, ping out ns-C"
3861
3862 # cycle/flap the first ns-A interface
3863 setup_cmd ip link set ${NSA_DEV} down
3864 setup_cmd ip link set ${NSA_DEV} up
3865 sleep 1
3866
3867 log_start
3868 run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
3869 log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-B"
3870 run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
3871 log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-C"
3872
3873 # cycle/flap the second ns-A interface
3874 setup_cmd ip link set ${NSA_DEV2} down
3875 setup_cmd ip link set ${NSA_DEV2} up
3876 sleep 1
3877
3878 log_start
3879 run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}
3880 log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-B"
3881 run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}
3882 log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-C"
3883 }
3884
3885 # Perform IPv{4,6} SNAT on ns-A, and verify TCP connection is successfully
3886 # established with ns-B.
3887 use_case_snat_on_vrf()
3888 {
3889 setup "yes"
3890
3891 local port="12345"
3892
3893 run_cmd iptables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}
3894 run_cmd ip6tables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}
3895
3896 run_cmd_nsb nettest -s -l ${NSB_IP} -p ${port} &
3897 sleep 1
3898 run_cmd nettest -d ${VRF} -r ${NSB_IP} -p ${port}
3899 log_test $? 0 "IPv4 TCP connection over VRF with SNAT"
3900
3901 run_cmd_nsb nettest -6 -s -l ${NSB_IP6} -p ${port} &
3902 sleep 1
3903 run_cmd nettest -6 -d ${VRF} -r ${NSB_IP6} -p ${port}
3904 log_test $? 0 "IPv6 TCP connection over VRF with SNAT"
3905
3906 # Cleanup
3907 run_cmd iptables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}
3908 run_cmd ip6tables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}
3909 }
3910
3911 use_cases()
3912 {
3913 log_section "Use cases"
3914 log_subsection "Device enslaved to bridge"
3915 use_case_br
3916 log_subsection "Ping LLA with multiple interfaces"
3917 use_case_ping_lla_multi
3918 log_subsection "SNAT on VRF"
3919 use_case_snat_on_vrf
3920 }
3921
3922 ################################################################################
3923 # usage
3924
3925 usage()
3926 {
3927 cat <<EOF
3928 usage: ${0##*/} OPTS
3929
3930 -4 IPv4 tests only
3931 -6 IPv6 tests only
3932 -t <test> Test name/set to run
3933 -p Pause on fail
3934 -P Pause after each test
3935 -v Be verbose
3936 EOF
3937 }
3938
3939 ################################################################################
3940 # main
3941
3942 TESTS_IPV4="ipv4_ping ipv4_tcp ipv4_udp ipv4_addr_bind ipv4_runtime ipv4_netfilter"
3943 TESTS_IPV6="ipv6_ping ipv6_tcp ipv6_udp ipv6_addr_bind ipv6_runtime ipv6_netfilter"
3944 TESTS_OTHER="use_cases"
3945
3946 PAUSE_ON_FAIL=no
3947 PAUSE=no
3948
3949 while getopts :46t:pPvh o
3950 do
3951 case $o in
3952 4) TESTS=ipv4;;
3953 6) TESTS=ipv6;;
3954 t) TESTS=$OPTARG;;
3955 p) PAUSE_ON_FAIL=yes;;
3956 P) PAUSE=yes;;
3957 v) VERBOSE=1;;
3958 h) usage; exit 0;;
3959 *) usage; exit 1;;
3960 esac
3961 done
3962
3963 # make sure we don't pause twice
3964 [ "${PAUSE}" = "yes" ] && PAUSE_ON_FAIL=no
3965
3966 #
3967 # show user test config
3968 #
3969 if [ -z "$TESTS" ]; then
3970 TESTS="$TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER"
3971 elif [ "$TESTS" = "ipv4" ]; then
3972 TESTS="$TESTS_IPV4"
3973 elif [ "$TESTS" = "ipv6" ]; then
3974 TESTS="$TESTS_IPV6"
3975 fi
3976
3977 which nettest >/dev/null
3978 if [ $? -ne 0 ]; then
3979 echo "'nettest' command not found; skipping tests"
3980 exit $ksft_skip
3981 fi
3982
3983 declare -i nfail=0
3984 declare -i nsuccess=0
3985
3986 for t in $TESTS
3987 do
3988 case $t in
3989 ipv4_ping|ping) ipv4_ping;;
3990 ipv4_tcp|tcp) ipv4_tcp;;
3991 ipv4_udp|udp) ipv4_udp;;
3992 ipv4_bind|bind) ipv4_addr_bind;;
3993 ipv4_runtime) ipv4_runtime;;
3994 ipv4_netfilter) ipv4_netfilter;;
3995
3996 ipv6_ping|ping6) ipv6_ping;;
3997 ipv6_tcp|tcp6) ipv6_tcp;;
3998 ipv6_udp|udp6) ipv6_udp;;
3999 ipv6_bind|bind6) ipv6_addr_bind;;
4000 ipv6_runtime) ipv6_runtime;;
4001 ipv6_netfilter) ipv6_netfilter;;
4002
4003 use_cases) use_cases;;
4004
4005 # setup namespaces and config, but do not run any tests
4006 setup) setup; exit 0;;
4007 vrf_setup) setup "yes"; exit 0;;
4008
4009 help) echo "Test names: $TESTS"; exit 0;;
4010 esac
4011 done
4012
4013 cleanup 2>/dev/null
4014
4015 printf "\nTests passed: %3d\n" ${nsuccess}
4016 printf "Tests failed: %3d\n" ${nfail}