xref: /netbsd/tests/net/if_vlan/t_vlan.sh (revision cf12f019)
1*cf12f019Syamaguchi#	$NetBSD: t_vlan.sh,v 1.24 2021/08/19 03:27:05 yamaguchi Exp $
2d8b2128bSozaki-r#
3d8b2128bSozaki-r# Copyright (c) 2016 Internet Initiative Japan Inc.
4d8b2128bSozaki-r# All rights reserved.
5d8b2128bSozaki-r#
6d8b2128bSozaki-r# Redistribution and use in source and binary forms, with or without
7d8b2128bSozaki-r# modification, are permitted provided that the following conditions
8d8b2128bSozaki-r# are met:
9d8b2128bSozaki-r# 1. Redistributions of source code must retain the above copyright
10d8b2128bSozaki-r#    notice, this list of conditions and the following disclaimer.
11d8b2128bSozaki-r# 2. Redistributions in binary form must reproduce the above copyright
12d8b2128bSozaki-r#    notice, this list of conditions and the following disclaimer in the
13d8b2128bSozaki-r#    documentation and/or other materials provided with the distribution.
14d8b2128bSozaki-r#
15d8b2128bSozaki-r# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16d8b2128bSozaki-r# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17d8b2128bSozaki-r# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18d8b2128bSozaki-r# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19d8b2128bSozaki-r# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20d8b2128bSozaki-r# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21d8b2128bSozaki-r# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22d8b2128bSozaki-r# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23d8b2128bSozaki-r# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24d8b2128bSozaki-r# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25d8b2128bSozaki-r# POSSIBILITY OF SUCH DAMAGE.
26d8b2128bSozaki-r#
27d8b2128bSozaki-r
28d8b2128bSozaki-rBUS=bus
29d8b2128bSozaki-rSOCK_LOCAL=unix://commsock1
30d8b2128bSozaki-rSOCK_REMOTE=unix://commsock2
31d04fb9baSozaki-rIP_LOCAL0=10.0.0.1
32d04fb9baSozaki-rIP_LOCAL1=10.0.1.1
33d04fb9baSozaki-rIP_REMOTE0=10.0.0.2
34d04fb9baSozaki-rIP_REMOTE1=10.0.1.2
357a5814c3SyamaguchiIP_MCADDR0=224.0.0.10
36d2674664SyamaguchiIP6_LOCAL0=fc00::1
37d04fb9baSozaki-rIP6_LOCAL1=fc00:1::1
38d2674664SyamaguchiIP6_REMOTE0=fc00::2
39d04fb9baSozaki-rIP6_REMOTE1=fc00:1::2
407a5814c3SyamaguchiIP6_MCADDR0=ff11::10
417a5814c3SyamaguchiETH_IP_MCADDR0=01:00:5e:00:00:0a
427a5814c3SyamaguchiETH_IP6_MCADDR0=33:33:00:00:00:10
43d8b2128bSozaki-r
44d8b2128bSozaki-rDEBUG=${DEBUG:-false}
45d8b2128bSozaki-r
46d04fb9baSozaki-rvlan_create_destroy_body_common()
47d04fb9baSozaki-r{
48d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
49d2788a51Sozaki-r
50d04fb9baSozaki-r	export RUMP_SERVER=${SOCK_LOCAL}
51d04fb9baSozaki-r
52d2788a51Sozaki-r	$atf_ifconfig vlan0 create
53d2788a51Sozaki-r	$atf_ifconfig vlan0 destroy
545887e14dSozaki-r
55d2788a51Sozaki-r	$atf_ifconfig vlan0 create
56d2788a51Sozaki-r	$atf_ifconfig vlan0 up
57d2788a51Sozaki-r	$atf_ifconfig vlan0 down
58d2788a51Sozaki-r	$atf_ifconfig vlan0 destroy
59d04fb9baSozaki-r
60d2788a51Sozaki-r	$atf_ifconfig shmif0 create
61d2788a51Sozaki-r	$atf_ifconfig vlan0 create
62d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
63d2788a51Sozaki-r	$atf_ifconfig vlan0 up
64d2788a51Sozaki-r	$atf_ifconfig vlan0 destroy
65d04fb9baSozaki-r
66d04fb9baSozaki-r	# more than one vlan interface with a same parent interface
67d2788a51Sozaki-r	$atf_ifconfig shmif1 create
68d2788a51Sozaki-r	$atf_ifconfig vlan0 create
69d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
70d2788a51Sozaki-r	$atf_ifconfig vlan1 create
71d2788a51Sozaki-r	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
72d04fb9baSozaki-r
73d04fb9baSozaki-r	# more than one interface with another parent interface
74d2788a51Sozaki-r	$atf_ifconfig vlan2 create
75d2788a51Sozaki-r	$atf_ifconfig vlan2 vlan 12 vlanif shmif1
76d2788a51Sozaki-r	$atf_ifconfig vlan3 create
77d2788a51Sozaki-r	$atf_ifconfig vlan3 vlan 13 vlanif shmif1
78d2788a51Sozaki-r	$atf_ifconfig shmif0 destroy
79d04fb9baSozaki-r	atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig vlan0
80d04fb9baSozaki-r	atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig vlan1
81d04fb9baSozaki-r	atf_check -s exit:0 -o match:'shmif1' rump.ifconfig vlan2
82d04fb9baSozaki-r	atf_check -s exit:0 -o match:'shmif1' rump.ifconfig vlan3
83d2788a51Sozaki-r	$atf_ifconfig vlan0 destroy
84d2788a51Sozaki-r	$atf_ifconfig vlan1 destroy
85d2788a51Sozaki-r	$atf_ifconfig vlan2 destroy
86d2788a51Sozaki-r	$atf_ifconfig vlan3 destroy
87d04fb9baSozaki-r
88d04fb9baSozaki-r}
89d04fb9baSozaki-r
90d8b2128bSozaki-ratf_test_case vlan_create_destroy cleanup
91d8b2128bSozaki-rvlan_create_destroy_head()
92d8b2128bSozaki-r{
93d8b2128bSozaki-r
94d8b2128bSozaki-r	atf_set "descr" "tests of creation and deletion of vlan interface"
95d8b2128bSozaki-r	atf_set "require.progs" "rump_server"
96d8b2128bSozaki-r}
97d8b2128bSozaki-r
98d8b2128bSozaki-rvlan_create_destroy_body()
99d8b2128bSozaki-r{
100d8b2128bSozaki-r	rump_server_start $SOCK_LOCAL vlan
101d8b2128bSozaki-r
102d04fb9baSozaki-r	vlan_create_destroy_body_common
103d8b2128bSozaki-r}
104d8b2128bSozaki-r
105d04fb9baSozaki-r
106d8b2128bSozaki-rvlan_create_destroy_cleanup()
107d8b2128bSozaki-r{
108d8b2128bSozaki-r
109d8b2128bSozaki-r	$DEBUG && dump
110d8b2128bSozaki-r	cleanup
111d8b2128bSozaki-r}
112d8b2128bSozaki-r
113d04fb9baSozaki-ratf_test_case vlan_create_destroy6 cleanup
114d04fb9baSozaki-rvlan_create_destroy6_head()
115d04fb9baSozaki-r{
116d04fb9baSozaki-r
117d04fb9baSozaki-r	atf_set "descr" "tests of creation and deletion of vlan interface with IPv6"
118d04fb9baSozaki-r	atf_set "require.progs" "rump_server"
119d04fb9baSozaki-r}
120d04fb9baSozaki-r
121d04fb9baSozaki-rvlan_create_destroy6_body()
122d04fb9baSozaki-r{
123d04fb9baSozaki-r
124d04fb9baSozaki-r	rump_server_start $SOCK_LOCAL vlan netinet6
125d04fb9baSozaki-r
126d04fb9baSozaki-r	vlan_create_destroy_body_common
127d04fb9baSozaki-r}
128d04fb9baSozaki-r
129d04fb9baSozaki-rvlan_create_destroy6_cleanup()
130d04fb9baSozaki-r{
131d04fb9baSozaki-r
132d04fb9baSozaki-r	$DEBUG && dump
133d04fb9baSozaki-r	cleanup
134d04fb9baSozaki-r}
135d04fb9baSozaki-r
136d04fb9baSozaki-rvlan_basic_body_common()
137d04fb9baSozaki-r{
138d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
139d04fb9baSozaki-r	local outfile=./out
140d04fb9baSozaki-r	local af=inet
141d04fb9baSozaki-r	local prefix=24
142d04fb9baSozaki-r	local local0=$IP_LOCAL0
143d04fb9baSozaki-r	local remote0=$IP_REMOTE0
144d04fb9baSozaki-r	local ping_cmd="rump.ping -n -w 1 -c 1"
145d04fb9baSozaki-r
146d04fb9baSozaki-r	if [ x"$1" = x"inet6" ]; then
147d04fb9baSozaki-r		af="inet6"
148d04fb9baSozaki-r		prefix=64
149d04fb9baSozaki-r		local0=$IP6_LOCAL0
150d04fb9baSozaki-r		remote0=$IP6_REMOTE0
151d04fb9baSozaki-r		ping_cmd="rump.ping6 -n -c 1"
152d04fb9baSozaki-r	fi
153d04fb9baSozaki-r
154d04fb9baSozaki-r	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
155d04fb9baSozaki-r	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
156d04fb9baSozaki-r
157d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
158d2788a51Sozaki-r	$atf_ifconfig shmif0 up
159d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
160d2788a51Sozaki-r	$atf_ifconfig shmif0 up
161d04fb9baSozaki-r
162d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
163d2788a51Sozaki-r	$atf_ifconfig vlan0 create
164d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
165d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $local0/$prefix
166d2788a51Sozaki-r	$atf_ifconfig vlan0 up
167d2788a51Sozaki-r	$atf_ifconfig -w 10
168d04fb9baSozaki-r
169d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
170d2788a51Sozaki-r	$atf_ifconfig vlan0 create
171d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
172d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $remote0/$prefix
173d2788a51Sozaki-r	$atf_ifconfig vlan0 up
174d2788a51Sozaki-r	$atf_ifconfig -w 10
175d04fb9baSozaki-r
176d04fb9baSozaki-r	extract_new_packets $BUS > $outfile
177d04fb9baSozaki-r
178d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
179d04fb9baSozaki-r	atf_check -s exit:0 -o ignore $ping_cmd $remote0
180d04fb9baSozaki-r
181d04fb9baSozaki-r	extract_new_packets $BUS > $outfile
182d04fb9baSozaki-r	atf_check -s exit:0 -o match:'vlan 10' cat $outfile
183d04fb9baSozaki-r
184d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
185d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 20 vlanif shmif0
186d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $local0/$prefix
187d2788a51Sozaki-r	$atf_ifconfig vlan0 up
188d2788a51Sozaki-r	$atf_ifconfig -w 10
189d04fb9baSozaki-r
190d04fb9baSozaki-r	extract_new_packets $BUS > $outfile
191d04fb9baSozaki-r	atf_check -s not-exit:0 -o ignore $ping_cmd $remote0
192d04fb9baSozaki-r
193d04fb9baSozaki-r	extract_new_packets $BUS > $outfile
194d04fb9baSozaki-r	atf_check -s exit:0 -o match:'vlan 20' cat $outfile
195585004e0Sknakahara
196585004e0Sknakahara	export RUMP_SERVER=$SOCK_LOCAL
197d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
198d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
199d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $local0/$prefix
200d2788a51Sozaki-r	$atf_ifconfig vlan0 up
201d2788a51Sozaki-r	$atf_ifconfig -w 10
202585004e0Sknakahara
203585004e0Sknakahara	atf_check -s exit:0 -o ignore rump.ifconfig -z vlan0
204585004e0Sknakahara	atf_check -s exit:0 -o ignore $ping_cmd $remote0
205585004e0Sknakahara	rump.ifconfig -v vlan0 > $outfile
206585004e0Sknakahara
207585004e0Sknakahara	atf_check -s exit:0 -o not-match:' 0 packets' cat $outfile
208585004e0Sknakahara	atf_check -s exit:0 -o not-match:' 0 bytes' cat $outfile
209d04fb9baSozaki-r}
210d04fb9baSozaki-r
211d8b2128bSozaki-ratf_test_case vlan_basic cleanup
212d8b2128bSozaki-rvlan_basic_head()
213d8b2128bSozaki-r{
214d8b2128bSozaki-r
215d8b2128bSozaki-r	atf_set "descr" "tests of communications over vlan interfaces"
216d8b2128bSozaki-r	atf_set "require.progs" "rump_server"
217d8b2128bSozaki-r}
218d8b2128bSozaki-r
219d8b2128bSozaki-rvlan_basic_body()
220d8b2128bSozaki-r{
221d8b2128bSozaki-r	rump_server_start $SOCK_LOCAL vlan
222d8b2128bSozaki-r	rump_server_start $SOCK_REMOTE vlan
223d8b2128bSozaki-r
224d04fb9baSozaki-r	vlan_basic_body_common inet
225d8b2128bSozaki-r
226d8b2128bSozaki-r}
227d8b2128bSozaki-r
228d8b2128bSozaki-rvlan_basic_cleanup()
229d8b2128bSozaki-r{
230d8b2128bSozaki-r
231d8b2128bSozaki-r	$DEBUG && dump
232d8b2128bSozaki-r	cleanup
233d8b2128bSozaki-r}
234d8b2128bSozaki-r
235d04fb9baSozaki-ratf_test_case vlan_basic6 cleanup
236d04fb9baSozaki-rvlan_basic6_head()
237d04fb9baSozaki-r{
238d04fb9baSozaki-r
239d04fb9baSozaki-r	atf_set "descr" "tests of communications over vlan interfaces using IPv6"
240d04fb9baSozaki-r	atf_set "require.progs" "rump_server"
241d04fb9baSozaki-r}
242d04fb9baSozaki-r
243d04fb9baSozaki-rvlan_basic6_body()
244d04fb9baSozaki-r{
245d04fb9baSozaki-r	rump_server_start $SOCK_LOCAL vlan netinet6
246d04fb9baSozaki-r	rump_server_start $SOCK_REMOTE vlan netinet6
247d04fb9baSozaki-r
248d04fb9baSozaki-r	vlan_basic_body_common inet6
249d04fb9baSozaki-r}
250d04fb9baSozaki-r
251d04fb9baSozaki-rvlan_basic6_cleanup()
252d04fb9baSozaki-r{
253d04fb9baSozaki-r
254d04fb9baSozaki-r	$DEBUG && dump
255d04fb9baSozaki-r	cleanup
256d04fb9baSozaki-r}
257d04fb9baSozaki-r
258d2674664Syamaguchivlan_auto_follow_mtu_body_common()
259d2674664Syamaguchi{
260d2674664Syamaguchi	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
261d2674664Syamaguchi	local outfile=./out
262d2674664Syamaguchi	local af=inet
263d2674664Syamaguchi	local prefix=24
264d2674664Syamaguchi	local local0=$IP_LOCAL0
265d2674664Syamaguchi	local remote0=$IP_REMOTE0
266d2674664Syamaguchi	local ping_cmd="rump.ping -D -n -w 1 -c 1"
267d2674664Syamaguchi	local mtu=1500
268d2674664Syamaguchi	local vlan_mtu=`expr $mtu - 4`
269d2674664Syamaguchi	# ipv4 header=20bytes, icmp header=8bytes
270d2674664Syamaguchi	local padding=`expr $vlan_mtu - 20 - 8`
271d2674664Syamaguchi	local over_padding=`expr $vlan_mtu - 20 - 8 + 1`
272d2674664Syamaguchi	local nonfrag_msg="$local0 > $remote0: ICMP echo request"
273d2674664Syamaguchi	# unused for ipv4
274d2674664Syamaguchi	local frag_msg=""
275d2674664Syamaguchi
276d2674664Syamaguchi	if [ x"$1" = x"inet6" ]; then
277d2674664Syamaguchi		af="inet6"
278d2674664Syamaguchi		prefix=64
279d2674664Syamaguchi		local0=$IP6_LOCAL0
280d2674664Syamaguchi		remote0=$IP6_REMOTE0
281d2674664Syamaguchi		# ipv6 header=40bytes, icmpv6 header=8bytes
282d2674664Syamaguchi		padding=`expr $vlan_mtu - 40 - 8`
283d2674664Syamaguchi		over_padding=`expr $vlan_mtu - 40 - 8 + 1`
284d2674664Syamaguchi		ping_cmd="rump.ping6 -mm -n -c 1 -i 1"
285d2674664Syamaguchi		nonfrag_msg="$local0 > $remote0: ICMP6, echo request"
286d2674664Syamaguchi		frag_msg="$local0 > $remote0: frag .* ICMP6, echo request"
287d2674664Syamaguchi	fi
288d2674664Syamaguchi
289d2674664Syamaguchi	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
290d2674664Syamaguchi	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
291d2674664Syamaguchi
292d2674664Syamaguchi	export RUMP_SERVER=$SOCK_LOCAL
293d2674664Syamaguchi	$atf_ifconfig shmif0 up
294d2674664Syamaguchi	export RUMP_SERVER=$SOCK_REMOTE
295d2674664Syamaguchi	$atf_ifconfig shmif0 up
296d2674664Syamaguchi
297d2674664Syamaguchi	export RUMP_SERVER=$SOCK_LOCAL
298d2674664Syamaguchi	$atf_ifconfig vlan0 create
299d2674664Syamaguchi
300d2674664Syamaguchi	# since upper bound of shmif's mtu is 1500,
301d2674664Syamaguchi	# so we lower vlan's mtu instead of raising shmif's.
302d2674664Syamaguchi	# to do this, we change the interface's parameter
303d2674664Syamaguchi	# such as ND_IFINFO(ifp)->maxmtu that is changed by SIOCSIFMTU.
304d2674664Syamaguchi
305d2674664Syamaguchi	# $atf_config shmif0 mtu 1600
306d2674664Syamaguchi	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
307d2674664Syamaguchi	$atf_ifconfig vlan0 mtu 1400
308d2674664Syamaguchi	$atf_ifconfig vlan0 -vlanif shmif0
309d2674664Syamaguchi
310d2674664Syamaguchi	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
311d2674664Syamaguchi	$atf_ifconfig vlan0 $af $local0/$prefix
312d2674664Syamaguchi	$atf_ifconfig vlan0 up
313d2674664Syamaguchi	$atf_ifconfig -w 10
314d2674664Syamaguchi
315d2674664Syamaguchi	export RUMP_SERVER=$SOCK_REMOTE
316d2674664Syamaguchi	$atf_ifconfig vlan0 create
317d2674664Syamaguchi	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
318d2674664Syamaguchi	$atf_ifconfig vlan0 $af $remote0/$prefix
319d2674664Syamaguchi	$atf_ifconfig vlan0 up
320d2674664Syamaguchi	$atf_ifconfig -w 10
321d2674664Syamaguchi
322d2674664Syamaguchi	extract_new_packets $BUS > $outfile
323d2674664Syamaguchi	export RUMP_SERVER=$SOCK_LOCAL
324d2674664Syamaguchi
325d2674664Syamaguchi	atf_check -s exit:0 -o ignore $ping_cmd -s $padding $remote0
326d2674664Syamaguchi	extract_new_packets $BUS > $outfile
327d2674664Syamaguchi	atf_check -s exit:0 -o match:"$nonfrag_msg" cat $outfile
328d2674664Syamaguchi
329d2674664Syamaguchi	if [ x"$1" = x"inet6" ]; then
330d2674664Syamaguchi		atf_check -s exit:0 -o ignore $ping_cmd -s $over_padding $remote0
331d2674664Syamaguchi		extract_new_packets $BUS > $outfile
332d2674664Syamaguchi		atf_check -s exit:0 -o match:"$frag_msg" cat $outfile
333d2674664Syamaguchi	else
334d2674664Syamaguchi		atf_check -s not-exit:0 -o ignore -e match:"Message too long" \
335d2674664Syamaguchi				$ping_cmd -s $over_padding $remote0
336d2674664Syamaguchi	fi
337d2674664Syamaguchi}
338d2674664Syamaguchi
339d2674664Syamaguchiatf_test_case vlan_auto_follow_mtu cleanup
340d2674664Syamaguchivlan_auto_follow_mtu_head()
341d2674664Syamaguchi{
342d2674664Syamaguchi
343d2674664Syamaguchi	atf_set "descr" "tests of setting vlan mtu using IPv4"
344d2674664Syamaguchi	atf_set "require.progs" "rump_server"
345d2674664Syamaguchi}
346d2674664Syamaguchi
347d2674664Syamaguchivlan_auto_follow_mtu_body()
348d2674664Syamaguchi{
349d2674664Syamaguchi	rump_server_start $SOCK_LOCAL vlan
350d2674664Syamaguchi	rump_server_start $SOCK_REMOTE vlan
351d2674664Syamaguchi
352d2674664Syamaguchi	vlan_auto_follow_mtu_body_common inet
353d2674664Syamaguchi}
354d2674664Syamaguchi
355d2674664Syamaguchivlan_auto_follow_mtu_cleanup()
356d2674664Syamaguchi{
357d2674664Syamaguchi
358d2674664Syamaguchi	$DEBUG && dump
359d2674664Syamaguchi	cleanup
360d2674664Syamaguchi}
361d2674664Syamaguchi
362d2674664Syamaguchiatf_test_case vlan_auto_follow_mtu6 cleanup
363d2674664Syamaguchivlan_auto_follow_mtu6_head()
364d2674664Syamaguchi{
365d2674664Syamaguchi
366d2674664Syamaguchi	atf_set "descr" "tests of setting vlan mtu using IPv6"
367d2674664Syamaguchi	atf_set "require.progs" "rump_server"
368d2674664Syamaguchi}
369d2674664Syamaguchi
370d2674664Syamaguchivlan_auto_follow_mtu6_body()
371d2674664Syamaguchi{
372d2674664Syamaguchi	rump_server_start $SOCK_LOCAL vlan netinet6
373d2674664Syamaguchi	rump_server_start $SOCK_REMOTE vlan netinet6
374d2674664Syamaguchi
375d2674664Syamaguchi	vlan_auto_follow_mtu_body_common inet6
376d2674664Syamaguchi}
377d2674664Syamaguchi
378d2674664Syamaguchivlan_auto_follow_mtu6_cleanup()
379d2674664Syamaguchi{
380d2674664Syamaguchi
381d2674664Syamaguchi	$DEBUG && dump
382d2674664Syamaguchi	cleanup
383d2674664Syamaguchi}
384d2674664Syamaguchi
385d04fb9baSozaki-rvlanid_config_and_ping()
386d04fb9baSozaki-r{
387d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
388d04fb9baSozaki-r	local vlanid=$1
389d04fb9baSozaki-r	shift
390d04fb9baSozaki-r
391d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
392d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
393d2788a51Sozaki-r	$atf_ifconfig vlan0 $IP_LOCAL0/24
394d2788a51Sozaki-r	$atf_ifconfig vlan0 up
395d04fb9baSozaki-r
396d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
397d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
398d2788a51Sozaki-r	$atf_ifconfig vlan0 $IP_REMOTE0/24
399d2788a51Sozaki-r	$atf_ifconfig vlan0 up
400d04fb9baSozaki-r
401d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
402d04fb9baSozaki-r	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP_REMOTE0
403d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
404d04fb9baSozaki-r
405d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
406d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
407d04fb9baSozaki-r}
408d04fb9baSozaki-r
409d04fb9baSozaki-rvlanid_config_and_ping6()
410d04fb9baSozaki-r{
411d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
412d04fb9baSozaki-r	local vlanid=$1
413d04fb9baSozaki-r	shift
414d04fb9baSozaki-r
415d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
416d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
417d2788a51Sozaki-r	$atf_ifconfig vlan0 inet6 $IP6_LOCAL0/64
418d2788a51Sozaki-r	$atf_ifconfig vlan0 up
419d04fb9baSozaki-r
420d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
421d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
422d2788a51Sozaki-r	$atf_ifconfig vlan0 inet6 $IP6_REMOTE0/64
423d2788a51Sozaki-r	$atf_ifconfig vlan0 up
424d04fb9baSozaki-r
425d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
426d04fb9baSozaki-r	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 $IP6_REMOTE0
427d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
428d04fb9baSozaki-r
429d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
430d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
431d04fb9baSozaki-r}
432d04fb9baSozaki-r
433d04fb9baSozaki-rvlan_vlanid_body_common()
434d04fb9baSozaki-r{
435d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
436d04fb9baSozaki-r	local af=inet
437d04fb9baSozaki-r	local prefix=24
438d04fb9baSozaki-r	local sysctl_param="net.inet.ip.dad_count=0"
439d04fb9baSozaki-r	local ping_cmd="rump.ping -n -w 1 -c 1"
440d04fb9baSozaki-r	local config_and_ping=vlanid_config_and_ping
441d04fb9baSozaki-r	local local0=$IP_LOCAL0
442d04fb9baSozaki-r	local local1=$IP_LOCAL1
443d04fb9baSozaki-r	local remote0=$IP_REMOTE0
444d04fb9baSozaki-r	local remote1=$IP_REMOTE1
445d04fb9baSozaki-r
446d04fb9baSozaki-r	if [ x"$1" = x"inet6" ]; then
447d04fb9baSozaki-r		af=inet6
448d04fb9baSozaki-r		prefix=64
449d04fb9baSozaki-r		sysctl_param="net.inet6.ip6.dad_count=0"
450d04fb9baSozaki-r		ping_cmd="rump.ping6 -n -c 1"
451d04fb9baSozaki-r		config_and_ping=vlanid_config_and_ping6
452d04fb9baSozaki-r		local0=$IP6_LOCAL0
453d04fb9baSozaki-r		local1=$IP6_LOCAL1
454d04fb9baSozaki-r		remote0=$IP6_REMOTE0
455d04fb9baSozaki-r		remote1=$IP6_REMOTE1
456d04fb9baSozaki-r	fi
457d04fb9baSozaki-r
458d04fb9baSozaki-r	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
459d04fb9baSozaki-r	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
460d04fb9baSozaki-r
461d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
462d04fb9baSozaki-r	atf_check -s exit:0 -o ignore rump.sysctl -w $sysctl_param
463d2788a51Sozaki-r	$atf_ifconfig shmif0 up
464d2788a51Sozaki-r	$atf_ifconfig vlan0 create
465d04fb9baSozaki-r
466d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
467d04fb9baSozaki-r	atf_check -s exit:0 -o ignore rump.sysctl -w $sysctl_param
468d2788a51Sozaki-r	$atf_ifconfig shmif0 up
469d2788a51Sozaki-r	$atf_ifconfig vlan0 create
470d04fb9baSozaki-r
471d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
4725b47a999Sozaki-r	atf_check -s not-exit:0 -e match:"^usage: rump.ifconfig" \
473d04fb9baSozaki-r	    rump.ifconfig vlan0 vlan -1 vlanif shmif0
474d04fb9baSozaki-r
475b1e4419bSkre	# $config_and_ping 0 # reserved vlan id
476d04fb9baSozaki-r	$config_and_ping 1
477d04fb9baSozaki-r	$config_and_ping 4094
478b1e4419bSkre	# $config_and_ping 4095 #reserved vlan id
479d04fb9baSozaki-r
480c84c7aedSkre	if [ "${RANDOM:-0}" != "${RANDOM:-0}" ]
481c84c7aedSkre	then
482c84c7aedSkre		for TAG in $(( ${RANDOM:-0} % 4092 + 2 )) \
483c84c7aedSkre			   $(( ${RANDOM:-0} % 4092 + 2 )) \
484c84c7aedSkre			   $(( ${RANDOM:-0} % 4092 + 2 ))
485c84c7aedSkre		do
486c84c7aedSkre			$config_and_ping "${TAG}"
487c84c7aedSkre		done
488c84c7aedSkre	fi
489c84c7aedSkre
490d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
491c84c7aedSkre	for TAG in 0 4095 4096 $((4096*4 + 1)) 65536 65537 $((65536 + 4095))
492c84c7aedSkre	do
493c84c7aedSkre		atf_check -s not-exit:0 -e not-empty \
494c84c7aedSkre		    rump.ifconfig vlan0 vlan "${TAG}" vlanif shmif0
495c84c7aedSkre	done
496d04fb9baSozaki-r
497d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
4985b47a999Sozaki-r	atf_check -s not-exit:0 -e match:"SIOCSETVLAN: Device busy" \
499d04fb9baSozaki-r	    rump.ifconfig vlan0 vlan 2 vlanif shmif0
500d04fb9baSozaki-r
5015b47a999Sozaki-r	atf_check -s not-exit:0 -e match:"SIOCSETVLAN: Device busy" \
502d04fb9baSozaki-r	    rump.ifconfig vlan0 vlan 1 vlanif shmif1
503d04fb9baSozaki-r
504d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
5055b47a999Sozaki-r	atf_check -s not-exit:0 -e match:"Invalid argument" \
506644db2cdSozaki-r	    rump.ifconfig vlan0 $af $local0/$prefix
507d04fb9baSozaki-r
508d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
509d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
510d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $local0/$prefix
511d2788a51Sozaki-r	$atf_ifconfig vlan0 up
512d2788a51Sozaki-r	$atf_ifconfig vlan1 create
513d2788a51Sozaki-r	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
514d2788a51Sozaki-r	$atf_ifconfig vlan1 $af $local1/$prefix
515d2788a51Sozaki-r	$atf_ifconfig vlan1 up
516d04fb9baSozaki-r
517d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_REMOTE
518d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
519d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
520d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $remote0/$prefix
521d2788a51Sozaki-r	$atf_ifconfig vlan0 up
522d2788a51Sozaki-r	$atf_ifconfig vlan1 create
523d2788a51Sozaki-r	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
524d2788a51Sozaki-r	$atf_ifconfig vlan1 $af $remote1/$prefix
525d2788a51Sozaki-r	$atf_ifconfig vlan1 up
526d04fb9baSozaki-r
527d04fb9baSozaki-r	export RUMP_SERVER=$SOCK_LOCAL
528d04fb9baSozaki-r	atf_check -s exit:0 -o ignore $ping_cmd $remote0
529d04fb9baSozaki-r	atf_check -s exit:0 -o ignore $ping_cmd $remote1
530d04fb9baSozaki-r}
531d04fb9baSozaki-r
532d04fb9baSozaki-ratf_test_case vlan_vlanid cleanup
533d04fb9baSozaki-rvlan_vlanid_head()
534d04fb9baSozaki-r{
535d04fb9baSozaki-r
536d04fb9baSozaki-r	atf_set "descr" "tests of configuration for vlan id"
537d04fb9baSozaki-r	atf_set "require.progs" "rump_server"
538d04fb9baSozaki-r}
539d04fb9baSozaki-r
540d04fb9baSozaki-rvlan_vlanid_body()
541d04fb9baSozaki-r{
542d04fb9baSozaki-r	rump_server_start $SOCK_LOCAL vlan
543d04fb9baSozaki-r	rump_server_start $SOCK_REMOTE vlan
544d04fb9baSozaki-r
545d04fb9baSozaki-r	vlan_vlanid_body_common inet
546d04fb9baSozaki-r}
547d04fb9baSozaki-r
548d04fb9baSozaki-rvlan_vlanid_cleanup()
549d04fb9baSozaki-r{
550d04fb9baSozaki-r
551d04fb9baSozaki-r	$DEBUG && dump
552d04fb9baSozaki-r	cleanup
553d04fb9baSozaki-r}
554d04fb9baSozaki-r
555d04fb9baSozaki-ratf_test_case vlan_vlanid6 cleanup
556d04fb9baSozaki-rvlan_vlanid6_head()
557d04fb9baSozaki-r{
558d04fb9baSozaki-r
559d04fb9baSozaki-r	atf_set "descr" "tests of configuration for vlan id using IPv6"
560d04fb9baSozaki-r	atf_set "require.progs" "rump_server"
561d04fb9baSozaki-r}
562d04fb9baSozaki-r
563d04fb9baSozaki-r
564d04fb9baSozaki-rvlan_vlanid6_body()
565d04fb9baSozaki-r{
566d04fb9baSozaki-r	rump_server_start $SOCK_LOCAL vlan netinet6
567d04fb9baSozaki-r	rump_server_start $SOCK_REMOTE vlan netinet6
568d04fb9baSozaki-r
569d04fb9baSozaki-r	vlan_vlanid_body_common inet6
570d04fb9baSozaki-r}
571d04fb9baSozaki-r
572d04fb9baSozaki-rvlan_vlanid6_cleanup()
573d04fb9baSozaki-r{
574d04fb9baSozaki-r
575d04fb9baSozaki-r	$DEBUG && dump
576d04fb9baSozaki-r	cleanup
577d04fb9baSozaki-r}
578d04fb9baSozaki-r
579d04fb9baSozaki-rvlan_configs_body_common()
580d04fb9baSozaki-r{
581d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
582d2788a51Sozaki-r
583d04fb9baSozaki-r	export RUMP_SERVER=${SOCK_LOCAL}
584d04fb9baSozaki-r
585d2788a51Sozaki-r	$atf_ifconfig shmif0 create
586d2788a51Sozaki-r	$atf_ifconfig shmif1 create
587dc663ea9Sknakahara	# unset U/L bit to detect a bug fixed by if_vlan.c:r1.132
588d2788a51Sozaki-r	$atf_ifconfig shmif0 link b0:a0:75:00:01:00 active
589d2788a51Sozaki-r	$atf_ifconfig shmif1 link b0:a0:75:00:01:01 active
590d2788a51Sozaki-r	$atf_ifconfig vlan0 create
591d04fb9baSozaki-r
59288944874Syamaguchi	atf_check -s exit:0 -o match:'status: +down' \
59388944874Syamaguchi	    rump.ifconfig vlan0
594d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
595d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
59688944874Syamaguchi	atf_check -s exit:0 -o match:'status: +down' \
59788944874Syamaguchi	    rump.ifconfig vlan0
598d04fb9baSozaki-r
599d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
600d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif shmif0
601d04fb9baSozaki-r
602d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
6035b47a999Sozaki-r	atf_check -s exit:0 rump.ifconfig vlan0 -vlanif shmif1
6045b47a999Sozaki-r	atf_check -s exit:0 rump.ifconfig vlan0 -vlanif shmif2
605d04fb9baSozaki-r
606d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
607d04fb9baSozaki-r
608d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
609d04fb9baSozaki-r	atf_check -s exit:0 -e match:'Invalid argument' \
610d04fb9baSozaki-r	    rump.ifconfig vlan0 mtu 1497
611d2788a51Sozaki-r	$atf_ifconfig vlan0 mtu 1496
612d2788a51Sozaki-r	$atf_ifconfig vlan0 mtu 42
613d04fb9baSozaki-r	atf_check -s exit:0 -e match:'Invalid argument' \
614d04fb9baSozaki-r	    rump.ifconfig vlan0 mtu 41
615d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif
616d668e406Smsaitoh
617d2788a51Sozaki-r	$atf_ifconfig vlan1 create
618d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
619d668e406Smsaitoh	atf_check -s not-exit:0 -e match:'File exists' \
620d668e406Smsaitoh	    rump.ifconfig vlan1 vlan 10 vlanif shmif0
621d2788a51Sozaki-r	$atf_ifconfig vlan1 vlan 10 vlanif shmif1
62265c393a1Smsaitoh
623d2788a51Sozaki-r	$atf_ifconfig vlan1 -vlanif shmif1
624d2788a51Sozaki-r	$atf_ifconfig vlan1 vlan 10 vlanif shmif1
62565c393a1Smsaitoh
626d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif shmif0
627d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
628d04fb9baSozaki-r}
629d04fb9baSozaki-r
630d04fb9baSozaki-ratf_test_case vlan_configs cleanup
631d04fb9baSozaki-rvlan_configs_head()
632d04fb9baSozaki-r{
633d04fb9baSozaki-r	atf_set "descr" "tests of configuration except vlan id"
634d04fb9baSozaki-r	atf_set "require.progs" "rump_server"
635d04fb9baSozaki-r}
636d04fb9baSozaki-r
637d04fb9baSozaki-rvlan_configs_body()
638d04fb9baSozaki-r{
639d04fb9baSozaki-r
640d04fb9baSozaki-r	rump_server_start $SOCK_LOCAL vlan
641d04fb9baSozaki-r
642d04fb9baSozaki-r	vlan_configs_body_common
643d04fb9baSozaki-r
644d04fb9baSozaki-r}
645d04fb9baSozaki-r
646d04fb9baSozaki-rvlan_configs_cleanup()
647d04fb9baSozaki-r{
648d04fb9baSozaki-r
649d04fb9baSozaki-r	$DEBUG && dump
650d04fb9baSozaki-r	cleanup
651d04fb9baSozaki-r}
652d04fb9baSozaki-r
653d04fb9baSozaki-ratf_test_case vlan_configs6 cleanup
654d04fb9baSozaki-rvlan_configs6_head()
655d04fb9baSozaki-r{
656d04fb9baSozaki-r	atf_set "descr" "tests of configuration except vlan id using IPv6"
657d04fb9baSozaki-r	atf_set "require.progs" "rump_server"
658d04fb9baSozaki-r}
659d04fb9baSozaki-r
660d04fb9baSozaki-rvlan_configs6_body()
661d04fb9baSozaki-r{
662d04fb9baSozaki-r	rump_server_start $SOCK_LOCAL vlan netinet6
663d04fb9baSozaki-r
664d04fb9baSozaki-r	vlan_configs_body_common
665d04fb9baSozaki-r}
666d04fb9baSozaki-r
667d04fb9baSozaki-rvlan_configs6_cleanup()
668d04fb9baSozaki-r{
669d04fb9baSozaki-r	$DEBUG && dump
670d04fb9baSozaki-r	cleanup
671d04fb9baSozaki-r}
672d04fb9baSozaki-r
673039773a0Sozaki-rvlan_bridge_body_common()
674039773a0Sozaki-r{
675d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
67675ee67b1Syamaguchi	local atf_brconfig="atf_check -s exit:0 $HIJACKING /sbin/brconfig"
677039773a0Sozaki-r
678039773a0Sozaki-r	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
679039773a0Sozaki-r
680039773a0Sozaki-r	export RUMP_SERVER=$SOCK_LOCAL
681d2788a51Sozaki-r	$atf_ifconfig shmif0 up
682039773a0Sozaki-r
683d2788a51Sozaki-r	$atf_ifconfig vlan0 create
684039773a0Sozaki-r	$DEBUG && rump.ifconfig vlan0
685039773a0Sozaki-r
686d2788a51Sozaki-r	$atf_ifconfig bridge0 create
687d2788a51Sozaki-r	$atf_ifconfig bridge0 up
688039773a0Sozaki-r
68975ee67b1Syamaguchi	#
69075ee67b1Syamaguchi	# Add vlan to bridge member
69175ee67b1Syamaguchi	#
69275ee67b1Syamaguchi	$atf_ifconfig bridge0 mtu 1496
6930a2abb49Syamaguchi
6940a2abb49Syamaguchi	# vlan0 can not add to bridge member
6950a2abb49Syamaguchi	# because it is not an ethernet device
6960a2abb49Syamaguchi	atf_check -s not-exit:0 -e match:'Invalid argument' \
6970a2abb49Syamaguchi	    $HIJACKING /sbin/brconfig bridge0 add vlan0
6980a2abb49Syamaguchi
6990a2abb49Syamaguchi	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
7000a2abb49Syamaguchi	$atf_ifconfig vlan0 up
70175ee67b1Syamaguchi	atf_check -s exit:0 -o match:'mtu 1496' rump.ifconfig vlan0
70275ee67b1Syamaguchi
7030a2abb49Syamaguchi	# vlan0 becomes an ethernet device
7040a2abb49Syamaguchi	# after attaching the parent interface
70575ee67b1Syamaguchi	$atf_brconfig bridge0 add vlan0
7060a2abb49Syamaguchi	$DEBUG && $HIJACKING /sbin/brconfig bridge0
7070a2abb49Syamaguchi
70875ee67b1Syamaguchi	$atf_brconfig bridge0 delete vlan0
70975ee67b1Syamaguchi
7100a2abb49Syamaguchi	$atf_brconfig bridge0 add vlan0
7110a2abb49Syamaguchi	$atf_ifconfig vlan0 -vlanif
7120a2abb49Syamaguchi	atf_check -s exit:0 -o not-match:'vlan0' \
7130a2abb49Syamaguchi	    $HIJACKING /sbin/brconfig bridge0
7140a2abb49Syamaguchi	atf_check -s not-exit:0 -e match:'No such' \
7150a2abb49Syamaguchi	    $HIJACKING /sbin/brconfig bridge0 delete vlan0
7160a2abb49Syamaguchi
71775ee67b1Syamaguchi	#
71875ee67b1Syamaguchi	# decrease MTU on adding to bridge member
71975ee67b1Syamaguchi	#
72075ee67b1Syamaguchi	$atf_ifconfig bridge0 mtu 1495
7210a2abb49Syamaguchi	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
7220a2abb49Syamaguchi	$atf_ifconfig vlan0 up
72375ee67b1Syamaguchi	atf_check -s exit:0 -o match:'mtu 1496' rump.ifconfig vlan0
72475ee67b1Syamaguchi
72575ee67b1Syamaguchi	$atf_brconfig bridge0 add vlan0
726b14ea2d4Syamaguchi	$DEBUG && $HIJACKING /sbin/brconfig bridge0
72775ee67b1Syamaguchi	atf_check -s exit:0 -o match:'mtu 1495' rump.ifconfig vlan0
72875ee67b1Syamaguchi	$atf_brconfig bridge0 delete vlan0
72975ee67b1Syamaguchi
73075ee67b1Syamaguchi	#
73175ee67b1Syamaguchi	# increase MTU on adding to bridge member
73275ee67b1Syamaguchi	#
73375ee67b1Syamaguchi	$atf_ifconfig bridge0 mtu 1496
73475ee67b1Syamaguchi	$atf_ifconfig vlan0 mtu 1495
73575ee67b1Syamaguchi	$atf_brconfig bridge0 add vlan0
73675ee67b1Syamaguchi
737b14ea2d4Syamaguchi	$DEBUG && $HIJACKING /sbin/brconfig bridge0
73875ee67b1Syamaguchi	atf_check -s exit:0 -o match:'mtu 1496' rump.ifconfig vlan0
73975ee67b1Syamaguchi	$atf_brconfig bridge0 delete vlan0
74075ee67b1Syamaguchi
74175ee67b1Syamaguchi	$atf_ifconfig bridge0 mtu 1497
74275ee67b1Syamaguchi	atf_check -s not-exit:0 -o ignore -e ignore \
743b14ea2d4Syamaguchi	    $HIJACKING /sbin/brconfig bridge0 add vlan0
74475ee67b1Syamaguchi
74575ee67b1Syamaguchi	#
74675ee67b1Syamaguchi	# Destroy a vlan interface that is bridge member
74775ee67b1Syamaguchi	#
74875ee67b1Syamaguchi	$atf_ifconfig bridge0 mtu 1496
74975ee67b1Syamaguchi	$atf_brconfig bridge0 add vlan0
750d2788a51Sozaki-r	$atf_ifconfig vlan0 destroy
751039773a0Sozaki-r
752039773a0Sozaki-r	rump_server_destroy_ifaces
753039773a0Sozaki-r}
754039773a0Sozaki-r
755039773a0Sozaki-ratf_test_case vlan_bridge cleanup
756039773a0Sozaki-rvlan_bridge_head()
757039773a0Sozaki-r{
758039773a0Sozaki-r
759039773a0Sozaki-r	atf_set "descr" "tests of vlan interfaces with bridges (IPv4)"
760039773a0Sozaki-r	atf_set "require.progs" "rump_server"
761039773a0Sozaki-r}
762039773a0Sozaki-r
763039773a0Sozaki-rvlan_bridge_body()
764039773a0Sozaki-r{
765039773a0Sozaki-r
766039773a0Sozaki-r	rump_server_start $SOCK_LOCAL vlan bridge
767039773a0Sozaki-r	vlan_bridge_body_common
768039773a0Sozaki-r}
769039773a0Sozaki-r
770039773a0Sozaki-rvlan_bridge_cleanup()
771039773a0Sozaki-r{
772039773a0Sozaki-r
773039773a0Sozaki-r	$DEBUG && dump
774039773a0Sozaki-r	cleanup
775039773a0Sozaki-r}
776039773a0Sozaki-r
777039773a0Sozaki-ratf_test_case vlan_bridge6 cleanup
778039773a0Sozaki-rvlan_bridge6_head()
779039773a0Sozaki-r{
780039773a0Sozaki-r
781039773a0Sozaki-r	atf_set "descr" "tests of vlan interfaces with bridges (IPv6)"
782039773a0Sozaki-r	atf_set "require.progs" "rump_server"
783039773a0Sozaki-r}
784039773a0Sozaki-r
785039773a0Sozaki-rvlan_bridge6_body()
786039773a0Sozaki-r{
787039773a0Sozaki-r
788039773a0Sozaki-r	rump_server_start $SOCK_LOCAL vlan netinet6 bridge
789039773a0Sozaki-r	vlan_bridge_body_common
790039773a0Sozaki-r}
791039773a0Sozaki-r
792039773a0Sozaki-rvlan_bridge6_cleanup()
793039773a0Sozaki-r{
794039773a0Sozaki-r
795039773a0Sozaki-r	$DEBUG && dump
796039773a0Sozaki-r	cleanup
797039773a0Sozaki-r}
798039773a0Sozaki-r
7997a5814c3Syamaguchivlan_multicast_body_common()
8007a5814c3Syamaguchi{
801d2788a51Sozaki-r	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
8027a5814c3Syamaguchi	local af="inet"
8037a5814c3Syamaguchi	local local0=$IP_LOCAL0
8047a5814c3Syamaguchi	local local1=$IP_LOCAL1
8057a5814c3Syamaguchi	local mcaddr=$IP_MCADDR0
8067a5814c3Syamaguchi	local eth_mcaddr=$ETH_IP_MCADDR0
8077a5814c3Syamaguchi	local prefix=24
8087a5814c3Syamaguchi	local siocXmulti="$(atf_get_srcdir)/siocXmulti"
809d2788a51Sozaki-r	local atf_siocXmulti="atf_check -s exit:0 $HIJACKING $siocXmulti"
8107a5814c3Syamaguchi
8117a5814c3Syamaguchi	if [ x"$1" =  x"inet6" ]; then
8127a5814c3Syamaguchi		af="inet6"
8137a5814c3Syamaguchi		prefix=64
8147a5814c3Syamaguchi		local0=$IP6_LOCAL0
8157a5814c3Syamaguchi		local1=$IP6_LOCAL1
8167a5814c3Syamaguchi		mcaddr=$IP6_MCADDR0
8177a5814c3Syamaguchi		eth_mcaddr=$ETH_IP6_MCADDR0
8187a5814c3Syamaguchi	fi
8197a5814c3Syamaguchi
8207a5814c3Syamaguchi	export RUMP_SERVER=$SOCK_LOCAL
8217a5814c3Syamaguchi
822d2788a51Sozaki-r	$atf_ifconfig shmif0 create
823d2788a51Sozaki-r	$atf_ifconfig shmif0 linkstr net0 up
824d2788a51Sozaki-r	$atf_ifconfig vlan0 create
825d2788a51Sozaki-r	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
826d2788a51Sozaki-r	$atf_ifconfig vlan0 $af $local0/$prefix up
827d2788a51Sozaki-r	$atf_ifconfig vlan1 create
828d2788a51Sozaki-r	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
829d2788a51Sozaki-r	$atf_ifconfig vlan1 $af $local1/$prefix up
830d2788a51Sozaki-r	$atf_ifconfig -w 10
8317a5814c3Syamaguchi
8327a5814c3Syamaguchi	# check the initial state
8337a5814c3Syamaguchi	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
8347a5814c3Syamaguchi
8357a5814c3Syamaguchi	# add a multicast address
836d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
8377a5814c3Syamaguchi	atf_check -s exit:0 -o match:"$eth_mcaddr" $HIJACKING ifmcstat
8387a5814c3Syamaguchi
8397a5814c3Syamaguchi	# delete the address
840d2788a51Sozaki-r	$atf_siocXmulti del vlan0 $mcaddr
8417a5814c3Syamaguchi	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
8427a5814c3Syamaguchi
8437a5814c3Syamaguchi	# delete a non-existing address
8445b47a999Sozaki-r	atf_check -s not-exit:0 -e match:"Invalid argument" \
8455b47a999Sozaki-r	    $HIJACKING $siocXmulti del vlan0 $mcaddr
8467a5814c3Syamaguchi
8477a5814c3Syamaguchi	# add an address to different interfaces
848d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
849d2788a51Sozaki-r	$atf_siocXmulti add vlan1 $mcaddr
850a9404914Snisimura	atf_check -s exit:0 -o match:"${eth_mcaddr} refcount 2" $HIJACKING ifmcstat
851d2788a51Sozaki-r	$atf_siocXmulti del vlan0 $mcaddr
8527a5814c3Syamaguchi
8537a5814c3Syamaguchi	# delete the address with invalid interface
8547071c103Syamaguchi	atf_check -s not-exit:0 -e match:"Invalid argument" \
8557a5814c3Syamaguchi	    $HIJACKING $siocXmulti del vlan0 $mcaddr
8567a5814c3Syamaguchi
857d2788a51Sozaki-r	$atf_siocXmulti del vlan1 $mcaddr
8587a5814c3Syamaguchi
8597a5814c3Syamaguchi	# add and delete a same address more than once
860d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
861d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
862d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
863a9404914Snisimura	atf_check -s exit:0 -o match:"${eth_mcaddr} refcount 3" $HIJACKING ifmcstat
864d2788a51Sozaki-r	$atf_siocXmulti del vlan0 $mcaddr
865d2788a51Sozaki-r	$atf_siocXmulti del vlan0 $mcaddr
866d2788a51Sozaki-r	$atf_siocXmulti del vlan0 $mcaddr
8677a5814c3Syamaguchi	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
8687a5814c3Syamaguchi
8697a5814c3Syamaguchi	# delete all address added to parent device when remove
8707a5814c3Syamaguchi	# the config of parent interface
871d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
872d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
873d2788a51Sozaki-r	$atf_siocXmulti add vlan0 $mcaddr
874d2788a51Sozaki-r	$atf_ifconfig vlan0 -vlanif shmif0
8757a5814c3Syamaguchi	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
8767a5814c3Syamaguchi}
8777a5814c3Syamaguchi
8787a5814c3Syamaguchiatf_test_case vlan_multicast cleanup
8797a5814c3Syamaguchivlan_multicast_head()
8807a5814c3Syamaguchi{
8817a5814c3Syamaguchi	atf_set "descr" "tests of multicast address adding and deleting"
8827a5814c3Syamaguchi	atf_set "require.progs" "rump_server"
8837a5814c3Syamaguchi}
8847a5814c3Syamaguchi
8857a5814c3Syamaguchivlan_multicast_body()
8867a5814c3Syamaguchi{
8877a5814c3Syamaguchi	rump_server_start $SOCK_LOCAL vlan
8887a5814c3Syamaguchi
8897a5814c3Syamaguchi	vlan_multicast_body_common inet
8907a5814c3Syamaguchi}
8917a5814c3Syamaguchi
8927a5814c3Syamaguchivlan_multicast_cleanup()
8937a5814c3Syamaguchi{
8947a5814c3Syamaguchi	$DEBUG && dump
8957a5814c3Syamaguchi	cleanup
8967a5814c3Syamaguchi}
8977a5814c3Syamaguchi
8987a5814c3Syamaguchiatf_test_case vlan_multicast6 cleanup
8997a5814c3Syamaguchivlan_multicast6_head()
9007a5814c3Syamaguchi{
9017a5814c3Syamaguchi	atf_set "descr" "tests of multicast address adding and deleting with IPv6"
9027a5814c3Syamaguchi	atf_set "require.progs" "rump_server"
9037a5814c3Syamaguchi}
9047a5814c3Syamaguchi
9057a5814c3Syamaguchivlan_multicast6_body()
9067a5814c3Syamaguchi{
9077a5814c3Syamaguchi	rump_server_start $SOCK_LOCAL vlan netinet6
9087a5814c3Syamaguchi
9097a5814c3Syamaguchi	vlan_multicast_body_common inet6
9107a5814c3Syamaguchi}
9117a5814c3Syamaguchi
9127a5814c3Syamaguchivlan_multicast6_cleanup()
9137a5814c3Syamaguchi{
9147a5814c3Syamaguchi	$DEBUG && dump
9157a5814c3Syamaguchi	cleanup
9167a5814c3Syamaguchi}
9177a5814c3Syamaguchi
918d659b7f1Syamaguchiatf_test_case vlan_promisc cleanup
919d659b7f1Syamaguchivlan_promisc_head()
920d659b7f1Syamaguchi{
921d659b7f1Syamaguchi
922d659b7f1Syamaguchi	atf_set "descr" "tests of IFF_PROMISC of vlan"
923d659b7f1Syamaguchi	atf_set "require.progs" "rump_server"
924d659b7f1Syamaguchi}
925d659b7f1Syamaguchi
926d659b7f1Syamaguchivlan_promisc_body()
927d659b7f1Syamaguchi{
928d659b7f1Syamaguchi	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
929d659b7f1Syamaguchi	local atf_brconfig="atf_check -s exit:0 $HIJACKING /sbin/brconfig"
930d659b7f1Syamaguchi	local atf_arp="atf_check -s exit:0 rump.arp"
931d659b7f1Syamaguchi	local bpfopen="$HIJACKING $(atf_get_srcdir)/bpfopen"
932*cf12f019Syamaguchi	bpfopen="$bpfopen -dv -b /rump/dev/bpf"
933*cf12f019Syamaguchi	local pidfile="./bpfopen.pid"
934d659b7f1Syamaguchi	local macaddr=""
935d659b7f1Syamaguchi
936d659b7f1Syamaguchi	rump_server_bpf_start $SOCK_LOCAL vlan bridge
937d659b7f1Syamaguchi	rump_server_start $SOCK_REMOTE vlan
938d659b7f1Syamaguchi
939d659b7f1Syamaguchi	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
940d659b7f1Syamaguchi	rump_server_add_iface $SOCK_LOCAL shmif1
941d659b7f1Syamaguchi	rump_server_add_iface $SOCK_LOCAL vlan0
942d659b7f1Syamaguchi	rump_server_add_iface $SOCK_LOCAL vlan1
943d659b7f1Syamaguchi	rump_server_add_iface $SOCK_LOCAL bridge0
944d659b7f1Syamaguchi
945d659b7f1Syamaguchi	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
946d659b7f1Syamaguchi	rump_server_add_iface $SOCK_REMOTE vlan0
947d659b7f1Syamaguchi
948d659b7f1Syamaguchi	macaddr=$(get_macaddr $SOCK_LOCAL shmif1)
949d659b7f1Syamaguchi
950d659b7f1Syamaguchi	export RUMP_SERVER=$SOCK_REMOTE
951d659b7f1Syamaguchi	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
952d659b7f1Syamaguchi	$atf_ifconfig shmif0 up
953d659b7f1Syamaguchi	$atf_ifconfig vlan0 inet $IP_REMOTE0/24
954d659b7f1Syamaguchi	$atf_ifconfig vlan0 up
955d659b7f1Syamaguchi	$atf_ifconfig -w 10
956d659b7f1Syamaguchi	$atf_arp -s $IP_LOCAL0 $macaddr
957d659b7f1Syamaguchi
958d659b7f1Syamaguchi	export RUMP_SERVER=$SOCK_LOCAL
959d659b7f1Syamaguchi	$atf_ifconfig bridge0 mtu 1496
960d659b7f1Syamaguchi	#
961d659b7f1Syamaguchi	# When vlan IF is PROMISC, the parent is also PROMISC
962d659b7f1Syamaguchi	#
963d659b7f1Syamaguchi	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
964d659b7f1Syamaguchi	$atf_ifconfig shmif0 up
965d659b7f1Syamaguchi	$atf_ifconfig vlan0 up
966d659b7f1Syamaguchi
967d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig vlan0
968d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig shmif0
969d659b7f1Syamaguchi
970d659b7f1Syamaguchi	$atf_brconfig bridge0 add vlan0
971d659b7f1Syamaguchi	$atf_ifconfig bridge0 up
972d659b7f1Syamaguchi	atf_check -s exit:0 -o match:'PROMISC' rump.ifconfig vlan0
973d659b7f1Syamaguchi	atf_check -s exit:0 -o match:'PROMISC' rump.ifconfig shmif0
974d659b7f1Syamaguchi
975d659b7f1Syamaguchi	$atf_ifconfig bridge0 down
976d659b7f1Syamaguchi	$atf_brconfig bridge0 delete vlan0
977d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig vlan0
978d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig shmif0
979d659b7f1Syamaguchi	$atf_ifconfig vlan0 -vlanif
980d659b7f1Syamaguchi
981d659b7f1Syamaguchi	#
982d659b7f1Syamaguchi	# drop unicast packets that is not for the host
983d659b7f1Syamaguchi	#
984d659b7f1Syamaguchi	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
985d659b7f1Syamaguchi	$atf_ifconfig -w 10
986d659b7f1Syamaguchi
987*cf12f019Syamaguchi	atf_check -s exit:0 -e match:'bpf opened' $bpfopen -p $pidfile shmif0
988d659b7f1Syamaguchi
989d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig vlan0
990d659b7f1Syamaguchi	atf_check -s exit:0 -o match:'PROMISC' rump.ifconfig shmif0
991d659b7f1Syamaguchi	atf_check -s exit:0 -o ignore rump.ifconfig -z vlan0
992d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'input:.*errors' \
993d659b7f1Syamaguchi	    rump.ifconfig -v vlan0
994d659b7f1Syamaguchi
995d659b7f1Syamaguchi	export RUMP_SERVER=$SOCK_REMOTE
996d659b7f1Syamaguchi	atf_check -s not-exit:0 -o ignore -e ignore \
997d659b7f1Syamaguchi	    rump.ping -c 3 -i 0.2 $IP_LOCAL0
998d659b7f1Syamaguchi
999d659b7f1Syamaguchi	export RUMP_SERVER=$SOCK_LOCAL
1000d659b7f1Syamaguchi	atf_check -s exit:0 -o match:'input:.*errors' \
1001d659b7f1Syamaguchi	    rump.ifconfig -v vlan0
1002d659b7f1Syamaguchi
1003*cf12f019Syamaguchi	atf_check -s exit:0 kill -TERM $(cat $pidfile)
1004d659b7f1Syamaguchi	sleep 2
1005d659b7f1Syamaguchi
1006d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig vlan0
1007d659b7f1Syamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig shmif0
100852b7dd9eSyamaguchi	$atf_ifconfig vlan0 -vlanif
100952b7dd9eSyamaguchi
101052b7dd9eSyamaguchi	#
101152b7dd9eSyamaguchi	# clear IFF_PROMISC after bpf_detach called from ether_ifdetach
101252b7dd9eSyamaguchi	#
101352b7dd9eSyamaguchi	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
101452b7dd9eSyamaguchi	$atf_ifconfig vlan0 up
101552b7dd9eSyamaguchi
1016*cf12f019Syamaguchi	atf_check -s exit:0 -e match:'bpf opened' $bpfopen -p $pidfile vlan0
101752b7dd9eSyamaguchi
101852b7dd9eSyamaguchi	atf_check -s exit:0 -o match:'PROMISC' rump.ifconfig vlan0
101952b7dd9eSyamaguchi	atf_check -s exit:0 -o match:'PROMISC' rump.ifconfig shmif0
102052b7dd9eSyamaguchi
102152b7dd9eSyamaguchi	$atf_ifconfig vlan0 -vlanif
102252b7dd9eSyamaguchi
102352b7dd9eSyamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig vlan0
102452b7dd9eSyamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig shmif0
102552b7dd9eSyamaguchi
1026*cf12f019Syamaguchi	atf_check -s exit:0 kill -TERM $(cat $pidfile)
1027*cf12f019Syamaguchi	sleep 2
102852b7dd9eSyamaguchi	atf_check -s exit:0 -o not-match:'PROMISC' rump.ifconfig vlan0
1029d659b7f1Syamaguchi}
1030d659b7f1Syamaguchi
1031d659b7f1Syamaguchivlan_promisc_cleanup()
1032d659b7f1Syamaguchi{
1033d659b7f1Syamaguchi
1034d659b7f1Syamaguchi	$DEBUG && dump
1035d659b7f1Syamaguchi	cleanup
1036d659b7f1Syamaguchi}
1037d659b7f1Syamaguchi
1038d8b2128bSozaki-ratf_init_test_cases()
1039d8b2128bSozaki-r{
1040d8b2128bSozaki-r
1041d8b2128bSozaki-r	atf_add_test_case vlan_create_destroy
1042d8b2128bSozaki-r	atf_add_test_case vlan_basic
1043d2674664Syamaguchi	atf_add_test_case vlan_auto_follow_mtu
1044d04fb9baSozaki-r	atf_add_test_case vlan_vlanid
1045d04fb9baSozaki-r	atf_add_test_case vlan_configs
1046039773a0Sozaki-r	atf_add_test_case vlan_bridge
10477a5814c3Syamaguchi	atf_add_test_case vlan_multicast
1048d659b7f1Syamaguchi	atf_add_test_case vlan_promisc
1049d04fb9baSozaki-r
1050d04fb9baSozaki-r	atf_add_test_case vlan_create_destroy6
1051d04fb9baSozaki-r	atf_add_test_case vlan_basic6
1052d2674664Syamaguchi	atf_add_test_case vlan_auto_follow_mtu6
1053d04fb9baSozaki-r	atf_add_test_case vlan_vlanid6
1054d04fb9baSozaki-r	atf_add_test_case vlan_configs6
1055039773a0Sozaki-r	atf_add_test_case vlan_bridge6
10567a5814c3Syamaguchi	atf_add_test_case vlan_multicast6
1057d8b2128bSozaki-r}
1058