3 . $(atf_get_srcdir)/../common/vnet.subr
5 atf_test_case "basic" "cleanup"
8 atf_set descr 'Basic VLAN test'
9 atf_set require.user root
16 epair_vlan=$(vnet_mkepair)
18 vnet_mkjail alcatraz ${epair_vlan}a
19 vnet_mkjail singsing ${epair_vlan}b
21 vlan0=$(jexec alcatraz ifconfig vlan create vlandev ${epair_vlan}a \
23 jexec alcatraz ifconfig ${epair_vlan}a up
24 jexec alcatraz ifconfig ${vlan0} 10.0.0.1/24 up
26 vlan1=$(jexec singsing ifconfig vlan create vlandev ${epair_vlan}b \
28 jexec singsing ifconfig ${epair_vlan}b up
29 jexec singsing ifconfig ${vlan1} 10.0.0.2/24 up
31 atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1
33 # Test changing the vlan ID
35 jexec singsing ifconfig ${vlan1} vlandev ${epair_vlan}b vlan 43
36 atf_check -s exit:2 -o ignore jexec singsing ping -c 1 10.0.0.1
39 # Test changing the vlan ID
41 jexec singsing ifconfig ${vlan1} vlandev ${epair_vlan}b vlan 42
42 atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1
50 # Simple Q-in-Q (802.1Q over 802.1ad)
52 atf_test_case "qinq_simple" "cleanup"
55 atf_set descr 'Simple Q-in-Q test (802.1Q over 802.1ad)'
56 atf_set require.user root
63 epair_qinq=$(vnet_mkepair)
65 vnet_mkjail jqinq0 ${epair_qinq}a
66 vnet_mkjail jqinq1 ${epair_qinq}b
68 vlan5a=$(jexec jqinq0 ifconfig vlan create \
69 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
70 vlan42a=$(jexec jqinq0 ifconfig vlan create \
71 vlandev ${vlan5a} vlan 42 vlanproto 802.1q)
72 jexec jqinq0 ifconfig ${epair_qinq}a up
73 jexec jqinq0 ifconfig ${vlan5a} up
74 jexec jqinq0 ifconfig ${vlan42a} 10.5.42.1/24 up
76 vlan5b=$(jexec jqinq1 ifconfig vlan create \
77 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
78 vlan42b=$(jexec jqinq1 ifconfig vlan create \
79 vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
80 jexec jqinq1 ifconfig ${epair_qinq}b up
81 jexec jqinq1 ifconfig ${vlan5b} up
82 jexec jqinq1 ifconfig ${vlan42b} 10.5.42.2/24 up
84 atf_check -s exit:0 -o ignore jexec jqinq1 ping -c 1 10.5.42.1
92 # Deep Q-in-Q (802.1Q over 802.1ad over 802.1ad)
94 atf_test_case "qinq_deep" "cleanup"
97 atf_set descr 'Deep Q-in-Q test (802.1Q over 802.1ad over 802.1ad)'
98 atf_set require.user root
105 epair_qinq=$(vnet_mkepair)
107 vnet_mkjail jqinq2 ${epair_qinq}a
108 vnet_mkjail jqinq3 ${epair_qinq}b
110 vlan5a=$(jexec jqinq2 ifconfig vlan create \
111 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
112 vlan6a=$(jexec jqinq2 ifconfig vlan create \
113 vlandev ${vlan5a} vlan 6 vlanproto 802.1ad)
114 vlan42a=$(jexec jqinq2 ifconfig vlan create \
115 vlandev ${vlan6a} vlan 42 vlanproto 802.1q)
116 jexec jqinq2 ifconfig ${epair_qinq}a up
117 jexec jqinq2 ifconfig ${vlan5a} up
118 jexec jqinq2 ifconfig ${vlan6a} up
119 jexec jqinq2 ifconfig ${vlan42a} 10.6.42.1/24 up
121 vlan5b=$(jexec jqinq3 ifconfig vlan create \
122 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
123 vlan6b=$(jexec jqinq3 ifconfig vlan create \
124 vlandev ${vlan5b} vlan 6 vlanproto 802.1ad)
125 vlan42b=$(jexec jqinq3 ifconfig vlan create \
126 vlandev ${vlan6b} vlan 42 vlanproto 802.1q)
127 jexec jqinq3 ifconfig ${epair_qinq}b up
128 jexec jqinq3 ifconfig ${vlan5b} up
129 jexec jqinq3 ifconfig ${vlan6b} up
130 jexec jqinq3 ifconfig ${vlan42b} 10.6.42.2/24 up
132 atf_check -s exit:0 -o ignore jexec jqinq3 ping -c 1 10.6.42.1
140 # Legacy Q-in-Q (802.1Q over 802.1Q)
142 atf_test_case "qinq_legacy" "cleanup"
145 atf_set descr 'Legacy Q-in-Q test (802.1Q over 802.1Q)'
146 atf_set require.user root
153 epair_qinq=$(vnet_mkepair)
155 vnet_mkjail jqinq4 ${epair_qinq}a
156 vnet_mkjail jqinq5 ${epair_qinq}b
158 vlan5a=$(jexec jqinq4 ifconfig vlan create \
159 vlandev ${epair_qinq}a vlan 5)
160 vlan42a=$(jexec jqinq4 ifconfig vlan create \
161 vlandev ${vlan5a} vlan 42)
162 jexec jqinq4 ifconfig ${epair_qinq}a up
163 jexec jqinq4 ifconfig ${vlan5a} up
164 jexec jqinq4 ifconfig ${vlan42a} 10.5.42.1/24 up
166 vlan5b=$(jexec jqinq5 ifconfig vlan create \
167 vlandev ${epair_qinq}b vlan 5)
168 vlan42b=$(jexec jqinq5 ifconfig vlan create \
169 vlandev ${vlan5b} vlan 42)
170 jexec jqinq5 ifconfig ${epair_qinq}b up
171 jexec jqinq5 ifconfig ${vlan5b} up
172 jexec jqinq5 ifconfig ${vlan42b} 10.5.42.2/24 up
174 atf_check -s exit:0 -o ignore jexec jqinq5 ping -c 1 10.5.42.1
177 qinq_legacy_cleanup()
182 # Simple Q-in-Q with dot notation
184 atf_test_case "qinq_dot" "cleanup"
187 atf_set descr 'Simple Q-in-Q test with dot notation'
188 atf_set require.user root
195 epair_qinq=$(vnet_mkepair)
197 vnet_mkjail jqinq6 ${epair_qinq}a
198 vnet_mkjail jqinq7 ${epair_qinq}b
200 jexec jqinq6 ifconfig vlan5 create \
201 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad
202 jexec jqinq6 ifconfig vlan5.42 create \
204 jexec jqinq6 ifconfig ${epair_qinq}a up
205 jexec jqinq6 ifconfig vlan5 up
206 jexec jqinq6 ifconfig vlan5.42 10.5.42.1/24 up
208 vlan5b=$(jexec jqinq7 ifconfig vlan create \
209 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
210 vlan42b=$(jexec jqinq7 ifconfig vlan create \
211 vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
212 jexec jqinq7 ifconfig ${epair_qinq}b up
213 jexec jqinq7 ifconfig ${vlan5b} up
214 jexec jqinq7 ifconfig ${vlan42b} 10.5.42.2/24 up
216 atf_check -s exit:0 -o ignore jexec jqinq7 ping -c 1 10.5.42.1
224 atf_test_case "qinq_setflags" "cleanup"
227 atf_set descr 'Test setting flags on a QinQ device'
228 atf_set require.user root
235 epair=$(vnet_mkepair)
237 ifconfig ${epair}a up
238 vlan1=$(ifconfig vlan create)
239 ifconfig $vlan1 vlan 1 vlandev ${epair}a
240 vlan2=$(ifconfig vlan create)
241 ifconfig $vlan2 vlan 2 vlandev $vlan1
243 # This panics, incorrect locking
244 ifconfig $vlan2 promisc
247 qinq_setflags_cleanup()
252 atf_test_case "bpf_pcp" "cleanup"
255 atf_set descr 'Set VLAN PCP through BPF'
256 atf_set require.user root
257 atf_set require.progs scapy
264 epair=$(vnet_mkepair)
266 ifconfig ${epair}a up
268 vnet_mkjail alcatraz ${epair}b
269 vlan=$(jexec alcatraz ifconfig vlan create)
270 jexec alcatraz ifconfig ${vlan} vlan 42 vlandev ${epair}b
271 jexec alcatraz ifconfig ${vlan} up
272 jexec alcatraz ifconfig ${epair}b up
274 jexec alcatraz sysctl net.link.vlan.mtag_pcp=1
276 jexec alcatraz dhclient ${vlan} &
277 atf_check -s exit:1 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \
281 jexec alcatraz killall dhclient
284 jexec alcatraz dhclient -c $(atf_get_srcdir)/dhclient_pcp.conf ${vlan} &
285 atf_check -s exit:0 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \
292 sysctl net.link.vlan.mtag_pcp=0
293 jexec alcatraz killall dhclient
297 atf_init_test_cases()
299 atf_add_test_case "basic"
300 atf_add_test_case "qinq_simple"
301 atf_add_test_case "qinq_deep"
302 atf_add_test_case "qinq_legacy"
303 atf_add_test_case "qinq_dot"
304 atf_add_test_case "qinq_setflags"
305 atf_add_test_case "bpf_pcp"