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