xref: /freebsd/tests/sys/net/if_gre.sh (revision fdf86df72a32e5d8ca729220a5c787265f8b6682)
1#
2# Copyright (c) 2026 Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
3#
4# SPDX-License-Identifier: BSD-2-Clause
5#
6
7. $(atf_get_srcdir)/../common/vnet.subr
8
9atf_test_case "gre4_basic" "cleanup"
10gre4_basic_head()
11{
12	atf_set descr 'Create a gre(4) tunnel over ipv4 underlay'
13	atf_set require.user root
14	atf_set require.kmods if_gre
15}
16gre4_basic_body()
17{
18	local epair endpoint1 endpoint2
19        local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2
20
21	endpoint1=192.168.2.1
22	endpoint2=192.168.2.2
23	v4tunnel1=169.254.0.1
24	v4tunnel2=169.254.0.2
25	v6tunnel1=2001:db8::1
26	v6tunnel2=2001:db8::2
27
28	vnet_init
29	epair=$(vnet_mkepair)
30	vnet_mkjail gretest1 ${epair}a
31	vnet_mkjail gretest2 ${epair}b
32
33	ifconfig -j gretest1 ${epair}a inet ${endpoint1}/30 up
34	ifconfig -j gretest2 ${epair}b inet ${endpoint2}/30 up
35
36	# Sanity check
37	atf_check -o ignore \
38	    jexec gretest1 ping -c 1 -t 3 ${endpoint2}
39	atf_check -o ignore \
40	    jexec gretest2 ping -c 1 -t 3 ${endpoint1}
41
42	atf_check ifconfig -j gretest1 gre1 create \
43	    inet tunnel ${endpoint1} ${endpoint2} up
44	atf_check ifconfig -j gretest2 gre1 create \
45	    inet tunnel ${endpoint2} ${endpoint1} up
46
47	atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2}
48	atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1}
49	atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1}
50	atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2}
51
52	# Tunnel test
53	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2
54	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1
55	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2
56	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1
57}
58gre4_basic_cleanup()
59{
60	vnet_cleanup
61}
62
63atf_test_case "gre6_basic" "cleanup"
64gre6_basic_head()
65{
66	atf_set descr 'Create a gre(4) tunnel over ipv6 underlay'
67	atf_set require.user root
68	atf_set require.kmods if_gre
69}
70gre6_basic_body()
71{
72	local epair endpoint1 endpoint2
73        local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2
74
75	endpoint1=3fff::1
76	endpoint2=3fff::2
77	v4tunnel1=169.254.0.1
78	v4tunnel2=169.254.0.2
79	v6tunnel1=2001:db8::1
80	v6tunnel2=2001:db8::2
81
82	vnet_init
83	epair=$(vnet_mkepair)
84	vnet_mkjail gretest1 ${epair}a
85	vnet_mkjail gretest2 ${epair}b
86
87	ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up
88	ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up
89
90	# Sanity check
91	atf_check -o ignore \
92	    jexec gretest1 ping -c 1 -t 3 ${endpoint2}
93	atf_check -o ignore \
94	    jexec gretest2 ping -c 1 -t 3 ${endpoint1}
95
96	atf_check ifconfig -j gretest1 gre1 create \
97	    inet6 tunnel ${endpoint1} ${endpoint2} up
98	atf_check ifconfig -j gretest2 gre1 create \
99	    inet6 tunnel ${endpoint2} ${endpoint1} up
100
101	atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2}
102	atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1}
103	atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1}
104	atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2}
105
106	# Tunnel test
107	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2
108	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1
109	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2
110	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1
111}
112gre6_basic_cleanup()
113{
114	vnet_cleanup
115}
116
117atf_test_case "gre6_csum" "cleanup"
118gre6_csum_head()
119{
120	atf_set descr 'Create a gre(4) tunnel over ipv6 underlay with checksum option'
121	atf_set require.user root
122	atf_set require.kmods if_gre
123}
124gre6_csum_body()
125{
126	local epair endpoint1 endpoint2
127	local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2
128
129	endpoint1=3fff::1
130	endpoint2=3fff::2
131	v4tunnel1=169.254.0.1
132	v4tunnel2=169.254.0.2
133	v6tunnel1=2001:db8::1
134	v6tunnel2=2001:db8::2
135
136	vnet_init
137	epair=$(vnet_mkepair)
138	vnet_mkjail gretest1 ${epair}a
139	vnet_mkjail gretest2 ${epair}b
140
141	ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up
142	ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up
143
144	# Sanity check
145	atf_check -o ignore \
146	    jexec gretest1 ping -c 1 -t 3 ${endpoint2}
147	atf_check -o ignore \
148	    jexec gretest2 ping -c 1 -t 3 ${endpoint1}
149
150	atf_check ifconfig -j gretest1 gre1 create \
151	    inet6 tunnel ${endpoint1} ${endpoint2} enable_csum up
152	atf_check ifconfig -j gretest2 gre1 create \
153	    inet6 tunnel ${endpoint2} ${endpoint1} enable_csum up
154
155	atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2}
156	atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1}
157	atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1}
158	atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2}
159
160	# ifconfig test
161	atf_check -o match:"ENABLE_CSUM" ifconfig -j gretest1 gre1
162	atf_check -o match:"ENABLE_CSUM" ifconfig -j gretest2 gre1
163
164	# Tunnel test
165	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2
166	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1
167	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2
168	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1
169}
170gre6_csum_cleanup()
171{
172	vnet_cleanup
173}
174
175atf_test_case "gre6_key" "cleanup"
176gre6_key_head()
177{
178	atf_set descr 'Create a gre(4) tunnel over ipv6 underlay with gre key option'
179	atf_set require.user root
180	atf_set require.kmods if_gre
181}
182gre6_key_body()
183{
184	local epair endpoint1 endpoint2
185        local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2
186
187	endpoint1=3fff::1
188	endpoint2=3fff::2
189	v4tunnel1=169.254.0.1
190	v4tunnel2=169.254.0.2
191	v6tunnel1=2001:db8::1
192	v6tunnel2=2001:db8::2
193
194	vnet_init
195	epair=$(vnet_mkepair)
196	vnet_mkjail gretest1 ${epair}a
197	vnet_mkjail gretest2 ${epair}b
198
199	ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up
200	ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up
201
202	# Sanity check
203	atf_check -o ignore \
204	    jexec gretest1 ping -c 1 -t 3 ${endpoint2}
205	atf_check -o ignore \
206	    jexec gretest2 ping -c 1 -t 3 ${endpoint1}
207
208	atf_check ifconfig -j gretest1 gre1 create \
209	    inet6 tunnel ${endpoint1} ${endpoint2} grekey 10 up
210	atf_check ifconfig -j gretest2 gre1 create \
211	    inet6 tunnel ${endpoint2} ${endpoint1} grekey 10 up
212
213	atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2}
214	atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1}
215	atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1}
216	atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2}
217
218	# ifconfig test
219	atf_check -o match:"grekey: 0xa \(10\)" ifconfig -j gretest1 gre1
220	atf_check -o match:"grekey: 0xa \(10\)" ifconfig -j gretest2 gre1
221
222	# Tunnel test
223	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2
224	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1
225	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2
226	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1
227}
228gre6_key_cleanup()
229{
230	vnet_cleanup
231}
232
233atf_test_case "gre6_seq" "cleanup"
234gre6_seq_head()
235{
236	atf_set descr 'Create a sequenced gre(4) tunnel over ipv6 underlay'
237	atf_set require.user root
238	atf_set require.kmods if_gre
239}
240gre6_seq_body()
241{
242	local epair endpoint1 endpoint2
243	local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2
244
245	endpoint1=3fff::1
246	endpoint2=3fff::2
247	v4tunnel1=169.254.0.1
248	v4tunnel2=169.254.0.2
249	v6tunnel1=2001:db8::1
250	v6tunnel2=2001:db8::2
251
252	vnet_init
253	epair=$(vnet_mkepair)
254	vnet_mkjail gretest1 ${epair}a
255	vnet_mkjail gretest2 ${epair}b
256
257	ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up
258	ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up
259
260	# Sanity check
261	atf_check -o ignore \
262	    jexec gretest1 ping -c 1 -t 3 ${endpoint2}
263	atf_check -o ignore \
264	    jexec gretest2 ping -c 1 -t 3 ${endpoint1}
265
266	atf_check ifconfig -j gretest1 gre1 create \
267	    inet6 tunnel ${endpoint1} ${endpoint2} enable_seq up
268	atf_check ifconfig -j gretest2 gre1 create \
269	    inet6 tunnel ${endpoint2} ${endpoint1} enable_seq up
270
271	atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2}
272	atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1}
273	atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1}
274	atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2}
275
276	# ifconfig test
277	atf_check -o match:"ENABLE_SEQ" ifconfig -j gretest1 gre1
278	atf_check -o match:"ENABLE_SEQ" ifconfig -j gretest2 gre1
279
280	# Tunnel test
281	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2
282	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1
283	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2
284	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1
285}
286gre6_seq_cleanup()
287{
288	vnet_cleanup
289}
290
291atf_test_case "gre6_udpencap" "cleanup"
292gre6_udpencap_head()
293{
294	atf_set descr 'Create a gre(4) over UDP tunnel with ipv6 underlay'
295	atf_set require.user root
296	atf_set require.kmods if_gre
297}
298gre6_udpencap_body()
299{
300	local epair endpoint1 endpoint2
301        local v4tunnel1 v4tunnel2 v6tunnel1 v6tunnel2
302
303	endpoint1=3fff::1
304	endpoint2=3fff::2
305	v4tunnel1=169.254.0.1
306	v4tunnel2=169.254.0.2
307	v6tunnel1=2001:db8::1
308	v6tunnel2=2001:db8::2
309
310	vnet_init
311	epair=$(vnet_mkepair)
312	vnet_mkjail gretest1 ${epair}a
313	vnet_mkjail gretest2 ${epair}b
314
315	ifconfig -j gretest1 ${epair}a inet6 ${endpoint1} up
316	ifconfig -j gretest2 ${epair}b inet6 ${endpoint2} up
317
318	# Sanity check
319	atf_check -o ignore \
320	    jexec gretest1 ping -c 1 -t 3 ${endpoint2}
321	atf_check -o ignore \
322	    jexec gretest2 ping -c 1 -t 3 ${endpoint1}
323
324	atf_check ifconfig -j gretest1 gre1 create \
325	    inet6 tunnel ${endpoint1} ${endpoint2} udpencap up
326	atf_check ifconfig -j gretest2 gre1 create \
327	    inet6 tunnel ${endpoint2} ${endpoint1} udpencap udpport 55555 up
328
329	atf_check ifconfig -j gretest1 gre1 inet ${v4tunnel1} ${v4tunnel2}
330	atf_check ifconfig -j gretest1 gre1 inet6 ${v6tunnel1}
331	atf_check ifconfig -j gretest2 gre1 inet ${v4tunnel2} ${v4tunnel1}
332	atf_check ifconfig -j gretest2 gre1 inet6 ${v6tunnel2}
333
334	# ifconfig test
335	atf_check -o match:"UDPENCAP" ifconfig -j gretest1 gre1
336	atf_check -o match:"udpport: 55555" ifconfig -j gretest2 gre1
337
338	# Tunnel test
339	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v4tunnel2
340	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v4tunnel1
341	atf_check -o ignore jexec gretest1 ping -nc 1 -t 1 $v6tunnel2
342	atf_check -o ignore jexec gretest2 ping -nc 1 -t 1 $v6tunnel1
343}
344gre6_udpencap_cleanup()
345{
346	vnet_cleanup
347}
348
349atf_test_case "gre_blind_options" "cleanup"
350gre_blind_options_head()
351{
352	atf_set descr 'Test gre(4) tunnel options without verifying its effect on dataplane.'
353	atf_set require.user root
354	atf_set require.kmods if_gre
355}
356gre_blind_options_body()
357{
358	local gre
359
360	v4tunnel1=169.254.0.1
361	v4tunnel2=169.254.0.2
362	v6tunnel1=2001:db8::1
363	v6tunnel2=2001:db8::2
364
365	vnet_init
366	vnet_mkjail gretest
367
368	gre=$(ifconfig -j gretest gre create \
369		enable_seq grekey 10 enable_csum udpencap udpport 55555 up)
370
371	atf_check ifconfig -j gretest $gre inet ${v4tunnel1} ${v4tunnel2}
372	atf_check ifconfig -j gretest $gre inet6 ${v6tunnel1}
373
374	# ifconfig test
375	atf_check -o match:"grekey: 0xa \(10\)" ifconfig -j gretest $gre
376	atf_check -o match:"ENABLE_CSUM" ifconfig -j gretest $gre
377	atf_check -o match:"ENABLE_SEQ" ifconfig -j gretest $gre
378	atf_check -o match:"UDPENCAP" ifconfig -j gretest $gre
379	atf_check -o match:"udpport: 55555" ifconfig -j gretest $gre
380}
381gre_blind_options_cleanup()
382{
383	vnet_cleanup
384}
385
386
387atf_init_test_cases()
388{
389	atf_add_test_case "gre4_basic"
390	atf_add_test_case "gre6_basic"
391	atf_add_test_case "gre6_csum"
392	atf_add_test_case "gre6_key"
393	atf_add_test_case "gre6_seq"
394	atf_add_test_case "gre6_udpencap"
395	atf_add_test_case "gre_blind_options"
396}
397