xref: /freebsd/contrib/netbsd-tests/net/route/t_route.sh (revision d370fd1cd8fc69e87dc63f4f4a82e5a8b4956c93)
1*cdebaff8SEnji Cooper#	$NetBSD: t_route.sh,v 1.10 2016/12/21 02:46:08 ozaki-r Exp $
2640235e2SEnji Cooper#
3640235e2SEnji Cooper# Copyright (c) 2016 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 Cooper# non_subnet_gateway
29640235e2SEnji CooperSOCK_CLIENT=unix://commsock1
30640235e2SEnji CooperSOCK_GW=unix://commsock2
31640235e2SEnji CooperBUS=bus1
32640235e2SEnji Cooper
33640235e2SEnji Cooper# command_get
34640235e2SEnji CooperSOCKSRC=unix://commsock1
35640235e2SEnji CooperSOCKFWD=unix://commsock2
36640235e2SEnji CooperSOCKDST=unix://commsock3
37640235e2SEnji CooperIP4SRC=10.0.1.2
38640235e2SEnji CooperIP4SRCGW=10.0.1.1
39640235e2SEnji CooperIP4DSTGW=10.0.2.1
40640235e2SEnji CooperIP4DST=10.0.2.2
41640235e2SEnji CooperIP4DST_BCAST=10.0.2.255
42640235e2SEnji CooperIP6SRC=fc00:0:0:1::2
43640235e2SEnji CooperIP6SRCGW=fc00:0:0:1::1
44640235e2SEnji CooperIP6DSTGW=fc00:0:0:2::1
45640235e2SEnji CooperIP6DST=fc00:0:0:2::2
46640235e2SEnji CooperBUS_SRCGW=bus1
47640235e2SEnji CooperBUS_DSTGW=bus2
48640235e2SEnji Cooper
49*cdebaff8SEnji CooperDEBUG=${DEBUG:-false}
50640235e2SEnji CooperTIMEOUT=1
51640235e2SEnji CooperPING_OPTS="-n -c 1 -w $TIMEOUT"
52640235e2SEnji Cooper
53640235e2SEnji Cooperatf_test_case route_non_subnet_gateway cleanup
54640235e2SEnji Cooperroute_non_subnet_gateway_head()
55640235e2SEnji Cooper{
56640235e2SEnji Cooper
57640235e2SEnji Cooper	atf_set "descr" "tests of a gateway not on the local subnet"
58640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
59640235e2SEnji Cooper}
60640235e2SEnji Cooper
61640235e2SEnji Cooperroute_non_subnet_gateway_body()
62640235e2SEnji Cooper{
63640235e2SEnji Cooper
64*cdebaff8SEnji Cooper	rump_server_start $SOCK_CLIENT
65*cdebaff8SEnji Cooper	rump_server_start $SOCK_GW
66640235e2SEnji Cooper
67640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_GW}
68*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK_GW shmif0 $BUS
69640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1
70640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
71640235e2SEnji Cooper
72640235e2SEnji Cooper	# The gateway knows the client
73640235e2SEnji Cooper	atf_check -s exit:0 -o match:'add net 10.0.0.1: gateway shmif0' \
74640235e2SEnji Cooper	    rump.route add -net 10.0.0.1/32 -link -cloning -iface shmif0
75640235e2SEnji Cooper
76640235e2SEnji Cooper	$DEBUG && rump.netstat -nr -f inet
77640235e2SEnji Cooper
78640235e2SEnji Cooper	export RUMP_SERVER=${SOCK_CLIENT}
79*cdebaff8SEnji Cooper	rump_server_add_iface $SOCK_CLIENT shmif0 $BUS
80640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/32
81640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
82*cdebaff8SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
83640235e2SEnji Cooper
84640235e2SEnji Cooper	$DEBUG && rump.netstat -nr -f inet
85640235e2SEnji Cooper
86640235e2SEnji Cooper	# Don't know a route to the gateway yet
87640235e2SEnji Cooper	atf_check -s not-exit:0 -o match:'100.0% packet loss' \
88640235e2SEnji Cooper	    -e match:'No route to host' rump.ping $PING_OPTS 192.168.0.1
89640235e2SEnji Cooper
90640235e2SEnji Cooper	# Teach a route to the gateway
91640235e2SEnji Cooper	atf_check -s exit:0 -o match:'add net 192.168.0.1: gateway shmif0' \
92640235e2SEnji Cooper	    rump.route add -net 192.168.0.1/32 -link -cloning -iface shmif0
93640235e2SEnji Cooper	atf_check -s exit:0 -o match:'add net default: gateway 192.168.0.1' \
94640235e2SEnji Cooper	    rump.route add default -ifa 10.0.0.1 192.168.0.1
95640235e2SEnji Cooper
96640235e2SEnji Cooper	$DEBUG && rump.netstat -nr -f inet
97640235e2SEnji Cooper
98640235e2SEnji Cooper	# Be reachable to the gateway
99640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping $PING_OPTS 192.168.0.1
100640235e2SEnji Cooper
101*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
102640235e2SEnji Cooper}
103640235e2SEnji Cooper
104640235e2SEnji Cooperroute_non_subnet_gateway_cleanup()
105640235e2SEnji Cooper{
106640235e2SEnji Cooper
107*cdebaff8SEnji Cooper	$DEBUG && dump
108*cdebaff8SEnji Cooper	cleanup
109640235e2SEnji Cooper}
110640235e2SEnji Cooper
111640235e2SEnji Cooperatf_test_case route_command_get cleanup
112640235e2SEnji Cooperatf_test_case route_command_get6 cleanup
113640235e2SEnji Cooperroute_command_get_head()
114640235e2SEnji Cooper{
115640235e2SEnji Cooper
116640235e2SEnji Cooper	atf_set "descr" "tests of route get command"
117640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
118640235e2SEnji Cooper}
119640235e2SEnji Cooper
120640235e2SEnji Cooperroute_command_get6_head()
121640235e2SEnji Cooper{
122640235e2SEnji Cooper
123640235e2SEnji Cooper	atf_set "descr" "tests of route get command (IPv6)"
124640235e2SEnji Cooper	atf_set "require.progs" "rump_server"
125640235e2SEnji Cooper}
126640235e2SEnji Cooper
127640235e2SEnji Coopersetup_endpoint()
128640235e2SEnji Cooper{
129640235e2SEnji Cooper	local sock=${1}
130640235e2SEnji Cooper	local addr=${2}
131640235e2SEnji Cooper	local bus=${3}
132640235e2SEnji Cooper	local mode=${4}
133640235e2SEnji Cooper	local gw=${5}
134640235e2SEnji Cooper
135640235e2SEnji Cooper	export RUMP_SERVER=${sock}
136*cdebaff8SEnji Cooper	rump_server_add_iface $sock shmif0 $bus
137640235e2SEnji Cooper	if [ $mode = "ipv6" ]; then
138640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
139640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
140640235e2SEnji Cooper	else
141640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
142640235e2SEnji Cooper		atf_check -s exit:0 -o ignore rump.route add default ${gw}
143640235e2SEnji Cooper	fi
144640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
145*cdebaff8SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
146640235e2SEnji Cooper
147640235e2SEnji Cooper	if $DEBUG; then
148640235e2SEnji Cooper		rump.ifconfig shmif0
149640235e2SEnji Cooper		rump.netstat -nr
150640235e2SEnji Cooper	fi
151640235e2SEnji Cooper}
152640235e2SEnji Cooper
153640235e2SEnji Coopersetup_forwarder()
154640235e2SEnji Cooper{
155640235e2SEnji Cooper	mode=${1}
156640235e2SEnji Cooper
157*cdebaff8SEnji Cooper	rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
158*cdebaff8SEnji Cooper	rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
159*cdebaff8SEnji Cooper
160640235e2SEnji Cooper	export RUMP_SERVER=$SOCKFWD
161640235e2SEnji Cooper	if [ $mode = "ipv6" ]; then
162640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
163640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
164640235e2SEnji Cooper	else
165640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00
166640235e2SEnji Cooper		atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00
167640235e2SEnji Cooper	fi
168640235e2SEnji Cooper
169640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif0 up
170640235e2SEnji Cooper	atf_check -s exit:0 rump.ifconfig shmif1 up
171*cdebaff8SEnji Cooper	atf_check -s exit:0 rump.ifconfig -w 10
172640235e2SEnji Cooper
173640235e2SEnji Cooper	if $DEBUG; then
174640235e2SEnji Cooper		rump.netstat -nr
175640235e2SEnji Cooper		if [ $mode = "ipv6" ]; then
176640235e2SEnji Cooper			rump.sysctl net.inet6.ip6.forwarding
177640235e2SEnji Cooper		else
178640235e2SEnji Cooper			rump.sysctl net.inet.ip.forwarding
179640235e2SEnji Cooper		fi
180640235e2SEnji Cooper	fi
181640235e2SEnji Cooper}
182640235e2SEnji Cooper
183640235e2SEnji Coopersetup_forwarding()
184640235e2SEnji Cooper{
185640235e2SEnji Cooper	export RUMP_SERVER=$SOCKFWD
186640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
187640235e2SEnji Cooper}
188640235e2SEnji Cooper
189640235e2SEnji Coopersetup_forwarding6()
190640235e2SEnji Cooper{
191640235e2SEnji Cooper	export RUMP_SERVER=$SOCKFWD
192640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
193640235e2SEnji Cooper}
194640235e2SEnji Cooper
195640235e2SEnji Coopersetup()
196640235e2SEnji Cooper{
197640235e2SEnji Cooper
198*cdebaff8SEnji Cooper	rump_server_start $SOCKSRC
199*cdebaff8SEnji Cooper	rump_server_start $SOCKFWD
200*cdebaff8SEnji Cooper	rump_server_start $SOCKDST
201640235e2SEnji Cooper
202640235e2SEnji Cooper	setup_endpoint $SOCKSRC $IP4SRC $BUS_SRCGW ipv4 $IP4SRCGW
203640235e2SEnji Cooper	setup_endpoint $SOCKDST $IP4DST $BUS_DSTGW ipv4 $IP4DSTGW
204640235e2SEnji Cooper	setup_forwarder ipv4
205640235e2SEnji Cooper}
206640235e2SEnji Cooper
207640235e2SEnji Coopersetup6()
208640235e2SEnji Cooper{
209640235e2SEnji Cooper
210*cdebaff8SEnji Cooper	rump_server_start $SOCKSRC netinet6
211*cdebaff8SEnji Cooper	rump_server_start $SOCKFWD netinet6
212*cdebaff8SEnji Cooper	rump_server_start $SOCKDST netinet6
213640235e2SEnji Cooper
214640235e2SEnji Cooper	setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW ipv6 $IP6SRCGW
215640235e2SEnji Cooper	setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW ipv6 $IP6DSTGW
216640235e2SEnji Cooper	setup_forwarder ipv6
217640235e2SEnji Cooper}
218640235e2SEnji Cooper
219640235e2SEnji Coopertest_route_get()
220640235e2SEnji Cooper{
221640235e2SEnji Cooper
222640235e2SEnji Cooper	export RUMP_SERVER=$SOCKSRC
223640235e2SEnji Cooper	$DEBUG && rump.netstat -nr -f inet
224640235e2SEnji Cooper	$DEBUG && rump.arp -n -a
225640235e2SEnji Cooper
226640235e2SEnji Cooper	# Make sure an ARP cache to the gateway doesn't exist
227640235e2SEnji Cooper	rump.arp -d $IP4SRCGW
228640235e2SEnji Cooper
229640235e2SEnji Cooper	# Local
230640235e2SEnji Cooper	cat >./expect <<-EOF
231640235e2SEnji Cooper   route to: 10.0.1.2
232640235e2SEnji Cooperdestination: 10.0.1.2
233640235e2SEnji Cooper local addr: 10.0.1.2
234640235e2SEnji Cooper  interface: lo0
235640235e2SEnji Cooper      flags: <UP,HOST,DONE,LLINFO,LOCAL>
236640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
237640235e2SEnji Cooper	EOF
238640235e2SEnji Cooper	rump.route -n get $IP4SRC > ./output
239640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
240640235e2SEnji Cooper	# XXX: omit the last line because expire is unstable on rump kernel.
241640235e2SEnji Cooper	sed -i '$d' ./output
242640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
243640235e2SEnji Cooper
244640235e2SEnji Cooper	# Neighbor
245640235e2SEnji Cooper	cat >./expect <<-EOF
246640235e2SEnji Cooper   route to: 10.0.1.1
247640235e2SEnji Cooperdestination: 10.0.1.0
248640235e2SEnji Cooper       mask: 255.255.255.0
249640235e2SEnji Cooper local addr: 10.0.1.2
250640235e2SEnji Cooper  interface: shmif0
251640235e2SEnji Cooper      flags: <UP,DONE,CONNECTED>
252640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
253640235e2SEnji Cooper	EOF
254640235e2SEnji Cooper	rump.route -n get $IP4SRCGW > ./output
255640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
256640235e2SEnji Cooper	sed -i '$d' ./output
257640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
258640235e2SEnji Cooper
259640235e2SEnji Cooper	# Remote host
260640235e2SEnji Cooper	cat >./expect <<-EOF
261640235e2SEnji Cooper   route to: 10.0.2.2
262640235e2SEnji Cooperdestination: default
263640235e2SEnji Cooper       mask: default
264640235e2SEnji Cooper    gateway: 10.0.1.1
265640235e2SEnji Cooper local addr: 10.0.1.2
266640235e2SEnji Cooper  interface: shmif0
267640235e2SEnji Cooper      flags: <UP,GATEWAY,DONE,STATIC>
268640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
269640235e2SEnji Cooper	EOF
270640235e2SEnji Cooper	rump.route -n get $IP4DST > ./output
271640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
272640235e2SEnji Cooper	sed -i '$d' ./output
273640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
274640235e2SEnji Cooper
275640235e2SEnji Cooper	# Create a ARP cache
276640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW
277640235e2SEnji Cooper
278640235e2SEnji Cooper	# Neighbor with a cache (no different from w/o cache)
279640235e2SEnji Cooper	cat >./expect <<-EOF
280640235e2SEnji Cooper   route to: 10.0.1.1
281640235e2SEnji Cooperdestination: 10.0.1.0
282640235e2SEnji Cooper       mask: 255.255.255.0
283640235e2SEnji Cooper local addr: 10.0.1.2
284640235e2SEnji Cooper  interface: shmif0
285640235e2SEnji Cooper      flags: <UP,DONE,CONNECTED>
286640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
287640235e2SEnji Cooper	EOF
288640235e2SEnji Cooper	rump.route -n get $IP4SRCGW > ./output
289640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
290640235e2SEnji Cooper	sed -i '$d' ./output
291640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
292640235e2SEnji Cooper}
293640235e2SEnji Cooper
294640235e2SEnji Coopertest_route_get6()
295640235e2SEnji Cooper{
296640235e2SEnji Cooper
297640235e2SEnji Cooper	export RUMP_SERVER=$SOCKSRC
298640235e2SEnji Cooper	$DEBUG && rump.netstat -nr -f inet
299640235e2SEnji Cooper	$DEBUG && rump.ndp -n -a
300640235e2SEnji Cooper
301640235e2SEnji Cooper	# Make sure an ARP cache to the gateway doesn't exist
302640235e2SEnji Cooper	rump.ndp -d $IP6SRCGW
303640235e2SEnji Cooper
304640235e2SEnji Cooper	# Local
305640235e2SEnji Cooper	cat >./expect <<-EOF
306640235e2SEnji Cooper   route to: fc00:0:0:1::2
307640235e2SEnji Cooperdestination: fc00:0:0:1::2
308640235e2SEnji Cooper local addr: fc00:0:0:1::2
309640235e2SEnji Cooper  interface: lo0
310640235e2SEnji Cooper      flags: <UP,HOST,DONE,LLINFO,LOCAL>
311640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
312640235e2SEnji Cooper	EOF
313640235e2SEnji Cooper	rump.route -n get -inet6 $IP6SRC > ./output
314640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
315640235e2SEnji Cooper	sed -i '$d' ./output
316640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
317640235e2SEnji Cooper
318640235e2SEnji Cooper	# Neighbor
319640235e2SEnji Cooper	cat >./expect <<-EOF
320640235e2SEnji Cooper   route to: fc00:0:0:1::1
321640235e2SEnji Cooperdestination: fc00:0:0:1::
322640235e2SEnji Cooper       mask: ffff:ffff:ffff:ffff::
323640235e2SEnji Cooper local addr: fc00:0:0:1::2
324640235e2SEnji Cooper  interface: shmif0
325640235e2SEnji Cooper      flags: <UP,DONE,CONNECTED>
326640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
327640235e2SEnji Cooper	EOF
328640235e2SEnji Cooper	rump.route -n get -inet6 $IP6SRCGW > ./output
329640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
330640235e2SEnji Cooper	sed -i '$d' ./output
331640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
332640235e2SEnji Cooper
333640235e2SEnji Cooper	# Remote host
334640235e2SEnji Cooper	cat >./expect <<-EOF
335640235e2SEnji Cooper   route to: fc00:0:0:2::2
336640235e2SEnji Cooperdestination: ::
337640235e2SEnji Cooper       mask: default
338640235e2SEnji Cooper    gateway: fc00:0:0:1::1
339640235e2SEnji Cooper local addr: fc00:0:0:1::2
340640235e2SEnji Cooper  interface: shmif0
341640235e2SEnji Cooper      flags: <UP,GATEWAY,DONE,STATIC>
342640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
343640235e2SEnji Cooper	EOF
344640235e2SEnji Cooper	rump.route -n get -inet6 $IP6DST > ./output
345640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
346640235e2SEnji Cooper	sed -i '$d' ./output
347640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
348640235e2SEnji Cooper
349640235e2SEnji Cooper	# Create a NDP cache
350640235e2SEnji Cooper	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6SRCGW
351640235e2SEnji Cooper
352640235e2SEnji Cooper	# Neighbor with a cache (no different from w/o cache)
353640235e2SEnji Cooper	cat >./expect <<-EOF
354640235e2SEnji Cooper   route to: fc00:0:0:1::1
355640235e2SEnji Cooperdestination: fc00:0:0:1::
356640235e2SEnji Cooper       mask: ffff:ffff:ffff:ffff::
357640235e2SEnji Cooper local addr: fc00:0:0:1::2
358640235e2SEnji Cooper  interface: shmif0
359640235e2SEnji Cooper      flags: <UP,DONE,CONNECTED>
360640235e2SEnji Cooper recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
361640235e2SEnji Cooper	EOF
362640235e2SEnji Cooper	rump.route -n get -inet6 $IP6SRCGW > ./output
363640235e2SEnji Cooper	$DEBUG && cat ./expect ./output
364640235e2SEnji Cooper	sed -i '$d' ./output
365640235e2SEnji Cooper	atf_check -s exit:0 diff ./expect ./output
366640235e2SEnji Cooper}
367640235e2SEnji Cooper
368640235e2SEnji Cooperroute_command_get_body()
369640235e2SEnji Cooper{
370640235e2SEnji Cooper
371640235e2SEnji Cooper	setup
372640235e2SEnji Cooper	setup_forwarding
373640235e2SEnji Cooper	test_route_get
374*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
375640235e2SEnji Cooper}
376640235e2SEnji Cooper
377640235e2SEnji Cooperroute_command_get6_body()
378640235e2SEnji Cooper{
379640235e2SEnji Cooper
380640235e2SEnji Cooper	setup6
381640235e2SEnji Cooper	setup_forwarding6
382640235e2SEnji Cooper	test_route_get6
383*cdebaff8SEnji Cooper	rump_server_destroy_ifaces
384640235e2SEnji Cooper}
385640235e2SEnji Cooper
386640235e2SEnji Cooperroute_command_get_cleanup()
387640235e2SEnji Cooper{
388*cdebaff8SEnji Cooper
389640235e2SEnji Cooper	$DEBUG && dump
390640235e2SEnji Cooper	cleanup
391640235e2SEnji Cooper}
392640235e2SEnji Cooper
393640235e2SEnji Cooperroute_command_get6_cleanup()
394640235e2SEnji Cooper{
395*cdebaff8SEnji Cooper
396*cdebaff8SEnji Cooper	$DEBUG && dump
397640235e2SEnji Cooper	cleanup
398640235e2SEnji Cooper}
399640235e2SEnji Cooper
400640235e2SEnji Cooperatf_init_test_cases()
401640235e2SEnji Cooper{
402640235e2SEnji Cooper
403640235e2SEnji Cooper	atf_add_test_case route_non_subnet_gateway
404640235e2SEnji Cooper	atf_add_test_case route_command_get
405640235e2SEnji Cooper	atf_add_test_case route_command_get6
406640235e2SEnji Cooper}
407