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