2 . $(atf_get_srcdir)/../common/vnet.subr
4 atf_test_case "basic" "cleanup"
7 atf_set descr 'Basic VLAN test'
8 atf_set require.user root
15 epair_vlan=$(vnet_mkepair)
17 vnet_mkjail alcatraz ${epair_vlan}a
18 vnet_mkjail singsing ${epair_vlan}b
20 vlan0=$(jexec alcatraz ifconfig vlan create vlandev ${epair_vlan}a \
22 jexec alcatraz ifconfig ${epair_vlan}a up
23 jexec alcatraz ifconfig ${vlan0} 10.0.0.1/24 up
25 vlan1=$(jexec singsing ifconfig vlan create vlandev ${epair_vlan}b \
27 jexec singsing ifconfig ${epair_vlan}b up
28 jexec singsing ifconfig ${vlan1} 10.0.0.2/24 up
30 atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1
32 # Test changing the vlan ID
34 jexec singsing ifconfig ${vlan1} vlandev ${epair_vlan}b vlan 43
35 atf_check -s exit:2 -o ignore jexec singsing ping -c 1 10.0.0.1
38 # Test changing the vlan ID
40 jexec singsing ifconfig ${vlan1} vlandev ${epair_vlan}b vlan 42
41 atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1
49 # Simple Q-in-Q (802.1Q over 802.1ad)
51 atf_test_case "qinq_simple" "cleanup"
54 atf_set descr 'Simple Q-in-Q test (802.1Q over 802.1ad)'
55 atf_set require.user root
62 epair_qinq=$(vnet_mkepair)
64 vnet_mkjail jqinq0 ${epair_qinq}a
65 vnet_mkjail jqinq1 ${epair_qinq}b
67 vlan5a=$(jexec jqinq0 ifconfig vlan create \
68 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
69 vlan42a=$(jexec jqinq0 ifconfig vlan create \
70 vlandev ${vlan5a} vlan 42 vlanproto 802.1q)
71 jexec jqinq0 ifconfig ${epair_qinq}a up
72 jexec jqinq0 ifconfig ${vlan5a} up
73 jexec jqinq0 ifconfig ${vlan42a} 10.5.42.1/24 up
75 vlan5b=$(jexec jqinq1 ifconfig vlan create \
76 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
77 vlan42b=$(jexec jqinq1 ifconfig vlan create \
78 vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
79 jexec jqinq1 ifconfig ${epair_qinq}b up
80 jexec jqinq1 ifconfig ${vlan5b} up
81 jexec jqinq1 ifconfig ${vlan42b} 10.5.42.2/24 up
83 atf_check -s exit:0 -o ignore jexec jqinq1 ping -c 1 10.5.42.1
91 # Deep Q-in-Q (802.1Q over 802.1ad over 802.1ad)
93 atf_test_case "qinq_deep" "cleanup"
96 atf_set descr 'Deep Q-in-Q test (802.1Q over 802.1ad over 802.1ad)'
97 atf_set require.user root
104 epair_qinq=$(vnet_mkepair)
106 vnet_mkjail jqinq2 ${epair_qinq}a
107 vnet_mkjail jqinq3 ${epair_qinq}b
109 vlan5a=$(jexec jqinq2 ifconfig vlan create \
110 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
111 vlan6a=$(jexec jqinq2 ifconfig vlan create \
112 vlandev ${vlan5a} vlan 6 vlanproto 802.1ad)
113 vlan42a=$(jexec jqinq2 ifconfig vlan create \
114 vlandev ${vlan6a} vlan 42 vlanproto 802.1q)
115 jexec jqinq2 ifconfig ${epair_qinq}a up
116 jexec jqinq2 ifconfig ${vlan5a} up
117 jexec jqinq2 ifconfig ${vlan6a} up
118 jexec jqinq2 ifconfig ${vlan42a} 10.6.42.1/24 up
120 vlan5b=$(jexec jqinq3 ifconfig vlan create \
121 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
122 vlan6b=$(jexec jqinq3 ifconfig vlan create \
123 vlandev ${vlan5b} vlan 6 vlanproto 802.1ad)
124 vlan42b=$(jexec jqinq3 ifconfig vlan create \
125 vlandev ${vlan6b} vlan 42 vlanproto 802.1q)
126 jexec jqinq3 ifconfig ${epair_qinq}b up
127 jexec jqinq3 ifconfig ${vlan5b} up
128 jexec jqinq3 ifconfig ${vlan6b} up
129 jexec jqinq3 ifconfig ${vlan42b} 10.6.42.2/24 up
131 atf_check -s exit:0 -o ignore jexec jqinq3 ping -c 1 10.6.42.1
139 # Legacy Q-in-Q (802.1Q over 802.1Q)
141 atf_test_case "qinq_legacy" "cleanup"
144 atf_set descr 'Legacy Q-in-Q test (802.1Q over 802.1Q)'
145 atf_set require.user root
152 epair_qinq=$(vnet_mkepair)
154 vnet_mkjail jqinq4 ${epair_qinq}a
155 vnet_mkjail jqinq5 ${epair_qinq}b
157 vlan5a=$(jexec jqinq4 ifconfig vlan create \
158 vlandev ${epair_qinq}a vlan 5)
159 vlan42a=$(jexec jqinq4 ifconfig vlan create \
160 vlandev ${vlan5a} vlan 42)
161 jexec jqinq4 ifconfig ${epair_qinq}a up
162 jexec jqinq4 ifconfig ${vlan5a} up
163 jexec jqinq4 ifconfig ${vlan42a} 10.5.42.1/24 up
165 vlan5b=$(jexec jqinq5 ifconfig vlan create \
166 vlandev ${epair_qinq}b vlan 5)
167 vlan42b=$(jexec jqinq5 ifconfig vlan create \
168 vlandev ${vlan5b} vlan 42)
169 jexec jqinq5 ifconfig ${epair_qinq}b up
170 jexec jqinq5 ifconfig ${vlan5b} up
171 jexec jqinq5 ifconfig ${vlan42b} 10.5.42.2/24 up
173 atf_check -s exit:0 -o ignore jexec jqinq5 ping -c 1 10.5.42.1
176 qinq_legacy_cleanup()
181 # Simple Q-in-Q with dot notation
183 atf_test_case "qinq_dot" "cleanup"
186 atf_set descr 'Simple Q-in-Q test with dot notation'
187 atf_set require.user root
194 epair_qinq=$(vnet_mkepair)
196 vnet_mkjail jqinq6 ${epair_qinq}a
197 vnet_mkjail jqinq7 ${epair_qinq}b
199 jexec jqinq6 ifconfig vlan5 create \
200 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad
201 jexec jqinq6 ifconfig vlan5.42 create \
203 jexec jqinq6 ifconfig ${epair_qinq}a up
204 jexec jqinq6 ifconfig vlan5 up
205 jexec jqinq6 ifconfig vlan5.42 10.5.42.1/24 up
207 vlan5b=$(jexec jqinq7 ifconfig vlan create \
208 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
209 vlan42b=$(jexec jqinq7 ifconfig vlan create \
210 vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
211 jexec jqinq7 ifconfig ${epair_qinq}b up
212 jexec jqinq7 ifconfig ${vlan5b} up
213 jexec jqinq7 ifconfig ${vlan42b} 10.5.42.2/24 up
215 atf_check -s exit:0 -o ignore jexec jqinq7 ping -c 1 10.5.42.1
223 atf_test_case "qinq_setflags" "cleanup"
226 atf_set descr 'Test setting flags on a QinQ device'
227 atf_set require.user root
234 epair=$(vnet_mkepair)
236 ifconfig ${epair}a up
237 vlan1=$(ifconfig vlan create)
238 ifconfig $vlan1 vlan 1 vlandev ${epair}a
239 vlan2=$(ifconfig vlan create)
240 ifconfig $vlan2 vlan 2 vlandev $vlan1
242 # This panics, incorrect locking
243 ifconfig $vlan2 promisc
246 qinq_setflags_cleanup()
251 atf_test_case "bpf_pcp" "cleanup"
254 atf_set descr 'Set VLAN PCP through BPF'
255 atf_set require.user root
256 atf_set require.progs scapy
263 epair=$(vnet_mkepair)
265 ifconfig ${epair}a up
267 vnet_mkjail alcatraz ${epair}b
268 vlan=$(jexec alcatraz ifconfig vlan create)
269 jexec alcatraz ifconfig ${vlan} vlan 42 vlandev ${epair}b
270 jexec alcatraz ifconfig ${vlan} up
271 jexec alcatraz ifconfig ${epair}b up
273 jexec alcatraz sysctl net.link.vlan.mtag_pcp=1
275 jexec alcatraz dhclient ${vlan} &
276 atf_check -s exit:1 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \
280 jexec alcatraz killall dhclient
283 jexec alcatraz dhclient -c $(atf_get_srcdir)/dhclient_pcp.conf ${vlan} &
284 atf_check -s exit:0 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \
291 sysctl net.link.vlan.mtag_pcp=0
292 jexec alcatraz killall dhclient
296 atf_init_test_cases()
298 atf_add_test_case "basic"
299 atf_add_test_case "qinq_simple"
300 atf_add_test_case "qinq_deep"
301 atf_add_test_case "qinq_legacy"
302 atf_add_test_case "qinq_dot"
303 atf_add_test_case "qinq_setflags"
304 atf_add_test_case "bpf_pcp"