net_common.sh revision 1.5 1 # $NetBSD: net_common.sh,v 1.5 2016/11/24 09:07:09 ozaki-r Exp $
2 #
3 # Copyright (c) 2016 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 #
29 # Common utility functions for tests/net
30 #
31
32 HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes"
33
34 extract_new_packets()
35 {
36 local bus=$1
37 local old=./.__old
38
39 if [ ! -f $old ]; then
40 old=/dev/null
41 fi
42
43 shmif_dumpbus -p - $bus 2>/dev/null| \
44 tcpdump -n -e -r - 2>/dev/null > ./.__new
45 diff -u $old ./.__new |grep '^+' |cut -d '+' -f 2 > ./.__diff
46 mv -f ./.__new ./.__old
47 cat ./.__diff
48 }
49
50 check_route()
51 {
52 local target=$1
53 local gw=$2
54 local flags=${3:-\.\+}
55 local ifname=${4:-\.\+}
56
57 target=$(echo $target |sed 's/\./\\./g')
58 if [ "$gw" = "" ]; then
59 gw=".+"
60 else
61 gw=$(echo $gw |sed 's/\./\\./g')
62 fi
63
64 atf_check -s exit:0 -e ignore \
65 -o match:"^$target +$gw +$flags +- +- +.+ +$ifname" \
66 rump.netstat -rn
67 }
68
69 check_route_flags()
70 {
71
72 check_route "$1" "" "$2" ""
73 }
74
75 check_route_gw()
76 {
77
78 check_route "$1" "$2" "" ""
79 }
80
81 check_route_no_entry()
82 {
83 local target=$(echo $1 |sed 's/\./\\./g')
84
85 atf_check -s exit:0 -e ignore -o not-match:"^$target" \
86 rump.netstat -rn
87 }
88
89 get_linklocal_addr()
90 {
91
92 export RUMP_SERVER=${1}
93 rump.ifconfig ${2} inet6 |
94 awk "/fe80/ {sub(/%$2/, \"\"); sub(/\\/[0-9]*/, \"\"); print \$2;}"
95 unset RUMP_SERVER
96
97 return 0
98 }
99
100 get_macaddr()
101 {
102
103 env RUMP_SERVER=${1} \
104 rump.ifconfig ${2} |awk '/address/ {print $2;}'
105 }
106