^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) #!/bin/bash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) # IPv4 and IPv6 onlink tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) VERBOSE=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) # Network interfaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) # - odd in current namespace; even in peer ns
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) declare -A NETIFS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) # default VRF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) NETIFS[p1]=veth1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) NETIFS[p2]=veth2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) NETIFS[p3]=veth3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) NETIFS[p4]=veth4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) # VRF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) NETIFS[p5]=veth5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) NETIFS[p6]=veth6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) NETIFS[p7]=veth7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) NETIFS[p8]=veth8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) # /24 network
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) declare -A V4ADDRS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) V4ADDRS[p1]=169.254.1.1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) V4ADDRS[p2]=169.254.1.2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) V4ADDRS[p3]=169.254.3.1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) V4ADDRS[p4]=169.254.3.2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) V4ADDRS[p5]=169.254.5.1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) V4ADDRS[p6]=169.254.5.2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) V4ADDRS[p7]=169.254.7.1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) V4ADDRS[p8]=169.254.7.2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) # /64 network
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) declare -A V6ADDRS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) V6ADDRS[p1]=2001:db8:101::1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) V6ADDRS[p2]=2001:db8:101::2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) V6ADDRS[p3]=2001:db8:301::1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) V6ADDRS[p4]=2001:db8:301::2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) V6ADDRS[p5]=2001:db8:501::1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) V6ADDRS[p6]=2001:db8:501::2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) V6ADDRS[p7]=2001:db8:701::1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) V6ADDRS[p8]=2001:db8:701::2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) # Test networks:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) # [1] = default table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) # [2] = VRF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) # /32 host routes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) declare -A TEST_NET4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) TEST_NET4[1]=169.254.101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) TEST_NET4[2]=169.254.102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) # /128 host routes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) declare -A TEST_NET6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) TEST_NET6[1]=2001:db8:101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) TEST_NET6[2]=2001:db8:102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) # connected gateway
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) CONGW[1]=169.254.1.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) CONGW[2]=169.254.3.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) CONGW[3]=169.254.5.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) # recursive gateway
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) RECGW4[1]=169.254.11.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) RECGW4[2]=169.254.12.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) RECGW6[1]=2001:db8:11::64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) RECGW6[2]=2001:db8:12::64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) # for v4 mapped to v6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) declare -A TEST_NET4IN6IN6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) TEST_NET4IN6[1]=10.1.1.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) TEST_NET4IN6[2]=10.2.1.254
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) # mcast address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) MCAST6=ff02::1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) PEER_NS=bart
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) PEER_CMD="ip netns exec ${PEER_NS}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) VRF=lisa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) VRF_TABLE=1101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) PBR_TABLE=101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) ################################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) # utilities
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) log_test()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) local rc=$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) local expected=$2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) local msg="$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) if [ ${rc} -eq ${expected} ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) nsuccess=$((nsuccess+1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) printf " TEST: %-50s [ OK ]\n" "${msg}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) nfail=$((nfail+1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) printf " TEST: %-50s [FAIL]\n" "${msg}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) echo "hit enter to continue, 'q' to quit"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) read a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) [ "$a" = "q" ] && exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) log_section()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) echo "######################################################################"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) echo "TEST SECTION: $*"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) echo "######################################################################"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) log_subsection()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) echo "#########################################"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) echo "TEST SUBSECTION: $*"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) run_cmd()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) local cmd="$*"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) local out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) local rc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) if [ "$VERBOSE" = "1" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) printf " COMMAND: $cmd\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) out=$(eval $cmd 2>&1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) rc=$?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) if [ "$VERBOSE" = "1" -a -n "$out" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) echo " $out"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) [ "$VERBOSE" = "1" ] && echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) return $rc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) get_linklocal()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) local dev=$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) local pfx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) local addr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) addr=$(${pfx} ip -6 -br addr show dev ${dev} | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) awk '{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) for (i = 3; i <= NF; ++i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) if ($i ~ /^fe80/)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) print $i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) }'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) addr=${addr/\/*}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) [ -z "$addr" ] && return 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) echo $addr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) return 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) ################################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) setup()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) echo "########################################"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) echo "Configuring interfaces"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) set -e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) # create namespace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) ip netns add ${PEER_NS}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) ip -netns ${PEER_NS} li set lo up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) # add vrf table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) ip li add ${VRF} type vrf table ${VRF_TABLE}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) ip li set ${VRF} up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ip ro add table ${VRF_TABLE} unreachable default metric 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) ip -6 ro add table ${VRF_TABLE} unreachable default metric 8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) # create test interfaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) ip li add ${NETIFS[p1]} type veth peer name ${NETIFS[p2]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ip li add ${NETIFS[p3]} type veth peer name ${NETIFS[p4]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) ip li add ${NETIFS[p5]} type veth peer name ${NETIFS[p6]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ip li add ${NETIFS[p7]} type veth peer name ${NETIFS[p8]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) # enslave vrf interfaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) for n in 5 7; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) ip li set ${NETIFS[p${n}]} vrf ${VRF}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) # add addresses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) for n in 1 3 5 7; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) ip li set ${NETIFS[p${n}]} up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) ip addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) ip addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} nodad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) # move peer interfaces to namespace and add addresses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) for n in 2 4 6 8; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) ip li set ${NETIFS[p${n}]} netns ${PEER_NS} up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) ip -netns ${PEER_NS} addr add ${V4ADDRS[p${n}]}/24 dev ${NETIFS[p${n}]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) ip -netns ${PEER_NS} addr add ${V6ADDRS[p${n}]}/64 dev ${NETIFS[p${n}]} nodad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) ip -6 ro add default via ${V6ADDRS[p3]/::[0-9]/::64}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) ip -6 ro add table ${VRF_TABLE} default via ${V6ADDRS[p7]/::[0-9]/::64}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) set +e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) cleanup()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) # make sure we start from a clean slate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) ip netns del ${PEER_NS} 2>/dev/null
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) for n in 1 3 5 7; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) ip link del ${NETIFS[p${n}]} 2>/dev/null
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) ip link del ${VRF} 2>/dev/null
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) ip ro flush table ${VRF_TABLE}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) ip -6 ro flush table ${VRF_TABLE}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) ################################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) # IPv4 tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) run_ip()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) local table="$1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) local prefix="$2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) local gw="$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) local dev="$4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) local exp_rc="$5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) local desc="$6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) # dev arg may be empty
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) [ -n "${dev}" ] && dev="dev ${dev}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) run_cmd ip ro add table "${table}" "${prefix}"/32 via "${gw}" "${dev}" onlink
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) log_test $? ${exp_rc} "${desc}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) run_ip_mpath()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) local table="$1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) local prefix="$2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) local nh1="$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) local nh2="$4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) local exp_rc="$5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) local desc="$6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) # dev arg may be empty
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) [ -n "${dev}" ] && dev="dev ${dev}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) run_cmd ip ro add table "${table}" "${prefix}"/32 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) nexthop via ${nh1} nexthop via ${nh2}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) log_test $? ${exp_rc} "${desc}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) valid_onlink_ipv4()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) # - unicast connected, unicast recursive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) log_subsection "default VRF - main table"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) run_ip 254 ${TEST_NET4[1]}.1 ${CONGW[1]} ${NETIFS[p1]} 0 "unicast connected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) run_ip 254 ${TEST_NET4[1]}.2 ${RECGW4[1]} ${NETIFS[p1]} 0 "unicast recursive"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) log_subsection "VRF ${VRF}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) run_ip ${VRF_TABLE} ${TEST_NET4[2]}.1 ${CONGW[3]} ${NETIFS[p5]} 0 "unicast connected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) run_ip ${VRF_TABLE} ${TEST_NET4[2]}.2 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) log_subsection "VRF device, PBR table"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) run_ip ${PBR_TABLE} ${TEST_NET4[2]}.3 ${CONGW[3]} ${NETIFS[p5]} 0 "unicast connected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) run_ip ${PBR_TABLE} ${TEST_NET4[2]}.4 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) # multipath version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) log_subsection "default VRF - main table - multipath"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) run_ip_mpath 254 ${TEST_NET4[1]}.5 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) "${CONGW[1]} dev ${NETIFS[p1]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) "${CONGW[2]} dev ${NETIFS[p3]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 0 "unicast connected - multipath"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) run_ip_mpath 254 ${TEST_NET4[1]}.6 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) "${RECGW4[1]} dev ${NETIFS[p1]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) "${RECGW4[2]} dev ${NETIFS[p3]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 0 "unicast recursive - multipath"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) run_ip_mpath 254 ${TEST_NET4[1]}.7 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) "${CONGW[1]} dev ${NETIFS[p1]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) "${CONGW[2]} dev ${NETIFS[p3]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 0 "unicast connected - multipath onlink first only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) run_ip_mpath 254 ${TEST_NET4[1]}.8 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) "${CONGW[1]} dev ${NETIFS[p1]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) "${CONGW[2]} dev ${NETIFS[p3]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 0 "unicast connected - multipath onlink second only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) invalid_onlink_ipv4()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) run_ip 254 ${TEST_NET4[1]}.11 ${V4ADDRS[p1]} ${NETIFS[p1]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) "Invalid gw - local unicast address"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) run_ip ${VRF_TABLE} ${TEST_NET4[2]}.11 ${V4ADDRS[p5]} ${NETIFS[p5]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) "Invalid gw - local unicast address, VRF"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) run_ip 254 ${TEST_NET4[1]}.101 ${V4ADDRS[p1]} "" 2 "No nexthop device given"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) run_ip 254 ${TEST_NET4[1]}.102 ${V4ADDRS[p3]} ${NETIFS[p1]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) "Gateway resolves to wrong nexthop device"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) run_ip ${VRF_TABLE} ${TEST_NET4[2]}.103 ${V4ADDRS[p7]} ${NETIFS[p5]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) "Gateway resolves to wrong nexthop device - VRF"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) ################################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) # IPv6 tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) run_ip6()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) local table="$1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) local prefix="$2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) local gw="$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) local dev="$4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) local exp_rc="$5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) local desc="$6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) # dev arg may be empty
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) [ -n "${dev}" ] && dev="dev ${dev}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) run_cmd ip -6 ro add table "${table}" "${prefix}"/128 via "${gw}" "${dev}" onlink
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) log_test $? ${exp_rc} "${desc}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) run_ip6_mpath()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) local table="$1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) local prefix="$2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) local opts="$3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) local nh1="$4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) local nh2="$5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) local exp_rc="$6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) local desc="$7"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) run_cmd ip -6 ro add table "${table}" "${prefix}"/128 "${opts}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) nexthop via ${nh1} nexthop via ${nh2}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) log_test $? ${exp_rc} "${desc}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) valid_onlink_ipv6()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) # - unicast connected, unicast recursive, v4-mapped
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) log_subsection "default VRF - main table"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) run_ip6 254 ${TEST_NET6[1]}::1 ${V6ADDRS[p1]/::*}::64 ${NETIFS[p1]} 0 "unicast connected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) run_ip6 254 ${TEST_NET6[1]}::2 ${RECGW6[1]} ${NETIFS[p1]} 0 "unicast recursive"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) run_ip6 254 ${TEST_NET6[1]}::3 ::ffff:${TEST_NET4IN6[1]} ${NETIFS[p1]} 0 "v4-mapped"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) log_subsection "VRF ${VRF}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::1 ${V6ADDRS[p5]/::*}::64 ${NETIFS[p5]} 0 "unicast connected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::2 ${RECGW6[2]} ${NETIFS[p5]} 0 "unicast recursive"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::3 ::ffff:${TEST_NET4IN6[2]} ${NETIFS[p5]} 0 "v4-mapped"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) log_subsection "VRF device, PBR table"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::4 ${V6ADDRS[p5]/::*}::64 ${NETIFS[p5]} 0 "unicast connected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::5 ${RECGW6[2]} ${NETIFS[p5]} 0 "unicast recursive"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::6 ::ffff:${TEST_NET4IN6[2]} ${NETIFS[p5]} 0 "v4-mapped"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) # multipath version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) log_subsection "default VRF - main table - multipath"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) run_ip6_mpath 254 ${TEST_NET6[1]}::4 "onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 0 "unicast connected - multipath onlink"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) run_ip6_mpath 254 ${TEST_NET6[1]}::5 "onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) "${RECGW6[1]} dev ${NETIFS[p1]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) "${RECGW6[2]} dev ${NETIFS[p3]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 0 "unicast recursive - multipath onlink"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) run_ip6_mpath 254 ${TEST_NET6[1]}::6 "onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) "::ffff:${TEST_NET4IN6[1]} dev ${NETIFS[p1]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) "::ffff:${TEST_NET4IN6[2]} dev ${NETIFS[p3]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 0 "v4-mapped - multipath onlink"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) run_ip6_mpath 254 ${TEST_NET6[1]}::7 "" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 0 "unicast connected - multipath onlink both nexthops"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) run_ip6_mpath 254 ${TEST_NET6[1]}::8 "" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 0 "unicast connected - multipath onlink first only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) run_ip6_mpath 254 ${TEST_NET6[1]}::9 "" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]}" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]} onlink" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 0 "unicast connected - multipath onlink second only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) invalid_onlink_ipv6()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) local lladdr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) lladdr=$(get_linklocal ${NETIFS[p1]}) || return 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) run_ip6 254 ${TEST_NET6[1]}::11 ${V6ADDRS[p1]} ${NETIFS[p1]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) "Invalid gw - local unicast address"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) run_ip6 254 ${TEST_NET6[1]}::12 ${lladdr} ${NETIFS[p1]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) "Invalid gw - local linklocal address"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) run_ip6 254 ${TEST_NET6[1]}::12 ${MCAST6} ${NETIFS[p1]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) "Invalid gw - multicast address"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) lladdr=$(get_linklocal ${NETIFS[p5]}) || return 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::11 ${V6ADDRS[p5]} ${NETIFS[p5]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) "Invalid gw - local unicast address, VRF"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::12 ${lladdr} ${NETIFS[p5]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) "Invalid gw - local linklocal address, VRF"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::12 ${MCAST6} ${NETIFS[p5]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) "Invalid gw - multicast address, VRF"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) run_ip6 254 ${TEST_NET6[1]}::101 ${V6ADDRS[p1]} "" 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) "No nexthop device given"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) # default VRF validation is done against LOCAL table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) # run_ip6 254 ${TEST_NET6[1]}::102 ${V6ADDRS[p3]/::[0-9]/::64} ${NETIFS[p1]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) # "Gateway resolves to wrong nexthop device"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::103 ${V6ADDRS[p7]/::[0-9]/::64} ${NETIFS[p5]} 2 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) "Gateway resolves to wrong nexthop device - VRF"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) run_onlink_tests()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) log_section "IPv4 onlink"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) log_subsection "Valid onlink commands"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) valid_onlink_ipv4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) log_subsection "Invalid onlink commands"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) invalid_onlink_ipv4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) log_section "IPv6 onlink"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) log_subsection "Valid onlink commands"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) valid_onlink_ipv6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) log_subsection "Invalid onlink commands"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) invalid_onlink_ipv6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) ################################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) # usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) usage()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) cat <<EOF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) usage: ${0##*/} OPTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) -p Pause on fail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) -v verbose mode (show commands and output)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) EOF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) ################################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) # main
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) nsuccess=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) nfail=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) while getopts :t:pPhv o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) case $o in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) p) PAUSE_ON_FAIL=yes;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) v) VERBOSE=$(($VERBOSE + 1));;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) h) usage; exit 0;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) *) usage; exit 1;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) cleanup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) setup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) run_onlink_tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) cleanup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) if [ "$TESTS" != "none" ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) printf "\nTests passed: %3d\n" ${nsuccess}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) printf "Tests failed: %3d\n" ${nfail}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) fi