xref: /freebsd/tools/test/netfibs/reflector.sh (revision d3373029e29b8aebb412f99efbd03cd4fbb853d9)
1*d3373029SBjoern A. Zeeb#!/bin/sh
2*d3373029SBjoern A. Zeeb#-
3*d3373029SBjoern A. Zeeb# Copyright (c) 2012 Cisco Systems, Inc.
4*d3373029SBjoern A. Zeeb# All rights reserved.
5*d3373029SBjoern A. Zeeb#
6*d3373029SBjoern A. Zeeb# This software was developed by Bjoern Zeeb under contract to
7*d3373029SBjoern A. Zeeb# Cisco Systems, Inc..
8*d3373029SBjoern A. Zeeb#
9*d3373029SBjoern A. Zeeb# Redistribution and use in source and binary forms, with or without
10*d3373029SBjoern A. Zeeb# modification, are permitted provided that the following conditions
11*d3373029SBjoern A. Zeeb# are met:
12*d3373029SBjoern A. Zeeb# 1. Redistributions of source code must retain the above copyright
13*d3373029SBjoern A. Zeeb#    notice, this list of conditions and the following disclaimer.
14*d3373029SBjoern A. Zeeb# 2. Redistributions in binary form must reproduce the above copyright
15*d3373029SBjoern A. Zeeb#    notice, this list of conditions and the following disclaimer in the
16*d3373029SBjoern A. Zeeb#    documentation and/or other materials provided with the distribution.
17*d3373029SBjoern A. Zeeb#
18*d3373029SBjoern A. Zeeb# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*d3373029SBjoern A. Zeeb# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*d3373029SBjoern A. Zeeb# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*d3373029SBjoern A. Zeeb# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*d3373029SBjoern A. Zeeb# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*d3373029SBjoern A. Zeeb# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*d3373029SBjoern A. Zeeb# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*d3373029SBjoern A. Zeeb# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*d3373029SBjoern A. Zeeb# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*d3373029SBjoern A. Zeeb# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*d3373029SBjoern A. Zeeb# SUCH DAMAGE.
29*d3373029SBjoern A. Zeeb#
30*d3373029SBjoern A. Zeeb# $FreeBSD$
31*d3373029SBjoern A. Zeeb#
32*d3373029SBjoern A. Zeeb
33*d3373029SBjoern A. Zeeb# We will use the RFC5180 (and Errata) benchmarking working group prefix
34*d3373029SBjoern A. Zeeb# 2001:0002::/48 for testing.
35*d3373029SBjoern A. ZeebPREFIX="2001:2:"
36*d3373029SBjoern A. Zeeb
37*d3373029SBjoern A. Zeeb# Set IFACE to the real interface you want to run the test on.
38*d3373029SBjoern A. Zeeb: ${IFACE:=lo0}
39*d3373029SBjoern A. Zeeb
40*d3373029SBjoern A. Zeeb# Control port we use to exchange messages between nodes to sync. tests, etc.
41*d3373029SBjoern A. Zeeb: ${CTRLPORT:=6666}
42*d3373029SBjoern A. Zeeb
43*d3373029SBjoern A. Zeeb# Get the number of FIBs from the kernel.
44*d3373029SBjoern A. ZeebRT_NUMFIBS=`sysctl -n net.fibs`
45*d3373029SBjoern A. Zeeb
46*d3373029SBjoern A. ZeebPEERADDR="2001:2:ff00::1"
47*d3373029SBjoern A. ZeebOURADDR="2001:2:ff00::2"
48*d3373029SBjoern A. Zeeb
49*d3373029SBjoern A. ZeebOURLINKLOCAL=""
50*d3373029SBjoern A. ZeebPEERLINKLOCAL=""
51*d3373029SBjoern A. Zeeb
52*d3373029SBjoern A. Zeeb# By default all commands must succeed.  Individual tests may disable this
53*d3373029SBjoern A. Zeeb# temporary.
54*d3373029SBjoern A. Zeebset -e
55*d3373029SBjoern A. Zeeb
56*d3373029SBjoern A. Zeeb# Debug magic.
57*d3373029SBjoern A. Zeebcase "${DEBUG}" in
58*d3373029SBjoern A. Zeeb42)	set -x ;;
59*d3373029SBjoern A. Zeebesac
60*d3373029SBjoern A. Zeeb
61*d3373029SBjoern A. Zeeb
62*d3373029SBjoern A. Zeeb
63*d3373029SBjoern A. Zeeb#
64*d3373029SBjoern A. Zeeb# Helper functions.
65*d3373029SBjoern A. Zeeb#
66*d3373029SBjoern A. Zeeb
67*d3373029SBjoern A. Zeeb# Function to avoid prelist races adding and deleting prefixes too quickly.
68*d3373029SBjoern A. Zeebdelay()
69*d3373029SBjoern A. Zeeb{
70*d3373029SBjoern A. Zeeb
71*d3373029SBjoern A. Zeeb	# sleep 1 is too long.
72*d3373029SBjoern A. Zeeb	touch /tmp/foo || true
73*d3373029SBjoern A. Zeeb}
74*d3373029SBjoern A. Zeeb
75*d3373029SBjoern A. Zeebcheck_rc()
76*d3373029SBjoern A. Zeeb{
77*d3373029SBjoern A. Zeeb	local _rc _exp _testno _testname _msg _r
78*d3373029SBjoern A. Zeeb	_rc=$1
79*d3373029SBjoern A. Zeeb	_exp=$2
80*d3373029SBjoern A. Zeeb	_testno=$3
81*d3373029SBjoern A. Zeeb	_testname="$4"
82*d3373029SBjoern A. Zeeb	_msg="$5"
83*d3373029SBjoern A. Zeeb
84*d3373029SBjoern A. Zeeb	_r="not ok"
85*d3373029SBjoern A. Zeeb	if test ${_rc} -eq ${_exp}; then
86*d3373029SBjoern A. Zeeb		_r="ok"
87*d3373029SBjoern A. Zeeb	fi
88*d3373029SBjoern A. Zeeb	echo "${_r} ${_testno} ${_testname} # ${_msg} ${_rc}"
89*d3373029SBjoern A. Zeeb}
90*d3373029SBjoern A. Zeeb
91*d3373029SBjoern A. Zeebprint_debug()
92*d3373029SBjoern A. Zeeb{
93*d3373029SBjoern A. Zeeb	local _msg
94*d3373029SBjoern A. Zeeb	_msg="$*"
95*d3373029SBjoern A. Zeeb
96*d3373029SBjoern A. Zeeb	case ${DEBUG} in
97*d3373029SBjoern A. Zeeb	''|0)	;;
98*d3373029SBjoern A. Zeeb	*)	echo "DEBUG: ${_msg}" >&2 ;;
99*d3373029SBjoern A. Zeeb	esac
100*d3373029SBjoern A. Zeeb}
101*d3373029SBjoern A. Zeeb
102*d3373029SBjoern A. Zeebdie()
103*d3373029SBjoern A. Zeeb{
104*d3373029SBjoern A. Zeeb	local _msg
105*d3373029SBjoern A. Zeeb	_msg="$*"
106*d3373029SBjoern A. Zeeb
107*d3373029SBjoern A. Zeeb	echo "ERROR: ${_msg}" >&2
108*d3373029SBjoern A. Zeeb	exit 1
109*d3373029SBjoern A. Zeeb}
110*d3373029SBjoern A. Zeeb
111*d3373029SBjoern A. Zeeb#
112*d3373029SBjoern A. Zeeb# Test functions.
113*d3373029SBjoern A. Zeeb#
114*d3373029SBjoern A. Zeeb
115*d3373029SBjoern A. Zeeb# Setup our side and wait for the peer to tell us that it is ready.
116*d3373029SBjoern A. Zeebwait_remote_ready()
117*d3373029SBjoern A. Zeeb{
118*d3373029SBjoern A. Zeeb	local _greeting _keyword _fibs _linklocal i
119*d3373029SBjoern A. Zeeb
120*d3373029SBjoern A. Zeeb	print_debug "Setting up interface ${IFACE}"
121*d3373029SBjoern A. Zeeb	ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias > /dev/null 2>&1 || true
122*d3373029SBjoern A. Zeeb	delay
123*d3373029SBjoern A. Zeeb	ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up
124*d3373029SBjoern A. Zeeb	i=0
125*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
126*d3373029SBjoern A. Zeeb		ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \
127*d3373029SBjoern A. Zeeb		    > /dev/null 2>&1 || true
128*d3373029SBjoern A. Zeeb		delay
129*d3373029SBjoern A. Zeeb		i=$((i + 1))
130*d3373029SBjoern A. Zeeb	done
131*d3373029SBjoern A. Zeeb	OURLINKLOCAL=`ifconfig ${IFACE} | awk '/inet6 fe80:/ { print $2 }'`
132*d3373029SBjoern A. Zeeb
133*d3373029SBjoern A. Zeeb	# Let things settle.
134*d3373029SBjoern A. Zeeb	print_debug "Waiting 4 seconds for things to settle"
135*d3373029SBjoern A. Zeeb	sleep 4
136*d3373029SBjoern A. Zeeb
137*d3373029SBjoern A. Zeeb	# Wait for the remote to connect and start things.
138*d3373029SBjoern A. Zeeb	# We tell it the magic keyword, our number of FIBs and our link-local.
139*d3373029SBjoern A. Zeeb	# It already knows our global address.
140*d3373029SBjoern A. Zeeb	_greeting=`echo "SETUP ${RT_NUMFIBS} ${OURLINKLOCAL}" | \
141*d3373029SBjoern A. Zeeb	    nc -6 -l ${CTRLPORT}`
142*d3373029SBjoern A. Zeeb
143*d3373029SBjoern A. Zeeb	read _keyword _fibs _linklocal <<EOI
144*d3373029SBjoern A. Zeeb${_greeting}
145*d3373029SBjoern A. ZeebEOI
146*d3373029SBjoern A. Zeeb	print_debug "_keyword=${_keyword}"
147*d3373029SBjoern A. Zeeb	print_debug "_fibs=${_fibs}"
148*d3373029SBjoern A. Zeeb	print_debug "_linklocal=${_linklocal}"
149*d3373029SBjoern A. Zeeb	case ${_keyword} in
150*d3373029SBjoern A. Zeeb	SETUP)	;;
151*d3373029SBjoern A. Zeeb	*)	die "Got invalid keyword in greeting: ${_greeting}"
152*d3373029SBjoern A. Zeeb		;;
153*d3373029SBjoern A. Zeeb	esac
154*d3373029SBjoern A. Zeeb	if test ${_fibs} -ne ${RT_NUMFIBS}; then
155*d3373029SBjoern A. Zeeb		die "Number of FIBs not matching ours (${RT_NUMFIBS}) in" \
156*d3373029SBjoern A. Zeeb		    "greeting: ${_greeting}"
157*d3373029SBjoern A. Zeeb	fi
158*d3373029SBjoern A. Zeeb	PEERLINKLOCAL=${_linklocal}
159*d3373029SBjoern A. Zeeb
160*d3373029SBjoern A. Zeeb	print_debug "Successfully received greeting. Peer at ${PEERLINKLOCAL}"
161*d3373029SBjoern A. Zeeb}
162*d3373029SBjoern A. Zeeb
163*d3373029SBjoern A. Zeebcleanup()
164*d3373029SBjoern A. Zeeb{
165*d3373029SBjoern A. Zeeb
166*d3373029SBjoern A. Zeeb	print_debug "Removing address from interface ${IFACE}"
167*d3373029SBjoern A. Zeeb	ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias
168*d3373029SBjoern A. Zeeb	delay
169*d3373029SBjoern A. Zeeb}
170*d3373029SBjoern A. Zeeb
171*d3373029SBjoern A. Zeeb################################################################################
172*d3373029SBjoern A. Zeeb#
173*d3373029SBjoern A. Zeebtesttx_icmp6_connected()
174*d3373029SBjoern A. Zeeb{
175*d3373029SBjoern A. Zeeb	local _opts
176*d3373029SBjoern A. Zeeb
177*d3373029SBjoern A. Zeeb	_opts=""
178*d3373029SBjoern A. Zeeb	case ${DEBUG} in
179*d3373029SBjoern A. Zeeb	''|0)	;;
180*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
181*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
182*d3373029SBjoern A. Zeeb	esac
183*d3373029SBjoern A. Zeeb	print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
184*d3373029SBjoern A. Zeeb	    "-t testtx_icmp6_connected ${_opts}"
185*d3373029SBjoern A. Zeeb	./reflect -p ${CTRLPORT} -T TCP6 -t testtx_icmp6_connected ${_opts}
186*d3373029SBjoern A. Zeeb	print_debug "reflect terminated without error."
187*d3373029SBjoern A. Zeeb}
188*d3373029SBjoern A. Zeeb
189*d3373029SBjoern A. Zeebtesttx_tcp6_connected()
190*d3373029SBjoern A. Zeeb{
191*d3373029SBjoern A. Zeeb	local _opts
192*d3373029SBjoern A. Zeeb
193*d3373029SBjoern A. Zeeb	_opts=""
194*d3373029SBjoern A. Zeeb	case ${DEBUG} in
195*d3373029SBjoern A. Zeeb	''|0)	;;
196*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
197*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
198*d3373029SBjoern A. Zeeb	esac
199*d3373029SBjoern A. Zeeb	print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
200*d3373029SBjoern A. Zeeb	    "-t testtx_tcp6_connected ${_opts}"
201*d3373029SBjoern A. Zeeb	./reflect -p ${CTRLPORT} -T TCP6 -t testtx_tcp6_connected ${_opts}
202*d3373029SBjoern A. Zeeb	print_debug "reflect terminated without error."
203*d3373029SBjoern A. Zeeb}
204*d3373029SBjoern A. Zeeb
205*d3373029SBjoern A. Zeebtesttx_udp6_connected()
206*d3373029SBjoern A. Zeeb{
207*d3373029SBjoern A. Zeeb	local _opts
208*d3373029SBjoern A. Zeeb
209*d3373029SBjoern A. Zeeb	_opts=""
210*d3373029SBjoern A. Zeeb	case ${DEBUG} in
211*d3373029SBjoern A. Zeeb	''|0)	;;
212*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
213*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
214*d3373029SBjoern A. Zeeb	esac
215*d3373029SBjoern A. Zeeb	print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \
216*d3373029SBjoern A. Zeeb	    "-t testtx_udp6_connected ${_opts}"
217*d3373029SBjoern A. Zeeb	./reflect -p ${CTRLPORT} -T UDP6 -t testtx_udp6_connected ${_opts}
218*d3373029SBjoern A. Zeeb	print_debug "reflect terminated without error."
219*d3373029SBjoern A. Zeeb}
220*d3373029SBjoern A. Zeeb
221*d3373029SBjoern A. Zeeb################################################################################
222*d3373029SBjoern A. Zeeb#
223*d3373029SBjoern A. Zeebtesttx_icmp6_connected_blackhole()
224*d3373029SBjoern A. Zeeb{
225*d3373029SBjoern A. Zeeb	local _opts _fib
226*d3373029SBjoern A. Zeeb
227*d3373029SBjoern A. Zeeb	_opts=""
228*d3373029SBjoern A. Zeeb	case ${DEBUG} in
229*d3373029SBjoern A. Zeeb	''|0)	;;
230*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
231*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
232*d3373029SBjoern A. Zeeb	esac
233*d3373029SBjoern A. Zeeb
234*d3373029SBjoern A. Zeeb	_fib=0
235*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
236*d3373029SBjoern A. Zeeb		print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
237*d3373029SBjoern A. Zeeb		    "-t testtx_icmp6_connected_blackhole${_fib} ${_opts}"
238*d3373029SBjoern A. Zeeb		./reflect -p ${CTRLPORT} -T TCP6 \
239*d3373029SBjoern A. Zeeb		    -t testtx_icmp6_connected_blackhole${_fib} ${_opts}
240*d3373029SBjoern A. Zeeb		print_debug "reflect terminated without error."
241*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
242*d3373029SBjoern A. Zeeb	done
243*d3373029SBjoern A. Zeeb}
244*d3373029SBjoern A. Zeeb
245*d3373029SBjoern A. Zeebtesttx_tcp6_connected_blackhole()
246*d3373029SBjoern A. Zeeb{
247*d3373029SBjoern A. Zeeb	local _opts _fib
248*d3373029SBjoern A. Zeeb
249*d3373029SBjoern A. Zeeb	_opts=""
250*d3373029SBjoern A. Zeeb	case ${DEBUG} in
251*d3373029SBjoern A. Zeeb	''|0)	;;
252*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
253*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
254*d3373029SBjoern A. Zeeb	esac
255*d3373029SBjoern A. Zeeb
256*d3373029SBjoern A. Zeeb	_fib=0
257*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
258*d3373029SBjoern A. Zeeb		print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
259*d3373029SBjoern A. Zeeb		    "-t testtx_tcp6_connected_blackhole${_fib} ${_opts}"
260*d3373029SBjoern A. Zeeb		./reflect -p ${CTRLPORT} -T TCP6 \
261*d3373029SBjoern A. Zeeb		    -t testtx_tcp6_connected_blackhole${_fib} ${_opts}
262*d3373029SBjoern A. Zeeb		print_debug "reflect terminated without error."
263*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
264*d3373029SBjoern A. Zeeb	done
265*d3373029SBjoern A. Zeeb}
266*d3373029SBjoern A. Zeeb
267*d3373029SBjoern A. Zeebtesttx_udp6_connected_blackhole()
268*d3373029SBjoern A. Zeeb{
269*d3373029SBjoern A. Zeeb	local _opts _fib
270*d3373029SBjoern A. Zeeb
271*d3373029SBjoern A. Zeeb	_opts=""
272*d3373029SBjoern A. Zeeb	case ${DEBUG} in
273*d3373029SBjoern A. Zeeb	''|0)	;;
274*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
275*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
276*d3373029SBjoern A. Zeeb	esac
277*d3373029SBjoern A. Zeeb
278*d3373029SBjoern A. Zeeb	_fib=0
279*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
280*d3373029SBjoern A. Zeeb		print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \
281*d3373029SBjoern A. Zeeb		    "-t testtx_udp6_connected_blackhole${_fib} ${_opts}"
282*d3373029SBjoern A. Zeeb		./reflect -p ${CTRLPORT} -T UDP6 \
283*d3373029SBjoern A. Zeeb		    -t testtx_udp6_connected_blackhole${_fib} ${_opts}
284*d3373029SBjoern A. Zeeb		print_debug "reflect terminated without error."
285*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
286*d3373029SBjoern A. Zeeb	done
287*d3373029SBjoern A. Zeeb}
288*d3373029SBjoern A. Zeeb
289*d3373029SBjoern A. Zeeb################################################################################
290*d3373029SBjoern A. Zeeb#
291*d3373029SBjoern A. Zeebtesttx_ulp6_connected_transfernets()
292*d3373029SBjoern A. Zeeb{
293*d3373029SBjoern A. Zeeb	local _opts _fib _n _o
294*d3373029SBjoern A. Zeeb	_n="$1"
295*d3373029SBjoern A. Zeeb	_o="$2"
296*d3373029SBjoern A. Zeeb
297*d3373029SBjoern A. Zeeb	_opts=""
298*d3373029SBjoern A. Zeeb	case ${DEBUG} in
299*d3373029SBjoern A. Zeeb	''|0)	;;
300*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
301*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
302*d3373029SBjoern A. Zeeb	esac
303*d3373029SBjoern A. Zeeb
304*d3373029SBjoern A. Zeeb	# Setup transfer networks.
305*d3373029SBjoern A. Zeeb	_fib=0
306*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
307*d3373029SBjoern A. Zeeb		setfib -F${_fib} \
308*d3373029SBjoern A. Zeeb		    ifconfig ${IFACE} inet6 2001:2:${_fib}::2/64 alias
309*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
310*d3373029SBjoern A. Zeeb	done
311*d3373029SBjoern A. Zeeb
312*d3373029SBjoern A. Zeeb	_fib=0
313*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
314*d3373029SBjoern A. Zeeb		print_debug "./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${_fib} ${_opts}"
315*d3373029SBjoern A. Zeeb		./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${_fib} ${_opts}
316*d3373029SBjoern A. Zeeb		print_debug "reflect terminated without error."
317*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
318*d3373029SBjoern A. Zeeb	done
319*d3373029SBjoern A. Zeeb
320*d3373029SBjoern A. Zeeb	# Cleanup transfer networks.
321*d3373029SBjoern A. Zeeb	_fib=0
322*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
323*d3373029SBjoern A. Zeeb		setfib -F${_fib} \
324*d3373029SBjoern A. Zeeb		    ifconfig ${IFACE} inet6 2001:2:${_fib}::2/64 -alias
325*d3373029SBjoern A. Zeeb		delay
326*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
327*d3373029SBjoern A. Zeeb	done
328*d3373029SBjoern A. Zeeb}
329*d3373029SBjoern A. Zeeb
330*d3373029SBjoern A. Zeebtesttx_icmp6_connected_transfernets()
331*d3373029SBjoern A. Zeeb{
332*d3373029SBjoern A. Zeeb
333*d3373029SBjoern A. Zeeb	testtx_ulp6_connected_transfernets \
334*d3373029SBjoern A. Zeeb	    "testtx_icmp6_connected_transfernets" "TCP6"
335*d3373029SBjoern A. Zeeb}
336*d3373029SBjoern A. Zeeb
337*d3373029SBjoern A. Zeebtesttx_tcp6_connected_transfernets()
338*d3373029SBjoern A. Zeeb{
339*d3373029SBjoern A. Zeeb
340*d3373029SBjoern A. Zeeb	testtx_ulp6_connected_transfernets \
341*d3373029SBjoern A. Zeeb	    "testtx_tcp6_connected_transfernets" "TCP6"
342*d3373029SBjoern A. Zeeb}
343*d3373029SBjoern A. Zeeb
344*d3373029SBjoern A. Zeebtesttx_udp6_connected_transfernets()
345*d3373029SBjoern A. Zeeb{
346*d3373029SBjoern A. Zeeb
347*d3373029SBjoern A. Zeeb	testtx_ulp6_connected_transfernets \
348*d3373029SBjoern A. Zeeb	    "testtx_udp6_connected_transfernets" "UDP6"
349*d3373029SBjoern A. Zeeb}
350*d3373029SBjoern A. Zeeb
351*d3373029SBjoern A. Zeebtesttx_icmp6_connected_ifconfig_transfernets()
352*d3373029SBjoern A. Zeeb{
353*d3373029SBjoern A. Zeeb
354*d3373029SBjoern A. Zeeb	testtx_ulp6_connected_transfernets \
355*d3373029SBjoern A. Zeeb	    "testtx_icmp6_connected_ifconfig_transfernets" "TCP6"
356*d3373029SBjoern A. Zeeb}
357*d3373029SBjoern A. Zeeb
358*d3373029SBjoern A. Zeebtesttx_tcp6_connected_ifconfig_transfernets()
359*d3373029SBjoern A. Zeeb{
360*d3373029SBjoern A. Zeeb
361*d3373029SBjoern A. Zeeb	testtx_ulp6_connected_transfernets \
362*d3373029SBjoern A. Zeeb	    "testtx_tcp6_connected_ifconfig_transfernets" "TCP6"
363*d3373029SBjoern A. Zeeb}
364*d3373029SBjoern A. Zeeb
365*d3373029SBjoern A. Zeebtesttx_udp6_connected_ifconfig_transfernets()
366*d3373029SBjoern A. Zeeb{
367*d3373029SBjoern A. Zeeb
368*d3373029SBjoern A. Zeeb	testtx_ulp6_connected_transfernets \
369*d3373029SBjoern A. Zeeb	    "testtx_udp6_connected_ifconfig_transfernets" "UDP6"
370*d3373029SBjoern A. Zeeb}
371*d3373029SBjoern A. Zeeb
372*d3373029SBjoern A. Zeeb################################################################################
373*d3373029SBjoern A. Zeeb#
374*d3373029SBjoern A. Zeebtesttx_ulp6_gateway()
375*d3373029SBjoern A. Zeeb{
376*d3373029SBjoern A. Zeeb	local _opts _n _o
377*d3373029SBjoern A. Zeeb	_n="$1"
378*d3373029SBjoern A. Zeeb	_o="$2"
379*d3373029SBjoern A. Zeeb
380*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true
381*d3373029SBjoern A. Zeeb	delay
382*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 alias
383*d3373029SBjoern A. Zeeb
384*d3373029SBjoern A. Zeeb	_opts=""
385*d3373029SBjoern A. Zeeb	case ${DEBUG} in
386*d3373029SBjoern A. Zeeb	''|0)	;;
387*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
388*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
389*d3373029SBjoern A. Zeeb	esac
390*d3373029SBjoern A. Zeeb
391*d3373029SBjoern A. Zeeb	print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \
392*d3373029SBjoern A. Zeeb	    "-t ${_n} ${_opts} -A 2001:2:ff01::2"
393*d3373029SBjoern A. Zeeb	./reflect -p ${CTRLPORT} -T ${_o} \
394*d3373029SBjoern A. Zeeb	    -t ${_n} ${_opts} -A 2001:2:ff01::2
395*d3373029SBjoern A. Zeeb	print_debug "reflect terminated without error."
396*d3373029SBjoern A. Zeeb
397*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 -alias
398*d3373029SBjoern A. Zeeb	delay
399*d3373029SBjoern A. Zeeb}
400*d3373029SBjoern A. Zeeb
401*d3373029SBjoern A. Zeebtesttx_icmp6_gateway()
402*d3373029SBjoern A. Zeeb{
403*d3373029SBjoern A. Zeeb
404*d3373029SBjoern A. Zeeb	testtx_ulp6_gateway "testtx_icmp6_gateway" "TCP6"
405*d3373029SBjoern A. Zeeb}
406*d3373029SBjoern A. Zeeb
407*d3373029SBjoern A. Zeebtesttx_tcp6_gateway()
408*d3373029SBjoern A. Zeeb{
409*d3373029SBjoern A. Zeeb
410*d3373029SBjoern A. Zeeb	testtx_ulp6_gateway "testtx_tcp6_gateway" "TCP6"
411*d3373029SBjoern A. Zeeb}
412*d3373029SBjoern A. Zeeb
413*d3373029SBjoern A. Zeebtesttx_udp6_gateway()
414*d3373029SBjoern A. Zeeb{
415*d3373029SBjoern A. Zeeb
416*d3373029SBjoern A. Zeeb	testtx_ulp6_gateway "testtx_udp6_gateway" "UDP6"
417*d3373029SBjoern A. Zeeb}
418*d3373029SBjoern A. Zeeb
419*d3373029SBjoern A. Zeeb################################################################################
420*d3373029SBjoern A. Zeeb#
421*d3373029SBjoern A. Zeebtesttx_ulp6_transfernets_gateways()
422*d3373029SBjoern A. Zeeb{
423*d3373029SBjoern A. Zeeb	local _opts _fib _n _o
424*d3373029SBjoern A. Zeeb	_n="$1"
425*d3373029SBjoern A. Zeeb	_o="$2"
426*d3373029SBjoern A. Zeeb
427*d3373029SBjoern A. Zeeb	_opts=""
428*d3373029SBjoern A. Zeeb	case ${DEBUG} in
429*d3373029SBjoern A. Zeeb	''|0)	;;
430*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
431*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
432*d3373029SBjoern A. Zeeb	esac
433*d3373029SBjoern A. Zeeb
434*d3373029SBjoern A. Zeeb	# Setup transfer networks.
435*d3373029SBjoern A. Zeeb	_fib=0
436*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
437*d3373029SBjoern A. Zeeb		setfib -F${_fib} \
438*d3373029SBjoern A. Zeeb		    ifconfig ${IFACE} inet6 2001:2:${_fib}::2/64 alias
439*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
440*d3373029SBjoern A. Zeeb	done
441*d3373029SBjoern A. Zeeb
442*d3373029SBjoern A. Zeeb	# Setup out listener IP.
443*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true
444*d3373029SBjoern A. Zeeb	delay
445*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 alias
446*d3373029SBjoern A. Zeeb
447*d3373029SBjoern A. Zeeb	# Reflect requests.
448*d3373029SBjoern A. Zeeb	print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \
449*d3373029SBjoern A. Zeeb	    "-t ${_n} ${_opts} -A 2001:2:ff01::2"
450*d3373029SBjoern A. Zeeb	./reflect -p ${CTRLPORT} -T ${_o} \
451*d3373029SBjoern A. Zeeb	    -t ${_n} ${_opts} -A 2001:2:ff01::2
452*d3373029SBjoern A. Zeeb	print_debug "reflect terminated without error."
453*d3373029SBjoern A. Zeeb
454*d3373029SBjoern A. Zeeb	# Cleanup transfer networks and listener IP.
455*d3373029SBjoern A. Zeeb	_fib=0
456*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
457*d3373029SBjoern A. Zeeb		setfib -F${_fib} \
458*d3373029SBjoern A. Zeeb		    ifconfig ${IFACE} inet6 2001:2:${_fib}::2/64 -alias
459*d3373029SBjoern A. Zeeb		delay
460*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
461*d3373029SBjoern A. Zeeb	done
462*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 -alias
463*d3373029SBjoern A. Zeeb}
464*d3373029SBjoern A. Zeeb
465*d3373029SBjoern A. Zeebtesttx_icmp6_transfernets_gateways()
466*d3373029SBjoern A. Zeeb{
467*d3373029SBjoern A. Zeeb
468*d3373029SBjoern A. Zeeb	testtx_ulp6_transfernets_gateways \
469*d3373029SBjoern A. Zeeb	    "testtx_icmp6_transfernets_gateways" "TCP6"
470*d3373029SBjoern A. Zeeb}
471*d3373029SBjoern A. Zeeb
472*d3373029SBjoern A. Zeebtesttx_tcp6_transfernets_gateways()
473*d3373029SBjoern A. Zeeb{
474*d3373029SBjoern A. Zeeb
475*d3373029SBjoern A. Zeeb	testtx_ulp6_transfernets_gateways \
476*d3373029SBjoern A. Zeeb	    "testtx_tcp6_transfernets_gateways" "TCP6"
477*d3373029SBjoern A. Zeeb}
478*d3373029SBjoern A. Zeeb
479*d3373029SBjoern A. Zeebtesttx_udp6_transfernets_gateways()
480*d3373029SBjoern A. Zeeb{
481*d3373029SBjoern A. Zeeb
482*d3373029SBjoern A. Zeeb	testtx_ulp6_transfernets_gateways \
483*d3373029SBjoern A. Zeeb	    "testtx_udp6_transfernets_gateways" "UDP6"
484*d3373029SBjoern A. Zeeb}
485*d3373029SBjoern A. Zeeb
486*d3373029SBjoern A. Zeeb
487*d3373029SBjoern A. Zeeb################################################################################
488*d3373029SBjoern A. Zeeb#
489*d3373029SBjoern A. Zeebtesttx_ulp6_transfernets_gateway()
490*d3373029SBjoern A. Zeeb{
491*d3373029SBjoern A. Zeeb	local _opts _fib _n _o
492*d3373029SBjoern A. Zeeb	_n="$1"
493*d3373029SBjoern A. Zeeb	_o="$2"
494*d3373029SBjoern A. Zeeb
495*d3373029SBjoern A. Zeeb	_opts=""
496*d3373029SBjoern A. Zeeb	case ${DEBUG} in
497*d3373029SBjoern A. Zeeb	''|0)	;;
498*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
499*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
500*d3373029SBjoern A. Zeeb	esac
501*d3373029SBjoern A. Zeeb
502*d3373029SBjoern A. Zeeb	# Setup transfer networks.
503*d3373029SBjoern A. Zeeb	_fib=0
504*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
505*d3373029SBjoern A. Zeeb		setfib -F${_fib} \
506*d3373029SBjoern A. Zeeb		    ifconfig ${IFACE} inet6 2001:2:${_fib}::2/64 alias
507*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
508*d3373029SBjoern A. Zeeb	done
509*d3373029SBjoern A. Zeeb
510*d3373029SBjoern A. Zeeb	# Setup out listener IP.
511*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true
512*d3373029SBjoern A. Zeeb	delay
513*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 alias
514*d3373029SBjoern A. Zeeb
515*d3373029SBjoern A. Zeeb	# Reflect requests.
516*d3373029SBjoern A. Zeeb	_fib=0
517*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
518*d3373029SBjoern A. Zeeb		print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \
519*d3373029SBjoern A. Zeeb		    "-t ${_n}${_fib} ${_opts} -A 2001:2:ff01::2"
520*d3373029SBjoern A. Zeeb		./reflect -p ${CTRLPORT} -T ${_o} \
521*d3373029SBjoern A. Zeeb		    -t ${_n}${_fib} ${_opts} -A 2001:2:ff01::2
522*d3373029SBjoern A. Zeeb		print_debug "reflect terminated without error."
523*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
524*d3373029SBjoern A. Zeeb	done
525*d3373029SBjoern A. Zeeb
526*d3373029SBjoern A. Zeeb	# Cleanup transfer networks and listener IP.
527*d3373029SBjoern A. Zeeb	_fib=0
528*d3373029SBjoern A. Zeeb	while test ${_fib} -lt ${RT_NUMFIBS}; do
529*d3373029SBjoern A. Zeeb		setfib -F${_fib} \
530*d3373029SBjoern A. Zeeb		    ifconfig ${IFACE} inet6 2001:2:${_fib}::2/64 -alias
531*d3373029SBjoern A. Zeeb		delay
532*d3373029SBjoern A. Zeeb		_fib=$((_fib + 1))
533*d3373029SBjoern A. Zeeb	done
534*d3373029SBjoern A. Zeeb	ifconfig lo0 inet6 2001:2:ff01::2 -alias
535*d3373029SBjoern A. Zeeb}
536*d3373029SBjoern A. Zeeb
537*d3373029SBjoern A. Zeebtesttx_icmp6_transfernets_gateway()
538*d3373029SBjoern A. Zeeb{
539*d3373029SBjoern A. Zeeb
540*d3373029SBjoern A. Zeeb	testtx_ulp6_transfernets_gateway \
541*d3373029SBjoern A. Zeeb	    "testtx_icmp6_transfernets_gateway" "TCP6"
542*d3373029SBjoern A. Zeeb}
543*d3373029SBjoern A. Zeeb
544*d3373029SBjoern A. Zeebtesttx_tcp6_transfernets_gateway()
545*d3373029SBjoern A. Zeeb{
546*d3373029SBjoern A. Zeeb
547*d3373029SBjoern A. Zeeb	testtx_ulp6_transfernets_gateway \
548*d3373029SBjoern A. Zeeb	    "testtx_tcp6_transfernets_gateway" "TCP6"
549*d3373029SBjoern A. Zeeb}
550*d3373029SBjoern A. Zeeb
551*d3373029SBjoern A. Zeebtesttx_udp6_transfernets_gateway()
552*d3373029SBjoern A. Zeeb{
553*d3373029SBjoern A. Zeeb
554*d3373029SBjoern A. Zeeb	testtx_ulp6_transfernets_gateway \
555*d3373029SBjoern A. Zeeb	    "testtx_udp6_transfernets_gateway" "UDP6"
556*d3373029SBjoern A. Zeeb}
557*d3373029SBjoern A. Zeeb
558*d3373029SBjoern A. Zeeb################################################################################
559*d3373029SBjoern A. Zeeb#
560*d3373029SBjoern A. Zeeb# We are receiver, but the FIBs are with us this time.
561*d3373029SBjoern A. Zeeb#
562*d3373029SBjoern A. Zeeb#
563*d3373029SBjoern A. Zeeb
564*d3373029SBjoern A. Zeeb#       # For IPFW, IFCONFIG
565*d3373029SBjoern A. Zeeb#       #   For each FIB
566*d3373029SBjoern A. Zeeb#       #     Send OOB well known to work START, wait for reflect
567*d3373029SBjoern A. Zeeb#       #     Send probe, wait for reply with FIB# or RST/ICMP6 unreach
568*d3373029SBjoern A. Zeeb#       #       (in case of ICMP6 use magic like ipfw count and OOB reply)
569*d3373029SBjoern A. Zeeb#       #     Send OOB well known to work DONE, wait for reflect
570*d3373029SBjoern A. Zeeb#       #     Compare real with expected results.
571*d3373029SBjoern A. Zeeb#
572*d3373029SBjoern A. Zeeb
573*d3373029SBjoern A. Zeebtextrx_ipfw_setup()
574*d3373029SBjoern A. Zeeb{
575*d3373029SBjoern A. Zeeb	local _fib _transfer i _p _o
576*d3373029SBjoern A. Zeeb	_fib=$1
577*d3373029SBjoern A. Zeeb	_transfer=$2
578*d3373029SBjoern A. Zeeb
579*d3373029SBjoern A. Zeeb	# ICMP6 would need content inspection to distinguish FIB, we can
580*d3373029SBjoern A. Zeeb	# only differentiate by address.
581*d3373029SBjoern A. Zeeb	# For the default single-address cases always set to current FIB.
582*d3373029SBjoern A. Zeeb	ipfw add 100 setfib ${_fib} ipv6-icmp \
583*d3373029SBjoern A. Zeeb	    from ${PEERADDR} to ${OURADDR} \
584*d3373029SBjoern A. Zeeb	    via ${IFACE} in > /dev/null 2>&1
585*d3373029SBjoern A. Zeeb	ipfw add 100 setfib ${_fib} ipv6-icmp \
586*d3373029SBjoern A. Zeeb	    from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \
587*d3373029SBjoern A. Zeeb	    via ${IFACE} in > /dev/null 2>&1
588*d3373029SBjoern A. Zeeb
589*d3373029SBjoern A. Zeeb	# Always also do a setfib for the control port so that OOB
590*d3373029SBjoern A. Zeeb	# signaling workes even if we remove connected subnets.
591*d3373029SBjoern A. Zeeb	ipfw add 200 setfib ${_fib} ip6 from ${PEERADDR} to ${OURADDR} \
592*d3373029SBjoern A. Zeeb	    dst-port ${CTRLPORT} via ${IFACE} in > /dev/null 2>&1
593*d3373029SBjoern A. Zeeb
594*d3373029SBjoern A. Zeeb	# Save addresses
595*d3373029SBjoern A. Zeeb	_p="${PEERADDR}"
596*d3373029SBjoern A. Zeeb	_o="${OURADDR}"
597*d3373029SBjoern A. Zeeb
598*d3373029SBjoern A. Zeeb	i=0
599*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
600*d3373029SBjoern A. Zeeb
601*d3373029SBjoern A. Zeeb		# If doing multiple transfer networks, replace PEERADDR.
602*d3373029SBjoern A. Zeeb		case ${_transfer} in
603*d3373029SBjoern A. Zeeb		1)	PEERADDR=2001:2:${i}::1
604*d3373029SBjoern A. Zeeb			OURADDR=2001:2:${i}::2
605*d3373029SBjoern A. Zeeb			;;
606*d3373029SBjoern A. Zeeb		esac
607*d3373029SBjoern A. Zeeb
608*d3373029SBjoern A. Zeeb		if test ${_instances} -gt 1 -o ${_transfer} -eq 1; then
609*d3373029SBjoern A. Zeeb			ipfw add 400 setfib ${_fib} ipv6-icmp \
610*d3373029SBjoern A. Zeeb			    from ${PEERADDR} to ${OURADDR} \
611*d3373029SBjoern A. Zeeb			    icmp6types 128 \
612*d3373029SBjoern A. Zeeb			    via ${IFACE} in > /dev/null 2>&1
613*d3373029SBjoern A. Zeeb		fi
614*d3373029SBjoern A. Zeeb
615*d3373029SBjoern A. Zeeb		case ${i} in
616*d3373029SBjoern A. Zeeb		${_fib})
617*d3373029SBjoern A. Zeeb			ipfw add 400 setfib ${_fib} ip6 \
618*d3373029SBjoern A. Zeeb			    from ${PEERADDR} to ${OURADDR} \
619*d3373029SBjoern A. Zeeb			    dst-port $((CTRLPORT + 1000 + i)) \
620*d3373029SBjoern A. Zeeb			    via ${IFACE} in > /dev/null 2>&1
621*d3373029SBjoern A. Zeeb			ipfw add 400 setfib ${_fib} ip6 \
622*d3373029SBjoern A. Zeeb			    from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \
623*d3373029SBjoern A. Zeeb			    dst-port $((CTRLPORT + 1000 + i)) \
624*d3373029SBjoern A. Zeeb			    via ${IFACE} in > /dev/null 2>&1
625*d3373029SBjoern A. Zeeb			if test ${_instances} -le 1 -o ${_transfer} -ne 1; then
626*d3373029SBjoern A. Zeeb				ipfw add 400 setfib ${_fib} ipv6-icmp \
627*d3373029SBjoern A. Zeeb				    from ${PEERADDR} to ${OURADDR} \
628*d3373029SBjoern A. Zeeb				    icmp6types 128 \
629*d3373029SBjoern A. Zeeb				    via ${IFACE} in > /dev/null 2>&1
630*d3373029SBjoern A. Zeeb			fi
631*d3373029SBjoern A. Zeeb			;;
632*d3373029SBjoern A. Zeeb		esac
633*d3373029SBjoern A. Zeeb
634*d3373029SBjoern A. Zeeb		i=$((i + 1))
635*d3373029SBjoern A. Zeeb	done
636*d3373029SBjoern A. Zeeb
637*d3373029SBjoern A. Zeeb	# Restore addresses.
638*d3373029SBjoern A. Zeeb	PEERADDR="${_p}"
639*d3373029SBjoern A. Zeeb	OURADDR="${_o}"
640*d3373029SBjoern A. Zeeb
641*d3373029SBjoern A. Zeeb	case ${DEBUG} in
642*d3373029SBjoern A. Zeeb	''|0)	;;
643*d3373029SBjoern A. Zeeb	*)	ipfw show ;;
644*d3373029SBjoern A. Zeeb	esac
645*d3373029SBjoern A. Zeeb}
646*d3373029SBjoern A. Zeeb
647*d3373029SBjoern A. Zeebtextrx_ifconfig_setup()
648*d3373029SBjoern A. Zeeb{
649*d3373029SBjoern A. Zeeb	local _fib
650*d3373029SBjoern A. Zeeb	_fib=$1
651*d3373029SBjoern A. Zeeb
652*d3373029SBjoern A. Zeeb	ifconfig ${IFACE} fib ${_fib} > /dev/null 2>&1
653*d3373029SBjoern A. Zeeb}
654*d3373029SBjoern A. Zeeb
655*d3373029SBjoern A. Zeebtextrx_ipfw_cleanup()
656*d3373029SBjoern A. Zeeb{
657*d3373029SBjoern A. Zeeb	local i
658*d3373029SBjoern A. Zeeb
659*d3373029SBjoern A. Zeeb	case ${DEBUG} in
660*d3373029SBjoern A. Zeeb	''|0)	;;
661*d3373029SBjoern A. Zeeb	*)	ipfw show ;;
662*d3373029SBjoern A. Zeeb	esac
663*d3373029SBjoern A. Zeeb
664*d3373029SBjoern A. Zeeb	ipfw delete 100 > /dev/null 2>&1 || true
665*d3373029SBjoern A. Zeeb	ipfw delete 200 > /dev/null 2>&1 || true
666*d3373029SBjoern A. Zeeb	ipfw delete 400 > /dev/null 2>&1 || true
667*d3373029SBjoern A. Zeeb
668*d3373029SBjoern A. Zeeb	i=0
669*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
670*d3373029SBjoern A. Zeeb
671*d3373029SBjoern A. Zeeb		ipfw delete $((1000 + i)) > /dev/null 2>&1 || true
672*d3373029SBjoern A. Zeeb		i=$((i + 1))
673*d3373029SBjoern A. Zeeb	done
674*d3373029SBjoern A. Zeeb}
675*d3373029SBjoern A. Zeeb
676*d3373029SBjoern A. Zeebtextrx_ifconfig_cleanup()
677*d3373029SBjoern A. Zeeb{
678*d3373029SBjoern A. Zeeb
679*d3373029SBjoern A. Zeeb	ifconfig ${IFACE} fib 0 > /dev/null 2>&1
680*d3373029SBjoern A. Zeeb}
681*d3373029SBjoern A. Zeeb
682*d3373029SBjoern A. Zeebtextrx_count_setup()
683*d3373029SBjoern A. Zeeb{
684*d3373029SBjoern A. Zeeb	local i
685*d3373029SBjoern A. Zeeb
686*d3373029SBjoern A. Zeeb	i=0
687*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
688*d3373029SBjoern A. Zeeb
689*d3373029SBjoern A. Zeeb		# Count ICMP6 echo replies.
690*d3373029SBjoern A. Zeeb		ipfw add $((500 + i)) count ipv6-icmp from any to any \
691*d3373029SBjoern A. Zeeb		    icmp6types 129 fib ${i} via ${IFACE} out > /dev/null 2>&1
692*d3373029SBjoern A. Zeeb		ipfw add $((500 + i)) count tcp from any to any \
693*d3373029SBjoern A. Zeeb		    fib ${i} via ${IFACE} out > /dev/null 2>&1
694*d3373029SBjoern A. Zeeb		ipfw add $((500 + i)) count udp from any to any \
695*d3373029SBjoern A. Zeeb		    fib ${i} via ${IFACE} out > /dev/null 2>&1
696*d3373029SBjoern A. Zeeb		i=$((i + 1))
697*d3373029SBjoern A. Zeeb	done
698*d3373029SBjoern A. Zeeb}
699*d3373029SBjoern A. Zeeb
700*d3373029SBjoern A. Zeebtextrx_count_results()
701*d3373029SBjoern A. Zeeb{
702*d3373029SBjoern A. Zeeb	local _fib _o i _rstr _c _req _p _opts
703*d3373029SBjoern A. Zeeb	_fib=$1
704*d3373029SBjoern A. Zeeb	_o="$2"
705*d3373029SBjoern A. Zeeb
706*d3373029SBjoern A. Zeeb	case ${DEBUG} in
707*d3373029SBjoern A. Zeeb	''|0)	;;
708*d3373029SBjoern A. Zeeb	*)	ipfw show ;;
709*d3373029SBjoern A. Zeeb	esac
710*d3373029SBjoern A. Zeeb
711*d3373029SBjoern A. Zeeb	_rstr=""
712*d3373029SBjoern A. Zeeb	i=0
713*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
714*d3373029SBjoern A. Zeeb
715*d3373029SBjoern A. Zeeb		case "${_o}" in
716*d3373029SBjoern A. Zeeb		"-i")	_c=`ipfw show $((500 + i)) | awk '/ ipv6-icmp / { print $2 }'` ;;
717*d3373029SBjoern A. Zeeb		"-u")	_c=`ipfw show $((500 + i)) | awk '/ udp / { print $2 }'` ;;
718*d3373029SBjoern A. Zeeb		*)	_c=`ipfw show $((500 + i)) | awk '/ tcp / { print $2 }'` ;;
719*d3373029SBjoern A. Zeeb		esac
720*d3373029SBjoern A. Zeeb		_rstr="${_rstr}${i} ${_c},"
721*d3373029SBjoern A. Zeeb
722*d3373029SBjoern A. Zeeb		ipfw delete $((500 + i)) > /dev/null 2>&1 || true
723*d3373029SBjoern A. Zeeb		i=$((i + 1))
724*d3373029SBjoern A. Zeeb	done
725*d3373029SBjoern A. Zeeb
726*d3373029SBjoern A. Zeeb	# We do not care about the request.
727*d3373029SBjoern A. Zeeb	_req=`echo "RESULT ${_rstr}" | nc -V ${_fib} -6 -l ${CTRLPORT}`
728*d3373029SBjoern A. Zeeb	print_debug "$? -- ${_req} -- RESULT ${_rstr}"
729*d3373029SBjoern A. Zeeb}
730*d3373029SBjoern A. Zeeb
731*d3373029SBjoern A. Zeebtestrx_remove_connected()
732*d3373029SBjoern A. Zeeb{
733*d3373029SBjoern A. Zeeb	local _fib _transfer i j _prefix
734*d3373029SBjoern A. Zeeb	_fib=$1
735*d3373029SBjoern A. Zeeb	_transfer=$2
736*d3373029SBjoern A. Zeeb
737*d3373029SBjoern A. Zeeb	if test ${_transfer} -eq 1; then
738*d3373029SBjoern A. Zeeb		i=0
739*d3373029SBjoern A. Zeeb		while test ${i} -lt ${RT_NUMFIBS}; do
740*d3373029SBjoern A. Zeeb			j=0
741*d3373029SBjoern A. Zeeb			while test ${j} -lt ${RT_NUMFIBS}; do
742*d3373029SBjoern A. Zeeb				_prefix="2001:2:${j}::"
743*d3373029SBjoern A. Zeeb
744*d3373029SBjoern A. Zeeb				case ${j} in
745*d3373029SBjoern A. Zeeb				${_fib});;
746*d3373029SBjoern A. Zeeb				*)	print_debug "setfib -F${i} route delete" \
747*d3373029SBjoern A. Zeeb					    "-inet6 -net ${_prefix}"
748*d3373029SBjoern A. Zeeb					setfib -F${i} route delete -inet6 -net \
749*d3373029SBjoern A. Zeeb					    ${_prefix} > /dev/null 2>&1
750*d3373029SBjoern A. Zeeb					;;
751*d3373029SBjoern A. Zeeb				esac
752*d3373029SBjoern A. Zeeb				j=$((j + 1))
753*d3373029SBjoern A. Zeeb			done
754*d3373029SBjoern A. Zeeb			i=$((i + 1))
755*d3373029SBjoern A. Zeeb		done
756*d3373029SBjoern A. Zeeb
757*d3373029SBjoern A. Zeeb	else
758*d3373029SBjoern A. Zeeb		_prefix="${OURADDR%2}"	# Luckily we know the details.
759*d3373029SBjoern A. Zeeb		i=0
760*d3373029SBjoern A. Zeeb		while test ${i} -lt ${RT_NUMFIBS}; do
761*d3373029SBjoern A. Zeeb
762*d3373029SBjoern A. Zeeb			case ${i} in
763*d3373029SBjoern A. Zeeb			${_fib});;
764*d3373029SBjoern A. Zeeb			*)	print_debug "setfib -F${i} route delete" \
765*d3373029SBjoern A. Zeeb				    "-inet6 -net ${_prefix}"
766*d3373029SBjoern A. Zeeb				setfib -F${i} route delete -inet6 -net \
767*d3373029SBjoern A. Zeeb				    ${_prefix} > /dev/null 2>&1
768*d3373029SBjoern A. Zeeb				;;
769*d3373029SBjoern A. Zeeb			esac
770*d3373029SBjoern A. Zeeb
771*d3373029SBjoern A. Zeeb			i=$((i + 1))
772*d3373029SBjoern A. Zeeb		done
773*d3373029SBjoern A. Zeeb	fi
774*d3373029SBjoern A. Zeeb}
775*d3373029SBjoern A. Zeeb
776*d3373029SBjoern A. Zeebtestrx_cleanup_connected()
777*d3373029SBjoern A. Zeeb{
778*d3373029SBjoern A. Zeeb	local _fib _transfer i _prefix
779*d3373029SBjoern A. Zeeb	_fib=$1
780*d3373029SBjoern A. Zeeb	_transfer=$2
781*d3373029SBjoern A. Zeeb
782*d3373029SBjoern A. Zeeb	if test ${_transfer} -eq 1; then
783*d3373029SBjoern A. Zeeb
784*d3373029SBjoern A. Zeeb		i=0
785*d3373029SBjoern A. Zeeb		while test ${i} -lt ${RT_NUMFIBS}; do
786*d3373029SBjoern A. Zeeb			setfib -F${i} \
787*d3373029SBjoern A. Zeeb			   ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \
788*d3373029SBjoern A. Zeeb			    > /dev/null 2>&1
789*d3373029SBjoern A. Zeeb			delay
790*d3373029SBjoern A. Zeeb			i=$((i + 1))
791*d3373029SBjoern A. Zeeb		done
792*d3373029SBjoern A. Zeeb
793*d3373029SBjoern A. Zeeb	else
794*d3373029SBjoern A. Zeeb		# Use the hammer removing the address and adding it again to get
795*d3373029SBjoern A. Zeeb		# the connected subnet back to all FIBs.  Hard to do otherwise.
796*d3373029SBjoern A. Zeeb		ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias || true
797*d3373029SBjoern A. Zeeb		delay
798*d3373029SBjoern A. Zeeb		ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up
799*d3373029SBjoern A. Zeeb	fi
800*d3373029SBjoern A. Zeeb}
801*d3373029SBjoern A. Zeeb
802*d3373029SBjoern A. Zeebtestrx_setup_transfer_networks()
803*d3373029SBjoern A. Zeeb{
804*d3373029SBjoern A. Zeeb	local i
805*d3373029SBjoern A. Zeeb
806*d3373029SBjoern A. Zeeb	i=0
807*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
808*d3373029SBjoern A. Zeeb		ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \
809*d3373029SBjoern A. Zeeb		    > /dev/null 2>&1 || true
810*d3373029SBjoern A. Zeeb		delay
811*d3373029SBjoern A. Zeeb		ifconfig ${IFACE} inet6 2001:2:${i}::2/64 alias
812*d3373029SBjoern A. Zeeb		i=$((i + 1))
813*d3373029SBjoern A. Zeeb	done
814*d3373029SBjoern A. Zeeb}
815*d3373029SBjoern A. Zeeb
816*d3373029SBjoern A. Zeebtestrx_run_one()
817*d3373029SBjoern A. Zeeb{
818*d3373029SBjoern A. Zeeb	local _fib _txt _opts
819*d3373029SBjoern A. Zeeb	_fib=$1
820*d3373029SBjoern A. Zeeb	_txt="$2"
821*d3373029SBjoern A. Zeeb	_opts="$3"
822*d3373029SBjoern A. Zeeb
823*d3373029SBjoern A. Zeeb	case ${USE_SOSETFIB} in
824*d3373029SBjoern A. Zeeb	0)	print_debug "setfib -F${_fib} ./reflect -p ${CTRLPORT}" \
825*d3373029SBjoern A. Zeeb		    "-t ${_txt} ${_opts}"
826*d3373029SBjoern A. Zeeb		setfib -F${_fib} ./reflect -p ${CTRLPORT} -t ${_txt} ${_opts}
827*d3373029SBjoern A. Zeeb		;;
828*d3373029SBjoern A. Zeeb	1)	print_debug "./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt}" \
829*d3373029SBjoern A. Zeeb		    "${_opts}"
830*d3373029SBjoern A. Zeeb		./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt} ${_opts}
831*d3373029SBjoern A. Zeeb		;;
832*d3373029SBjoern A. Zeeb	*)	die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;;
833*d3373029SBjoern A. Zeeb	esac
834*d3373029SBjoern A. Zeeb	print_debug "reflect '${_txt}' terminated without error."
835*d3373029SBjoern A. Zeeb}
836*d3373029SBjoern A. Zeeb
837*d3373029SBjoern A. Zeebtestrx_run_multiple()
838*d3373029SBjoern A. Zeeb{
839*d3373029SBjoern A. Zeeb	local _fib _txt _opts i _jobs _p _w
840*d3373029SBjoern A. Zeeb	_fib=$1
841*d3373029SBjoern A. Zeeb	_txt="$2"
842*d3373029SBjoern A. Zeeb	_opts="$3"
843*d3373029SBjoern A. Zeeb
844*d3373029SBjoern A. Zeeb	i=0
845*d3373029SBjoern A. Zeeb	_jobs=""
846*d3373029SBjoern A. Zeeb	while test ${i} -lt ${RT_NUMFIBS}; do
847*d3373029SBjoern A. Zeeb		case ${USE_SOSETFIB} in
848*d3373029SBjoern A. Zeeb		0)	print_debug "setfib -F${i} ./reflect" \
849*d3373029SBjoern A. Zeeb			    "-p $((CTRLPORT + 1000 + i))" \
850*d3373029SBjoern A. Zeeb			    "-t ${_txt} ${_opts} -N -f ${i} &"
851*d3373029SBjoern A. Zeeb			setfib -F${i} ./reflect -p $((CTRLPORT + 1000 + i)) \
852*d3373029SBjoern A. Zeeb			    -t ${_txt} ${_opts} -N -f ${i} &
853*d3373029SBjoern A. Zeeb			;;
854*d3373029SBjoern A. Zeeb		1)	print_debug "./reflect -F ${i}" \
855*d3373029SBjoern A. Zeeb			    "-p $((CTRLPORT + 1000 + i))" \
856*d3373029SBjoern A. Zeeb			    "-t ${_txt} ${_opts} -N -f ${i} &"
857*d3373029SBjoern A. Zeeb			./reflect -F ${i} -p $((CTRLPORT + 1000 + i)) \
858*d3373029SBjoern A. Zeeb			    -t ${_txt} ${_opts} -N -f ${i} &
859*d3373029SBjoern A. Zeeb			;;
860*d3373029SBjoern A. Zeeb		*)	die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;;
861*d3373029SBjoern A. Zeeb		esac
862*d3373029SBjoern A. Zeeb		_p=$!
863*d3373029SBjoern A. Zeeb		_jobs="${_jobs}${_p} "
864*d3373029SBjoern A. Zeeb		case ${i} in
865*d3373029SBjoern A. Zeeb		${_fib}) _w=${_p} ;;
866*d3373029SBjoern A. Zeeb		esac
867*d3373029SBjoern A. Zeeb		i=$((i + 1))
868*d3373029SBjoern A. Zeeb	done
869*d3373029SBjoern A. Zeeb
870*d3373029SBjoern A. Zeeb	# Start OOB control connection for START/DONE.
871*d3373029SBjoern A. Zeeb	testrx_run_one ${_fib} "${_txt}" "${_opts}"
872*d3373029SBjoern A. Zeeb	print_debug "KILL ${_jobs}"
873*d3373029SBjoern A. Zeeb	for i in ${_jobs}; do
874*d3373029SBjoern A. Zeeb		kill ${i} || true
875*d3373029SBjoern A. Zeeb	done
876*d3373029SBjoern A. Zeeb	#killall reflect || true
877*d3373029SBjoern A. Zeeb	print_debug "reflects for '${_txt}' terminated without error."
878*d3373029SBjoern A. Zeeb}
879*d3373029SBjoern A. Zeeb
880*d3373029SBjoern A. Zeebtestrx_run_test()
881*d3373029SBjoern A. Zeeb{
882*d3373029SBjoern A. Zeeb	local _n _t _fib _o _txt i _f _instance _destructive _transfer
883*d3373029SBjoern A. Zeeb	_n="$1"
884*d3373029SBjoern A. Zeeb	_t="$2"
885*d3373029SBjoern A. Zeeb	_fib=$3
886*d3373029SBjoern A. Zeeb	_o="$4"
887*d3373029SBjoern A. Zeeb	_instances=$5
888*d3373029SBjoern A. Zeeb	_destructive=$6
889*d3373029SBjoern A. Zeeb	_transfer=$7
890*d3373029SBjoern A. Zeeb
891*d3373029SBjoern A. Zeeb	: ${_destructive:=0}
892*d3373029SBjoern A. Zeeb
893*d3373029SBjoern A. Zeeb	_opts=""
894*d3373029SBjoern A. Zeeb	case ${DEBUG} in
895*d3373029SBjoern A. Zeeb	''|0)	;;
896*d3373029SBjoern A. Zeeb	42)	_opts="-d -d" ;;
897*d3373029SBjoern A. Zeeb	*)	_opts="-d" ;;
898*d3373029SBjoern A. Zeeb	esac
899*d3373029SBjoern A. Zeeb
900*d3373029SBjoern A. Zeeb	# Convert netcat options to reflect aguments.
901*d3373029SBjoern A. Zeeb	case "${_o}" in
902*d3373029SBjoern A. Zeeb	-i)	_opts="${_opts} -T TCP6" ;;	# Use TCP for START/DONE.
903*d3373029SBjoern A. Zeeb	-u)	_opts="${_opts} -T UDP6" ;;
904*d3373029SBjoern A. Zeeb	*)	_opts="${_opts} -T TCP6" ;;
905*d3373029SBjoern A. Zeeb	esac
906*d3373029SBjoern A. Zeeb
907*d3373029SBjoern A. Zeeb	# Combined test case base name.
908*d3373029SBjoern A. Zeeb	case ${USE_SOSETFIB} in
909*d3373029SBjoern A. Zeeb	0)	_f="setfib" ;;
910*d3373029SBjoern A. Zeeb	1)	_f="so_setfib" ;;
911*d3373029SBjoern A. Zeeb	*)	die "Unexpected value for SO_SETFIB: ${SO_SETFIB}" ;;
912*d3373029SBjoern A. Zeeb	esac
913*d3373029SBjoern A. Zeeb
914*d3373029SBjoern A. Zeeb        _txt="${_n}_${_f}_${_t}_${_fib}_${_instances}_${_destructive}_${_transfer}"
915*d3373029SBjoern A. Zeeb
916*d3373029SBjoern A. Zeeb	case ${_transfer} in
917*d3373029SBjoern A. Zeeb	1)	testrx_setup_transfer_networks ;;
918*d3373029SBjoern A. Zeeb	esac
919*d3373029SBjoern A. Zeeb
920*d3373029SBjoern A. Zeeb	case "${_t}" in
921*d3373029SBjoern A. Zeeb	ipfw)		textrx_ipfw_setup ${_fib} ${_transfer} ${_instances} ;;
922*d3373029SBjoern A. Zeeb	ifconfig)	textrx_ifconfig_setup ${_fib} ;;
923*d3373029SBjoern A. Zeeb	*)		die "Invalid type in ${_txt}" ;;
924*d3373029SBjoern A. Zeeb	esac
925*d3373029SBjoern A. Zeeb
926*d3373029SBjoern A. Zeeb	# Setup unresponsive FIBs.
927*d3373029SBjoern A. Zeeb	case ${_destructive} in
928*d3373029SBjoern A. Zeeb	1)	testrx_remove_connected ${_fib} ${_transfer} ;;
929*d3373029SBjoern A. Zeeb	esac
930*d3373029SBjoern A. Zeeb
931*d3373029SBjoern A. Zeeb	# Setup to get result counts.
932*d3373029SBjoern A. Zeeb	textrx_count_setup
933*d3373029SBjoern A. Zeeb
934*d3373029SBjoern A. Zeeb	# Run just one / one per FIB (with incremental ports).
935*d3373029SBjoern A. Zeeb	#case ${_instances} in
936*d3373029SBjoern A. Zeeb	#1)	testrx_run_one ${_fib} "${_txt}" "${_opts}" ;;
937*d3373029SBjoern A. Zeeb	#*)	testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ;;
938*d3373029SBjoern A. Zeeb	#esac
939*d3373029SBjoern A. Zeeb	testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ${_transfer}
940*d3373029SBjoern A. Zeeb
941*d3373029SBjoern A. Zeeb	# Export result counts.
942*d3373029SBjoern A. Zeeb	textrx_count_results ${_fib} "${_o}"
943*d3373029SBjoern A. Zeeb
944*d3373029SBjoern A. Zeeb	# Cleanup unresponsive  FIBs or multiple prefixes.
945*d3373029SBjoern A. Zeeb	if test ${_destructive} -eq 1 -o ${_transfer} -eq 1; then
946*d3373029SBjoern A. Zeeb		testrx_cleanup_connected ${_fib} ${_transfer}
947*d3373029SBjoern A. Zeeb	fi
948*d3373029SBjoern A. Zeeb
949*d3373029SBjoern A. Zeeb	case "${_t}" in
950*d3373029SBjoern A. Zeeb	ipfw)		textrx_ipfw_cleanup ;;
951*d3373029SBjoern A. Zeeb	ifconfig)	textrx_ifconfig_cleanup ;;
952*d3373029SBjoern A. Zeeb	*)		die "Invalid type in ${_txt}" ;;
953*d3373029SBjoern A. Zeeb	esac
954*d3373029SBjoern A. Zeeb}
955*d3373029SBjoern A. Zeeb
956*d3373029SBjoern A. Zeebtestrx_main()
957*d3373029SBjoern A. Zeeb{
958*d3373029SBjoern A. Zeeb	local _n _o s t _fib _instances _destructive
959*d3373029SBjoern A. Zeeb	_n="$1"
960*d3373029SBjoern A. Zeeb	_o="$2"
961*d3373029SBjoern A. Zeeb	_instances=$3
962*d3373029SBjoern A. Zeeb
963*d3373029SBjoern A. Zeeb	: ${_instances:=1}
964*d3373029SBjoern A. Zeeb
965*d3373029SBjoern A. Zeeb	print_debug "${_n}"
966*d3373029SBjoern A. Zeeb	for _transfer in 1 0; do
967*d3373029SBjoern A. Zeeb		for _destructive in 0 1; do
968*d3373029SBjoern A. Zeeb			for t in ipfw ifconfig; do
969*d3373029SBjoern A. Zeeb
970*d3373029SBjoern A. Zeeb				print_debug "${_n}_${t}"
971*d3373029SBjoern A. Zeeb				_fib=0
972*d3373029SBjoern A. Zeeb				while test ${_fib} -lt ${RT_NUMFIBS}; do
973*d3373029SBjoern A. Zeeb
974*d3373029SBjoern A. Zeeb					print_debug "${_n}_${t}_${_fib}" \
975*d3373029SBjoern A. Zeeb					    "${_instances} ${_destructive}" \
976*d3373029SBjoern A. Zeeb					    "${_transfer}"
977*d3373029SBjoern A. Zeeb					testrx_run_test "${_n}" "${t}" ${_fib} \
978*d3373029SBjoern A. Zeeb					   "${_o}" ${_instances} \
979*d3373029SBjoern A. Zeeb					   ${_destructive} ${_transfer}
980*d3373029SBjoern A. Zeeb
981*d3373029SBjoern A. Zeeb					_fib=$((_fib + 1))
982*d3373029SBjoern A. Zeeb				done
983*d3373029SBjoern A. Zeeb			done
984*d3373029SBjoern A. Zeeb		done
985*d3373029SBjoern A. Zeeb	done
986*d3373029SBjoern A. Zeeb}
987*d3373029SBjoern A. Zeeb
988*d3373029SBjoern A. Zeeb################################################################################
989*d3373029SBjoern A. Zeeb#
990*d3373029SBjoern A. Zeeb# Probe all FIBs with one "active" one a time.
991*d3373029SBjoern A. Zeeb#
992*d3373029SBjoern A. Zeebtestrx_icmp6_same_addr_one_fib_a_time()
993*d3373029SBjoern A. Zeeb{
994*d3373029SBjoern A. Zeeb
995*d3373029SBjoern A. Zeeb	testrx_main "testrx_icmp6_same_addr_one_fib_a_time" "-i"
996*d3373029SBjoern A. Zeeb}
997*d3373029SBjoern A. Zeeb
998*d3373029SBjoern A. Zeebtestrx_tcp6_same_addr_one_fib_a_time()
999*d3373029SBjoern A. Zeeb{
1000*d3373029SBjoern A. Zeeb
1001*d3373029SBjoern A. Zeeb	testrx_main "testrx_tcp6_same_addr_one_fib_a_time" ""
1002*d3373029SBjoern A. Zeeb}
1003*d3373029SBjoern A. Zeeb
1004*d3373029SBjoern A. Zeebtestrx_udp6_same_addr_one_fib_a_time()
1005*d3373029SBjoern A. Zeeb{
1006*d3373029SBjoern A. Zeeb
1007*d3373029SBjoern A. Zeeb	testrx_main "testrx_udp6_same_addr_one_fib_a_time" "-u"
1008*d3373029SBjoern A. Zeeb}
1009*d3373029SBjoern A. Zeeb
1010*d3373029SBjoern A. Zeeb################################################################################
1011*d3373029SBjoern A. Zeeb#
1012*d3373029SBjoern A. Zeeb# Probe all FIBs with all "active" all time.
1013*d3373029SBjoern A. Zeeb#
1014*d3373029SBjoern A. Zeebtestrx_tcp6_same_addr_all_fibs_a_time()
1015*d3373029SBjoern A. Zeeb{
1016*d3373029SBjoern A. Zeeb
1017*d3373029SBjoern A. Zeeb	testrx_main "testrx_tcp6_same_addr_all_fibs_a_time" "" ${RT_NUMFIBS}
1018*d3373029SBjoern A. Zeeb}
1019*d3373029SBjoern A. Zeeb
1020*d3373029SBjoern A. Zeebtestrx_udp6_same_addr_all_fibs_a_time()
1021*d3373029SBjoern A. Zeeb{
1022*d3373029SBjoern A. Zeeb
1023*d3373029SBjoern A. Zeeb	testrx_main "testrx_udp6_same_addr_all_fibs_a_time" "-u" ${RT_NUMFIBS}
1024*d3373029SBjoern A. Zeeb}
1025*d3373029SBjoern A. Zeeb
1026*d3373029SBjoern A. Zeeb
1027*d3373029SBjoern A. Zeeb################################################################################
1028*d3373029SBjoern A. Zeeb#
1029*d3373029SBjoern A. Zeeb# Prereqs.
1030*d3373029SBjoern A. Zeeb#
1031*d3373029SBjoern A. Zeebkldload ipfw > /dev/null 2>&1 || kldstat -v | grep -q ipfw
1032*d3373029SBjoern A. Zeebkillall reflect || true
1033*d3373029SBjoern A. Zeeb
1034*d3373029SBjoern A. Zeeb################################################################################
1035*d3373029SBjoern A. Zeeb#
1036*d3373029SBjoern A. Zeeb# Run tests.
1037*d3373029SBjoern A. Zeeb#
1038*d3373029SBjoern A. Zeebwait_remote_ready
1039*d3373029SBjoern A. Zeeb
1040*d3373029SBjoern A. Zeeb# We are receiver reflecting the input back.
1041*d3373029SBjoern A. Zeebfor uso in 0 1; do
1042*d3373029SBjoern A. Zeeb
1043*d3373029SBjoern A. Zeeb	# Only run ICMP6 tests for the first loop.
1044*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_connected
1045*d3373029SBjoern A. Zeeb	testtx_tcp6_connected
1046*d3373029SBjoern A. Zeeb	testtx_udp6_connected
1047*d3373029SBjoern A. Zeeb
1048*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_connected_blackhole
1049*d3373029SBjoern A. Zeeb	testtx_tcp6_connected_blackhole
1050*d3373029SBjoern A. Zeeb	testtx_udp6_connected_blackhole
1051*d3373029SBjoern A. Zeeb
1052*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_connected_transfernets
1053*d3373029SBjoern A. Zeeb	testtx_tcp6_connected_transfernets
1054*d3373029SBjoern A. Zeeb	testtx_udp6_connected_transfernets
1055*d3373029SBjoern A. Zeeb
1056*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_connected_ifconfig_transfernets
1057*d3373029SBjoern A. Zeeb	testtx_tcp6_connected_ifconfig_transfernets
1058*d3373029SBjoern A. Zeeb	testtx_udp6_connected_ifconfig_transfernets
1059*d3373029SBjoern A. Zeeb
1060*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_gateway
1061*d3373029SBjoern A. Zeeb	testtx_tcp6_gateway
1062*d3373029SBjoern A. Zeeb	testtx_udp6_gateway
1063*d3373029SBjoern A. Zeeb
1064*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_transfernets_gateways
1065*d3373029SBjoern A. Zeeb	testtx_tcp6_transfernets_gateways
1066*d3373029SBjoern A. Zeeb	testtx_udp6_transfernets_gateways
1067*d3373029SBjoern A. Zeeb
1068*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testtx_icmp6_transfernets_gateway
1069*d3373029SBjoern A. Zeeb	testtx_tcp6_transfernets_gateway
1070*d3373029SBjoern A. Zeeb	testtx_udp6_transfernets_gateway
1071*d3373029SBjoern A. Zeebdone
1072*d3373029SBjoern A. Zeeb
1073*d3373029SBjoern A. Zeebipfw -f flush > /dev/null 2>&1
1074*d3373029SBjoern A. Zeeb
1075*d3373029SBjoern A. Zeeb# We are receiver, but the FIBs are with us this time.
1076*d3373029SBjoern A. Zeebfor uso in 0 1; do
1077*d3373029SBjoern A. Zeeb
1078*d3373029SBjoern A. Zeeb	USE_SOSETFIB=${uso}
1079*d3373029SBjoern A. Zeeb
1080*d3373029SBjoern A. Zeeb	# Only expect ICMP6 tests for the first loop.
1081*d3373029SBjoern A. Zeeb	test ${uso} -ne 0 || testrx_icmp6_same_addr_one_fib_a_time
1082*d3373029SBjoern A. Zeeb	testrx_tcp6_same_addr_one_fib_a_time
1083*d3373029SBjoern A. Zeeb	testrx_udp6_same_addr_one_fib_a_time
1084*d3373029SBjoern A. Zeeb
1085*d3373029SBjoern A. Zeeb	testrx_tcp6_same_addr_all_fibs_a_time
1086*d3373029SBjoern A. Zeeb	testrx_udp6_same_addr_all_fibs_a_time
1087*d3373029SBjoern A. Zeeb
1088*d3373029SBjoern A. Zeebdone
1089*d3373029SBjoern A. Zeeb
1090*d3373029SBjoern A. Zeebcleanup
1091*d3373029SBjoern A. Zeeb
1092*d3373029SBjoern A. Zeeb# end
1093