xref: /netbsd-src/tests/net/net/t_ping6_opts.sh (revision 8ad8ab65b1e1aa72432ad06e19a670a7924fbd40)
1*8ad8ab65Smaxv#	$NetBSD: t_ping6_opts.sh,v 1.9 2018/04/26 06:23:33 maxv Exp $
2cd4a5f44Sozaki-r#
3cd4a5f44Sozaki-r# Copyright (c) 2016 Internet Initiative Japan Inc.
4cd4a5f44Sozaki-r# All rights reserved.
5cd4a5f44Sozaki-r#
6cd4a5f44Sozaki-r# Redistribution and use in source and binary forms, with or without
7cd4a5f44Sozaki-r# modification, are permitted provided that the following conditions
8cd4a5f44Sozaki-r# are met:
9cd4a5f44Sozaki-r# 1. Redistributions of source code must retain the above copyright
10cd4a5f44Sozaki-r#    notice, this list of conditions and the following disclaimer.
11cd4a5f44Sozaki-r# 2. Redistributions in binary form must reproduce the above copyright
12cd4a5f44Sozaki-r#    notice, this list of conditions and the following disclaimer in the
13cd4a5f44Sozaki-r#    documentation and/or other materials provided with the distribution.
14cd4a5f44Sozaki-r#
15cd4a5f44Sozaki-r# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16cd4a5f44Sozaki-r# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17cd4a5f44Sozaki-r# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18cd4a5f44Sozaki-r# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19cd4a5f44Sozaki-r# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20cd4a5f44Sozaki-r# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21cd4a5f44Sozaki-r# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22cd4a5f44Sozaki-r# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23cd4a5f44Sozaki-r# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24cd4a5f44Sozaki-r# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25cd4a5f44Sozaki-r# POSSIBILITY OF SUCH DAMAGE.
26cd4a5f44Sozaki-r#
27cd4a5f44Sozaki-r
28cd4a5f44Sozaki-rSOCKSRC=unix://commsock1
29cd4a5f44Sozaki-rSOCKFWD=unix://commsock2
30cd4a5f44Sozaki-rSOCKDST=unix://commsock3
31cd4a5f44Sozaki-rIP6SRC=fc00:0:0:1::2
32cd4a5f44Sozaki-rIP6SRCGW=fc00:0:0:1::1
33cd4a5f44Sozaki-rIP6DSTGW=fc00:0:0:2::1
34cd4a5f44Sozaki-rIP6DST=fc00:0:0:2::2
35cd4a5f44Sozaki-rBUS_SRCGW=bus1
36cd4a5f44Sozaki-rBUS_DSTGW=bus2
37cd4a5f44Sozaki-r
38cd4a5f44Sozaki-rIP6SRC2=fc00:0:0:1::3
39cd4a5f44Sozaki-rIP6SRCGW2=fc00:0:0:1::254
40cd4a5f44Sozaki-r
411c189061Sozaki-rDEBUG=${DEBUG:-false}
42cd4a5f44Sozaki-rTIMEOUT=1
43cd4a5f44Sozaki-r
44cd4a5f44Sozaki-r#
45cd4a5f44Sozaki-r# Utility functions
46cd4a5f44Sozaki-r#
47cd4a5f44Sozaki-rsetup_endpoint()
48cd4a5f44Sozaki-r{
49cd4a5f44Sozaki-r	local sock=${1}
50cd4a5f44Sozaki-r	local addr=${2}
51cd4a5f44Sozaki-r	local bus=${3}
52cd4a5f44Sozaki-r	local gw=${4}
53cd4a5f44Sozaki-r
545a83ceeaSozaki-r	rump_server_add_iface $sock shmif0 $bus
555a83ceeaSozaki-r
56cd4a5f44Sozaki-r	export RUMP_SERVER=${sock}
57cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
58cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
59cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 up
60cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
61cd4a5f44Sozaki-r
62cd4a5f44Sozaki-r	if $DEBUG; then
63cd4a5f44Sozaki-r		rump.ifconfig shmif0
64cd4a5f44Sozaki-r		rump.netstat -nr
65cd4a5f44Sozaki-r	fi
66cd4a5f44Sozaki-r}
67cd4a5f44Sozaki-r
68cd4a5f44Sozaki-rsetup_forwarder()
69cd4a5f44Sozaki-r{
70cd4a5f44Sozaki-r
715a83ceeaSozaki-r	rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
725a83ceeaSozaki-r	rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
73cd4a5f44Sozaki-r
745a83ceeaSozaki-r	export RUMP_SERVER=$SOCKFWD
75cd4a5f44Sozaki-r
76cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
77cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
78cd4a5f44Sozaki-r
79cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 up
80cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 up
81cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
82cd4a5f44Sozaki-r
83cd4a5f44Sozaki-r	if $DEBUG; then
84cd4a5f44Sozaki-r		rump.netstat -nr
85cd4a5f44Sozaki-r		rump.sysctl net.inet6.ip6.forwarding
86cd4a5f44Sozaki-r	fi
87cd4a5f44Sozaki-r}
88cd4a5f44Sozaki-r
89cd4a5f44Sozaki-rsetup_forwarding6()
90cd4a5f44Sozaki-r{
91cd4a5f44Sozaki-r	export RUMP_SERVER=$SOCKFWD
92cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
93cd4a5f44Sozaki-r}
94cd4a5f44Sozaki-r
95cd4a5f44Sozaki-rsetup6()
96cd4a5f44Sozaki-r{
97cd4a5f44Sozaki-r
985a83ceeaSozaki-r	rump_server_start $SOCKSRC netinet6
995a83ceeaSozaki-r	rump_server_start $SOCKFWD netinet6
1005a83ceeaSozaki-r	rump_server_start $SOCKDST netinet6
101cd4a5f44Sozaki-r
102cd4a5f44Sozaki-r	setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW $IP6SRCGW
103cd4a5f44Sozaki-r	setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW $IP6DSTGW
104cd4a5f44Sozaki-r	setup_forwarder
105cd4a5f44Sozaki-r}
106cd4a5f44Sozaki-r
107cd4a5f44Sozaki-rcheck_echo_request_pkt()
108cd4a5f44Sozaki-r{
109cd4a5f44Sozaki-r	local pkt="$1 > $2: .+ echo request"
110cd4a5f44Sozaki-r
111cd4a5f44Sozaki-r	extract_new_packets $BUS_SRCGW > ./out
112cd4a5f44Sozaki-r	$DEBUG && echo $pkt
113cd4a5f44Sozaki-r	$DEBUG && cat ./out
114cd4a5f44Sozaki-r	atf_check -s exit:0 -o match:"$pkt" cat ./out
115cd4a5f44Sozaki-r}
116cd4a5f44Sozaki-r
117cd4a5f44Sozaki-rcheck_echo_request_pkt_with_macaddr()
118cd4a5f44Sozaki-r{
119cd4a5f44Sozaki-r	local pkt="$1 > $2, .+ $3 > $4: .+ echo request"
120cd4a5f44Sozaki-r
121cd4a5f44Sozaki-r	extract_new_packets $BUS_SRCGW > ./out
122cd4a5f44Sozaki-r	$DEBUG && echo $pkt
123cd4a5f44Sozaki-r	$DEBUG && cat ./out
124cd4a5f44Sozaki-r	atf_check -s exit:0 -o match:"$pkt" cat ./out
125cd4a5f44Sozaki-r}
126cd4a5f44Sozaki-r
127e948d337Sozaki-rcheck_echo_request_pkt_with_macaddr_and_rthdr0()
128e948d337Sozaki-r{
129e948d337Sozaki-r	local pkt=
130e948d337Sozaki-r
131e948d337Sozaki-r	pkt="$1 > $2, .+ $3 > $4:"
132e948d337Sozaki-r	pkt="$pkt srcrt \\(len=2, type=0, segleft=1, \\[0\\]$5\\)"
133e948d337Sozaki-r	pkt="$pkt .+ echo request"
134e948d337Sozaki-r
135e948d337Sozaki-r	extract_new_packets $BUS_SRCGW > ./out
136e948d337Sozaki-r	$DEBUG && echo $pkt
137e948d337Sozaki-r	$DEBUG && cat ./out
138e948d337Sozaki-r	atf_check -s exit:0 -o match:"$pkt" cat ./out
139e948d337Sozaki-r}
140e948d337Sozaki-r
141cd4a5f44Sozaki-r#
142cd4a5f44Sozaki-r# Tests
143cd4a5f44Sozaki-r#
144cd4a5f44Sozaki-ratf_test_case ping6_opts_sourceaddr cleanup
145cd4a5f44Sozaki-rping6_opts_sourceaddr_head()
146cd4a5f44Sozaki-r{
147cd4a5f44Sozaki-r
148cd4a5f44Sozaki-r	atf_set "descr" "tests of ping6 -S option"
149cd4a5f44Sozaki-r	atf_set "require.progs" "rump_server"
150cd4a5f44Sozaki-r}
151cd4a5f44Sozaki-r
152cd4a5f44Sozaki-rping6_opts_sourceaddr_body()
153cd4a5f44Sozaki-r{
154cd4a5f44Sozaki-r
155cd4a5f44Sozaki-r	setup6
156cd4a5f44Sozaki-r	setup_forwarding6
157cd4a5f44Sozaki-r
158cd4a5f44Sozaki-r	export RUMP_SERVER=$SOCKSRC
159cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
160cd4a5f44Sozaki-r	check_echo_request_pkt $IP6SRC $IP6DST
161cd4a5f44Sozaki-r
162cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC2
163cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
164cd4a5f44Sozaki-r
165cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
166cd4a5f44Sozaki-r	check_echo_request_pkt $IP6SRC $IP6DST
167cd4a5f44Sozaki-r
168cd4a5f44Sozaki-r	# ping6 -S <sourceaddr>
169cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
170cd4a5f44Sozaki-r	    -S $IP6SRC $IP6DST
171cd4a5f44Sozaki-r	check_echo_request_pkt $IP6SRC $IP6DST
172cd4a5f44Sozaki-r
173cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
174cd4a5f44Sozaki-r	    -S $IP6SRC2 $IP6DST
175cd4a5f44Sozaki-r	check_echo_request_pkt $IP6SRC2 $IP6DST
1765a83ceeaSozaki-r
1775a83ceeaSozaki-r	rump_server_destroy_ifaces
178cd4a5f44Sozaki-r}
179cd4a5f44Sozaki-r
180cd4a5f44Sozaki-rping6_opts_sourceaddr_cleanup()
181cd4a5f44Sozaki-r{
182cd4a5f44Sozaki-r
183cd4a5f44Sozaki-r	$DEBUG && dump
184cd4a5f44Sozaki-r	cleanup
185cd4a5f44Sozaki-r}
186cd4a5f44Sozaki-r
187cd4a5f44Sozaki-ratf_test_case ping6_opts_interface cleanup
188cd4a5f44Sozaki-rping6_opts_interface_head()
189cd4a5f44Sozaki-r{
190cd4a5f44Sozaki-r
191cd4a5f44Sozaki-r	atf_set "descr" "tests of ping6 -I option"
192cd4a5f44Sozaki-r	atf_set "require.progs" "rump_server"
193cd4a5f44Sozaki-r}
194cd4a5f44Sozaki-r
195cd4a5f44Sozaki-rping6_opts_interface_body()
196cd4a5f44Sozaki-r{
197cd4a5f44Sozaki-r	local shmif0_lladdr=
198cd4a5f44Sozaki-r	local shmif1_lladdr=
199cd4a5f44Sozaki-r	local gw_lladdr=
200cd4a5f44Sozaki-r
201cd4a5f44Sozaki-r	setup6
202cd4a5f44Sozaki-r	setup_forwarding6
203cd4a5f44Sozaki-r
204a97a8a65Sozaki-r	shmif0_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif0)
205a97a8a65Sozaki-r	gw_lladdr=$(get_linklocal_addr ${SOCKFWD} shmif0)
206cd4a5f44Sozaki-r
207cd4a5f44Sozaki-r	export RUMP_SERVER=$SOCKSRC
208cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
209cd4a5f44Sozaki-r	check_echo_request_pkt $shmif0_lladdr $gw_lladdr
210cd4a5f44Sozaki-r
2115a83ceeaSozaki-r	rump_server_add_iface $SOCKSRC shmif1 $BUS_SRCGW
212cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif1 up
213cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
214a97a8a65Sozaki-r	shmif1_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif1)
215cd4a5f44Sozaki-r
216cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
217cd4a5f44Sozaki-r	check_echo_request_pkt $shmif0_lladdr $gw_lladdr
218cd4a5f44Sozaki-r
219cd4a5f44Sozaki-r	# ping6 -I <interface>
220cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
221cd4a5f44Sozaki-r	    -I shmif0 $gw_lladdr
222cd4a5f44Sozaki-r	check_echo_request_pkt $shmif0_lladdr $gw_lladdr
223cd4a5f44Sozaki-r
224cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
225cd4a5f44Sozaki-r	    -I shmif1 $gw_lladdr
226cd4a5f44Sozaki-r	check_echo_request_pkt $shmif1_lladdr $gw_lladdr
2275a83ceeaSozaki-r
2285a83ceeaSozaki-r	rump_server_destroy_ifaces
229cd4a5f44Sozaki-r}
230cd4a5f44Sozaki-r
231cd4a5f44Sozaki-rping6_opts_interface_cleanup()
232cd4a5f44Sozaki-r{
233cd4a5f44Sozaki-r
234cd4a5f44Sozaki-r	$DEBUG && dump
235cd4a5f44Sozaki-r	cleanup
236cd4a5f44Sozaki-r}
237cd4a5f44Sozaki-r
238cd4a5f44Sozaki-ratf_test_case ping6_opts_gateway cleanup
239cd4a5f44Sozaki-rping6_opts_gateway_head()
240cd4a5f44Sozaki-r{
241cd4a5f44Sozaki-r
242cd4a5f44Sozaki-r	atf_set "descr" "tests of ping6 -g option"
243cd4a5f44Sozaki-r	atf_set "require.progs" "rump_server"
244cd4a5f44Sozaki-r}
245cd4a5f44Sozaki-r
246cd4a5f44Sozaki-rping6_opts_gateway_body()
247cd4a5f44Sozaki-r{
248cd4a5f44Sozaki-r	local my_macaddr=
249cd4a5f44Sozaki-r	local gw_shmif0_macaddr=
250cd4a5f44Sozaki-r	local gw_shmif2_macaddr=
251cd4a5f44Sozaki-r
252cd4a5f44Sozaki-r	setup6
253cd4a5f44Sozaki-r	setup_forwarding6
254cd4a5f44Sozaki-r
255cd4a5f44Sozaki-r	my_macaddr=$(get_macaddr ${SOCKSRC} shmif0)
256cd4a5f44Sozaki-r	gw_shmif0_macaddr=$(get_macaddr ${SOCKFWD} shmif0)
257cd4a5f44Sozaki-r
258cd4a5f44Sozaki-r	export RUMP_SERVER=$SOCKSRC
259cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
260cd4a5f44Sozaki-r	check_echo_request_pkt_with_macaddr \
261cd4a5f44Sozaki-r	    $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
262cd4a5f44Sozaki-r
2635a83ceeaSozaki-r	rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
264cd4a5f44Sozaki-r	export RUMP_SERVER=$SOCKFWD
265cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
266cd4a5f44Sozaki-r	atf_check -s exit:0 rump.ifconfig -w 10
267cd4a5f44Sozaki-r	gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
268cd4a5f44Sozaki-r
269cd4a5f44Sozaki-r	export RUMP_SERVER=$SOCKSRC
270cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
271cd4a5f44Sozaki-r	check_echo_request_pkt_with_macaddr \
272cd4a5f44Sozaki-r	    $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
273cd4a5f44Sozaki-r
274cd4a5f44Sozaki-r	# ping6 -g <gateway>
275cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
276cd4a5f44Sozaki-r	    -g $IP6SRCGW $IP6DST
277cd4a5f44Sozaki-r	check_echo_request_pkt_with_macaddr \
278cd4a5f44Sozaki-r	    $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
279cd4a5f44Sozaki-r
280cd4a5f44Sozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
281cd4a5f44Sozaki-r	    -g $IP6SRCGW2 $IP6DST
282cd4a5f44Sozaki-r	check_echo_request_pkt_with_macaddr \
283cd4a5f44Sozaki-r	    $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6DST
2845a83ceeaSozaki-r
2855a83ceeaSozaki-r	rump_server_destroy_ifaces
286cd4a5f44Sozaki-r}
287cd4a5f44Sozaki-r
288cd4a5f44Sozaki-rping6_opts_gateway_cleanup()
289cd4a5f44Sozaki-r{
290cd4a5f44Sozaki-r
291cd4a5f44Sozaki-r	$DEBUG && dump
292cd4a5f44Sozaki-r	cleanup
293cd4a5f44Sozaki-r}
294cd4a5f44Sozaki-r
295cd4a5f44Sozaki-ratf_init_test_cases()
296cd4a5f44Sozaki-r{
297cd4a5f44Sozaki-r
298cd4a5f44Sozaki-r	atf_add_test_case ping6_opts_sourceaddr
299cd4a5f44Sozaki-r	atf_add_test_case ping6_opts_interface
300cd4a5f44Sozaki-r	atf_add_test_case ping6_opts_gateway
301cd4a5f44Sozaki-r}
302