Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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