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