t_gif.sh revision 1.9 1 # $NetBSD: t_gif.sh,v 1.9 2016/12/21 09:46:39 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:-true}
65 TIMEOUT=5
66
67 setup_router()
68 {
69 sock=${1}
70 lan=${2}
71 lan_mode=${3}
72 wan=${4}
73 wan_mode=${5}
74
75 rump_server_add_iface $sock shmif0 bus0
76 rump_server_add_iface $sock shmif1 bus1
77
78 export RUMP_SERVER=${sock}
79 if [ ${lan_mode} = "ipv6" ]; then
80 atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
81 else
82 atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
83 fi
84 atf_check -s exit:0 rump.ifconfig shmif0 up
85 rump.ifconfig shmif0
86
87 if [ ${wan_mode} = "ipv6" ]; then
88 atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
89 else
90 atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
91 fi
92 atf_check -s exit:0 rump.ifconfig shmif1 up
93 rump.ifconfig shmif1
94 }
95
96 test_router()
97 {
98 sock=${1}
99 lan=${2}
100 lan_mode=${3}
101 wan=${4}
102 wan_mode=${5}
103
104 export RUMP_SERVER=${sock}
105 atf_check -s exit:0 -o match:shmif0 rump.ifconfig
106 if [ ${lan_mode} = "ipv6" ]; then
107 atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
108 else
109 atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
110 fi
111
112 atf_check -s exit:0 -o match:shmif1 rump.ifconfig
113 if [ ${wan_mode} = "ipv6" ]; then
114 atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
115 else
116 atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
117 fi
118 }
119
120 setup()
121 {
122 inner=${1}
123 outer=${2}
124
125 rump_server_start $SOCK1 netinet6 gif
126 rump_server_start $SOCK2 netinet6 gif
127
128 router1_lan=""
129 router1_lan_mode=""
130 router2_lan=""
131 router2_lan_mode=""
132 if [ ${inner} = "ipv6" ]; then
133 router1_lan=$ROUTER1_LANIP6
134 router1_lan_mode="ipv6"
135 router2_lan=$ROUTER2_LANIP6
136 router2_lan_mode="ipv6"
137 else
138 router1_lan=$ROUTER1_LANIP
139 router1_lan_mode="ipv4"
140 router2_lan=$ROUTER2_LANIP
141 router2_lan_mode="ipv4"
142 fi
143
144 if [ ${outer} = "ipv6" ]; then
145 setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
146 $ROUTER1_WANIP6 ipv6
147 setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
148 $ROUTER2_WANIP6 ipv6
149 else
150 setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
151 $ROUTER1_WANIP ipv4
152 setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
153 $ROUTER2_WANIP ipv4
154 fi
155 }
156
157 test_setup()
158 {
159 inner=${1}
160 outer=${2}
161
162 router1_lan=""
163 router1_lan_mode=""
164 router2_lan=""
165 router2_lan_mode=""
166 if [ ${inner} = "ipv6" ]; then
167 router1_lan=$ROUTER1_LANIP6
168 router1_lan_mode="ipv6"
169 router2_lan=$ROUTER2_LANIP6
170 router2_lan_mode="ipv6"
171 else
172 router1_lan=$ROUTER1_LANIP
173 router1_lan_mode="ipv4"
174 router2_lan=$ROUTER2_LANIP
175 router2_lan_mode="ipv4"
176 fi
177 if [ ${outer} = "ipv6" ]; then
178 test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
179 $ROUTER1_WANIP6 ipv6
180 test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
181 $ROUTER2_WANIP6 ipv6
182 else
183 test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
184 $ROUTER1_WANIP ipv4
185 test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
186 $ROUTER2_WANIP ipv4
187 fi
188 }
189
190 setup_if_gif()
191 {
192 sock=${1}
193 addr=${2}
194 remote=${3}
195 inner=${4}
196 src=${5}
197 dst=${6}
198 peernet=${7}
199
200 export RUMP_SERVER=${sock}
201 atf_check -s exit:0 rump.ifconfig gif0 create
202 atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst}
203 if [ ${inner} = "ipv6" ]; then
204 atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote}
205 atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
206 else
207 atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote}
208 atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
209 fi
210
211 rump.ifconfig gif0
212 rump.route -nL show
213 }
214
215 setup_tunnel()
216 {
217 inner=${1}
218 outer=${2}
219
220 addr=""
221 remote=""
222 src=""
223 dst=""
224 peernet=""
225
226 if [ ${inner} = "ipv6" ]; then
227 addr=$ROUTER1_GIFIP6
228 remote=$ROUTER2_GIFIP6
229 peernet=$ROUTER2_LANNET6
230 else
231 addr=$ROUTER1_GIFIP
232 remote=$ROUTER2_GIFIP
233 peernet=$ROUTER2_LANNET
234 fi
235 if [ ${outer} = "ipv6" ]; then
236 src=$ROUTER1_WANIP6
237 dst=$ROUTER2_WANIP6
238 else
239 src=$ROUTER1_WANIP
240 dst=$ROUTER2_WANIP
241 fi
242 setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \
243 ${src} ${dst} ${peernet}
244
245 if [ $inner = "ipv6" ]; then
246 addr=$ROUTER2_GIFIP6
247 remote=$ROUTER1_GIFIP6
248 peernet=$ROUTER1_LANNET6
249 else
250 addr=$ROUTER2_GIFIP
251 remote=$ROUTER1_GIFIP
252 peernet=$ROUTER1_LANNET
253 fi
254 if [ $outer = "ipv6" ]; then
255 src=$ROUTER2_WANIP6
256 dst=$ROUTER1_WANIP6
257 else
258 src=$ROUTER2_WANIP
259 dst=$ROUTER1_WANIP
260 fi
261 setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \
262 ${src} ${dst} ${peernet}
263 }
264
265 test_setup_tunnel()
266 {
267 mode=${1}
268
269 peernet=""
270 opt=""
271 if [ ${mode} = "ipv6" ]; then
272 peernet=$ROUTER2_LANNET6
273 opt="-inet6"
274 else
275 peernet=$ROUTER2_LANNET
276 opt="-inet"
277 fi
278 export RUMP_SERVER=$SOCK1
279 atf_check -s exit:0 -o match:gif0 rump.ifconfig
280 atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
281
282 if [ ${mode} = "ipv6" ]; then
283 peernet=$ROUTER1_LANNET6
284 opt="-inet6"
285 else
286 peernet=$ROUTER1_LANNET
287 opt="-inet"
288 fi
289 export RUMP_SERVER=$SOCK2
290 atf_check -s exit:0 -o match:gif0 rump.ifconfig
291 atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
292 }
293
294 teardown_tunnel()
295 {
296 export RUMP_SERVER=$SOCK1
297 atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
298 atf_check -s exit:0 rump.ifconfig gif0 destroy
299
300 export RUMP_SERVER=$SOCK2
301 atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
302 atf_check -s exit:0 rump.ifconfig gif0 destroy
303 }
304
305 setup_dummy_if_gif()
306 {
307 sock=${1}
308 addr=${2}
309 remote=${3}
310 inner=${4}
311 src=${5}
312 dst=${6}
313
314 export RUMP_SERVER=${sock}
315 atf_check -s exit:0 rump.ifconfig gif1 create
316 atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst}
317 if [ ${inner} = "ipv6" ]; then
318 atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote}
319 else
320 atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote}
321 fi
322
323 rump.ifconfig gif1
324 }
325
326 setup_dummy_tunnel()
327 {
328 inner=${1}
329 outer=${2}
330
331 addr=""
332 remote=""
333 src=""
334 dst=""
335
336 if [ ${inner} = "ipv6" ]; then
337 addr=$ROUTER1_GIFIP6_DUMMY
338 remote=$ROUTER2_GIFIP6_DUMMY
339 else
340 addr=$ROUTER1_GIFIP_DUMMY
341 remote=$ROUTER2_GIFIP_DUMMY
342 fi
343 if [ ${outer} = "ipv6" ]; then
344 src=$ROUTER1_WANIP6_DUMMY
345 dst=$ROUTER2_WANIP6_DUMMY
346 else
347 src=$ROUTER1_WANIP_DUMMY
348 dst=$ROUTER2_WANIP_DUMMY
349 fi
350 setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \
351 ${src} ${dst}
352
353 if [ $inner = "ipv6" ]; then
354 addr=$ROUTER2_GIFIP6_DUMMY
355 remote=$ROUTER1_GIFIP6_DUMMY
356 else
357 addr=$ROUTER2_GIFIP_DUMMY
358 remote=$ROUTER1_GIFIP_DUMMY
359 fi
360 if [ $outer = "ipv6" ]; then
361 src=$ROUTER2_WANIP6_DUMMY
362 dst=$ROUTER1_WANIP6_DUMMY
363 else
364 src=$ROUTER2_WANIP_DUMMY
365 dst=$ROUTER1_WANIP_DUMMY
366 fi
367 setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \
368 ${src} ${dst}
369 }
370
371 test_setup_dummy_tunnel()
372 {
373 export RUMP_SERVER=$SOCK1
374 atf_check -s exit:0 -o match:gif1 rump.ifconfig
375
376 export RUMP_SERVER=$SOCK2
377 atf_check -s exit:0 -o match:gif1 rump.ifconfig
378 }
379
380 teardown_dummy_tunnel()
381 {
382 export RUMP_SERVER=$SOCK1
383 atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
384 atf_check -s exit:0 rump.ifconfig gif1 destroy
385
386 export RUMP_SERVER=$SOCK2
387 atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
388 atf_check -s exit:0 rump.ifconfig gif1 destroy
389 }
390
391 setup_recursive_if_gif()
392 {
393 sock=${1}
394 gif=${2}
395 addr=${3}
396 remote=${4}
397 inner=${5}
398 src=${6}
399 dst=${7}
400
401 export RUMP_SERVER=${sock}
402 atf_check -s exit:0 rump.ifconfig ${gif} create
403 atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst}
404 if [ ${inner} = "ipv6" ]; then
405 atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote}
406 else
407 atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote}
408 fi
409
410 rump.ifconfig ${gif}
411 }
412
413 # test in ROUTER1 only
414 setup_recursive_tunnels()
415 {
416 mode=${1}
417
418 addr=""
419 remote=""
420 src=""
421 dst=""
422
423 if [ ${mode} = "ipv6" ]; then
424 addr=$ROUTER1_GIFIP6_RECURSIVE1
425 remote=$ROUTER2_GIFIP6_RECURSIVE1
426 src=$ROUTER1_GIFIP6
427 dst=$ROUTER2_GIFIP6
428 else
429 addr=$ROUTER1_GIFIP_RECURSIVE1
430 remote=$ROUTER2_GIFIP_RECURSIVE1
431 src=$ROUTER1_GIFIP
432 dst=$ROUTER2_GIFIP
433 fi
434 setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \
435 ${src} ${dst}
436
437 if [ ${mode} = "ipv6" ]; then
438 addr=$ROUTER1_GIFIP6_RECURSIVE2
439 remote=$ROUTER2_GIFIP6_RECURSIVE2
440 src=$ROUTER1_GIFIP6_RECURSIVE1
441 dst=$ROUTER2_GIFIP6_RECURSIVE1
442 else
443 addr=$ROUTER1_GIFIP_RECURSIVE2
444 remote=$ROUTER2_GIFIP_RECURSIVE2
445 src=$ROUTER1_GIFIP_RECURSIVE1
446 dst=$ROUTER2_GIFIP_RECURSIVE1
447 fi
448 setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \
449 ${src} ${dst}
450 }
451
452 # test in router1 only
453 test_recursive_check()
454 {
455 mode=$1
456
457 export RUMP_SERVER=$SOCK1
458 if [ ${mode} = "ipv6" ]; then
459 atf_check -s not-exit:0 -o ignore -e ignore \
460 rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2
461 else
462 atf_check -s not-exit:0 -o ignore -e ignore \
463 rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2
464 fi
465
466 atf_check -o match:'gif0: recursively called too many times' \
467 -x "$HIJACKING dmesg"
468
469 $HIJACKING dmesg
470 }
471
472 teardown_recursive_tunnels()
473 {
474 export RUMP_SERVER=$SOCK1
475 atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
476 atf_check -s exit:0 rump.ifconfig gif1 destroy
477 atf_check -s exit:0 rump.ifconfig gif2 deletetunnel
478 atf_check -s exit:0 rump.ifconfig gif2 destroy
479 }
480
481 test_ping_failure()
482 {
483 mode=$1
484
485 export RUMP_SERVER=$SOCK1
486 if [ ${mode} = "ipv6" ]; then
487 atf_check -s not-exit:0 -o ignore -e ignore \
488 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
489 $ROUTER2_LANIP6
490 else
491 atf_check -s not-exit:0 -o ignore -e ignore \
492 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
493 $ROUTER2_LANIP
494 fi
495
496 export RUMP_SERVER=$SOCK2
497 if [ ${mode} = "ipv6" ]; then
498 atf_check -s not-exit:0 -o ignore -e ignore \
499 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
500 $ROUTER1_LANIP6
501 else
502 atf_check -s not-exit:0 -o ignore -e ignore \
503 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
504 $ROUTER2_LANIP
505 fi
506 }
507
508 test_ping_success()
509 {
510 mode=$1
511
512 export RUMP_SERVER=$SOCK1
513 rump.ifconfig -v gif0
514 if [ ${mode} = "ipv6" ]; then
515 # XXX
516 # rump.ping6 rarely fails with the message that
517 # "failed to get receiving hop limit".
518 # This is a known issue being analyzed.
519 atf_check -s exit:0 -o ignore \
520 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
521 $ROUTER2_LANIP6
522 else
523 atf_check -s exit:0 -o ignore \
524 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
525 $ROUTER2_LANIP
526 fi
527 rump.ifconfig -v gif0
528
529 export RUMP_SERVER=$SOCK2
530 rump.ifconfig -v gif0
531 if [ ${mode} = "ipv6" ]; then
532 atf_check -s exit:0 -o ignore \
533 rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
534 $ROUTER1_LANIP6
535 else
536 atf_check -s exit:0 -o ignore \
537 rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
538 $ROUTER1_LANIP
539 fi
540 rump.ifconfig -v gif0
541 }
542
543 test_change_tunnel_duplicate()
544 {
545 mode=$1
546
547 newsrc=""
548 newdst=""
549 if [ ${mode} = "ipv6" ]; then
550 newsrc=$ROUTER1_WANIP6_DUMMY
551 newdst=$ROUTER2_WANIP6_DUMMY
552 else
553 newsrc=$ROUTER1_WANIP_DUMMY
554 newdst=$ROUTER2_WANIP_DUMMY
555 fi
556 export RUMP_SERVER=$SOCK1
557 rump.ifconfig -v gif0
558 rump.ifconfig -v gif1
559 atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
560 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
561 rump.ifconfig -v gif0
562 rump.ifconfig -v gif1
563
564 if [ ${mode} = "ipv6" ]; then
565 newsrc=$ROUTER2_WANIP6_DUMMY
566 newdst=$ROUTER1_WANIP6_DUMMY
567 else
568 newsrc=$ROUTER2_WANIP_DUMMY
569 newdst=$ROUTER1_WANIP_DUMMY
570 fi
571 export RUMP_SERVER=$SOCK2
572 rump.ifconfig -v gif0
573 rump.ifconfig -v gif1
574 atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
575 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
576 rump.ifconfig -v gif0
577 rump.ifconfig -v gif1
578 }
579
580 test_change_tunnel_success()
581 {
582 mode=$1
583
584 newsrc=""
585 newdst=""
586 if [ ${mode} = "ipv6" ]; then
587 newsrc=$ROUTER1_WANIP6_DUMMY
588 newdst=$ROUTER2_WANIP6_DUMMY
589 else
590 newsrc=$ROUTER1_WANIP_DUMMY
591 newdst=$ROUTER2_WANIP_DUMMY
592 fi
593 export RUMP_SERVER=$SOCK1
594 rump.ifconfig -v gif0
595 atf_check -s exit:0 \
596 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
597 rump.ifconfig -v gif0
598
599 if [ ${mode} = "ipv6" ]; then
600 newsrc=$ROUTER2_WANIP6_DUMMY
601 newdst=$ROUTER1_WANIP6_DUMMY
602 else
603 newsrc=$ROUTER2_WANIP_DUMMY
604 newdst=$ROUTER1_WANIP_DUMMY
605 fi
606 export RUMP_SERVER=$SOCK2
607 rump.ifconfig -v gif0
608 atf_check -s exit:0 \
609 rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
610 rump.ifconfig -v gif0
611 }
612
613 basic_setup()
614 {
615 inner=$1
616 outer=$2
617
618 setup ${inner} ${outer}
619 test_setup ${inner} ${outer}
620
621 # Enable once PR kern/49219 is fixed
622 #test_ping_failure
623
624 setup_tunnel ${inner} ${outer}
625 sleep 1
626 test_setup_tunnel ${inner}
627 }
628
629 basic_test()
630 {
631 inner=$1
632 outer=$2 # not use
633
634 test_ping_success ${inner}
635 }
636
637 basic_teardown()
638 {
639 inner=$1
640 outer=$2 # not use
641
642 teardown_tunnel
643 test_ping_failure ${inner}
644 }
645
646 ioctl_setup()
647 {
648 inner=$1
649 outer=$2
650
651 setup ${inner} ${outer}
652 test_setup ${inner} ${outer}
653
654 # Enable once PR kern/49219 is fixed
655 #test_ping_failure
656
657 setup_tunnel ${inner} ${outer}
658 setup_dummy_tunnel ${inner} ${outer}
659 sleep 1
660 test_setup_tunnel ${inner}
661 }
662
663 ioctl_test()
664 {
665 inner=$1
666 outer=$2
667
668 test_ping_success ${inner}
669
670 test_change_tunnel_duplicate ${outer}
671
672 teardown_dummy_tunnel
673 test_change_tunnel_success ${outer}
674 }
675
676 ioctl_teardown()
677 {
678 inner=$1
679 outer=$2 # not use
680
681 teardown_tunnel
682 test_ping_failure ${inner}
683 }
684
685 recursive_setup()
686 {
687 inner=$1
688 outer=$2
689
690 setup ${inner} ${outer}
691 test_setup ${inner} ${outer}
692
693 # Enable once PR kern/49219 is fixed
694 #test_ping_failure
695
696 setup_tunnel ${inner} ${outer}
697 setup_recursive_tunnels ${inner}
698 sleep 1
699 test_setup_tunnel ${inner}
700 }
701
702 recursive_test()
703 {
704 inner=$1
705 outer=$2 # not use
706
707 test_recursive_check ${inner}
708 }
709
710 recursive_teardown()
711 {
712 inner=$1 # not use
713 outer=$2 # not use
714
715 teardown_recursive_tunnels
716 teardown_tunnel
717 }
718
719 add_test()
720 {
721 category=$1
722 desc=$2
723 inner=$3
724 outer=$4
725
726 name="gif_${category}_${inner}over${outer}"
727 fulldesc="Does ${inner} over ${outer} if_gif ${desc}"
728
729 atf_test_case ${name} cleanup
730 eval "${name}_head() { \
731 atf_set \"descr\" \"${fulldesc}\"; \
732 atf_set \"require.progs\" \"rump_server\"; \
733 }; \
734 ${name}_body() { \
735 ${category}_setup ${inner} ${outer}; \
736 ${category}_test ${inner} ${outer}; \
737 ${category}_teardown ${inner} ${outer}; \
738 rump_server_destroy_ifaces; \
739 }; \
740 ${name}_cleanup() { \
741 $DEBUG && dump; \
742 cleanup; \
743 }"
744 atf_add_test_case ${name}
745 }
746
747 add_test_allproto()
748 {
749 category=$1
750 desc=$2
751
752 add_test ${category} "${desc}" ipv4 ipv4
753 add_test ${category} "${desc}" ipv4 ipv6
754 add_test ${category} "${desc}" ipv6 ipv4
755 add_test ${category} "${desc}" ipv6 ipv6
756 }
757
758 atf_init_test_cases()
759 {
760 add_test_allproto basic "basic tests"
761 add_test_allproto ioctl "ioctl tests"
762 add_test_allproto recursive "recursive check tests"
763 }
764