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