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