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