xref: /linux/tools/testing/selftests/net/l2tp.sh (revision 06d07429858317ded2db7986113a9e0129cd599b)
1e858ef1cSDavid Ahern#!/bin/bash
2e858ef1cSDavid Ahern# SPDX-License-Identifier: GPL-2.0
3e858ef1cSDavid Ahern#
4e858ef1cSDavid Ahern# L2TPv3 tunnel between 2 hosts
5e858ef1cSDavid Ahern#
6e858ef1cSDavid Ahern#            host-1          |   router   |     host-2
7e858ef1cSDavid Ahern#                            |            |
8e858ef1cSDavid Ahern#      lo          l2tp      |            |      l2tp           lo
9e858ef1cSDavid Ahern# 172.16.101.1  172.16.1.1   |            | 172.16.1.2    172.16.101.2
10e858ef1cSDavid Ahern#  fc00:101::1   fc00:1::1   |            |   fc00:1::2    fc00:101::2
11e858ef1cSDavid Ahern#                            |            |
12e858ef1cSDavid Ahern#                  eth0      |            |     eth0
13e858ef1cSDavid Ahern#                10.1.1.1    |            |   10.1.2.1
14e858ef1cSDavid Ahern#              2001:db8:1::1 |            | 2001:db8:2::1
15e858ef1cSDavid Ahern
16*4affb17cSHangbin Liusource lib.sh
17e858ef1cSDavid AhernVERBOSE=0
18e858ef1cSDavid AhernPAUSE_ON_FAIL=no
19e858ef1cSDavid Ahern
20e858ef1cSDavid Ahernwhich ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
21e858ef1cSDavid Ahern
22e858ef1cSDavid Ahern################################################################################
23e858ef1cSDavid Ahern#
24e858ef1cSDavid Ahernlog_test()
25e858ef1cSDavid Ahern{
26e858ef1cSDavid Ahern	local rc=$1
27e858ef1cSDavid Ahern	local expected=$2
28e858ef1cSDavid Ahern	local msg="$3"
29e858ef1cSDavid Ahern
30e858ef1cSDavid Ahern	if [ ${rc} -eq ${expected} ]; then
31e858ef1cSDavid Ahern		printf "TEST: %-60s  [ OK ]\n" "${msg}"
32e858ef1cSDavid Ahern		nsuccess=$((nsuccess+1))
33e858ef1cSDavid Ahern	else
34e858ef1cSDavid Ahern		ret=1
35e858ef1cSDavid Ahern		nfail=$((nfail+1))
36e858ef1cSDavid Ahern		printf "TEST: %-60s  [FAIL]\n" "${msg}"
37e858ef1cSDavid Ahern		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
38e858ef1cSDavid Ahern			echo
39e858ef1cSDavid Ahern			echo "hit enter to continue, 'q' to quit"
40e858ef1cSDavid Ahern			read a
41e858ef1cSDavid Ahern			[ "$a" = "q" ] && exit 1
42e858ef1cSDavid Ahern		fi
43e858ef1cSDavid Ahern	fi
44e858ef1cSDavid Ahern}
45e858ef1cSDavid Ahern
46e858ef1cSDavid Ahernrun_cmd()
47e858ef1cSDavid Ahern{
48e858ef1cSDavid Ahern	local ns
49e858ef1cSDavid Ahern	local cmd
50e858ef1cSDavid Ahern	local out
51e858ef1cSDavid Ahern	local rc
52e858ef1cSDavid Ahern
53e858ef1cSDavid Ahern	ns="$1"
54e858ef1cSDavid Ahern	shift
55e858ef1cSDavid Ahern	cmd="$*"
56e858ef1cSDavid Ahern
57e858ef1cSDavid Ahern	if [ "$VERBOSE" = "1" ]; then
58e858ef1cSDavid Ahern		printf "    COMMAND: $cmd\n"
59e858ef1cSDavid Ahern	fi
60e858ef1cSDavid Ahern
61e858ef1cSDavid Ahern	out=$(eval ip netns exec ${ns} ${cmd} 2>&1)
62e858ef1cSDavid Ahern	rc=$?
63e858ef1cSDavid Ahern	if [ "$VERBOSE" = "1" -a -n "$out" ]; then
64e858ef1cSDavid Ahern		echo "    $out"
65e858ef1cSDavid Ahern	fi
66e858ef1cSDavid Ahern
67e858ef1cSDavid Ahern	[ "$VERBOSE" = "1" ] && echo
68e858ef1cSDavid Ahern
69e858ef1cSDavid Ahern	return $rc
70e858ef1cSDavid Ahern}
71e858ef1cSDavid Ahern
72e858ef1cSDavid Ahern################################################################################
73e858ef1cSDavid Ahern# create namespaces and interconnects
74e858ef1cSDavid Ahern
75e858ef1cSDavid Aherncreate_ns()
76e858ef1cSDavid Ahern{
77e858ef1cSDavid Ahern	local ns=$1
78e858ef1cSDavid Ahern	local addr=$2
79e858ef1cSDavid Ahern	local addr6=$3
80e858ef1cSDavid Ahern
81e858ef1cSDavid Ahern	[ -z "${addr}" ] && addr="-"
82e858ef1cSDavid Ahern	[ -z "${addr6}" ] && addr6="-"
83e858ef1cSDavid Ahern
84e858ef1cSDavid Ahern	if [ "${addr}" != "-" ]; then
85e858ef1cSDavid Ahern		ip -netns ${ns} addr add dev lo ${addr}
86e858ef1cSDavid Ahern	fi
87e858ef1cSDavid Ahern	if [ "${addr6}" != "-" ]; then
88e858ef1cSDavid Ahern		ip -netns ${ns} -6 addr add dev lo ${addr6}
89e858ef1cSDavid Ahern	fi
90e858ef1cSDavid Ahern
91e858ef1cSDavid Ahern	ip -netns ${ns} ro add unreachable default metric 8192
92e858ef1cSDavid Ahern	ip -netns ${ns} -6 ro add unreachable default metric 8192
93e858ef1cSDavid Ahern
94e858ef1cSDavid Ahern	ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1
95e858ef1cSDavid Ahern	ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
96e858ef1cSDavid Ahern	ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1
97e858ef1cSDavid Ahern	ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1
98e858ef1cSDavid Ahern	ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.accept_dad=0
99e858ef1cSDavid Ahern}
100e858ef1cSDavid Ahern
101e858ef1cSDavid Ahern# create veth pair to connect namespaces and apply addresses.
102e858ef1cSDavid Ahernconnect_ns()
103e858ef1cSDavid Ahern{
104e858ef1cSDavid Ahern	local ns1=$1
105e858ef1cSDavid Ahern	local ns1_dev=$2
106e858ef1cSDavid Ahern	local ns1_addr=$3
107e858ef1cSDavid Ahern	local ns1_addr6=$4
108e858ef1cSDavid Ahern	local ns2=$5
109e858ef1cSDavid Ahern	local ns2_dev=$6
110e858ef1cSDavid Ahern	local ns2_addr=$7
111e858ef1cSDavid Ahern	local ns2_addr6=$8
112e858ef1cSDavid Ahern
113e858ef1cSDavid Ahern	ip -netns ${ns1} li add ${ns1_dev} type veth peer name tmp
114e858ef1cSDavid Ahern	ip -netns ${ns1} li set ${ns1_dev} up
115e858ef1cSDavid Ahern	ip -netns ${ns1} li set tmp netns ${ns2} name ${ns2_dev}
116e858ef1cSDavid Ahern	ip -netns ${ns2} li set ${ns2_dev} up
117e858ef1cSDavid Ahern
118e858ef1cSDavid Ahern	if [ "${ns1_addr}" != "-" ]; then
119e858ef1cSDavid Ahern		ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr}
120e858ef1cSDavid Ahern		ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr}
121e858ef1cSDavid Ahern	fi
122e858ef1cSDavid Ahern
123e858ef1cSDavid Ahern	if [ "${ns1_addr6}" != "-" ]; then
124e858ef1cSDavid Ahern		ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr6}
125e858ef1cSDavid Ahern		ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr6}
126e858ef1cSDavid Ahern	fi
127e858ef1cSDavid Ahern}
128e858ef1cSDavid Ahern
129e858ef1cSDavid Ahern################################################################################
130e858ef1cSDavid Ahern# test setup
131e858ef1cSDavid Ahern
132e858ef1cSDavid Aherncleanup()
133e858ef1cSDavid Ahern{
134*4affb17cSHangbin Liu	cleanup_ns $host_1 $host_2 $router
135e858ef1cSDavid Ahern}
136e858ef1cSDavid Ahern
137e858ef1cSDavid Ahernsetup_l2tp_ipv4()
138e858ef1cSDavid Ahern{
139e858ef1cSDavid Ahern	#
140e858ef1cSDavid Ahern	# configure l2tpv3 tunnel on host-1
141e858ef1cSDavid Ahern	#
142*4affb17cSHangbin Liu	ip -netns $host_1 l2tp add tunnel tunnel_id 1041 peer_tunnel_id 1042 \
143e858ef1cSDavid Ahern			 encap ip local 10.1.1.1 remote 10.1.2.1
144*4affb17cSHangbin Liu	ip -netns $host_1 l2tp add session name l2tp4 tunnel_id 1041 \
145e858ef1cSDavid Ahern			 session_id 1041 peer_session_id 1042
146*4affb17cSHangbin Liu	ip -netns $host_1 link set dev l2tp4 up
147*4affb17cSHangbin Liu	ip -netns $host_1 addr add dev l2tp4 172.16.1.1 peer 172.16.1.2
148e858ef1cSDavid Ahern
149e858ef1cSDavid Ahern	#
150e858ef1cSDavid Ahern	# configure l2tpv3 tunnel on host-2
151e858ef1cSDavid Ahern	#
152*4affb17cSHangbin Liu	ip -netns $host_2 l2tp add tunnel tunnel_id 1042 peer_tunnel_id 1041 \
153e858ef1cSDavid Ahern			 encap ip local 10.1.2.1 remote 10.1.1.1
154*4affb17cSHangbin Liu	ip -netns $host_2 l2tp add session name l2tp4 tunnel_id 1042 \
155e858ef1cSDavid Ahern			 session_id 1042 peer_session_id 1041
156*4affb17cSHangbin Liu	ip -netns $host_2 link set dev l2tp4 up
157*4affb17cSHangbin Liu	ip -netns $host_2 addr add dev l2tp4 172.16.1.2 peer 172.16.1.1
158e858ef1cSDavid Ahern
159e858ef1cSDavid Ahern	#
160e858ef1cSDavid Ahern	# add routes to loopback addresses
161e858ef1cSDavid Ahern	#
162*4affb17cSHangbin Liu	ip -netns $host_1 ro add 172.16.101.2/32 via 172.16.1.2
163*4affb17cSHangbin Liu	ip -netns $host_2 ro add 172.16.101.1/32 via 172.16.1.1
164e858ef1cSDavid Ahern}
165e858ef1cSDavid Ahern
166e858ef1cSDavid Ahernsetup_l2tp_ipv6()
167e858ef1cSDavid Ahern{
168e858ef1cSDavid Ahern	#
169e858ef1cSDavid Ahern	# configure l2tpv3 tunnel on host-1
170e858ef1cSDavid Ahern	#
171*4affb17cSHangbin Liu	ip -netns $host_1 l2tp add tunnel tunnel_id 1061 peer_tunnel_id 1062 \
172e858ef1cSDavid Ahern			 encap ip local 2001:db8:1::1 remote 2001:db8:2::1
173*4affb17cSHangbin Liu	ip -netns $host_1 l2tp add session name l2tp6 tunnel_id 1061 \
174e858ef1cSDavid Ahern			 session_id 1061 peer_session_id 1062
175*4affb17cSHangbin Liu	ip -netns $host_1 link set dev l2tp6 up
176*4affb17cSHangbin Liu	ip -netns $host_1 addr add dev l2tp6 fc00:1::1 peer fc00:1::2
177e858ef1cSDavid Ahern
178e858ef1cSDavid Ahern	#
179e858ef1cSDavid Ahern	# configure l2tpv3 tunnel on host-2
180e858ef1cSDavid Ahern	#
181*4affb17cSHangbin Liu	ip -netns $host_2 l2tp add tunnel tunnel_id 1062 peer_tunnel_id 1061 \
182e858ef1cSDavid Ahern			 encap ip local 2001:db8:2::1 remote 2001:db8:1::1
183*4affb17cSHangbin Liu	ip -netns $host_2 l2tp add session name l2tp6 tunnel_id 1062 \
184e858ef1cSDavid Ahern			 session_id 1062 peer_session_id 1061
185*4affb17cSHangbin Liu	ip -netns $host_2 link set dev l2tp6 up
186*4affb17cSHangbin Liu	ip -netns $host_2 addr add dev l2tp6 fc00:1::2 peer fc00:1::1
187e858ef1cSDavid Ahern
188e858ef1cSDavid Ahern	#
189e858ef1cSDavid Ahern	# add routes to loopback addresses
190e858ef1cSDavid Ahern	#
191*4affb17cSHangbin Liu	ip -netns $host_1 -6 ro add fc00:101::2/128 via fc00:1::2
192*4affb17cSHangbin Liu	ip -netns $host_2 -6 ro add fc00:101::1/128 via fc00:1::1
193e858ef1cSDavid Ahern}
194e858ef1cSDavid Ahern
195e858ef1cSDavid Ahernsetup()
196e858ef1cSDavid Ahern{
197e858ef1cSDavid Ahern	# start clean
198e858ef1cSDavid Ahern	cleanup
199e858ef1cSDavid Ahern
200e858ef1cSDavid Ahern	set -e
201*4affb17cSHangbin Liu	setup_ns host_1 host_2 router
202*4affb17cSHangbin Liu	create_ns $host_1 172.16.101.1/32 fc00:101::1/128
203*4affb17cSHangbin Liu	create_ns $host_2 172.16.101.2/32 fc00:101::2/128
204*4affb17cSHangbin Liu	create_ns $router
205e858ef1cSDavid Ahern
206*4affb17cSHangbin Liu	connect_ns $host_1 eth0 10.1.1.1/24 2001:db8:1::1/64 \
207*4affb17cSHangbin Liu	           $router eth1 10.1.1.2/24 2001:db8:1::2/64
208e858ef1cSDavid Ahern
209*4affb17cSHangbin Liu	connect_ns $host_2 eth0 10.1.2.1/24 2001:db8:2::1/64 \
210*4affb17cSHangbin Liu	           $router eth2 10.1.2.2/24 2001:db8:2::2/64
211e858ef1cSDavid Ahern
212*4affb17cSHangbin Liu	ip -netns $host_1 ro add 10.1.2.0/24 via 10.1.1.2
213*4affb17cSHangbin Liu	ip -netns $host_1 -6 ro add 2001:db8:2::/64 via 2001:db8:1::2
214e858ef1cSDavid Ahern
215*4affb17cSHangbin Liu	ip -netns $host_2 ro add 10.1.1.0/24 via 10.1.2.2
216*4affb17cSHangbin Liu	ip -netns $host_2 -6 ro add 2001:db8:1::/64 via 2001:db8:2::2
217e858ef1cSDavid Ahern
218e858ef1cSDavid Ahern	setup_l2tp_ipv4
219e858ef1cSDavid Ahern	setup_l2tp_ipv6
220e858ef1cSDavid Ahern	set +e
221e858ef1cSDavid Ahern}
222e858ef1cSDavid Ahern
223e858ef1cSDavid Ahernsetup_ipsec()
224e858ef1cSDavid Ahern{
225e858ef1cSDavid Ahern	#
226e858ef1cSDavid Ahern	# IPv4
227e858ef1cSDavid Ahern	#
228*4affb17cSHangbin Liu	run_cmd $host_1 ip xfrm policy add \
229e858ef1cSDavid Ahern		src 10.1.1.1 dst 10.1.2.1 dir out \
230e858ef1cSDavid Ahern		tmpl proto esp mode transport
231e858ef1cSDavid Ahern
232*4affb17cSHangbin Liu	run_cmd $host_1 ip xfrm policy add \
233e858ef1cSDavid Ahern		src 10.1.2.1 dst 10.1.1.1 dir in \
234e858ef1cSDavid Ahern		tmpl proto esp mode transport
235e858ef1cSDavid Ahern
236*4affb17cSHangbin Liu	run_cmd $host_2 ip xfrm policy add \
237e858ef1cSDavid Ahern		src 10.1.1.1 dst 10.1.2.1 dir in \
238e858ef1cSDavid Ahern		tmpl proto esp mode transport
239e858ef1cSDavid Ahern
240*4affb17cSHangbin Liu	run_cmd $host_2 ip xfrm policy add \
241e858ef1cSDavid Ahern		src 10.1.2.1 dst 10.1.1.1 dir out \
242e858ef1cSDavid Ahern		tmpl proto esp mode transport
243e858ef1cSDavid Ahern
244*4affb17cSHangbin Liu	ip -netns $host_1 xfrm state add \
245e858ef1cSDavid Ahern		src 10.1.1.1 dst 10.1.2.1 \
246e858ef1cSDavid Ahern		spi 0x1000 proto esp aead 'rfc4106(gcm(aes))' \
247e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
248e858ef1cSDavid Ahern
249*4affb17cSHangbin Liu	ip -netns $host_1 xfrm state add \
250e858ef1cSDavid Ahern		src 10.1.2.1 dst 10.1.1.1 \
251e858ef1cSDavid Ahern		spi 0x1001 proto esp aead 'rfc4106(gcm(aes))' \
252e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
253e858ef1cSDavid Ahern
254*4affb17cSHangbin Liu	ip -netns $host_2 xfrm state add \
255e858ef1cSDavid Ahern		src 10.1.1.1 dst 10.1.2.1 \
256e858ef1cSDavid Ahern		spi 0x1000 proto esp aead 'rfc4106(gcm(aes))' \
257e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
258e858ef1cSDavid Ahern
259*4affb17cSHangbin Liu	ip -netns $host_2 xfrm state add \
260e858ef1cSDavid Ahern		src 10.1.2.1 dst 10.1.1.1 \
261e858ef1cSDavid Ahern		spi 0x1001 proto esp aead 'rfc4106(gcm(aes))' \
262e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
263e858ef1cSDavid Ahern
264e858ef1cSDavid Ahern	#
265e858ef1cSDavid Ahern	# IPV6
266e858ef1cSDavid Ahern	#
267*4affb17cSHangbin Liu	run_cmd $host_1 ip -6 xfrm policy add \
268e858ef1cSDavid Ahern		src 2001:db8:1::1 dst 2001:db8:2::1 dir out \
269e858ef1cSDavid Ahern		tmpl proto esp mode transport
270e858ef1cSDavid Ahern
271*4affb17cSHangbin Liu	run_cmd $host_1 ip -6 xfrm policy add \
272e858ef1cSDavid Ahern		src 2001:db8:2::1 dst 2001:db8:1::1 dir in \
273e858ef1cSDavid Ahern		tmpl proto esp mode transport
274e858ef1cSDavid Ahern
275*4affb17cSHangbin Liu	run_cmd $host_2 ip -6 xfrm policy add \
276e858ef1cSDavid Ahern		src 2001:db8:1::1 dst 2001:db8:2::1 dir in \
277e858ef1cSDavid Ahern		tmpl proto esp mode transport
278e858ef1cSDavid Ahern
279*4affb17cSHangbin Liu	run_cmd $host_2 ip -6 xfrm policy add \
280e858ef1cSDavid Ahern		src 2001:db8:2::1 dst 2001:db8:1::1 dir out \
281e858ef1cSDavid Ahern		tmpl proto esp mode transport
282e858ef1cSDavid Ahern
283*4affb17cSHangbin Liu	ip -netns $host_1 -6 xfrm state add \
284e858ef1cSDavid Ahern		src 2001:db8:1::1 dst 2001:db8:2::1 \
285e858ef1cSDavid Ahern		spi 0x1000 proto esp aead 'rfc4106(gcm(aes))' \
286e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
287e858ef1cSDavid Ahern
288*4affb17cSHangbin Liu	ip -netns $host_1 -6 xfrm state add \
289e858ef1cSDavid Ahern		src 2001:db8:2::1 dst 2001:db8:1::1 \
290e858ef1cSDavid Ahern		spi 0x1001 proto esp aead 'rfc4106(gcm(aes))' \
291e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
292e858ef1cSDavid Ahern
293*4affb17cSHangbin Liu	ip -netns $host_2 -6 xfrm state add \
294e858ef1cSDavid Ahern		src 2001:db8:1::1 dst 2001:db8:2::1 \
295e858ef1cSDavid Ahern		spi 0x1000 proto esp aead 'rfc4106(gcm(aes))' \
296e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
297e858ef1cSDavid Ahern
298*4affb17cSHangbin Liu	ip -netns $host_2 -6 xfrm state add \
299e858ef1cSDavid Ahern		src 2001:db8:2::1 dst 2001:db8:1::1 \
300e858ef1cSDavid Ahern		spi 0x1001 proto esp aead 'rfc4106(gcm(aes))' \
301e858ef1cSDavid Ahern		0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f 128 mode transport
302e858ef1cSDavid Ahern}
303e858ef1cSDavid Ahern
304e858ef1cSDavid Ahernteardown_ipsec()
305e858ef1cSDavid Ahern{
306*4affb17cSHangbin Liu	run_cmd $host_1 ip xfrm state flush
307*4affb17cSHangbin Liu	run_cmd $host_1 ip xfrm policy flush
308*4affb17cSHangbin Liu	run_cmd $host_2 ip xfrm state flush
309*4affb17cSHangbin Liu	run_cmd $host_2 ip xfrm policy flush
310e858ef1cSDavid Ahern}
311e858ef1cSDavid Ahern
312e858ef1cSDavid Ahern################################################################################
313e858ef1cSDavid Ahern# generate traffic through tunnel for various cases
314e858ef1cSDavid Ahern
315e858ef1cSDavid Ahernrun_ping()
316e858ef1cSDavid Ahern{
317e858ef1cSDavid Ahern	local desc="$1"
318e858ef1cSDavid Ahern
319*4affb17cSHangbin Liu	run_cmd $host_1 ping -c1 -w1 172.16.1.2
320e858ef1cSDavid Ahern	log_test $? 0 "IPv4 basic L2TP tunnel ${desc}"
321e858ef1cSDavid Ahern
322*4affb17cSHangbin Liu	run_cmd $host_1 ping -c1 -w1 -I 172.16.101.1 172.16.101.2
323e858ef1cSDavid Ahern	log_test $? 0 "IPv4 route through L2TP tunnel ${desc}"
324e858ef1cSDavid Ahern
325*4affb17cSHangbin Liu	run_cmd $host_1 ${ping6} -c1 -w1 fc00:1::2
326e858ef1cSDavid Ahern	log_test $? 0 "IPv6 basic L2TP tunnel ${desc}"
327e858ef1cSDavid Ahern
328*4affb17cSHangbin Liu	run_cmd $host_1 ${ping6} -c1 -w1 -I fc00:101::1 fc00:101::2
329e858ef1cSDavid Ahern	log_test $? 0 "IPv6 route through L2TP tunnel ${desc}"
330e858ef1cSDavid Ahern}
331e858ef1cSDavid Ahern
332e858ef1cSDavid Ahernrun_tests()
333e858ef1cSDavid Ahern{
334e858ef1cSDavid Ahern	local desc
335e858ef1cSDavid Ahern
336e858ef1cSDavid Ahern	setup
337e858ef1cSDavid Ahern	run_ping
338e858ef1cSDavid Ahern
339e858ef1cSDavid Ahern	setup_ipsec
340e858ef1cSDavid Ahern	run_ping "- with IPsec"
341*4affb17cSHangbin Liu	run_cmd $host_1 ping -c1 -w1 172.16.1.2
342e858ef1cSDavid Ahern	log_test $? 0 "IPv4 basic L2TP tunnel ${desc}"
343e858ef1cSDavid Ahern
344*4affb17cSHangbin Liu	run_cmd $host_1 ping -c1 -w1 -I 172.16.101.1 172.16.101.2
345e858ef1cSDavid Ahern	log_test $? 0 "IPv4 route through L2TP tunnel ${desc}"
346e858ef1cSDavid Ahern
347*4affb17cSHangbin Liu	run_cmd $host_1 ${ping6} -c1 -w1 fc00:1::2
348e858ef1cSDavid Ahern	log_test $? 0 "IPv6 basic L2TP tunnel - with IPsec"
349e858ef1cSDavid Ahern
350*4affb17cSHangbin Liu	run_cmd $host_1 ${ping6} -c1 -w1 -I fc00:101::1 fc00:101::2
351e858ef1cSDavid Ahern	log_test $? 0 "IPv6 route through L2TP tunnel - with IPsec"
352e858ef1cSDavid Ahern
353e858ef1cSDavid Ahern	teardown_ipsec
354e858ef1cSDavid Ahern	run_ping "- after IPsec teardown"
355e858ef1cSDavid Ahern}
356e858ef1cSDavid Ahern
357e858ef1cSDavid Ahern################################################################################
358e858ef1cSDavid Ahern# main
359e858ef1cSDavid Ahern
360e858ef1cSDavid Aherndeclare -i nfail=0
361e858ef1cSDavid Aherndeclare -i nsuccess=0
362e858ef1cSDavid Ahern
363e858ef1cSDavid Ahernwhile getopts :pv o
364e858ef1cSDavid Aherndo
365e858ef1cSDavid Ahern	case $o in
366e858ef1cSDavid Ahern		p) PAUSE_ON_FAIL=yes;;
367e858ef1cSDavid Ahern		v) VERBOSE=$(($VERBOSE + 1));;
368e858ef1cSDavid Ahern		*) exit 1;;
369e858ef1cSDavid Ahern	esac
370e858ef1cSDavid Aherndone
371e858ef1cSDavid Ahern
372e858ef1cSDavid Ahernrun_tests
373e858ef1cSDavid Aherncleanup
374e858ef1cSDavid Ahern
375e858ef1cSDavid Ahernprintf "\nTests passed: %3d\n" ${nsuccess}
376e858ef1cSDavid Ahernprintf "Tests failed: %3d\n"   ${nfail}
377