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