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