Home | History | Annotate | Line # | Download | only in arp
t_arp.sh revision 1.11
      1  1.11  ozaki #	$NetBSD: t_arp.sh,v 1.11 2016/02/25 03:23:15 ozaki-r Exp $
      2   1.1  ozaki #
      3   1.1  ozaki # Copyright (c) 2015 The NetBSD Foundation, Inc.
      4   1.1  ozaki # All rights reserved.
      5   1.1  ozaki #
      6   1.1  ozaki # Redistribution and use in source and binary forms, with or without
      7   1.1  ozaki # modification, are permitted provided that the following conditions
      8   1.1  ozaki # are met:
      9   1.1  ozaki # 1. Redistributions of source code must retain the above copyright
     10   1.1  ozaki #    notice, this list of conditions and the following disclaimer.
     11   1.1  ozaki # 2. Redistributions in binary form must reproduce the above copyright
     12   1.1  ozaki #    notice, this list of conditions and the following disclaimer in the
     13   1.1  ozaki #    documentation and/or other materials provided with the distribution.
     14   1.1  ozaki #
     15   1.1  ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16   1.1  ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17   1.1  ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18   1.1  ozaki # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19   1.1  ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20   1.1  ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21   1.1  ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22   1.1  ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23   1.1  ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24   1.1  ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25   1.1  ozaki # POSSIBILITY OF SUCH DAMAGE.
     26   1.1  ozaki #
     27   1.1  ozaki 
     28   1.1  ozaki inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
     29   1.1  ozaki HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes"
     30   1.1  ozaki 
     31   1.1  ozaki SOCKSRC=unix://commsock1
     32   1.1  ozaki SOCKDST=unix://commsock2
     33   1.1  ozaki IP4SRC=10.0.1.1
     34   1.1  ozaki IP4DST=10.0.1.2
     35  1.11  ozaki IP4DST_PUB=10.0.1.3
     36  1.11  ozaki MACDST_PUB=b2:a1:00:00:00:01
     37  1.11  ozaki IP4DST_PUBPROXY=10.0.1.4
     38  1.11  ozaki MACDST_PUBPROXY=b2:a1:00:00:00:02
     39   1.1  ozaki 
     40   1.1  ozaki DEBUG=false
     41   1.1  ozaki TIMEOUT=1
     42   1.1  ozaki 
     43   1.1  ozaki atf_test_case cache_expiration_5s cleanup
     44   1.1  ozaki atf_test_case cache_expiration_10s cleanup
     45   1.1  ozaki atf_test_case command cleanup
     46   1.2  ozaki atf_test_case garp cleanup
     47   1.5  ozaki atf_test_case cache_overwriting cleanup
     48  1.11  ozaki atf_test_case pubproxy_arp cleanup
     49   1.1  ozaki 
     50   1.1  ozaki cache_expiration_5s_head()
     51   1.1  ozaki {
     52   1.1  ozaki 	atf_set "descr" "Tests for ARP cache expiration (5s)"
     53   1.1  ozaki 	atf_set "require.progs" "rump_server"
     54   1.1  ozaki }
     55   1.1  ozaki 
     56   1.1  ozaki cache_expiration_10s_head()
     57   1.1  ozaki {
     58   1.1  ozaki 	atf_set "descr" "Tests for ARP cache expiration (10s)"
     59   1.1  ozaki 	atf_set "require.progs" "rump_server"
     60   1.1  ozaki }
     61   1.1  ozaki 
     62   1.1  ozaki command_head()
     63   1.1  ozaki {
     64   1.1  ozaki 	atf_set "descr" "Tests for commands of arp(8)"
     65   1.1  ozaki 	atf_set "require.progs" "rump_server"
     66   1.1  ozaki }
     67   1.1  ozaki 
     68   1.2  ozaki garp_head()
     69   1.2  ozaki {
     70   1.2  ozaki 	atf_set "descr" "Tests for GARP"
     71   1.2  ozaki 	atf_set "require.progs" "rump_server"
     72   1.2  ozaki }
     73   1.2  ozaki 
     74   1.5  ozaki cache_overwriting_head()
     75   1.5  ozaki {
     76   1.5  ozaki 	atf_set "descr" "Tests for behavior of overwriting ARP caches"
     77   1.5  ozaki 	atf_set "require.progs" "rump_server"
     78   1.5  ozaki }
     79   1.5  ozaki 
     80  1.11  ozaki pubproxy_arp_head()
     81  1.11  ozaki {
     82  1.11  ozaki 	atf_set "descr" "Tests for Proxy ARP"
     83  1.11  ozaki 	atf_set "require.progs" "rump_server"
     84  1.11  ozaki }
     85  1.11  ozaki 
     86   1.1  ozaki setup_dst_server()
     87   1.1  ozaki {
     88   1.1  ozaki 	export RUMP_SERVER=$SOCKDST
     89   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 create
     90   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
     91   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4DST/24
     92   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
     93   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig -w 10
     94   1.1  ozaki 
     95   1.1  ozaki 	$DEBUG && rump.ifconfig shmif0
     96   1.1  ozaki 	$DEBUG && rump.arp -n -a
     97   1.1  ozaki }
     98   1.1  ozaki 
     99   1.1  ozaki setup_src_server()
    100   1.1  ozaki {
    101   1.9  ozaki 	local keep=$1
    102   1.1  ozaki 
    103   1.1  ozaki 	export RUMP_SERVER=$SOCKSRC
    104   1.1  ozaki 
    105   1.1  ozaki 	# Adjust ARP parameters
    106   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.arp.keep=$keep
    107   1.1  ozaki 
    108   1.1  ozaki 	# Setup an interface
    109   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 create
    110   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
    111   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4SRC/24
    112   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
    113   1.1  ozaki 	atf_check -s exit:0 rump.ifconfig -w 10
    114   1.1  ozaki 
    115   1.1  ozaki 	# Sanity check
    116   1.1  ozaki 	$DEBUG && rump.ifconfig shmif0
    117   1.1  ozaki 	$DEBUG && rump.arp -n -a
    118   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
    119   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
    120   1.1  ozaki }
    121   1.1  ozaki 
    122   1.1  ozaki test_cache_expiration()
    123   1.1  ozaki {
    124   1.1  ozaki 	local arp_keep=$1
    125   1.1  ozaki 	local bonus=2
    126   1.1  ozaki 
    127   1.1  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKSRC
    128   1.1  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKDST
    129   1.1  ozaki 
    130   1.1  ozaki 	setup_dst_server
    131   1.9  ozaki 	setup_src_server $arp_keep
    132   1.1  ozaki 
    133   1.1  ozaki 	#
    134   1.1  ozaki 	# Check if a cache is expired expectedly
    135   1.1  ozaki 	#
    136   1.1  ozaki 	export RUMP_SERVER=$SOCKSRC
    137   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
    138   1.1  ozaki 
    139   1.1  ozaki 	$DEBUG && rump.arp -n -a
    140   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
    141   1.1  ozaki 	# Should be cached
    142   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -n $IP4DST
    143   1.1  ozaki 
    144   1.9  ozaki 	atf_check -s exit:0 sleep $(($arp_keep + $bonus))
    145   1.1  ozaki 
    146   1.1  ozaki 	$DEBUG && rump.arp -n -a
    147   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
    148   1.1  ozaki 	# Should be expired
    149   1.8  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
    150   1.1  ozaki }
    151   1.1  ozaki 
    152   1.1  ozaki cache_expiration_5s_body()
    153   1.1  ozaki {
    154   1.1  ozaki 	test_cache_expiration 5
    155   1.1  ozaki }
    156   1.1  ozaki 
    157   1.1  ozaki cache_expiration_10s_body()
    158   1.1  ozaki {
    159   1.1  ozaki 	test_cache_expiration 10
    160   1.1  ozaki }
    161   1.1  ozaki 
    162   1.1  ozaki command_body()
    163   1.1  ozaki {
    164   1.1  ozaki 	local arp_keep=5
    165   1.1  ozaki 	local bonus=2
    166   1.1  ozaki 
    167   1.1  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKSRC
    168   1.1  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKDST
    169   1.1  ozaki 
    170   1.1  ozaki 	setup_dst_server
    171   1.9  ozaki 	setup_src_server $arp_keep
    172   1.1  ozaki 
    173   1.1  ozaki 	export RUMP_SERVER=$SOCKSRC
    174   1.1  ozaki 
    175   1.1  ozaki 	# Add and delete a static entry
    176   1.1  ozaki 	$DEBUG && rump.arp -n -a
    177   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10
    178   1.1  ozaki 	$DEBUG && rump.arp -n -a
    179   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
    180   1.1  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.10
    181   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -d 10.0.1.10
    182   1.1  ozaki 	$DEBUG && rump.arp -n -a
    183   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
    184   1.1  ozaki 
    185   1.1  ozaki 	# Add multiple entries via a file
    186   1.1  ozaki 	cat - > ./list <<-EOF
    187   1.1  ozaki 	10.0.1.11 b2:a0:20:00:00:11
    188   1.1  ozaki 	10.0.1.12 b2:a0:20:00:00:12
    189   1.1  ozaki 	10.0.1.13 b2:a0:20:00:00:13
    190   1.1  ozaki 	10.0.1.14 b2:a0:20:00:00:14
    191   1.1  ozaki 	10.0.1.15 b2:a0:20:00:00:15
    192   1.1  ozaki 	EOF
    193   1.1  ozaki 	$DEBUG && rump.arp -n -a
    194   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -f ./list
    195   1.1  ozaki 	$DEBUG && rump.arp -n -a
    196   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:11' rump.arp -n 10.0.1.11
    197   1.1  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.11
    198   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:12' rump.arp -n 10.0.1.12
    199   1.1  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.12
    200   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:13' rump.arp -n 10.0.1.13
    201   1.1  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.13
    202   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:14' rump.arp -n 10.0.1.14
    203   1.1  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.14
    204   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:15' rump.arp -n 10.0.1.15
    205   1.1  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.15
    206   1.1  ozaki 
    207   1.3  ozaki 	# Test arp -a
    208   1.3  ozaki 	atf_check -s exit:0 -o match:'10.0.1.11' rump.arp -n -a
    209   1.3  ozaki 	atf_check -s exit:0 -o match:'10.0.1.12' rump.arp -n -a
    210   1.3  ozaki 	atf_check -s exit:0 -o match:'10.0.1.13' rump.arp -n -a
    211   1.3  ozaki 	atf_check -s exit:0 -o match:'10.0.1.14' rump.arp -n -a
    212   1.3  ozaki 	atf_check -s exit:0 -o match:'10.0.1.15' rump.arp -n -a
    213   1.3  ozaki 
    214   1.1  ozaki 	# Flush all entries
    215   1.1  ozaki 	$DEBUG && rump.arp -n -a
    216   1.1  ozaki 	atf_check -s exit:0 -o ignore rump.arp -d -a
    217   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.11
    218   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.12
    219   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.13
    220   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.14
    221   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.15
    222   1.1  ozaki 	atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.1
    223   1.4  ozaki 
    224   1.4  ozaki 	# Test temp option
    225   1.4  ozaki 	$DEBUG && rump.arp -n -a
    226   1.4  ozaki 	atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
    227   1.4  ozaki 	$DEBUG && rump.arp -n -a
    228   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
    229   1.4  ozaki 	atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
    230   1.4  ozaki 
    231   1.4  ozaki 	# Hm? the cache doesn't expire...
    232   1.9  ozaki 	atf_check -s exit:0 sleep $(($arp_keep + $bonus))
    233   1.4  ozaki 	$DEBUG && rump.arp -n -a
    234   1.8  ozaki 	#atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
    235   1.6  ozaki 
    236   1.6  ozaki 	return 0
    237   1.1  ozaki }
    238   1.1  ozaki 
    239  1.11  ozaki make_pkt_str_arpreq()
    240   1.2  ozaki {
    241   1.2  ozaki 	local target=$1
    242   1.2  ozaki 	local sender=$2
    243   1.2  ozaki 	pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:"
    244   1.2  ozaki 	pkt="$pkt Request who-has $target tell $sender, length 28"
    245   1.2  ozaki 	echo $pkt
    246   1.2  ozaki }
    247   1.2  ozaki 
    248   1.2  ozaki garp_body()
    249   1.2  ozaki {
    250   1.2  ozaki 	local pkt=
    251   1.2  ozaki 
    252   1.2  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKSRC
    253   1.2  ozaki 	export RUMP_SERVER=$SOCKSRC
    254   1.2  ozaki 
    255   1.2  ozaki 	# Setup an interface
    256   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 create
    257   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
    258   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
    259   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
    260   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 up
    261   1.2  ozaki 	$DEBUG && rump.ifconfig shmif0
    262   1.2  ozaki 
    263   1.2  ozaki 	atf_check -s exit:0 sleep 1
    264   1.2  ozaki 	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
    265   1.2  ozaki 
    266   1.2  ozaki 	# A GARP packet is sent for the primary address
    267  1.11  ozaki 	pkt=$(make_pkt_str_arpreq 10.0.0.1 10.0.0.1)
    268   1.2  ozaki 	atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
    269   1.2  ozaki 	# No GARP packet is sent for the alias address
    270  1.11  ozaki 	pkt=$(make_pkt_str_arpreq 10.0.0.2 10.0.0.2)
    271   1.2  ozaki 	atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
    272   1.2  ozaki 
    273   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig -w 10
    274   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24
    275   1.2  ozaki 	atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.4/24 alias
    276   1.2  ozaki 
    277   1.2  ozaki 	# No GARP packets are sent during IFF_UP
    278   1.2  ozaki 	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
    279  1.11  ozaki 	pkt=$(make_pkt_str_arpreq 10.0.0.3 10.0.0.3)
    280   1.2  ozaki 	atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
    281  1.11  ozaki 	pkt=$(make_pkt_str_arpreq 10.0.0.4 10.0.0.4)
    282   1.2  ozaki 	atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
    283   1.2  ozaki }
    284   1.2  ozaki 
    285   1.5  ozaki cache_overwriting_body()
    286   1.5  ozaki {
    287   1.5  ozaki 	local arp_keep=5
    288   1.5  ozaki 	local bonus=2
    289   1.5  ozaki 
    290   1.5  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKSRC
    291   1.5  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKDST
    292   1.5  ozaki 
    293   1.5  ozaki 	setup_dst_server
    294   1.9  ozaki 	setup_src_server $arp_keep
    295   1.5  ozaki 
    296   1.5  ozaki 	export RUMP_SERVER=$SOCKSRC
    297   1.5  ozaki 
    298   1.5  ozaki 	# Cannot overwrite a permanent cache
    299  1.10  ozaki 	atf_check -s not-exit:0 -e match:'File exists' \
    300  1.10  ozaki 	    rump.arp -s $IP4SRC b2:a0:20:00:00:ff
    301   1.5  ozaki 	$DEBUG && rump.arp -n -a
    302   1.5  ozaki 
    303   1.5  ozaki 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
    304   1.5  ozaki 	$DEBUG && rump.arp -n -a
    305   1.5  ozaki 	# Can overwrite a dynamic cache
    306   1.5  ozaki 	atf_check -s exit:0 -o ignore rump.arp -s $IP4DST b2:a0:20:00:00:00
    307   1.5  ozaki 	$DEBUG && rump.arp -n -a
    308   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:00' rump.arp -n $IP4DST
    309   1.5  ozaki 	atf_check -s exit:0 -o match:'permanent' rump.arp -n $IP4DST
    310   1.5  ozaki 
    311   1.5  ozaki 	atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
    312   1.5  ozaki 	$DEBUG && rump.arp -n -a
    313   1.7  ozaki 	atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
    314   1.5  ozaki 	atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
    315   1.5  ozaki 	# Cannot overwrite a temp cache
    316  1.10  ozaki 	atf_check -s not-exit:0 -e match:'File exists' \
    317  1.10  ozaki 	    rump.arp -s 10.0.1.10 b2:a0:20:00:00:ff
    318   1.5  ozaki 	$DEBUG && rump.arp -n -a
    319   1.6  ozaki 
    320   1.6  ozaki 	return 0
    321   1.5  ozaki }
    322   1.5  ozaki 
    323  1.11  ozaki make_pkt_str_arprep()
    324  1.11  ozaki {
    325  1.11  ozaki 	local ip=$1
    326  1.11  ozaki 	local mac=$2
    327  1.11  ozaki 	pkt="ethertype ARP (0x0806), length 42: "
    328  1.11  ozaki 	pkt="Reply $ip is-at $mac, length 28"
    329  1.11  ozaki 	echo $pkt
    330  1.11  ozaki }
    331  1.11  ozaki 
    332  1.11  ozaki extract_new_packets()
    333  1.11  ozaki {
    334  1.11  ozaki 	local old=./old
    335  1.11  ozaki 
    336  1.11  ozaki 	if [ ! -f $old ]; then
    337  1.11  ozaki 		old=/dev/null
    338  1.11  ozaki 	fi
    339  1.11  ozaki 
    340  1.11  ozaki 	shmif_dumpbus -p - bus1 2>/dev/null| \
    341  1.11  ozaki 	    tcpdump -n -e -r - 2>/dev/null > ./new
    342  1.11  ozaki 	diff -u $old ./new |grep '^+' |cut -d '+' -f 2 > ./diff
    343  1.11  ozaki 	mv -f ./new ./old
    344  1.11  ozaki 	cat ./diff
    345  1.11  ozaki }
    346  1.11  ozaki 
    347  1.11  ozaki check_entry_flags()
    348  1.11  ozaki {
    349  1.11  ozaki 	local ip=$(echo $1 |sed 's/\./\\./g')
    350  1.11  ozaki 	local flags=$2
    351  1.11  ozaki 
    352  1.11  ozaki 	atf_check -s exit:0 -o match:" $flags " -e ignore -x \
    353  1.11  ozaki 	    "rump.netstat -rn -f inet | grep ^'$ip'"
    354  1.11  ozaki }
    355  1.11  ozaki 
    356  1.11  ozaki pubproxy_arp_body()
    357  1.11  ozaki {
    358  1.11  ozaki 	local arp_keep=5
    359  1.11  ozaki 
    360  1.11  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKSRC
    361  1.11  ozaki 	atf_check -s exit:0 ${inetserver} $SOCKDST
    362  1.11  ozaki 
    363  1.11  ozaki 	setup_dst_server
    364  1.11  ozaki 	setup_src_server $arp_keep
    365  1.11  ozaki 
    366  1.11  ozaki 	export RUMP_SERVER=$SOCKDST
    367  1.11  ozaki 
    368  1.11  ozaki 	atf_check -s exit:0 -o ignore rump.arp -s $IP4DST_PUB \
    369  1.11  ozaki 	    $MACDST_PUB pub
    370  1.11  ozaki 	atf_check -s exit:0 -o match:'permanent published' \
    371  1.11  ozaki 	    rump.arp -n $IP4DST_PUB
    372  1.11  ozaki 	check_entry_flags $IP4DST_PUB ULSp
    373  1.11  ozaki 
    374  1.11  ozaki 	$DEBUG && rump.arp -n -a
    375  1.11  ozaki 	$DEBUG && rump.netstat -nr -f inet
    376  1.11  ozaki 
    377  1.11  ozaki 	atf_check -s exit:0 -o ignore rump.arp -s $IP4DST_PUBPROXY \
    378  1.11  ozaki 	    $MACDST_PUBPROXY pub proxy
    379  1.11  ozaki 	atf_check -s exit:0 -o match:'permanent published \(proxy only\)' \
    380  1.11  ozaki 	    rump.arp -n $IP4DST_PUBPROXY
    381  1.11  ozaki 	check_entry_flags $IP4DST_PUBPROXY UHLSp
    382  1.11  ozaki 
    383  1.11  ozaki 	$DEBUG && rump.arp -n -a
    384  1.11  ozaki 	$DEBUG && rump.netstat -nr -f inet
    385  1.11  ozaki 
    386  1.11  ozaki 	export RUMP_SERVER=$SOCKSRC
    387  1.11  ozaki 
    388  1.11  ozaki 	atf_check -s not-exit:0 -o ignore -e ignore \
    389  1.11  ozaki 	    rump.ping -n -w 1 -c 1 $IP4DST_PUB
    390  1.11  ozaki 
    391  1.11  ozaki 	atf_check -s exit:0 sleep 1
    392  1.11  ozaki 	extract_new_packets > ./out
    393  1.11  ozaki 	$DEBUG && cat ./out
    394  1.11  ozaki 
    395  1.11  ozaki 	pkt=$(make_pkt_str_arprep $IP4DST_PUB $MACDST_PUB)
    396  1.11  ozaki 	atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
    397  1.11  ozaki 
    398  1.11  ozaki 	atf_check -s not-exit:0 -o ignore -e ignore \
    399  1.11  ozaki 	    rump.ping -n -w 1 -c 1 $IP4DST_PUBPROXY
    400  1.11  ozaki 
    401  1.11  ozaki 	atf_check -s exit:0 sleep 1
    402  1.11  ozaki 	extract_new_packets > ./out
    403  1.11  ozaki 	$DEBUG && cat ./out
    404  1.11  ozaki 
    405  1.11  ozaki 	pkt=$(make_pkt_str_arprep $IP4DST_PUBPROXY $MACDST_PUBPROXY)
    406  1.11  ozaki 	atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
    407  1.11  ozaki 
    408  1.11  ozaki 	return 0
    409  1.11  ozaki }
    410  1.11  ozaki 
    411   1.1  ozaki cleanup()
    412   1.1  ozaki {
    413   1.1  ozaki 	env RUMP_SERVER=$SOCKSRC rump.halt
    414   1.1  ozaki 	env RUMP_SERVER=$SOCKDST rump.halt
    415   1.1  ozaki }
    416   1.1  ozaki 
    417   1.2  ozaki dump_src()
    418   1.1  ozaki {
    419   1.1  ozaki 	export RUMP_SERVER=$SOCKSRC
    420   1.1  ozaki 	rump.netstat -nr
    421   1.1  ozaki 	rump.arp -n -a
    422   1.2  ozaki 	rump.ifconfig
    423   1.1  ozaki 	$HIJACKING dmesg
    424   1.2  ozaki }
    425   1.1  ozaki 
    426   1.2  ozaki dump_dst()
    427   1.2  ozaki {
    428   1.1  ozaki 	export RUMP_SERVER=$SOCKDST
    429   1.1  ozaki 	rump.netstat -nr
    430   1.1  ozaki 	rump.arp -n -a
    431   1.2  ozaki 	rump.ifconfig
    432   1.1  ozaki 	$HIJACKING dmesg
    433   1.2  ozaki }
    434   1.1  ozaki 
    435   1.2  ozaki dump()
    436   1.2  ozaki {
    437   1.2  ozaki 	dump_src
    438   1.2  ozaki 	dump_dst
    439   1.1  ozaki 	shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
    440   1.1  ozaki }
    441   1.1  ozaki 
    442   1.1  ozaki cache_expiration_5s_cleanup()
    443   1.1  ozaki {
    444   1.1  ozaki 	$DEBUG && dump
    445   1.1  ozaki 	cleanup
    446   1.1  ozaki }
    447   1.1  ozaki 
    448   1.1  ozaki cache_expiration_10s_cleanup()
    449   1.1  ozaki {
    450   1.1  ozaki 	$DEBUG && dump
    451   1.1  ozaki 	cleanup
    452   1.1  ozaki }
    453   1.1  ozaki 
    454   1.1  ozaki command_cleanup()
    455   1.1  ozaki {
    456   1.1  ozaki 	$DEBUG && dump
    457   1.1  ozaki 	cleanup
    458   1.1  ozaki }
    459   1.1  ozaki 
    460   1.2  ozaki garp_cleanup()
    461   1.2  ozaki {
    462   1.2  ozaki 	$DEBUG && dump_src
    463   1.2  ozaki 	$DEBUG && shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r -
    464   1.2  ozaki 	env RUMP_SERVER=$SOCKSRC rump.halt
    465   1.2  ozaki }
    466   1.2  ozaki 
    467   1.5  ozaki cache_overwriting_cleanup()
    468   1.5  ozaki {
    469   1.5  ozaki 	$DEBUG && dump
    470   1.5  ozaki 	cleanup
    471   1.5  ozaki }
    472   1.5  ozaki 
    473  1.11  ozaki pubproxy_arp_cleanup()
    474  1.11  ozaki {
    475  1.11  ozaki 	$DEBUG && dump
    476  1.11  ozaki 	cleanup
    477  1.11  ozaki }
    478  1.11  ozaki 
    479   1.1  ozaki atf_init_test_cases()
    480   1.1  ozaki {
    481   1.1  ozaki 	atf_add_test_case cache_expiration_5s
    482   1.1  ozaki 	atf_add_test_case cache_expiration_10s
    483   1.1  ozaki 	atf_add_test_case command
    484   1.2  ozaki 	atf_add_test_case garp
    485   1.5  ozaki 	atf_add_test_case cache_overwriting
    486  1.11  ozaki 	atf_add_test_case pubproxy_arp
    487   1.1  ozaki }
    488