xref: /freebsd/contrib/netbsd-tests/net/if_gif/t_gif.sh (revision d370fd1cd8fc69e87dc63f4f4a82e5a8b4956c93)
1*cdebaff8SEnji Cooper#	$NetBSD: t_gif.sh,v 1.9 2016/12/21 09:46:39 ozaki-r Exp $
2640235e2SEnji Cooper#
3640235e2SEnji Cooper# Copyright (c) 2015 Internet Initiative Japan Inc.
4640235e2SEnji Cooper# All rights reserved.
5640235e2SEnji Cooper#
6640235e2SEnji Cooper# Redistribution and use in source and binary forms, with or without
7640235e2SEnji Cooper# modification, are permitted provided that the following conditions
8640235e2SEnji Cooper# are met:
9640235e2SEnji Cooper# 1. Redistributions of source code must retain the above copyright
10640235e2SEnji Cooper#    notice, this list of conditions and the following disclaimer.
11640235e2SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
12640235e2SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
13640235e2SEnji Cooper#    documentation and/or other materials provided with the distribution.
14640235e2SEnji Cooper#
15640235e2SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16640235e2SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17640235e2SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18640235e2SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19640235e2SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20640235e2SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21640235e2SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22640235e2SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23640235e2SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24640235e2SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25640235e2SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
26640235e2SEnji Cooper#
27640235e2SEnji Cooper
28640235e2SEnji CooperSOCK1=unix://commsock1 # for ROUTER1
29640235e2SEnji CooperSOCK2=unix://commsock2 # for ROUTER2
30640235e2SEnji CooperROUTER1_LANIP=192.168.1.1
31640235e2SEnji CooperROUTER1_LANNET=192.168.1.0/24
32640235e2SEnji CooperROUTER1_WANIP=10.0.0.1
33640235e2SEnji CooperROUTER1_GIFIP=172.16.1.1
34640235e2SEnji CooperROUTER1_WANIP_DUMMY=10.0.0.11
35640235e2SEnji CooperROUTER1_GIFIP_DUMMY=172.16.11.1
36640235e2SEnji CooperROUTER1_GIFIP_RECURSIVE1=172.16.101.1
37640235e2SEnji CooperROUTER1_GIFIP_RECURSIVE2=172.16.201.1
38640235e2SEnji CooperROUTER2_LANIP=192.168.2.1
39640235e2SEnji CooperROUTER2_LANNET=192.168.2.0/24
40640235e2SEnji CooperROUTER2_WANIP=10.0.0.2
41640235e2SEnji CooperROUTER2_GIFIP=172.16.2.1
42640235e2SEnji CooperROUTER2_WANIP_DUMMY=10.0.0.12
43640235e2SEnji CooperROUTER2_GIFIP_DUMMY=172.16.12.1
44640235e2SEnji CooperROUTER2_GIFIP_RECURSIVE1=172.16.102.1
45640235e2SEnji CooperROUTER2_GIFIP_RECURSIVE2=172.16.202.1
46640235e2SEnji Cooper
47640235e2SEnji CooperROUTER1_LANIP6=fc00:1::1
48640235e2SEnji CooperROUTER1_LANNET6=fc00:1::/64
49640235e2SEnji CooperROUTER1_WANIP6=fc00::1
50640235e2SEnji CooperROUTER1_GIFIP6=fc00:3::1
51640235e2SEnji CooperROUTER1_WANIP6_DUMMY=fc00::11
52640235e2SEnji CooperROUTER1_GIFIP6_DUMMY=fc00:13::1
53640235e2SEnji CooperROUTER1_GIFIP6_RECURSIVE1=fc00:103::1
54640235e2SEnji CooperROUTER1_GIFIP6_RECURSIVE2=fc00:203::1
55640235e2SEnji CooperROUTER2_LANIP6=fc00:2::1
56640235e2SEnji CooperROUTER2_LANNET6=fc00:2::/64
57640235e2SEnji CooperROUTER2_WANIP6=fc00::2
58640235e2SEnji CooperROUTER2_GIFIP6=fc00:4::1
59640235e2SEnji CooperROUTER2_WANIP6_DUMMY=fc00::12
60640235e2SEnji CooperROUTER2_GIFIP6_DUMMY=fc00:14::1
61640235e2SEnji CooperROUTER2_GIFIP6_RECURSIVE1=fc00:104::1
62640235e2SEnji CooperROUTER2_GIFIP6_RECURSIVE2=fc00:204::1
63640235e2SEnji Cooper
64*cdebaff8SEnji CooperDEBUG=${DEBUG:-true}
65640235e2SEnji CooperTIMEOUT=5
66640235e2SEnji Cooper
67640235e2SEnji Coopersetup_router()
68640235e2SEnji Cooper{
69640235e2SEnji Cooper	sock=${1}
70640235e2SEnji Cooper	lan=${2}
71640235e2SEnji Cooper	lan_mode=${3}
72640235e2SEnji Cooper	wan=${4}
73640235e2SEnji Cooper	wan_mode=${5}
74640235e2SEnji Cooper
75*cdebaff8SEnji Cooper	rump_server_add_iface $sock shmif0 bus0
76*cdebaff8SEnji Cooper	rump_server_add_iface $sock shmif1 bus1
77*cdebaff8SEnji Cooper
78640235e2SEnji Cooper	export RUMP_SERVER=${sock}
79640235e2SEnji Cooper	if [ ${lan_mode} = "ipv6" ]; then
80640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
81640235e2SEnji Cooper	else
82640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
83640235e2SEnji Cooper	fi
84640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
85640235e2SEnji Cooper	rump.ifconfig shmif0
86640235e2SEnji Cooper
87640235e2SEnji Cooper	if [ ${wan_mode} = "ipv6" ]; then
88640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
89640235e2SEnji Cooper	else
90640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
91640235e2SEnji Cooper	fi
92640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif1 up
93640235e2SEnji Cooper	rump.ifconfig shmif1
94640235e2SEnji Cooper}
95640235e2SEnji Cooper
96640235e2SEnji Coopertest_router()
97640235e2SEnji Cooper{
98640235e2SEnji Cooper	sock=${1}
99640235e2SEnji Cooper	lan=${2}
100640235e2SEnji Cooper	lan_mode=${3}
101640235e2SEnji Cooper	wan=${4}
102640235e2SEnji Cooper	wan_mode=${5}
103640235e2SEnji Cooper
104640235e2SEnji Cooper	export RUMP_SERVER=${sock}
105640235e2SEnji Cooper	atf_check -s exit:0 -o match:shmif0 rump.ifconfig
106640235e2SEnji Cooper	if [ ${lan_mode} = "ipv6" ]; then
107640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
108640235e2SEnji Cooper	else
109640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
110640235e2SEnji Cooper	fi
111640235e2SEnji Cooper
112640235e2SEnji Cooper	atf_check -s exit:0 -o match:shmif1 rump.ifconfig
113640235e2SEnji Cooper	if [ ${wan_mode} = "ipv6" ]; then
114640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
115640235e2SEnji Cooper	else
116640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
117640235e2SEnji Cooper	fi
118640235e2SEnji Cooper}
119640235e2SEnji Cooper
120640235e2SEnji Coopersetup()
121640235e2SEnji Cooper{
122640235e2SEnji Cooper	inner=${1}
123640235e2SEnji Cooper	outer=${2}
124640235e2SEnji Cooper
125*cdebaff8SEnji Cooper	rump_server_start $SOCK1 netinet6 gif
126*cdebaff8SEnji Cooper	rump_server_start $SOCK2 netinet6 gif
127640235e2SEnji Cooper
128640235e2SEnji Cooper	router1_lan=""
129640235e2SEnji Cooper	router1_lan_mode=""
130640235e2SEnji Cooper	router2_lan=""
131640235e2SEnji Cooper	router2_lan_mode=""
132640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
133640235e2SEnji Cooper		router1_lan=$ROUTER1_LANIP6
134640235e2SEnji Cooper		router1_lan_mode="ipv6"
135640235e2SEnji Cooper		router2_lan=$ROUTER2_LANIP6
136640235e2SEnji Cooper		router2_lan_mode="ipv6"
137640235e2SEnji Cooper	else
138640235e2SEnji Cooper		router1_lan=$ROUTER1_LANIP
139640235e2SEnji Cooper		router1_lan_mode="ipv4"
140640235e2SEnji Cooper		router2_lan=$ROUTER2_LANIP
141640235e2SEnji Cooper		router2_lan_mode="ipv4"
142640235e2SEnji Cooper	fi
143640235e2SEnji Cooper
144640235e2SEnji Cooper	if [ ${outer} = "ipv6" ]; then
145640235e2SEnji Cooper		setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
146640235e2SEnji Cooper			$ROUTER1_WANIP6 ipv6
147640235e2SEnji Cooper		setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
148640235e2SEnji Cooper			$ROUTER2_WANIP6 ipv6
149640235e2SEnji Cooper	else
150640235e2SEnji Cooper		setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
151640235e2SEnji Cooper			$ROUTER1_WANIP ipv4
152640235e2SEnji Cooper		setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
153640235e2SEnji Cooper			$ROUTER2_WANIP ipv4
154640235e2SEnji Cooper	fi
155640235e2SEnji Cooper}
156640235e2SEnji Cooper
157640235e2SEnji Coopertest_setup()
158640235e2SEnji Cooper{
159640235e2SEnji Cooper	inner=${1}
160640235e2SEnji Cooper	outer=${2}
161640235e2SEnji Cooper
162640235e2SEnji Cooper	router1_lan=""
163640235e2SEnji Cooper	router1_lan_mode=""
164640235e2SEnji Cooper	router2_lan=""
165640235e2SEnji Cooper	router2_lan_mode=""
166640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
167640235e2SEnji Cooper		router1_lan=$ROUTER1_LANIP6
168640235e2SEnji Cooper		router1_lan_mode="ipv6"
169640235e2SEnji Cooper		router2_lan=$ROUTER2_LANIP6
170640235e2SEnji Cooper		router2_lan_mode="ipv6"
171640235e2SEnji Cooper	else
172640235e2SEnji Cooper		router1_lan=$ROUTER1_LANIP
173640235e2SEnji Cooper		router1_lan_mode="ipv4"
174640235e2SEnji Cooper		router2_lan=$ROUTER2_LANIP
175640235e2SEnji Cooper		router2_lan_mode="ipv4"
176640235e2SEnji Cooper	fi
177640235e2SEnji Cooper	if [ ${outer} = "ipv6" ]; then
178640235e2SEnji Cooper		test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
179640235e2SEnji Cooper			$ROUTER1_WANIP6 ipv6
180640235e2SEnji Cooper		test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
181640235e2SEnji Cooper			$ROUTER2_WANIP6 ipv6
182640235e2SEnji Cooper	else
183640235e2SEnji Cooper		test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
184640235e2SEnji Cooper			$ROUTER1_WANIP ipv4
185640235e2SEnji Cooper		test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
186640235e2SEnji Cooper			$ROUTER2_WANIP ipv4
187640235e2SEnji Cooper	fi
188640235e2SEnji Cooper}
189640235e2SEnji Cooper
190640235e2SEnji Coopersetup_if_gif()
191640235e2SEnji Cooper{
192640235e2SEnji Cooper	sock=${1}
193640235e2SEnji Cooper	addr=${2}
194640235e2SEnji Cooper	remote=${3}
195640235e2SEnji Cooper	inner=${4}
196640235e2SEnji Cooper	src=${5}
197640235e2SEnji Cooper	dst=${6}
198640235e2SEnji Cooper	peernet=${7}
199640235e2SEnji Cooper
200640235e2SEnji Cooper	export RUMP_SERVER=${sock}
201640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif0 create
202640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst}
203640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
204640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote}
205640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
206640235e2SEnji Cooper	else
207640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote}
208640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
209640235e2SEnji Cooper	fi
210640235e2SEnji Cooper
211640235e2SEnji Cooper	rump.ifconfig gif0
212640235e2SEnji Cooper	rump.route -nL show
213640235e2SEnji Cooper}
214640235e2SEnji Cooper
215640235e2SEnji Coopersetup_tunnel()
216640235e2SEnji Cooper{
217640235e2SEnji Cooper	inner=${1}
218640235e2SEnji Cooper	outer=${2}
219640235e2SEnji Cooper
220640235e2SEnji Cooper	addr=""
221640235e2SEnji Cooper	remote=""
222640235e2SEnji Cooper	src=""
223640235e2SEnji Cooper	dst=""
224640235e2SEnji Cooper	peernet=""
225640235e2SEnji Cooper
226640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
227640235e2SEnji Cooper		addr=$ROUTER1_GIFIP6
228640235e2SEnji Cooper		remote=$ROUTER2_GIFIP6
229640235e2SEnji Cooper		peernet=$ROUTER2_LANNET6
230640235e2SEnji Cooper	else
231640235e2SEnji Cooper		addr=$ROUTER1_GIFIP
232640235e2SEnji Cooper		remote=$ROUTER2_GIFIP
233640235e2SEnji Cooper		peernet=$ROUTER2_LANNET
234640235e2SEnji Cooper	fi
235640235e2SEnji Cooper	if [ ${outer} = "ipv6" ]; then
236640235e2SEnji Cooper		src=$ROUTER1_WANIP6
237640235e2SEnji Cooper		dst=$ROUTER2_WANIP6
238640235e2SEnji Cooper	else
239640235e2SEnji Cooper		src=$ROUTER1_WANIP
240640235e2SEnji Cooper		dst=$ROUTER2_WANIP
241640235e2SEnji Cooper	fi
242640235e2SEnji Cooper	setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \
243640235e2SEnji Cooper		     ${src} ${dst} ${peernet}
244640235e2SEnji Cooper
245640235e2SEnji Cooper	if [ $inner = "ipv6" ]; then
246640235e2SEnji Cooper		addr=$ROUTER2_GIFIP6
247640235e2SEnji Cooper		remote=$ROUTER1_GIFIP6
248640235e2SEnji Cooper		peernet=$ROUTER1_LANNET6
249640235e2SEnji Cooper	else
250640235e2SEnji Cooper		addr=$ROUTER2_GIFIP
251640235e2SEnji Cooper		remote=$ROUTER1_GIFIP
252640235e2SEnji Cooper		peernet=$ROUTER1_LANNET
253640235e2SEnji Cooper	fi
254640235e2SEnji Cooper	if [ $outer = "ipv6" ]; then
255640235e2SEnji Cooper		src=$ROUTER2_WANIP6
256640235e2SEnji Cooper		dst=$ROUTER1_WANIP6
257640235e2SEnji Cooper	else
258640235e2SEnji Cooper		src=$ROUTER2_WANIP
259640235e2SEnji Cooper		dst=$ROUTER1_WANIP
260640235e2SEnji Cooper	fi
261640235e2SEnji Cooper	setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \
262640235e2SEnji Cooper		     ${src} ${dst} ${peernet}
263640235e2SEnji Cooper}
264640235e2SEnji Cooper
265640235e2SEnji Coopertest_setup_tunnel()
266640235e2SEnji Cooper{
267640235e2SEnji Cooper	mode=${1}
268640235e2SEnji Cooper
269640235e2SEnji Cooper	peernet=""
270640235e2SEnji Cooper	opt=""
271640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
272640235e2SEnji Cooper		peernet=$ROUTER2_LANNET6
273640235e2SEnji Cooper		opt="-inet6"
274640235e2SEnji Cooper	else
275640235e2SEnji Cooper		peernet=$ROUTER2_LANNET
276640235e2SEnji Cooper		opt="-inet"
277640235e2SEnji Cooper	fi
278640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
279640235e2SEnji Cooper	atf_check -s exit:0 -o match:gif0 rump.ifconfig
280640235e2SEnji Cooper	atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
281640235e2SEnji Cooper
282640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
283640235e2SEnji Cooper		peernet=$ROUTER1_LANNET6
284640235e2SEnji Cooper		opt="-inet6"
285640235e2SEnji Cooper	else
286640235e2SEnji Cooper		peernet=$ROUTER1_LANNET
287640235e2SEnji Cooper		opt="-inet"
288640235e2SEnji Cooper	fi
289640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
290640235e2SEnji Cooper	atf_check -s exit:0 -o match:gif0 rump.ifconfig
291640235e2SEnji Cooper	atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
292640235e2SEnji Cooper}
293640235e2SEnji Cooper
294640235e2SEnji Cooperteardown_tunnel()
295640235e2SEnji Cooper{
296640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
297640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
298640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif0 destroy
299640235e2SEnji Cooper
300640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
301640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
302640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif0 destroy
303640235e2SEnji Cooper}
304640235e2SEnji Cooper
305640235e2SEnji Coopersetup_dummy_if_gif()
306640235e2SEnji Cooper{
307640235e2SEnji Cooper	sock=${1}
308640235e2SEnji Cooper	addr=${2}
309640235e2SEnji Cooper	remote=${3}
310640235e2SEnji Cooper	inner=${4}
311640235e2SEnji Cooper	src=${5}
312640235e2SEnji Cooper	dst=${6}
313640235e2SEnji Cooper
314640235e2SEnji Cooper	export RUMP_SERVER=${sock}
315640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 create
316640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst}
317640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
318640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote}
319640235e2SEnji Cooper	else
320640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote}
321640235e2SEnji Cooper	fi
322640235e2SEnji Cooper
323640235e2SEnji Cooper	rump.ifconfig gif1
324640235e2SEnji Cooper}
325640235e2SEnji Cooper
326640235e2SEnji Coopersetup_dummy_tunnel()
327640235e2SEnji Cooper{
328640235e2SEnji Cooper	inner=${1}
329640235e2SEnji Cooper	outer=${2}
330640235e2SEnji Cooper
331640235e2SEnji Cooper	addr=""
332640235e2SEnji Cooper	remote=""
333640235e2SEnji Cooper	src=""
334640235e2SEnji Cooper	dst=""
335640235e2SEnji Cooper
336640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
337640235e2SEnji Cooper		addr=$ROUTER1_GIFIP6_DUMMY
338640235e2SEnji Cooper		remote=$ROUTER2_GIFIP6_DUMMY
339640235e2SEnji Cooper	else
340640235e2SEnji Cooper		addr=$ROUTER1_GIFIP_DUMMY
341640235e2SEnji Cooper		remote=$ROUTER2_GIFIP_DUMMY
342640235e2SEnji Cooper	fi
343640235e2SEnji Cooper	if [ ${outer} = "ipv6" ]; then
344640235e2SEnji Cooper		src=$ROUTER1_WANIP6_DUMMY
345640235e2SEnji Cooper		dst=$ROUTER2_WANIP6_DUMMY
346640235e2SEnji Cooper	else
347640235e2SEnji Cooper		src=$ROUTER1_WANIP_DUMMY
348640235e2SEnji Cooper		dst=$ROUTER2_WANIP_DUMMY
349640235e2SEnji Cooper	fi
350640235e2SEnji Cooper	setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \
351640235e2SEnji Cooper			   ${src} ${dst}
352640235e2SEnji Cooper
353640235e2SEnji Cooper	if [ $inner = "ipv6" ]; then
354640235e2SEnji Cooper		addr=$ROUTER2_GIFIP6_DUMMY
355640235e2SEnji Cooper		remote=$ROUTER1_GIFIP6_DUMMY
356640235e2SEnji Cooper	else
357640235e2SEnji Cooper		addr=$ROUTER2_GIFIP_DUMMY
358640235e2SEnji Cooper		remote=$ROUTER1_GIFIP_DUMMY
359640235e2SEnji Cooper	fi
360640235e2SEnji Cooper	if [ $outer = "ipv6" ]; then
361640235e2SEnji Cooper		src=$ROUTER2_WANIP6_DUMMY
362640235e2SEnji Cooper		dst=$ROUTER1_WANIP6_DUMMY
363640235e2SEnji Cooper	else
364640235e2SEnji Cooper		src=$ROUTER2_WANIP_DUMMY
365640235e2SEnji Cooper		dst=$ROUTER1_WANIP_DUMMY
366640235e2SEnji Cooper	fi
367640235e2SEnji Cooper	setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \
368640235e2SEnji Cooper			   ${src} ${dst}
369640235e2SEnji Cooper}
370640235e2SEnji Cooper
371640235e2SEnji Coopertest_setup_dummy_tunnel()
372640235e2SEnji Cooper{
373640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
374640235e2SEnji Cooper	atf_check -s exit:0 -o match:gif1 rump.ifconfig
375640235e2SEnji Cooper
376640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
377640235e2SEnji Cooper	atf_check -s exit:0 -o match:gif1 rump.ifconfig
378640235e2SEnji Cooper}
379640235e2SEnji Cooper
380640235e2SEnji Cooperteardown_dummy_tunnel()
381640235e2SEnji Cooper{
382640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
383640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
384640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 destroy
385640235e2SEnji Cooper
386640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
387640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
388640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 destroy
389640235e2SEnji Cooper}
390640235e2SEnji Cooper
391640235e2SEnji Coopersetup_recursive_if_gif()
392640235e2SEnji Cooper{
393640235e2SEnji Cooper	sock=${1}
394640235e2SEnji Cooper	gif=${2}
395640235e2SEnji Cooper	addr=${3}
396640235e2SEnji Cooper	remote=${4}
397640235e2SEnji Cooper	inner=${5}
398640235e2SEnji Cooper	src=${6}
399640235e2SEnji Cooper	dst=${7}
400640235e2SEnji Cooper
401640235e2SEnji Cooper	export RUMP_SERVER=${sock}
402640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig ${gif} create
403640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst}
404640235e2SEnji Cooper	if [ ${inner} = "ipv6" ]; then
405640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote}
406640235e2SEnji Cooper	else
407640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote}
408640235e2SEnji Cooper	fi
409640235e2SEnji Cooper
410640235e2SEnji Cooper	rump.ifconfig ${gif}
411640235e2SEnji Cooper}
412640235e2SEnji Cooper
413640235e2SEnji Cooper# test in ROUTER1 only
414640235e2SEnji Coopersetup_recursive_tunnels()
415640235e2SEnji Cooper{
416640235e2SEnji Cooper	mode=${1}
417640235e2SEnji Cooper
418640235e2SEnji Cooper	addr=""
419640235e2SEnji Cooper	remote=""
420640235e2SEnji Cooper	src=""
421640235e2SEnji Cooper	dst=""
422640235e2SEnji Cooper
423640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
424640235e2SEnji Cooper		addr=$ROUTER1_GIFIP6_RECURSIVE1
425640235e2SEnji Cooper		remote=$ROUTER2_GIFIP6_RECURSIVE1
426640235e2SEnji Cooper		src=$ROUTER1_GIFIP6
427640235e2SEnji Cooper		dst=$ROUTER2_GIFIP6
428640235e2SEnji Cooper	else
429640235e2SEnji Cooper		addr=$ROUTER1_GIFIP_RECURSIVE1
430640235e2SEnji Cooper		remote=$ROUTER2_GIFIP_RECURSIVE1
431640235e2SEnji Cooper		src=$ROUTER1_GIFIP
432640235e2SEnji Cooper		dst=$ROUTER2_GIFIP
433640235e2SEnji Cooper	fi
434640235e2SEnji Cooper	setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \
435640235e2SEnji Cooper		      ${src} ${dst}
436640235e2SEnji Cooper
437640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
438640235e2SEnji Cooper		addr=$ROUTER1_GIFIP6_RECURSIVE2
439640235e2SEnji Cooper		remote=$ROUTER2_GIFIP6_RECURSIVE2
440640235e2SEnji Cooper		src=$ROUTER1_GIFIP6_RECURSIVE1
441640235e2SEnji Cooper		dst=$ROUTER2_GIFIP6_RECURSIVE1
442640235e2SEnji Cooper	else
443640235e2SEnji Cooper		addr=$ROUTER1_GIFIP_RECURSIVE2
444640235e2SEnji Cooper		remote=$ROUTER2_GIFIP_RECURSIVE2
445640235e2SEnji Cooper		src=$ROUTER1_GIFIP_RECURSIVE1
446640235e2SEnji Cooper		dst=$ROUTER2_GIFIP_RECURSIVE1
447640235e2SEnji Cooper	fi
448640235e2SEnji Cooper	setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \
449640235e2SEnji Cooper		      ${src} ${dst}
450640235e2SEnji Cooper}
451640235e2SEnji Cooper
452640235e2SEnji Cooper# test in router1 only
453640235e2SEnji Coopertest_recursive_check()
454640235e2SEnji Cooper{
455640235e2SEnji Cooper	mode=$1
456640235e2SEnji Cooper
457640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
458640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
459640235e2SEnji Cooper		atf_check -s not-exit:0 -o ignore -e ignore \
460640235e2SEnji Cooper			rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2
461640235e2SEnji Cooper	else
462640235e2SEnji Cooper		atf_check -s not-exit:0 -o ignore -e ignore \
463640235e2SEnji Cooper			rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2
464640235e2SEnji Cooper	fi
465640235e2SEnji Cooper
466640235e2SEnji Cooper	atf_check -o match:'gif0: recursively called too many times' \
467640235e2SEnji Cooper		-x "$HIJACKING dmesg"
468640235e2SEnji Cooper
469640235e2SEnji Cooper	$HIJACKING dmesg
470640235e2SEnji Cooper}
471640235e2SEnji Cooper
472640235e2SEnji Cooperteardown_recursive_tunnels()
473640235e2SEnji Cooper{
474640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
475640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
476640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif1 destroy
477640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif2 deletetunnel
478640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig gif2 destroy
479640235e2SEnji Cooper}
480640235e2SEnji Cooper
481640235e2SEnji Coopertest_ping_failure()
482640235e2SEnji Cooper{
483640235e2SEnji Cooper	mode=$1
484640235e2SEnji Cooper
485640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
486640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
487640235e2SEnji Cooper		atf_check -s not-exit:0 -o ignore -e ignore \
488640235e2SEnji Cooper			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
489640235e2SEnji Cooper			$ROUTER2_LANIP6
490640235e2SEnji Cooper	else
491640235e2SEnji Cooper		atf_check -s not-exit:0 -o ignore -e ignore \
492640235e2SEnji Cooper			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
493640235e2SEnji Cooper			$ROUTER2_LANIP
494640235e2SEnji Cooper	fi
495640235e2SEnji Cooper
496640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
497640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
498640235e2SEnji Cooper		atf_check -s not-exit:0 -o ignore -e ignore \
499640235e2SEnji Cooper			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
500640235e2SEnji Cooper			$ROUTER1_LANIP6
501640235e2SEnji Cooper	else
502640235e2SEnji Cooper		atf_check -s not-exit:0 -o ignore -e ignore \
503640235e2SEnji Cooper			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
504640235e2SEnji Cooper			$ROUTER2_LANIP
505640235e2SEnji Cooper	fi
506640235e2SEnji Cooper}
507640235e2SEnji Cooper
508640235e2SEnji Coopertest_ping_success()
509640235e2SEnji Cooper{
510640235e2SEnji Cooper	mode=$1
511640235e2SEnji Cooper
512640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
513640235e2SEnji Cooper	rump.ifconfig -v gif0
514640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
515640235e2SEnji Cooper		# XXX
516640235e2SEnji Cooper		# rump.ping6 rarely fails with the message that
517640235e2SEnji Cooper		# "failed to get receiving hop limit".
518640235e2SEnji Cooper		# This is a known issue being analyzed.
519640235e2SEnji Cooper		atf_check -s exit:0 -o ignore \
520640235e2SEnji Cooper			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
521640235e2SEnji Cooper			$ROUTER2_LANIP6
522640235e2SEnji Cooper	else
523640235e2SEnji Cooper		atf_check -s exit:0 -o ignore \
524640235e2SEnji Cooper			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
525640235e2SEnji Cooper			$ROUTER2_LANIP
526640235e2SEnji Cooper	fi
527640235e2SEnji Cooper	rump.ifconfig -v gif0
528640235e2SEnji Cooper
529640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
530640235e2SEnji Cooper	rump.ifconfig -v gif0
531640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
532640235e2SEnji Cooper		atf_check -s exit:0 -o ignore \
533640235e2SEnji Cooper			rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
534640235e2SEnji Cooper			$ROUTER1_LANIP6
535640235e2SEnji Cooper	else
536640235e2SEnji Cooper		atf_check -s exit:0 -o ignore \
537640235e2SEnji Cooper			rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
538640235e2SEnji Cooper			$ROUTER1_LANIP
539640235e2SEnji Cooper	fi
540640235e2SEnji Cooper	rump.ifconfig -v gif0
541640235e2SEnji Cooper}
542640235e2SEnji Cooper
543640235e2SEnji Coopertest_change_tunnel_duplicate()
544640235e2SEnji Cooper{
545640235e2SEnji Cooper	mode=$1
546640235e2SEnji Cooper
547640235e2SEnji Cooper	newsrc=""
548640235e2SEnji Cooper	newdst=""
549640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
550640235e2SEnji Cooper		newsrc=$ROUTER1_WANIP6_DUMMY
551640235e2SEnji Cooper		newdst=$ROUTER2_WANIP6_DUMMY
552640235e2SEnji Cooper	else
553640235e2SEnji Cooper		newsrc=$ROUTER1_WANIP_DUMMY
554640235e2SEnji Cooper		newdst=$ROUTER2_WANIP_DUMMY
555640235e2SEnji Cooper	fi
556640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
557640235e2SEnji Cooper	rump.ifconfig -v gif0
558640235e2SEnji Cooper	rump.ifconfig -v gif1
559640235e2SEnji Cooper	atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
560640235e2SEnji Cooper		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
561640235e2SEnji Cooper	rump.ifconfig -v gif0
562640235e2SEnji Cooper	rump.ifconfig -v gif1
563640235e2SEnji Cooper
564640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
565640235e2SEnji Cooper		newsrc=$ROUTER2_WANIP6_DUMMY
566640235e2SEnji Cooper		newdst=$ROUTER1_WANIP6_DUMMY
567640235e2SEnji Cooper	else
568640235e2SEnji Cooper		newsrc=$ROUTER2_WANIP_DUMMY
569640235e2SEnji Cooper		newdst=$ROUTER1_WANIP_DUMMY
570640235e2SEnji Cooper	fi
571640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
572640235e2SEnji Cooper	rump.ifconfig -v gif0
573640235e2SEnji Cooper	rump.ifconfig -v gif1
574640235e2SEnji Cooper	atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
575640235e2SEnji Cooper		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
576640235e2SEnji Cooper	rump.ifconfig -v gif0
577640235e2SEnji Cooper	rump.ifconfig -v gif1
578640235e2SEnji Cooper}
579640235e2SEnji Cooper
580640235e2SEnji Coopertest_change_tunnel_success()
581640235e2SEnji Cooper{
582640235e2SEnji Cooper	mode=$1
583640235e2SEnji Cooper
584640235e2SEnji Cooper	newsrc=""
585640235e2SEnji Cooper	newdst=""
586640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
587640235e2SEnji Cooper		newsrc=$ROUTER1_WANIP6_DUMMY
588640235e2SEnji Cooper		newdst=$ROUTER2_WANIP6_DUMMY
589640235e2SEnji Cooper	else
590640235e2SEnji Cooper		newsrc=$ROUTER1_WANIP_DUMMY
591640235e2SEnji Cooper		newdst=$ROUTER2_WANIP_DUMMY
592640235e2SEnji Cooper	fi
593640235e2SEnji Cooper	export RUMP_SERVER=$SOCK1
594640235e2SEnji Cooper	rump.ifconfig -v gif0
595640235e2SEnji Cooper	atf_check -s exit:0 \
596640235e2SEnji Cooper		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
597640235e2SEnji Cooper	rump.ifconfig -v gif0
598640235e2SEnji Cooper
599640235e2SEnji Cooper	if [ ${mode} = "ipv6" ]; then
600640235e2SEnji Cooper		newsrc=$ROUTER2_WANIP6_DUMMY
601640235e2SEnji Cooper		newdst=$ROUTER1_WANIP6_DUMMY
602640235e2SEnji Cooper	else
603640235e2SEnji Cooper		newsrc=$ROUTER2_WANIP_DUMMY
604640235e2SEnji Cooper		newdst=$ROUTER1_WANIP_DUMMY
605640235e2SEnji Cooper	fi
606640235e2SEnji Cooper	export RUMP_SERVER=$SOCK2
607640235e2SEnji Cooper	rump.ifconfig -v gif0
608640235e2SEnji Cooper	atf_check -s exit:0 \
609640235e2SEnji Cooper		rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
610640235e2SEnji Cooper	rump.ifconfig -v gif0
611640235e2SEnji Cooper}
612640235e2SEnji Cooper
613640235e2SEnji Cooperbasic_setup()
614640235e2SEnji Cooper{
615640235e2SEnji Cooper	inner=$1
616640235e2SEnji Cooper	outer=$2
617640235e2SEnji Cooper
618640235e2SEnji Cooper	setup ${inner} ${outer}
619640235e2SEnji Cooper	test_setup ${inner} ${outer}
620640235e2SEnji Cooper
621640235e2SEnji Cooper	# Enable once PR kern/49219 is fixed
622640235e2SEnji Cooper	#test_ping_failure
623640235e2SEnji Cooper
624640235e2SEnji Cooper	setup_tunnel ${inner} ${outer}
625640235e2SEnji Cooper	sleep 1
626640235e2SEnji Cooper	test_setup_tunnel ${inner}
627640235e2SEnji Cooper}
628640235e2SEnji Cooper
629640235e2SEnji Cooperbasic_test()
630640235e2SEnji Cooper{
631640235e2SEnji Cooper	inner=$1
632640235e2SEnji Cooper	outer=$2 # not use
633640235e2SEnji Cooper
634640235e2SEnji Cooper	test_ping_success ${inner}
635640235e2SEnji Cooper}
636640235e2SEnji Cooper
637640235e2SEnji Cooperbasic_teardown()
638640235e2SEnji Cooper{
639640235e2SEnji Cooper	inner=$1
640640235e2SEnji Cooper	outer=$2 # not use
641640235e2SEnji Cooper
642640235e2SEnji Cooper	teardown_tunnel
643640235e2SEnji Cooper	test_ping_failure ${inner}
644640235e2SEnji Cooper}
645640235e2SEnji Cooper
646640235e2SEnji Cooperioctl_setup()
647640235e2SEnji Cooper{
648640235e2SEnji Cooper	inner=$1
649640235e2SEnji Cooper	outer=$2
650640235e2SEnji Cooper
651640235e2SEnji Cooper	setup ${inner} ${outer}
652640235e2SEnji Cooper	test_setup ${inner} ${outer}
653640235e2SEnji Cooper
654640235e2SEnji Cooper	# Enable once PR kern/49219 is fixed
655640235e2SEnji Cooper	#test_ping_failure
656640235e2SEnji Cooper
657640235e2SEnji Cooper	setup_tunnel ${inner} ${outer}
658640235e2SEnji Cooper	setup_dummy_tunnel ${inner} ${outer}
659640235e2SEnji Cooper	sleep 1
660640235e2SEnji Cooper	test_setup_tunnel ${inner}
661640235e2SEnji Cooper}
662640235e2SEnji Cooper
663640235e2SEnji Cooperioctl_test()
664640235e2SEnji Cooper{
665640235e2SEnji Cooper	inner=$1
666640235e2SEnji Cooper	outer=$2
667640235e2SEnji Cooper
668640235e2SEnji Cooper	test_ping_success ${inner}
669640235e2SEnji Cooper
670640235e2SEnji Cooper	test_change_tunnel_duplicate ${outer}
671640235e2SEnji Cooper
672640235e2SEnji Cooper	teardown_dummy_tunnel
673640235e2SEnji Cooper	test_change_tunnel_success ${outer}
674640235e2SEnji Cooper}
675640235e2SEnji Cooper
676640235e2SEnji Cooperioctl_teardown()
677640235e2SEnji Cooper{
678640235e2SEnji Cooper	inner=$1
679640235e2SEnji Cooper	outer=$2 # not use
680640235e2SEnji Cooper
681640235e2SEnji Cooper	teardown_tunnel
682640235e2SEnji Cooper	test_ping_failure ${inner}
683640235e2SEnji Cooper}
684640235e2SEnji Cooper
685640235e2SEnji Cooperrecursive_setup()
686640235e2SEnji Cooper{
687640235e2SEnji Cooper	inner=$1
688640235e2SEnji Cooper	outer=$2
689640235e2SEnji Cooper
690640235e2SEnji Cooper	setup ${inner} ${outer}
691640235e2SEnji Cooper	test_setup ${inner} ${outer}
692640235e2SEnji Cooper
693640235e2SEnji Cooper	# Enable once PR kern/49219 is fixed
694640235e2SEnji Cooper	#test_ping_failure
695640235e2SEnji Cooper
696640235e2SEnji Cooper	setup_tunnel ${inner} ${outer}
697640235e2SEnji Cooper	setup_recursive_tunnels ${inner}
698640235e2SEnji Cooper	sleep 1
699640235e2SEnji Cooper	test_setup_tunnel ${inner}
700640235e2SEnji Cooper}
701640235e2SEnji Cooper
702640235e2SEnji Cooperrecursive_test()
703640235e2SEnji Cooper{
704640235e2SEnji Cooper	inner=$1
705640235e2SEnji Cooper	outer=$2 # not use
706640235e2SEnji Cooper
707640235e2SEnji Cooper	test_recursive_check ${inner}
708640235e2SEnji Cooper}
709640235e2SEnji Cooper
710640235e2SEnji Cooperrecursive_teardown()
711640235e2SEnji Cooper{
712640235e2SEnji Cooper	inner=$1 # not use
713640235e2SEnji Cooper	outer=$2 # not use
714640235e2SEnji Cooper
715640235e2SEnji Cooper	teardown_recursive_tunnels
716640235e2SEnji Cooper	teardown_tunnel
717640235e2SEnji Cooper}
718640235e2SEnji Cooper
719640235e2SEnji Cooperadd_test()
720640235e2SEnji Cooper{
721640235e2SEnji Cooper	category=$1
722640235e2SEnji Cooper	desc=$2
723640235e2SEnji Cooper	inner=$3
724640235e2SEnji Cooper	outer=$4
725640235e2SEnji Cooper
726*cdebaff8SEnji Cooper	name="gif_${category}_${inner}over${outer}"
727640235e2SEnji Cooper	fulldesc="Does ${inner} over ${outer} if_gif ${desc}"
728640235e2SEnji Cooper
729640235e2SEnji Cooper	atf_test_case ${name} cleanup
730640235e2SEnji Cooper	eval "${name}_head() { \
731640235e2SEnji Cooper			atf_set \"descr\" \"${fulldesc}\"; \
732640235e2SEnji Cooper			atf_set \"require.progs\" \"rump_server\"; \
733640235e2SEnji Cooper		}; \
734640235e2SEnji Cooper	    ${name}_body() { \
735640235e2SEnji Cooper			${category}_setup ${inner} ${outer}; \
736640235e2SEnji Cooper			${category}_test ${inner} ${outer}; \
737640235e2SEnji Cooper			${category}_teardown ${inner} ${outer}; \
738*cdebaff8SEnji Cooper			rump_server_destroy_ifaces; \
739640235e2SEnji Cooper	    }; \
740640235e2SEnji Cooper	    ${name}_cleanup() { \
741*cdebaff8SEnji Cooper			$DEBUG && dump; \
742640235e2SEnji Cooper			cleanup; \
743640235e2SEnji Cooper		}"
744640235e2SEnji Cooper	atf_add_test_case ${name}
745640235e2SEnji Cooper}
746640235e2SEnji Cooper
747640235e2SEnji Cooperadd_test_allproto()
748640235e2SEnji Cooper{
749640235e2SEnji Cooper	category=$1
750640235e2SEnji Cooper	desc=$2
751640235e2SEnji Cooper
752640235e2SEnji Cooper	add_test ${category} "${desc}" ipv4 ipv4
753640235e2SEnji Cooper	add_test ${category} "${desc}" ipv4 ipv6
754640235e2SEnji Cooper	add_test ${category} "${desc}" ipv6 ipv4
755640235e2SEnji Cooper	add_test ${category} "${desc}" ipv6 ipv6
756640235e2SEnji Cooper}
757640235e2SEnji Cooper
758640235e2SEnji Cooperatf_init_test_cases()
759640235e2SEnji Cooper{
760640235e2SEnji Cooper	add_test_allproto basic "basic tests"
761640235e2SEnji Cooper	add_test_allproto ioctl "ioctl tests"
762640235e2SEnji Cooper	add_test_allproto recursive "recursive check tests"
763640235e2SEnji Cooper}
764