t_ipsec_forwarding.sh revision 1.2 1 1.2 knakahar # $NetBSD: t_ipsec_forwarding.sh,v 1.2 2022/11/24 02:58:28 knakahara Exp $
2 1.1 knakahar #
3 1.1 knakahar # Copyright (c) 2022 Internet Initiative Japan Inc.
4 1.1 knakahar # All rights reserved.
5 1.1 knakahar #
6 1.1 knakahar # Redistribution and use in source and binary forms, with or without
7 1.1 knakahar # modification, are permitted provided that the following conditions
8 1.1 knakahar # are met:
9 1.1 knakahar # 1. Redistributions of source code must retain the above copyright
10 1.1 knakahar # notice, this list of conditions and the following disclaimer.
11 1.1 knakahar # 2. Redistributions in binary form must reproduce the above copyright
12 1.1 knakahar # notice, this list of conditions and the following disclaimer in the
13 1.1 knakahar # documentation and/or other materials provided with the distribution.
14 1.1 knakahar #
15 1.1 knakahar # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16 1.1 knakahar # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 1.1 knakahar # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 1.1 knakahar # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 1.1 knakahar # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 1.1 knakahar # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 1.1 knakahar # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 1.1 knakahar # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 1.1 knakahar # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 1.1 knakahar # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 1.1 knakahar # POSSIBILITY OF SUCH DAMAGE.
26 1.1 knakahar #
27 1.1 knakahar
28 1.1 knakahar SOCK_LOCAL=unix://ipsec_local
29 1.1 knakahar SOCK_FORWARD=unix://ipsec_forward
30 1.1 knakahar SOCK_REMOTE=unix://ipsec_remote
31 1.1 knakahar BUS_LOCAL_I=./bus_ipsec_local
32 1.1 knakahar BUS_LOCAL_F=./bus_ipsec_local_forward
33 1.1 knakahar BUS_REMOTE_F=./bus_ipsec_remote_forward
34 1.1 knakahar BUS_REMOTE_I=./bus_ipsec_remote
35 1.1 knakahar
36 1.1 knakahar DEBUG=${DEBUG:-false}
37 1.1 knakahar
38 1.1 knakahar setup_servers_ipv4()
39 1.1 knakahar {
40 1.1 knakahar
41 1.1 knakahar rump_server_crypto_start $SOCK_LOCAL netipsec
42 1.1 knakahar rump_server_crypto_start $SOCK_FORWARD netipsec
43 1.1 knakahar rump_server_crypto_start $SOCK_REMOTE netipsec
44 1.1 knakahar rump_server_add_iface $SOCK_LOCAL shmif0 $BUS_LOCAL_F
45 1.1 knakahar rump_server_add_iface $SOCK_LOCAL shmif1 $BUS_LOCAL_I
46 1.1 knakahar rump_server_add_iface $SOCK_FORWARD shmif0 $BUS_LOCAL_F
47 1.1 knakahar rump_server_add_iface $SOCK_FORWARD shmif1 $BUS_REMOTE_F
48 1.1 knakahar rump_server_add_iface $SOCK_REMOTE shmif0 $BUS_REMOTE_F
49 1.1 knakahar rump_server_add_iface $SOCK_REMOTE shmif1 $BUS_REMOTE_I
50 1.1 knakahar }
51 1.1 knakahar
52 1.1 knakahar setup_servers_ipv6()
53 1.1 knakahar {
54 1.1 knakahar
55 1.1 knakahar rump_server_crypto_start $SOCK_LOCAL netipsec netinet6
56 1.1 knakahar rump_server_crypto_start $SOCK_FORWARD netipsec netinet6
57 1.1 knakahar rump_server_crypto_start $SOCK_REMOTE netipsec netinet6
58 1.1 knakahar rump_server_add_iface $SOCK_LOCAL shmif0 $BUS_LOCAL_F
59 1.1 knakahar rump_server_add_iface $SOCK_LOCAL shmif1 $BUS_LOCAL_I
60 1.1 knakahar rump_server_add_iface $SOCK_FORWARD shmif0 $BUS_LOCAL_F
61 1.1 knakahar rump_server_add_iface $SOCK_FORWARD shmif1 $BUS_REMOTE_F
62 1.1 knakahar rump_server_add_iface $SOCK_REMOTE shmif0 $BUS_REMOTE_F
63 1.1 knakahar rump_server_add_iface $SOCK_REMOTE shmif1 $BUS_REMOTE_I
64 1.1 knakahar }
65 1.1 knakahar
66 1.1 knakahar setup_servers()
67 1.1 knakahar {
68 1.1 knakahar local proto=$1
69 1.1 knakahar
70 1.1 knakahar setup_servers_$proto
71 1.1 knakahar }
72 1.1 knakahar
73 1.1 knakahar setup_sp_port()
74 1.1 knakahar {
75 1.1 knakahar local proto=$1
76 1.1 knakahar local algo_args="$2"
77 1.1 knakahar local tunnel_src=$3
78 1.1 knakahar local tunnel_dst=$4
79 1.1 knakahar local subnet_src=$5
80 1.1 knakahar local subnet_dst=$6
81 1.1 knakahar local port_src=$7
82 1.1 knakahar local port_dst=$8
83 1.1 knakahar local tmpfile=./tmp
84 1.1 knakahar
85 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
86 1.1 knakahar cat > $tmpfile <<-EOF
87 1.1 knakahar spdadd $subnet_src[$port_src] $subnet_dst[$port_dst] tcp -P out ipsec $proto/tunnel/$tunnel_src-$tunnel_dst/require;
88 1.1 knakahar spdadd $subnet_dst[$port_dst] $subnet_src[$port_src] tcp -P in ipsec $proto/tunnel/$tunnel_dst-$tunnel_src/require;
89 1.1 knakahar EOF
90 1.1 knakahar $DEBUG && cat $tmpfile
91 1.1 knakahar atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
92 1.1 knakahar $DEBUG && $HIJACKING setkey -DP
93 1.1 knakahar
94 1.1 knakahar export RUMP_SERVER=$SOCK_FORWARD
95 1.1 knakahar cat > $tmpfile <<-EOF
96 1.1 knakahar spdadd $subnet_dst[$port_dst] $subnet_src[$port_src] tcp -P out ipsec $proto/tunnel/$tunnel_dst-$tunnel_src/require;
97 1.1 knakahar spdadd $subnet_src[$port_src] $subnet_dst[$port_dst] tcp -P in ipsec $proto/tunnel/$tunnel_src-$tunnel_dst/require;
98 1.1 knakahar EOF
99 1.1 knakahar $DEBUG && cat $tmpfile
100 1.1 knakahar atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
101 1.1 knakahar $DEBUG && $HIJACKING setkey -DP
102 1.1 knakahar }
103 1.1 knakahar
104 1.1 knakahar add_sa()
105 1.1 knakahar {
106 1.1 knakahar local proto=$1
107 1.1 knakahar local algo_args="$2"
108 1.1 knakahar local tunnel_src=$3
109 1.1 knakahar local tunnel_dst=$4
110 1.1 knakahar local spi=$5
111 1.1 knakahar local port_src=$6
112 1.1 knakahar local port_dst=$7
113 1.1 knakahar local tmpfile=./tmp
114 1.1 knakahar
115 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
116 1.1 knakahar cat > $tmpfile <<-EOF
117 1.1 knakahar add $tunnel_src [$port_src] $tunnel_dst [$port_dst] $proto $((spi)) $algo_args;
118 1.1 knakahar add $tunnel_dst [$port_dst] $tunnel_src [$port_src] $proto $((spi + 1)) $algo_args;
119 1.1 knakahar EOF
120 1.1 knakahar $DEBUG && cat $tmpfile
121 1.1 knakahar atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
122 1.1 knakahar $DEBUG && $HIJACKING setkey -D
123 1.1 knakahar # XXX it can be expired if $lifetime is very short
124 1.1 knakahar #check_sa_entries $SOCK_LOCAL $ip_local $ip_remote
125 1.1 knakahar
126 1.1 knakahar export RUMP_SERVER=$SOCK_FORWARD
127 1.1 knakahar cat > $tmpfile <<-EOF
128 1.1 knakahar add $tunnel_src [$port_src] $tunnel_dst [$port_dst] $proto $((spi)) $algo_args;
129 1.1 knakahar add $tunnel_dst [$port_dst] $tunnel_src [$port_src] $proto $((spi + 1)) $algo_args;
130 1.1 knakahar EOF
131 1.1 knakahar $DEBUG && cat $tmpfile
132 1.1 knakahar atf_check -s exit:0 -o empty $HIJACKING setkey -c < $tmpfile
133 1.1 knakahar $DEBUG && $HIJACKING setkey -D
134 1.1 knakahar }
135 1.1 knakahar
136 1.1 knakahar prepare_file()
137 1.1 knakahar {
138 1.1 knakahar local file=$1
139 1.1 knakahar local data="0123456789"
140 1.1 knakahar
141 1.1 knakahar touch $file
142 1.1 knakahar for i in `seq 1 512`
143 1.1 knakahar do
144 1.1 knakahar echo $data >> $file
145 1.1 knakahar done
146 1.1 knakahar }
147 1.1 knakahar
148 1.1 knakahar test_ipsec_sp_port_ipv4()
149 1.1 knakahar {
150 1.1 knakahar
151 1.1 knakahar local algo=$1
152 1.1 knakahar local ip_local_i=192.168.11.1
153 1.1 knakahar local ip_local_i_subnet=192.168.11.0/24
154 1.1 knakahar local ip_local_f=10.22.22.2
155 1.1 knakahar local ip_local_f_subnet=10.22.22.0/24
156 1.1 knakahar local ip_forward_l=10.22.22.1
157 1.1 knakahar local ip_forward_l_subnet=10.22.22.0/24
158 1.1 knakahar local ip_forward_r=10.33.33.1
159 1.1 knakahar local ip_forward_r_subnet=10.33.33.0/24
160 1.1 knakahar local ip_remote_f=10.33.33.2
161 1.1 knakahar local ip_remote_f_subnet=10.33.33.0/24
162 1.1 knakahar local ip_remote_i=192.168.44.1
163 1.1 knakahar local ip_remote_i_subnet=192.168.44.0/24
164 1.1 knakahar local port=1234
165 1.1 knakahar local loutfile=./out_local
166 1.1 knakahar local routfile=./out_remote
167 1.1 knakahar local file_send=./file.send
168 1.1 knakahar local file_recv=./file.recv
169 1.1 knakahar local algo_args="$(generate_algo_args esp $algo)"
170 1.1 knakahar local pid=
171 1.1 knakahar
172 1.1 knakahar setup_servers ipv4
173 1.1 knakahar
174 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
175 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
176 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif0 inet $ip_local_f/24
177 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif1 inet $ip_local_i/24
178 1.1 knakahar atf_check -s exit:0 -o ignore \
179 1.1 knakahar rump.route add -inet default $ip_forward_l
180 1.1 knakahar
181 1.1 knakahar export RUMP_SERVER=$SOCK_FORWARD
182 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
183 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=1
184 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif0 inet $ip_forward_l/24
185 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif1 inet $ip_forward_r/24
186 1.1 knakahar atf_check -s exit:0 -o ignore \
187 1.1 knakahar rump.route add -inet $ip_local_i_subnet $ip_local_f
188 1.1 knakahar atf_check -s exit:0 -o ignore \
189 1.1 knakahar rump.route add -inet $ip_remote_i_subnet $ip_remote_f
190 1.1 knakahar
191 1.1 knakahar export RUMP_SERVER=$SOCK_REMOTE
192 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.dad_count=0
193 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif0 inet $ip_remote_f/24
194 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif1 inet $ip_remote_i/24
195 1.1 knakahar atf_check -s exit:0 -o ignore \
196 1.1 knakahar rump.route add -inet default $ip_forward_r
197 1.1 knakahar
198 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
199 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
200 1.1 knakahar
201 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
202 1.1 knakahar atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 -I $ip_local_i \
203 1.1 knakahar $ip_remote_i
204 1.1 knakahar
205 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
206 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
207 1.1 knakahar $DEBUG && cat $loutfile
208 1.1 knakahar atf_check -s exit:0 \
209 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP echo request" \
210 1.1 knakahar cat $loutfile
211 1.1 knakahar atf_check -s exit:0 \
212 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP echo reply" \
213 1.1 knakahar cat $loutfile
214 1.1 knakahar $DEBUG && cat $routfile
215 1.1 knakahar atf_check -s exit:0 \
216 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP echo request" \
217 1.1 knakahar cat $routfile
218 1.1 knakahar atf_check -s exit:0 \
219 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP echo reply" \
220 1.1 knakahar cat $routfile
221 1.1 knakahar
222 1.1 knakahar # Try TCP communications just in case
223 1.1 knakahar start_nc_server $SOCK_REMOTE $port $file_recv ipv4
224 1.1 knakahar prepare_file $file_send
225 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
226 1.1 knakahar atf_check -s exit:0 $HIJACKING nc -w 7 -s $ip_local_i \
227 1.1 knakahar $ip_remote_i $port < $file_send
228 1.1 knakahar atf_check -s exit:0 diff -q $file_send $file_recv
229 1.1 knakahar stop_nc_server
230 1.1 knakahar
231 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
232 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
233 1.1 knakahar $DEBUG && cat $loutfile
234 1.1 knakahar atf_check -s exit:0 \
235 1.1 knakahar -o match:"${ip_local_i}\.[0-9]+ > ${ip_remote_i}\.$port" \
236 1.1 knakahar cat $loutfile
237 1.1 knakahar atf_check -s exit:0 \
238 1.1 knakahar -o match:"${ip_remote_i}\.$port > ${ip_local_i}\.[0-9]+" \
239 1.1 knakahar cat $loutfile
240 1.1 knakahar $DEBUG && cat $routfile
241 1.1 knakahar atf_check -s exit:0 \
242 1.1 knakahar -o match:"${ip_local_i}\.[0-9]+ > ${ip_remote_i}\.$port" \
243 1.1 knakahar cat $routfile
244 1.1 knakahar atf_check -s exit:0 \
245 1.1 knakahar -o match:"${ip_remote_i}\.$port > ${ip_local_i}\.[0-9]+" \
246 1.1 knakahar cat $routfile
247 1.1 knakahar
248 1.1 knakahar # Create IPsec connections
249 1.1 knakahar setup_sp_port esp "$algo_args" $ip_local_i $ip_forward_r \
250 1.1 knakahar $ip_local_i_subnet $ip_remote_i_subnet any $port
251 1.1 knakahar add_sa esp "$algo_args" $ip_local_i $ip_forward_r \
252 1.1 knakahar 10000 any $port
253 1.1 knakahar
254 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
255 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
256 1.1 knakahar
257 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
258 1.1 knakahar atf_check -s exit:0 -o ignore rump.ping -c 1 -n -w 3 -I $ip_local_i \
259 1.1 knakahar $ip_remote_i
260 1.1 knakahar
261 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
262 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
263 1.1 knakahar $DEBUG && cat $loutfile
264 1.1 knakahar atf_check -s exit:0 \
265 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP echo request" \
266 1.1 knakahar cat $loutfile
267 1.1 knakahar atf_check -s exit:0 \
268 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP echo reply" \
269 1.1 knakahar cat $loutfile
270 1.1 knakahar $DEBUG && cat $routfile
271 1.1 knakahar atf_check -s exit:0 \
272 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP echo request" \
273 1.1 knakahar cat $routfile
274 1.1 knakahar atf_check -s exit:0 \
275 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP echo reply" \
276 1.1 knakahar cat $routfile
277 1.1 knakahar
278 1.1 knakahar # Check TCP communications from local to remote
279 1.1 knakahar start_nc_server $SOCK_REMOTE $port $file_recv ipv4
280 1.1 knakahar prepare_file $file_send
281 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
282 1.1 knakahar atf_check -s exit:0 $HIJACKING nc -w 15 -s $ip_local_i \
283 1.1 knakahar $ip_remote_i $port < $file_send
284 1.1 knakahar atf_check -s exit:0 diff -q $file_send $file_recv
285 1.1 knakahar stop_nc_server
286 1.1 knakahar
287 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
288 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
289 1.1 knakahar $DEBUG && cat $loutfile
290 1.1 knakahar atf_check -s exit:0 \
291 1.1 knakahar -o match:"${ip_local_i} > ${ip_forward_r}: ESP" \
292 1.1 knakahar cat $loutfile
293 1.1 knakahar atf_check -s exit:0 \
294 1.1 knakahar -o match:"${ip_forward_r} > ${ip_local_i}: ESP" \
295 1.1 knakahar cat $loutfile
296 1.1 knakahar $DEBUG && cat $routfile
297 1.1 knakahar atf_check -s exit:0 \
298 1.1 knakahar -o match:"${ip_local_i}\.[0-9]+ > ${ip_remote_i}\.$port" \
299 1.1 knakahar cat $routfile
300 1.1 knakahar atf_check -s exit:0 \
301 1.1 knakahar -o match:"${ip_remote_i}\.$port > ${ip_local_i}\.[0-9]+" \
302 1.1 knakahar cat $routfile
303 1.1 knakahar }
304 1.1 knakahar
305 1.1 knakahar test_ipsec_sp_port_ipv6()
306 1.1 knakahar {
307 1.1 knakahar local algo=$1
308 1.1 knakahar local ip_local_i=fc00:1111::1
309 1.1 knakahar local ip_local_i_subnet=fc00:1111::/64
310 1.1 knakahar local ip_local_f=fc00:2222::2
311 1.1 knakahar local ip_local_f_subnet=fc00:2222::/64
312 1.1 knakahar local ip_forward_l=fc00:2222::1
313 1.1 knakahar local ip_forward_l_subnet=fc00:2222::/64
314 1.1 knakahar local ip_forward_r=fc00:3333::1
315 1.1 knakahar local ip_forward_r_subnet=fc00:3333::/64
316 1.1 knakahar local ip_remote_f=fc00:3333::2
317 1.1 knakahar local ip_remote_f_subnet=fc00:3333::/64
318 1.1 knakahar local ip_remote_i=fc00:4444::1
319 1.1 knakahar local ip_remote_i_subnet=fc00:4444::/64
320 1.1 knakahar local port=1234
321 1.1 knakahar local loutfile=./out_local
322 1.1 knakahar local routfile=./out_remote
323 1.1 knakahar local file_send=./file.send
324 1.1 knakahar local file_recv=./file.recv
325 1.1 knakahar local algo_args="$(generate_algo_args esp $algo)"
326 1.1 knakahar local pid=
327 1.1 knakahar
328 1.1 knakahar setup_servers ipv6
329 1.1 knakahar
330 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
331 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.dad_count=0
332 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_local_f/64
333 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_local_i/64
334 1.1 knakahar atf_check -s exit:0 -o ignore \
335 1.1 knakahar rump.route add -inet6 default $ip_forward_l
336 1.1 knakahar
337 1.1 knakahar export RUMP_SERVER=$SOCK_FORWARD
338 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.dad_count=0
339 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=1
340 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_forward_l/64
341 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_forward_r/64
342 1.1 knakahar atf_check -s exit:0 -o ignore \
343 1.1 knakahar rump.route add -inet6 $ip_local_i_subnet $ip_local_f
344 1.1 knakahar atf_check -s exit:0 -o ignore \
345 1.1 knakahar rump.route add -inet6 $ip_remote_i_subnet $ip_remote_f
346 1.1 knakahar
347 1.1 knakahar export RUMP_SERVER=$SOCK_REMOTE
348 1.1 knakahar atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.dad_count=0
349 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip_remote_f/64
350 1.1 knakahar atf_check -s exit:0 rump.ifconfig shmif1 inet6 $ip_remote_i/64
351 1.1 knakahar atf_check -s exit:0 -o ignore \
352 1.1 knakahar rump.route add -inet6 default $ip_forward_r
353 1.1 knakahar
354 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
355 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
356 1.1 knakahar
357 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
358 1.1 knakahar atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 -S $ip_local_i \
359 1.1 knakahar $ip_remote_i
360 1.1 knakahar
361 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
362 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
363 1.1 knakahar $DEBUG && cat $loutfile
364 1.1 knakahar atf_check -s exit:0 \
365 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP6, echo request" \
366 1.1 knakahar cat $loutfile
367 1.1 knakahar atf_check -s exit:0 \
368 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP6, echo reply" \
369 1.1 knakahar cat $loutfile
370 1.1 knakahar $DEBUG && cat $routfile
371 1.1 knakahar atf_check -s exit:0 \
372 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP6, echo request" \
373 1.1 knakahar cat $routfile
374 1.1 knakahar atf_check -s exit:0 \
375 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP6, echo reply" \
376 1.1 knakahar cat $routfile
377 1.1 knakahar
378 1.1 knakahar # Try TCP communications just in case
379 1.1 knakahar start_nc_server $SOCK_REMOTE $port $file_recv ipv6
380 1.1 knakahar prepare_file $file_send
381 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
382 1.1 knakahar atf_check -s exit:0 $HIJACKING nc -w 7 -s $ip_local_i \
383 1.1 knakahar $ip_remote_i $port < $file_send
384 1.1 knakahar atf_check -s exit:0 diff -q $file_send $file_recv
385 1.1 knakahar stop_nc_server
386 1.1 knakahar
387 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
388 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
389 1.1 knakahar $DEBUG && cat $loutfile
390 1.1 knakahar atf_check -s exit:0 \
391 1.1 knakahar -o match:"${ip_local_i}\.[0-9]+ > ${ip_remote_i}\.$port" \
392 1.1 knakahar cat $loutfile
393 1.1 knakahar atf_check -s exit:0 \
394 1.1 knakahar -o match:"${ip_remote_i}\.$port > ${ip_local_i}\.[0-9]+" \
395 1.1 knakahar cat $loutfile
396 1.1 knakahar $DEBUG && cat $routfile
397 1.1 knakahar atf_check -s exit:0 \
398 1.1 knakahar -o match:"${ip_local_i}\.[0-9]+ > ${ip_remote_i}\.$port" \
399 1.1 knakahar cat $routfile
400 1.1 knakahar atf_check -s exit:0 \
401 1.1 knakahar -o match:"${ip_remote_i}\.$port > ${ip_local_i}\.[0-9]+" \
402 1.1 knakahar cat $routfile
403 1.1 knakahar
404 1.1 knakahar # Create IPsec connections
405 1.1 knakahar setup_sp_port esp "$algo_args" $ip_local_i $ip_forward_r \
406 1.1 knakahar $ip_local_i_subnet $ip_remote_i_subnet any $port
407 1.1 knakahar add_sa esp "$algo_args" $ip_local_i $ip_forward_r \
408 1.1 knakahar 10000 any $port
409 1.1 knakahar
410 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
411 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
412 1.1 knakahar
413 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
414 1.1 knakahar atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n -X 3 -S $ip_local_i \
415 1.1 knakahar $ip_remote_i
416 1.1 knakahar
417 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
418 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
419 1.1 knakahar $DEBUG && cat $loutfile
420 1.1 knakahar atf_check -s exit:0 \
421 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP6, echo request" \
422 1.1 knakahar cat $loutfile
423 1.1 knakahar atf_check -s exit:0 \
424 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP6, echo reply" \
425 1.1 knakahar cat $loutfile
426 1.1 knakahar $DEBUG && cat $routfile
427 1.1 knakahar atf_check -s exit:0 \
428 1.1 knakahar -o match:"$ip_local_i > $ip_remote_i: ICMP6, echo request" \
429 1.1 knakahar cat $routfile
430 1.1 knakahar atf_check -s exit:0 \
431 1.1 knakahar -o match:"$ip_remote_i > $ip_local_i: ICMP6, echo reply" \
432 1.1 knakahar cat $routfile
433 1.1 knakahar
434 1.1 knakahar # Check TCP communications from local to remote
435 1.1 knakahar start_nc_server $SOCK_REMOTE $port $file_recv ipv6
436 1.1 knakahar prepare_file $file_send
437 1.1 knakahar export RUMP_SERVER=$SOCK_LOCAL
438 1.1 knakahar atf_check -s exit:0 $HIJACKING nc -w 7 -s $ip_local_i \
439 1.1 knakahar $ip_remote_i $port < $file_send
440 1.1 knakahar atf_check -s exit:0 diff -q $file_send $file_recv
441 1.1 knakahar stop_nc_server
442 1.1 knakahar
443 1.1 knakahar extract_new_packets $BUS_LOCAL_F > $loutfile
444 1.1 knakahar extract_new_packets $BUS_REMOTE_F > $routfile
445 1.1 knakahar $DEBUG && cat $loutfile
446 1.1 knakahar atf_check -s exit:0 \
447 1.1 knakahar -o match:"${ip_local_i} > ${ip_forward_r}: ESP" \
448 1.1 knakahar cat $loutfile
449 1.1 knakahar atf_check -s exit:0 \
450 1.1 knakahar -o match:"${ip_forward_r} > ${ip_local_i}: ESP" \
451 1.1 knakahar cat $loutfile
452 1.1 knakahar $DEBUG && cat $routfile
453 1.1 knakahar atf_check -s exit:0 \
454 1.1 knakahar -o match:"${ip_local_i}\.[0-9]+ > ${ip_remote_i}\.$port" \
455 1.1 knakahar cat $routfile
456 1.1 knakahar atf_check -s exit:0 \
457 1.1 knakahar -o match:"${ip_remote_i}\.$port > ${ip_local_i}\.[0-9]+" \
458 1.1 knakahar cat $routfile
459 1.1 knakahar }
460 1.1 knakahar
461 1.1 knakahar add_test_ipsec_sp_port()
462 1.1 knakahar {
463 1.1 knakahar local proto=$1
464 1.1 knakahar local algo=$2
465 1.1 knakahar local _algo=$(echo $algo | sed 's/-//g')
466 1.1 knakahar local name= desc=
467 1.1 knakahar
468 1.1 knakahar desc="Test IPsec $proto forwarding SP port ($algo)"
469 1.1 knakahar name="ipsec_sp_port_${proto}_${_algo}"
470 1.1 knakahar
471 1.1 knakahar atf_test_case ${name} cleanup
472 1.1 knakahar eval "
473 1.1 knakahar ${name}_head() {
474 1.1 knakahar atf_set descr \"$desc\"
475 1.1 knakahar atf_set require.progs rump_server setkey nc
476 1.1 knakahar }
477 1.1 knakahar ${name}_body() {
478 1.1 knakahar test_ipsec_sp_port_$proto $algo
479 1.1 knakahar rump_server_destroy_ifaces
480 1.1 knakahar }
481 1.1 knakahar ${name}_cleanup() {
482 1.1 knakahar stop_nc_server
483 1.1 knakahar \$DEBUG && dump
484 1.1 knakahar cleanup
485 1.1 knakahar }
486 1.1 knakahar "
487 1.1 knakahar atf_add_test_case ${name}
488 1.1 knakahar }
489 1.1 knakahar
490 1.1 knakahar atf_init_test_cases()
491 1.1 knakahar {
492 1.1 knakahar local algo=
493 1.1 knakahar
494 1.1 knakahar for algo in $ESP_ENCRYPTION_ALGORITHMS_MINIMUM; do
495 1.1 knakahar add_test_ipsec_sp_port ipv4 $algo
496 1.1 knakahar add_test_ipsec_sp_port ipv6 $algo
497 1.1 knakahar done
498 1.1 knakahar }
499