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# Copyright (c) 2019 David Ahern <[email protected]>. All rights reserved. 5*053f45beSAndroid Build Coastguard Worker# 6*053f45beSAndroid Build Coastguard Worker# IPv4 and IPv6 functional tests focusing on VRF and routing lookups 7*053f45beSAndroid Build Coastguard Worker# for various permutations: 8*053f45beSAndroid Build Coastguard Worker# 1. icmp, tcp, udp and netfilter 9*053f45beSAndroid Build Coastguard Worker# 2. client, server, no-server 10*053f45beSAndroid Build Coastguard Worker# 3. global address on interface 11*053f45beSAndroid Build Coastguard Worker# 4. global address on 'lo' 12*053f45beSAndroid Build Coastguard Worker# 5. remote and local traffic 13*053f45beSAndroid Build Coastguard Worker# 6. VRF and non-VRF permutations 14*053f45beSAndroid Build Coastguard Worker# 15*053f45beSAndroid Build Coastguard Worker# Setup: 16*053f45beSAndroid Build Coastguard Worker# ns-A | ns-B 17*053f45beSAndroid Build Coastguard Worker# No VRF case: 18*053f45beSAndroid Build Coastguard Worker# [ lo ] [ eth1 ]---|---[ eth1 ] [ lo ] 19*053f45beSAndroid Build Coastguard Worker# remote address 20*053f45beSAndroid Build Coastguard Worker# VRF case: 21*053f45beSAndroid Build Coastguard Worker# [ red ]---[ eth1 ]---|---[ eth1 ] [ lo ] 22*053f45beSAndroid Build Coastguard Worker# 23*053f45beSAndroid Build Coastguard Worker# ns-A: 24*053f45beSAndroid Build Coastguard Worker# eth1: 172.16.1.1/24, 2001:db8:1::1/64 25*053f45beSAndroid Build Coastguard Worker# lo: 127.0.0.1/8, ::1/128 26*053f45beSAndroid Build Coastguard Worker# 172.16.2.1/32, 2001:db8:2::1/128 27*053f45beSAndroid Build Coastguard Worker# red: 127.0.0.1/8, ::1/128 28*053f45beSAndroid Build Coastguard Worker# 172.16.3.1/32, 2001:db8:3::1/128 29*053f45beSAndroid Build Coastguard Worker# 30*053f45beSAndroid Build Coastguard Worker# ns-B: 31*053f45beSAndroid Build Coastguard Worker# eth1: 172.16.1.2/24, 2001:db8:1::2/64 32*053f45beSAndroid Build Coastguard Worker# lo2: 127.0.0.1/8, ::1/128 33*053f45beSAndroid Build Coastguard Worker# 172.16.2.2/32, 2001:db8:2::2/128 34*053f45beSAndroid Build Coastguard Worker# 35*053f45beSAndroid Build Coastguard Worker# ns-A to ns-C connection - only for VRF and same config 36*053f45beSAndroid Build Coastguard Worker# as ns-A to ns-B 37*053f45beSAndroid Build Coastguard Worker# 38*053f45beSAndroid Build Coastguard Worker# server / client nomenclature relative to ns-A 39*053f45beSAndroid Build Coastguard Worker 40*053f45beSAndroid Build Coastguard Worker# Kselftest framework requirement - SKIP code is 4. 41*053f45beSAndroid Build Coastguard Workerksft_skip=4 42*053f45beSAndroid Build Coastguard Worker 43*053f45beSAndroid Build Coastguard WorkerVERBOSE=0 44*053f45beSAndroid Build Coastguard Worker 45*053f45beSAndroid Build Coastguard WorkerNSA_DEV=eth1 46*053f45beSAndroid Build Coastguard WorkerNSA_DEV2=eth2 47*053f45beSAndroid Build Coastguard WorkerNSB_DEV=eth1 48*053f45beSAndroid Build Coastguard WorkerNSC_DEV=eth2 49*053f45beSAndroid Build Coastguard WorkerVRF=red 50*053f45beSAndroid Build Coastguard WorkerVRF_TABLE=1101 51*053f45beSAndroid Build Coastguard Worker 52*053f45beSAndroid Build Coastguard Worker# IPv4 config 53*053f45beSAndroid Build Coastguard WorkerNSA_IP=172.16.1.1 54*053f45beSAndroid Build Coastguard WorkerNSB_IP=172.16.1.2 55*053f45beSAndroid Build Coastguard WorkerVRF_IP=172.16.3.1 56*053f45beSAndroid Build Coastguard WorkerNS_NET=172.16.1.0/24 57*053f45beSAndroid Build Coastguard Worker 58*053f45beSAndroid Build Coastguard Worker# IPv6 config 59*053f45beSAndroid Build Coastguard WorkerNSA_IP6=2001:db8:1::1 60*053f45beSAndroid Build Coastguard WorkerNSB_IP6=2001:db8:1::2 61*053f45beSAndroid Build Coastguard WorkerVRF_IP6=2001:db8:3::1 62*053f45beSAndroid Build Coastguard WorkerNS_NET6=2001:db8:1::/120 63*053f45beSAndroid Build Coastguard Worker 64*053f45beSAndroid Build Coastguard WorkerNSA_LO_IP=172.16.2.1 65*053f45beSAndroid Build Coastguard WorkerNSB_LO_IP=172.16.2.2 66*053f45beSAndroid Build Coastguard WorkerNSA_LO_IP6=2001:db8:2::1 67*053f45beSAndroid Build Coastguard WorkerNSB_LO_IP6=2001:db8:2::2 68*053f45beSAndroid Build Coastguard Worker 69*053f45beSAndroid Build Coastguard Worker# non-local addresses for freebind tests 70*053f45beSAndroid Build Coastguard WorkerNL_IP=172.17.1.1 71*053f45beSAndroid Build Coastguard WorkerNL_IP6=2001:db8:4::1 72*053f45beSAndroid Build Coastguard Worker 73*053f45beSAndroid Build Coastguard Worker# multicast and broadcast addresses 74*053f45beSAndroid Build Coastguard WorkerMCAST_IP=224.0.0.1 75*053f45beSAndroid Build Coastguard WorkerBCAST_IP=255.255.255.255 76*053f45beSAndroid Build Coastguard Worker 77*053f45beSAndroid Build Coastguard WorkerMD5_PW=abc123 78*053f45beSAndroid Build Coastguard WorkerMD5_WRONG_PW=abc1234 79*053f45beSAndroid Build Coastguard Worker 80*053f45beSAndroid Build Coastguard WorkerMCAST=ff02::1 81*053f45beSAndroid Build Coastguard Worker# set after namespace create 82*053f45beSAndroid Build Coastguard WorkerNSA_LINKIP6= 83*053f45beSAndroid Build Coastguard WorkerNSB_LINKIP6= 84*053f45beSAndroid Build Coastguard Worker 85*053f45beSAndroid Build Coastguard WorkerNSA=ns-A 86*053f45beSAndroid Build Coastguard WorkerNSB=ns-B 87*053f45beSAndroid Build Coastguard WorkerNSC=ns-C 88*053f45beSAndroid Build Coastguard Worker 89*053f45beSAndroid Build Coastguard WorkerNSA_CMD="ip netns exec ${NSA}" 90*053f45beSAndroid Build Coastguard WorkerNSB_CMD="ip netns exec ${NSB}" 91*053f45beSAndroid Build Coastguard WorkerNSC_CMD="ip netns exec ${NSC}" 92*053f45beSAndroid Build Coastguard Worker 93*053f45beSAndroid Build Coastguard Workerwhich ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping) 94*053f45beSAndroid Build Coastguard Worker 95*053f45beSAndroid Build Coastguard Worker################################################################################ 96*053f45beSAndroid Build Coastguard Worker# utilities 97*053f45beSAndroid Build Coastguard Worker 98*053f45beSAndroid Build Coastguard Workerlog_test() 99*053f45beSAndroid Build Coastguard Worker{ 100*053f45beSAndroid Build Coastguard Worker local rc=$1 101*053f45beSAndroid Build Coastguard Worker local expected=$2 102*053f45beSAndroid Build Coastguard Worker local msg="$3" 103*053f45beSAndroid Build Coastguard Worker 104*053f45beSAndroid Build Coastguard Worker [ "${VERBOSE}" = "1" ] && echo 105*053f45beSAndroid Build Coastguard Worker 106*053f45beSAndroid Build Coastguard Worker if [ ${rc} -eq ${expected} ]; then 107*053f45beSAndroid Build Coastguard Worker nsuccess=$((nsuccess+1)) 108*053f45beSAndroid Build Coastguard Worker printf "TEST: %-70s [ OK ]\n" "${msg}" 109*053f45beSAndroid Build Coastguard Worker else 110*053f45beSAndroid Build Coastguard Worker nfail=$((nfail+1)) 111*053f45beSAndroid Build Coastguard Worker printf "TEST: %-70s [FAIL]\n" "${msg}" 112*053f45beSAndroid Build Coastguard Worker if [ "${PAUSE_ON_FAIL}" = "yes" ]; then 113*053f45beSAndroid Build Coastguard Worker echo 114*053f45beSAndroid Build Coastguard Worker echo "hit enter to continue, 'q' to quit" 115*053f45beSAndroid Build Coastguard Worker read a 116*053f45beSAndroid Build Coastguard Worker [ "$a" = "q" ] && exit 1 117*053f45beSAndroid Build Coastguard Worker fi 118*053f45beSAndroid Build Coastguard Worker fi 119*053f45beSAndroid Build Coastguard Worker 120*053f45beSAndroid Build Coastguard Worker if [ "${PAUSE}" = "yes" ]; then 121*053f45beSAndroid Build Coastguard Worker echo 122*053f45beSAndroid Build Coastguard Worker echo "hit enter to continue, 'q' to quit" 123*053f45beSAndroid Build Coastguard Worker read a 124*053f45beSAndroid Build Coastguard Worker [ "$a" = "q" ] && exit 1 125*053f45beSAndroid Build Coastguard Worker fi 126*053f45beSAndroid Build Coastguard Worker 127*053f45beSAndroid Build Coastguard Worker kill_procs 128*053f45beSAndroid Build Coastguard Worker} 129*053f45beSAndroid Build Coastguard Worker 130*053f45beSAndroid Build Coastguard Workerlog_test_addr() 131*053f45beSAndroid Build Coastguard Worker{ 132*053f45beSAndroid Build Coastguard Worker local addr=$1 133*053f45beSAndroid Build Coastguard Worker local rc=$2 134*053f45beSAndroid Build Coastguard Worker local expected=$3 135*053f45beSAndroid Build Coastguard Worker local msg="$4" 136*053f45beSAndroid Build Coastguard Worker local astr 137*053f45beSAndroid Build Coastguard Worker 138*053f45beSAndroid Build Coastguard Worker astr=$(addr2str ${addr}) 139*053f45beSAndroid Build Coastguard Worker log_test $rc $expected "$msg - ${astr}" 140*053f45beSAndroid Build Coastguard Worker} 141*053f45beSAndroid Build Coastguard Worker 142*053f45beSAndroid Build Coastguard Workerlog_section() 143*053f45beSAndroid Build Coastguard Worker{ 144*053f45beSAndroid Build Coastguard Worker echo 145*053f45beSAndroid Build Coastguard Worker echo "###########################################################################" 146*053f45beSAndroid Build Coastguard Worker echo "$*" 147*053f45beSAndroid Build Coastguard Worker echo "###########################################################################" 148*053f45beSAndroid Build Coastguard Worker echo 149*053f45beSAndroid Build Coastguard Worker} 150*053f45beSAndroid Build Coastguard Worker 151*053f45beSAndroid Build Coastguard Workerlog_subsection() 152*053f45beSAndroid Build Coastguard Worker{ 153*053f45beSAndroid Build Coastguard Worker echo 154*053f45beSAndroid Build Coastguard Worker echo "#################################################################" 155*053f45beSAndroid Build Coastguard Worker echo "$*" 156*053f45beSAndroid Build Coastguard Worker echo 157*053f45beSAndroid Build Coastguard Worker} 158*053f45beSAndroid Build Coastguard Worker 159*053f45beSAndroid Build Coastguard Workerlog_start() 160*053f45beSAndroid Build Coastguard Worker{ 161*053f45beSAndroid Build Coastguard Worker # make sure we have no test instances running 162*053f45beSAndroid Build Coastguard Worker kill_procs 163*053f45beSAndroid Build Coastguard Worker 164*053f45beSAndroid Build Coastguard Worker if [ "${VERBOSE}" = "1" ]; then 165*053f45beSAndroid Build Coastguard Worker echo 166*053f45beSAndroid Build Coastguard Worker echo "#######################################################" 167*053f45beSAndroid Build Coastguard Worker fi 168*053f45beSAndroid Build Coastguard Worker} 169*053f45beSAndroid Build Coastguard Worker 170*053f45beSAndroid Build Coastguard Workerlog_debug() 171*053f45beSAndroid Build Coastguard Worker{ 172*053f45beSAndroid Build Coastguard Worker if [ "${VERBOSE}" = "1" ]; then 173*053f45beSAndroid Build Coastguard Worker echo 174*053f45beSAndroid Build Coastguard Worker echo "$*" 175*053f45beSAndroid Build Coastguard Worker echo 176*053f45beSAndroid Build Coastguard Worker fi 177*053f45beSAndroid Build Coastguard Worker} 178*053f45beSAndroid Build Coastguard Worker 179*053f45beSAndroid Build Coastguard Workershow_hint() 180*053f45beSAndroid Build Coastguard Worker{ 181*053f45beSAndroid Build Coastguard Worker if [ "${VERBOSE}" = "1" ]; then 182*053f45beSAndroid Build Coastguard Worker echo "HINT: $*" 183*053f45beSAndroid Build Coastguard Worker echo 184*053f45beSAndroid Build Coastguard Worker fi 185*053f45beSAndroid Build Coastguard Worker} 186*053f45beSAndroid Build Coastguard Worker 187*053f45beSAndroid Build Coastguard Workerkill_procs() 188*053f45beSAndroid Build Coastguard Worker{ 189*053f45beSAndroid Build Coastguard Worker killall nettest ping ping6 >/dev/null 2>&1 190*053f45beSAndroid Build Coastguard Worker sleep 1 191*053f45beSAndroid Build Coastguard Worker} 192*053f45beSAndroid Build Coastguard Worker 193*053f45beSAndroid Build Coastguard Workerdo_run_cmd() 194*053f45beSAndroid Build Coastguard Worker{ 195*053f45beSAndroid Build Coastguard Worker local cmd="$*" 196*053f45beSAndroid Build Coastguard Worker local out 197*053f45beSAndroid Build Coastguard Worker 198*053f45beSAndroid Build Coastguard Worker if [ "$VERBOSE" = "1" ]; then 199*053f45beSAndroid Build Coastguard Worker echo "COMMAND: ${cmd}" 200*053f45beSAndroid Build Coastguard Worker fi 201*053f45beSAndroid Build Coastguard Worker 202*053f45beSAndroid Build Coastguard Worker out=$($cmd 2>&1) 203*053f45beSAndroid Build Coastguard Worker rc=$? 204*053f45beSAndroid Build Coastguard Worker if [ "$VERBOSE" = "1" -a -n "$out" ]; then 205*053f45beSAndroid Build Coastguard Worker echo "$out" 206*053f45beSAndroid Build Coastguard Worker fi 207*053f45beSAndroid Build Coastguard Worker 208*053f45beSAndroid Build Coastguard Worker return $rc 209*053f45beSAndroid Build Coastguard Worker} 210*053f45beSAndroid Build Coastguard Worker 211*053f45beSAndroid Build Coastguard Workerrun_cmd() 212*053f45beSAndroid Build Coastguard Worker{ 213*053f45beSAndroid Build Coastguard Worker do_run_cmd ${NSA_CMD} $* 214*053f45beSAndroid Build Coastguard Worker} 215*053f45beSAndroid Build Coastguard Worker 216*053f45beSAndroid Build Coastguard Workerrun_cmd_nsb() 217*053f45beSAndroid Build Coastguard Worker{ 218*053f45beSAndroid Build Coastguard Worker do_run_cmd ${NSB_CMD} $* 219*053f45beSAndroid Build Coastguard Worker} 220*053f45beSAndroid Build Coastguard Worker 221*053f45beSAndroid Build Coastguard Workerrun_cmd_nsc() 222*053f45beSAndroid Build Coastguard Worker{ 223*053f45beSAndroid Build Coastguard Worker do_run_cmd ${NSC_CMD} $* 224*053f45beSAndroid Build Coastguard Worker} 225*053f45beSAndroid Build Coastguard Worker 226*053f45beSAndroid Build Coastguard Workersetup_cmd() 227*053f45beSAndroid Build Coastguard Worker{ 228*053f45beSAndroid Build Coastguard Worker local cmd="$*" 229*053f45beSAndroid Build Coastguard Worker local rc 230*053f45beSAndroid Build Coastguard Worker 231*053f45beSAndroid Build Coastguard Worker run_cmd ${cmd} 232*053f45beSAndroid Build Coastguard Worker rc=$? 233*053f45beSAndroid Build Coastguard Worker if [ $rc -ne 0 ]; then 234*053f45beSAndroid Build Coastguard Worker # show user the command if not done so already 235*053f45beSAndroid Build Coastguard Worker if [ "$VERBOSE" = "0" ]; then 236*053f45beSAndroid Build Coastguard Worker echo "setup command: $cmd" 237*053f45beSAndroid Build Coastguard Worker fi 238*053f45beSAndroid Build Coastguard Worker echo "failed. stopping tests" 239*053f45beSAndroid Build Coastguard Worker if [ "${PAUSE_ON_FAIL}" = "yes" ]; then 240*053f45beSAndroid Build Coastguard Worker echo 241*053f45beSAndroid Build Coastguard Worker echo "hit enter to continue" 242*053f45beSAndroid Build Coastguard Worker read a 243*053f45beSAndroid Build Coastguard Worker fi 244*053f45beSAndroid Build Coastguard Worker exit $rc 245*053f45beSAndroid Build Coastguard Worker fi 246*053f45beSAndroid Build Coastguard Worker} 247*053f45beSAndroid Build Coastguard Worker 248*053f45beSAndroid Build Coastguard Workersetup_cmd_nsb() 249*053f45beSAndroid Build Coastguard Worker{ 250*053f45beSAndroid Build Coastguard Worker local cmd="$*" 251*053f45beSAndroid Build Coastguard Worker local rc 252*053f45beSAndroid Build Coastguard Worker 253*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${cmd} 254*053f45beSAndroid Build Coastguard Worker rc=$? 255*053f45beSAndroid Build Coastguard Worker if [ $rc -ne 0 ]; then 256*053f45beSAndroid Build Coastguard Worker # show user the command if not done so already 257*053f45beSAndroid Build Coastguard Worker if [ "$VERBOSE" = "0" ]; then 258*053f45beSAndroid Build Coastguard Worker echo "setup command: $cmd" 259*053f45beSAndroid Build Coastguard Worker fi 260*053f45beSAndroid Build Coastguard Worker echo "failed. stopping tests" 261*053f45beSAndroid Build Coastguard Worker if [ "${PAUSE_ON_FAIL}" = "yes" ]; then 262*053f45beSAndroid Build Coastguard Worker echo 263*053f45beSAndroid Build Coastguard Worker echo "hit enter to continue" 264*053f45beSAndroid Build Coastguard Worker read a 265*053f45beSAndroid Build Coastguard Worker fi 266*053f45beSAndroid Build Coastguard Worker exit $rc 267*053f45beSAndroid Build Coastguard Worker fi 268*053f45beSAndroid Build Coastguard Worker} 269*053f45beSAndroid Build Coastguard Worker 270*053f45beSAndroid Build Coastguard Workersetup_cmd_nsc() 271*053f45beSAndroid Build Coastguard Worker{ 272*053f45beSAndroid Build Coastguard Worker local cmd="$*" 273*053f45beSAndroid Build Coastguard Worker local rc 274*053f45beSAndroid Build Coastguard Worker 275*053f45beSAndroid Build Coastguard Worker run_cmd_nsc ${cmd} 276*053f45beSAndroid Build Coastguard Worker rc=$? 277*053f45beSAndroid Build Coastguard Worker if [ $rc -ne 0 ]; then 278*053f45beSAndroid Build Coastguard Worker # show user the command if not done so already 279*053f45beSAndroid Build Coastguard Worker if [ "$VERBOSE" = "0" ]; then 280*053f45beSAndroid Build Coastguard Worker echo "setup command: $cmd" 281*053f45beSAndroid Build Coastguard Worker fi 282*053f45beSAndroid Build Coastguard Worker echo "failed. stopping tests" 283*053f45beSAndroid Build Coastguard Worker if [ "${PAUSE_ON_FAIL}" = "yes" ]; then 284*053f45beSAndroid Build Coastguard Worker echo 285*053f45beSAndroid Build Coastguard Worker echo "hit enter to continue" 286*053f45beSAndroid Build Coastguard Worker read a 287*053f45beSAndroid Build Coastguard Worker fi 288*053f45beSAndroid Build Coastguard Worker exit $rc 289*053f45beSAndroid Build Coastguard Worker fi 290*053f45beSAndroid Build Coastguard Worker} 291*053f45beSAndroid Build Coastguard Worker 292*053f45beSAndroid Build Coastguard Worker# set sysctl values in NS-A 293*053f45beSAndroid Build Coastguard Workerset_sysctl() 294*053f45beSAndroid Build Coastguard Worker{ 295*053f45beSAndroid Build Coastguard Worker echo "SYSCTL: $*" 296*053f45beSAndroid Build Coastguard Worker echo 297*053f45beSAndroid Build Coastguard Worker run_cmd sysctl -q -w $* 298*053f45beSAndroid Build Coastguard Worker} 299*053f45beSAndroid Build Coastguard Worker 300*053f45beSAndroid Build Coastguard Worker# get sysctl values in NS-A 301*053f45beSAndroid Build Coastguard Workerget_sysctl() 302*053f45beSAndroid Build Coastguard Worker{ 303*053f45beSAndroid Build Coastguard Worker ${NSA_CMD} sysctl -n $* 304*053f45beSAndroid Build Coastguard Worker} 305*053f45beSAndroid Build Coastguard Worker 306*053f45beSAndroid Build Coastguard Worker################################################################################ 307*053f45beSAndroid Build Coastguard Worker# Setup for tests 308*053f45beSAndroid Build Coastguard Worker 309*053f45beSAndroid Build Coastguard Workeraddr2str() 310*053f45beSAndroid Build Coastguard Worker{ 311*053f45beSAndroid Build Coastguard Worker case "$1" in 312*053f45beSAndroid Build Coastguard Worker 127.0.0.1) echo "loopback";; 313*053f45beSAndroid Build Coastguard Worker ::1) echo "IPv6 loopback";; 314*053f45beSAndroid Build Coastguard Worker 315*053f45beSAndroid Build Coastguard Worker ${BCAST_IP}) echo "broadcast";; 316*053f45beSAndroid Build Coastguard Worker ${MCAST_IP}) echo "multicast";; 317*053f45beSAndroid Build Coastguard Worker 318*053f45beSAndroid Build Coastguard Worker ${NSA_IP}) echo "ns-A IP";; 319*053f45beSAndroid Build Coastguard Worker ${NSA_IP6}) echo "ns-A IPv6";; 320*053f45beSAndroid Build Coastguard Worker ${NSA_LO_IP}) echo "ns-A loopback IP";; 321*053f45beSAndroid Build Coastguard Worker ${NSA_LO_IP6}) echo "ns-A loopback IPv6";; 322*053f45beSAndroid Build Coastguard Worker ${NSA_LINKIP6}|${NSA_LINKIP6}%*) echo "ns-A IPv6 LLA";; 323*053f45beSAndroid Build Coastguard Worker 324*053f45beSAndroid Build Coastguard Worker ${NSB_IP}) echo "ns-B IP";; 325*053f45beSAndroid Build Coastguard Worker ${NSB_IP6}) echo "ns-B IPv6";; 326*053f45beSAndroid Build Coastguard Worker ${NSB_LO_IP}) echo "ns-B loopback IP";; 327*053f45beSAndroid Build Coastguard Worker ${NSB_LO_IP6}) echo "ns-B loopback IPv6";; 328*053f45beSAndroid Build Coastguard Worker ${NSB_LINKIP6}|${NSB_LINKIP6}%*) echo "ns-B IPv6 LLA";; 329*053f45beSAndroid Build Coastguard Worker 330*053f45beSAndroid Build Coastguard Worker ${NL_IP}) echo "nonlocal IP";; 331*053f45beSAndroid Build Coastguard Worker ${NL_IP6}) echo "nonlocal IPv6";; 332*053f45beSAndroid Build Coastguard Worker 333*053f45beSAndroid Build Coastguard Worker ${VRF_IP}) echo "VRF IP";; 334*053f45beSAndroid Build Coastguard Worker ${VRF_IP6}) echo "VRF IPv6";; 335*053f45beSAndroid Build Coastguard Worker 336*053f45beSAndroid Build Coastguard Worker ${MCAST}%*) echo "multicast IP";; 337*053f45beSAndroid Build Coastguard Worker 338*053f45beSAndroid Build Coastguard Worker *) echo "unknown";; 339*053f45beSAndroid Build Coastguard Worker esac 340*053f45beSAndroid Build Coastguard Worker} 341*053f45beSAndroid Build Coastguard Worker 342*053f45beSAndroid Build Coastguard Workerget_linklocal() 343*053f45beSAndroid Build Coastguard Worker{ 344*053f45beSAndroid Build Coastguard Worker local ns=$1 345*053f45beSAndroid Build Coastguard Worker local dev=$2 346*053f45beSAndroid Build Coastguard Worker local addr 347*053f45beSAndroid Build Coastguard Worker 348*053f45beSAndroid Build Coastguard Worker addr=$(ip -netns ${ns} -6 -br addr show dev ${dev} | \ 349*053f45beSAndroid Build Coastguard Worker awk '{ 350*053f45beSAndroid Build Coastguard Worker for (i = 3; i <= NF; ++i) { 351*053f45beSAndroid Build Coastguard Worker if ($i ~ /^fe80/) 352*053f45beSAndroid Build Coastguard Worker print $i 353*053f45beSAndroid Build Coastguard Worker } 354*053f45beSAndroid Build Coastguard Worker }' 355*053f45beSAndroid Build Coastguard Worker ) 356*053f45beSAndroid Build Coastguard Worker addr=${addr/\/*} 357*053f45beSAndroid Build Coastguard Worker 358*053f45beSAndroid Build Coastguard Worker [ -z "$addr" ] && return 1 359*053f45beSAndroid Build Coastguard Worker 360*053f45beSAndroid Build Coastguard Worker echo $addr 361*053f45beSAndroid Build Coastguard Worker 362*053f45beSAndroid Build Coastguard Worker return 0 363*053f45beSAndroid Build Coastguard Worker} 364*053f45beSAndroid Build Coastguard Worker 365*053f45beSAndroid Build Coastguard Worker################################################################################ 366*053f45beSAndroid Build Coastguard Worker# create namespaces and vrf 367*053f45beSAndroid Build Coastguard Worker 368*053f45beSAndroid Build Coastguard Workercreate_vrf() 369*053f45beSAndroid Build Coastguard Worker{ 370*053f45beSAndroid Build Coastguard Worker local ns=$1 371*053f45beSAndroid Build Coastguard Worker local vrf=$2 372*053f45beSAndroid Build Coastguard Worker local table=$3 373*053f45beSAndroid Build Coastguard Worker local addr=$4 374*053f45beSAndroid Build Coastguard Worker local addr6=$5 375*053f45beSAndroid Build Coastguard Worker 376*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} link add ${vrf} type vrf table ${table} 377*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} link set ${vrf} up 378*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} route add vrf ${vrf} unreachable default metric 8192 379*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 route add vrf ${vrf} unreachable default metric 8192 380*053f45beSAndroid Build Coastguard Worker 381*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} addr add 127.0.0.1/8 dev ${vrf} 382*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 addr add ::1 dev ${vrf} nodad 383*053f45beSAndroid Build Coastguard Worker if [ "${addr}" != "-" ]; then 384*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} addr add dev ${vrf} ${addr} 385*053f45beSAndroid Build Coastguard Worker fi 386*053f45beSAndroid Build Coastguard Worker if [ "${addr6}" != "-" ]; then 387*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 addr add dev ${vrf} ${addr6} 388*053f45beSAndroid Build Coastguard Worker fi 389*053f45beSAndroid Build Coastguard Worker 390*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} ru del pref 0 391*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} ru add pref 32765 from all lookup local 392*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 ru del pref 0 393*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 ru add pref 32765 from all lookup local 394*053f45beSAndroid Build Coastguard Worker} 395*053f45beSAndroid Build Coastguard Worker 396*053f45beSAndroid Build Coastguard Workercreate_ns() 397*053f45beSAndroid Build Coastguard Worker{ 398*053f45beSAndroid Build Coastguard Worker local ns=$1 399*053f45beSAndroid Build Coastguard Worker local addr=$2 400*053f45beSAndroid Build Coastguard Worker local addr6=$3 401*053f45beSAndroid Build Coastguard Worker 402*053f45beSAndroid Build Coastguard Worker ip netns add ${ns} 403*053f45beSAndroid Build Coastguard Worker 404*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} link set lo up 405*053f45beSAndroid Build Coastguard Worker if [ "${addr}" != "-" ]; then 406*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} addr add dev lo ${addr} 407*053f45beSAndroid Build Coastguard Worker fi 408*053f45beSAndroid Build Coastguard Worker if [ "${addr6}" != "-" ]; then 409*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 addr add dev lo ${addr6} 410*053f45beSAndroid Build Coastguard Worker fi 411*053f45beSAndroid Build Coastguard Worker 412*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} ro add unreachable default metric 8192 413*053f45beSAndroid Build Coastguard Worker ip -netns ${ns} -6 ro add unreachable default metric 8192 414*053f45beSAndroid Build Coastguard Worker 415*053f45beSAndroid Build Coastguard Worker ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1 416*053f45beSAndroid Build Coastguard Worker ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1 417*053f45beSAndroid Build Coastguard Worker ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1 418*053f45beSAndroid Build Coastguard Worker ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1 419*053f45beSAndroid Build Coastguard Worker} 420*053f45beSAndroid Build Coastguard Worker 421*053f45beSAndroid Build Coastguard Worker# create veth pair to connect namespaces and apply addresses. 422*053f45beSAndroid Build Coastguard Workerconnect_ns() 423*053f45beSAndroid Build Coastguard Worker{ 424*053f45beSAndroid Build Coastguard Worker local ns1=$1 425*053f45beSAndroid Build Coastguard Worker local ns1_dev=$2 426*053f45beSAndroid Build Coastguard Worker local ns1_addr=$3 427*053f45beSAndroid Build Coastguard Worker local ns1_addr6=$4 428*053f45beSAndroid Build Coastguard Worker local ns2=$5 429*053f45beSAndroid Build Coastguard Worker local ns2_dev=$6 430*053f45beSAndroid Build Coastguard Worker local ns2_addr=$7 431*053f45beSAndroid Build Coastguard Worker local ns2_addr6=$8 432*053f45beSAndroid Build Coastguard Worker 433*053f45beSAndroid Build Coastguard Worker ip -netns ${ns1} li add ${ns1_dev} type veth peer name tmp 434*053f45beSAndroid Build Coastguard Worker ip -netns ${ns1} li set ${ns1_dev} up 435*053f45beSAndroid Build Coastguard Worker ip -netns ${ns1} li set tmp netns ${ns2} name ${ns2_dev} 436*053f45beSAndroid Build Coastguard Worker ip -netns ${ns2} li set ${ns2_dev} up 437*053f45beSAndroid Build Coastguard Worker 438*053f45beSAndroid Build Coastguard Worker if [ "${ns1_addr}" != "-" ]; then 439*053f45beSAndroid Build Coastguard Worker ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr} 440*053f45beSAndroid Build Coastguard Worker ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr} 441*053f45beSAndroid Build Coastguard Worker fi 442*053f45beSAndroid Build Coastguard Worker 443*053f45beSAndroid Build Coastguard Worker if [ "${ns1_addr6}" != "-" ]; then 444*053f45beSAndroid Build Coastguard Worker ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr6} 445*053f45beSAndroid Build Coastguard Worker ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr6} 446*053f45beSAndroid Build Coastguard Worker fi 447*053f45beSAndroid Build Coastguard Worker} 448*053f45beSAndroid Build Coastguard Worker 449*053f45beSAndroid Build Coastguard Workercleanup() 450*053f45beSAndroid Build Coastguard Worker{ 451*053f45beSAndroid Build Coastguard Worker # explicit cleanups to check those code paths 452*053f45beSAndroid Build Coastguard Worker ip netns | grep -q ${NSA} 453*053f45beSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 454*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} link delete ${VRF} 455*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} ro flush table ${VRF_TABLE} 456*053f45beSAndroid Build Coastguard Worker 457*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} addr flush dev ${NSA_DEV} 458*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} -6 addr flush dev ${NSA_DEV} 459*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} link set dev ${NSA_DEV} down 460*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} link del dev ${NSA_DEV} 461*053f45beSAndroid Build Coastguard Worker 462*053f45beSAndroid Build Coastguard Worker ip netns pids ${NSA} | xargs kill 2>/dev/null 463*053f45beSAndroid Build Coastguard Worker ip netns del ${NSA} 464*053f45beSAndroid Build Coastguard Worker fi 465*053f45beSAndroid Build Coastguard Worker 466*053f45beSAndroid Build Coastguard Worker ip netns pids ${NSB} | xargs kill 2>/dev/null 467*053f45beSAndroid Build Coastguard Worker ip netns del ${NSB} 468*053f45beSAndroid Build Coastguard Worker ip netns pids ${NSC} | xargs kill 2>/dev/null 469*053f45beSAndroid Build Coastguard Worker ip netns del ${NSC} >/dev/null 2>&1 470*053f45beSAndroid Build Coastguard Worker} 471*053f45beSAndroid Build Coastguard Worker 472*053f45beSAndroid Build Coastguard Workercleanup_vrf_dup() 473*053f45beSAndroid Build Coastguard Worker{ 474*053f45beSAndroid Build Coastguard Worker ip link del ${NSA_DEV2} >/dev/null 2>&1 475*053f45beSAndroid Build Coastguard Worker ip netns pids ${NSC} | xargs kill 2>/dev/null 476*053f45beSAndroid Build Coastguard Worker ip netns del ${NSC} >/dev/null 2>&1 477*053f45beSAndroid Build Coastguard Worker} 478*053f45beSAndroid Build Coastguard Worker 479*053f45beSAndroid Build Coastguard Workersetup_vrf_dup() 480*053f45beSAndroid Build Coastguard Worker{ 481*053f45beSAndroid Build Coastguard Worker # some VRF tests use ns-C which has the same config as 482*053f45beSAndroid Build Coastguard Worker # ns-B but for a device NOT in the VRF 483*053f45beSAndroid Build Coastguard Worker create_ns ${NSC} "-" "-" 484*053f45beSAndroid Build Coastguard Worker connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \ 485*053f45beSAndroid Build Coastguard Worker ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64 486*053f45beSAndroid Build Coastguard Worker} 487*053f45beSAndroid Build Coastguard Worker 488*053f45beSAndroid Build Coastguard Workersetup() 489*053f45beSAndroid Build Coastguard Worker{ 490*053f45beSAndroid Build Coastguard Worker local with_vrf=${1} 491*053f45beSAndroid Build Coastguard Worker 492*053f45beSAndroid Build Coastguard Worker # make sure we are starting with a clean slate 493*053f45beSAndroid Build Coastguard Worker kill_procs 494*053f45beSAndroid Build Coastguard Worker cleanup 2>/dev/null 495*053f45beSAndroid Build Coastguard Worker 496*053f45beSAndroid Build Coastguard Worker log_debug "Configuring network namespaces" 497*053f45beSAndroid Build Coastguard Worker set -e 498*053f45beSAndroid Build Coastguard Worker 499*053f45beSAndroid Build Coastguard Worker create_ns ${NSA} ${NSA_LO_IP}/32 ${NSA_LO_IP6}/128 500*053f45beSAndroid Build Coastguard Worker create_ns ${NSB} ${NSB_LO_IP}/32 ${NSB_LO_IP6}/128 501*053f45beSAndroid Build Coastguard Worker connect_ns ${NSA} ${NSA_DEV} ${NSA_IP}/24 ${NSA_IP6}/64 \ 502*053f45beSAndroid Build Coastguard Worker ${NSB} ${NSB_DEV} ${NSB_IP}/24 ${NSB_IP6}/64 503*053f45beSAndroid Build Coastguard Worker 504*053f45beSAndroid Build Coastguard Worker NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV}) 505*053f45beSAndroid Build Coastguard Worker NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV}) 506*053f45beSAndroid Build Coastguard Worker 507*053f45beSAndroid Build Coastguard Worker # tell ns-A how to get to remote addresses of ns-B 508*053f45beSAndroid Build Coastguard Worker if [ "${with_vrf}" = "yes" ]; then 509*053f45beSAndroid Build Coastguard Worker create_vrf ${NSA} ${VRF} ${VRF_TABLE} ${VRF_IP} ${VRF_IP6} 510*053f45beSAndroid Build Coastguard Worker 511*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF} 512*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} ro add vrf ${VRF} ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV} 513*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} -6 ro add vrf ${VRF} ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV} 514*053f45beSAndroid Build Coastguard Worker 515*053f45beSAndroid Build Coastguard Worker ip -netns ${NSB} ro add ${VRF_IP}/32 via ${NSA_IP} dev ${NSB_DEV} 516*053f45beSAndroid Build Coastguard Worker ip -netns ${NSB} -6 ro add ${VRF_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV} 517*053f45beSAndroid Build Coastguard Worker else 518*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} ro add ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV} 519*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} ro add ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV} 520*053f45beSAndroid Build Coastguard Worker fi 521*053f45beSAndroid Build Coastguard Worker 522*053f45beSAndroid Build Coastguard Worker 523*053f45beSAndroid Build Coastguard Worker # tell ns-B how to get to remote addresses of ns-A 524*053f45beSAndroid Build Coastguard Worker ip -netns ${NSB} ro add ${NSA_LO_IP}/32 via ${NSA_IP} dev ${NSB_DEV} 525*053f45beSAndroid Build Coastguard Worker ip -netns ${NSB} ro add ${NSA_LO_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV} 526*053f45beSAndroid Build Coastguard Worker 527*053f45beSAndroid Build Coastguard Worker set +e 528*053f45beSAndroid Build Coastguard Worker 529*053f45beSAndroid Build Coastguard Worker sleep 1 530*053f45beSAndroid Build Coastguard Worker} 531*053f45beSAndroid Build Coastguard Worker 532*053f45beSAndroid Build Coastguard Workersetup_lla_only() 533*053f45beSAndroid Build Coastguard Worker{ 534*053f45beSAndroid Build Coastguard Worker # make sure we are starting with a clean slate 535*053f45beSAndroid Build Coastguard Worker kill_procs 536*053f45beSAndroid Build Coastguard Worker cleanup 2>/dev/null 537*053f45beSAndroid Build Coastguard Worker 538*053f45beSAndroid Build Coastguard Worker log_debug "Configuring network namespaces" 539*053f45beSAndroid Build Coastguard Worker set -e 540*053f45beSAndroid Build Coastguard Worker 541*053f45beSAndroid Build Coastguard Worker create_ns ${NSA} "-" "-" 542*053f45beSAndroid Build Coastguard Worker create_ns ${NSB} "-" "-" 543*053f45beSAndroid Build Coastguard Worker create_ns ${NSC} "-" "-" 544*053f45beSAndroid Build Coastguard Worker connect_ns ${NSA} ${NSA_DEV} "-" "-" \ 545*053f45beSAndroid Build Coastguard Worker ${NSB} ${NSB_DEV} "-" "-" 546*053f45beSAndroid Build Coastguard Worker connect_ns ${NSA} ${NSA_DEV2} "-" "-" \ 547*053f45beSAndroid Build Coastguard Worker ${NSC} ${NSC_DEV} "-" "-" 548*053f45beSAndroid Build Coastguard Worker 549*053f45beSAndroid Build Coastguard Worker NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV}) 550*053f45beSAndroid Build Coastguard Worker NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV}) 551*053f45beSAndroid Build Coastguard Worker NSC_LINKIP6=$(get_linklocal ${NSC} ${NSC_DEV}) 552*053f45beSAndroid Build Coastguard Worker 553*053f45beSAndroid Build Coastguard Worker create_vrf ${NSA} ${VRF} ${VRF_TABLE} "-" "-" 554*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF} 555*053f45beSAndroid Build Coastguard Worker ip -netns ${NSA} link set dev ${NSA_DEV2} vrf ${VRF} 556*053f45beSAndroid Build Coastguard Worker 557*053f45beSAndroid Build Coastguard Worker set +e 558*053f45beSAndroid Build Coastguard Worker 559*053f45beSAndroid Build Coastguard Worker sleep 1 560*053f45beSAndroid Build Coastguard Worker} 561*053f45beSAndroid Build Coastguard Worker 562*053f45beSAndroid Build Coastguard Worker################################################################################ 563*053f45beSAndroid Build Coastguard Worker# IPv4 564*053f45beSAndroid Build Coastguard Worker 565*053f45beSAndroid Build Coastguard Workeripv4_ping_novrf() 566*053f45beSAndroid Build Coastguard Worker{ 567*053f45beSAndroid Build Coastguard Worker local a 568*053f45beSAndroid Build Coastguard Worker 569*053f45beSAndroid Build Coastguard Worker # 570*053f45beSAndroid Build Coastguard Worker # out 571*053f45beSAndroid Build Coastguard Worker # 572*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP} ${NSB_LO_IP} 573*053f45beSAndroid Build Coastguard Worker do 574*053f45beSAndroid Build Coastguard Worker log_start 575*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 ${a} 576*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out" 577*053f45beSAndroid Build Coastguard Worker 578*053f45beSAndroid Build Coastguard Worker log_start 579*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 580*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, device bind" 581*053f45beSAndroid Build Coastguard Worker 582*053f45beSAndroid Build Coastguard Worker log_start 583*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_LO_IP} ${a} 584*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, address bind" 585*053f45beSAndroid Build Coastguard Worker done 586*053f45beSAndroid Build Coastguard Worker 587*053f45beSAndroid Build Coastguard Worker # 588*053f45beSAndroid Build Coastguard Worker # in 589*053f45beSAndroid Build Coastguard Worker # 590*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 591*053f45beSAndroid Build Coastguard Worker do 592*053f45beSAndroid Build Coastguard Worker log_start 593*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${a} 594*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping in" 595*053f45beSAndroid Build Coastguard Worker done 596*053f45beSAndroid Build Coastguard Worker 597*053f45beSAndroid Build Coastguard Worker # 598*053f45beSAndroid Build Coastguard Worker # local traffic 599*053f45beSAndroid Build Coastguard Worker # 600*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1 601*053f45beSAndroid Build Coastguard Worker do 602*053f45beSAndroid Build Coastguard Worker log_start 603*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 ${a} 604*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local" 605*053f45beSAndroid Build Coastguard Worker done 606*053f45beSAndroid Build Coastguard Worker 607*053f45beSAndroid Build Coastguard Worker # 608*053f45beSAndroid Build Coastguard Worker # local traffic, socket bound to device 609*053f45beSAndroid Build Coastguard Worker # 610*053f45beSAndroid Build Coastguard Worker # address on device 611*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 612*053f45beSAndroid Build Coastguard Worker log_start 613*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 614*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, device bind" 615*053f45beSAndroid Build Coastguard Worker 616*053f45beSAndroid Build Coastguard Worker # loopback addresses not reachable from device bind 617*053f45beSAndroid Build Coastguard Worker # fails in a really weird way though because ipv4 special cases 618*053f45beSAndroid Build Coastguard Worker # route lookups with oif set. 619*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP} 127.0.0.1 620*053f45beSAndroid Build Coastguard Worker do 621*053f45beSAndroid Build Coastguard Worker log_start 622*053f45beSAndroid Build Coastguard Worker show_hint "Fails since address on loopback device is out of device scope" 623*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 624*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping local, device bind" 625*053f45beSAndroid Build Coastguard Worker done 626*053f45beSAndroid Build Coastguard Worker 627*053f45beSAndroid Build Coastguard Worker # 628*053f45beSAndroid Build Coastguard Worker # ip rule blocks reachability to remote address 629*053f45beSAndroid Build Coastguard Worker # 630*053f45beSAndroid Build Coastguard Worker log_start 631*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule add pref 32765 from all lookup local 632*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule del pref 0 from all lookup local 633*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit 634*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit 635*053f45beSAndroid Build Coastguard Worker 636*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP} 637*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 ${a} 638*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, blocked by rule" 639*053f45beSAndroid Build Coastguard Worker 640*053f45beSAndroid Build Coastguard Worker # NOTE: ipv4 actually allows the lookup to fail and yet still create 641*053f45beSAndroid Build Coastguard Worker # a viable rtable if the oif (e.g., bind to device) is set, so this 642*053f45beSAndroid Build Coastguard Worker # case succeeds despite the rule 643*053f45beSAndroid Build Coastguard Worker # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 644*053f45beSAndroid Build Coastguard Worker 645*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP} 646*053f45beSAndroid Build Coastguard Worker log_start 647*053f45beSAndroid Build Coastguard Worker show_hint "Response generates ICMP (or arp request is ignored) due to ip rule" 648*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${a} 649*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, blocked by rule" 650*053f45beSAndroid Build Coastguard Worker 651*053f45beSAndroid Build Coastguard Worker [ "$VERBOSE" = "1" ] && echo 652*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule del pref 32765 from all lookup local 653*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule add pref 0 from all lookup local 654*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit 655*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit 656*053f45beSAndroid Build Coastguard Worker 657*053f45beSAndroid Build Coastguard Worker # 658*053f45beSAndroid Build Coastguard Worker # route blocks reachability to remote address 659*053f45beSAndroid Build Coastguard Worker # 660*053f45beSAndroid Build Coastguard Worker log_start 661*053f45beSAndroid Build Coastguard Worker setup_cmd ip route replace unreachable ${NSB_LO_IP} 662*053f45beSAndroid Build Coastguard Worker setup_cmd ip route replace unreachable ${NSB_IP} 663*053f45beSAndroid Build Coastguard Worker 664*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP} 665*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 ${a} 666*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, blocked by route" 667*053f45beSAndroid Build Coastguard Worker 668*053f45beSAndroid Build Coastguard Worker # NOTE: ipv4 actually allows the lookup to fail and yet still create 669*053f45beSAndroid Build Coastguard Worker # a viable rtable if the oif (e.g., bind to device) is set, so this 670*053f45beSAndroid Build Coastguard Worker # case succeeds despite not having a route for the address 671*053f45beSAndroid Build Coastguard Worker # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 672*053f45beSAndroid Build Coastguard Worker 673*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP} 674*053f45beSAndroid Build Coastguard Worker log_start 675*053f45beSAndroid Build Coastguard Worker show_hint "Response is dropped (or arp request is ignored) due to ip route" 676*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${a} 677*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, blocked by route" 678*053f45beSAndroid Build Coastguard Worker 679*053f45beSAndroid Build Coastguard Worker # 680*053f45beSAndroid Build Coastguard Worker # remove 'remote' routes; fallback to default 681*053f45beSAndroid Build Coastguard Worker # 682*053f45beSAndroid Build Coastguard Worker log_start 683*053f45beSAndroid Build Coastguard Worker setup_cmd ip ro del ${NSB_LO_IP} 684*053f45beSAndroid Build Coastguard Worker 685*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP} 686*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 ${a} 687*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, unreachable default route" 688*053f45beSAndroid Build Coastguard Worker 689*053f45beSAndroid Build Coastguard Worker # NOTE: ipv4 actually allows the lookup to fail and yet still create 690*053f45beSAndroid Build Coastguard Worker # a viable rtable if the oif (e.g., bind to device) is set, so this 691*053f45beSAndroid Build Coastguard Worker # case succeeds despite not having a route for the address 692*053f45beSAndroid Build Coastguard Worker # run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 693*053f45beSAndroid Build Coastguard Worker} 694*053f45beSAndroid Build Coastguard Worker 695*053f45beSAndroid Build Coastguard Workeripv4_ping_vrf() 696*053f45beSAndroid Build Coastguard Worker{ 697*053f45beSAndroid Build Coastguard Worker local a 698*053f45beSAndroid Build Coastguard Worker 699*053f45beSAndroid Build Coastguard Worker # should default on; does not exist on older kernels 700*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null 701*053f45beSAndroid Build Coastguard Worker 702*053f45beSAndroid Build Coastguard Worker # 703*053f45beSAndroid Build Coastguard Worker # out 704*053f45beSAndroid Build Coastguard Worker # 705*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP} ${NSB_LO_IP} 706*053f45beSAndroid Build Coastguard Worker do 707*053f45beSAndroid Build Coastguard Worker log_start 708*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${VRF} ${a} 709*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, VRF bind" 710*053f45beSAndroid Build Coastguard Worker 711*053f45beSAndroid Build Coastguard Worker log_start 712*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 713*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, device bind" 714*053f45beSAndroid Build Coastguard Worker 715*053f45beSAndroid Build Coastguard Worker log_start 716*053f45beSAndroid Build Coastguard Worker run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${NSA_IP} ${a} 717*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, vrf device + dev address bind" 718*053f45beSAndroid Build Coastguard Worker 719*053f45beSAndroid Build Coastguard Worker log_start 720*053f45beSAndroid Build Coastguard Worker run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${VRF_IP} ${a} 721*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, vrf device + vrf address bind" 722*053f45beSAndroid Build Coastguard Worker done 723*053f45beSAndroid Build Coastguard Worker 724*053f45beSAndroid Build Coastguard Worker # 725*053f45beSAndroid Build Coastguard Worker # in 726*053f45beSAndroid Build Coastguard Worker # 727*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 728*053f45beSAndroid Build Coastguard Worker do 729*053f45beSAndroid Build Coastguard Worker log_start 730*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${a} 731*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping in" 732*053f45beSAndroid Build Coastguard Worker done 733*053f45beSAndroid Build Coastguard Worker 734*053f45beSAndroid Build Coastguard Worker # 735*053f45beSAndroid Build Coastguard Worker # local traffic, local address 736*053f45beSAndroid Build Coastguard Worker # 737*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 127.0.0.1 738*053f45beSAndroid Build Coastguard Worker do 739*053f45beSAndroid Build Coastguard Worker log_start 740*053f45beSAndroid Build Coastguard Worker show_hint "Source address should be ${a}" 741*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${VRF} ${a} 742*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, VRF bind" 743*053f45beSAndroid Build Coastguard Worker done 744*053f45beSAndroid Build Coastguard Worker 745*053f45beSAndroid Build Coastguard Worker # 746*053f45beSAndroid Build Coastguard Worker # local traffic, socket bound to device 747*053f45beSAndroid Build Coastguard Worker # 748*053f45beSAndroid Build Coastguard Worker # address on device 749*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 750*053f45beSAndroid Build Coastguard Worker log_start 751*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 752*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, device bind" 753*053f45beSAndroid Build Coastguard Worker 754*053f45beSAndroid Build Coastguard Worker # vrf device is out of scope 755*053f45beSAndroid Build Coastguard Worker for a in ${VRF_IP} 127.0.0.1 756*053f45beSAndroid Build Coastguard Worker do 757*053f45beSAndroid Build Coastguard Worker log_start 758*053f45beSAndroid Build Coastguard Worker show_hint "Fails since address on vrf device is out of device scope" 759*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 760*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping local, device bind" 761*053f45beSAndroid Build Coastguard Worker done 762*053f45beSAndroid Build Coastguard Worker 763*053f45beSAndroid Build Coastguard Worker # 764*053f45beSAndroid Build Coastguard Worker # ip rule blocks address 765*053f45beSAndroid Build Coastguard Worker # 766*053f45beSAndroid Build Coastguard Worker log_start 767*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit 768*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit 769*053f45beSAndroid Build Coastguard Worker 770*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP} 771*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${VRF} ${a} 772*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, vrf bind, blocked by rule" 773*053f45beSAndroid Build Coastguard Worker 774*053f45beSAndroid Build Coastguard Worker log_start 775*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 776*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule" 777*053f45beSAndroid Build Coastguard Worker 778*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP} 779*053f45beSAndroid Build Coastguard Worker log_start 780*053f45beSAndroid Build Coastguard Worker show_hint "Response lost due to ip rule" 781*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${a} 782*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, blocked by rule" 783*053f45beSAndroid Build Coastguard Worker 784*053f45beSAndroid Build Coastguard Worker [ "$VERBOSE" = "1" ] && echo 785*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit 786*053f45beSAndroid Build Coastguard Worker setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit 787*053f45beSAndroid Build Coastguard Worker 788*053f45beSAndroid Build Coastguard Worker # 789*053f45beSAndroid Build Coastguard Worker # remove 'remote' routes; fallback to default 790*053f45beSAndroid Build Coastguard Worker # 791*053f45beSAndroid Build Coastguard Worker log_start 792*053f45beSAndroid Build Coastguard Worker setup_cmd ip ro del vrf ${VRF} ${NSB_LO_IP} 793*053f45beSAndroid Build Coastguard Worker 794*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP} 795*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${VRF} ${a} 796*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, vrf bind, unreachable route" 797*053f45beSAndroid Build Coastguard Worker 798*053f45beSAndroid Build Coastguard Worker log_start 799*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a} 800*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, unreachable route" 801*053f45beSAndroid Build Coastguard Worker 802*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP} 803*053f45beSAndroid Build Coastguard Worker log_start 804*053f45beSAndroid Build Coastguard Worker show_hint "Response lost by unreachable route" 805*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${a} 806*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, unreachable route" 807*053f45beSAndroid Build Coastguard Worker} 808*053f45beSAndroid Build Coastguard Worker 809*053f45beSAndroid Build Coastguard Workeripv4_ping() 810*053f45beSAndroid Build Coastguard Worker{ 811*053f45beSAndroid Build Coastguard Worker log_section "IPv4 ping" 812*053f45beSAndroid Build Coastguard Worker 813*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 814*053f45beSAndroid Build Coastguard Worker setup 815*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null 816*053f45beSAndroid Build Coastguard Worker ipv4_ping_novrf 817*053f45beSAndroid Build Coastguard Worker setup 818*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null 819*053f45beSAndroid Build Coastguard Worker ipv4_ping_novrf 820*053f45beSAndroid Build Coastguard Worker setup 821*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null 822*053f45beSAndroid Build Coastguard Worker ipv4_ping_novrf 823*053f45beSAndroid Build Coastguard Worker 824*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 825*053f45beSAndroid Build Coastguard Worker setup "yes" 826*053f45beSAndroid Build Coastguard Worker ipv4_ping_vrf 827*053f45beSAndroid Build Coastguard Worker setup "yes" 828*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null 829*053f45beSAndroid Build Coastguard Worker ipv4_ping_vrf 830*053f45beSAndroid Build Coastguard Worker} 831*053f45beSAndroid Build Coastguard Worker 832*053f45beSAndroid Build Coastguard Worker################################################################################ 833*053f45beSAndroid Build Coastguard Worker# IPv4 TCP 834*053f45beSAndroid Build Coastguard Worker 835*053f45beSAndroid Build Coastguard Worker# 836*053f45beSAndroid Build Coastguard Worker# MD5 tests without VRF 837*053f45beSAndroid Build Coastguard Worker# 838*053f45beSAndroid Build Coastguard Workeripv4_tcp_md5_novrf() 839*053f45beSAndroid Build Coastguard Worker{ 840*053f45beSAndroid Build Coastguard Worker # 841*053f45beSAndroid Build Coastguard Worker # single address 842*053f45beSAndroid Build Coastguard Worker # 843*053f45beSAndroid Build Coastguard Worker 844*053f45beSAndroid Build Coastguard Worker # basic use case 845*053f45beSAndroid Build Coastguard Worker log_start 846*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} & 847*053f45beSAndroid Build Coastguard Worker sleep 1 848*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 849*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: Single address config" 850*053f45beSAndroid Build Coastguard Worker 851*053f45beSAndroid Build Coastguard Worker # client sends MD5, server not configured 852*053f45beSAndroid Build Coastguard Worker log_start 853*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout due to MD5 mismatch" 854*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 855*053f45beSAndroid Build Coastguard Worker sleep 1 856*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 857*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Server no config, client uses password" 858*053f45beSAndroid Build Coastguard Worker 859*053f45beSAndroid Build Coastguard Worker # wrong password 860*053f45beSAndroid Build Coastguard Worker log_start 861*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 862*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} & 863*053f45beSAndroid Build Coastguard Worker sleep 1 864*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 865*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Client uses wrong password" 866*053f45beSAndroid Build Coastguard Worker 867*053f45beSAndroid Build Coastguard Worker # client from different address 868*053f45beSAndroid Build Coastguard Worker log_start 869*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout due to MD5 mismatch" 870*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NSB_LO_IP} & 871*053f45beSAndroid Build Coastguard Worker sleep 1 872*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 873*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Client address does not match address configured with password" 874*053f45beSAndroid Build Coastguard Worker 875*053f45beSAndroid Build Coastguard Worker # 876*053f45beSAndroid Build Coastguard Worker # MD5 extension - prefix length 877*053f45beSAndroid Build Coastguard Worker # 878*053f45beSAndroid Build Coastguard Worker 879*053f45beSAndroid Build Coastguard Worker # client in prefix 880*053f45beSAndroid Build Coastguard Worker log_start 881*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} & 882*053f45beSAndroid Build Coastguard Worker sleep 1 883*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 884*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: Prefix config" 885*053f45beSAndroid Build Coastguard Worker 886*053f45beSAndroid Build Coastguard Worker # client in prefix, wrong password 887*053f45beSAndroid Build Coastguard Worker log_start 888*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 889*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} & 890*053f45beSAndroid Build Coastguard Worker sleep 1 891*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 892*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Prefix config, client uses wrong password" 893*053f45beSAndroid Build Coastguard Worker 894*053f45beSAndroid Build Coastguard Worker # client outside of prefix 895*053f45beSAndroid Build Coastguard Worker log_start 896*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout due to MD5 mismatch" 897*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} & 898*053f45beSAndroid Build Coastguard Worker sleep 1 899*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW} 900*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Prefix config, client address not in configured prefix" 901*053f45beSAndroid Build Coastguard Worker} 902*053f45beSAndroid Build Coastguard Worker 903*053f45beSAndroid Build Coastguard Worker# 904*053f45beSAndroid Build Coastguard Worker# MD5 tests with VRF 905*053f45beSAndroid Build Coastguard Worker# 906*053f45beSAndroid Build Coastguard Workeripv4_tcp_md5() 907*053f45beSAndroid Build Coastguard Worker{ 908*053f45beSAndroid Build Coastguard Worker # 909*053f45beSAndroid Build Coastguard Worker # single address 910*053f45beSAndroid Build Coastguard Worker # 911*053f45beSAndroid Build Coastguard Worker 912*053f45beSAndroid Build Coastguard Worker # basic use case 913*053f45beSAndroid Build Coastguard Worker log_start 914*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 915*053f45beSAndroid Build Coastguard Worker sleep 1 916*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 917*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Single address config" 918*053f45beSAndroid Build Coastguard Worker 919*053f45beSAndroid Build Coastguard Worker # client sends MD5, server not configured 920*053f45beSAndroid Build Coastguard Worker log_start 921*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since server does not have MD5 auth" 922*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} & 923*053f45beSAndroid Build Coastguard Worker sleep 1 924*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 925*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Server no config, client uses password" 926*053f45beSAndroid Build Coastguard Worker 927*053f45beSAndroid Build Coastguard Worker # wrong password 928*053f45beSAndroid Build Coastguard Worker log_start 929*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 930*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 931*053f45beSAndroid Build Coastguard Worker sleep 1 932*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 933*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Client uses wrong password" 934*053f45beSAndroid Build Coastguard Worker 935*053f45beSAndroid Build Coastguard Worker # client from different address 936*053f45beSAndroid Build Coastguard Worker log_start 937*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since server config differs from client" 938*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP} & 939*053f45beSAndroid Build Coastguard Worker sleep 1 940*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 941*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Client address does not match address configured with password" 942*053f45beSAndroid Build Coastguard Worker 943*053f45beSAndroid Build Coastguard Worker # 944*053f45beSAndroid Build Coastguard Worker # MD5 extension - prefix length 945*053f45beSAndroid Build Coastguard Worker # 946*053f45beSAndroid Build Coastguard Worker 947*053f45beSAndroid Build Coastguard Worker # client in prefix 948*053f45beSAndroid Build Coastguard Worker log_start 949*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 950*053f45beSAndroid Build Coastguard Worker sleep 1 951*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 952*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Prefix config" 953*053f45beSAndroid Build Coastguard Worker 954*053f45beSAndroid Build Coastguard Worker # client in prefix, wrong password 955*053f45beSAndroid Build Coastguard Worker log_start 956*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 957*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 958*053f45beSAndroid Build Coastguard Worker sleep 1 959*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 960*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password" 961*053f45beSAndroid Build Coastguard Worker 962*053f45beSAndroid Build Coastguard Worker # client outside of prefix 963*053f45beSAndroid Build Coastguard Worker log_start 964*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client address is outside of prefix" 965*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 966*053f45beSAndroid Build Coastguard Worker sleep 1 967*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW} 968*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix" 969*053f45beSAndroid Build Coastguard Worker 970*053f45beSAndroid Build Coastguard Worker # 971*053f45beSAndroid Build Coastguard Worker # duplicate config between default VRF and a VRF 972*053f45beSAndroid Build Coastguard Worker # 973*053f45beSAndroid Build Coastguard Worker 974*053f45beSAndroid Build Coastguard Worker log_start 975*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 976*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 977*053f45beSAndroid Build Coastguard Worker sleep 1 978*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 979*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF" 980*053f45beSAndroid Build Coastguard Worker 981*053f45beSAndroid Build Coastguard Worker log_start 982*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 983*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 984*053f45beSAndroid Build Coastguard Worker sleep 1 985*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 986*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF" 987*053f45beSAndroid Build Coastguard Worker 988*053f45beSAndroid Build Coastguard Worker log_start 989*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in default VRF uses VRF password" 990*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 991*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 992*053f45beSAndroid Build Coastguard Worker sleep 1 993*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW} 994*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw" 995*053f45beSAndroid Build Coastguard Worker 996*053f45beSAndroid Build Coastguard Worker log_start 997*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in VRF uses default VRF password" 998*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} & 999*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} & 1000*053f45beSAndroid Build Coastguard Worker sleep 1 1001*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 1002*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw" 1003*053f45beSAndroid Build Coastguard Worker 1004*053f45beSAndroid Build Coastguard Worker log_start 1005*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 1006*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 1007*053f45beSAndroid Build Coastguard Worker sleep 1 1008*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 1009*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF" 1010*053f45beSAndroid Build Coastguard Worker 1011*053f45beSAndroid Build Coastguard Worker log_start 1012*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 1013*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 1014*053f45beSAndroid Build Coastguard Worker sleep 1 1015*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 1016*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF" 1017*053f45beSAndroid Build Coastguard Worker 1018*053f45beSAndroid Build Coastguard Worker log_start 1019*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in default VRF uses VRF password" 1020*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 1021*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 1022*053f45beSAndroid Build Coastguard Worker sleep 1 1023*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW} 1024*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw" 1025*053f45beSAndroid Build Coastguard Worker 1026*053f45beSAndroid Build Coastguard Worker log_start 1027*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in VRF uses default VRF password" 1028*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} & 1029*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} & 1030*053f45beSAndroid Build Coastguard Worker sleep 1 1031*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW} 1032*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw" 1033*053f45beSAndroid Build Coastguard Worker 1034*053f45beSAndroid Build Coastguard Worker # 1035*053f45beSAndroid Build Coastguard Worker # negative tests 1036*053f45beSAndroid Build Coastguard Worker # 1037*053f45beSAndroid Build Coastguard Worker log_start 1038*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP} 1039*053f45beSAndroid Build Coastguard Worker log_test $? 1 "MD5: VRF: Device must be a VRF - single address" 1040*053f45beSAndroid Build Coastguard Worker 1041*053f45beSAndroid Build Coastguard Worker log_start 1042*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET} 1043*053f45beSAndroid Build Coastguard Worker log_test $? 1 "MD5: VRF: Device must be a VRF - prefix" 1044*053f45beSAndroid Build Coastguard Worker 1045*053f45beSAndroid Build Coastguard Worker test_ipv4_md5_vrf__vrf_server__no_bind_ifindex 1046*053f45beSAndroid Build Coastguard Worker test_ipv4_md5_vrf__global_server__bind_ifindex0 1047*053f45beSAndroid Build Coastguard Worker} 1048*053f45beSAndroid Build Coastguard Worker 1049*053f45beSAndroid Build Coastguard Workertest_ipv4_md5_vrf__vrf_server__no_bind_ifindex() 1050*053f45beSAndroid Build Coastguard Worker{ 1051*053f45beSAndroid Build Coastguard Worker log_start 1052*053f45beSAndroid Build Coastguard Worker show_hint "Simulates applications using VRF without TCP_MD5SIG_FLAG_IFINDEX" 1053*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex & 1054*053f45beSAndroid Build Coastguard Worker sleep 1 1055*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 1056*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: VRF-bound server, unbound key accepts connection" 1057*053f45beSAndroid Build Coastguard Worker 1058*053f45beSAndroid Build Coastguard Worker log_start 1059*053f45beSAndroid Build Coastguard Worker show_hint "Binding both the socket and the key is not required but it works" 1060*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex & 1061*053f45beSAndroid Build Coastguard Worker sleep 1 1062*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 1063*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: VRF-bound server, bound key accepts connection" 1064*053f45beSAndroid Build Coastguard Worker} 1065*053f45beSAndroid Build Coastguard Worker 1066*053f45beSAndroid Build Coastguard Workertest_ipv4_md5_vrf__global_server__bind_ifindex0() 1067*053f45beSAndroid Build Coastguard Worker{ 1068*053f45beSAndroid Build Coastguard Worker # This particular test needs tcp_l3mdev_accept=1 for Global server to accept VRF connections 1069*053f45beSAndroid Build Coastguard Worker local old_tcp_l3mdev_accept 1070*053f45beSAndroid Build Coastguard Worker old_tcp_l3mdev_accept=$(get_sysctl net.ipv4.tcp_l3mdev_accept) 1071*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=1 1072*053f45beSAndroid Build Coastguard Worker 1073*053f45beSAndroid Build Coastguard Worker log_start 1074*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex & 1075*053f45beSAndroid Build Coastguard Worker sleep 1 1076*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 1077*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Global server, Key bound to ifindex=0 rejects VRF connection" 1078*053f45beSAndroid Build Coastguard Worker 1079*053f45beSAndroid Build Coastguard Worker log_start 1080*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex & 1081*053f45beSAndroid Build Coastguard Worker sleep 1 1082*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW} 1083*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Global server, key bound to ifindex=0 accepts non-VRF connection" 1084*053f45beSAndroid Build Coastguard Worker log_start 1085*053f45beSAndroid Build Coastguard Worker 1086*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex & 1087*053f45beSAndroid Build Coastguard Worker sleep 1 1088*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW} 1089*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts VRF connection" 1090*053f45beSAndroid Build Coastguard Worker 1091*053f45beSAndroid Build Coastguard Worker log_start 1092*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex & 1093*053f45beSAndroid Build Coastguard Worker sleep 1 1094*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW} 1095*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts non-VRF connection" 1096*053f45beSAndroid Build Coastguard Worker 1097*053f45beSAndroid Build Coastguard Worker # restore value 1098*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept="$old_tcp_l3mdev_accept" 1099*053f45beSAndroid Build Coastguard Worker} 1100*053f45beSAndroid Build Coastguard Worker 1101*053f45beSAndroid Build Coastguard Workeripv4_tcp_novrf() 1102*053f45beSAndroid Build Coastguard Worker{ 1103*053f45beSAndroid Build Coastguard Worker local a 1104*053f45beSAndroid Build Coastguard Worker 1105*053f45beSAndroid Build Coastguard Worker # 1106*053f45beSAndroid Build Coastguard Worker # server tests 1107*053f45beSAndroid Build Coastguard Worker # 1108*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 1109*053f45beSAndroid Build Coastguard Worker do 1110*053f45beSAndroid Build Coastguard Worker log_start 1111*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 1112*053f45beSAndroid Build Coastguard Worker sleep 1 1113*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1114*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 1115*053f45beSAndroid Build Coastguard Worker done 1116*053f45beSAndroid Build Coastguard Worker 1117*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1118*053f45beSAndroid Build Coastguard Worker log_start 1119*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} & 1120*053f45beSAndroid Build Coastguard Worker sleep 1 1121*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1122*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 1123*053f45beSAndroid Build Coastguard Worker 1124*053f45beSAndroid Build Coastguard Worker # verify TCP reset sent and received 1125*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 1126*053f45beSAndroid Build Coastguard Worker do 1127*053f45beSAndroid Build Coastguard Worker log_start 1128*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since there is no server" 1129*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1130*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 1131*053f45beSAndroid Build Coastguard Worker done 1132*053f45beSAndroid Build Coastguard Worker 1133*053f45beSAndroid Build Coastguard Worker # 1134*053f45beSAndroid Build Coastguard Worker # client 1135*053f45beSAndroid Build Coastguard Worker # 1136*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP} ${NSB_LO_IP} 1137*053f45beSAndroid Build Coastguard Worker do 1138*053f45beSAndroid Build Coastguard Worker log_start 1139*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -s & 1140*053f45beSAndroid Build Coastguard Worker sleep 1 1141*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -0 ${NSA_IP} 1142*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client" 1143*053f45beSAndroid Build Coastguard Worker 1144*053f45beSAndroid Build Coastguard Worker log_start 1145*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -s & 1146*053f45beSAndroid Build Coastguard Worker sleep 1 1147*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} 1148*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind" 1149*053f45beSAndroid Build Coastguard Worker 1150*053f45beSAndroid Build Coastguard Worker log_start 1151*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1152*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} 1153*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, unbound client" 1154*053f45beSAndroid Build Coastguard Worker 1155*053f45beSAndroid Build Coastguard Worker log_start 1156*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1157*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} 1158*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client" 1159*053f45beSAndroid Build Coastguard Worker done 1160*053f45beSAndroid Build Coastguard Worker 1161*053f45beSAndroid Build Coastguard Worker # 1162*053f45beSAndroid Build Coastguard Worker # local address tests 1163*053f45beSAndroid Build Coastguard Worker # 1164*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1 1165*053f45beSAndroid Build Coastguard Worker do 1166*053f45beSAndroid Build Coastguard Worker log_start 1167*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 1168*053f45beSAndroid Build Coastguard Worker sleep 1 1169*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -0 ${a} -1 ${a} 1170*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, local connection" 1171*053f45beSAndroid Build Coastguard Worker done 1172*053f45beSAndroid Build Coastguard Worker 1173*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1174*053f45beSAndroid Build Coastguard Worker log_start 1175*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} & 1176*053f45beSAndroid Build Coastguard Worker sleep 1 1177*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -0 ${a} 1178*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, unbound client, local connection" 1179*053f45beSAndroid Build Coastguard Worker 1180*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP} 127.0.0.1 1181*053f45beSAndroid Build Coastguard Worker do 1182*053f45beSAndroid Build Coastguard Worker log_start 1183*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope" 1184*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} & 1185*053f45beSAndroid Build Coastguard Worker sleep 1 1186*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} 1187*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Device server, unbound client, local connection" 1188*053f45beSAndroid Build Coastguard Worker done 1189*053f45beSAndroid Build Coastguard Worker 1190*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1191*053f45beSAndroid Build Coastguard Worker log_start 1192*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 1193*053f45beSAndroid Build Coastguard Worker sleep 1 1194*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -0 ${a} -d ${NSA_DEV} 1195*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client, local connection" 1196*053f45beSAndroid Build Coastguard Worker 1197*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP} 127.0.0.1 1198*053f45beSAndroid Build Coastguard Worker do 1199*053f45beSAndroid Build Coastguard Worker log_start 1200*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope" 1201*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 1202*053f45beSAndroid Build Coastguard Worker sleep 1 1203*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} 1204*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client, local connection" 1205*053f45beSAndroid Build Coastguard Worker done 1206*053f45beSAndroid Build Coastguard Worker 1207*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1208*053f45beSAndroid Build Coastguard Worker log_start 1209*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1210*053f45beSAndroid Build Coastguard Worker sleep 1 1211*053f45beSAndroid Build Coastguard Worker run_cmd nettest -d ${NSA_DEV} -r ${a} -0 ${a} 1212*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local connection" 1213*053f45beSAndroid Build Coastguard Worker 1214*053f45beSAndroid Build Coastguard Worker log_start 1215*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1216*053f45beSAndroid Build Coastguard Worker run_cmd nettest -d ${NSA_DEV} -r ${a} 1217*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client, local conn" 1218*053f45beSAndroid Build Coastguard Worker 1219*053f45beSAndroid Build Coastguard Worker ipv4_tcp_md5_novrf 1220*053f45beSAndroid Build Coastguard Worker} 1221*053f45beSAndroid Build Coastguard Worker 1222*053f45beSAndroid Build Coastguard Workeripv4_tcp_vrf() 1223*053f45beSAndroid Build Coastguard Worker{ 1224*053f45beSAndroid Build Coastguard Worker local a 1225*053f45beSAndroid Build Coastguard Worker 1226*053f45beSAndroid Build Coastguard Worker # disable global server 1227*053f45beSAndroid Build Coastguard Worker log_subsection "Global server disabled" 1228*053f45beSAndroid Build Coastguard Worker 1229*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=0 1230*053f45beSAndroid Build Coastguard Worker 1231*053f45beSAndroid Build Coastguard Worker # 1232*053f45beSAndroid Build Coastguard Worker # server tests 1233*053f45beSAndroid Build Coastguard Worker # 1234*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1235*053f45beSAndroid Build Coastguard Worker do 1236*053f45beSAndroid Build Coastguard Worker log_start 1237*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server with VRF is disabled" 1238*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 1239*053f45beSAndroid Build Coastguard Worker sleep 1 1240*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1241*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server" 1242*053f45beSAndroid Build Coastguard Worker 1243*053f45beSAndroid Build Coastguard Worker log_start 1244*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1245*053f45beSAndroid Build Coastguard Worker sleep 1 1246*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1247*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 1248*053f45beSAndroid Build Coastguard Worker 1249*053f45beSAndroid Build Coastguard Worker log_start 1250*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1251*053f45beSAndroid Build Coastguard Worker sleep 1 1252*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1253*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 1254*053f45beSAndroid Build Coastguard Worker 1255*053f45beSAndroid Build Coastguard Worker # verify TCP reset received 1256*053f45beSAndroid Build Coastguard Worker log_start 1257*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since there is no server" 1258*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1259*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 1260*053f45beSAndroid Build Coastguard Worker done 1261*053f45beSAndroid Build Coastguard Worker 1262*053f45beSAndroid Build Coastguard Worker # local address tests 1263*053f45beSAndroid Build Coastguard Worker # (${VRF_IP} and 127.0.0.1 both timeout) 1264*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1265*053f45beSAndroid Build Coastguard Worker log_start 1266*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server with VRF is disabled" 1267*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 1268*053f45beSAndroid Build Coastguard Worker sleep 1 1269*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} 1270*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, local connection" 1271*053f45beSAndroid Build Coastguard Worker 1272*053f45beSAndroid Build Coastguard Worker # run MD5 tests 1273*053f45beSAndroid Build Coastguard Worker setup_vrf_dup 1274*053f45beSAndroid Build Coastguard Worker ipv4_tcp_md5 1275*053f45beSAndroid Build Coastguard Worker cleanup_vrf_dup 1276*053f45beSAndroid Build Coastguard Worker 1277*053f45beSAndroid Build Coastguard Worker # 1278*053f45beSAndroid Build Coastguard Worker # enable VRF global server 1279*053f45beSAndroid Build Coastguard Worker # 1280*053f45beSAndroid Build Coastguard Worker log_subsection "VRF Global server enabled" 1281*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=1 1282*053f45beSAndroid Build Coastguard Worker 1283*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1284*053f45beSAndroid Build Coastguard Worker do 1285*053f45beSAndroid Build Coastguard Worker log_start 1286*053f45beSAndroid Build Coastguard Worker show_hint "client socket should be bound to VRF" 1287*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -3 ${VRF} & 1288*053f45beSAndroid Build Coastguard Worker sleep 1 1289*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1290*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 1291*053f45beSAndroid Build Coastguard Worker 1292*053f45beSAndroid Build Coastguard Worker log_start 1293*053f45beSAndroid Build Coastguard Worker show_hint "client socket should be bound to VRF" 1294*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1295*053f45beSAndroid Build Coastguard Worker sleep 1 1296*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1297*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 1298*053f45beSAndroid Build Coastguard Worker 1299*053f45beSAndroid Build Coastguard Worker # verify TCP reset received 1300*053f45beSAndroid Build Coastguard Worker log_start 1301*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1302*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1303*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 1304*053f45beSAndroid Build Coastguard Worker done 1305*053f45beSAndroid Build Coastguard Worker 1306*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1307*053f45beSAndroid Build Coastguard Worker log_start 1308*053f45beSAndroid Build Coastguard Worker show_hint "client socket should be bound to device" 1309*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1310*053f45beSAndroid Build Coastguard Worker sleep 1 1311*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 1312*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 1313*053f45beSAndroid Build Coastguard Worker 1314*053f45beSAndroid Build Coastguard Worker # local address tests 1315*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1316*053f45beSAndroid Build Coastguard Worker do 1317*053f45beSAndroid Build Coastguard Worker log_start 1318*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since client is not bound to VRF" 1319*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} & 1320*053f45beSAndroid Build Coastguard Worker sleep 1 1321*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} 1322*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, local connection" 1323*053f45beSAndroid Build Coastguard Worker done 1324*053f45beSAndroid Build Coastguard Worker 1325*053f45beSAndroid Build Coastguard Worker # 1326*053f45beSAndroid Build Coastguard Worker # client 1327*053f45beSAndroid Build Coastguard Worker # 1328*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP} ${NSB_LO_IP} 1329*053f45beSAndroid Build Coastguard Worker do 1330*053f45beSAndroid Build Coastguard Worker log_start 1331*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -s & 1332*053f45beSAndroid Build Coastguard Worker sleep 1 1333*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${VRF} 1334*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, VRF bind" 1335*053f45beSAndroid Build Coastguard Worker 1336*053f45beSAndroid Build Coastguard Worker log_start 1337*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -s & 1338*053f45beSAndroid Build Coastguard Worker sleep 1 1339*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} 1340*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind" 1341*053f45beSAndroid Build Coastguard Worker 1342*053f45beSAndroid Build Coastguard Worker log_start 1343*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1344*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${VRF} 1345*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, VRF client" 1346*053f45beSAndroid Build Coastguard Worker 1347*053f45beSAndroid Build Coastguard Worker log_start 1348*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1349*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} 1350*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client" 1351*053f45beSAndroid Build Coastguard Worker done 1352*053f45beSAndroid Build Coastguard Worker 1353*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 127.0.0.1 1354*053f45beSAndroid Build Coastguard Worker do 1355*053f45beSAndroid Build Coastguard Worker log_start 1356*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1357*053f45beSAndroid Build Coastguard Worker sleep 1 1358*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${VRF} -0 ${a} 1359*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local connection" 1360*053f45beSAndroid Build Coastguard Worker done 1361*053f45beSAndroid Build Coastguard Worker 1362*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1363*053f45beSAndroid Build Coastguard Worker log_start 1364*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} -3 ${VRF} & 1365*053f45beSAndroid Build Coastguard Worker sleep 1 1366*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a} 1367*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, device client, local connection" 1368*053f45beSAndroid Build Coastguard Worker 1369*053f45beSAndroid Build Coastguard Worker log_start 1370*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'No route to host' since client is out of VRF scope" 1371*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${VRF} & 1372*053f45beSAndroid Build Coastguard Worker sleep 1 1373*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} 1374*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "VRF server, unbound client, local connection" 1375*053f45beSAndroid Build Coastguard Worker 1376*053f45beSAndroid Build Coastguard Worker log_start 1377*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1378*053f45beSAndroid Build Coastguard Worker sleep 1 1379*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${VRF} -0 ${a} 1380*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, VRF client, local connection" 1381*053f45beSAndroid Build Coastguard Worker 1382*053f45beSAndroid Build Coastguard Worker log_start 1383*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1384*053f45beSAndroid Build Coastguard Worker sleep 1 1385*053f45beSAndroid Build Coastguard Worker run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a} 1386*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local connection" 1387*053f45beSAndroid Build Coastguard Worker} 1388*053f45beSAndroid Build Coastguard Worker 1389*053f45beSAndroid Build Coastguard Workeripv4_tcp() 1390*053f45beSAndroid Build Coastguard Worker{ 1391*053f45beSAndroid Build Coastguard Worker log_section "IPv4/TCP" 1392*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 1393*053f45beSAndroid Build Coastguard Worker setup 1394*053f45beSAndroid Build Coastguard Worker 1395*053f45beSAndroid Build Coastguard Worker # tcp_l3mdev_accept should have no affect without VRF; 1396*053f45beSAndroid Build Coastguard Worker # run tests with it enabled and disabled to verify 1397*053f45beSAndroid Build Coastguard Worker log_subsection "tcp_l3mdev_accept disabled" 1398*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=0 1399*053f45beSAndroid Build Coastguard Worker ipv4_tcp_novrf 1400*053f45beSAndroid Build Coastguard Worker log_subsection "tcp_l3mdev_accept enabled" 1401*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=1 1402*053f45beSAndroid Build Coastguard Worker ipv4_tcp_novrf 1403*053f45beSAndroid Build Coastguard Worker 1404*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 1405*053f45beSAndroid Build Coastguard Worker setup "yes" 1406*053f45beSAndroid Build Coastguard Worker ipv4_tcp_vrf 1407*053f45beSAndroid Build Coastguard Worker} 1408*053f45beSAndroid Build Coastguard Worker 1409*053f45beSAndroid Build Coastguard Worker################################################################################ 1410*053f45beSAndroid Build Coastguard Worker# IPv4 UDP 1411*053f45beSAndroid Build Coastguard Worker 1412*053f45beSAndroid Build Coastguard Workeripv4_udp_novrf() 1413*053f45beSAndroid Build Coastguard Worker{ 1414*053f45beSAndroid Build Coastguard Worker local a 1415*053f45beSAndroid Build Coastguard Worker 1416*053f45beSAndroid Build Coastguard Worker # 1417*053f45beSAndroid Build Coastguard Worker # server tests 1418*053f45beSAndroid Build Coastguard Worker # 1419*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 1420*053f45beSAndroid Build Coastguard Worker do 1421*053f45beSAndroid Build Coastguard Worker log_start 1422*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s -3 ${NSA_DEV} & 1423*053f45beSAndroid Build Coastguard Worker sleep 1 1424*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1425*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 1426*053f45beSAndroid Build Coastguard Worker 1427*053f45beSAndroid Build Coastguard Worker log_start 1428*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since there is no server" 1429*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1430*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 1431*053f45beSAndroid Build Coastguard Worker done 1432*053f45beSAndroid Build Coastguard Worker 1433*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1434*053f45beSAndroid Build Coastguard Worker log_start 1435*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 1436*053f45beSAndroid Build Coastguard Worker sleep 1 1437*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1438*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 1439*053f45beSAndroid Build Coastguard Worker 1440*053f45beSAndroid Build Coastguard Worker # 1441*053f45beSAndroid Build Coastguard Worker # client 1442*053f45beSAndroid Build Coastguard Worker # 1443*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP} ${NSB_LO_IP} 1444*053f45beSAndroid Build Coastguard Worker do 1445*053f45beSAndroid Build Coastguard Worker log_start 1446*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1447*053f45beSAndroid Build Coastguard Worker sleep 1 1448*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -0 ${NSA_IP} 1449*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client" 1450*053f45beSAndroid Build Coastguard Worker 1451*053f45beSAndroid Build Coastguard Worker log_start 1452*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1453*053f45beSAndroid Build Coastguard Worker sleep 1 1454*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP} 1455*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind" 1456*053f45beSAndroid Build Coastguard Worker 1457*053f45beSAndroid Build Coastguard Worker log_start 1458*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1459*053f45beSAndroid Build Coastguard Worker sleep 1 1460*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP} 1461*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device send via cmsg" 1462*053f45beSAndroid Build Coastguard Worker 1463*053f45beSAndroid Build Coastguard Worker log_start 1464*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1465*053f45beSAndroid Build Coastguard Worker sleep 1 1466*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP} 1467*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF" 1468*053f45beSAndroid Build Coastguard Worker 1469*053f45beSAndroid Build Coastguard Worker log_start 1470*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1471*053f45beSAndroid Build Coastguard Worker sleep 1 1472*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP} -U 1473*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF, with connect()" 1474*053f45beSAndroid Build Coastguard Worker 1475*053f45beSAndroid Build Coastguard Worker 1476*053f45beSAndroid Build Coastguard Worker log_start 1477*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1478*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} 1479*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, unbound client" 1480*053f45beSAndroid Build Coastguard Worker 1481*053f45beSAndroid Build Coastguard Worker log_start 1482*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1483*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} 1484*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client" 1485*053f45beSAndroid Build Coastguard Worker done 1486*053f45beSAndroid Build Coastguard Worker 1487*053f45beSAndroid Build Coastguard Worker # 1488*053f45beSAndroid Build Coastguard Worker # local address tests 1489*053f45beSAndroid Build Coastguard Worker # 1490*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1 1491*053f45beSAndroid Build Coastguard Worker do 1492*053f45beSAndroid Build Coastguard Worker log_start 1493*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1494*053f45beSAndroid Build Coastguard Worker sleep 1 1495*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -0 ${a} -1 ${a} 1496*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, local connection" 1497*053f45beSAndroid Build Coastguard Worker done 1498*053f45beSAndroid Build Coastguard Worker 1499*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1500*053f45beSAndroid Build Coastguard Worker log_start 1501*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1502*053f45beSAndroid Build Coastguard Worker sleep 1 1503*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} 1504*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, unbound client, local connection" 1505*053f45beSAndroid Build Coastguard Worker 1506*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP} 127.0.0.1 1507*053f45beSAndroid Build Coastguard Worker do 1508*053f45beSAndroid Build Coastguard Worker log_start 1509*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since address is out of device scope" 1510*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${NSA_DEV} & 1511*053f45beSAndroid Build Coastguard Worker sleep 1 1512*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} 1513*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Device server, unbound client, local connection" 1514*053f45beSAndroid Build Coastguard Worker done 1515*053f45beSAndroid Build Coastguard Worker 1516*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1517*053f45beSAndroid Build Coastguard Worker log_start 1518*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D & 1519*053f45beSAndroid Build Coastguard Worker sleep 1 1520*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1521*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client, local connection" 1522*053f45beSAndroid Build Coastguard Worker 1523*053f45beSAndroid Build Coastguard Worker log_start 1524*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D & 1525*053f45beSAndroid Build Coastguard Worker sleep 1 1526*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -C -r ${a} 1527*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection" 1528*053f45beSAndroid Build Coastguard Worker 1529*053f45beSAndroid Build Coastguard Worker log_start 1530*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D & 1531*053f45beSAndroid Build Coastguard Worker sleep 1 1532*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -S -r ${a} 1533*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection" 1534*053f45beSAndroid Build Coastguard Worker 1535*053f45beSAndroid Build Coastguard Worker log_start 1536*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D & 1537*053f45beSAndroid Build Coastguard Worker sleep 1 1538*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -S -r ${a} -U 1539*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection, with connect()" 1540*053f45beSAndroid Build Coastguard Worker 1541*053f45beSAndroid Build Coastguard Worker 1542*053f45beSAndroid Build Coastguard Worker # IPv4 with device bind has really weird behavior - it overrides the 1543*053f45beSAndroid Build Coastguard Worker # fib lookup, generates an rtable and tries to send the packet. This 1544*053f45beSAndroid Build Coastguard Worker # causes failures for local traffic at different places 1545*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP} 127.0.0.1 1546*053f45beSAndroid Build Coastguard Worker do 1547*053f45beSAndroid Build Coastguard Worker log_start 1548*053f45beSAndroid Build Coastguard Worker show_hint "Should fail since addresses on loopback are out of device scope" 1549*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1550*053f45beSAndroid Build Coastguard Worker sleep 1 1551*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} 1552*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "Global server, device client, local connection" 1553*053f45beSAndroid Build Coastguard Worker 1554*053f45beSAndroid Build Coastguard Worker log_start 1555*053f45beSAndroid Build Coastguard Worker show_hint "Should fail since addresses on loopback are out of device scope" 1556*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1557*053f45beSAndroid Build Coastguard Worker sleep 1 1558*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C 1559*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection" 1560*053f45beSAndroid Build Coastguard Worker 1561*053f45beSAndroid Build Coastguard Worker log_start 1562*053f45beSAndroid Build Coastguard Worker show_hint "Should fail since addresses on loopback are out of device scope" 1563*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1564*053f45beSAndroid Build Coastguard Worker sleep 1 1565*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S 1566*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection" 1567*053f45beSAndroid Build Coastguard Worker 1568*053f45beSAndroid Build Coastguard Worker log_start 1569*053f45beSAndroid Build Coastguard Worker show_hint "Should fail since addresses on loopback are out of device scope" 1570*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1571*053f45beSAndroid Build Coastguard Worker sleep 1 1572*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -U 1573*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection, with connect()" 1574*053f45beSAndroid Build Coastguard Worker 1575*053f45beSAndroid Build Coastguard Worker 1576*053f45beSAndroid Build Coastguard Worker done 1577*053f45beSAndroid Build Coastguard Worker 1578*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1579*053f45beSAndroid Build Coastguard Worker log_start 1580*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s -I ${NSA_DEV} -3 ${NSA_DEV} & 1581*053f45beSAndroid Build Coastguard Worker sleep 1 1582*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} -0 ${a} 1583*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local conn" 1584*053f45beSAndroid Build Coastguard Worker 1585*053f45beSAndroid Build Coastguard Worker log_start 1586*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1587*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "No server, device client, local conn" 1588*053f45beSAndroid Build Coastguard Worker} 1589*053f45beSAndroid Build Coastguard Worker 1590*053f45beSAndroid Build Coastguard Workeripv4_udp_vrf() 1591*053f45beSAndroid Build Coastguard Worker{ 1592*053f45beSAndroid Build Coastguard Worker local a 1593*053f45beSAndroid Build Coastguard Worker 1594*053f45beSAndroid Build Coastguard Worker # disable global server 1595*053f45beSAndroid Build Coastguard Worker log_subsection "Global server disabled" 1596*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=0 1597*053f45beSAndroid Build Coastguard Worker 1598*053f45beSAndroid Build Coastguard Worker # 1599*053f45beSAndroid Build Coastguard Worker # server tests 1600*053f45beSAndroid Build Coastguard Worker # 1601*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1602*053f45beSAndroid Build Coastguard Worker do 1603*053f45beSAndroid Build Coastguard Worker log_start 1604*053f45beSAndroid Build Coastguard Worker show_hint "Fails because ingress is in a VRF and global server is disabled" 1605*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1606*053f45beSAndroid Build Coastguard Worker sleep 1 1607*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1608*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server" 1609*053f45beSAndroid Build Coastguard Worker 1610*053f45beSAndroid Build Coastguard Worker log_start 1611*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} & 1612*053f45beSAndroid Build Coastguard Worker sleep 1 1613*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1614*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 1615*053f45beSAndroid Build Coastguard Worker 1616*053f45beSAndroid Build Coastguard Worker log_start 1617*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 1618*053f45beSAndroid Build Coastguard Worker sleep 1 1619*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1620*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server" 1621*053f45beSAndroid Build Coastguard Worker 1622*053f45beSAndroid Build Coastguard Worker log_start 1623*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since there is no server" 1624*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1625*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 1626*053f45beSAndroid Build Coastguard Worker 1627*053f45beSAndroid Build Coastguard Worker log_start 1628*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server is out of scope" 1629*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s & 1630*053f45beSAndroid Build Coastguard Worker sleep 1 1631*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1632*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, VRF client, local connection" 1633*053f45beSAndroid Build Coastguard Worker done 1634*053f45beSAndroid Build Coastguard Worker 1635*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1636*053f45beSAndroid Build Coastguard Worker log_start 1637*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1638*053f45beSAndroid Build Coastguard Worker sleep 1 1639*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1640*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 1641*053f45beSAndroid Build Coastguard Worker 1642*053f45beSAndroid Build Coastguard Worker log_start 1643*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1644*053f45beSAndroid Build Coastguard Worker sleep 1 1645*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1646*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, enslaved device client, local connection" 1647*053f45beSAndroid Build Coastguard Worker 1648*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1649*053f45beSAndroid Build Coastguard Worker log_start 1650*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1651*053f45beSAndroid Build Coastguard Worker sleep 1 1652*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1653*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn" 1654*053f45beSAndroid Build Coastguard Worker 1655*053f45beSAndroid Build Coastguard Worker log_start 1656*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1657*053f45beSAndroid Build Coastguard Worker sleep 1 1658*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1659*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn" 1660*053f45beSAndroid Build Coastguard Worker 1661*053f45beSAndroid Build Coastguard Worker # enable global server 1662*053f45beSAndroid Build Coastguard Worker log_subsection "Global server enabled" 1663*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=1 1664*053f45beSAndroid Build Coastguard Worker 1665*053f45beSAndroid Build Coastguard Worker # 1666*053f45beSAndroid Build Coastguard Worker # server tests 1667*053f45beSAndroid Build Coastguard Worker # 1668*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1669*053f45beSAndroid Build Coastguard Worker do 1670*053f45beSAndroid Build Coastguard Worker log_start 1671*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s -3 ${NSA_DEV} & 1672*053f45beSAndroid Build Coastguard Worker sleep 1 1673*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1674*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 1675*053f45beSAndroid Build Coastguard Worker 1676*053f45beSAndroid Build Coastguard Worker log_start 1677*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} & 1678*053f45beSAndroid Build Coastguard Worker sleep 1 1679*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1680*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 1681*053f45beSAndroid Build Coastguard Worker 1682*053f45beSAndroid Build Coastguard Worker log_start 1683*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 1684*053f45beSAndroid Build Coastguard Worker sleep 1 1685*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1686*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server" 1687*053f45beSAndroid Build Coastguard Worker 1688*053f45beSAndroid Build Coastguard Worker log_start 1689*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1690*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -r ${a} 1691*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 1692*053f45beSAndroid Build Coastguard Worker done 1693*053f45beSAndroid Build Coastguard Worker 1694*053f45beSAndroid Build Coastguard Worker # 1695*053f45beSAndroid Build Coastguard Worker # client tests 1696*053f45beSAndroid Build Coastguard Worker # 1697*053f45beSAndroid Build Coastguard Worker log_start 1698*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1699*053f45beSAndroid Build Coastguard Worker sleep 1 1700*053f45beSAndroid Build Coastguard Worker run_cmd nettest -d ${VRF} -D -r ${NSB_IP} -1 ${NSA_IP} 1701*053f45beSAndroid Build Coastguard Worker log_test $? 0 "VRF client" 1702*053f45beSAndroid Build Coastguard Worker 1703*053f45beSAndroid Build Coastguard Worker log_start 1704*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -D -s & 1705*053f45beSAndroid Build Coastguard Worker sleep 1 1706*053f45beSAndroid Build Coastguard Worker run_cmd nettest -d ${NSA_DEV} -D -r ${NSB_IP} -1 ${NSA_IP} 1707*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Enslaved device client" 1708*053f45beSAndroid Build Coastguard Worker 1709*053f45beSAndroid Build Coastguard Worker # negative test - should fail 1710*053f45beSAndroid Build Coastguard Worker log_start 1711*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1712*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${NSB_IP} 1713*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, VRF client" 1714*053f45beSAndroid Build Coastguard Worker 1715*053f45beSAndroid Build Coastguard Worker log_start 1716*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1717*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${NSB_IP} 1718*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, enslaved device client" 1719*053f45beSAndroid Build Coastguard Worker 1720*053f45beSAndroid Build Coastguard Worker # 1721*053f45beSAndroid Build Coastguard Worker # local address tests 1722*053f45beSAndroid Build Coastguard Worker # 1723*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1724*053f45beSAndroid Build Coastguard Worker log_start 1725*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s -3 ${NSA_DEV} & 1726*053f45beSAndroid Build Coastguard Worker sleep 1 1727*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1728*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 1729*053f45beSAndroid Build Coastguard Worker 1730*053f45beSAndroid Build Coastguard Worker log_start 1731*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1732*053f45beSAndroid Build Coastguard Worker sleep 1 1733*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1734*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 1735*053f45beSAndroid Build Coastguard Worker 1736*053f45beSAndroid Build Coastguard Worker log_start 1737*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} & 1738*053f45beSAndroid Build Coastguard Worker sleep 1 1739*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1740*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, device client, local conn" 1741*053f45beSAndroid Build Coastguard Worker 1742*053f45beSAndroid Build Coastguard Worker log_start 1743*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1744*053f45beSAndroid Build Coastguard Worker sleep 1 1745*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1746*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn" 1747*053f45beSAndroid Build Coastguard Worker 1748*053f45beSAndroid Build Coastguard Worker log_start 1749*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 1750*053f45beSAndroid Build Coastguard Worker sleep 1 1751*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${NSA_DEV} -r ${a} 1752*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn" 1753*053f45beSAndroid Build Coastguard Worker 1754*053f45beSAndroid Build Coastguard Worker for a in ${VRF_IP} 127.0.0.1 1755*053f45beSAndroid Build Coastguard Worker do 1756*053f45beSAndroid Build Coastguard Worker log_start 1757*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -s -3 ${VRF} & 1758*053f45beSAndroid Build Coastguard Worker sleep 1 1759*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1760*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 1761*053f45beSAndroid Build Coastguard Worker done 1762*053f45beSAndroid Build Coastguard Worker 1763*053f45beSAndroid Build Coastguard Worker for a in ${VRF_IP} 127.0.0.1 1764*053f45beSAndroid Build Coastguard Worker do 1765*053f45beSAndroid Build Coastguard Worker log_start 1766*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -I ${VRF} -3 ${VRF} & 1767*053f45beSAndroid Build Coastguard Worker sleep 1 1768*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1769*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 1770*053f45beSAndroid Build Coastguard Worker done 1771*053f45beSAndroid Build Coastguard Worker 1772*053f45beSAndroid Build Coastguard Worker # negative test - should fail 1773*053f45beSAndroid Build Coastguard Worker # verifies ECONNREFUSED 1774*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 127.0.0.1 1775*053f45beSAndroid Build Coastguard Worker do 1776*053f45beSAndroid Build Coastguard Worker log_start 1777*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 1778*053f45beSAndroid Build Coastguard Worker run_cmd nettest -D -d ${VRF} -r ${a} 1779*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, VRF client, local conn" 1780*053f45beSAndroid Build Coastguard Worker done 1781*053f45beSAndroid Build Coastguard Worker} 1782*053f45beSAndroid Build Coastguard Worker 1783*053f45beSAndroid Build Coastguard Workeripv4_udp() 1784*053f45beSAndroid Build Coastguard Worker{ 1785*053f45beSAndroid Build Coastguard Worker log_section "IPv4/UDP" 1786*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 1787*053f45beSAndroid Build Coastguard Worker 1788*053f45beSAndroid Build Coastguard Worker setup 1789*053f45beSAndroid Build Coastguard Worker 1790*053f45beSAndroid Build Coastguard Worker # udp_l3mdev_accept should have no affect without VRF; 1791*053f45beSAndroid Build Coastguard Worker # run tests with it enabled and disabled to verify 1792*053f45beSAndroid Build Coastguard Worker log_subsection "udp_l3mdev_accept disabled" 1793*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=0 1794*053f45beSAndroid Build Coastguard Worker ipv4_udp_novrf 1795*053f45beSAndroid Build Coastguard Worker log_subsection "udp_l3mdev_accept enabled" 1796*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=1 1797*053f45beSAndroid Build Coastguard Worker ipv4_udp_novrf 1798*053f45beSAndroid Build Coastguard Worker 1799*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 1800*053f45beSAndroid Build Coastguard Worker setup "yes" 1801*053f45beSAndroid Build Coastguard Worker ipv4_udp_vrf 1802*053f45beSAndroid Build Coastguard Worker} 1803*053f45beSAndroid Build Coastguard Worker 1804*053f45beSAndroid Build Coastguard Worker################################################################################ 1805*053f45beSAndroid Build Coastguard Worker# IPv4 address bind 1806*053f45beSAndroid Build Coastguard Worker# 1807*053f45beSAndroid Build Coastguard Worker# verifies ability or inability to bind to an address / device 1808*053f45beSAndroid Build Coastguard Worker 1809*053f45beSAndroid Build Coastguard Workeripv4_addr_bind_novrf() 1810*053f45beSAndroid Build Coastguard Worker{ 1811*053f45beSAndroid Build Coastguard Worker # 1812*053f45beSAndroid Build Coastguard Worker # raw socket 1813*053f45beSAndroid Build Coastguard Worker # 1814*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${NSA_LO_IP} 1815*053f45beSAndroid Build Coastguard Worker do 1816*053f45beSAndroid Build Coastguard Worker log_start 1817*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -P icmp -l ${a} -b 1818*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address" 1819*053f45beSAndroid Build Coastguard Worker 1820*053f45beSAndroid Build Coastguard Worker log_start 1821*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b 1822*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 1823*053f45beSAndroid Build Coastguard Worker done 1824*053f45beSAndroid Build Coastguard Worker 1825*053f45beSAndroid Build Coastguard Worker # 1826*053f45beSAndroid Build Coastguard Worker # tests for nonlocal bind 1827*053f45beSAndroid Build Coastguard Worker # 1828*053f45beSAndroid Build Coastguard Worker a=${NL_IP} 1829*053f45beSAndroid Build Coastguard Worker log_start 1830*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -f -l ${a} -b 1831*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address" 1832*053f45beSAndroid Build Coastguard Worker 1833*053f45beSAndroid Build Coastguard Worker log_start 1834*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -f -l ${a} -b 1835*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address" 1836*053f45beSAndroid Build Coastguard Worker 1837*053f45beSAndroid Build Coastguard Worker log_start 1838*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -P icmp -f -l ${a} -b 1839*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address" 1840*053f45beSAndroid Build Coastguard Worker 1841*053f45beSAndroid Build Coastguard Worker # 1842*053f45beSAndroid Build Coastguard Worker # check that ICMP sockets cannot bind to broadcast and multicast addresses 1843*053f45beSAndroid Build Coastguard Worker # 1844*053f45beSAndroid Build Coastguard Worker a=${BCAST_IP} 1845*053f45beSAndroid Build Coastguard Worker log_start 1846*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -P icmp -l ${a} -b 1847*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address" 1848*053f45beSAndroid Build Coastguard Worker 1849*053f45beSAndroid Build Coastguard Worker a=${MCAST_IP} 1850*053f45beSAndroid Build Coastguard Worker log_start 1851*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -P icmp -l ${a} -b 1852*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ICMP socket bind to multicast address" 1853*053f45beSAndroid Build Coastguard Worker 1854*053f45beSAndroid Build Coastguard Worker # 1855*053f45beSAndroid Build Coastguard Worker # tcp sockets 1856*053f45beSAndroid Build Coastguard Worker # 1857*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 1858*053f45beSAndroid Build Coastguard Worker log_start 1859*053f45beSAndroid Build Coastguard Worker run_cmd nettest -c ${a} -r ${NSB_IP} -t1 -b 1860*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address" 1861*053f45beSAndroid Build Coastguard Worker 1862*053f45beSAndroid Build Coastguard Worker log_start 1863*053f45beSAndroid Build Coastguard Worker run_cmd nettest -c ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b 1864*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 1865*053f45beSAndroid Build Coastguard Worker 1866*053f45beSAndroid Build Coastguard Worker # Sadly, the kernel allows binding a socket to a device and then 1867*053f45beSAndroid Build Coastguard Worker # binding to an address not on the device. The only restriction 1868*053f45beSAndroid Build Coastguard Worker # is that the address is valid in the L3 domain. So this test 1869*053f45beSAndroid Build Coastguard Worker # passes when it really should not 1870*053f45beSAndroid Build Coastguard Worker #a=${NSA_LO_IP} 1871*053f45beSAndroid Build Coastguard Worker #log_start 1872*053f45beSAndroid Build Coastguard Worker #show_hint "Should fail with 'Cannot assign requested address'" 1873*053f45beSAndroid Build Coastguard Worker #run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b 1874*053f45beSAndroid Build Coastguard Worker #log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address" 1875*053f45beSAndroid Build Coastguard Worker} 1876*053f45beSAndroid Build Coastguard Worker 1877*053f45beSAndroid Build Coastguard Workeripv4_addr_bind_vrf() 1878*053f45beSAndroid Build Coastguard Worker{ 1879*053f45beSAndroid Build Coastguard Worker # 1880*053f45beSAndroid Build Coastguard Worker # raw socket 1881*053f45beSAndroid Build Coastguard Worker # 1882*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1883*053f45beSAndroid Build Coastguard Worker do 1884*053f45beSAndroid Build Coastguard Worker log_start 1885*053f45beSAndroid Build Coastguard Worker show_hint "Socket not bound to VRF, but address is in VRF" 1886*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -P icmp -l ${a} -b 1887*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Raw socket bind to local address" 1888*053f45beSAndroid Build Coastguard Worker 1889*053f45beSAndroid Build Coastguard Worker log_start 1890*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b 1891*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 1892*053f45beSAndroid Build Coastguard Worker log_start 1893*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b 1894*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address after VRF bind" 1895*053f45beSAndroid Build Coastguard Worker done 1896*053f45beSAndroid Build Coastguard Worker 1897*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP} 1898*053f45beSAndroid Build Coastguard Worker log_start 1899*053f45beSAndroid Build Coastguard Worker show_hint "Address on loopback is out of VRF scope" 1900*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b 1901*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Raw socket bind to out of scope address after VRF bind" 1902*053f45beSAndroid Build Coastguard Worker 1903*053f45beSAndroid Build Coastguard Worker # 1904*053f45beSAndroid Build Coastguard Worker # tests for nonlocal bind 1905*053f45beSAndroid Build Coastguard Worker # 1906*053f45beSAndroid Build Coastguard Worker a=${NL_IP} 1907*053f45beSAndroid Build Coastguard Worker log_start 1908*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -R -f -l ${a} -I ${VRF} -b 1909*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind" 1910*053f45beSAndroid Build Coastguard Worker 1911*053f45beSAndroid Build Coastguard Worker log_start 1912*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -f -l ${a} -I ${VRF} -b 1913*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address after VRF bind" 1914*053f45beSAndroid Build Coastguard Worker 1915*053f45beSAndroid Build Coastguard Worker log_start 1916*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -P icmp -f -l ${a} -I ${VRF} -b 1917*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address after VRF bind" 1918*053f45beSAndroid Build Coastguard Worker 1919*053f45beSAndroid Build Coastguard Worker # 1920*053f45beSAndroid Build Coastguard Worker # check that ICMP sockets cannot bind to broadcast and multicast addresses 1921*053f45beSAndroid Build Coastguard Worker # 1922*053f45beSAndroid Build Coastguard Worker a=${BCAST_IP} 1923*053f45beSAndroid Build Coastguard Worker log_start 1924*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b 1925*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address after VRF bind" 1926*053f45beSAndroid Build Coastguard Worker 1927*053f45beSAndroid Build Coastguard Worker a=${MCAST_IP} 1928*053f45beSAndroid Build Coastguard Worker log_start 1929*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b 1930*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ICMP socket bind to multicast address after VRF bind" 1931*053f45beSAndroid Build Coastguard Worker 1932*053f45beSAndroid Build Coastguard Worker # 1933*053f45beSAndroid Build Coastguard Worker # tcp sockets 1934*053f45beSAndroid Build Coastguard Worker # 1935*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1936*053f45beSAndroid Build Coastguard Worker do 1937*053f45beSAndroid Build Coastguard Worker log_start 1938*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b 1939*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address" 1940*053f45beSAndroid Build Coastguard Worker 1941*053f45beSAndroid Build Coastguard Worker log_start 1942*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b 1943*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 1944*053f45beSAndroid Build Coastguard Worker done 1945*053f45beSAndroid Build Coastguard Worker 1946*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP} 1947*053f45beSAndroid Build Coastguard Worker log_start 1948*053f45beSAndroid Build Coastguard Worker show_hint "Address on loopback out of scope for VRF" 1949*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b 1950*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF" 1951*053f45beSAndroid Build Coastguard Worker 1952*053f45beSAndroid Build Coastguard Worker log_start 1953*053f45beSAndroid Build Coastguard Worker show_hint "Address on loopback out of scope for device in VRF" 1954*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b 1955*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind" 1956*053f45beSAndroid Build Coastguard Worker} 1957*053f45beSAndroid Build Coastguard Worker 1958*053f45beSAndroid Build Coastguard Workeripv4_addr_bind() 1959*053f45beSAndroid Build Coastguard Worker{ 1960*053f45beSAndroid Build Coastguard Worker log_section "IPv4 address binds" 1961*053f45beSAndroid Build Coastguard Worker 1962*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 1963*053f45beSAndroid Build Coastguard Worker setup 1964*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null 1965*053f45beSAndroid Build Coastguard Worker ipv4_addr_bind_novrf 1966*053f45beSAndroid Build Coastguard Worker 1967*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 1968*053f45beSAndroid Build Coastguard Worker setup "yes" 1969*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null 1970*053f45beSAndroid Build Coastguard Worker ipv4_addr_bind_vrf 1971*053f45beSAndroid Build Coastguard Worker} 1972*053f45beSAndroid Build Coastguard Worker 1973*053f45beSAndroid Build Coastguard Worker################################################################################ 1974*053f45beSAndroid Build Coastguard Worker# IPv4 runtime tests 1975*053f45beSAndroid Build Coastguard Worker 1976*053f45beSAndroid Build Coastguard Workeripv4_rt() 1977*053f45beSAndroid Build Coastguard Worker{ 1978*053f45beSAndroid Build Coastguard Worker local desc="$1" 1979*053f45beSAndroid Build Coastguard Worker local varg="$2" 1980*053f45beSAndroid Build Coastguard Worker local with_vrf="yes" 1981*053f45beSAndroid Build Coastguard Worker local a 1982*053f45beSAndroid Build Coastguard Worker 1983*053f45beSAndroid Build Coastguard Worker # 1984*053f45beSAndroid Build Coastguard Worker # server tests 1985*053f45beSAndroid Build Coastguard Worker # 1986*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 1987*053f45beSAndroid Build Coastguard Worker do 1988*053f45beSAndroid Build Coastguard Worker log_start 1989*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s & 1990*053f45beSAndroid Build Coastguard Worker sleep 1 1991*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -r ${a} & 1992*053f45beSAndroid Build Coastguard Worker sleep 3 1993*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 1994*053f45beSAndroid Build Coastguard Worker sleep 1 1995*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, global server" 1996*053f45beSAndroid Build Coastguard Worker 1997*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 1998*053f45beSAndroid Build Coastguard Worker done 1999*053f45beSAndroid Build Coastguard Worker 2000*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 2001*053f45beSAndroid Build Coastguard Worker do 2002*053f45beSAndroid Build Coastguard Worker log_start 2003*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s -I ${VRF} & 2004*053f45beSAndroid Build Coastguard Worker sleep 1 2005*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -r ${a} & 2006*053f45beSAndroid Build Coastguard Worker sleep 3 2007*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2008*053f45beSAndroid Build Coastguard Worker sleep 1 2009*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF server" 2010*053f45beSAndroid Build Coastguard Worker 2011*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2012*053f45beSAndroid Build Coastguard Worker done 2013*053f45beSAndroid Build Coastguard Worker 2014*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 2015*053f45beSAndroid Build Coastguard Worker log_start 2016*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s -I ${NSA_DEV} & 2017*053f45beSAndroid Build Coastguard Worker sleep 1 2018*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -r ${a} & 2019*053f45beSAndroid Build Coastguard Worker sleep 3 2020*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2021*053f45beSAndroid Build Coastguard Worker sleep 1 2022*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, enslaved device server" 2023*053f45beSAndroid Build Coastguard Worker 2024*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2025*053f45beSAndroid Build Coastguard Worker 2026*053f45beSAndroid Build Coastguard Worker # 2027*053f45beSAndroid Build Coastguard Worker # client test 2028*053f45beSAndroid Build Coastguard Worker # 2029*053f45beSAndroid Build Coastguard Worker log_start 2030*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -s & 2031*053f45beSAndroid Build Coastguard Worker sleep 1 2032*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP} & 2033*053f45beSAndroid Build Coastguard Worker sleep 3 2034*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2035*053f45beSAndroid Build Coastguard Worker sleep 1 2036*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF client" 2037*053f45beSAndroid Build Coastguard Worker 2038*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2039*053f45beSAndroid Build Coastguard Worker 2040*053f45beSAndroid Build Coastguard Worker log_start 2041*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -s & 2042*053f45beSAndroid Build Coastguard Worker sleep 1 2043*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP} & 2044*053f45beSAndroid Build Coastguard Worker sleep 3 2045*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2046*053f45beSAndroid Build Coastguard Worker sleep 1 2047*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, enslaved device client" 2048*053f45beSAndroid Build Coastguard Worker 2049*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2050*053f45beSAndroid Build Coastguard Worker 2051*053f45beSAndroid Build Coastguard Worker # 2052*053f45beSAndroid Build Coastguard Worker # local address tests 2053*053f45beSAndroid Build Coastguard Worker # 2054*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 2055*053f45beSAndroid Build Coastguard Worker do 2056*053f45beSAndroid Build Coastguard Worker log_start 2057*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s & 2058*053f45beSAndroid Build Coastguard Worker sleep 1 2059*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${VRF} -r ${a} & 2060*053f45beSAndroid Build Coastguard Worker sleep 3 2061*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2062*053f45beSAndroid Build Coastguard Worker sleep 1 2063*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, global server, VRF client, local" 2064*053f45beSAndroid Build Coastguard Worker 2065*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2066*053f45beSAndroid Build Coastguard Worker done 2067*053f45beSAndroid Build Coastguard Worker 2068*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 2069*053f45beSAndroid Build Coastguard Worker do 2070*053f45beSAndroid Build Coastguard Worker log_start 2071*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${VRF} -s & 2072*053f45beSAndroid Build Coastguard Worker sleep 1 2073*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${VRF} -r ${a} & 2074*053f45beSAndroid Build Coastguard Worker sleep 3 2075*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2076*053f45beSAndroid Build Coastguard Worker sleep 1 2077*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF server and client, local" 2078*053f45beSAndroid Build Coastguard Worker 2079*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2080*053f45beSAndroid Build Coastguard Worker done 2081*053f45beSAndroid Build Coastguard Worker 2082*053f45beSAndroid Build Coastguard Worker a=${NSA_IP} 2083*053f45beSAndroid Build Coastguard Worker log_start 2084*053f45beSAndroid Build Coastguard Worker 2085*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s & 2086*053f45beSAndroid Build Coastguard Worker sleep 1 2087*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 2088*053f45beSAndroid Build Coastguard Worker sleep 3 2089*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2090*053f45beSAndroid Build Coastguard Worker sleep 1 2091*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, global server, enslaved device client, local" 2092*053f45beSAndroid Build Coastguard Worker 2093*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2094*053f45beSAndroid Build Coastguard Worker 2095*053f45beSAndroid Build Coastguard Worker log_start 2096*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${VRF} -s & 2097*053f45beSAndroid Build Coastguard Worker sleep 1 2098*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 2099*053f45beSAndroid Build Coastguard Worker sleep 3 2100*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2101*053f45beSAndroid Build Coastguard Worker sleep 1 2102*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF server, enslaved device client, local" 2103*053f45beSAndroid Build Coastguard Worker 2104*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2105*053f45beSAndroid Build Coastguard Worker 2106*053f45beSAndroid Build Coastguard Worker log_start 2107*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${NSA_DEV} -s & 2108*053f45beSAndroid Build Coastguard Worker sleep 1 2109*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 2110*053f45beSAndroid Build Coastguard Worker sleep 3 2111*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2112*053f45beSAndroid Build Coastguard Worker sleep 1 2113*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, enslaved device server and client, local" 2114*053f45beSAndroid Build Coastguard Worker} 2115*053f45beSAndroid Build Coastguard Worker 2116*053f45beSAndroid Build Coastguard Workeripv4_ping_rt() 2117*053f45beSAndroid Build Coastguard Worker{ 2118*053f45beSAndroid Build Coastguard Worker local with_vrf="yes" 2119*053f45beSAndroid Build Coastguard Worker local a 2120*053f45beSAndroid Build Coastguard Worker 2121*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 2122*053f45beSAndroid Build Coastguard Worker do 2123*053f45beSAndroid Build Coastguard Worker log_start 2124*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -f ${a} & 2125*053f45beSAndroid Build Coastguard Worker sleep 3 2126*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2127*053f45beSAndroid Build Coastguard Worker sleep 1 2128*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "Device delete with active traffic - ping in" 2129*053f45beSAndroid Build Coastguard Worker 2130*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 2131*053f45beSAndroid Build Coastguard Worker done 2132*053f45beSAndroid Build Coastguard Worker 2133*053f45beSAndroid Build Coastguard Worker a=${NSB_IP} 2134*053f45beSAndroid Build Coastguard Worker log_start 2135*053f45beSAndroid Build Coastguard Worker run_cmd ping -f -I ${VRF} ${a} & 2136*053f45beSAndroid Build Coastguard Worker sleep 3 2137*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 2138*053f45beSAndroid Build Coastguard Worker sleep 1 2139*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "Device delete with active traffic - ping out" 2140*053f45beSAndroid Build Coastguard Worker} 2141*053f45beSAndroid Build Coastguard Worker 2142*053f45beSAndroid Build Coastguard Workeripv4_runtime() 2143*053f45beSAndroid Build Coastguard Worker{ 2144*053f45beSAndroid Build Coastguard Worker log_section "Run time tests - ipv4" 2145*053f45beSAndroid Build Coastguard Worker 2146*053f45beSAndroid Build Coastguard Worker setup "yes" 2147*053f45beSAndroid Build Coastguard Worker ipv4_ping_rt 2148*053f45beSAndroid Build Coastguard Worker 2149*053f45beSAndroid Build Coastguard Worker setup "yes" 2150*053f45beSAndroid Build Coastguard Worker ipv4_rt "TCP active socket" "-n -1" 2151*053f45beSAndroid Build Coastguard Worker 2152*053f45beSAndroid Build Coastguard Worker setup "yes" 2153*053f45beSAndroid Build Coastguard Worker ipv4_rt "TCP passive socket" "-i" 2154*053f45beSAndroid Build Coastguard Worker} 2155*053f45beSAndroid Build Coastguard Worker 2156*053f45beSAndroid Build Coastguard Worker################################################################################ 2157*053f45beSAndroid Build Coastguard Worker# IPv6 2158*053f45beSAndroid Build Coastguard Worker 2159*053f45beSAndroid Build Coastguard Workeripv6_ping_novrf() 2160*053f45beSAndroid Build Coastguard Worker{ 2161*053f45beSAndroid Build Coastguard Worker local a 2162*053f45beSAndroid Build Coastguard Worker 2163*053f45beSAndroid Build Coastguard Worker # should not have an impact, but make a known state 2164*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null 2165*053f45beSAndroid Build Coastguard Worker 2166*053f45beSAndroid Build Coastguard Worker # 2167*053f45beSAndroid Build Coastguard Worker # out 2168*053f45beSAndroid Build Coastguard Worker # 2169*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV} 2170*053f45beSAndroid Build Coastguard Worker do 2171*053f45beSAndroid Build Coastguard Worker log_start 2172*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2173*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out" 2174*053f45beSAndroid Build Coastguard Worker done 2175*053f45beSAndroid Build Coastguard Worker 2176*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} 2177*053f45beSAndroid Build Coastguard Worker do 2178*053f45beSAndroid Build Coastguard Worker log_start 2179*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2180*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, device bind" 2181*053f45beSAndroid Build Coastguard Worker 2182*053f45beSAndroid Build Coastguard Worker log_start 2183*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_LO_IP6} ${a} 2184*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, loopback address bind" 2185*053f45beSAndroid Build Coastguard Worker done 2186*053f45beSAndroid Build Coastguard Worker 2187*053f45beSAndroid Build Coastguard Worker # 2188*053f45beSAndroid Build Coastguard Worker # in 2189*053f45beSAndroid Build Coastguard Worker # 2190*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV} 2191*053f45beSAndroid Build Coastguard Worker do 2192*053f45beSAndroid Build Coastguard Worker log_start 2193*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2194*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping in" 2195*053f45beSAndroid Build Coastguard Worker done 2196*053f45beSAndroid Build Coastguard Worker 2197*053f45beSAndroid Build Coastguard Worker # 2198*053f45beSAndroid Build Coastguard Worker # local traffic, local address 2199*053f45beSAndroid Build Coastguard Worker # 2200*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV} 2201*053f45beSAndroid Build Coastguard Worker do 2202*053f45beSAndroid Build Coastguard Worker log_start 2203*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2204*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, no bind" 2205*053f45beSAndroid Build Coastguard Worker done 2206*053f45beSAndroid Build Coastguard Worker 2207*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV} 2208*053f45beSAndroid Build Coastguard Worker do 2209*053f45beSAndroid Build Coastguard Worker log_start 2210*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2211*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, device bind" 2212*053f45beSAndroid Build Coastguard Worker done 2213*053f45beSAndroid Build Coastguard Worker 2214*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP6} ::1 2215*053f45beSAndroid Build Coastguard Worker do 2216*053f45beSAndroid Build Coastguard Worker log_start 2217*053f45beSAndroid Build Coastguard Worker show_hint "Fails since address on loopback is out of device scope" 2218*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2219*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping local, device bind" 2220*053f45beSAndroid Build Coastguard Worker done 2221*053f45beSAndroid Build Coastguard Worker 2222*053f45beSAndroid Build Coastguard Worker # 2223*053f45beSAndroid Build Coastguard Worker # ip rule blocks address 2224*053f45beSAndroid Build Coastguard Worker # 2225*053f45beSAndroid Build Coastguard Worker log_start 2226*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule add pref 32765 from all lookup local 2227*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule del pref 0 from all lookup local 2228*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit 2229*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit 2230*053f45beSAndroid Build Coastguard Worker 2231*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP6} 2232*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2233*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, blocked by rule" 2234*053f45beSAndroid Build Coastguard Worker 2235*053f45beSAndroid Build Coastguard Worker log_start 2236*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2237*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule" 2238*053f45beSAndroid Build Coastguard Worker 2239*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 2240*053f45beSAndroid Build Coastguard Worker log_start 2241*053f45beSAndroid Build Coastguard Worker show_hint "Response lost due to ip rule" 2242*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2243*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, blocked by rule" 2244*053f45beSAndroid Build Coastguard Worker 2245*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule add pref 0 from all lookup local 2246*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule del pref 32765 from all lookup local 2247*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit 2248*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit 2249*053f45beSAndroid Build Coastguard Worker 2250*053f45beSAndroid Build Coastguard Worker # 2251*053f45beSAndroid Build Coastguard Worker # route blocks reachability to remote address 2252*053f45beSAndroid Build Coastguard Worker # 2253*053f45beSAndroid Build Coastguard Worker log_start 2254*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 route del ${NSB_LO_IP6} 2255*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 route add unreachable ${NSB_LO_IP6} metric 10 2256*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 route add unreachable ${NSB_IP6} metric 10 2257*053f45beSAndroid Build Coastguard Worker 2258*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP6} 2259*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2260*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, blocked by route" 2261*053f45beSAndroid Build Coastguard Worker 2262*053f45beSAndroid Build Coastguard Worker log_start 2263*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2264*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, blocked by route" 2265*053f45beSAndroid Build Coastguard Worker 2266*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 2267*053f45beSAndroid Build Coastguard Worker log_start 2268*053f45beSAndroid Build Coastguard Worker show_hint "Response lost due to ip route" 2269*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2270*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, blocked by route" 2271*053f45beSAndroid Build Coastguard Worker 2272*053f45beSAndroid Build Coastguard Worker 2273*053f45beSAndroid Build Coastguard Worker # 2274*053f45beSAndroid Build Coastguard Worker # remove 'remote' routes; fallback to default 2275*053f45beSAndroid Build Coastguard Worker # 2276*053f45beSAndroid Build Coastguard Worker log_start 2277*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 ro del unreachable ${NSB_LO_IP6} 2278*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 ro del unreachable ${NSB_IP6} 2279*053f45beSAndroid Build Coastguard Worker 2280*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP6} 2281*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2282*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, unreachable route" 2283*053f45beSAndroid Build Coastguard Worker 2284*053f45beSAndroid Build Coastguard Worker log_start 2285*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2286*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, unreachable route" 2287*053f45beSAndroid Build Coastguard Worker} 2288*053f45beSAndroid Build Coastguard Worker 2289*053f45beSAndroid Build Coastguard Workeripv6_ping_vrf() 2290*053f45beSAndroid Build Coastguard Worker{ 2291*053f45beSAndroid Build Coastguard Worker local a 2292*053f45beSAndroid Build Coastguard Worker 2293*053f45beSAndroid Build Coastguard Worker # should default on; does not exist on older kernels 2294*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null 2295*053f45beSAndroid Build Coastguard Worker 2296*053f45beSAndroid Build Coastguard Worker # 2297*053f45beSAndroid Build Coastguard Worker # out 2298*053f45beSAndroid Build Coastguard Worker # 2299*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} 2300*053f45beSAndroid Build Coastguard Worker do 2301*053f45beSAndroid Build Coastguard Worker log_start 2302*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a} 2303*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, VRF bind" 2304*053f45beSAndroid Build Coastguard Worker done 2305*053f45beSAndroid Build Coastguard Worker 2306*053f45beSAndroid Build Coastguard Worker for a in ${NSB_LINKIP6}%${VRF} ${MCAST}%${VRF} 2307*053f45beSAndroid Build Coastguard Worker do 2308*053f45beSAndroid Build Coastguard Worker log_start 2309*053f45beSAndroid Build Coastguard Worker show_hint "Fails since VRF device does not support linklocal or multicast" 2310*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2311*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping out, VRF bind" 2312*053f45beSAndroid Build Coastguard Worker done 2313*053f45beSAndroid Build Coastguard Worker 2314*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV} 2315*053f45beSAndroid Build Coastguard Worker do 2316*053f45beSAndroid Build Coastguard Worker log_start 2317*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2318*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, device bind" 2319*053f45beSAndroid Build Coastguard Worker done 2320*053f45beSAndroid Build Coastguard Worker 2321*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} 2322*053f45beSAndroid Build Coastguard Worker do 2323*053f45beSAndroid Build Coastguard Worker log_start 2324*053f45beSAndroid Build Coastguard Worker run_cmd ip vrf exec ${VRF} ${ping6} -c1 -w1 -I ${VRF_IP6} ${a} 2325*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping out, vrf device+address bind" 2326*053f45beSAndroid Build Coastguard Worker done 2327*053f45beSAndroid Build Coastguard Worker 2328*053f45beSAndroid Build Coastguard Worker # 2329*053f45beSAndroid Build Coastguard Worker # in 2330*053f45beSAndroid Build Coastguard Worker # 2331*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV} 2332*053f45beSAndroid Build Coastguard Worker do 2333*053f45beSAndroid Build Coastguard Worker log_start 2334*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2335*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping in" 2336*053f45beSAndroid Build Coastguard Worker done 2337*053f45beSAndroid Build Coastguard Worker 2338*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 2339*053f45beSAndroid Build Coastguard Worker log_start 2340*053f45beSAndroid Build Coastguard Worker show_hint "Fails since loopback address is out of VRF scope" 2341*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2342*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in" 2343*053f45beSAndroid Build Coastguard Worker 2344*053f45beSAndroid Build Coastguard Worker # 2345*053f45beSAndroid Build Coastguard Worker # local traffic, local address 2346*053f45beSAndroid Build Coastguard Worker # 2347*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ::1 2348*053f45beSAndroid Build Coastguard Worker do 2349*053f45beSAndroid Build Coastguard Worker log_start 2350*053f45beSAndroid Build Coastguard Worker show_hint "Source address should be ${a}" 2351*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a} 2352*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, VRF bind" 2353*053f45beSAndroid Build Coastguard Worker done 2354*053f45beSAndroid Build Coastguard Worker 2355*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV} 2356*053f45beSAndroid Build Coastguard Worker do 2357*053f45beSAndroid Build Coastguard Worker log_start 2358*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2359*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping local, device bind" 2360*053f45beSAndroid Build Coastguard Worker done 2361*053f45beSAndroid Build Coastguard Worker 2362*053f45beSAndroid Build Coastguard Worker # LLA to GUA - remove ipv6 global addresses from ns-B 2363*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV} 2364*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 addr del ${NSB_LO_IP6}/128 dev lo 2365*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 ro add ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV} 2366*053f45beSAndroid Build Coastguard Worker 2367*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 2368*053f45beSAndroid Build Coastguard Worker do 2369*053f45beSAndroid Build Coastguard Worker log_start 2370*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6} 2371*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "ping in, LLA to GUA" 2372*053f45beSAndroid Build Coastguard Worker done 2373*053f45beSAndroid Build Coastguard Worker 2374*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 ro del ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV} 2375*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} 2376*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 addr add ${NSB_LO_IP6}/128 dev lo 2377*053f45beSAndroid Build Coastguard Worker 2378*053f45beSAndroid Build Coastguard Worker # 2379*053f45beSAndroid Build Coastguard Worker # ip rule blocks address 2380*053f45beSAndroid Build Coastguard Worker # 2381*053f45beSAndroid Build Coastguard Worker log_start 2382*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit 2383*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit 2384*053f45beSAndroid Build Coastguard Worker 2385*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP6} 2386*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2387*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, blocked by rule" 2388*053f45beSAndroid Build Coastguard Worker 2389*053f45beSAndroid Build Coastguard Worker log_start 2390*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2391*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule" 2392*053f45beSAndroid Build Coastguard Worker 2393*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 2394*053f45beSAndroid Build Coastguard Worker log_start 2395*053f45beSAndroid Build Coastguard Worker show_hint "Response lost due to ip rule" 2396*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2397*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "ping in, blocked by rule" 2398*053f45beSAndroid Build Coastguard Worker 2399*053f45beSAndroid Build Coastguard Worker log_start 2400*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit 2401*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit 2402*053f45beSAndroid Build Coastguard Worker 2403*053f45beSAndroid Build Coastguard Worker # 2404*053f45beSAndroid Build Coastguard Worker # remove 'remote' routes; fallback to default 2405*053f45beSAndroid Build Coastguard Worker # 2406*053f45beSAndroid Build Coastguard Worker log_start 2407*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 ro del ${NSB_LO_IP6} vrf ${VRF} 2408*053f45beSAndroid Build Coastguard Worker 2409*053f45beSAndroid Build Coastguard Worker a=${NSB_LO_IP6} 2410*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 ${a} 2411*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, unreachable route" 2412*053f45beSAndroid Build Coastguard Worker 2413*053f45beSAndroid Build Coastguard Worker log_start 2414*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a} 2415*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping out, device bind, unreachable route" 2416*053f45beSAndroid Build Coastguard Worker 2417*053f45beSAndroid Build Coastguard Worker ip -netns ${NSB} -6 ro del ${NSA_LO_IP6} 2418*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 2419*053f45beSAndroid Build Coastguard Worker log_start 2420*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${a} 2421*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 2 "ping in, unreachable route" 2422*053f45beSAndroid Build Coastguard Worker} 2423*053f45beSAndroid Build Coastguard Worker 2424*053f45beSAndroid Build Coastguard Workeripv6_ping() 2425*053f45beSAndroid Build Coastguard Worker{ 2426*053f45beSAndroid Build Coastguard Worker log_section "IPv6 ping" 2427*053f45beSAndroid Build Coastguard Worker 2428*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 2429*053f45beSAndroid Build Coastguard Worker setup 2430*053f45beSAndroid Build Coastguard Worker ipv6_ping_novrf 2431*053f45beSAndroid Build Coastguard Worker setup 2432*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null 2433*053f45beSAndroid Build Coastguard Worker ipv6_ping_novrf 2434*053f45beSAndroid Build Coastguard Worker 2435*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 2436*053f45beSAndroid Build Coastguard Worker setup "yes" 2437*053f45beSAndroid Build Coastguard Worker ipv6_ping_vrf 2438*053f45beSAndroid Build Coastguard Worker setup "yes" 2439*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null 2440*053f45beSAndroid Build Coastguard Worker ipv6_ping_vrf 2441*053f45beSAndroid Build Coastguard Worker} 2442*053f45beSAndroid Build Coastguard Worker 2443*053f45beSAndroid Build Coastguard Worker################################################################################ 2444*053f45beSAndroid Build Coastguard Worker# IPv6 TCP 2445*053f45beSAndroid Build Coastguard Worker 2446*053f45beSAndroid Build Coastguard Worker# 2447*053f45beSAndroid Build Coastguard Worker# MD5 tests without VRF 2448*053f45beSAndroid Build Coastguard Worker# 2449*053f45beSAndroid Build Coastguard Workeripv6_tcp_md5_novrf() 2450*053f45beSAndroid Build Coastguard Worker{ 2451*053f45beSAndroid Build Coastguard Worker # 2452*053f45beSAndroid Build Coastguard Worker # single address 2453*053f45beSAndroid Build Coastguard Worker # 2454*053f45beSAndroid Build Coastguard Worker 2455*053f45beSAndroid Build Coastguard Worker # basic use case 2456*053f45beSAndroid Build Coastguard Worker log_start 2457*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} & 2458*053f45beSAndroid Build Coastguard Worker sleep 1 2459*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2460*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: Single address config" 2461*053f45beSAndroid Build Coastguard Worker 2462*053f45beSAndroid Build Coastguard Worker # client sends MD5, server not configured 2463*053f45beSAndroid Build Coastguard Worker log_start 2464*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout due to MD5 mismatch" 2465*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2466*053f45beSAndroid Build Coastguard Worker sleep 1 2467*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2468*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Server no config, client uses password" 2469*053f45beSAndroid Build Coastguard Worker 2470*053f45beSAndroid Build Coastguard Worker # wrong password 2471*053f45beSAndroid Build Coastguard Worker log_start 2472*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 2473*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} & 2474*053f45beSAndroid Build Coastguard Worker sleep 1 2475*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2476*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Client uses wrong password" 2477*053f45beSAndroid Build Coastguard Worker 2478*053f45beSAndroid Build Coastguard Worker # client from different address 2479*053f45beSAndroid Build Coastguard Worker log_start 2480*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout due to MD5 mismatch" 2481*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_LO_IP6} & 2482*053f45beSAndroid Build Coastguard Worker sleep 1 2483*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2484*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Client address does not match address configured with password" 2485*053f45beSAndroid Build Coastguard Worker 2486*053f45beSAndroid Build Coastguard Worker # 2487*053f45beSAndroid Build Coastguard Worker # MD5 extension - prefix length 2488*053f45beSAndroid Build Coastguard Worker # 2489*053f45beSAndroid Build Coastguard Worker 2490*053f45beSAndroid Build Coastguard Worker # client in prefix 2491*053f45beSAndroid Build Coastguard Worker log_start 2492*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} & 2493*053f45beSAndroid Build Coastguard Worker sleep 1 2494*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2495*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: Prefix config" 2496*053f45beSAndroid Build Coastguard Worker 2497*053f45beSAndroid Build Coastguard Worker # client in prefix, wrong password 2498*053f45beSAndroid Build Coastguard Worker log_start 2499*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 2500*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} & 2501*053f45beSAndroid Build Coastguard Worker sleep 1 2502*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2503*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Prefix config, client uses wrong password" 2504*053f45beSAndroid Build Coastguard Worker 2505*053f45beSAndroid Build Coastguard Worker # client outside of prefix 2506*053f45beSAndroid Build Coastguard Worker log_start 2507*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout due to MD5 mismatch" 2508*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} & 2509*053f45beSAndroid Build Coastguard Worker sleep 1 2510*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW} 2511*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: Prefix config, client address not in configured prefix" 2512*053f45beSAndroid Build Coastguard Worker} 2513*053f45beSAndroid Build Coastguard Worker 2514*053f45beSAndroid Build Coastguard Worker# 2515*053f45beSAndroid Build Coastguard Worker# MD5 tests with VRF 2516*053f45beSAndroid Build Coastguard Worker# 2517*053f45beSAndroid Build Coastguard Workeripv6_tcp_md5() 2518*053f45beSAndroid Build Coastguard Worker{ 2519*053f45beSAndroid Build Coastguard Worker # 2520*053f45beSAndroid Build Coastguard Worker # single address 2521*053f45beSAndroid Build Coastguard Worker # 2522*053f45beSAndroid Build Coastguard Worker 2523*053f45beSAndroid Build Coastguard Worker # basic use case 2524*053f45beSAndroid Build Coastguard Worker log_start 2525*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2526*053f45beSAndroid Build Coastguard Worker sleep 1 2527*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2528*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Single address config" 2529*053f45beSAndroid Build Coastguard Worker 2530*053f45beSAndroid Build Coastguard Worker # client sends MD5, server not configured 2531*053f45beSAndroid Build Coastguard Worker log_start 2532*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since server does not have MD5 auth" 2533*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} & 2534*053f45beSAndroid Build Coastguard Worker sleep 1 2535*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2536*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Server no config, client uses password" 2537*053f45beSAndroid Build Coastguard Worker 2538*053f45beSAndroid Build Coastguard Worker # wrong password 2539*053f45beSAndroid Build Coastguard Worker log_start 2540*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 2541*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2542*053f45beSAndroid Build Coastguard Worker sleep 1 2543*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2544*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Client uses wrong password" 2545*053f45beSAndroid Build Coastguard Worker 2546*053f45beSAndroid Build Coastguard Worker # client from different address 2547*053f45beSAndroid Build Coastguard Worker log_start 2548*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since server config differs from client" 2549*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP6} & 2550*053f45beSAndroid Build Coastguard Worker sleep 1 2551*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2552*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Client address does not match address configured with password" 2553*053f45beSAndroid Build Coastguard Worker 2554*053f45beSAndroid Build Coastguard Worker # 2555*053f45beSAndroid Build Coastguard Worker # MD5 extension - prefix length 2556*053f45beSAndroid Build Coastguard Worker # 2557*053f45beSAndroid Build Coastguard Worker 2558*053f45beSAndroid Build Coastguard Worker # client in prefix 2559*053f45beSAndroid Build Coastguard Worker log_start 2560*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2561*053f45beSAndroid Build Coastguard Worker sleep 1 2562*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2563*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Prefix config" 2564*053f45beSAndroid Build Coastguard Worker 2565*053f45beSAndroid Build Coastguard Worker # client in prefix, wrong password 2566*053f45beSAndroid Build Coastguard Worker log_start 2567*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client uses wrong password" 2568*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2569*053f45beSAndroid Build Coastguard Worker sleep 1 2570*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2571*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password" 2572*053f45beSAndroid Build Coastguard Worker 2573*053f45beSAndroid Build Coastguard Worker # client outside of prefix 2574*053f45beSAndroid Build Coastguard Worker log_start 2575*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client address is outside of prefix" 2576*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2577*053f45beSAndroid Build Coastguard Worker sleep 1 2578*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW} 2579*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix" 2580*053f45beSAndroid Build Coastguard Worker 2581*053f45beSAndroid Build Coastguard Worker # 2582*053f45beSAndroid Build Coastguard Worker # duplicate config between default VRF and a VRF 2583*053f45beSAndroid Build Coastguard Worker # 2584*053f45beSAndroid Build Coastguard Worker 2585*053f45beSAndroid Build Coastguard Worker log_start 2586*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2587*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2588*053f45beSAndroid Build Coastguard Worker sleep 1 2589*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2590*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF" 2591*053f45beSAndroid Build Coastguard Worker 2592*053f45beSAndroid Build Coastguard Worker log_start 2593*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2594*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2595*053f45beSAndroid Build Coastguard Worker sleep 1 2596*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2597*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF" 2598*053f45beSAndroid Build Coastguard Worker 2599*053f45beSAndroid Build Coastguard Worker log_start 2600*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in default VRF uses VRF password" 2601*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2602*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2603*053f45beSAndroid Build Coastguard Worker sleep 1 2604*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2605*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw" 2606*053f45beSAndroid Build Coastguard Worker 2607*053f45beSAndroid Build Coastguard Worker log_start 2608*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in VRF uses default VRF password" 2609*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} & 2610*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} & 2611*053f45beSAndroid Build Coastguard Worker sleep 1 2612*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2613*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw" 2614*053f45beSAndroid Build Coastguard Worker 2615*053f45beSAndroid Build Coastguard Worker log_start 2616*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2617*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2618*053f45beSAndroid Build Coastguard Worker sleep 1 2619*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2620*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF" 2621*053f45beSAndroid Build Coastguard Worker 2622*053f45beSAndroid Build Coastguard Worker log_start 2623*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2624*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2625*053f45beSAndroid Build Coastguard Worker sleep 1 2626*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2627*053f45beSAndroid Build Coastguard Worker log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF" 2628*053f45beSAndroid Build Coastguard Worker 2629*053f45beSAndroid Build Coastguard Worker log_start 2630*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in default VRF uses VRF password" 2631*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2632*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2633*053f45beSAndroid Build Coastguard Worker sleep 1 2634*053f45beSAndroid Build Coastguard Worker run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW} 2635*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw" 2636*053f45beSAndroid Build Coastguard Worker 2637*053f45beSAndroid Build Coastguard Worker log_start 2638*053f45beSAndroid Build Coastguard Worker show_hint "Should timeout since client in VRF uses default VRF password" 2639*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} & 2640*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} & 2641*053f45beSAndroid Build Coastguard Worker sleep 1 2642*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW} 2643*053f45beSAndroid Build Coastguard Worker log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw" 2644*053f45beSAndroid Build Coastguard Worker 2645*053f45beSAndroid Build Coastguard Worker # 2646*053f45beSAndroid Build Coastguard Worker # negative tests 2647*053f45beSAndroid Build Coastguard Worker # 2648*053f45beSAndroid Build Coastguard Worker log_start 2649*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP6} 2650*053f45beSAndroid Build Coastguard Worker log_test $? 1 "MD5: VRF: Device must be a VRF - single address" 2651*053f45beSAndroid Build Coastguard Worker 2652*053f45beSAndroid Build Coastguard Worker log_start 2653*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6} 2654*053f45beSAndroid Build Coastguard Worker log_test $? 1 "MD5: VRF: Device must be a VRF - prefix" 2655*053f45beSAndroid Build Coastguard Worker 2656*053f45beSAndroid Build Coastguard Worker} 2657*053f45beSAndroid Build Coastguard Worker 2658*053f45beSAndroid Build Coastguard Workeripv6_tcp_novrf() 2659*053f45beSAndroid Build Coastguard Worker{ 2660*053f45beSAndroid Build Coastguard Worker local a 2661*053f45beSAndroid Build Coastguard Worker 2662*053f45beSAndroid Build Coastguard Worker # 2663*053f45beSAndroid Build Coastguard Worker # server tests 2664*053f45beSAndroid Build Coastguard Worker # 2665*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2666*053f45beSAndroid Build Coastguard Worker do 2667*053f45beSAndroid Build Coastguard Worker log_start 2668*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2669*053f45beSAndroid Build Coastguard Worker sleep 1 2670*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2671*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 2672*053f45beSAndroid Build Coastguard Worker done 2673*053f45beSAndroid Build Coastguard Worker 2674*053f45beSAndroid Build Coastguard Worker # verify TCP reset received 2675*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2676*053f45beSAndroid Build Coastguard Worker do 2677*053f45beSAndroid Build Coastguard Worker log_start 2678*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2679*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2680*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 2681*053f45beSAndroid Build Coastguard Worker done 2682*053f45beSAndroid Build Coastguard Worker 2683*053f45beSAndroid Build Coastguard Worker # 2684*053f45beSAndroid Build Coastguard Worker # client 2685*053f45beSAndroid Build Coastguard Worker # 2686*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} 2687*053f45beSAndroid Build Coastguard Worker do 2688*053f45beSAndroid Build Coastguard Worker log_start 2689*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -s & 2690*053f45beSAndroid Build Coastguard Worker sleep 1 2691*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} 2692*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client" 2693*053f45beSAndroid Build Coastguard Worker done 2694*053f45beSAndroid Build Coastguard Worker 2695*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} 2696*053f45beSAndroid Build Coastguard Worker do 2697*053f45beSAndroid Build Coastguard Worker log_start 2698*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -s & 2699*053f45beSAndroid Build Coastguard Worker sleep 1 2700*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} 2701*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind" 2702*053f45beSAndroid Build Coastguard Worker done 2703*053f45beSAndroid Build Coastguard Worker 2704*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} 2705*053f45beSAndroid Build Coastguard Worker do 2706*053f45beSAndroid Build Coastguard Worker log_start 2707*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2708*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} 2709*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client" 2710*053f45beSAndroid Build Coastguard Worker done 2711*053f45beSAndroid Build Coastguard Worker 2712*053f45beSAndroid Build Coastguard Worker # 2713*053f45beSAndroid Build Coastguard Worker # local address tests 2714*053f45beSAndroid Build Coastguard Worker # 2715*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 2716*053f45beSAndroid Build Coastguard Worker do 2717*053f45beSAndroid Build Coastguard Worker log_start 2718*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2719*053f45beSAndroid Build Coastguard Worker sleep 1 2720*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} 2721*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, local connection" 2722*053f45beSAndroid Build Coastguard Worker done 2723*053f45beSAndroid Build Coastguard Worker 2724*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 2725*053f45beSAndroid Build Coastguard Worker log_start 2726*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2727*053f45beSAndroid Build Coastguard Worker sleep 1 2728*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -0 ${a} 2729*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, unbound client, local connection" 2730*053f45beSAndroid Build Coastguard Worker 2731*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP6} ::1 2732*053f45beSAndroid Build Coastguard Worker do 2733*053f45beSAndroid Build Coastguard Worker log_start 2734*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope" 2735*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} & 2736*053f45beSAndroid Build Coastguard Worker sleep 1 2737*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} 2738*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Device server, unbound client, local connection" 2739*053f45beSAndroid Build Coastguard Worker done 2740*053f45beSAndroid Build Coastguard Worker 2741*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 2742*053f45beSAndroid Build Coastguard Worker log_start 2743*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2744*053f45beSAndroid Build Coastguard Worker sleep 1 2745*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a} 2746*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client, local connection" 2747*053f45beSAndroid Build Coastguard Worker 2748*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP6} ::1 2749*053f45beSAndroid Build Coastguard Worker do 2750*053f45beSAndroid Build Coastguard Worker log_start 2751*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope" 2752*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2753*053f45beSAndroid Build Coastguard Worker sleep 1 2754*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} 2755*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client, local connection" 2756*053f45beSAndroid Build Coastguard Worker done 2757*053f45beSAndroid Build Coastguard Worker 2758*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6} 2759*053f45beSAndroid Build Coastguard Worker do 2760*053f45beSAndroid Build Coastguard Worker log_start 2761*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2762*053f45beSAndroid Build Coastguard Worker sleep 1 2763*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -d ${NSA_DEV} -r ${a} 2764*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local conn" 2765*053f45beSAndroid Build Coastguard Worker done 2766*053f45beSAndroid Build Coastguard Worker 2767*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6} 2768*053f45beSAndroid Build Coastguard Worker do 2769*053f45beSAndroid Build Coastguard Worker log_start 2770*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2771*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -d ${NSA_DEV} -r ${a} 2772*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client, local conn" 2773*053f45beSAndroid Build Coastguard Worker done 2774*053f45beSAndroid Build Coastguard Worker 2775*053f45beSAndroid Build Coastguard Worker ipv6_tcp_md5_novrf 2776*053f45beSAndroid Build Coastguard Worker} 2777*053f45beSAndroid Build Coastguard Worker 2778*053f45beSAndroid Build Coastguard Workeripv6_tcp_vrf() 2779*053f45beSAndroid Build Coastguard Worker{ 2780*053f45beSAndroid Build Coastguard Worker local a 2781*053f45beSAndroid Build Coastguard Worker 2782*053f45beSAndroid Build Coastguard Worker # disable global server 2783*053f45beSAndroid Build Coastguard Worker log_subsection "Global server disabled" 2784*053f45beSAndroid Build Coastguard Worker 2785*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=0 2786*053f45beSAndroid Build Coastguard Worker 2787*053f45beSAndroid Build Coastguard Worker # 2788*053f45beSAndroid Build Coastguard Worker # server tests 2789*053f45beSAndroid Build Coastguard Worker # 2790*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2791*053f45beSAndroid Build Coastguard Worker do 2792*053f45beSAndroid Build Coastguard Worker log_start 2793*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server with VRF is disabled" 2794*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2795*053f45beSAndroid Build Coastguard Worker sleep 1 2796*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2797*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server" 2798*053f45beSAndroid Build Coastguard Worker done 2799*053f45beSAndroid Build Coastguard Worker 2800*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 2801*053f45beSAndroid Build Coastguard Worker do 2802*053f45beSAndroid Build Coastguard Worker log_start 2803*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2804*053f45beSAndroid Build Coastguard Worker sleep 1 2805*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2806*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 2807*053f45beSAndroid Build Coastguard Worker done 2808*053f45beSAndroid Build Coastguard Worker 2809*053f45beSAndroid Build Coastguard Worker # link local is always bound to ingress device 2810*053f45beSAndroid Build Coastguard Worker a=${NSA_LINKIP6}%${NSB_DEV} 2811*053f45beSAndroid Build Coastguard Worker log_start 2812*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} & 2813*053f45beSAndroid Build Coastguard Worker sleep 1 2814*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2815*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 2816*053f45beSAndroid Build Coastguard Worker 2817*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2818*053f45beSAndroid Build Coastguard Worker do 2819*053f45beSAndroid Build Coastguard Worker log_start 2820*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2821*053f45beSAndroid Build Coastguard Worker sleep 1 2822*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2823*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 2824*053f45beSAndroid Build Coastguard Worker done 2825*053f45beSAndroid Build Coastguard Worker 2826*053f45beSAndroid Build Coastguard Worker # verify TCP reset received 2827*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2828*053f45beSAndroid Build Coastguard Worker do 2829*053f45beSAndroid Build Coastguard Worker log_start 2830*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2831*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2832*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 2833*053f45beSAndroid Build Coastguard Worker done 2834*053f45beSAndroid Build Coastguard Worker 2835*053f45beSAndroid Build Coastguard Worker # local address tests 2836*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 2837*053f45beSAndroid Build Coastguard Worker log_start 2838*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server with VRF is disabled" 2839*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 2840*053f45beSAndroid Build Coastguard Worker sleep 1 2841*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} 2842*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, local connection" 2843*053f45beSAndroid Build Coastguard Worker 2844*053f45beSAndroid Build Coastguard Worker # run MD5 tests 2845*053f45beSAndroid Build Coastguard Worker setup_vrf_dup 2846*053f45beSAndroid Build Coastguard Worker ipv6_tcp_md5 2847*053f45beSAndroid Build Coastguard Worker cleanup_vrf_dup 2848*053f45beSAndroid Build Coastguard Worker 2849*053f45beSAndroid Build Coastguard Worker # 2850*053f45beSAndroid Build Coastguard Worker # enable VRF global server 2851*053f45beSAndroid Build Coastguard Worker # 2852*053f45beSAndroid Build Coastguard Worker log_subsection "VRF Global server enabled" 2853*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=1 2854*053f45beSAndroid Build Coastguard Worker 2855*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 2856*053f45beSAndroid Build Coastguard Worker do 2857*053f45beSAndroid Build Coastguard Worker log_start 2858*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -3 ${VRF} & 2859*053f45beSAndroid Build Coastguard Worker sleep 1 2860*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2861*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 2862*053f45beSAndroid Build Coastguard Worker done 2863*053f45beSAndroid Build Coastguard Worker 2864*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 2865*053f45beSAndroid Build Coastguard Worker do 2866*053f45beSAndroid Build Coastguard Worker log_start 2867*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2868*053f45beSAndroid Build Coastguard Worker sleep 1 2869*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2870*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 2871*053f45beSAndroid Build Coastguard Worker done 2872*053f45beSAndroid Build Coastguard Worker 2873*053f45beSAndroid Build Coastguard Worker # For LLA, child socket is bound to device 2874*053f45beSAndroid Build Coastguard Worker a=${NSA_LINKIP6}%${NSB_DEV} 2875*053f45beSAndroid Build Coastguard Worker log_start 2876*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -3 ${NSA_DEV} & 2877*053f45beSAndroid Build Coastguard Worker sleep 1 2878*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2879*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 2880*053f45beSAndroid Build Coastguard Worker 2881*053f45beSAndroid Build Coastguard Worker log_start 2882*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} & 2883*053f45beSAndroid Build Coastguard Worker sleep 1 2884*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2885*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 2886*053f45beSAndroid Build Coastguard Worker 2887*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2888*053f45beSAndroid Build Coastguard Worker do 2889*053f45beSAndroid Build Coastguard Worker log_start 2890*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2891*053f45beSAndroid Build Coastguard Worker sleep 1 2892*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2893*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 2894*053f45beSAndroid Build Coastguard Worker done 2895*053f45beSAndroid Build Coastguard Worker 2896*053f45beSAndroid Build Coastguard Worker # verify TCP reset received 2897*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} 2898*053f45beSAndroid Build Coastguard Worker do 2899*053f45beSAndroid Build Coastguard Worker log_start 2900*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2901*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 2902*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 2903*053f45beSAndroid Build Coastguard Worker done 2904*053f45beSAndroid Build Coastguard Worker 2905*053f45beSAndroid Build Coastguard Worker # local address tests 2906*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 2907*053f45beSAndroid Build Coastguard Worker do 2908*053f45beSAndroid Build Coastguard Worker log_start 2909*053f45beSAndroid Build Coastguard Worker show_hint "Fails 'Connection refused' since client is not in VRF" 2910*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} & 2911*053f45beSAndroid Build Coastguard Worker sleep 1 2912*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} 2913*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, local connection" 2914*053f45beSAndroid Build Coastguard Worker done 2915*053f45beSAndroid Build Coastguard Worker 2916*053f45beSAndroid Build Coastguard Worker 2917*053f45beSAndroid Build Coastguard Worker # 2918*053f45beSAndroid Build Coastguard Worker # client 2919*053f45beSAndroid Build Coastguard Worker # 2920*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} 2921*053f45beSAndroid Build Coastguard Worker do 2922*053f45beSAndroid Build Coastguard Worker log_start 2923*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -s & 2924*053f45beSAndroid Build Coastguard Worker sleep 1 2925*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${VRF} 2926*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, VRF bind" 2927*053f45beSAndroid Build Coastguard Worker done 2928*053f45beSAndroid Build Coastguard Worker 2929*053f45beSAndroid Build Coastguard Worker a=${NSB_LINKIP6} 2930*053f45beSAndroid Build Coastguard Worker log_start 2931*053f45beSAndroid Build Coastguard Worker show_hint "Fails since VRF device does not allow linklocal addresses" 2932*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -s & 2933*053f45beSAndroid Build Coastguard Worker sleep 1 2934*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${VRF} 2935*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Client, VRF bind" 2936*053f45beSAndroid Build Coastguard Worker 2937*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6} 2938*053f45beSAndroid Build Coastguard Worker do 2939*053f45beSAndroid Build Coastguard Worker log_start 2940*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -s & 2941*053f45beSAndroid Build Coastguard Worker sleep 1 2942*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} 2943*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind" 2944*053f45beSAndroid Build Coastguard Worker done 2945*053f45beSAndroid Build Coastguard Worker 2946*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} 2947*053f45beSAndroid Build Coastguard Worker do 2948*053f45beSAndroid Build Coastguard Worker log_start 2949*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2950*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${VRF} 2951*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, VRF client" 2952*053f45beSAndroid Build Coastguard Worker done 2953*053f45beSAndroid Build Coastguard Worker 2954*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6} 2955*053f45beSAndroid Build Coastguard Worker do 2956*053f45beSAndroid Build Coastguard Worker log_start 2957*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 2958*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} 2959*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client" 2960*053f45beSAndroid Build Coastguard Worker done 2961*053f45beSAndroid Build Coastguard Worker 2962*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} ::1 2963*053f45beSAndroid Build Coastguard Worker do 2964*053f45beSAndroid Build Coastguard Worker log_start 2965*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2966*053f45beSAndroid Build Coastguard Worker sleep 1 2967*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a} 2968*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local connection" 2969*053f45beSAndroid Build Coastguard Worker done 2970*053f45beSAndroid Build Coastguard Worker 2971*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 2972*053f45beSAndroid Build Coastguard Worker log_start 2973*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} & 2974*053f45beSAndroid Build Coastguard Worker sleep 1 2975*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a} 2976*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, device client, local connection" 2977*053f45beSAndroid Build Coastguard Worker 2978*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 2979*053f45beSAndroid Build Coastguard Worker log_start 2980*053f45beSAndroid Build Coastguard Worker show_hint "Should fail since unbound client is out of VRF scope" 2981*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${VRF} & 2982*053f45beSAndroid Build Coastguard Worker sleep 1 2983*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} 2984*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "VRF server, unbound client, local connection" 2985*053f45beSAndroid Build Coastguard Worker 2986*053f45beSAndroid Build Coastguard Worker log_start 2987*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2988*053f45beSAndroid Build Coastguard Worker sleep 1 2989*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a} 2990*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, VRF client, local connection" 2991*053f45beSAndroid Build Coastguard Worker 2992*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6} 2993*053f45beSAndroid Build Coastguard Worker do 2994*053f45beSAndroid Build Coastguard Worker log_start 2995*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} & 2996*053f45beSAndroid Build Coastguard Worker sleep 1 2997*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a} 2998*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local connection" 2999*053f45beSAndroid Build Coastguard Worker done 3000*053f45beSAndroid Build Coastguard Worker} 3001*053f45beSAndroid Build Coastguard Worker 3002*053f45beSAndroid Build Coastguard Workeripv6_tcp() 3003*053f45beSAndroid Build Coastguard Worker{ 3004*053f45beSAndroid Build Coastguard Worker log_section "IPv6/TCP" 3005*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 3006*053f45beSAndroid Build Coastguard Worker setup 3007*053f45beSAndroid Build Coastguard Worker 3008*053f45beSAndroid Build Coastguard Worker # tcp_l3mdev_accept should have no affect without VRF; 3009*053f45beSAndroid Build Coastguard Worker # run tests with it enabled and disabled to verify 3010*053f45beSAndroid Build Coastguard Worker log_subsection "tcp_l3mdev_accept disabled" 3011*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=0 3012*053f45beSAndroid Build Coastguard Worker ipv6_tcp_novrf 3013*053f45beSAndroid Build Coastguard Worker log_subsection "tcp_l3mdev_accept enabled" 3014*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.tcp_l3mdev_accept=1 3015*053f45beSAndroid Build Coastguard Worker ipv6_tcp_novrf 3016*053f45beSAndroid Build Coastguard Worker 3017*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 3018*053f45beSAndroid Build Coastguard Worker setup "yes" 3019*053f45beSAndroid Build Coastguard Worker ipv6_tcp_vrf 3020*053f45beSAndroid Build Coastguard Worker} 3021*053f45beSAndroid Build Coastguard Worker 3022*053f45beSAndroid Build Coastguard Worker################################################################################ 3023*053f45beSAndroid Build Coastguard Worker# IPv6 UDP 3024*053f45beSAndroid Build Coastguard Worker 3025*053f45beSAndroid Build Coastguard Workeripv6_udp_novrf() 3026*053f45beSAndroid Build Coastguard Worker{ 3027*053f45beSAndroid Build Coastguard Worker local a 3028*053f45beSAndroid Build Coastguard Worker 3029*053f45beSAndroid Build Coastguard Worker # 3030*053f45beSAndroid Build Coastguard Worker # server tests 3031*053f45beSAndroid Build Coastguard Worker # 3032*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV} 3033*053f45beSAndroid Build Coastguard Worker do 3034*053f45beSAndroid Build Coastguard Worker log_start 3035*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3036*053f45beSAndroid Build Coastguard Worker sleep 1 3037*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3038*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 3039*053f45beSAndroid Build Coastguard Worker 3040*053f45beSAndroid Build Coastguard Worker log_start 3041*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3042*053f45beSAndroid Build Coastguard Worker sleep 1 3043*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3044*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server" 3045*053f45beSAndroid Build Coastguard Worker done 3046*053f45beSAndroid Build Coastguard Worker 3047*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 3048*053f45beSAndroid Build Coastguard Worker log_start 3049*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3050*053f45beSAndroid Build Coastguard Worker sleep 1 3051*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3052*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 3053*053f45beSAndroid Build Coastguard Worker 3054*053f45beSAndroid Build Coastguard Worker # should fail since loopback address is out of scope for a device 3055*053f45beSAndroid Build Coastguard Worker # bound server, but it does not - hence this is more documenting 3056*053f45beSAndroid Build Coastguard Worker # behavior. 3057*053f45beSAndroid Build Coastguard Worker #log_start 3058*053f45beSAndroid Build Coastguard Worker #show_hint "Should fail since loopback address is out of scope" 3059*053f45beSAndroid Build Coastguard Worker #run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3060*053f45beSAndroid Build Coastguard Worker #sleep 1 3061*053f45beSAndroid Build Coastguard Worker #run_cmd_nsb nettest -6 -D -r ${a} 3062*053f45beSAndroid Build Coastguard Worker #log_test_addr ${a} $? 1 "Device server" 3063*053f45beSAndroid Build Coastguard Worker 3064*053f45beSAndroid Build Coastguard Worker # negative test - should fail 3065*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} 3066*053f45beSAndroid Build Coastguard Worker do 3067*053f45beSAndroid Build Coastguard Worker log_start 3068*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since there is no server" 3069*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3070*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 3071*053f45beSAndroid Build Coastguard Worker done 3072*053f45beSAndroid Build Coastguard Worker 3073*053f45beSAndroid Build Coastguard Worker # 3074*053f45beSAndroid Build Coastguard Worker # client 3075*053f45beSAndroid Build Coastguard Worker # 3076*053f45beSAndroid Build Coastguard Worker for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} 3077*053f45beSAndroid Build Coastguard Worker do 3078*053f45beSAndroid Build Coastguard Worker log_start 3079*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3080*053f45beSAndroid Build Coastguard Worker sleep 1 3081*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -0 ${NSA_IP6} 3082*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client" 3083*053f45beSAndroid Build Coastguard Worker 3084*053f45beSAndroid Build Coastguard Worker log_start 3085*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3086*053f45beSAndroid Build Coastguard Worker sleep 1 3087*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP6} 3088*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind" 3089*053f45beSAndroid Build Coastguard Worker 3090*053f45beSAndroid Build Coastguard Worker log_start 3091*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3092*053f45beSAndroid Build Coastguard Worker sleep 1 3093*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP6} 3094*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device send via cmsg" 3095*053f45beSAndroid Build Coastguard Worker 3096*053f45beSAndroid Build Coastguard Worker log_start 3097*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3098*053f45beSAndroid Build Coastguard Worker sleep 1 3099*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP6} 3100*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Client, device bind via IPV6_UNICAST_IF" 3101*053f45beSAndroid Build Coastguard Worker 3102*053f45beSAndroid Build Coastguard Worker log_start 3103*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 3104*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} 3105*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, unbound client" 3106*053f45beSAndroid Build Coastguard Worker 3107*053f45beSAndroid Build Coastguard Worker log_start 3108*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 3109*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} 3110*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client" 3111*053f45beSAndroid Build Coastguard Worker done 3112*053f45beSAndroid Build Coastguard Worker 3113*053f45beSAndroid Build Coastguard Worker # 3114*053f45beSAndroid Build Coastguard Worker # local address tests 3115*053f45beSAndroid Build Coastguard Worker # 3116*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 3117*053f45beSAndroid Build Coastguard Worker do 3118*053f45beSAndroid Build Coastguard Worker log_start 3119*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3120*053f45beSAndroid Build Coastguard Worker sleep 1 3121*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -0 ${a} -1 ${a} 3122*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, local connection" 3123*053f45beSAndroid Build Coastguard Worker done 3124*053f45beSAndroid Build Coastguard Worker 3125*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3126*053f45beSAndroid Build Coastguard Worker log_start 3127*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D -I ${NSA_DEV} -3 ${NSA_DEV} & 3128*053f45beSAndroid Build Coastguard Worker sleep 1 3129*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} 3130*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, unbound client, local connection" 3131*053f45beSAndroid Build Coastguard Worker 3132*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP6} ::1 3133*053f45beSAndroid Build Coastguard Worker do 3134*053f45beSAndroid Build Coastguard Worker log_start 3135*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since address is out of device scope" 3136*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D -I ${NSA_DEV} & 3137*053f45beSAndroid Build Coastguard Worker sleep 1 3138*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} 3139*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Device server, local connection" 3140*053f45beSAndroid Build Coastguard Worker done 3141*053f45beSAndroid Build Coastguard Worker 3142*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3143*053f45beSAndroid Build Coastguard Worker log_start 3144*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D & 3145*053f45beSAndroid Build Coastguard Worker sleep 1 3146*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3147*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client, local connection" 3148*053f45beSAndroid Build Coastguard Worker 3149*053f45beSAndroid Build Coastguard Worker log_start 3150*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D & 3151*053f45beSAndroid Build Coastguard Worker sleep 1 3152*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -C -r ${a} 3153*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection" 3154*053f45beSAndroid Build Coastguard Worker 3155*053f45beSAndroid Build Coastguard Worker log_start 3156*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D & 3157*053f45beSAndroid Build Coastguard Worker sleep 1 3158*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -S -r ${a} 3159*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client via IPV6_UNICAST_IF, local connection" 3160*053f45beSAndroid Build Coastguard Worker 3161*053f45beSAndroid Build Coastguard Worker for a in ${NSA_LO_IP6} ::1 3162*053f45beSAndroid Build Coastguard Worker do 3163*053f45beSAndroid Build Coastguard Worker log_start 3164*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope" 3165*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3166*053f45beSAndroid Build Coastguard Worker sleep 1 3167*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} 3168*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client, local connection" 3169*053f45beSAndroid Build Coastguard Worker 3170*053f45beSAndroid Build Coastguard Worker log_start 3171*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope" 3172*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3173*053f45beSAndroid Build Coastguard Worker sleep 1 3174*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C 3175*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection" 3176*053f45beSAndroid Build Coastguard Worker 3177*053f45beSAndroid Build Coastguard Worker log_start 3178*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope" 3179*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3180*053f45beSAndroid Build Coastguard Worker sleep 1 3181*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S 3182*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection" 3183*053f45beSAndroid Build Coastguard Worker 3184*053f45beSAndroid Build Coastguard Worker log_start 3185*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope" 3186*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3187*053f45beSAndroid Build Coastguard Worker sleep 1 3188*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -U 3189*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection, with connect()" 3190*053f45beSAndroid Build Coastguard Worker done 3191*053f45beSAndroid Build Coastguard Worker 3192*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3193*053f45beSAndroid Build Coastguard Worker log_start 3194*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -I ${NSA_DEV} -3 ${NSA_DEV} & 3195*053f45beSAndroid Build Coastguard Worker sleep 1 3196*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} -0 ${a} 3197*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local conn" 3198*053f45beSAndroid Build Coastguard Worker 3199*053f45beSAndroid Build Coastguard Worker log_start 3200*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused'" 3201*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3202*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client, local conn" 3203*053f45beSAndroid Build Coastguard Worker 3204*053f45beSAndroid Build Coastguard Worker # LLA to GUA 3205*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV} 3206*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV} 3207*053f45beSAndroid Build Coastguard Worker log_start 3208*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D & 3209*053f45beSAndroid Build Coastguard Worker sleep 1 3210*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${NSA_IP6} 3211*053f45beSAndroid Build Coastguard Worker log_test $? 0 "UDP in - LLA to GUA" 3212*053f45beSAndroid Build Coastguard Worker 3213*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV} 3214*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad 3215*053f45beSAndroid Build Coastguard Worker} 3216*053f45beSAndroid Build Coastguard Worker 3217*053f45beSAndroid Build Coastguard Workeripv6_udp_vrf() 3218*053f45beSAndroid Build Coastguard Worker{ 3219*053f45beSAndroid Build Coastguard Worker local a 3220*053f45beSAndroid Build Coastguard Worker 3221*053f45beSAndroid Build Coastguard Worker # disable global server 3222*053f45beSAndroid Build Coastguard Worker log_subsection "Global server disabled" 3223*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=0 3224*053f45beSAndroid Build Coastguard Worker 3225*053f45beSAndroid Build Coastguard Worker # 3226*053f45beSAndroid Build Coastguard Worker # server tests 3227*053f45beSAndroid Build Coastguard Worker # 3228*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3229*053f45beSAndroid Build Coastguard Worker do 3230*053f45beSAndroid Build Coastguard Worker log_start 3231*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server is disabled" 3232*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3233*053f45beSAndroid Build Coastguard Worker sleep 1 3234*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3235*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server" 3236*053f45beSAndroid Build Coastguard Worker done 3237*053f45beSAndroid Build Coastguard Worker 3238*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3239*053f45beSAndroid Build Coastguard Worker do 3240*053f45beSAndroid Build Coastguard Worker log_start 3241*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3242*053f45beSAndroid Build Coastguard Worker sleep 1 3243*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3244*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 3245*053f45beSAndroid Build Coastguard Worker done 3246*053f45beSAndroid Build Coastguard Worker 3247*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3248*053f45beSAndroid Build Coastguard Worker do 3249*053f45beSAndroid Build Coastguard Worker log_start 3250*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3251*053f45beSAndroid Build Coastguard Worker sleep 1 3252*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3253*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server" 3254*053f45beSAndroid Build Coastguard Worker done 3255*053f45beSAndroid Build Coastguard Worker 3256*053f45beSAndroid Build Coastguard Worker # negative test - should fail 3257*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3258*053f45beSAndroid Build Coastguard Worker do 3259*053f45beSAndroid Build Coastguard Worker log_start 3260*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since there is no server" 3261*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3262*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 3263*053f45beSAndroid Build Coastguard Worker done 3264*053f45beSAndroid Build Coastguard Worker 3265*053f45beSAndroid Build Coastguard Worker # 3266*053f45beSAndroid Build Coastguard Worker # local address tests 3267*053f45beSAndroid Build Coastguard Worker # 3268*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3269*053f45beSAndroid Build Coastguard Worker do 3270*053f45beSAndroid Build Coastguard Worker log_start 3271*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server is disabled" 3272*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3273*053f45beSAndroid Build Coastguard Worker sleep 1 3274*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3275*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, VRF client, local conn" 3276*053f45beSAndroid Build Coastguard Worker done 3277*053f45beSAndroid Build Coastguard Worker 3278*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3279*053f45beSAndroid Build Coastguard Worker do 3280*053f45beSAndroid Build Coastguard Worker log_start 3281*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s & 3282*053f45beSAndroid Build Coastguard Worker sleep 1 3283*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3284*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 3285*053f45beSAndroid Build Coastguard Worker done 3286*053f45beSAndroid Build Coastguard Worker 3287*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3288*053f45beSAndroid Build Coastguard Worker log_start 3289*053f45beSAndroid Build Coastguard Worker show_hint "Should fail 'Connection refused' since global server is disabled" 3290*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3291*053f45beSAndroid Build Coastguard Worker sleep 1 3292*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3293*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, device client, local conn" 3294*053f45beSAndroid Build Coastguard Worker 3295*053f45beSAndroid Build Coastguard Worker log_start 3296*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3297*053f45beSAndroid Build Coastguard Worker sleep 1 3298*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3299*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, device client, local conn" 3300*053f45beSAndroid Build Coastguard Worker 3301*053f45beSAndroid Build Coastguard Worker log_start 3302*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3303*053f45beSAndroid Build Coastguard Worker sleep 1 3304*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3305*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn" 3306*053f45beSAndroid Build Coastguard Worker 3307*053f45beSAndroid Build Coastguard Worker log_start 3308*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3309*053f45beSAndroid Build Coastguard Worker sleep 1 3310*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3311*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn" 3312*053f45beSAndroid Build Coastguard Worker 3313*053f45beSAndroid Build Coastguard Worker # disable global server 3314*053f45beSAndroid Build Coastguard Worker log_subsection "Global server enabled" 3315*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=1 3316*053f45beSAndroid Build Coastguard Worker 3317*053f45beSAndroid Build Coastguard Worker # 3318*053f45beSAndroid Build Coastguard Worker # server tests 3319*053f45beSAndroid Build Coastguard Worker # 3320*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3321*053f45beSAndroid Build Coastguard Worker do 3322*053f45beSAndroid Build Coastguard Worker log_start 3323*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3324*053f45beSAndroid Build Coastguard Worker sleep 1 3325*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3326*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server" 3327*053f45beSAndroid Build Coastguard Worker done 3328*053f45beSAndroid Build Coastguard Worker 3329*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3330*053f45beSAndroid Build Coastguard Worker do 3331*053f45beSAndroid Build Coastguard Worker log_start 3332*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3333*053f45beSAndroid Build Coastguard Worker sleep 1 3334*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3335*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server" 3336*053f45beSAndroid Build Coastguard Worker done 3337*053f45beSAndroid Build Coastguard Worker 3338*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3339*053f45beSAndroid Build Coastguard Worker do 3340*053f45beSAndroid Build Coastguard Worker log_start 3341*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3342*053f45beSAndroid Build Coastguard Worker sleep 1 3343*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3344*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Enslaved device server" 3345*053f45beSAndroid Build Coastguard Worker done 3346*053f45beSAndroid Build Coastguard Worker 3347*053f45beSAndroid Build Coastguard Worker # negative test - should fail 3348*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3349*053f45beSAndroid Build Coastguard Worker do 3350*053f45beSAndroid Build Coastguard Worker log_start 3351*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${a} 3352*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server" 3353*053f45beSAndroid Build Coastguard Worker done 3354*053f45beSAndroid Build Coastguard Worker 3355*053f45beSAndroid Build Coastguard Worker # 3356*053f45beSAndroid Build Coastguard Worker # client tests 3357*053f45beSAndroid Build Coastguard Worker # 3358*053f45beSAndroid Build Coastguard Worker log_start 3359*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3360*053f45beSAndroid Build Coastguard Worker sleep 1 3361*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6} 3362*053f45beSAndroid Build Coastguard Worker log_test $? 0 "VRF client" 3363*053f45beSAndroid Build Coastguard Worker 3364*053f45beSAndroid Build Coastguard Worker # negative test - should fail 3365*053f45beSAndroid Build Coastguard Worker log_start 3366*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6} 3367*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, VRF client" 3368*053f45beSAndroid Build Coastguard Worker 3369*053f45beSAndroid Build Coastguard Worker log_start 3370*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3371*053f45beSAndroid Build Coastguard Worker sleep 1 3372*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6} 3373*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Enslaved device client" 3374*053f45beSAndroid Build Coastguard Worker 3375*053f45beSAndroid Build Coastguard Worker # negative test - should fail 3376*053f45beSAndroid Build Coastguard Worker log_start 3377*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6} 3378*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, enslaved device client" 3379*053f45beSAndroid Build Coastguard Worker 3380*053f45beSAndroid Build Coastguard Worker # 3381*053f45beSAndroid Build Coastguard Worker # local address tests 3382*053f45beSAndroid Build Coastguard Worker # 3383*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3384*053f45beSAndroid Build Coastguard Worker log_start 3385*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3386*053f45beSAndroid Build Coastguard Worker sleep 1 3387*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3388*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 3389*053f45beSAndroid Build Coastguard Worker 3390*053f45beSAndroid Build Coastguard Worker #log_start 3391*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3392*053f45beSAndroid Build Coastguard Worker sleep 1 3393*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3394*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 3395*053f45beSAndroid Build Coastguard Worker 3396*053f45beSAndroid Build Coastguard Worker 3397*053f45beSAndroid Build Coastguard Worker a=${VRF_IP6} 3398*053f45beSAndroid Build Coastguard Worker log_start 3399*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -3 ${VRF} & 3400*053f45beSAndroid Build Coastguard Worker sleep 1 3401*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3402*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, VRF client, local conn" 3403*053f45beSAndroid Build Coastguard Worker 3404*053f45beSAndroid Build Coastguard Worker log_start 3405*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s -3 ${VRF} & 3406*053f45beSAndroid Build Coastguard Worker sleep 1 3407*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3408*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, VRF client, local conn" 3409*053f45beSAndroid Build Coastguard Worker 3410*053f45beSAndroid Build Coastguard Worker # negative test - should fail 3411*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3412*053f45beSAndroid Build Coastguard Worker do 3413*053f45beSAndroid Build Coastguard Worker log_start 3414*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3415*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, VRF client, local conn" 3416*053f45beSAndroid Build Coastguard Worker done 3417*053f45beSAndroid Build Coastguard Worker 3418*053f45beSAndroid Build Coastguard Worker # device to global IP 3419*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3420*053f45beSAndroid Build Coastguard Worker log_start 3421*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s -3 ${NSA_DEV} & 3422*053f45beSAndroid Build Coastguard Worker sleep 1 3423*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3424*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Global server, device client, local conn" 3425*053f45beSAndroid Build Coastguard Worker 3426*053f45beSAndroid Build Coastguard Worker log_start 3427*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} & 3428*053f45beSAndroid Build Coastguard Worker sleep 1 3429*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3430*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "VRF server, device client, local conn" 3431*053f45beSAndroid Build Coastguard Worker 3432*053f45beSAndroid Build Coastguard Worker log_start 3433*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3434*053f45beSAndroid Build Coastguard Worker sleep 1 3435*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${VRF} -r ${a} 3436*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, VRF client, local conn" 3437*053f45beSAndroid Build Coastguard Worker 3438*053f45beSAndroid Build Coastguard Worker log_start 3439*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} & 3440*053f45beSAndroid Build Coastguard Worker sleep 1 3441*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3442*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Device server, device client, local conn" 3443*053f45beSAndroid Build Coastguard Worker 3444*053f45beSAndroid Build Coastguard Worker log_start 3445*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} 3446*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "No server, device client, local conn" 3447*053f45beSAndroid Build Coastguard Worker 3448*053f45beSAndroid Build Coastguard Worker 3449*053f45beSAndroid Build Coastguard Worker # link local addresses 3450*053f45beSAndroid Build Coastguard Worker log_start 3451*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3452*053f45beSAndroid Build Coastguard Worker sleep 1 3453*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6} 3454*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Global server, linklocal IP" 3455*053f45beSAndroid Build Coastguard Worker 3456*053f45beSAndroid Build Coastguard Worker log_start 3457*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6} 3458*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, linklocal IP" 3459*053f45beSAndroid Build Coastguard Worker 3460*053f45beSAndroid Build Coastguard Worker 3461*053f45beSAndroid Build Coastguard Worker log_start 3462*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -s & 3463*053f45beSAndroid Build Coastguard Worker sleep 1 3464*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6} 3465*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Enslaved device client, linklocal IP" 3466*053f45beSAndroid Build Coastguard Worker 3467*053f45beSAndroid Build Coastguard Worker log_start 3468*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6} 3469*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, device client, peer linklocal IP" 3470*053f45beSAndroid Build Coastguard Worker 3471*053f45beSAndroid Build Coastguard Worker 3472*053f45beSAndroid Build Coastguard Worker log_start 3473*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -s & 3474*053f45beSAndroid Build Coastguard Worker sleep 1 3475*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6} 3476*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Enslaved device client, local conn - linklocal IP" 3477*053f45beSAndroid Build Coastguard Worker 3478*053f45beSAndroid Build Coastguard Worker log_start 3479*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6} 3480*053f45beSAndroid Build Coastguard Worker log_test $? 1 "No server, device client, local conn - linklocal IP" 3481*053f45beSAndroid Build Coastguard Worker 3482*053f45beSAndroid Build Coastguard Worker # LLA to GUA 3483*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV} 3484*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV} 3485*053f45beSAndroid Build Coastguard Worker log_start 3486*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -D & 3487*053f45beSAndroid Build Coastguard Worker sleep 1 3488*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -D -r ${NSA_IP6} 3489*053f45beSAndroid Build Coastguard Worker log_test $? 0 "UDP in - LLA to GUA" 3490*053f45beSAndroid Build Coastguard Worker 3491*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV} 3492*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad 3493*053f45beSAndroid Build Coastguard Worker} 3494*053f45beSAndroid Build Coastguard Worker 3495*053f45beSAndroid Build Coastguard Workeripv6_udp() 3496*053f45beSAndroid Build Coastguard Worker{ 3497*053f45beSAndroid Build Coastguard Worker # should not matter, but set to known state 3498*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_early_demux=1 3499*053f45beSAndroid Build Coastguard Worker 3500*053f45beSAndroid Build Coastguard Worker log_section "IPv6/UDP" 3501*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 3502*053f45beSAndroid Build Coastguard Worker setup 3503*053f45beSAndroid Build Coastguard Worker 3504*053f45beSAndroid Build Coastguard Worker # udp_l3mdev_accept should have no affect without VRF; 3505*053f45beSAndroid Build Coastguard Worker # run tests with it enabled and disabled to verify 3506*053f45beSAndroid Build Coastguard Worker log_subsection "udp_l3mdev_accept disabled" 3507*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=0 3508*053f45beSAndroid Build Coastguard Worker ipv6_udp_novrf 3509*053f45beSAndroid Build Coastguard Worker log_subsection "udp_l3mdev_accept enabled" 3510*053f45beSAndroid Build Coastguard Worker set_sysctl net.ipv4.udp_l3mdev_accept=1 3511*053f45beSAndroid Build Coastguard Worker ipv6_udp_novrf 3512*053f45beSAndroid Build Coastguard Worker 3513*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 3514*053f45beSAndroid Build Coastguard Worker setup "yes" 3515*053f45beSAndroid Build Coastguard Worker ipv6_udp_vrf 3516*053f45beSAndroid Build Coastguard Worker} 3517*053f45beSAndroid Build Coastguard Worker 3518*053f45beSAndroid Build Coastguard Worker################################################################################ 3519*053f45beSAndroid Build Coastguard Worker# IPv6 address bind 3520*053f45beSAndroid Build Coastguard Worker 3521*053f45beSAndroid Build Coastguard Workeripv6_addr_bind_novrf() 3522*053f45beSAndroid Build Coastguard Worker{ 3523*053f45beSAndroid Build Coastguard Worker # 3524*053f45beSAndroid Build Coastguard Worker # raw socket 3525*053f45beSAndroid Build Coastguard Worker # 3526*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${NSA_LO_IP6} 3527*053f45beSAndroid Build Coastguard Worker do 3528*053f45beSAndroid Build Coastguard Worker log_start 3529*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -b 3530*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address" 3531*053f45beSAndroid Build Coastguard Worker 3532*053f45beSAndroid Build Coastguard Worker log_start 3533*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b 3534*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 3535*053f45beSAndroid Build Coastguard Worker done 3536*053f45beSAndroid Build Coastguard Worker 3537*053f45beSAndroid Build Coastguard Worker # 3538*053f45beSAndroid Build Coastguard Worker # raw socket with nonlocal bind 3539*053f45beSAndroid Build Coastguard Worker # 3540*053f45beSAndroid Build Coastguard Worker a=${NL_IP6} 3541*053f45beSAndroid Build Coastguard Worker log_start 3542*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${NSA_DEV} -b 3543*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address" 3544*053f45beSAndroid Build Coastguard Worker 3545*053f45beSAndroid Build Coastguard Worker # 3546*053f45beSAndroid Build Coastguard Worker # tcp sockets 3547*053f45beSAndroid Build Coastguard Worker # 3548*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3549*053f45beSAndroid Build Coastguard Worker log_start 3550*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -t1 -b 3551*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address" 3552*053f45beSAndroid Build Coastguard Worker 3553*053f45beSAndroid Build Coastguard Worker log_start 3554*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3555*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 3556*053f45beSAndroid Build Coastguard Worker 3557*053f45beSAndroid Build Coastguard Worker # Sadly, the kernel allows binding a socket to a device and then 3558*053f45beSAndroid Build Coastguard Worker # binding to an address not on the device. So this test passes 3559*053f45beSAndroid Build Coastguard Worker # when it really should not 3560*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 3561*053f45beSAndroid Build Coastguard Worker log_start 3562*053f45beSAndroid Build Coastguard Worker show_hint "Tecnically should fail since address is not on device but kernel allows" 3563*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3564*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to out of scope local address" 3565*053f45beSAndroid Build Coastguard Worker} 3566*053f45beSAndroid Build Coastguard Worker 3567*053f45beSAndroid Build Coastguard Workeripv6_addr_bind_vrf() 3568*053f45beSAndroid Build Coastguard Worker{ 3569*053f45beSAndroid Build Coastguard Worker # 3570*053f45beSAndroid Build Coastguard Worker # raw socket 3571*053f45beSAndroid Build Coastguard Worker # 3572*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3573*053f45beSAndroid Build Coastguard Worker do 3574*053f45beSAndroid Build Coastguard Worker log_start 3575*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b 3576*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address after vrf bind" 3577*053f45beSAndroid Build Coastguard Worker 3578*053f45beSAndroid Build Coastguard Worker log_start 3579*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b 3580*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind" 3581*053f45beSAndroid Build Coastguard Worker done 3582*053f45beSAndroid Build Coastguard Worker 3583*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 3584*053f45beSAndroid Build Coastguard Worker log_start 3585*053f45beSAndroid Build Coastguard Worker show_hint "Address on loopback is out of VRF scope" 3586*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b 3587*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Raw socket bind to invalid local address after vrf bind" 3588*053f45beSAndroid Build Coastguard Worker 3589*053f45beSAndroid Build Coastguard Worker # 3590*053f45beSAndroid Build Coastguard Worker # raw socket with nonlocal bind 3591*053f45beSAndroid Build Coastguard Worker # 3592*053f45beSAndroid Build Coastguard Worker a=${NL_IP6} 3593*053f45beSAndroid Build Coastguard Worker log_start 3594*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${VRF} -b 3595*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind" 3596*053f45beSAndroid Build Coastguard Worker 3597*053f45beSAndroid Build Coastguard Worker # 3598*053f45beSAndroid Build Coastguard Worker # tcp sockets 3599*053f45beSAndroid Build Coastguard Worker # 3600*053f45beSAndroid Build Coastguard Worker # address on enslaved device is valid for the VRF or device in a VRF 3601*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3602*053f45beSAndroid Build Coastguard Worker do 3603*053f45beSAndroid Build Coastguard Worker log_start 3604*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b 3605*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address with VRF bind" 3606*053f45beSAndroid Build Coastguard Worker done 3607*053f45beSAndroid Build Coastguard Worker 3608*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3609*053f45beSAndroid Build Coastguard Worker log_start 3610*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3611*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind" 3612*053f45beSAndroid Build Coastguard Worker 3613*053f45beSAndroid Build Coastguard Worker # Sadly, the kernel allows binding a socket to a device and then 3614*053f45beSAndroid Build Coastguard Worker # binding to an address not on the device. The only restriction 3615*053f45beSAndroid Build Coastguard Worker # is that the address is valid in the L3 domain. So this test 3616*053f45beSAndroid Build Coastguard Worker # passes when it really should not 3617*053f45beSAndroid Build Coastguard Worker a=${VRF_IP6} 3618*053f45beSAndroid Build Coastguard Worker log_start 3619*053f45beSAndroid Build Coastguard Worker show_hint "Tecnically should fail since address is not on device but kernel allows" 3620*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3621*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 0 "TCP socket bind to VRF address with device bind" 3622*053f45beSAndroid Build Coastguard Worker 3623*053f45beSAndroid Build Coastguard Worker a=${NSA_LO_IP6} 3624*053f45beSAndroid Build Coastguard Worker log_start 3625*053f45beSAndroid Build Coastguard Worker show_hint "Address on loopback out of scope for VRF" 3626*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b 3627*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF" 3628*053f45beSAndroid Build Coastguard Worker 3629*053f45beSAndroid Build Coastguard Worker log_start 3630*053f45beSAndroid Build Coastguard Worker show_hint "Address on loopback out of scope for device in VRF" 3631*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3632*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind" 3633*053f45beSAndroid Build Coastguard Worker 3634*053f45beSAndroid Build Coastguard Worker} 3635*053f45beSAndroid Build Coastguard Worker 3636*053f45beSAndroid Build Coastguard Workeripv6_addr_bind() 3637*053f45beSAndroid Build Coastguard Worker{ 3638*053f45beSAndroid Build Coastguard Worker log_section "IPv6 address binds" 3639*053f45beSAndroid Build Coastguard Worker 3640*053f45beSAndroid Build Coastguard Worker log_subsection "No VRF" 3641*053f45beSAndroid Build Coastguard Worker setup 3642*053f45beSAndroid Build Coastguard Worker ipv6_addr_bind_novrf 3643*053f45beSAndroid Build Coastguard Worker 3644*053f45beSAndroid Build Coastguard Worker log_subsection "With VRF" 3645*053f45beSAndroid Build Coastguard Worker setup "yes" 3646*053f45beSAndroid Build Coastguard Worker ipv6_addr_bind_vrf 3647*053f45beSAndroid Build Coastguard Worker} 3648*053f45beSAndroid Build Coastguard Worker 3649*053f45beSAndroid Build Coastguard Worker################################################################################ 3650*053f45beSAndroid Build Coastguard Worker# IPv6 runtime tests 3651*053f45beSAndroid Build Coastguard Worker 3652*053f45beSAndroid Build Coastguard Workeripv6_rt() 3653*053f45beSAndroid Build Coastguard Worker{ 3654*053f45beSAndroid Build Coastguard Worker local desc="$1" 3655*053f45beSAndroid Build Coastguard Worker local varg="-6 $2" 3656*053f45beSAndroid Build Coastguard Worker local with_vrf="yes" 3657*053f45beSAndroid Build Coastguard Worker local a 3658*053f45beSAndroid Build Coastguard Worker 3659*053f45beSAndroid Build Coastguard Worker # 3660*053f45beSAndroid Build Coastguard Worker # server tests 3661*053f45beSAndroid Build Coastguard Worker # 3662*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3663*053f45beSAndroid Build Coastguard Worker do 3664*053f45beSAndroid Build Coastguard Worker log_start 3665*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s & 3666*053f45beSAndroid Build Coastguard Worker sleep 1 3667*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -r ${a} & 3668*053f45beSAndroid Build Coastguard Worker sleep 3 3669*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3670*053f45beSAndroid Build Coastguard Worker sleep 1 3671*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, global server" 3672*053f45beSAndroid Build Coastguard Worker 3673*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3674*053f45beSAndroid Build Coastguard Worker done 3675*053f45beSAndroid Build Coastguard Worker 3676*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3677*053f45beSAndroid Build Coastguard Worker do 3678*053f45beSAndroid Build Coastguard Worker log_start 3679*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${VRF} -s & 3680*053f45beSAndroid Build Coastguard Worker sleep 1 3681*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -r ${a} & 3682*053f45beSAndroid Build Coastguard Worker sleep 3 3683*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3684*053f45beSAndroid Build Coastguard Worker sleep 1 3685*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF server" 3686*053f45beSAndroid Build Coastguard Worker 3687*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3688*053f45beSAndroid Build Coastguard Worker done 3689*053f45beSAndroid Build Coastguard Worker 3690*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3691*053f45beSAndroid Build Coastguard Worker do 3692*053f45beSAndroid Build Coastguard Worker log_start 3693*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${NSA_DEV} -s & 3694*053f45beSAndroid Build Coastguard Worker sleep 1 3695*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -r ${a} & 3696*053f45beSAndroid Build Coastguard Worker sleep 3 3697*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3698*053f45beSAndroid Build Coastguard Worker sleep 1 3699*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, enslaved device server" 3700*053f45beSAndroid Build Coastguard Worker 3701*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3702*053f45beSAndroid Build Coastguard Worker done 3703*053f45beSAndroid Build Coastguard Worker 3704*053f45beSAndroid Build Coastguard Worker # 3705*053f45beSAndroid Build Coastguard Worker # client test 3706*053f45beSAndroid Build Coastguard Worker # 3707*053f45beSAndroid Build Coastguard Worker log_start 3708*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -s & 3709*053f45beSAndroid Build Coastguard Worker sleep 1 3710*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP6} & 3711*053f45beSAndroid Build Coastguard Worker sleep 3 3712*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3713*053f45beSAndroid Build Coastguard Worker sleep 1 3714*053f45beSAndroid Build Coastguard Worker log_test 0 0 "${desc}, VRF client" 3715*053f45beSAndroid Build Coastguard Worker 3716*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3717*053f45beSAndroid Build Coastguard Worker 3718*053f45beSAndroid Build Coastguard Worker log_start 3719*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${varg} -s & 3720*053f45beSAndroid Build Coastguard Worker sleep 1 3721*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP6} & 3722*053f45beSAndroid Build Coastguard Worker sleep 3 3723*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3724*053f45beSAndroid Build Coastguard Worker sleep 1 3725*053f45beSAndroid Build Coastguard Worker log_test 0 0 "${desc}, enslaved device client" 3726*053f45beSAndroid Build Coastguard Worker 3727*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3728*053f45beSAndroid Build Coastguard Worker 3729*053f45beSAndroid Build Coastguard Worker 3730*053f45beSAndroid Build Coastguard Worker # 3731*053f45beSAndroid Build Coastguard Worker # local address tests 3732*053f45beSAndroid Build Coastguard Worker # 3733*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3734*053f45beSAndroid Build Coastguard Worker do 3735*053f45beSAndroid Build Coastguard Worker log_start 3736*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s & 3737*053f45beSAndroid Build Coastguard Worker sleep 1 3738*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${VRF} -r ${a} & 3739*053f45beSAndroid Build Coastguard Worker sleep 3 3740*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3741*053f45beSAndroid Build Coastguard Worker sleep 1 3742*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, global server, VRF client" 3743*053f45beSAndroid Build Coastguard Worker 3744*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3745*053f45beSAndroid Build Coastguard Worker done 3746*053f45beSAndroid Build Coastguard Worker 3747*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3748*053f45beSAndroid Build Coastguard Worker do 3749*053f45beSAndroid Build Coastguard Worker log_start 3750*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${VRF} -s & 3751*053f45beSAndroid Build Coastguard Worker sleep 1 3752*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${VRF} -r ${a} & 3753*053f45beSAndroid Build Coastguard Worker sleep 3 3754*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3755*053f45beSAndroid Build Coastguard Worker sleep 1 3756*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF server and client" 3757*053f45beSAndroid Build Coastguard Worker 3758*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3759*053f45beSAndroid Build Coastguard Worker done 3760*053f45beSAndroid Build Coastguard Worker 3761*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3762*053f45beSAndroid Build Coastguard Worker log_start 3763*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -s & 3764*053f45beSAndroid Build Coastguard Worker sleep 1 3765*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 3766*053f45beSAndroid Build Coastguard Worker sleep 3 3767*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3768*053f45beSAndroid Build Coastguard Worker sleep 1 3769*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, global server, device client" 3770*053f45beSAndroid Build Coastguard Worker 3771*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3772*053f45beSAndroid Build Coastguard Worker 3773*053f45beSAndroid Build Coastguard Worker log_start 3774*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${VRF} -s & 3775*053f45beSAndroid Build Coastguard Worker sleep 1 3776*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 3777*053f45beSAndroid Build Coastguard Worker sleep 3 3778*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3779*053f45beSAndroid Build Coastguard Worker sleep 1 3780*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, VRF server, device client" 3781*053f45beSAndroid Build Coastguard Worker 3782*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3783*053f45beSAndroid Build Coastguard Worker 3784*053f45beSAndroid Build Coastguard Worker log_start 3785*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -I ${NSA_DEV} -s & 3786*053f45beSAndroid Build Coastguard Worker sleep 1 3787*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} & 3788*053f45beSAndroid Build Coastguard Worker sleep 3 3789*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3790*053f45beSAndroid Build Coastguard Worker sleep 1 3791*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "${desc}, device server, device client" 3792*053f45beSAndroid Build Coastguard Worker} 3793*053f45beSAndroid Build Coastguard Worker 3794*053f45beSAndroid Build Coastguard Workeripv6_ping_rt() 3795*053f45beSAndroid Build Coastguard Worker{ 3796*053f45beSAndroid Build Coastguard Worker local with_vrf="yes" 3797*053f45beSAndroid Build Coastguard Worker local a 3798*053f45beSAndroid Build Coastguard Worker 3799*053f45beSAndroid Build Coastguard Worker a=${NSA_IP6} 3800*053f45beSAndroid Build Coastguard Worker log_start 3801*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -f ${a} & 3802*053f45beSAndroid Build Coastguard Worker sleep 3 3803*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3804*053f45beSAndroid Build Coastguard Worker sleep 1 3805*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "Device delete with active traffic - ping in" 3806*053f45beSAndroid Build Coastguard Worker 3807*053f45beSAndroid Build Coastguard Worker setup ${with_vrf} 3808*053f45beSAndroid Build Coastguard Worker 3809*053f45beSAndroid Build Coastguard Worker log_start 3810*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -f ${NSB_IP6} -I ${VRF} & 3811*053f45beSAndroid Build Coastguard Worker sleep 1 3812*053f45beSAndroid Build Coastguard Worker run_cmd ip link del ${VRF} 3813*053f45beSAndroid Build Coastguard Worker sleep 1 3814*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} 0 0 "Device delete with active traffic - ping out" 3815*053f45beSAndroid Build Coastguard Worker} 3816*053f45beSAndroid Build Coastguard Worker 3817*053f45beSAndroid Build Coastguard Workeripv6_runtime() 3818*053f45beSAndroid Build Coastguard Worker{ 3819*053f45beSAndroid Build Coastguard Worker log_section "Run time tests - ipv6" 3820*053f45beSAndroid Build Coastguard Worker 3821*053f45beSAndroid Build Coastguard Worker setup "yes" 3822*053f45beSAndroid Build Coastguard Worker ipv6_ping_rt 3823*053f45beSAndroid Build Coastguard Worker 3824*053f45beSAndroid Build Coastguard Worker setup "yes" 3825*053f45beSAndroid Build Coastguard Worker ipv6_rt "TCP active socket" "-n -1" 3826*053f45beSAndroid Build Coastguard Worker 3827*053f45beSAndroid Build Coastguard Worker setup "yes" 3828*053f45beSAndroid Build Coastguard Worker ipv6_rt "TCP passive socket" "-i" 3829*053f45beSAndroid Build Coastguard Worker 3830*053f45beSAndroid Build Coastguard Worker setup "yes" 3831*053f45beSAndroid Build Coastguard Worker ipv6_rt "UDP active socket" "-D -n -1" 3832*053f45beSAndroid Build Coastguard Worker} 3833*053f45beSAndroid Build Coastguard Worker 3834*053f45beSAndroid Build Coastguard Worker################################################################################ 3835*053f45beSAndroid Build Coastguard Worker# netfilter blocking connections 3836*053f45beSAndroid Build Coastguard Worker 3837*053f45beSAndroid Build Coastguard Workernetfilter_tcp_reset() 3838*053f45beSAndroid Build Coastguard Worker{ 3839*053f45beSAndroid Build Coastguard Worker local a 3840*053f45beSAndroid Build Coastguard Worker 3841*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 3842*053f45beSAndroid Build Coastguard Worker do 3843*053f45beSAndroid Build Coastguard Worker log_start 3844*053f45beSAndroid Build Coastguard Worker run_cmd nettest -s & 3845*053f45beSAndroid Build Coastguard Worker sleep 1 3846*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -r ${a} 3847*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx" 3848*053f45beSAndroid Build Coastguard Worker done 3849*053f45beSAndroid Build Coastguard Worker} 3850*053f45beSAndroid Build Coastguard Worker 3851*053f45beSAndroid Build Coastguard Workernetfilter_icmp() 3852*053f45beSAndroid Build Coastguard Worker{ 3853*053f45beSAndroid Build Coastguard Worker local stype="$1" 3854*053f45beSAndroid Build Coastguard Worker local arg 3855*053f45beSAndroid Build Coastguard Worker local a 3856*053f45beSAndroid Build Coastguard Worker 3857*053f45beSAndroid Build Coastguard Worker [ "${stype}" = "UDP" ] && arg="-D" 3858*053f45beSAndroid Build Coastguard Worker 3859*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP} ${VRF_IP} 3860*053f45beSAndroid Build Coastguard Worker do 3861*053f45beSAndroid Build Coastguard Worker log_start 3862*053f45beSAndroid Build Coastguard Worker run_cmd nettest ${arg} -s & 3863*053f45beSAndroid Build Coastguard Worker sleep 1 3864*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest ${arg} -r ${a} 3865*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach" 3866*053f45beSAndroid Build Coastguard Worker done 3867*053f45beSAndroid Build Coastguard Worker} 3868*053f45beSAndroid Build Coastguard Worker 3869*053f45beSAndroid Build Coastguard Workeripv4_netfilter() 3870*053f45beSAndroid Build Coastguard Worker{ 3871*053f45beSAndroid Build Coastguard Worker log_section "IPv4 Netfilter" 3872*053f45beSAndroid Build Coastguard Worker log_subsection "TCP reset" 3873*053f45beSAndroid Build Coastguard Worker 3874*053f45beSAndroid Build Coastguard Worker setup "yes" 3875*053f45beSAndroid Build Coastguard Worker run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset 3876*053f45beSAndroid Build Coastguard Worker 3877*053f45beSAndroid Build Coastguard Worker netfilter_tcp_reset 3878*053f45beSAndroid Build Coastguard Worker 3879*053f45beSAndroid Build Coastguard Worker log_start 3880*053f45beSAndroid Build Coastguard Worker log_subsection "ICMP unreachable" 3881*053f45beSAndroid Build Coastguard Worker 3882*053f45beSAndroid Build Coastguard Worker log_start 3883*053f45beSAndroid Build Coastguard Worker run_cmd iptables -F 3884*053f45beSAndroid Build Coastguard Worker run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-port-unreachable 3885*053f45beSAndroid Build Coastguard Worker run_cmd iptables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp-port-unreachable 3886*053f45beSAndroid Build Coastguard Worker 3887*053f45beSAndroid Build Coastguard Worker netfilter_icmp "TCP" 3888*053f45beSAndroid Build Coastguard Worker netfilter_icmp "UDP" 3889*053f45beSAndroid Build Coastguard Worker 3890*053f45beSAndroid Build Coastguard Worker log_start 3891*053f45beSAndroid Build Coastguard Worker iptables -F 3892*053f45beSAndroid Build Coastguard Worker} 3893*053f45beSAndroid Build Coastguard Worker 3894*053f45beSAndroid Build Coastguard Workernetfilter_tcp6_reset() 3895*053f45beSAndroid Build Coastguard Worker{ 3896*053f45beSAndroid Build Coastguard Worker local a 3897*053f45beSAndroid Build Coastguard Worker 3898*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3899*053f45beSAndroid Build Coastguard Worker do 3900*053f45beSAndroid Build Coastguard Worker log_start 3901*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s & 3902*053f45beSAndroid Build Coastguard Worker sleep 1 3903*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -r ${a} 3904*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx" 3905*053f45beSAndroid Build Coastguard Worker done 3906*053f45beSAndroid Build Coastguard Worker} 3907*053f45beSAndroid Build Coastguard Worker 3908*053f45beSAndroid Build Coastguard Workernetfilter_icmp6() 3909*053f45beSAndroid Build Coastguard Worker{ 3910*053f45beSAndroid Build Coastguard Worker local stype="$1" 3911*053f45beSAndroid Build Coastguard Worker local arg 3912*053f45beSAndroid Build Coastguard Worker local a 3913*053f45beSAndroid Build Coastguard Worker 3914*053f45beSAndroid Build Coastguard Worker [ "${stype}" = "UDP" ] && arg="$arg -D" 3915*053f45beSAndroid Build Coastguard Worker 3916*053f45beSAndroid Build Coastguard Worker for a in ${NSA_IP6} ${VRF_IP6} 3917*053f45beSAndroid Build Coastguard Worker do 3918*053f45beSAndroid Build Coastguard Worker log_start 3919*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -s ${arg} & 3920*053f45beSAndroid Build Coastguard Worker sleep 1 3921*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 ${arg} -r ${a} 3922*053f45beSAndroid Build Coastguard Worker log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach" 3923*053f45beSAndroid Build Coastguard Worker done 3924*053f45beSAndroid Build Coastguard Worker} 3925*053f45beSAndroid Build Coastguard Worker 3926*053f45beSAndroid Build Coastguard Workeripv6_netfilter() 3927*053f45beSAndroid Build Coastguard Worker{ 3928*053f45beSAndroid Build Coastguard Worker log_section "IPv6 Netfilter" 3929*053f45beSAndroid Build Coastguard Worker log_subsection "TCP reset" 3930*053f45beSAndroid Build Coastguard Worker 3931*053f45beSAndroid Build Coastguard Worker setup "yes" 3932*053f45beSAndroid Build Coastguard Worker run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset 3933*053f45beSAndroid Build Coastguard Worker 3934*053f45beSAndroid Build Coastguard Worker netfilter_tcp6_reset 3935*053f45beSAndroid Build Coastguard Worker 3936*053f45beSAndroid Build Coastguard Worker log_subsection "ICMP unreachable" 3937*053f45beSAndroid Build Coastguard Worker 3938*053f45beSAndroid Build Coastguard Worker log_start 3939*053f45beSAndroid Build Coastguard Worker run_cmd ip6tables -F 3940*053f45beSAndroid Build Coastguard Worker run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable 3941*053f45beSAndroid Build Coastguard Worker run_cmd ip6tables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable 3942*053f45beSAndroid Build Coastguard Worker 3943*053f45beSAndroid Build Coastguard Worker netfilter_icmp6 "TCP" 3944*053f45beSAndroid Build Coastguard Worker netfilter_icmp6 "UDP" 3945*053f45beSAndroid Build Coastguard Worker 3946*053f45beSAndroid Build Coastguard Worker log_start 3947*053f45beSAndroid Build Coastguard Worker ip6tables -F 3948*053f45beSAndroid Build Coastguard Worker} 3949*053f45beSAndroid Build Coastguard Worker 3950*053f45beSAndroid Build Coastguard Worker################################################################################ 3951*053f45beSAndroid Build Coastguard Worker# specific use cases 3952*053f45beSAndroid Build Coastguard Worker 3953*053f45beSAndroid Build Coastguard Worker# VRF only. 3954*053f45beSAndroid Build Coastguard Worker# ns-A device enslaved to bridge. Verify traffic with and without 3955*053f45beSAndroid Build Coastguard Worker# br_netfilter module loaded. Repeat with SVI on bridge. 3956*053f45beSAndroid Build Coastguard Workeruse_case_br() 3957*053f45beSAndroid Build Coastguard Worker{ 3958*053f45beSAndroid Build Coastguard Worker setup "yes" 3959*053f45beSAndroid Build Coastguard Worker 3960*053f45beSAndroid Build Coastguard Worker setup_cmd ip link set ${NSA_DEV} down 3961*053f45beSAndroid Build Coastguard Worker setup_cmd ip addr del dev ${NSA_DEV} ${NSA_IP}/24 3962*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 addr del dev ${NSA_DEV} ${NSA_IP6}/64 3963*053f45beSAndroid Build Coastguard Worker 3964*053f45beSAndroid Build Coastguard Worker setup_cmd ip link add br0 type bridge 3965*053f45beSAndroid Build Coastguard Worker setup_cmd ip addr add dev br0 ${NSA_IP}/24 3966*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 addr add dev br0 ${NSA_IP6}/64 nodad 3967*053f45beSAndroid Build Coastguard Worker 3968*053f45beSAndroid Build Coastguard Worker setup_cmd ip li set ${NSA_DEV} master br0 3969*053f45beSAndroid Build Coastguard Worker setup_cmd ip li set ${NSA_DEV} up 3970*053f45beSAndroid Build Coastguard Worker setup_cmd ip li set br0 up 3971*053f45beSAndroid Build Coastguard Worker setup_cmd ip li set br0 vrf ${VRF} 3972*053f45beSAndroid Build Coastguard Worker 3973*053f45beSAndroid Build Coastguard Worker rmmod br_netfilter 2>/dev/null 3974*053f45beSAndroid Build Coastguard Worker sleep 5 # DAD 3975*053f45beSAndroid Build Coastguard Worker 3976*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 3977*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I br0 ${NSB_IP} 3978*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF - IPv4 ping out" 3979*053f45beSAndroid Build Coastguard Worker 3980*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 3981*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6} 3982*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF - IPv6 ping out" 3983*053f45beSAndroid Build Coastguard Worker 3984*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 3985*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${NSA_IP} 3986*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF - IPv4 ping in" 3987*053f45beSAndroid Build Coastguard Worker 3988*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 3989*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6} 3990*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF - IPv6 ping in" 3991*053f45beSAndroid Build Coastguard Worker 3992*053f45beSAndroid Build Coastguard Worker modprobe br_netfilter 3993*053f45beSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 3994*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 3995*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I br0 ${NSB_IP} 3996*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping out" 3997*053f45beSAndroid Build Coastguard Worker 3998*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 3999*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6} 4000*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping out" 4001*053f45beSAndroid Build Coastguard Worker 4002*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4003*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${NSA_IP} 4004*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping in" 4005*053f45beSAndroid Build Coastguard Worker 4006*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4007*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6} 4008*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping in" 4009*053f45beSAndroid Build Coastguard Worker fi 4010*053f45beSAndroid Build Coastguard Worker 4011*053f45beSAndroid Build Coastguard Worker setup_cmd ip li set br0 nomaster 4012*053f45beSAndroid Build Coastguard Worker setup_cmd ip li add br0.100 link br0 type vlan id 100 4013*053f45beSAndroid Build Coastguard Worker setup_cmd ip li set br0.100 vrf ${VRF} up 4014*053f45beSAndroid Build Coastguard Worker setup_cmd ip addr add dev br0.100 172.16.101.1/24 4015*053f45beSAndroid Build Coastguard Worker setup_cmd ip -6 addr add dev br0.100 2001:db8:101::1/64 nodad 4016*053f45beSAndroid Build Coastguard Worker 4017*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip li add vlan100 link ${NSB_DEV} type vlan id 100 4018*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip addr add dev vlan100 172.16.101.2/24 4019*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip -6 addr add dev vlan100 2001:db8:101::2/64 nodad 4020*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip li set vlan100 up 4021*053f45beSAndroid Build Coastguard Worker sleep 1 4022*053f45beSAndroid Build Coastguard Worker 4023*053f45beSAndroid Build Coastguard Worker rmmod br_netfilter 2>/dev/null 4024*053f45beSAndroid Build Coastguard Worker 4025*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4026*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I br0.100 172.16.101.2 4027*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF - IPv4 ping out" 4028*053f45beSAndroid Build Coastguard Worker 4029*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4030*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2 4031*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF - IPv6 ping out" 4032*053f45beSAndroid Build Coastguard Worker 4033*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4034*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 172.16.101.1 4035*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF - IPv4 ping in" 4036*053f45beSAndroid Build Coastguard Worker 4037*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4038*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1 4039*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF - IPv6 ping in" 4040*053f45beSAndroid Build Coastguard Worker 4041*053f45beSAndroid Build Coastguard Worker modprobe br_netfilter 4042*053f45beSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 4043*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4044*053f45beSAndroid Build Coastguard Worker run_cmd ping -c1 -w1 -I br0.100 172.16.101.2 4045*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv4 ping out" 4046*053f45beSAndroid Build Coastguard Worker 4047*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4048*053f45beSAndroid Build Coastguard Worker run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::2 4049*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv6 ping out" 4050*053f45beSAndroid Build Coastguard Worker 4051*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4052*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 172.16.101.1 4053*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF - IPv4 ping in" 4054*053f45beSAndroid Build Coastguard Worker 4055*053f45beSAndroid Build Coastguard Worker run_cmd ip neigh flush all 4056*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::1 4057*053f45beSAndroid Build Coastguard Worker log_test $? 0 "Bridge vlan into VRF - IPv6 ping in" 4058*053f45beSAndroid Build Coastguard Worker fi 4059*053f45beSAndroid Build Coastguard Worker 4060*053f45beSAndroid Build Coastguard Worker setup_cmd ip li del br0 2>/dev/null 4061*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb ip li del vlan100 2>/dev/null 4062*053f45beSAndroid Build Coastguard Worker} 4063*053f45beSAndroid Build Coastguard Worker 4064*053f45beSAndroid Build Coastguard Worker# VRF only. 4065*053f45beSAndroid Build Coastguard Worker# ns-A device is connected to both ns-B and ns-C on a single VRF but only has 4066*053f45beSAndroid Build Coastguard Worker# LLA on the interfaces 4067*053f45beSAndroid Build Coastguard Workeruse_case_ping_lla_multi() 4068*053f45beSAndroid Build Coastguard Worker{ 4069*053f45beSAndroid Build Coastguard Worker setup_lla_only 4070*053f45beSAndroid Build Coastguard Worker # only want reply from ns-A 4071*053f45beSAndroid Build Coastguard Worker setup_cmd_nsb sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1 4072*053f45beSAndroid Build Coastguard Worker setup_cmd_nsc sysctl -qw net.ipv6.icmp.echo_ignore_multicast=1 4073*053f45beSAndroid Build Coastguard Worker 4074*053f45beSAndroid Build Coastguard Worker log_start 4075*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV} 4076*053f45beSAndroid Build Coastguard Worker log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Pre cycle, ping out ns-B" 4077*053f45beSAndroid Build Coastguard Worker 4078*053f45beSAndroid Build Coastguard Worker run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV} 4079*053f45beSAndroid Build Coastguard Worker log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Pre cycle, ping out ns-C" 4080*053f45beSAndroid Build Coastguard Worker 4081*053f45beSAndroid Build Coastguard Worker # cycle/flap the first ns-A interface 4082*053f45beSAndroid Build Coastguard Worker setup_cmd ip link set ${NSA_DEV} down 4083*053f45beSAndroid Build Coastguard Worker setup_cmd ip link set ${NSA_DEV} up 4084*053f45beSAndroid Build Coastguard Worker sleep 1 4085*053f45beSAndroid Build Coastguard Worker 4086*053f45beSAndroid Build Coastguard Worker log_start 4087*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV} 4088*053f45beSAndroid Build Coastguard Worker log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-B" 4089*053f45beSAndroid Build Coastguard Worker run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV} 4090*053f45beSAndroid Build Coastguard Worker log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-C" 4091*053f45beSAndroid Build Coastguard Worker 4092*053f45beSAndroid Build Coastguard Worker # cycle/flap the second ns-A interface 4093*053f45beSAndroid Build Coastguard Worker setup_cmd ip link set ${NSA_DEV2} down 4094*053f45beSAndroid Build Coastguard Worker setup_cmd ip link set ${NSA_DEV2} up 4095*053f45beSAndroid Build Coastguard Worker sleep 1 4096*053f45beSAndroid Build Coastguard Worker 4097*053f45beSAndroid Build Coastguard Worker log_start 4098*053f45beSAndroid Build Coastguard Worker run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV} 4099*053f45beSAndroid Build Coastguard Worker log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-B" 4100*053f45beSAndroid Build Coastguard Worker run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV} 4101*053f45beSAndroid Build Coastguard Worker log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-C" 4102*053f45beSAndroid Build Coastguard Worker} 4103*053f45beSAndroid Build Coastguard Worker 4104*053f45beSAndroid Build Coastguard Worker# Perform IPv{4,6} SNAT on ns-A, and verify TCP connection is successfully 4105*053f45beSAndroid Build Coastguard Worker# established with ns-B. 4106*053f45beSAndroid Build Coastguard Workeruse_case_snat_on_vrf() 4107*053f45beSAndroid Build Coastguard Worker{ 4108*053f45beSAndroid Build Coastguard Worker setup "yes" 4109*053f45beSAndroid Build Coastguard Worker 4110*053f45beSAndroid Build Coastguard Worker local port="12345" 4111*053f45beSAndroid Build Coastguard Worker 4112*053f45beSAndroid Build Coastguard Worker run_cmd iptables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF} 4113*053f45beSAndroid Build Coastguard Worker run_cmd ip6tables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF} 4114*053f45beSAndroid Build Coastguard Worker 4115*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -s -l ${NSB_IP} -p ${port} & 4116*053f45beSAndroid Build Coastguard Worker sleep 1 4117*053f45beSAndroid Build Coastguard Worker run_cmd nettest -d ${VRF} -r ${NSB_IP} -p ${port} 4118*053f45beSAndroid Build Coastguard Worker log_test $? 0 "IPv4 TCP connection over VRF with SNAT" 4119*053f45beSAndroid Build Coastguard Worker 4120*053f45beSAndroid Build Coastguard Worker run_cmd_nsb nettest -6 -s -l ${NSB_IP6} -p ${port} & 4121*053f45beSAndroid Build Coastguard Worker sleep 1 4122*053f45beSAndroid Build Coastguard Worker run_cmd nettest -6 -d ${VRF} -r ${NSB_IP6} -p ${port} 4123*053f45beSAndroid Build Coastguard Worker log_test $? 0 "IPv6 TCP connection over VRF with SNAT" 4124*053f45beSAndroid Build Coastguard Worker 4125*053f45beSAndroid Build Coastguard Worker # Cleanup 4126*053f45beSAndroid Build Coastguard Worker run_cmd iptables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF} 4127*053f45beSAndroid Build Coastguard Worker run_cmd ip6tables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF} 4128*053f45beSAndroid Build Coastguard Worker} 4129*053f45beSAndroid Build Coastguard Worker 4130*053f45beSAndroid Build Coastguard Workeruse_cases() 4131*053f45beSAndroid Build Coastguard Worker{ 4132*053f45beSAndroid Build Coastguard Worker log_section "Use cases" 4133*053f45beSAndroid Build Coastguard Worker log_subsection "Device enslaved to bridge" 4134*053f45beSAndroid Build Coastguard Worker use_case_br 4135*053f45beSAndroid Build Coastguard Worker log_subsection "Ping LLA with multiple interfaces" 4136*053f45beSAndroid Build Coastguard Worker use_case_ping_lla_multi 4137*053f45beSAndroid Build Coastguard Worker log_subsection "SNAT on VRF" 4138*053f45beSAndroid Build Coastguard Worker use_case_snat_on_vrf 4139*053f45beSAndroid Build Coastguard Worker} 4140*053f45beSAndroid Build Coastguard Worker 4141*053f45beSAndroid Build Coastguard Worker################################################################################ 4142*053f45beSAndroid Build Coastguard Worker# usage 4143*053f45beSAndroid Build Coastguard Worker 4144*053f45beSAndroid Build Coastguard Workerusage() 4145*053f45beSAndroid Build Coastguard Worker{ 4146*053f45beSAndroid Build Coastguard Worker cat <<EOF 4147*053f45beSAndroid Build Coastguard Workerusage: ${0##*/} OPTS 4148*053f45beSAndroid Build Coastguard Worker 4149*053f45beSAndroid Build Coastguard Worker -4 IPv4 tests only 4150*053f45beSAndroid Build Coastguard Worker -6 IPv6 tests only 4151*053f45beSAndroid Build Coastguard Worker -t <test> Test name/set to run 4152*053f45beSAndroid Build Coastguard Worker -p Pause on fail 4153*053f45beSAndroid Build Coastguard Worker -P Pause after each test 4154*053f45beSAndroid Build Coastguard Worker -v Be verbose 4155*053f45beSAndroid Build Coastguard Worker 4156*053f45beSAndroid Build Coastguard WorkerTests: 4157*053f45beSAndroid Build Coastguard Worker $TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER 4158*053f45beSAndroid Build Coastguard WorkerEOF 4159*053f45beSAndroid Build Coastguard Worker} 4160*053f45beSAndroid Build Coastguard Worker 4161*053f45beSAndroid Build Coastguard Worker################################################################################ 4162*053f45beSAndroid Build Coastguard Worker# main 4163*053f45beSAndroid Build Coastguard Worker 4164*053f45beSAndroid Build Coastguard WorkerTESTS_IPV4="ipv4_ping ipv4_tcp ipv4_udp ipv4_bind ipv4_runtime ipv4_netfilter" 4165*053f45beSAndroid Build Coastguard WorkerTESTS_IPV6="ipv6_ping ipv6_tcp ipv6_udp ipv6_bind ipv6_runtime ipv6_netfilter" 4166*053f45beSAndroid Build Coastguard WorkerTESTS_OTHER="use_cases" 4167*053f45beSAndroid Build Coastguard Worker 4168*053f45beSAndroid Build Coastguard WorkerPAUSE_ON_FAIL=no 4169*053f45beSAndroid Build Coastguard WorkerPAUSE=no 4170*053f45beSAndroid Build Coastguard Worker 4171*053f45beSAndroid Build Coastguard Workerwhile getopts :46t:pPvh o 4172*053f45beSAndroid Build Coastguard Workerdo 4173*053f45beSAndroid Build Coastguard Worker case $o in 4174*053f45beSAndroid Build Coastguard Worker 4) TESTS=ipv4;; 4175*053f45beSAndroid Build Coastguard Worker 6) TESTS=ipv6;; 4176*053f45beSAndroid Build Coastguard Worker t) TESTS=$OPTARG;; 4177*053f45beSAndroid Build Coastguard Worker p) PAUSE_ON_FAIL=yes;; 4178*053f45beSAndroid Build Coastguard Worker P) PAUSE=yes;; 4179*053f45beSAndroid Build Coastguard Worker v) VERBOSE=1;; 4180*053f45beSAndroid Build Coastguard Worker h) usage; exit 0;; 4181*053f45beSAndroid Build Coastguard Worker *) usage; exit 1;; 4182*053f45beSAndroid Build Coastguard Worker esac 4183*053f45beSAndroid Build Coastguard Workerdone 4184*053f45beSAndroid Build Coastguard Worker 4185*053f45beSAndroid Build Coastguard Worker# make sure we don't pause twice 4186*053f45beSAndroid Build Coastguard Worker[ "${PAUSE}" = "yes" ] && PAUSE_ON_FAIL=no 4187*053f45beSAndroid Build Coastguard Worker 4188*053f45beSAndroid Build Coastguard Worker# 4189*053f45beSAndroid Build Coastguard Worker# show user test config 4190*053f45beSAndroid Build Coastguard Worker# 4191*053f45beSAndroid Build Coastguard Workerif [ -z "$TESTS" ]; then 4192*053f45beSAndroid Build Coastguard Worker TESTS="$TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER" 4193*053f45beSAndroid Build Coastguard Workerelif [ "$TESTS" = "ipv4" ]; then 4194*053f45beSAndroid Build Coastguard Worker TESTS="$TESTS_IPV4" 4195*053f45beSAndroid Build Coastguard Workerelif [ "$TESTS" = "ipv6" ]; then 4196*053f45beSAndroid Build Coastguard Worker TESTS="$TESTS_IPV6" 4197*053f45beSAndroid Build Coastguard Workerfi 4198*053f45beSAndroid Build Coastguard Worker 4199*053f45beSAndroid Build Coastguard Worker# nettest can be run from PATH or from same directory as this selftest 4200*053f45beSAndroid Build Coastguard Workerif ! which nettest >/dev/null; then 4201*053f45beSAndroid Build Coastguard Worker PATH=$PWD:$PATH 4202*053f45beSAndroid Build Coastguard Worker if ! which nettest >/dev/null; then 4203*053f45beSAndroid Build Coastguard Worker echo "'nettest' command not found; skipping tests" 4204*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 4205*053f45beSAndroid Build Coastguard Worker fi 4206*053f45beSAndroid Build Coastguard Workerfi 4207*053f45beSAndroid Build Coastguard Worker 4208*053f45beSAndroid Build Coastguard Workerdeclare -i nfail=0 4209*053f45beSAndroid Build Coastguard Workerdeclare -i nsuccess=0 4210*053f45beSAndroid Build Coastguard Worker 4211*053f45beSAndroid Build Coastguard Workerfor t in $TESTS 4212*053f45beSAndroid Build Coastguard Workerdo 4213*053f45beSAndroid Build Coastguard Worker case $t in 4214*053f45beSAndroid Build Coastguard Worker ipv4_ping|ping) ipv4_ping;; 4215*053f45beSAndroid Build Coastguard Worker ipv4_tcp|tcp) ipv4_tcp;; 4216*053f45beSAndroid Build Coastguard Worker ipv4_udp|udp) ipv4_udp;; 4217*053f45beSAndroid Build Coastguard Worker ipv4_bind|bind) ipv4_addr_bind;; 4218*053f45beSAndroid Build Coastguard Worker ipv4_runtime) ipv4_runtime;; 4219*053f45beSAndroid Build Coastguard Worker ipv4_netfilter) ipv4_netfilter;; 4220*053f45beSAndroid Build Coastguard Worker 4221*053f45beSAndroid Build Coastguard Worker ipv6_ping|ping6) ipv6_ping;; 4222*053f45beSAndroid Build Coastguard Worker ipv6_tcp|tcp6) ipv6_tcp;; 4223*053f45beSAndroid Build Coastguard Worker ipv6_udp|udp6) ipv6_udp;; 4224*053f45beSAndroid Build Coastguard Worker ipv6_bind|bind6) ipv6_addr_bind;; 4225*053f45beSAndroid Build Coastguard Worker ipv6_runtime) ipv6_runtime;; 4226*053f45beSAndroid Build Coastguard Worker ipv6_netfilter) ipv6_netfilter;; 4227*053f45beSAndroid Build Coastguard Worker 4228*053f45beSAndroid Build Coastguard Worker use_cases) use_cases;; 4229*053f45beSAndroid Build Coastguard Worker 4230*053f45beSAndroid Build Coastguard Worker # setup namespaces and config, but do not run any tests 4231*053f45beSAndroid Build Coastguard Worker setup) setup; exit 0;; 4232*053f45beSAndroid Build Coastguard Worker vrf_setup) setup "yes"; exit 0;; 4233*053f45beSAndroid Build Coastguard Worker esac 4234*053f45beSAndroid Build Coastguard Workerdone 4235*053f45beSAndroid Build Coastguard Worker 4236*053f45beSAndroid Build Coastguard Workercleanup 2>/dev/null 4237*053f45beSAndroid Build Coastguard Worker 4238*053f45beSAndroid Build Coastguard Workerprintf "\nTests passed: %3d\n" ${nsuccess} 4239*053f45beSAndroid Build Coastguard Workerprintf "Tests failed: %3d\n" ${nfail} 4240*053f45beSAndroid Build Coastguard Worker 4241*053f45beSAndroid Build Coastguard Workerif [ $nfail -ne 0 ]; then 4242*053f45beSAndroid Build Coastguard Worker exit 1 # KSFT_FAIL 4243*053f45beSAndroid Build Coastguard Workerelif [ $nsuccess -eq 0 ]; then 4244*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 4245*053f45beSAndroid Build Coastguard Workerfi 4246*053f45beSAndroid Build Coastguard Worker 4247*053f45beSAndroid Build Coastguard Workerexit 0 # KSFT_PASS 4248