xref: /freebsd/tests/sys/net/if_vlan.sh (revision 3e87f800f01b6d2cbe49924a01038379889d8b3b)
1fcd69db2SKristof Provost# $FreeBSD$
2fcd69db2SKristof Provost
3fcd69db2SKristof Provost. $(atf_get_srcdir)/../common/vnet.subr
4fcd69db2SKristof Provost
5fcd69db2SKristof Provostatf_test_case "basic" "cleanup"
6fcd69db2SKristof Provostbasic_head()
7fcd69db2SKristof Provost{
8fcd69db2SKristof Provost	atf_set descr 'Basic VLAN test'
9fcd69db2SKristof Provost	atf_set require.user root
10fcd69db2SKristof Provost}
11fcd69db2SKristof Provost
12fcd69db2SKristof Provostbasic_body()
13fcd69db2SKristof Provost{
14fcd69db2SKristof Provost	vnet_init
15fcd69db2SKristof Provost
16fcd69db2SKristof Provost	epair_vlan=$(vnet_mkepair)
17fcd69db2SKristof Provost
18fcd69db2SKristof Provost	vnet_mkjail alcatraz ${epair_vlan}a
19fcd69db2SKristof Provost	vnet_mkjail singsing ${epair_vlan}b
20fcd69db2SKristof Provost
21fcd69db2SKristof Provost	vlan0=$(jexec alcatraz ifconfig vlan create vlandev ${epair_vlan}a \
22fcd69db2SKristof Provost		vlan 42)
23fcd69db2SKristof Provost	jexec alcatraz ifconfig ${epair_vlan}a up
24fcd69db2SKristof Provost	jexec alcatraz ifconfig ${vlan0} 10.0.0.1/24 up
25fcd69db2SKristof Provost
26fcd69db2SKristof Provost	vlan1=$(jexec singsing ifconfig vlan create vlandev ${epair_vlan}b \
27fcd69db2SKristof Provost		vlan 42)
28fcd69db2SKristof Provost	jexec singsing ifconfig ${epair_vlan}b up
29fcd69db2SKristof Provost	jexec singsing ifconfig ${vlan1} 10.0.0.2/24 up
30fcd69db2SKristof Provost
31fcd69db2SKristof Provost	atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1
32fcd69db2SKristof Provost}
33fcd69db2SKristof Provost
34fcd69db2SKristof Provostbasic_cleanup()
35fcd69db2SKristof Provost{
36fcd69db2SKristof Provost	vnet_cleanup
37fcd69db2SKristof Provost}
38fcd69db2SKristof Provost
39c7cffd65SAlexander V. Chernikov# Simple Q-in-Q (802.1Q over 802.1ad)
40c7cffd65SAlexander V. Chernikov
41c7cffd65SAlexander V. Chernikovatf_test_case "qinq_simple" "cleanup"
42c7cffd65SAlexander V. Chernikovqinq_simple_head()
43c7cffd65SAlexander V. Chernikov{
44c7cffd65SAlexander V. Chernikov	atf_set descr 'Simple Q-in-Q test (802.1Q over 802.1ad)'
45c7cffd65SAlexander V. Chernikov	atf_set require.user root
46c7cffd65SAlexander V. Chernikov}
47c7cffd65SAlexander V. Chernikov
48c7cffd65SAlexander V. Chernikovqinq_simple_body()
49c7cffd65SAlexander V. Chernikov{
50c7cffd65SAlexander V. Chernikov	vnet_init
51c7cffd65SAlexander V. Chernikov
52c7cffd65SAlexander V. Chernikov	epair_qinq=$(vnet_mkepair)
53c7cffd65SAlexander V. Chernikov
54c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq0 ${epair_qinq}a
55c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq1 ${epair_qinq}b
56c7cffd65SAlexander V. Chernikov
57c7cffd65SAlexander V. Chernikov	vlan5a=$(jexec jqinq0 ifconfig vlan create \
58c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
59c7cffd65SAlexander V. Chernikov	vlan42a=$(jexec jqinq0 ifconfig vlan create \
60c7cffd65SAlexander V. Chernikov		vlandev ${vlan5a} vlan 42 vlanproto 802.1q)
61c7cffd65SAlexander V. Chernikov	jexec jqinq0 ifconfig ${epair_qinq}a up
62c7cffd65SAlexander V. Chernikov	jexec jqinq0 ifconfig ${vlan5a} up
63c7cffd65SAlexander V. Chernikov	jexec jqinq0 ifconfig ${vlan42a} 10.5.42.1/24 up
64c7cffd65SAlexander V. Chernikov
65c7cffd65SAlexander V. Chernikov	vlan5b=$(jexec jqinq1 ifconfig vlan create \
66c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
67c7cffd65SAlexander V. Chernikov	vlan42b=$(jexec jqinq1 ifconfig vlan create \
68c7cffd65SAlexander V. Chernikov		vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
69c7cffd65SAlexander V. Chernikov	jexec jqinq1 ifconfig ${epair_qinq}b up
70c7cffd65SAlexander V. Chernikov	jexec jqinq1 ifconfig ${vlan5b} up
71c7cffd65SAlexander V. Chernikov	jexec jqinq1 ifconfig ${vlan42b} 10.5.42.2/24 up
72c7cffd65SAlexander V. Chernikov
73c7cffd65SAlexander V. Chernikov	atf_check -s exit:0 -o ignore jexec jqinq1 ping -c 1 10.5.42.1
74c7cffd65SAlexander V. Chernikov}
75c7cffd65SAlexander V. Chernikov
76c7cffd65SAlexander V. Chernikovqinq_simple_cleanup()
77c7cffd65SAlexander V. Chernikov{
78c7cffd65SAlexander V. Chernikov	vnet_cleanup
79c7cffd65SAlexander V. Chernikov}
80c7cffd65SAlexander V. Chernikov
81c7cffd65SAlexander V. Chernikov# Deep Q-in-Q (802.1Q over 802.1ad over 802.1ad)
82c7cffd65SAlexander V. Chernikov
83c7cffd65SAlexander V. Chernikovatf_test_case "qinq_deep" "cleanup"
84c7cffd65SAlexander V. Chernikovqinq_deep_head()
85c7cffd65SAlexander V. Chernikov{
86c7cffd65SAlexander V. Chernikov	atf_set descr 'Deep Q-in-Q test (802.1Q over 802.1ad over 802.1ad)'
87c7cffd65SAlexander V. Chernikov	atf_set require.user root
88c7cffd65SAlexander V. Chernikov}
89c7cffd65SAlexander V. Chernikov
90c7cffd65SAlexander V. Chernikovqinq_deep_body()
91c7cffd65SAlexander V. Chernikov{
92c7cffd65SAlexander V. Chernikov	vnet_init
93c7cffd65SAlexander V. Chernikov
94c7cffd65SAlexander V. Chernikov	epair_qinq=$(vnet_mkepair)
95c7cffd65SAlexander V. Chernikov
96c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq2 ${epair_qinq}a
97c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq3 ${epair_qinq}b
98c7cffd65SAlexander V. Chernikov
99c7cffd65SAlexander V. Chernikov	vlan5a=$(jexec jqinq2 ifconfig vlan create \
100c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
101c7cffd65SAlexander V. Chernikov	vlan6a=$(jexec jqinq2 ifconfig vlan create \
102c7cffd65SAlexander V. Chernikov		vlandev ${vlan5a} vlan 6 vlanproto 802.1ad)
103c7cffd65SAlexander V. Chernikov	vlan42a=$(jexec jqinq2 ifconfig vlan create \
104c7cffd65SAlexander V. Chernikov		vlandev ${vlan6a} vlan 42 vlanproto 802.1q)
105c7cffd65SAlexander V. Chernikov	jexec jqinq2 ifconfig ${epair_qinq}a up
106c7cffd65SAlexander V. Chernikov	jexec jqinq2 ifconfig ${vlan5a} up
107c7cffd65SAlexander V. Chernikov	jexec jqinq2 ifconfig ${vlan6a} up
108c7cffd65SAlexander V. Chernikov	jexec jqinq2 ifconfig ${vlan42a} 10.6.42.1/24 up
109c7cffd65SAlexander V. Chernikov
110c7cffd65SAlexander V. Chernikov	vlan5b=$(jexec jqinq3 ifconfig vlan create \
111c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
112c7cffd65SAlexander V. Chernikov	vlan6b=$(jexec jqinq3 ifconfig vlan create \
113c7cffd65SAlexander V. Chernikov		vlandev ${vlan5b} vlan 6 vlanproto 802.1ad)
114c7cffd65SAlexander V. Chernikov	vlan42b=$(jexec jqinq3 ifconfig vlan create \
115c7cffd65SAlexander V. Chernikov		vlandev ${vlan6b} vlan 42 vlanproto 802.1q)
116c7cffd65SAlexander V. Chernikov	jexec jqinq3 ifconfig ${epair_qinq}b up
117c7cffd65SAlexander V. Chernikov	jexec jqinq3 ifconfig ${vlan5b} up
118c7cffd65SAlexander V. Chernikov	jexec jqinq3 ifconfig ${vlan6b} up
119c7cffd65SAlexander V. Chernikov	jexec jqinq3 ifconfig ${vlan42b} 10.6.42.2/24 up
120c7cffd65SAlexander V. Chernikov
121c7cffd65SAlexander V. Chernikov	atf_check -s exit:0 -o ignore jexec jqinq3 ping -c 1 10.6.42.1
122c7cffd65SAlexander V. Chernikov}
123c7cffd65SAlexander V. Chernikov
124c7cffd65SAlexander V. Chernikovqinq_deep_cleanup()
125c7cffd65SAlexander V. Chernikov{
126c7cffd65SAlexander V. Chernikov	vnet_cleanup
127c7cffd65SAlexander V. Chernikov}
128c7cffd65SAlexander V. Chernikov
129c7cffd65SAlexander V. Chernikov# Legacy Q-in-Q (802.1Q over 802.1Q)
130c7cffd65SAlexander V. Chernikov
131c7cffd65SAlexander V. Chernikovatf_test_case "qinq_legacy" "cleanup"
132c7cffd65SAlexander V. Chernikovqinq_legacy_head()
133c7cffd65SAlexander V. Chernikov{
134c7cffd65SAlexander V. Chernikov	atf_set descr 'Legacy Q-in-Q test (802.1Q over 802.1Q)'
135c7cffd65SAlexander V. Chernikov	atf_set require.user root
136c7cffd65SAlexander V. Chernikov}
137c7cffd65SAlexander V. Chernikov
138c7cffd65SAlexander V. Chernikovqinq_legacy_body()
139c7cffd65SAlexander V. Chernikov{
140c7cffd65SAlexander V. Chernikov	vnet_init
141c7cffd65SAlexander V. Chernikov
142c7cffd65SAlexander V. Chernikov	epair_qinq=$(vnet_mkepair)
143c7cffd65SAlexander V. Chernikov
144c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq4 ${epair_qinq}a
145c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq5 ${epair_qinq}b
146c7cffd65SAlexander V. Chernikov
147c7cffd65SAlexander V. Chernikov	vlan5a=$(jexec jqinq4 ifconfig vlan create \
148c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}a vlan 5)
149c7cffd65SAlexander V. Chernikov	vlan42a=$(jexec jqinq4 ifconfig vlan create \
150c7cffd65SAlexander V. Chernikov		vlandev ${vlan5a} vlan 42)
151c7cffd65SAlexander V. Chernikov	jexec jqinq4 ifconfig ${epair_qinq}a up
152c7cffd65SAlexander V. Chernikov	jexec jqinq4 ifconfig ${vlan5a} up
153c7cffd65SAlexander V. Chernikov	jexec jqinq4 ifconfig ${vlan42a} 10.5.42.1/24 up
154c7cffd65SAlexander V. Chernikov
155c7cffd65SAlexander V. Chernikov	vlan5b=$(jexec jqinq5 ifconfig vlan create \
156c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}b vlan 5)
157c7cffd65SAlexander V. Chernikov	vlan42b=$(jexec jqinq5 ifconfig vlan create \
158c7cffd65SAlexander V. Chernikov		vlandev ${vlan5b} vlan 42)
159c7cffd65SAlexander V. Chernikov	jexec jqinq5 ifconfig ${epair_qinq}b up
160c7cffd65SAlexander V. Chernikov	jexec jqinq5 ifconfig ${vlan5b} up
161c7cffd65SAlexander V. Chernikov	jexec jqinq5 ifconfig ${vlan42b} 10.5.42.2/24 up
162c7cffd65SAlexander V. Chernikov
163c7cffd65SAlexander V. Chernikov	atf_check -s exit:0 -o ignore jexec jqinq5 ping -c 1 10.5.42.1
164c7cffd65SAlexander V. Chernikov}
165c7cffd65SAlexander V. Chernikov
166c7cffd65SAlexander V. Chernikovqinq_legacy_cleanup()
167c7cffd65SAlexander V. Chernikov{
168c7cffd65SAlexander V. Chernikov	vnet_cleanup
169c7cffd65SAlexander V. Chernikov}
170c7cffd65SAlexander V. Chernikov
171c7cffd65SAlexander V. Chernikov# Simple Q-in-Q with dot notation
172c7cffd65SAlexander V. Chernikov
173c7cffd65SAlexander V. Chernikovatf_test_case "qinq_dot" "cleanup"
174c7cffd65SAlexander V. Chernikovqinq_dot_head()
175c7cffd65SAlexander V. Chernikov{
176c7cffd65SAlexander V. Chernikov	atf_set descr 'Simple Q-in-Q test with dot notation'
177c7cffd65SAlexander V. Chernikov	atf_set require.user root
178c7cffd65SAlexander V. Chernikov}
179c7cffd65SAlexander V. Chernikov
180c7cffd65SAlexander V. Chernikovqinq_dot_body()
181c7cffd65SAlexander V. Chernikov{
182c7cffd65SAlexander V. Chernikov	vnet_init
183c7cffd65SAlexander V. Chernikov
184c7cffd65SAlexander V. Chernikov	epair_qinq=$(vnet_mkepair)
185c7cffd65SAlexander V. Chernikov
186c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq6 ${epair_qinq}a
187c7cffd65SAlexander V. Chernikov	vnet_mkjail jqinq7 ${epair_qinq}b
188c7cffd65SAlexander V. Chernikov
189c7cffd65SAlexander V. Chernikov	jexec jqinq6 ifconfig vlan5 create \
190c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad
191c7cffd65SAlexander V. Chernikov	jexec jqinq6 ifconfig vlan5.42 create \
192c7cffd65SAlexander V. Chernikov		vlanproto 802.1q
193c7cffd65SAlexander V. Chernikov	jexec jqinq6 ifconfig ${epair_qinq}a up
194c7cffd65SAlexander V. Chernikov	jexec jqinq6 ifconfig vlan5 up
195c7cffd65SAlexander V. Chernikov	jexec jqinq6 ifconfig vlan5.42 10.5.42.1/24 up
196c7cffd65SAlexander V. Chernikov
197c7cffd65SAlexander V. Chernikov	vlan5b=$(jexec jqinq7 ifconfig vlan create \
198c7cffd65SAlexander V. Chernikov		vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
199c7cffd65SAlexander V. Chernikov	vlan42b=$(jexec jqinq7 ifconfig vlan create \
200c7cffd65SAlexander V. Chernikov		vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
201c7cffd65SAlexander V. Chernikov	jexec jqinq7 ifconfig ${epair_qinq}b up
202c7cffd65SAlexander V. Chernikov	jexec jqinq7 ifconfig ${vlan5b} up
203c7cffd65SAlexander V. Chernikov	jexec jqinq7 ifconfig ${vlan42b} 10.5.42.2/24 up
204c7cffd65SAlexander V. Chernikov
205c7cffd65SAlexander V. Chernikov	atf_check -s exit:0 -o ignore jexec jqinq7 ping -c 1 10.5.42.1
206c7cffd65SAlexander V. Chernikov}
207c7cffd65SAlexander V. Chernikov
208c7cffd65SAlexander V. Chernikovqinq_dot_cleanup()
209c7cffd65SAlexander V. Chernikov{
210c7cffd65SAlexander V. Chernikov	vnet_cleanup
211c7cffd65SAlexander V. Chernikov}
212c7cffd65SAlexander V. Chernikov
213*3e87f800SKristof Provostatf_test_case "bpf_pcp" "cleanup"
214*3e87f800SKristof Provostbpf_pcp_head()
215*3e87f800SKristof Provost{
216*3e87f800SKristof Provost	atf_set descr 'Set VLAN PCP through BPF'
217*3e87f800SKristof Provost	atf_set require.config 'allow_sysctl_side_effects'
218*3e87f800SKristof Provost	atf_set require.user root
219*3e87f800SKristof Provost	atf_set require.progs scapy
220*3e87f800SKristof Provost}
221*3e87f800SKristof Provost
222*3e87f800SKristof Provostbpf_pcp_body()
223*3e87f800SKristof Provost{
224*3e87f800SKristof Provost	vnet_init
225*3e87f800SKristof Provost
226*3e87f800SKristof Provost	epair=$(vnet_mkepair)
227*3e87f800SKristof Provost
228*3e87f800SKristof Provost	ifconfig ${epair}a up
229*3e87f800SKristof Provost
230*3e87f800SKristof Provost	vnet_mkjail alcatraz ${epair}b
231*3e87f800SKristof Provost	vlan=$(jexec alcatraz ifconfig vlan create)
232*3e87f800SKristof Provost	jexec alcatraz ifconfig ${vlan} vlan 42 vlandev ${epair}b
233*3e87f800SKristof Provost	jexec alcatraz ifconfig ${vlan} up
234*3e87f800SKristof Provost	jexec alcatraz ifconfig ${epair}b up
235*3e87f800SKristof Provost
236*3e87f800SKristof Provost	sysctl net.link.vlan.mtag_pcp=1
237*3e87f800SKristof Provost
238*3e87f800SKristof Provost	jexec alcatraz dhclient ${vlan} &
239*3e87f800SKristof Provost	atf_check -s exit:1 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \
240*3e87f800SKristof Provost		--expect-pcp 6 \
241*3e87f800SKristof Provost		--recvif ${epair}a
242*3e87f800SKristof Provost
243*3e87f800SKristof Provost	jexec alcatraz killall dhclient
244*3e87f800SKristof Provost	sleep 1
245*3e87f800SKristof Provost
246*3e87f800SKristof Provost	jexec alcatraz dhclient -c $(atf_get_srcdir)/dhclient_pcp.conf ${vlan} &
247*3e87f800SKristof Provost	atf_check -s exit:0 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \
248*3e87f800SKristof Provost		--expect-pcp 6 \
249*3e87f800SKristof Provost		--recvif ${epair}a
250*3e87f800SKristof Provost}
251*3e87f800SKristof Provost
252*3e87f800SKristof Provostbpf_pcp_cleanup()
253*3e87f800SKristof Provost{
254*3e87f800SKristof Provost	sysctl net.link.vlan.mtag_pcp=0
255*3e87f800SKristof Provost	jexec alcatraz killall dhclient
256*3e87f800SKristof Provost	vnet_cleanup
257*3e87f800SKristof Provost}
258*3e87f800SKristof Provost
259fcd69db2SKristof Provostatf_init_test_cases()
260fcd69db2SKristof Provost{
261fcd69db2SKristof Provost	atf_add_test_case "basic"
262c7cffd65SAlexander V. Chernikov	atf_add_test_case "qinq_simple"
263c7cffd65SAlexander V. Chernikov	atf_add_test_case "qinq_deep"
264c7cffd65SAlexander V. Chernikov	atf_add_test_case "qinq_legacy"
265c7cffd65SAlexander V. Chernikov	atf_add_test_case "qinq_dot"
266*3e87f800SKristof Provost	atf_add_test_case "bpf_pcp"
267fcd69db2SKristof Provost}
268