]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/net/if_vlan.sh
Add support for stacked VLANs (IEEE 802.1ad, AKA Q-in-Q).
[FreeBSD/FreeBSD.git] / tests / sys / net / if_vlan.sh
1 # $FreeBSD$
2
3 . $(atf_get_srcdir)/../common/vnet.subr
4
5 atf_test_case "basic" "cleanup"
6 basic_head()
7 {
8         atf_set descr 'Basic VLAN test'
9         atf_set require.user root
10 }
11
12 basic_body()
13 {
14         vnet_init
15
16         epair_vlan=$(vnet_mkepair)
17
18         vnet_mkjail alcatraz ${epair_vlan}a
19         vnet_mkjail singsing ${epair_vlan}b
20
21         vlan0=$(jexec alcatraz ifconfig vlan create vlandev ${epair_vlan}a \
22                 vlan 42)
23         jexec alcatraz ifconfig ${epair_vlan}a up
24         jexec alcatraz ifconfig ${vlan0} 10.0.0.1/24 up
25
26         vlan1=$(jexec singsing ifconfig vlan create vlandev ${epair_vlan}b \
27                 vlan 42)
28         jexec singsing ifconfig ${epair_vlan}b up
29         jexec singsing ifconfig ${vlan1} 10.0.0.2/24 up
30
31         atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1
32 }
33
34 basic_cleanup()
35 {
36         vnet_cleanup
37 }
38
39 # Simple Q-in-Q (802.1Q over 802.1ad)
40
41 atf_test_case "qinq_simple" "cleanup"
42 qinq_simple_head()
43 {
44         atf_set descr 'Simple Q-in-Q test (802.1Q over 802.1ad)'
45         atf_set require.user root
46 }
47
48 qinq_simple_body()
49 {
50         vnet_init
51
52         epair_qinq=$(vnet_mkepair)
53
54         vnet_mkjail jqinq0 ${epair_qinq}a
55         vnet_mkjail jqinq1 ${epair_qinq}b
56
57         vlan5a=$(jexec jqinq0 ifconfig vlan create \
58                 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
59         vlan42a=$(jexec jqinq0 ifconfig vlan create \
60                 vlandev ${vlan5a} vlan 42 vlanproto 802.1q)
61         jexec jqinq0 ifconfig ${epair_qinq}a up
62         jexec jqinq0 ifconfig ${vlan5a} up
63         jexec jqinq0 ifconfig ${vlan42a} 10.5.42.1/24 up
64
65         vlan5b=$(jexec jqinq1 ifconfig vlan create \
66                 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
67         vlan42b=$(jexec jqinq1 ifconfig vlan create \
68                 vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
69         jexec jqinq1 ifconfig ${epair_qinq}b up
70         jexec jqinq1 ifconfig ${vlan5b} up
71         jexec jqinq1 ifconfig ${vlan42b} 10.5.42.2/24 up
72
73         atf_check -s exit:0 -o ignore jexec jqinq1 ping -c 1 10.5.42.1
74 }
75
76 qinq_simple_cleanup()
77 {
78         vnet_cleanup
79 }
80
81 # Deep Q-in-Q (802.1Q over 802.1ad over 802.1ad)
82
83 atf_test_case "qinq_deep" "cleanup"
84 qinq_deep_head()
85 {
86         atf_set descr 'Deep Q-in-Q test (802.1Q over 802.1ad over 802.1ad)'
87         atf_set require.user root
88 }
89
90 qinq_deep_body()
91 {
92         vnet_init
93
94         epair_qinq=$(vnet_mkepair)
95
96         vnet_mkjail jqinq2 ${epair_qinq}a
97         vnet_mkjail jqinq3 ${epair_qinq}b
98
99         vlan5a=$(jexec jqinq2 ifconfig vlan create \
100                 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad)
101         vlan6a=$(jexec jqinq2 ifconfig vlan create \
102                 vlandev ${vlan5a} vlan 6 vlanproto 802.1ad)
103         vlan42a=$(jexec jqinq2 ifconfig vlan create \
104                 vlandev ${vlan6a} vlan 42 vlanproto 802.1q)
105         jexec jqinq2 ifconfig ${epair_qinq}a up
106         jexec jqinq2 ifconfig ${vlan5a} up
107         jexec jqinq2 ifconfig ${vlan6a} up
108         jexec jqinq2 ifconfig ${vlan42a} 10.6.42.1/24 up
109
110         vlan5b=$(jexec jqinq3 ifconfig vlan create \
111                 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
112         vlan6b=$(jexec jqinq3 ifconfig vlan create \
113                 vlandev ${vlan5b} vlan 6 vlanproto 802.1ad)
114         vlan42b=$(jexec jqinq3 ifconfig vlan create \
115                 vlandev ${vlan6b} vlan 42 vlanproto 802.1q)
116         jexec jqinq3 ifconfig ${epair_qinq}b up
117         jexec jqinq3 ifconfig ${vlan5b} up
118         jexec jqinq3 ifconfig ${vlan6b} up
119         jexec jqinq3 ifconfig ${vlan42b} 10.6.42.2/24 up
120
121         atf_check -s exit:0 -o ignore jexec jqinq3 ping -c 1 10.6.42.1
122 }
123
124 qinq_deep_cleanup()
125 {
126         vnet_cleanup
127 }
128
129 # Legacy Q-in-Q (802.1Q over 802.1Q)
130
131 atf_test_case "qinq_legacy" "cleanup"
132 qinq_legacy_head()
133 {
134         atf_set descr 'Legacy Q-in-Q test (802.1Q over 802.1Q)'
135         atf_set require.user root
136 }
137
138 qinq_legacy_body()
139 {
140         vnet_init
141
142         epair_qinq=$(vnet_mkepair)
143
144         vnet_mkjail jqinq4 ${epair_qinq}a
145         vnet_mkjail jqinq5 ${epair_qinq}b
146
147         vlan5a=$(jexec jqinq4 ifconfig vlan create \
148                 vlandev ${epair_qinq}a vlan 5)
149         vlan42a=$(jexec jqinq4 ifconfig vlan create \
150                 vlandev ${vlan5a} vlan 42)
151         jexec jqinq4 ifconfig ${epair_qinq}a up
152         jexec jqinq4 ifconfig ${vlan5a} up
153         jexec jqinq4 ifconfig ${vlan42a} 10.5.42.1/24 up
154
155         vlan5b=$(jexec jqinq5 ifconfig vlan create \
156                 vlandev ${epair_qinq}b vlan 5)
157         vlan42b=$(jexec jqinq5 ifconfig vlan create \
158                 vlandev ${vlan5b} vlan 42)
159         jexec jqinq5 ifconfig ${epair_qinq}b up
160         jexec jqinq5 ifconfig ${vlan5b} up
161         jexec jqinq5 ifconfig ${vlan42b} 10.5.42.2/24 up
162
163         atf_check -s exit:0 -o ignore jexec jqinq5 ping -c 1 10.5.42.1
164 }
165
166 qinq_legacy_cleanup()
167 {
168         vnet_cleanup
169 }
170
171 # Simple Q-in-Q with dot notation
172
173 atf_test_case "qinq_dot" "cleanup"
174 qinq_dot_head()
175 {
176         atf_set descr 'Simple Q-in-Q test with dot notation'
177         atf_set require.user root
178 }
179
180 qinq_dot_body()
181 {
182         vnet_init
183
184         epair_qinq=$(vnet_mkepair)
185
186         vnet_mkjail jqinq6 ${epair_qinq}a
187         vnet_mkjail jqinq7 ${epair_qinq}b
188
189         jexec jqinq6 ifconfig vlan5 create \
190                 vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad
191         jexec jqinq6 ifconfig vlan5.42 create \
192                 vlanproto 802.1q
193         jexec jqinq6 ifconfig ${epair_qinq}a up
194         jexec jqinq6 ifconfig vlan5 up
195         jexec jqinq6 ifconfig vlan5.42 10.5.42.1/24 up
196
197         vlan5b=$(jexec jqinq7 ifconfig vlan create \
198                 vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad)
199         vlan42b=$(jexec jqinq7 ifconfig vlan create \
200                 vlandev ${vlan5b} vlan 42 vlanproto 802.1q)
201         jexec jqinq7 ifconfig ${epair_qinq}b up
202         jexec jqinq7 ifconfig ${vlan5b} up
203         jexec jqinq7 ifconfig ${vlan42b} 10.5.42.2/24 up
204
205         atf_check -s exit:0 -o ignore jexec jqinq7 ping -c 1 10.5.42.1
206 }
207
208 qinq_dot_cleanup()
209 {
210         vnet_cleanup
211 }
212
213 atf_init_test_cases()
214 {
215         atf_add_test_case "basic"
216         atf_add_test_case "qinq_simple"
217         atf_add_test_case "qinq_deep"
218         atf_add_test_case "qinq_legacy"
219         atf_add_test_case "qinq_dot"
220 }