t_gif.sh revision 1.12 1 # $NetBSD: t_gif.sh,v 1.12 2018/02/01 05:22:01 ozaki-r Exp $
2 #
3 # Copyright (c) 2015 Internet Initiative Japan Inc.
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 # POSSIBILITY OF SUCH DAMAGE.
26 #
27
28 SOCK1=unix://commsock1 # for ROUTER1
29 SOCK2=unix://commsock2 # for ROUTER2
30 ROUTER1_LANIP=192.168.1.1
31 ROUTER1_LANNET=192.168.1.0/24
32 ROUTER1_WANIP=10.0.0.1
33 ROUTER1_GIFIP=172.16.1.1
34 ROUTER1_WANIP_DUMMY=10.0.0.11
35 ROUTER1_GIFIP_DUMMY=172.16.11.1
36 ROUTER1_GIFIP_RECURSIVE1=172.16.101.1
37 ROUTER1_GIFIP_RECURSIVE2=172.16.201.1
38 ROUTER2_LANIP=192.168.2.1
39 ROUTER2_LANNET=192.168.2.0/24
40 ROUTER2_WANIP=10.0.0.2
41 ROUTER2_GIFIP=172.16.2.1
42 ROUTER2_WANIP_DUMMY=10.0.0.12
43 ROUTER2_GIFIP_DUMMY=172.16.12.1
44 ROUTER2_GIFIP_RECURSIVE1=172.16.102.1
45 ROUTER2_GIFIP_RECURSIVE2=172.16.202.1
46
47 ROUTER1_LANIP6=fc00:1::1
48 ROUTER1_LANNET6=fc00:1::/64
49 ROUTER1_WANIP6=fc00::1
50 ROUTER1_GIFIP6=fc00:3::1
51 ROUTER1_WANIP6_DUMMY=fc00::11
52 ROUTER1_GIFIP6_DUMMY=fc00:13::1
53 ROUTER1_GIFIP6_RECURSIVE1=fc00:103::1
54 ROUTER1_GIFIP6_RECURSIVE2=fc00:203::1
55 ROUTER2_LANIP6=fc00:2::1
56 ROUTER2_LANNET6=fc00:2::/64
57 ROUTER2_WANIP6=fc00::2
58 ROUTER2_GIFIP6=fc00:4::1
59 ROUTER2_WANIP6_DUMMY=fc00::12
60 ROUTER2_GIFIP6_DUMMY=fc00:14::1
61 ROUTER2_GIFIP6_RECURSIVE1=fc00:104::1
62 ROUTER2_GIFIP6_RECURSIVE2=fc00:204::1
63
64 DEBUG=${DEBUG:-false}
65 TIMEOUT=5
66
67 atf_test_case gif_create_destroy cleanup
68 gif_create_destroy_head()
69 {
70
71 atf_set "descr" "Test creating/destroying gif interfaces"
72 atf_set "require.progs" "rump_server"
73 }
74
75 gif_create_destroy_body()
76 {
77
78 rump_server_start $SOCK1 netinet6 gif
79
80 test_create_destroy_common $SOCK1 gif0 true
81 }
82
83 gif_create_destroy_cleanup()
84 {
85
86 $DEBUG && dump
87 cleanup
88 }
89
90 setup_router()
91 {
92 sock=${1}
93 lan=${2}
94 lan_mode=${3}
95 wan=${4}
96 wan_mode=${5}
97
98 rump_server_add_iface $sock shmif0 bus0
99 rump_server_add_iface $sock shmif1 bus1
100
101 export RUMP_SERVER=${sock}
102 if [ ${lan_mode} = "ipv6" ]; then
103 atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
104 else
105 atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
106 fi
107 atf_check -s exit:0 rump.ifconfig shmif0 up
108 rump.ifconfig shmif0
109
110 if [ ${wan_mode} = "ipv6" ]; then
111 atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
112 else
113 atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
114 fi
115 atf_check -s exit:0 rump.ifconfig shmif1 up
116 rump.ifconfig shmif1
117 }
118
119 test_router()
120 {
121 sock=${1}
122 lan=${2}
123 lan_mode=${3}
124 wan=${4}
125 wan_mode=${5}
126
127 export RUMP_SERVER=${sock}
128 atf_check -s exit:0 -o match:shmif0 rump.ifconfig
129 if [ ${lan_mode} = "ipv6" ]; then
130 atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
131 else
132 atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
133 fi
134
135 atf_check -s exit:0 -o match:shmif1 rump.ifconfig
136 if [ ${wan_mode} = "ipv6" ]; then
137 atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
138 else
139 atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
140 fi
141 }
142
143 setup()
144 {
145 inner=${1}
146 outer=${2}
147
148 rump_server_start $SOCK1 netinet6 gif
149 rump_server_start $SOCK2 netinet6 gif
150
151 router1_lan=""
152 router1_lan_mode=""
153 router2_lan=""
154 router2_lan_mode=""
155 if [ ${inner} = "ipv6" ]; then
156 router1_lan=$ROUTER1_LANIP6
157 router1_lan_mode="ipv6"
158 router2_lan=$ROUTER2_LANIP6
159 router2_lan_mode="ipv6"
160 else
161 router1_lan=$ROUTER1_LANIP
162 router1_lan_mode="ipv4"
163 router2_lan=$ROUTER2_LANIP
164 router2_lan_mode="ipv4"
165 fi
166
167 if [ ${outer} = "ipv6" ]; then
168 setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
169 $ROUTER1_WANIP6 ipv6
170 setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
171 $ROUTER2_WANIP6 ipv6
172 else
173 setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
174 $ROUTER1_WANIP ipv4
175 setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
176 $ROUTER2_WANIP ipv4
177 fi
178 }
179
180 test_setup()
181 {
182 inner=${1}
183 outer=${2}
184
185 router1_lan=""
186 router1_lan_mode=""
187 router2_lan=""
188 router2_lan_mode=""
189 if [ ${inner} = "ipv6" ]; then
190 router1_lan=$ROUTER1_LANIP6
191 router1_lan_mode="ipv6"
192 router2_lan=$ROUTER2_LANIP6
193 router2_lan_mode="ipv6"
194 else
195 router1_lan=$ROUTER1_LANIP
196 router1_lan_mode="ipv4"
197 router2_lan=$ROUTER2_LANIP
198 router2_lan_mode="ipv4"
199 fi
200 if [ ${outer} = "ipv6" ]; then
201 test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
202 $ROUTER1_WANIP6 ipv6
203 test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
204 $ROUTER2_WANIP6 ipv6
205 else
206 test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
207 $ROUTER1_WANIP ipv4
208 test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
209 $ROUTER2_WANIP ipv4
210 fi
211 }
212
213 setup_if_gif()
214 {
215 sock=${1}
216 addr=${2}
217 remote=${3}
218 inner=${4}
219 src=${5}
220 dst=${6}
221 peernet=${7}
222
223 export RUMP_SERVER=${sock}
224 atf_check -s exit:0 rump.ifconfig gif0 create
225 atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst}
226 if [ ${inner} = "ipv6" ]; then
227 atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote}
228 atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
229 else
230 atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote}
231 atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
232 fi
233
234 rump.ifconfig gif0
235 rump.route -nL show
236 }
237
238 setup_tunnel()
239 {
240 inner=${1}
241 outer=${2}
242
243 addr=""
244 remote=""
245 src=""
246 dst=""
247 peernet=""
248
249 if [ ${inner} = "ipv6" ]; then
250 addr=$ROUTER1_GIFIP6
251 remote=$ROUTER2_GIFIP6
252 peernet=$ROUTER2_LANNET6
253 else
254 addr=$ROUTER1_GIFIP
255 remote=$ROUTER2_GIFIP
256 peernet=$ROUTER2_LANNET
257 fi
258 if [ ${outer} = "ipv6" ]; then
259 src=$ROUTER1_WANIP6
260 dst=$ROUTER2_WANIP6
261 else
262 src=$ROUTER1_WANIP
263 dst=$ROUTER2_WANIP
264 fi
265 setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \
266 ${src} ${dst} ${peernet}
267
268 if [ $inner = "ipv6" ]; then
269 addr=$ROUTER2_GIFIP6
270 remote=$ROUTER1_GIFIP6
271 peernet=$ROUTER1_LANNET6
272 else
273 addr=$ROUTER2_GIFIP
274 remote=$ROUTER1_GIFIP
275 peernet=$ROUTER1_LANNET
276 fi
277 if [ $outer = "ipv6" ]; then
278 src=$ROUTER2_WANIP6
279 dst=$ROUTER1_WANIP6
280 else
281 src=$ROUTER2_WANIP
282 dst=$ROUTER1_WANIP
283 fi
284 setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \
285 ${src} ${dst} ${peernet}
286 }
287
288 test_setup_tunnel()
289 {
290 mode=${1}
291
292 peernet=""
293 opt=""
294 if [ ${mode} = "ipv6" ]; then
295 peernet=$ROUTER2_LANNET6
296 opt="-inet6"
297 else
298 peernet=$ROUTER2_LANNET
299 opt="-inet"
300 fi
301 export RUMP_SERVER=$SOCK1
302 atf_check -s exit:0 -o match:gif0 rump.ifconfig
303 atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
304
305 if [ ${mode} = "ipv6" ]; then
306 peernet=$ROUTER1_LANNET6
307 opt="-inet6"
308 else
309 peernet=$ROUTER1_LANNET
310 opt="-inet"
311 fi
312 export RUMP_SERVER=$SOCK2
313 atf_check -s exit:0 -o match:gif0 rump.ifconfig
314 atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
315 }
316
317 teardown_tunnel()
318 {
319 export RUMP_SERVER=$SOCK1
320 atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
321 atf_check -s exit:0 rump.ifconfig gif0 destroy
322
323 export RUMP_SERVER=$SOCK2
324 atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
325 atf_check -s exit:0 rump.ifconfig gif0 destroy
326 }
327
328 setup_dummy_if_gif()
329 {
330 sock=${1}
331 addr=${2}
332 remote=${3}
333 inner=${4}
334 src=${5}
335 dst=${6}
336
337 export RUMP_SERVER=${sock}
338 atf_check -s exit:0 rump.ifconfig gif1 create
339 atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst}
340 if [ ${inner} = "ipv6" ]; then
341 atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote}
342 else
343 atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote}
344 fi
345
346 rump.ifconfig gif1
347 }
348
349 setup_dummy_tunnel()
350 {
351 inner=${1}
352 outer=${2}
353
354 addr=""
355 remote=""
356 src=""
357 dst=""
358
359 if [ ${inner} = "ipv6" ]; then
360 addr=$ROUTER1_GIFIP6_DUMMY
361 remote=$ROUTER2_GIFIP6_DUMMY
362 else
363 addr=$ROUTER1_GIFIP_DUMMY
364 remote=$ROUTER2_GIFIP_DUMMY
365 fi
366 if [ ${outer} = "ipv6" ]; then
367 src=$ROUTER1_WANIP6_DUMMY
368 dst=$ROUTER2_WANIP6_DUMMY
369 else
370 src=$ROUTER1_WANIP_DUMMY
371 dst=$ROUTER2_WANIP_DUMMY
372 fi
373 setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \
374 ${src} ${dst}
375
376 if [ $inner = "ipv6" ]; then
377 addr=$ROUTER2_GIFIP6_DUMMY
378 remote=$ROUTER1_GIFIP6_DUMMY
379 else
380 addr=$ROUTER2_GIFIP_DUMMY
381 remote=$ROUTER1_GIFIP_DUMMY
382 fi
383 if [ $outer = "ipv6" ]; then
384 src=$ROUTER2_WANIP6_DUMMY
385 dst=$ROUTER1_WANIP6_DUMMY
386 else
387 src=$ROUTER2_WANIP_DUMMY
388 dst=$ROUTER1_WANIP_DUMMY
389 fi
390 setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \
391 ${src} ${dst}
392 }
393
394 test_setup_dummy_tunnel()
395 {
396 export RUMP_SERVER=$SOCK1
397 atf_check -s exit:0 -o match:gif1 rump.ifconfig
398
399 export RUMP_SERVER=$SOCK2
400 atf_check -s exit:0 -o match:gif1 rump.ifconfig
401 }
402
403 teardown_dummy_tunnel()
404 {
405 export RUMP_SERVER=$SOCK1
406 atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
407 atf_check -s exit:0 rump.ifconfig gif1 destroy
408
409 export RUMP_SERVER=$SOCK2
410 atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
411 atf_check -s exit:0 rump.ifconfig gif1 destroy
412 }
413
414 setup_recursive_if_gif()
415 {
416 sock=${1}
417 gif=${2}
418 addr=${3}
419 remote=${4}
420 inner=${5}
421 src=${6}
422 dst=${7}
423
424 export RUMP_SERVER=${sock}
425 atf_check -s exit:0 rump.ifconfig ${gif} create
426 atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst}
427 if [ ${inner} = "ipv6" ]; then
428 atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote}
429 else
430 atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote}
431 fi
432
433 rump.ifconfig ${gif}
434 }
435
436 # test in ROUTER1 only
437 setup_recursive_tunnels()
438 {
439 mode=${1}
440
441 addr=""
442 remote=""
443 src=""
444 dst=""
445
446 if [ ${mode} = "ipv6" ]; then
447 addr=$ROUTER1_GIFIP6_RECURSIVE1
448 remote=$ROUTER2_GIFIP6_RECURSIVE1
449 src=$ROUTER1_GIFIP6
450 dst=$ROUTER2_GIFIP6
451 else
452 addr=$ROUTER1_GIFIP_RECURSIVE1
453 remote=$ROUTER2_GIFIP_RECURSIVE1
454 src=$ROUTER1_GIFIP
455 dst=$ROUTER2_GIFIP
456 fi
457 setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \
458 ${src} ${dst}
459
460 if [ ${mode} = "ipv6" ]; then
461 addr=$ROUTER1_GIFIP6_RECURSIVE2
462 remote=$ROUTER2_GIFIP6_RECURSIVE2
463 src=$ROUTER1_GIFIP6_RECURSIVE1
464 dst=$ROUTER2_GIFIP6_RECURSIVE1
465 else
466 addr=$ROUTER1_GIFIP_RECURSIVE2
467 remote=$ROUTER2_GIFIP_RECURSIVE2
468 src=$ROUTER1_GIFIP_RECURSIVE1
469 dst=$ROUTER2_GIFIP_RECURSIVE1
470 fi
471 setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \
472 ${src} ${dst}
473 }
474
475 # test in router1 only
476 test_recursive_check()
477 {
478 mode=$1
479
480 export RUMP_SERVER=$SOCK1
481 if [ ${mode} = "ipv6" ]; then
482 atf_check -s not-exit:0 -o ignore -e ignore \
483 rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2
484 else
485 atf_check -s not-exit:0 -o ignore -e ignore \
486 rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2
487 fi
488
489 atf_check -o match:'gif0: recursively called too many times' \
490 -x "$HIJACKING dmesg"
491
492 $HIJACKING dmesg
493 }
494
495 teardown_recursive_tunnels()
496 {
497 export RUMP_SERVER=$SOCK1
498 atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
499 atf_check -s exit:0 rump.ifconfig gif1 destroy
500 atf_check -s exit:0 rump.ifconfig gif2 deletetunnel
501 atf_check -s exit:0 rump.ifconfig gif2 destroy
502 }
503
504 test_ping_failure()
505 {
506 mode=$1
507
508 export RUMP_SERVER=$SOCK1
509 if [ ${mode} = "ipv6" ]; then
510 atf_check -s not-exit:0 -o ignore -e ignore \
511 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
512 $ROUTER2_LANIP6
513 else
514 atf_check -s not-exit:0 -o ignore -e ignore \
515 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
516 $ROUTER2_LANIP
517 fi
518
519 export RUMP_SERVER=$SOCK2
520 if [ ${mode} = "ipv6" ]; then
521 atf_check -s not-exit:0 -o ignore -e ignore \
522 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
523 $ROUTER1_LANIP6
524 else
525 atf_check -s not-exit:0 -o ignore -e ignore \
526 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
527 $ROUTER2_LANIP
528 fi
529 }
530
531 test_ping_success()
532 {
533 mode=$1
534
535 export RUMP_SERVER=$SOCK1
536 rump.ifconfig -v gif0
537 if [ ${mode} = "ipv6" ]; then
538 # XXX
539 # rump.ping6 rarely fails with the message that
540 # "failed to get receiving hop limit".
541 # This is a known issue being analyzed.
542 atf_check -s exit:0 -o ignore \
543 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
544 $ROUTER2_LANIP6
545 else
546 atf_check -s exit:0 -o ignore \
547 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
548 $ROUTER2_LANIP
549 fi
550 rump.ifconfig -v gif0
551
552 export RUMP_SERVER=$SOCK2
553 rump.ifconfig -v gif0
554 if [ ${mode} = "ipv6" ]; then
555 atf_check -s exit:0 -o ignore \
556 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
557 $ROUTER1_LANIP6
558 else
559 atf_check -s exit:0 -o ignore \
560 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
561 $ROUTER1_LANIP
562 fi
563 rump.ifconfig -v gif0
564 }
565
566 test_change_tunnel_duplicate()
567 {
568 mode=$1
569
570 newsrc=""
571 newdst=""
572 if [ ${mode} = "ipv6" ]; then
573 newsrc=$ROUTER1_WANIP6_DUMMY
574 newdst=$ROUTER2_WANIP6_DUMMY
575 else
576 newsrc=$ROUTER1_WANIP_DUMMY
577 newdst=$ROUTER2_WANIP_DUMMY
578 fi
579 export RUMP_SERVER=$SOCK1
580 rump.ifconfig -v gif0
581 rump.ifconfig -v gif1
582 atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
583 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
584 rump.ifconfig -v gif0
585 rump.ifconfig -v gif1
586
587 if [ ${mode} = "ipv6" ]; then
588 newsrc=$ROUTER2_WANIP6_DUMMY
589 newdst=$ROUTER1_WANIP6_DUMMY
590 else
591 newsrc=$ROUTER2_WANIP_DUMMY
592 newdst=$ROUTER1_WANIP_DUMMY
593 fi
594 export RUMP_SERVER=$SOCK2
595 rump.ifconfig -v gif0
596 rump.ifconfig -v gif1
597 atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
598 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
599 rump.ifconfig -v gif0
600 rump.ifconfig -v gif1
601 }
602
603 test_change_tunnel_success()
604 {
605 mode=$1
606
607 newsrc=""
608 newdst=""
609 if [ ${mode} = "ipv6" ]; then
610 newsrc=$ROUTER1_WANIP6_DUMMY
611 newdst=$ROUTER2_WANIP6_DUMMY
612 else
613 newsrc=$ROUTER1_WANIP_DUMMY
614 newdst=$ROUTER2_WANIP_DUMMY
615 fi
616 export RUMP_SERVER=$SOCK1
617 rump.ifconfig -v gif0
618 atf_check -s exit:0 \
619 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
620 rump.ifconfig -v gif0
621
622 if [ ${mode} = "ipv6" ]; then
623 newsrc=$ROUTER2_WANIP6_DUMMY
624 newdst=$ROUTER1_WANIP6_DUMMY
625 else
626 newsrc=$ROUTER2_WANIP_DUMMY
627 newdst=$ROUTER1_WANIP_DUMMY
628 fi
629 export RUMP_SERVER=$SOCK2
630 rump.ifconfig -v gif0
631 atf_check -s exit:0 \
632 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
633 rump.ifconfig -v gif0
634 }
635
636 basic_setup()
637 {
638 inner=$1
639 outer=$2
640
641 setup ${inner} ${outer}
642 test_setup ${inner} ${outer}
643
644 # Enable once PR kern/49219 is fixed
645 #test_ping_failure
646
647 setup_tunnel ${inner} ${outer}
648 sleep 1
649 test_setup_tunnel ${inner}
650 }
651
652 basic_test()
653 {
654 inner=$1
655 outer=$2 # not use
656
657 test_ping_success ${inner}
658 }
659
660 basic_teardown()
661 {
662 inner=$1
663 outer=$2 # not use
664
665 teardown_tunnel
666 test_ping_failure ${inner}
667 }
668
669 ioctl_setup()
670 {
671 inner=$1
672 outer=$2
673
674 setup ${inner} ${outer}
675 test_setup ${inner} ${outer}
676
677 # Enable once PR kern/49219 is fixed
678 #test_ping_failure
679
680 setup_tunnel ${inner} ${outer}
681 setup_dummy_tunnel ${inner} ${outer}
682 sleep 1
683 test_setup_tunnel ${inner}
684 }
685
686 ioctl_test()
687 {
688 inner=$1
689 outer=$2
690
691 test_ping_success ${inner}
692
693 test_change_tunnel_duplicate ${outer}
694
695 teardown_dummy_tunnel
696 test_change_tunnel_success ${outer}
697 }
698
699 ioctl_teardown()
700 {
701 inner=$1
702 outer=$2 # not use
703
704 teardown_tunnel
705 test_ping_failure ${inner}
706 }
707
708 recursive_setup()
709 {
710 inner=$1
711 outer=$2
712
713 setup ${inner} ${outer}
714 test_setup ${inner} ${outer}
715
716 # Enable once PR kern/49219 is fixed
717 #test_ping_failure
718
719 setup_tunnel ${inner} ${outer}
720 setup_recursive_tunnels ${inner}
721 sleep 1
722 test_setup_tunnel ${inner}
723 }
724
725 recursive_test()
726 {
727 inner=$1
728 outer=$2 # not use
729
730 test_recursive_check ${inner}
731 }
732
733 recursive_teardown()
734 {
735 inner=$1 # not use
736 outer=$2 # not use
737
738 teardown_recursive_tunnels
739 teardown_tunnel
740 }
741
742 add_test()
743 {
744 category=$1
745 desc=$2
746 inner=$3
747 outer=$4
748
749 name="gif_${category}_${inner}over${outer}"
750 fulldesc="Does ${inner} over ${outer} if_gif ${desc}"
751
752 atf_test_case ${name} cleanup
753 eval "${name}_head() {
754 atf_set descr \"${fulldesc}\"
755 atf_set require.progs rump_server
756 }
757 ${name}_body() {
758 ${category}_setup ${inner} ${outer}
759 ${category}_test ${inner} ${outer}
760 ${category}_teardown ${inner} ${outer}
761 rump_server_destroy_ifaces
762 }
763 ${name}_cleanup() {
764 \$DEBUG && dump
765 cleanup
766 }"
767 atf_add_test_case ${name}
768 }
769
770 add_test_allproto()
771 {
772 category=$1
773 desc=$2
774
775 add_test ${category} "${desc}" ipv4 ipv4
776 add_test ${category} "${desc}" ipv4 ipv6
777 add_test ${category} "${desc}" ipv6 ipv4
778 add_test ${category} "${desc}" ipv6 ipv6
779 }
780
781 atf_init_test_cases()
782 {
783
784 atf_add_test_case gif_create_destroy
785
786 add_test_allproto basic "basic tests"
787 add_test_allproto ioctl "ioctl tests"
788 add_test_allproto recursive "recursive check tests"
789 }
790