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