]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/netbsd-tests/net/arp/t_arp.sh
MFC r305358,r305449,r305451,r306367,r306397,r309474:
[FreeBSD/stable/10.git] / contrib / netbsd-tests / net / arp / t_arp.sh
1 #       $NetBSD: t_arp.sh,v 1.16 2016/06/21 05:04:16 ozaki-r Exp $
2 #
3 # Copyright (c) 2015 The NetBSD Foundation, 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 inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
29 inetserver="$inetserver -lrumpdev -lrumpnet_tap"
30 HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes"
31
32 SOCKSRC=unix://commsock1
33 SOCKDST=unix://commsock2
34 IP4SRC=10.0.1.1
35 IP4DST=10.0.1.2
36 IP4DST_PROXYARP1=10.0.1.3
37 IP4DST_PROXYARP2=10.0.1.4
38
39 DEBUG=false
40 TIMEOUT=1
41
42 atf_test_case arp_cache_expiration_5s cleanup
43 atf_test_case arp_cache_expiration_10s cleanup
44 atf_test_case arp_command cleanup
45 atf_test_case arp_garp cleanup
46 atf_test_case arp_cache_overwriting cleanup
47 atf_test_case arp_proxy_arp_pub cleanup
48 atf_test_case arp_proxy_arp_pubproxy cleanup
49 atf_test_case arp_link_activation cleanup
50 atf_test_case arp_static cleanup
51
52 arp_cache_expiration_5s_head()
53 {
54         atf_set "descr" "Tests for ARP cache expiration (5s)"
55         atf_set "require.progs" "rump_server"
56 }
57
58 arp_cache_expiration_10s_head()
59 {
60         atf_set "descr" "Tests for ARP cache expiration (10s)"
61         atf_set "require.progs" "rump_server"
62 }
63
64 arp_command_head()
65 {
66         atf_set "descr" "Tests for arp_commands of arp(8)"
67         atf_set "require.progs" "rump_server"
68 }
69
70 arp_garp_head()
71 {
72         atf_set "descr" "Tests for GARP"
73         atf_set "require.progs" "rump_server"
74 }
75
76 arp_cache_overwriting_head()
77 {
78         atf_set "descr" "Tests for behavior of overwriting ARP caches"
79         atf_set "require.progs" "rump_server"
80 }
81
82 arp_proxy_arp_pub_head()
83 {
84         atf_set "descr" "Tests for Proxy ARP (pub)"
85         atf_set "require.progs" "rump_server"
86 }
87
88 arp_proxy_arp_pubproxy_head()
89 {
90         atf_set "descr" "Tests for Proxy ARP (pub proxy)"
91         atf_set "require.progs" "rump_server"
92 }
93
94 arp_link_activation_head()
95 {
96         atf_set "descr" "Tests for activating a new MAC address"
97         atf_set "require.progs" "rump_server"
98 }
99
100 arp_static_head()
101 {
102
103         atf_set "descr" "Tests for static ARP entries"
104         atf_set "require.progs" "rump_server"
105 }
106
107 setup_dst_server()
108 {
109         export RUMP_SERVER=$SOCKDST
110         atf_check -s exit:0 rump.ifconfig shmif0 create
111         atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
112         atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4DST/24
113         atf_check -s exit:0 rump.ifconfig shmif0 up
114         atf_check -s exit:0 rump.ifconfig -w 10
115
116         $DEBUG && rump.ifconfig shmif0
117         $DEBUG && rump.arp -n -a
118 }
119
120 setup_src_server()
121 {
122         local keep=$1
123
124         export RUMP_SERVER=$SOCKSRC
125
126         # Adjust ARP parameters
127         atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.arp.keep=$keep
128
129         # Setup an interface
130         atf_check -s exit:0 rump.ifconfig shmif0 create
131         atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
132         atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4SRC/24
133         atf_check -s exit:0 rump.ifconfig shmif0 up
134         atf_check -s exit:0 rump.ifconfig -w 10
135
136         # Sanity check
137         $DEBUG && rump.ifconfig shmif0
138         $DEBUG && rump.arp -n -a
139         atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
140         atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
141 }
142
143 test_cache_expiration()
144 {
145         local arp_keep=$1
146         local bonus=2
147
148         atf_check -s exit:0 ${inetserver} $SOCKSRC
149         atf_check -s exit:0 ${inetserver} $SOCKDST
150
151         setup_dst_server
152         setup_src_server $arp_keep
153
154         #
155         # Check if a cache is expired expectedly
156         #
157         export RUMP_SERVER=$SOCKSRC
158         atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
159
160         $DEBUG && rump.arp -n -a
161         atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
162         # Should be cached
163         atf_check -s exit:0 -o ignore rump.arp -n $IP4DST
164
165         atf_check -s exit:0 sleep $(($arp_keep + $bonus))
166
167         $DEBUG && rump.arp -n -a
168         atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
169         # Should be expired
170         atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
171 }
172
173 arp_cache_expiration_5s_body()
174 {
175         test_cache_expiration 5
176 }
177
178 arp_cache_expiration_10s_body()
179 {
180         test_cache_expiration 10
181 }
182
183 arp_command_body()
184 {
185         local arp_keep=5
186         local bonus=2
187
188         atf_check -s exit:0 ${inetserver} $SOCKSRC
189         atf_check -s exit:0 ${inetserver} $SOCKDST
190
191         setup_dst_server
192         setup_src_server $arp_keep
193
194         export RUMP_SERVER=$SOCKSRC
195
196         # We can delete the entry for the interface's IP address
197         atf_check -s exit:0 -o ignore rump.arp -d $IP4SRC
198
199         # Add and delete a static entry
200         $DEBUG && rump.arp -n -a
201         atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10
202         $DEBUG && rump.arp -n -a
203         atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
204         atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.10
205         atf_check -s exit:0 -o ignore rump.arp -d 10.0.1.10
206         $DEBUG && rump.arp -n -a
207         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
208
209         # Add multiple entries via a file
210         cat - > ./list <<-EOF
211         10.0.1.11 b2:a0:20:00:00:11
212         10.0.1.12 b2:a0:20:00:00:12
213         10.0.1.13 b2:a0:20:00:00:13
214         10.0.1.14 b2:a0:20:00:00:14
215         10.0.1.15 b2:a0:20:00:00:15
216         EOF
217         $DEBUG && rump.arp -n -a
218         atf_check -s exit:0 -o ignore rump.arp -f ./list
219         $DEBUG && rump.arp -n -a
220         atf_check -s exit:0 -o match:'b2:a0:20:00:00:11' rump.arp -n 10.0.1.11
221         atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.11
222         atf_check -s exit:0 -o match:'b2:a0:20:00:00:12' rump.arp -n 10.0.1.12
223         atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.12
224         atf_check -s exit:0 -o match:'b2:a0:20:00:00:13' rump.arp -n 10.0.1.13
225         atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.13
226         atf_check -s exit:0 -o match:'b2:a0:20:00:00:14' rump.arp -n 10.0.1.14
227         atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.14
228         atf_check -s exit:0 -o match:'b2:a0:20:00:00:15' rump.arp -n 10.0.1.15
229         atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.15
230
231         # Test arp -a
232         atf_check -s exit:0 -o match:'10.0.1.11' rump.arp -n -a
233         atf_check -s exit:0 -o match:'10.0.1.12' rump.arp -n -a
234         atf_check -s exit:0 -o match:'10.0.1.13' rump.arp -n -a
235         atf_check -s exit:0 -o match:'10.0.1.14' rump.arp -n -a
236         atf_check -s exit:0 -o match:'10.0.1.15' rump.arp -n -a
237
238         # Flush all entries
239         $DEBUG && rump.arp -n -a
240         atf_check -s exit:0 -o ignore rump.arp -d -a
241         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.11
242         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.12
243         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.13
244         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.14
245         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.15
246         atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.1
247
248         # Test temp option
249         $DEBUG && rump.arp -n -a
250         atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
251         $DEBUG && rump.arp -n -a
252         atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
253         atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
254
255         # Hm? the cache doesn't expire...
256         atf_check -s exit:0 sleep $(($arp_keep + $bonus))
257         $DEBUG && rump.arp -n -a
258         #atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
259
260         return 0
261 }
262
263 make_pkt_str_arpreq()
264 {
265         local target=$1
266         local sender=$2
267         pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:"
268         pkt="$pkt Request who-has $target tell $sender, length 28"
269         echo $pkt
270 }
271
272 arp_garp_body()
273 {
274         local pkt=
275
276         atf_check -s exit:0 ${inetserver} $SOCKSRC
277         export RUMP_SERVER=$SOCKSRC
278
279         # Setup an interface
280         atf_check -s exit:0 rump.ifconfig shmif0 create
281         atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
282         atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
283         atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
284         atf_check -s exit:0 rump.ifconfig shmif0 up
285         $DEBUG && rump.ifconfig shmif0
286
287         atf_check -s exit:0 sleep 1
288         shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
289
290         # A GARP packet is sent for the primary address
291         pkt=$(make_pkt_str_arpreq 10.0.0.1 10.0.0.1)
292         atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
293         # No GARP packet is sent for the alias address
294         pkt=$(make_pkt_str_arpreq 10.0.0.2 10.0.0.2)
295         atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
296
297         atf_check -s exit:0 rump.ifconfig -w 10
298         atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24
299         atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.4/24 alias
300
301         # No GARP packets are sent during IFF_UP
302         shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
303         pkt=$(make_pkt_str_arpreq 10.0.0.3 10.0.0.3)
304         atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
305         pkt=$(make_pkt_str_arpreq 10.0.0.4 10.0.0.4)
306         atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
307 }
308
309 arp_cache_overwriting_body()
310 {
311         local arp_keep=5
312         local bonus=2
313
314         atf_check -s exit:0 ${inetserver} $SOCKSRC
315         atf_check -s exit:0 ${inetserver} $SOCKDST
316
317         setup_dst_server
318         setup_src_server $arp_keep
319
320         export RUMP_SERVER=$SOCKSRC
321
322         # Cannot overwrite a permanent cache
323         atf_check -s not-exit:0 -e match:'File exists' \
324             rump.arp -s $IP4SRC b2:a0:20:00:00:ff
325         $DEBUG && rump.arp -n -a
326
327         atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
328         $DEBUG && rump.arp -n -a
329         # Can overwrite a dynamic cache
330         atf_check -s exit:0 -o ignore rump.arp -s $IP4DST b2:a0:20:00:00:00
331         $DEBUG && rump.arp -n -a
332         atf_check -s exit:0 -o match:'b2:a0:20:00:00:00' rump.arp -n $IP4DST
333         atf_check -s exit:0 -o match:'permanent' rump.arp -n $IP4DST
334
335         atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
336         $DEBUG && rump.arp -n -a
337         atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
338         atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
339         # Can overwrite a temp cache
340         atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:ff
341         atf_check -s exit:0 -o match:'b2:a0:20:00:00:ff' rump.arp -n 10.0.1.10
342         $DEBUG && rump.arp -n -a
343
344         return 0
345 }
346
347 make_pkt_str_arprep()
348 {
349         local ip=$1
350         local mac=$2
351         pkt="ethertype ARP (0x0806), length 42: "
352         pkt="Reply $ip is-at $mac, length 28"
353         echo $pkt
354 }
355
356 make_pkt_str_garp()
357 {
358         local ip=$1
359         local mac=$2
360         local pkt=
361         pkt="$mac > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),"
362         pkt="$pkt length 42: Request who-has $ip tell $ip, length 28"
363         echo $pkt
364 }
365
366 extract_new_packets()
367 {
368         local old=./old
369
370         if [ ! -f $old ]; then
371                 old=/dev/null
372         fi
373
374         shmif_dumpbus -p - bus1 2>/dev/null| \
375             tcpdump -n -e -r - 2>/dev/null > ./new
376         diff -u $old ./new |grep '^+' |cut -d '+' -f 2 > ./diff
377         mv -f ./new ./old
378         cat ./diff
379 }
380
381 test_proxy_arp()
382 {
383         local arp_keep=5
384         local opts= title= flags=
385         local type=$1
386
387         atf_check -s exit:0 ${inetserver} $SOCKSRC
388         atf_check -s exit:0 ${inetserver} $SOCKDST
389
390         setup_dst_server
391         setup_src_server $arp_keep
392
393         export RUMP_SERVER=$SOCKDST
394         atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
395         macaddr_dst=$(rump.ifconfig shmif0 |awk '/address/ {print $2;}')
396
397         if [ "$type" = "pub" ]; then
398                 opts="pub"
399                 title="permanent published"
400         else
401                 opts="pub proxy"
402                 title='permanent published \(proxy only\)'
403         fi
404
405         #
406         # Test#1: First setup an endpoint then create proxy arp entry
407         #
408         export RUMP_SERVER=$SOCKDST
409         atf_check -s exit:0 rump.ifconfig tap1 create
410         atf_check -s exit:0 rump.ifconfig tap1 $IP4DST_PROXYARP1/24 up
411         atf_check -s exit:0 rump.ifconfig -w 10
412
413         # Try to ping (should fail w/o proxy arp)
414         export RUMP_SERVER=$SOCKSRC
415         atf_check -s not-exit:0 -o ignore -e ignore \
416             rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
417
418         # Flushing
419         extract_new_packets > ./out
420
421         # Set up proxy ARP entry
422         export RUMP_SERVER=$SOCKDST
423         atf_check -s exit:0 -o ignore \
424             rump.arp -s $IP4DST_PROXYARP1 $macaddr_dst $opts
425         atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP1
426
427         # Try to ping
428         export RUMP_SERVER=$SOCKSRC
429         if [ "$type" = "pub" ]; then
430                 # XXX fails
431                 atf_check -s not-exit:0 -o ignore -e ignore \
432                     rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
433         else
434                 atf_check -s exit:0 -o ignore \
435                     rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
436         fi
437
438         extract_new_packets > ./out
439         $DEBUG && cat ./out
440
441         pkt1=$(make_pkt_str_arprep $IP4DST_PROXYARP1 $macaddr_dst)
442         pkt2=$(make_pkt_str_garp $IP4DST_PROXYARP1 $macaddr_dst)
443         if [ "$type" = "pub" ]; then
444                 atf_check -s not-exit:0 -x \
445                     "cat ./out |grep -q -e '$pkt1' -e '$pkt2'"
446         else
447                 atf_check -s exit:0 -x "cat ./out |grep -q -e '$pkt1' -e '$pkt2'"
448         fi
449
450         #
451         # Test#2: Create proxy arp entry then set up an endpoint
452         #
453         export RUMP_SERVER=$SOCKDST
454         atf_check -s exit:0 -o ignore \
455             rump.arp -s $IP4DST_PROXYARP2 $macaddr_dst $opts
456         atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP2
457         $DEBUG && rump.netstat -nr -f inet
458
459         # Try to ping (should fail because no endpoint exists)
460         export RUMP_SERVER=$SOCKSRC
461         atf_check -s not-exit:0 -o ignore -e ignore \
462             rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2
463
464         extract_new_packets > ./out
465         $DEBUG && cat ./out
466
467         # ARP reply should be sent
468         pkt=$(make_pkt_str_arprep $IP4DST_PROXYARP2 $macaddr_dst)
469         atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
470
471         export RUMP_SERVER=$SOCKDST
472         atf_check -s exit:0 rump.ifconfig tap2 create
473         atf_check -s exit:0 rump.ifconfig tap2 $IP4DST_PROXYARP2/24 up
474         atf_check -s exit:0 rump.ifconfig -w 10
475
476         # Try to ping
477         export RUMP_SERVER=$SOCKSRC
478         atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2
479 }
480
481 arp_proxy_arp_pub_body()
482 {
483
484         test_proxy_arp pub
485 }
486
487 arp_proxy_arp_pubproxy_body()
488 {
489
490         test_proxy_arp pubproxy
491 }
492
493 arp_link_activation_body()
494 {
495         local arp_keep=5
496         local bonus=2
497
498         atf_check -s exit:0 ${inetserver} $SOCKSRC
499         atf_check -s exit:0 ${inetserver} $SOCKDST
500
501         setup_dst_server
502         setup_src_server $arp_keep
503
504         # flush old packets
505         extract_new_packets > ./out
506
507         export RUMP_SERVER=$SOCKSRC
508
509         atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
510             b2:a1:00:00:00:01
511
512         atf_check -s exit:0 sleep 1
513         extract_new_packets > ./out
514         $DEBUG && cat ./out
515
516         pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
517         atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
518
519         atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
520             b2:a1:00:00:00:02 active
521
522         atf_check -s exit:0 sleep 1
523         extract_new_packets > ./out
524         $DEBUG && cat ./out
525
526         pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
527         atf_check -s exit:0 -x \
528             "cat ./out |grep '$pkt' |grep -q 'b2:a1:00:00:00:02'"
529 }
530
531 arp_static_body()
532 {
533         local arp_keep=5
534         local macaddr_src=
535
536         atf_check -s exit:0 ${inetserver} $SOCKSRC
537         atf_check -s exit:0 ${inetserver} $SOCKDST
538
539         setup_dst_server
540         setup_src_server $arp_keep
541
542         export RUMP_SERVER=$SOCKSRC
543         macaddr_src=$(rump.ifconfig shmif0 |awk '/address/ {print $2;}')
544
545         # Set a (valid) static ARP entry for the src server
546         export RUMP_SERVER=$SOCKDST
547         $DEBUG && rump.arp -n -a
548         atf_check -s exit:0 -o ignore rump.arp -s $IP4SRC $macaddr_src
549         $DEBUG && rump.arp -n -a
550
551         # Test receiving an ARP request with the static ARP entry (as spa/sha)
552         export RUMP_SERVER=$SOCKSRC
553         atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST
554 }
555
556 cleanup()
557 {
558         env RUMP_SERVER=$SOCKSRC rump.halt
559         env RUMP_SERVER=$SOCKDST rump.halt
560 }
561
562 dump_src()
563 {
564         export RUMP_SERVER=$SOCKSRC
565         rump.netstat -nr
566         rump.arp -n -a
567         rump.ifconfig
568         $HIJACKING dmesg
569 }
570
571 dump_dst()
572 {
573         export RUMP_SERVER=$SOCKDST
574         rump.netstat -nr
575         rump.arp -n -a
576         rump.ifconfig
577         $HIJACKING dmesg
578 }
579
580 dump()
581 {
582         dump_src
583         dump_dst
584         shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
585 }
586
587 arp_cache_expiration_5s_cleanup()
588 {
589         $DEBUG && dump
590         cleanup
591 }
592
593 arp_cache_expiration_10s_cleanup()
594 {
595         $DEBUG && dump
596         cleanup
597 }
598
599 arp_command_cleanup()
600 {
601         $DEBUG && dump
602         cleanup
603 }
604
605 arp_garp_cleanup()
606 {
607         $DEBUG && dump_src
608         $DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
609         env RUMP_SERVER=$SOCKSRC rump.halt
610 }
611
612 arp_cache_overwriting_cleanup()
613 {
614         $DEBUG && dump
615         cleanup
616 }
617
618 arp_proxy_arp_pub_cleanup()
619 {
620         $DEBUG && dump
621         cleanup
622 }
623
624 arp_proxy_arp_pubproxy_cleanup()
625 {
626         $DEBUG && dump
627         cleanup
628 }
629
630 arp_link_activation_cleanup()
631 {
632         $DEBUG && dump
633         cleanup
634 }
635
636 arp_static_cleanup()
637 {
638         $DEBUG && dump
639         cleanup
640 }
641
642 atf_init_test_cases()
643 {
644         atf_add_test_case arp_cache_expiration_5s
645         atf_add_test_case arp_cache_expiration_10s
646         atf_add_test_case arp_command
647         atf_add_test_case arp_garp
648         atf_add_test_case arp_cache_overwriting
649         atf_add_test_case arp_proxy_arp_pub
650         atf_add_test_case arp_proxy_arp_pubproxy
651         atf_add_test_case arp_link_activation
652         atf_add_test_case arp_static
653 }