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