brintos

brintos / linux-shallow public Read only

0
0
Text · 106.6 KiB · 899dbad Raw
4349 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Copyright (c) 2019 David Ahern <dsahern@gmail.com>. All rights reserved.5#6# IPv4 and IPv6 functional tests focusing on VRF and routing lookups7# for various permutations:8#   1. icmp, tcp, udp and netfilter9#   2. client, server, no-server10#   3. global address on interface11#   4. global address on 'lo'12#   5. remote and local traffic13#   6. VRF and non-VRF permutations14#15# Setup:16#                     ns-A     |     ns-B17# No VRF case:18#    [ lo ]         [ eth1 ]---|---[ eth1 ]      [ lo ]19#                                                remote address20# VRF case:21#         [ red ]---[ eth1 ]---|---[ eth1 ]      [ lo ]22#23# ns-A:24#     eth1: 172.16.1.1/24, 2001:db8:1::1/6425#       lo: 127.0.0.1/8, ::1/12826#           172.16.2.1/32, 2001:db8:2::1/12827#      red: 127.0.0.1/8, ::1/12828#           172.16.3.1/32, 2001:db8:3::1/12829#30# ns-B:31#     eth1: 172.16.1.2/24, 2001:db8:1::2/6432#      lo2: 127.0.0.1/8, ::1/12833#           172.16.2.2/32, 2001:db8:2::2/12834#35# ns-A to ns-C connection - only for VRF and same config36# as ns-A to ns-B37#38# server / client nomenclature relative to ns-A39 40source lib.sh41 42PATH=$PWD:$PWD/tools/testing/selftests/net:$PATH43 44VERBOSE=045 46NSA_DEV=eth147NSA_DEV2=eth248NSB_DEV=eth149NSC_DEV=eth250VRF=red51VRF_TABLE=110152 53# IPv4 config54NSA_IP=172.16.1.155NSB_IP=172.16.1.256VRF_IP=172.16.3.157NS_NET=172.16.1.0/2458 59# IPv6 config60NSA_IP6=2001:db8:1::161NSB_IP6=2001:db8:1::262VRF_IP6=2001:db8:3::163NS_NET6=2001:db8:1::/12064 65NSA_LO_IP=172.16.2.166NSB_LO_IP=172.16.2.267NSA_LO_IP6=2001:db8:2::168NSB_LO_IP6=2001:db8:2::269 70# non-local addresses for freebind tests71NL_IP=172.17.1.172NL_IP6=2001:db8:4::173 74# multicast and broadcast addresses75MCAST_IP=224.0.0.176BCAST_IP=255.255.255.25577 78MD5_PW=abc12379MD5_WRONG_PW=abc123480 81MCAST=ff02::182# set after namespace create83NSA_LINKIP6=84NSB_LINKIP6=85 86which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)87 88# Check if FIPS mode is enabled89if [ -f /proc/sys/crypto/fips_enabled ]; then90	fips_enabled=`cat /proc/sys/crypto/fips_enabled`91else92	fips_enabled=093fi94 95################################################################################96# utilities97 98log_test()99{100	local rc=$1101	local expected=$2102	local msg="$3"103	local ans104 105	[ "${VERBOSE}" = "1" ] && echo106 107	if [ ${rc} -eq ${expected} ]; then108		nsuccess=$((nsuccess+1))109		printf "TEST: %-70s  [ OK ]\n" "${msg}"110	else111		nfail=$((nfail+1))112		printf "TEST: %-70s  [FAIL]\n" "${msg}"113		echo "    expected rc $expected; actual rc $rc"114		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then115			echo116			echo "hit enter to continue, 'q' to quit"117			read ans118			[ "$ans" = "q" ] && exit 1119		fi120	fi121 122	if [ "${PAUSE}" = "yes" ]; then123		echo124		echo "hit enter to continue, 'q' to quit"125		read ans126		[ "$ans" = "q" ] && exit 1127	fi128 129	kill_procs130}131 132log_test_addr()133{134	local addr=$1135	local rc=$2136	local expected=$3137	local msg="$4"138	local astr139 140	astr=$(addr2str ${addr})141	log_test $rc $expected "$msg - ${astr}"142}143 144log_section()145{146	echo147	echo "###########################################################################"148	echo "$*"149	echo "###########################################################################"150	echo151}152 153log_subsection()154{155	echo156	echo "#################################################################"157	echo "$*"158	echo159}160 161log_start()162{163	# make sure we have no test instances running164	kill_procs165 166	if [ "${VERBOSE}" = "1" ]; then167		echo168		echo "#######################################################"169	fi170}171 172log_debug()173{174	if [ "${VERBOSE}" = "1" ]; then175		echo176		echo "$*"177		echo178	fi179}180 181show_hint()182{183	if [ "${VERBOSE}" = "1" ]; then184		echo "HINT: $*"185		echo186	fi187}188 189kill_procs()190{191	killall nettest ping ping6 >/dev/null 2>&1192	sleep 1193}194 195set_ping_group()196{197	if [ "$VERBOSE" = "1" ]; then198		echo "COMMAND: ${NSA_CMD} sysctl -q -w net.ipv4.ping_group_range='0 2147483647'"199	fi200 201	${NSA_CMD} sysctl -q -w net.ipv4.ping_group_range='0 2147483647'202}203 204do_run_cmd()205{206	local cmd="$*"207	local out208 209	if [ "$VERBOSE" = "1" ]; then210		echo "COMMAND: ${cmd}"211	fi212 213	out=$($cmd 2>&1)214	rc=$?215	if [ "$VERBOSE" = "1" -a -n "$out" ]; then216		echo "$out"217	fi218 219	return $rc220}221 222run_cmd()223{224	do_run_cmd ${NSA_CMD} $*225}226 227run_cmd_nsb()228{229	do_run_cmd ${NSB_CMD} $*230}231 232run_cmd_nsc()233{234	do_run_cmd ${NSC_CMD} $*235}236 237setup_cmd()238{239	local cmd="$*"240	local rc241 242	run_cmd ${cmd}243	rc=$?244	if [ $rc -ne 0 ]; then245		# show user the command if not done so already246		if [ "$VERBOSE" = "0" ]; then247			echo "setup command: $cmd"248		fi249		echo "failed. stopping tests"250		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then251			echo252			echo "hit enter to continue"253			read a254		fi255		exit $rc256	fi257}258 259setup_cmd_nsb()260{261	local cmd="$*"262	local rc263 264	run_cmd_nsb ${cmd}265	rc=$?266	if [ $rc -ne 0 ]; then267		# show user the command if not done so already268		if [ "$VERBOSE" = "0" ]; then269			echo "setup command: $cmd"270		fi271		echo "failed. stopping tests"272		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then273			echo274			echo "hit enter to continue"275			read a276		fi277		exit $rc278	fi279}280 281setup_cmd_nsc()282{283	local cmd="$*"284	local rc285 286	run_cmd_nsc ${cmd}287	rc=$?288	if [ $rc -ne 0 ]; then289		# show user the command if not done so already290		if [ "$VERBOSE" = "0" ]; then291			echo "setup command: $cmd"292		fi293		echo "failed. stopping tests"294		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then295			echo296			echo "hit enter to continue"297			read a298		fi299		exit $rc300	fi301}302 303# set sysctl values in NS-A304set_sysctl()305{306	echo "SYSCTL: $*"307	echo308	run_cmd sysctl -q -w $*309}310 311# get sysctl values in NS-A312get_sysctl()313{314	${NSA_CMD} sysctl -n $*315}316 317################################################################################318# Setup for tests319 320addr2str()321{322	case "$1" in323	127.0.0.1) echo "loopback";;324	::1) echo "IPv6 loopback";;325 326	${BCAST_IP}) echo "broadcast";;327	${MCAST_IP}) echo "multicast";;328 329	${NSA_IP})	echo "ns-A IP";;330	${NSA_IP6})	echo "ns-A IPv6";;331	${NSA_LO_IP})	echo "ns-A loopback IP";;332	${NSA_LO_IP6})	echo "ns-A loopback IPv6";;333	${NSA_LINKIP6}|${NSA_LINKIP6}%*) echo "ns-A IPv6 LLA";;334 335	${NSB_IP})	echo "ns-B IP";;336	${NSB_IP6})	echo "ns-B IPv6";;337	${NSB_LO_IP})	echo "ns-B loopback IP";;338	${NSB_LO_IP6})	echo "ns-B loopback IPv6";;339	${NSB_LINKIP6}|${NSB_LINKIP6}%*) echo "ns-B IPv6 LLA";;340 341	${NL_IP})       echo "nonlocal IP";;342	${NL_IP6})      echo "nonlocal IPv6";;343 344	${VRF_IP})	echo "VRF IP";;345	${VRF_IP6})	echo "VRF IPv6";;346 347	${MCAST}%*)	echo "multicast IP";;348 349	*) echo "unknown";;350	esac351}352 353get_linklocal()354{355	local ns=$1356	local dev=$2357	local addr358 359	addr=$(ip -netns ${ns} -6 -br addr show dev ${dev} | \360	awk '{361		for (i = 3; i <= NF; ++i) {362			if ($i ~ /^fe80/)363				print $i364		}365	}'366	)367	addr=${addr/\/*}368 369	[ -z "$addr" ] && return 1370 371	echo $addr372 373	return 0374}375 376################################################################################377# create namespaces and vrf378 379create_vrf()380{381	local ns=$1382	local vrf=$2383	local table=$3384	local addr=$4385	local addr6=$5386 387	ip -netns ${ns} link add ${vrf} type vrf table ${table}388	ip -netns ${ns} link set ${vrf} up389	ip -netns ${ns} route add vrf ${vrf} unreachable default metric 8192390	ip -netns ${ns} -6 route add vrf ${vrf} unreachable default metric 8192391 392	ip -netns ${ns} addr add 127.0.0.1/8 dev ${vrf}393	ip -netns ${ns} -6 addr add ::1 dev ${vrf} nodad394	if [ "${addr}" != "-" ]; then395		ip -netns ${ns} addr add dev ${vrf} ${addr}396	fi397	if [ "${addr6}" != "-" ]; then398		ip -netns ${ns} -6 addr add dev ${vrf} ${addr6}399	fi400 401	ip -netns ${ns} ru del pref 0402	ip -netns ${ns} ru add pref 32765 from all lookup local403	ip -netns ${ns} -6 ru del pref 0404	ip -netns ${ns} -6 ru add pref 32765 from all lookup local405}406 407create_ns()408{409	local ns=$1410	local addr=$2411	local addr6=$3412 413	if [ "${addr}" != "-" ]; then414		ip -netns ${ns} addr add dev lo ${addr}415	fi416	if [ "${addr6}" != "-" ]; then417		ip -netns ${ns} -6 addr add dev lo ${addr6}418	fi419 420	ip -netns ${ns} ro add unreachable default metric 8192421	ip -netns ${ns} -6 ro add unreachable default metric 8192422 423	ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1424	ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1425	ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1426	ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1427}428 429# create veth pair to connect namespaces and apply addresses.430connect_ns()431{432	local ns1=$1433	local ns1_dev=$2434	local ns1_addr=$3435	local ns1_addr6=$4436	local ns2=$5437	local ns2_dev=$6438	local ns2_addr=$7439	local ns2_addr6=$8440 441	ip -netns ${ns1} li add ${ns1_dev} type veth peer name tmp442	ip -netns ${ns1} li set ${ns1_dev} up443	ip -netns ${ns1} li set tmp netns ${ns2} name ${ns2_dev}444	ip -netns ${ns2} li set ${ns2_dev} up445 446	if [ "${ns1_addr}" != "-" ]; then447		ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr}448		ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr}449	fi450 451	if [ "${ns1_addr6}" != "-" ]; then452		ip -netns ${ns1} addr add dev ${ns1_dev} ${ns1_addr6}453		ip -netns ${ns2} addr add dev ${ns2_dev} ${ns2_addr6}454	fi455}456 457cleanup()458{459	# explicit cleanups to check those code paths460	ip netns | grep -q ${NSA}461	if [ $? -eq 0 ]; then462		ip -netns ${NSA} link delete ${VRF}463		ip -netns ${NSA} ro flush table ${VRF_TABLE}464 465		ip -netns ${NSA} addr flush dev ${NSA_DEV}466		ip -netns ${NSA} -6 addr flush dev ${NSA_DEV}467		ip -netns ${NSA} link set dev ${NSA_DEV} down468		ip -netns ${NSA} link del dev ${NSA_DEV}469 470		ip netns pids ${NSA} | xargs kill 2>/dev/null471		cleanup_ns ${NSA}472	fi473 474	ip netns pids ${NSB} | xargs kill 2>/dev/null475	ip netns pids ${NSC} | xargs kill 2>/dev/null476	cleanup_ns ${NSB} ${NSC}477}478 479cleanup_vrf_dup()480{481	ip link del ${NSA_DEV2} >/dev/null 2>&1482	ip netns pids ${NSC} | xargs kill 2>/dev/null483	ip netns del ${NSC} >/dev/null 2>&1484}485 486setup_vrf_dup()487{488	# some VRF tests use ns-C which has the same config as489	# ns-B but for a device NOT in the VRF490	setup_ns NSC491	NSC_CMD="ip netns exec ${NSC}"492	create_ns ${NSC} "-" "-"493	connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \494		   ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64495}496 497setup()498{499	local with_vrf=${1}500 501	# make sure we are starting with a clean slate502	kill_procs503	cleanup 2>/dev/null504 505	log_debug "Configuring network namespaces"506	set -e507 508	setup_ns NSA NSB509	NSA_CMD="ip netns exec ${NSA}"510	NSB_CMD="ip netns exec ${NSB}"511 512	create_ns ${NSA} ${NSA_LO_IP}/32 ${NSA_LO_IP6}/128513	create_ns ${NSB} ${NSB_LO_IP}/32 ${NSB_LO_IP6}/128514	connect_ns ${NSA} ${NSA_DEV} ${NSA_IP}/24 ${NSA_IP6}/64 \515		   ${NSB} ${NSB_DEV} ${NSB_IP}/24 ${NSB_IP6}/64516 517	NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})518	NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})519 520	# tell ns-A how to get to remote addresses of ns-B521	if [ "${with_vrf}" = "yes" ]; then522		create_vrf ${NSA} ${VRF} ${VRF_TABLE} ${VRF_IP} ${VRF_IP6}523 524		ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}525		ip -netns ${NSA} ro add vrf ${VRF} ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}526		ip -netns ${NSA} -6 ro add vrf ${VRF} ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}527 528		ip -netns ${NSB} ro add ${VRF_IP}/32 via ${NSA_IP} dev ${NSB_DEV}529		ip -netns ${NSB} -6 ro add ${VRF_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}530	else531		ip -netns ${NSA} ro add ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV}532		ip -netns ${NSA} ro add ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV}533	fi534 535 536	# tell ns-B how to get to remote addresses of ns-A537	ip -netns ${NSB} ro add ${NSA_LO_IP}/32 via ${NSA_IP} dev ${NSB_DEV}538	ip -netns ${NSB} ro add ${NSA_LO_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV}539 540	set +e541 542	sleep 1543}544 545setup_lla_only()546{547	# make sure we are starting with a clean slate548	kill_procs549	cleanup 2>/dev/null550 551	log_debug "Configuring network namespaces"552	set -e553 554	setup_ns NSA NSB NSC555	NSA_CMD="ip netns exec ${NSA}"556	NSB_CMD="ip netns exec ${NSB}"557	NSC_CMD="ip netns exec ${NSC}"558	create_ns ${NSA} "-" "-"559	create_ns ${NSB} "-" "-"560	create_ns ${NSC} "-" "-"561	connect_ns ${NSA} ${NSA_DEV} "-" "-" \562		   ${NSB} ${NSB_DEV} "-" "-"563	connect_ns ${NSA} ${NSA_DEV2} "-" "-" \564		   ${NSC} ${NSC_DEV}  "-" "-"565 566	NSA_LINKIP6=$(get_linklocal ${NSA} ${NSA_DEV})567	NSB_LINKIP6=$(get_linklocal ${NSB} ${NSB_DEV})568	NSC_LINKIP6=$(get_linklocal ${NSC} ${NSC_DEV})569 570	create_vrf ${NSA} ${VRF} ${VRF_TABLE} "-" "-"571	ip -netns ${NSA} link set dev ${NSA_DEV} vrf ${VRF}572	ip -netns ${NSA} link set dev ${NSA_DEV2} vrf ${VRF}573 574	set +e575 576	sleep 1577}578 579################################################################################580# IPv4581 582ipv4_ping_novrf()583{584	local a585 586	#587	# out588	#589	for a in ${NSB_IP} ${NSB_LO_IP}590	do591		log_start592		run_cmd ping -c1 -w1 ${a}593		log_test_addr ${a} $? 0 "ping out"594 595		log_start596		run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}597		log_test_addr ${a} $? 0 "ping out, device bind"598 599		log_start600		run_cmd ping -c1 -w1 -I ${NSA_LO_IP} ${a}601		log_test_addr ${a} $? 0 "ping out, address bind"602	done603 604	#605	# out, but don't use gateway if peer is not on link606	#607	a=${NSB_IP}608	log_start609	run_cmd ping -c 1 -w 1 -r ${a}610	log_test_addr ${a} $? 0 "ping out (don't route), peer on link"611 612	a=${NSB_LO_IP}613	log_start614	show_hint "Fails since peer is not on link"615	run_cmd ping -c 1 -w 1 -r ${a}616	log_test_addr ${a} $? 1 "ping out (don't route), peer not on link"617 618	#619	# in620	#621	for a in ${NSA_IP} ${NSA_LO_IP}622	do623		log_start624		run_cmd_nsb ping -c1 -w1 ${a}625		log_test_addr ${a} $? 0 "ping in"626	done627 628	#629	# local traffic630	#631	for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.1632	do633		log_start634		run_cmd ping -c1 -w1 ${a}635		log_test_addr ${a} $? 0 "ping local"636	done637 638	#639	# local traffic, socket bound to device640	#641	# address on device642	a=${NSA_IP}643	log_start644	run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}645	log_test_addr ${a} $? 0 "ping local, device bind"646 647	# loopback addresses not reachable from device bind648	# fails in a really weird way though because ipv4 special cases649	# route lookups with oif set.650	for a in ${NSA_LO_IP} 127.0.0.1651	do652		log_start653		show_hint "Fails since address on loopback device is out of device scope"654		run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}655		log_test_addr ${a} $? 1 "ping local, device bind"656	done657 658	#659	# ip rule blocks reachability to remote address660	#661	log_start662	setup_cmd ip rule add pref 32765 from all lookup local663	setup_cmd ip rule del pref 0 from all lookup local664	setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit665	setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit666 667	a=${NSB_LO_IP}668	run_cmd ping -c1 -w1 ${a}669	log_test_addr ${a} $? 2 "ping out, blocked by rule"670 671	# NOTE: ipv4 actually allows the lookup to fail and yet still create672	# a viable rtable if the oif (e.g., bind to device) is set, so this673	# case succeeds despite the rule674	# run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}675 676	a=${NSA_LO_IP}677	log_start678	show_hint "Response generates ICMP (or arp request is ignored) due to ip rule"679	run_cmd_nsb ping -c1 -w1 ${a}680	log_test_addr ${a} $? 1 "ping in, blocked by rule"681 682	[ "$VERBOSE" = "1" ] && echo683	setup_cmd ip rule del pref 32765 from all lookup local684	setup_cmd ip rule add pref 0 from all lookup local685	setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit686	setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit687 688	#689	# route blocks reachability to remote address690	#691	log_start692	setup_cmd ip route replace unreachable ${NSB_LO_IP}693	setup_cmd ip route replace unreachable ${NSB_IP}694 695	a=${NSB_LO_IP}696	run_cmd ping -c1 -w1 ${a}697	log_test_addr ${a} $? 2 "ping out, blocked by route"698 699	# NOTE: ipv4 actually allows the lookup to fail and yet still create700	# a viable rtable if the oif (e.g., bind to device) is set, so this701	# case succeeds despite not having a route for the address702	# run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}703 704	a=${NSA_LO_IP}705	log_start706	show_hint "Response is dropped (or arp request is ignored) due to ip route"707	run_cmd_nsb ping -c1 -w1 ${a}708	log_test_addr ${a} $? 1 "ping in, blocked by route"709 710	#711	# remove 'remote' routes; fallback to default712	#713	log_start714	setup_cmd ip ro del ${NSB_LO_IP}715 716	a=${NSB_LO_IP}717	run_cmd ping -c1 -w1 ${a}718	log_test_addr ${a} $? 2 "ping out, unreachable default route"719 720	# NOTE: ipv4 actually allows the lookup to fail and yet still create721	# a viable rtable if the oif (e.g., bind to device) is set, so this722	# case succeeds despite not having a route for the address723	# run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}724}725 726ipv4_ping_vrf()727{728	local a729 730	# should default on; does not exist on older kernels731	set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null732 733	#734	# out735	#736	for a in ${NSB_IP} ${NSB_LO_IP}737	do738		log_start739		run_cmd ping -c1 -w1 -I ${VRF} ${a}740		log_test_addr ${a} $? 0 "ping out, VRF bind"741 742		log_start743		run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}744		log_test_addr ${a} $? 0 "ping out, device bind"745 746		log_start747		run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${NSA_IP} ${a}748		log_test_addr ${a} $? 0 "ping out, vrf device + dev address bind"749 750		log_start751		run_cmd ip vrf exec ${VRF} ping -c1 -w1 -I ${VRF_IP} ${a}752		log_test_addr ${a} $? 0 "ping out, vrf device + vrf address bind"753	done754 755	#756	# in757	#758	for a in ${NSA_IP} ${VRF_IP}759	do760		log_start761		run_cmd_nsb ping -c1 -w1 ${a}762		log_test_addr ${a} $? 0 "ping in"763	done764 765	#766	# local traffic, local address767	#768	for a in ${NSA_IP} ${VRF_IP} 127.0.0.1769	do770		log_start771		show_hint "Source address should be ${a}"772		run_cmd ping -c1 -w1 -I ${VRF} ${a}773		log_test_addr ${a} $? 0 "ping local, VRF bind"774	done775 776	#777	# local traffic, socket bound to device778	#779	# address on device780	a=${NSA_IP}781	log_start782	run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}783	log_test_addr ${a} $? 0 "ping local, device bind"784 785	# vrf device is out of scope786	for a in ${VRF_IP} 127.0.0.1787	do788		log_start789		show_hint "Fails since address on vrf device is out of device scope"790		run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}791		log_test_addr ${a} $? 2 "ping local, device bind"792	done793 794	#795	# ip rule blocks address796	#797	log_start798	setup_cmd ip rule add pref 50 to ${NSB_LO_IP} prohibit799	setup_cmd ip rule add pref 51 from ${NSB_IP} prohibit800 801	a=${NSB_LO_IP}802	run_cmd ping -c1 -w1 -I ${VRF} ${a}803	log_test_addr ${a} $? 2 "ping out, vrf bind, blocked by rule"804 805	log_start806	run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}807	log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"808 809	a=${NSA_LO_IP}810	log_start811	show_hint "Response lost due to ip rule"812	run_cmd_nsb ping -c1 -w1 ${a}813	log_test_addr ${a} $? 1 "ping in, blocked by rule"814 815	[ "$VERBOSE" = "1" ] && echo816	setup_cmd ip rule del pref 50 to ${NSB_LO_IP} prohibit817	setup_cmd ip rule del pref 51 from ${NSB_IP} prohibit818 819	#820	# remove 'remote' routes; fallback to default821	#822	log_start823	setup_cmd ip ro del vrf ${VRF} ${NSB_LO_IP}824 825	a=${NSB_LO_IP}826	run_cmd ping -c1 -w1 -I ${VRF} ${a}827	log_test_addr ${a} $? 2 "ping out, vrf bind, unreachable route"828 829	log_start830	run_cmd ping -c1 -w1 -I ${NSA_DEV} ${a}831	log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"832 833	a=${NSA_LO_IP}834	log_start835	show_hint "Response lost by unreachable route"836	run_cmd_nsb ping -c1 -w1 ${a}837	log_test_addr ${a} $? 1 "ping in, unreachable route"838}839 840ipv4_ping()841{842	log_section "IPv4 ping"843 844	log_subsection "No VRF"845	setup846	set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null847	ipv4_ping_novrf848	setup849	set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null850	ipv4_ping_novrf851	setup852	set_ping_group853	ipv4_ping_novrf854 855	log_subsection "With VRF"856	setup "yes"857	ipv4_ping_vrf858	setup "yes"859	set_ping_group860	ipv4_ping_vrf861}862 863################################################################################864# IPv4 TCP865 866#867# MD5 tests without VRF868#869ipv4_tcp_md5_novrf()870{871	#872	# single address873	#874 875	# basic use case876	log_start877	run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &878	sleep 1879	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}880	log_test $? 0 "MD5: Single address config"881 882	# client sends MD5, server not configured883	log_start884	show_hint "Should timeout due to MD5 mismatch"885	run_cmd nettest -s &886	sleep 1887	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}888	log_test $? 2 "MD5: Server no config, client uses password"889 890	# wrong password891	log_start892	show_hint "Should timeout since client uses wrong password"893	run_cmd nettest -s -M ${MD5_PW} -m ${NSB_IP} &894	sleep 1895	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}896	log_test $? 2 "MD5: Client uses wrong password"897 898	# client from different address899	log_start900	show_hint "Should timeout due to MD5 mismatch"901	run_cmd nettest -s -M ${MD5_PW} -m ${NSB_LO_IP} &902	sleep 1903	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}904	log_test $? 2 "MD5: Client address does not match address configured with password"905 906	#907	# MD5 extension - prefix length908	#909 910	# client in prefix911	log_start912	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &913	sleep 1914	run_cmd_nsb nettest  -r ${NSA_IP} -X ${MD5_PW}915	log_test $? 0 "MD5: Prefix config"916 917	# client in prefix, wrong password918	log_start919	show_hint "Should timeout since client uses wrong password"920	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &921	sleep 1922	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}923	log_test $? 2 "MD5: Prefix config, client uses wrong password"924 925	# client outside of prefix926	log_start927	show_hint "Should timeout due to MD5 mismatch"928	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} &929	sleep 1930	run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}931	log_test $? 2 "MD5: Prefix config, client address not in configured prefix"932}933 934#935# MD5 tests with VRF936#937ipv4_tcp_md5()938{939	#940	# single address941	#942 943	# basic use case944	log_start945	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &946	sleep 1947	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}948	log_test $? 0 "MD5: VRF: Single address config"949 950	# client sends MD5, server not configured951	log_start952	show_hint "Should timeout since server does not have MD5 auth"953	run_cmd nettest -s -I ${VRF} &954	sleep 1955	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}956	log_test $? 2 "MD5: VRF: Server no config, client uses password"957 958	# wrong password959	log_start960	show_hint "Should timeout since client uses wrong password"961	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &962	sleep 1963	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}964	log_test $? 2 "MD5: VRF: Client uses wrong password"965 966	# client from different address967	log_start968	show_hint "Should timeout since server config differs from client"969	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP} &970	sleep 1971	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}972	log_test $? 2 "MD5: VRF: Client address does not match address configured with password"973 974	#975	# MD5 extension - prefix length976	#977 978	# client in prefix979	log_start980	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &981	sleep 1982	run_cmd_nsb nettest  -r ${NSA_IP} -X ${MD5_PW}983	log_test $? 0 "MD5: VRF: Prefix config"984 985	# client in prefix, wrong password986	log_start987	show_hint "Should timeout since client uses wrong password"988	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &989	sleep 1990	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}991	log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"992 993	# client outside of prefix994	log_start995	show_hint "Should timeout since client address is outside of prefix"996	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &997	sleep 1998	run_cmd_nsb nettest -c ${NSB_LO_IP} -r ${NSA_IP} -X ${MD5_PW}999	log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"1000 1001	#1002	# duplicate config between default VRF and a VRF1003	#1004 1005	log_start1006	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &1007	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &1008	sleep 11009	run_cmd_nsb nettest  -r ${NSA_IP} -X ${MD5_PW}1010	log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"1011 1012	log_start1013	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &1014	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &1015	sleep 11016	run_cmd_nsc nettest  -r ${NSA_IP} -X ${MD5_WRONG_PW}1017	log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"1018 1019	log_start1020	show_hint "Should timeout since client in default VRF uses VRF password"1021	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &1022	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &1023	sleep 11024	run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}1025	log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"1026 1027	log_start1028	show_hint "Should timeout since client in VRF uses default VRF password"1029	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP} &1030	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NSB_IP} &1031	sleep 11032	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}1033	log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"1034 1035	log_start1036	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &1037	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &1038	sleep 11039	run_cmd_nsb nettest  -r ${NSA_IP} -X ${MD5_PW}1040	log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"1041 1042	log_start1043	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &1044	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &1045	sleep 11046	run_cmd_nsc nettest  -r ${NSA_IP} -X ${MD5_WRONG_PW}1047	log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"1048 1049	log_start1050	show_hint "Should timeout since client in default VRF uses VRF password"1051	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &1052	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &1053	sleep 11054	run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}1055	log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"1056 1057	log_start1058	show_hint "Should timeout since client in VRF uses default VRF password"1059	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} &1060	run_cmd nettest -s -M ${MD5_WRONG_PW} -m ${NS_NET} &1061	sleep 11062	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_WRONG_PW}1063	log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"1064 1065	#1066	# negative tests1067	#1068	log_start1069	run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP}1070	log_test $? 1 "MD5: VRF: Device must be a VRF - single address"1071 1072	log_start1073	run_cmd nettest -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET}1074	log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"1075 1076	test_ipv4_md5_vrf__vrf_server__no_bind_ifindex1077	test_ipv4_md5_vrf__global_server__bind_ifindex01078}1079 1080test_ipv4_md5_vrf__vrf_server__no_bind_ifindex()1081{1082	log_start1083	show_hint "Simulates applications using VRF without TCP_MD5SIG_FLAG_IFINDEX"1084	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &1085	sleep 11086	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}1087	log_test $? 0 "MD5: VRF: VRF-bound server, unbound key accepts connection"1088 1089	log_start1090	show_hint "Binding both the socket and the key is not required but it works"1091	run_cmd nettest -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &1092	sleep 11093	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}1094	log_test $? 0 "MD5: VRF: VRF-bound server, bound key accepts connection"1095}1096 1097test_ipv4_md5_vrf__global_server__bind_ifindex0()1098{1099	# This particular test needs tcp_l3mdev_accept=1 for Global server to accept VRF connections1100	local old_tcp_l3mdev_accept1101	old_tcp_l3mdev_accept=$(get_sysctl net.ipv4.tcp_l3mdev_accept)1102	set_sysctl net.ipv4.tcp_l3mdev_accept=11103 1104	log_start1105	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &1106	sleep 11107	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}1108	log_test $? 2 "MD5: VRF: Global server, Key bound to ifindex=0 rejects VRF connection"1109 1110	log_start1111	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --force-bind-key-ifindex &1112	sleep 11113	run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}1114	log_test $? 0 "MD5: VRF: Global server, key bound to ifindex=0 accepts non-VRF connection"1115	log_start1116 1117	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &1118	sleep 11119	run_cmd_nsb nettest -r ${NSA_IP} -X ${MD5_PW}1120	log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts VRF connection"1121 1122	log_start1123	run_cmd nettest -s -M ${MD5_PW} -m ${NS_NET} --no-bind-key-ifindex &1124	sleep 11125	run_cmd_nsc nettest -r ${NSA_IP} -X ${MD5_PW}1126	log_test $? 0 "MD5: VRF: Global server, key not bound to ifindex accepts non-VRF connection"1127 1128	# restore value1129	set_sysctl net.ipv4.tcp_l3mdev_accept="$old_tcp_l3mdev_accept"1130}1131 1132ipv4_tcp_dontroute()1133{1134	local syncookies=$11135	local nsa_syncookies1136	local nsb_syncookies1137	local a1138 1139	#1140	# Link local connection tests (SO_DONTROUTE).1141	# Connections should succeed only when the remote IP address is1142	# on link (doesn't need to be routed through a gateway).1143	#1144 1145	nsa_syncookies=$(ip netns exec "${NSA}" sysctl -n net.ipv4.tcp_syncookies)1146	nsb_syncookies=$(ip netns exec "${NSB}" sysctl -n net.ipv4.tcp_syncookies)1147	ip netns exec "${NSA}" sysctl -wq net.ipv4.tcp_syncookies=${syncookies}1148	ip netns exec "${NSB}" sysctl -wq net.ipv4.tcp_syncookies=${syncookies}1149 1150	# Test with eth1 address (on link).1151 1152	a=${NSB_IP}1153	log_start1154	do_run_cmd nettest -B -N "${NSA}" -O "${NSB}" -r ${a} --client-dontroute1155	log_test_addr ${a} $? 0 "SO_DONTROUTE client, syncookies=${syncookies}"1156 1157	a=${NSB_IP}1158	log_start1159	do_run_cmd nettest -B -N "${NSA}" -O "${NSB}" -r ${a} --server-dontroute1160	log_test_addr ${a} $? 0 "SO_DONTROUTE server, syncookies=${syncookies}"1161 1162	# Test with loopback address (routed).1163	#1164	# The client would use the eth1 address as source IP by default.1165	# Therefore, we need to use the -c option here, to force the use of the1166	# routed (loopback) address as source IP (so that the server will try1167	# to respond to a routed address and not a link local one).1168 1169	a=${NSB_LO_IP}1170	log_start1171	show_hint "Should fail 'Network is unreachable' since server is not on link"1172	do_run_cmd nettest -B -N "${NSA}" -O "${NSB}" -c "${NSA_LO_IP}" -r ${a} --client-dontroute1173	log_test_addr ${a} $? 1 "SO_DONTROUTE client, syncookies=${syncookies}"1174 1175	a=${NSB_LO_IP}1176	log_start1177	show_hint "Should timeout since server cannot respond (client is not on link)"1178	do_run_cmd nettest -B -N "${NSA}" -O "${NSB}" -c "${NSA_LO_IP}" -r ${a} --server-dontroute1179	log_test_addr ${a} $? 2 "SO_DONTROUTE server, syncookies=${syncookies}"1180 1181	ip netns exec "${NSB}" sysctl -wq net.ipv4.tcp_syncookies=${nsb_syncookies}1182	ip netns exec "${NSA}" sysctl -wq net.ipv4.tcp_syncookies=${nsa_syncookies}1183}1184 1185ipv4_tcp_novrf()1186{1187	local a1188 1189	#1190	# server tests1191	#1192	for a in ${NSA_IP} ${NSA_LO_IP}1193	do1194		log_start1195		run_cmd nettest -s &1196		sleep 11197		run_cmd_nsb nettest -r ${a}1198		log_test_addr ${a} $? 0 "Global server"1199	done1200 1201	a=${NSA_IP}1202	log_start1203	run_cmd nettest -s -I ${NSA_DEV} &1204	sleep 11205	run_cmd_nsb nettest -r ${a}1206	log_test_addr ${a} $? 0 "Device server"1207 1208	# verify TCP reset sent and received1209	for a in ${NSA_IP} ${NSA_LO_IP}1210	do1211		log_start1212		show_hint "Should fail 'Connection refused' since there is no server"1213		run_cmd_nsb nettest -r ${a}1214		log_test_addr ${a} $? 1 "No server"1215	done1216 1217	#1218	# client1219	#1220	for a in ${NSB_IP} ${NSB_LO_IP}1221	do1222		log_start1223		run_cmd_nsb nettest -s &1224		sleep 11225		run_cmd nettest -r ${a} -0 ${NSA_IP}1226		log_test_addr ${a} $? 0 "Client"1227 1228		log_start1229		run_cmd_nsb nettest -s &1230		sleep 11231		run_cmd nettest -r ${a} -d ${NSA_DEV}1232		log_test_addr ${a} $? 0 "Client, device bind"1233 1234		log_start1235		show_hint "Should fail 'Connection refused'"1236		run_cmd nettest -r ${a}1237		log_test_addr ${a} $? 1 "No server, unbound client"1238 1239		log_start1240		show_hint "Should fail 'Connection refused'"1241		run_cmd nettest -r ${a} -d ${NSA_DEV}1242		log_test_addr ${a} $? 1 "No server, device client"1243	done1244 1245	#1246	# local address tests1247	#1248	for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.11249	do1250		log_start1251		run_cmd nettest -s &1252		sleep 11253		run_cmd nettest -r ${a} -0 ${a} -1 ${a}1254		log_test_addr ${a} $? 0 "Global server, local connection"1255	done1256 1257	a=${NSA_IP}1258	log_start1259	run_cmd nettest -s -I ${NSA_DEV} &1260	sleep 11261	run_cmd nettest -r ${a} -0 ${a}1262	log_test_addr ${a} $? 0 "Device server, unbound client, local connection"1263 1264	for a in ${NSA_LO_IP} 127.0.0.11265	do1266		log_start1267		show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"1268		run_cmd nettest -s -I ${NSA_DEV} &1269		sleep 11270		run_cmd nettest -r ${a}1271		log_test_addr ${a} $? 1 "Device server, unbound client, local connection"1272	done1273 1274	a=${NSA_IP}1275	log_start1276	run_cmd nettest -s &1277	sleep 11278	run_cmd nettest -r ${a} -0 ${a} -d ${NSA_DEV}1279	log_test_addr ${a} $? 0 "Global server, device client, local connection"1280 1281	for a in ${NSA_LO_IP} 127.0.0.11282	do1283		log_start1284		show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"1285		run_cmd nettest -s &1286		sleep 11287		run_cmd nettest -r ${a} -d ${NSA_DEV}1288		log_test_addr ${a} $? 1 "Global server, device client, local connection"1289	done1290 1291	a=${NSA_IP}1292	log_start1293	run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &1294	sleep 11295	run_cmd nettest  -d ${NSA_DEV} -r ${a} -0 ${a}1296	log_test_addr ${a} $? 0 "Device server, device client, local connection"1297 1298	log_start1299	show_hint "Should fail 'Connection refused'"1300	run_cmd nettest -d ${NSA_DEV} -r ${a}1301	log_test_addr ${a} $? 1 "No server, device client, local conn"1302 1303	[ "$fips_enabled" = "1" ] || ipv4_tcp_md5_novrf1304 1305	ipv4_tcp_dontroute 01306	ipv4_tcp_dontroute 21307}1308 1309ipv4_tcp_vrf()1310{1311	local a1312 1313	# disable global server1314	log_subsection "Global server disabled"1315 1316	set_sysctl net.ipv4.tcp_l3mdev_accept=01317 1318	#1319	# server tests1320	#1321	for a in ${NSA_IP} ${VRF_IP}1322	do1323		log_start1324		show_hint "Should fail 'Connection refused' since global server with VRF is disabled"1325		run_cmd nettest -s &1326		sleep 11327		run_cmd_nsb nettest -r ${a}1328		log_test_addr ${a} $? 1 "Global server"1329 1330		log_start1331		run_cmd nettest -s -I ${VRF} -3 ${VRF} &1332		sleep 11333		run_cmd_nsb nettest -r ${a}1334		log_test_addr ${a} $? 0 "VRF server"1335 1336		log_start1337		run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &1338		sleep 11339		run_cmd_nsb nettest -r ${a}1340		log_test_addr ${a} $? 0 "Device server"1341 1342		# verify TCP reset received1343		log_start1344		show_hint "Should fail 'Connection refused' since there is no server"1345		run_cmd_nsb nettest -r ${a}1346		log_test_addr ${a} $? 1 "No server"1347	done1348 1349	# local address tests1350	# (${VRF_IP} and 127.0.0.1 both timeout)1351	a=${NSA_IP}1352	log_start1353	show_hint "Should fail 'Connection refused' since global server with VRF is disabled"1354	run_cmd nettest -s &1355	sleep 11356	run_cmd nettest -r ${a} -d ${NSA_DEV}1357	log_test_addr ${a} $? 1 "Global server, local connection"1358 1359	# run MD5 tests1360	if [ "$fips_enabled" = "0" ]; then1361		setup_vrf_dup1362		ipv4_tcp_md51363		cleanup_vrf_dup1364	fi1365 1366	#1367	# enable VRF global server1368	#1369	log_subsection "VRF Global server enabled"1370	set_sysctl net.ipv4.tcp_l3mdev_accept=11371 1372	for a in ${NSA_IP} ${VRF_IP}1373	do1374		log_start1375		show_hint "client socket should be bound to VRF"1376		run_cmd nettest -s -3 ${VRF} &1377		sleep 11378		run_cmd_nsb nettest -r ${a}1379		log_test_addr ${a} $? 0 "Global server"1380 1381		log_start1382		show_hint "client socket should be bound to VRF"1383		run_cmd nettest -s -I ${VRF} -3 ${VRF} &1384		sleep 11385		run_cmd_nsb nettest -r ${a}1386		log_test_addr ${a} $? 0 "VRF server"1387 1388		# verify TCP reset received1389		log_start1390		show_hint "Should fail 'Connection refused'"1391		run_cmd_nsb nettest -r ${a}1392		log_test_addr ${a} $? 1 "No server"1393	done1394 1395	a=${NSA_IP}1396	log_start1397	show_hint "client socket should be bound to device"1398	run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &1399	sleep 11400	run_cmd_nsb nettest -r ${a}1401	log_test_addr ${a} $? 0 "Device server"1402 1403	# local address tests1404	for a in ${NSA_IP} ${VRF_IP}1405	do1406		log_start1407		show_hint "Should fail 'Connection refused' since client is not bound to VRF"1408		run_cmd nettest -s -I ${VRF} &1409		sleep 11410		run_cmd nettest -r ${a}1411		log_test_addr ${a} $? 1 "Global server, local connection"1412	done1413 1414	#1415	# client1416	#1417	for a in ${NSB_IP} ${NSB_LO_IP}1418	do1419		log_start1420		run_cmd_nsb nettest -s &1421		sleep 11422		run_cmd nettest -r ${a} -d ${VRF}1423		log_test_addr ${a} $? 0 "Client, VRF bind"1424 1425		log_start1426		run_cmd_nsb nettest -s &1427		sleep 11428		run_cmd nettest -r ${a} -d ${NSA_DEV}1429		log_test_addr ${a} $? 0 "Client, device bind"1430 1431		log_start1432		show_hint "Should fail 'Connection refused'"1433		run_cmd nettest -r ${a} -d ${VRF}1434		log_test_addr ${a} $? 1 "No server, VRF client"1435 1436		log_start1437		show_hint "Should fail 'Connection refused'"1438		run_cmd nettest -r ${a} -d ${NSA_DEV}1439		log_test_addr ${a} $? 1 "No server, device client"1440	done1441 1442	for a in ${NSA_IP} ${VRF_IP} 127.0.0.11443	do1444		log_start1445		run_cmd nettest -s -I ${VRF} -3 ${VRF} &1446		sleep 11447		run_cmd nettest -r ${a} -d ${VRF} -0 ${a}1448		log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"1449	done1450 1451	a=${NSA_IP}1452	log_start1453	run_cmd nettest -s -I ${VRF} -3 ${VRF} &1454	sleep 11455	run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}1456	log_test_addr ${a} $? 0 "VRF server, device client, local connection"1457 1458	log_start1459	show_hint "Should fail 'No route to host' since client is out of VRF scope"1460	run_cmd nettest -s -I ${VRF} &1461	sleep 11462	run_cmd nettest -r ${a}1463	log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"1464 1465	log_start1466	run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &1467	sleep 11468	run_cmd nettest -r ${a} -d ${VRF} -0 ${a}1469	log_test_addr ${a} $? 0 "Device server, VRF client, local connection"1470 1471	log_start1472	run_cmd nettest -s -I ${NSA_DEV} -3 ${NSA_DEV} &1473	sleep 11474	run_cmd nettest -r ${a} -d ${NSA_DEV} -0 ${a}1475	log_test_addr ${a} $? 0 "Device server, device client, local connection"1476}1477 1478ipv4_tcp()1479{1480	log_section "IPv4/TCP"1481	log_subsection "No VRF"1482	setup1483 1484	# tcp_l3mdev_accept should have no affect without VRF;1485	# run tests with it enabled and disabled to verify1486	log_subsection "tcp_l3mdev_accept disabled"1487	set_sysctl net.ipv4.tcp_l3mdev_accept=01488	ipv4_tcp_novrf1489	log_subsection "tcp_l3mdev_accept enabled"1490	set_sysctl net.ipv4.tcp_l3mdev_accept=11491	ipv4_tcp_novrf1492 1493	log_subsection "With VRF"1494	setup "yes"1495	ipv4_tcp_vrf1496}1497 1498################################################################################1499# IPv4 UDP1500 1501ipv4_udp_novrf()1502{1503	local a1504 1505	#1506	# server tests1507	#1508	for a in ${NSA_IP} ${NSA_LO_IP}1509	do1510		log_start1511		run_cmd nettest -D -s -3 ${NSA_DEV} &1512		sleep 11513		run_cmd_nsb nettest -D -r ${a}1514		log_test_addr ${a} $? 0 "Global server"1515 1516		log_start1517		show_hint "Should fail 'Connection refused' since there is no server"1518		run_cmd_nsb nettest -D -r ${a}1519		log_test_addr ${a} $? 1 "No server"1520	done1521 1522	a=${NSA_IP}1523	log_start1524	run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &1525	sleep 11526	run_cmd_nsb nettest -D -r ${a}1527	log_test_addr ${a} $? 0 "Device server"1528 1529	#1530	# client1531	#1532	for a in ${NSB_IP} ${NSB_LO_IP}1533	do1534		log_start1535		run_cmd_nsb nettest -D -s &1536		sleep 11537		run_cmd nettest -D -r ${a} -0 ${NSA_IP}1538		log_test_addr ${a} $? 0 "Client"1539 1540		log_start1541		run_cmd_nsb nettest -D -s &1542		sleep 11543		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP}1544		log_test_addr ${a} $? 0 "Client, device bind"1545 1546		log_start1547		run_cmd_nsb nettest -D -s &1548		sleep 11549		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP}1550		log_test_addr ${a} $? 0 "Client, device send via cmsg"1551 1552		log_start1553		run_cmd_nsb nettest -D -s &1554		sleep 11555		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP}1556		log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF"1557 1558		log_start1559		run_cmd_nsb nettest -D -s &1560		sleep 11561		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP} -U1562		log_test_addr ${a} $? 0 "Client, device bind via IP_UNICAST_IF, with connect()"1563 1564 1565		log_start1566		show_hint "Should fail 'Connection refused'"1567		run_cmd nettest -D -r ${a}1568		log_test_addr ${a} $? 1 "No server, unbound client"1569 1570		log_start1571		show_hint "Should fail 'Connection refused'"1572		run_cmd nettest -D -r ${a} -d ${NSA_DEV}1573		log_test_addr ${a} $? 1 "No server, device client"1574	done1575 1576	#1577	# local address tests1578	#1579	for a in ${NSA_IP} ${NSA_LO_IP} 127.0.0.11580	do1581		log_start1582		run_cmd nettest -D -s &1583		sleep 11584		run_cmd nettest -D -r ${a} -0 ${a} -1 ${a}1585		log_test_addr ${a} $? 0 "Global server, local connection"1586	done1587 1588	a=${NSA_IP}1589	log_start1590	run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &1591	sleep 11592	run_cmd nettest -D -r ${a}1593	log_test_addr ${a} $? 0 "Device server, unbound client, local connection"1594 1595	for a in ${NSA_LO_IP} 127.0.0.11596	do1597		log_start1598		show_hint "Should fail 'Connection refused' since address is out of device scope"1599		run_cmd nettest -s -D -I ${NSA_DEV} &1600		sleep 11601		run_cmd nettest -D -r ${a}1602		log_test_addr ${a} $? 1 "Device server, unbound client, local connection"1603	done1604 1605	a=${NSA_IP}1606	log_start1607	run_cmd nettest -s -D &1608	sleep 11609	run_cmd nettest -D -d ${NSA_DEV} -r ${a}1610	log_test_addr ${a} $? 0 "Global server, device client, local connection"1611 1612	log_start1613	run_cmd nettest -s -D &1614	sleep 11615	run_cmd nettest -D -d ${NSA_DEV} -C -r ${a}1616	log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"1617 1618	log_start1619	run_cmd nettest -s -D &1620	sleep 11621	run_cmd nettest -D -d ${NSA_DEV} -S -r ${a}1622	log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection"1623 1624	log_start1625	run_cmd nettest -s -D &1626	sleep 11627	run_cmd nettest -D -d ${NSA_DEV} -S -r ${a} -U1628	log_test_addr ${a} $? 0 "Global server, device client via IP_UNICAST_IF, local connection, with connect()"1629 1630 1631	# IPv4 with device bind has really weird behavior - it overrides the1632	# fib lookup, generates an rtable and tries to send the packet. This1633	# causes failures for local traffic at different places1634	for a in ${NSA_LO_IP} 127.0.0.11635	do1636		log_start1637		show_hint "Should fail since addresses on loopback are out of device scope"1638		run_cmd nettest -D -s &1639		sleep 11640		run_cmd nettest -D -r ${a} -d ${NSA_DEV}1641		log_test_addr ${a} $? 2 "Global server, device client, local connection"1642 1643		log_start1644		show_hint "Should fail since addresses on loopback are out of device scope"1645		run_cmd nettest -D -s &1646		sleep 11647		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -C1648		log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"1649 1650		log_start1651		show_hint "Should fail since addresses on loopback are out of device scope"1652		run_cmd nettest -D -s &1653		sleep 11654		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S1655		log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"1656 1657		log_start1658		show_hint "Should fail since addresses on loopback are out of device scope"1659		run_cmd nettest -D -s &1660		sleep 11661		run_cmd nettest -D -r ${a} -d ${NSA_DEV} -S -U1662		log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection, with connect()"1663 1664 1665	done1666 1667	a=${NSA_IP}1668	log_start1669	run_cmd nettest -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &1670	sleep 11671	run_cmd nettest -D -d ${NSA_DEV} -r ${a} -0 ${a}1672	log_test_addr ${a} $? 0 "Device server, device client, local conn"1673 1674	log_start1675	run_cmd nettest -D -d ${NSA_DEV} -r ${a}1676	log_test_addr ${a} $? 2 "No server, device client, local conn"1677 1678	#1679	# Link local connection tests (SO_DONTROUTE).1680	# Connections should succeed only when the remote IP address is1681	# on link (doesn't need to be routed through a gateway).1682	#1683 1684	a=${NSB_IP}1685	log_start1686	do_run_cmd nettest -B -D -N "${NSA}" -O "${NSB}" -r ${a} --client-dontroute1687	log_test_addr ${a} $? 0 "SO_DONTROUTE client"1688 1689	a=${NSB_LO_IP}1690	log_start1691	show_hint "Should fail 'Network is unreachable' since server is not on link"1692	do_run_cmd nettest -B -D -N "${NSA}" -O "${NSB}" -r ${a} --client-dontroute1693	log_test_addr ${a} $? 1 "SO_DONTROUTE client"1694}1695 1696ipv4_udp_vrf()1697{1698	local a1699 1700	# disable global server1701	log_subsection "Global server disabled"1702	set_sysctl net.ipv4.udp_l3mdev_accept=01703 1704	#1705	# server tests1706	#1707	for a in ${NSA_IP} ${VRF_IP}1708	do1709		log_start1710		show_hint "Fails because ingress is in a VRF and global server is disabled"1711		run_cmd nettest -D -s &1712		sleep 11713		run_cmd_nsb nettest -D -r ${a}1714		log_test_addr ${a} $? 1 "Global server"1715 1716		log_start1717		run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &1718		sleep 11719		run_cmd_nsb nettest -D -r ${a}1720		log_test_addr ${a} $? 0 "VRF server"1721 1722		log_start1723		run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &1724		sleep 11725		run_cmd_nsb nettest -D -r ${a}1726		log_test_addr ${a} $? 0 "Enslaved device server"1727 1728		log_start1729		show_hint "Should fail 'Connection refused' since there is no server"1730		run_cmd_nsb nettest -D -r ${a}1731		log_test_addr ${a} $? 1 "No server"1732 1733		log_start1734		show_hint "Should fail 'Connection refused' since global server is out of scope"1735		run_cmd nettest -D -s &1736		sleep 11737		run_cmd nettest -D -d ${VRF} -r ${a}1738		log_test_addr ${a} $? 1 "Global server, VRF client, local connection"1739	done1740 1741	a=${NSA_IP}1742	log_start1743	run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &1744	sleep 11745	run_cmd nettest -D -d ${VRF} -r ${a}1746	log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"1747 1748	log_start1749	run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &1750	sleep 11751	run_cmd nettest -D -d ${NSA_DEV} -r ${a}1752	log_test_addr ${a} $? 0 "VRF server, enslaved device client, local connection"1753 1754	a=${NSA_IP}1755	log_start1756	run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &1757	sleep 11758	run_cmd nettest -D -d ${VRF} -r ${a}1759	log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"1760 1761	log_start1762	run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &1763	sleep 11764	run_cmd nettest -D -d ${NSA_DEV} -r ${a}1765	log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"1766 1767	# enable global server1768	log_subsection "Global server enabled"1769	set_sysctl net.ipv4.udp_l3mdev_accept=11770 1771	#1772	# server tests1773	#1774	for a in ${NSA_IP} ${VRF_IP}1775	do1776		log_start1777		run_cmd nettest -D -s -3 ${NSA_DEV} &1778		sleep 11779		run_cmd_nsb nettest -D -r ${a}1780		log_test_addr ${a} $? 0 "Global server"1781 1782		log_start1783		run_cmd nettest -D -I ${VRF} -s -3 ${NSA_DEV} &1784		sleep 11785		run_cmd_nsb nettest -D -r ${a}1786		log_test_addr ${a} $? 0 "VRF server"1787 1788		log_start1789		run_cmd nettest -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &1790		sleep 11791		run_cmd_nsb nettest -D -r ${a}1792		log_test_addr ${a} $? 0 "Enslaved device server"1793 1794		log_start1795		show_hint "Should fail 'Connection refused'"1796		run_cmd_nsb nettest -D -r ${a}1797		log_test_addr ${a} $? 1 "No server"1798	done1799 1800	#1801	# client tests1802	#1803	log_start1804	run_cmd_nsb nettest -D -s &1805	sleep 11806	run_cmd nettest -d ${VRF} -D -r ${NSB_IP} -1 ${NSA_IP}1807	log_test $? 0 "VRF client"1808 1809	log_start1810	run_cmd_nsb nettest -D -s &1811	sleep 11812	run_cmd nettest -d ${NSA_DEV} -D -r ${NSB_IP} -1 ${NSA_IP}1813	log_test $? 0 "Enslaved device client"1814 1815	# negative test - should fail1816	log_start1817	show_hint "Should fail 'Connection refused'"1818	run_cmd nettest -D -d ${VRF} -r ${NSB_IP}1819	log_test $? 1 "No server, VRF client"1820 1821	log_start1822	show_hint "Should fail 'Connection refused'"1823	run_cmd nettest -D -d ${NSA_DEV} -r ${NSB_IP}1824	log_test $? 1 "No server, enslaved device client"1825 1826	#1827	# local address tests1828	#1829	a=${NSA_IP}1830	log_start1831	run_cmd nettest -D -s -3 ${NSA_DEV} &1832	sleep 11833	run_cmd nettest -D -d ${VRF} -r ${a}1834	log_test_addr ${a} $? 0 "Global server, VRF client, local conn"1835 1836	log_start1837	run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &1838	sleep 11839	run_cmd nettest -D -d ${VRF} -r ${a}1840	log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"1841 1842	log_start1843	run_cmd nettest -s -D -I ${VRF} -3 ${NSA_DEV} &1844	sleep 11845	run_cmd nettest -D -d ${NSA_DEV} -r ${a}1846	log_test_addr ${a} $? 0 "VRF server, device client, local conn"1847 1848	log_start1849	run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &1850	sleep 11851	run_cmd nettest -D -d ${VRF} -r ${a}1852	log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"1853 1854	log_start1855	run_cmd nettest -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &1856	sleep 11857	run_cmd nettest -D -d ${NSA_DEV} -r ${a}1858	log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"1859 1860	for a in ${VRF_IP} 127.0.0.11861	do1862		log_start1863		run_cmd nettest -D -s -3 ${VRF} &1864		sleep 11865		run_cmd nettest -D -d ${VRF} -r ${a}1866		log_test_addr ${a} $? 0 "Global server, VRF client, local conn"1867	done1868 1869	for a in ${VRF_IP} 127.0.0.11870	do1871		log_start1872		run_cmd nettest -s -D -I ${VRF} -3 ${VRF} &1873		sleep 11874		run_cmd nettest -D -d ${VRF} -r ${a}1875		log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"1876	done1877 1878	# negative test - should fail1879	# verifies ECONNREFUSED1880	for a in ${NSA_IP} ${VRF_IP} 127.0.0.11881	do1882		log_start1883		show_hint "Should fail 'Connection refused'"1884		run_cmd nettest -D -d ${VRF} -r ${a}1885		log_test_addr ${a} $? 1 "No server, VRF client, local conn"1886	done1887}1888 1889ipv4_udp()1890{1891	log_section "IPv4/UDP"1892	log_subsection "No VRF"1893 1894	setup1895 1896	# udp_l3mdev_accept should have no affect without VRF;1897	# run tests with it enabled and disabled to verify1898	log_subsection "udp_l3mdev_accept disabled"1899	set_sysctl net.ipv4.udp_l3mdev_accept=01900	ipv4_udp_novrf1901	log_subsection "udp_l3mdev_accept enabled"1902	set_sysctl net.ipv4.udp_l3mdev_accept=11903	ipv4_udp_novrf1904 1905	log_subsection "With VRF"1906	setup "yes"1907	ipv4_udp_vrf1908}1909 1910################################################################################1911# IPv4 address bind1912#1913# verifies ability or inability to bind to an address / device1914 1915ipv4_addr_bind_novrf()1916{1917	#1918	# raw socket1919	#1920	for a in ${NSA_IP} ${NSA_LO_IP}1921	do1922		log_start1923		run_cmd nettest -s -R -P icmp -l ${a} -b1924		log_test_addr ${a} $? 0 "Raw socket bind to local address"1925 1926		log_start1927		run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b1928		log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"1929	done1930 1931	#1932	# tests for nonlocal bind1933	#1934	a=${NL_IP}1935	log_start1936	run_cmd nettest -s -R -f -l ${a} -b1937	log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address"1938 1939	log_start1940	run_cmd nettest -s -f -l ${a} -b1941	log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address"1942 1943	log_start1944	run_cmd nettest -s -D -P icmp -f -l ${a} -b1945	log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address"1946 1947	#1948	# check that ICMP sockets cannot bind to broadcast and multicast addresses1949	#1950	a=${BCAST_IP}1951	log_start1952	run_cmd nettest -s -D -P icmp -l ${a} -b1953	log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address"1954 1955	a=${MCAST_IP}1956	log_start1957	run_cmd nettest -s -D -P icmp -l ${a} -b1958	log_test_addr ${a} $? 1 "ICMP socket bind to multicast address"1959 1960	#1961	# tcp sockets1962	#1963	a=${NSA_IP}1964	log_start1965	run_cmd nettest -c ${a} -r ${NSB_IP} -t1 -b1966	log_test_addr ${a} $? 0 "TCP socket bind to local address"1967 1968	log_start1969	run_cmd nettest -c ${a} -r ${NSB_IP} -d ${NSA_DEV} -t1 -b1970	log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"1971 1972	# Sadly, the kernel allows binding a socket to a device and then1973	# binding to an address not on the device. The only restriction1974	# is that the address is valid in the L3 domain. So this test1975	# passes when it really should not1976	#a=${NSA_LO_IP}1977	#log_start1978	#show_hint "Should fail with 'Cannot assign requested address'"1979	#run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b1980	#log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address"1981}1982 1983ipv4_addr_bind_vrf()1984{1985	#1986	# raw socket1987	#1988	for a in ${NSA_IP} ${VRF_IP}1989	do1990		log_start1991		show_hint "Socket not bound to VRF, but address is in VRF"1992		run_cmd nettest -s -R -P icmp -l ${a} -b1993		log_test_addr ${a} $? 1 "Raw socket bind to local address"1994 1995		log_start1996		run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b1997		log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"1998		log_start1999		run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b2000		log_test_addr ${a} $? 0 "Raw socket bind to local address after VRF bind"2001	done2002 2003	a=${NSA_LO_IP}2004	log_start2005	show_hint "Address on loopback is out of VRF scope"2006	run_cmd nettest -s -R -P icmp -l ${a} -I ${VRF} -b2007	log_test_addr ${a} $? 1 "Raw socket bind to out of scope address after VRF bind"2008 2009	#2010	# tests for nonlocal bind2011	#2012	a=${NL_IP}2013	log_start2014	run_cmd nettest -s -R -f -l ${a} -I ${VRF} -b2015	log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind"2016 2017	log_start2018	run_cmd nettest -s -f -l ${a} -I ${VRF} -b2019	log_test_addr ${a} $? 0 "TCP socket bind to nonlocal address after VRF bind"2020 2021	log_start2022	run_cmd nettest -s -D -P icmp -f -l ${a} -I ${VRF} -b2023	log_test_addr ${a} $? 0 "ICMP socket bind to nonlocal address after VRF bind"2024 2025	#2026	# check that ICMP sockets cannot bind to broadcast and multicast addresses2027	#2028	a=${BCAST_IP}2029	log_start2030	run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b2031	log_test_addr ${a} $? 1 "ICMP socket bind to broadcast address after VRF bind"2032 2033	a=${MCAST_IP}2034	log_start2035	run_cmd nettest -s -D -P icmp -l ${a} -I ${VRF} -b2036	log_test_addr ${a} $? 1 "ICMP socket bind to multicast address after VRF bind"2037 2038	#2039	# tcp sockets2040	#2041	for a in ${NSA_IP} ${VRF_IP}2042	do2043		log_start2044		run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b2045		log_test_addr ${a} $? 0 "TCP socket bind to local address"2046 2047		log_start2048		run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b2049		log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"2050	done2051 2052	a=${NSA_LO_IP}2053	log_start2054	show_hint "Address on loopback out of scope for VRF"2055	run_cmd nettest -s -l ${a} -I ${VRF} -t1 -b2056	log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"2057 2058	log_start2059	show_hint "Address on loopback out of scope for device in VRF"2060	run_cmd nettest -s -l ${a} -I ${NSA_DEV} -t1 -b2061	log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"2062}2063 2064ipv4_addr_bind()2065{2066	log_section "IPv4 address binds"2067 2068	log_subsection "No VRF"2069	setup2070	set_ping_group2071	ipv4_addr_bind_novrf2072 2073	log_subsection "With VRF"2074	setup "yes"2075	set_ping_group2076	ipv4_addr_bind_vrf2077}2078 2079################################################################################2080# IPv4 runtime tests2081 2082ipv4_rt()2083{2084	local desc="$1"2085	local varg="$2"2086	local with_vrf="yes"2087	local a2088 2089	#2090	# server tests2091	#2092	for a in ${NSA_IP} ${VRF_IP}2093	do2094		log_start2095		run_cmd nettest ${varg} -s &2096		sleep 12097		run_cmd_nsb nettest ${varg} -r ${a} &2098		sleep 32099		run_cmd ip link del ${VRF}2100		sleep 12101		log_test_addr ${a} 0 0 "${desc}, global server"2102 2103		setup ${with_vrf}2104	done2105 2106	for a in ${NSA_IP} ${VRF_IP}2107	do2108		log_start2109		run_cmd nettest ${varg} -s -I ${VRF} &2110		sleep 12111		run_cmd_nsb nettest ${varg} -r ${a} &2112		sleep 32113		run_cmd ip link del ${VRF}2114		sleep 12115		log_test_addr ${a} 0 0 "${desc}, VRF server"2116 2117		setup ${with_vrf}2118	done2119 2120	a=${NSA_IP}2121	log_start2122	run_cmd nettest ${varg} -s -I ${NSA_DEV} &2123	sleep 12124	run_cmd_nsb nettest ${varg} -r ${a} &2125	sleep 32126	run_cmd ip link del ${VRF}2127	sleep 12128	log_test_addr ${a} 0 0 "${desc}, enslaved device server"2129 2130	setup ${with_vrf}2131 2132	#2133	# client test2134	#2135	log_start2136	run_cmd_nsb nettest ${varg} -s &2137	sleep 12138	run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP} &2139	sleep 32140	run_cmd ip link del ${VRF}2141	sleep 12142	log_test_addr ${a} 0 0 "${desc}, VRF client"2143 2144	setup ${with_vrf}2145 2146	log_start2147	run_cmd_nsb nettest ${varg} -s &2148	sleep 12149	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP} &2150	sleep 32151	run_cmd ip link del ${VRF}2152	sleep 12153	log_test_addr ${a} 0 0 "${desc}, enslaved device client"2154 2155	setup ${with_vrf}2156 2157	#2158	# local address tests2159	#2160	for a in ${NSA_IP} ${VRF_IP}2161	do2162		log_start2163		run_cmd nettest ${varg} -s &2164		sleep 12165		run_cmd nettest ${varg} -d ${VRF} -r ${a} &2166		sleep 32167		run_cmd ip link del ${VRF}2168		sleep 12169		log_test_addr ${a} 0 0 "${desc}, global server, VRF client, local"2170 2171		setup ${with_vrf}2172	done2173 2174	for a in ${NSA_IP} ${VRF_IP}2175	do2176		log_start2177		run_cmd nettest ${varg} -I ${VRF} -s &2178		sleep 12179		run_cmd nettest ${varg} -d ${VRF} -r ${a} &2180		sleep 32181		run_cmd ip link del ${VRF}2182		sleep 12183		log_test_addr ${a} 0 0 "${desc}, VRF server and client, local"2184 2185		setup ${with_vrf}2186	done2187 2188	a=${NSA_IP}2189	log_start2190 2191	run_cmd nettest ${varg} -s &2192	sleep 12193	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &2194	sleep 32195	run_cmd ip link del ${VRF}2196	sleep 12197	log_test_addr ${a} 0 0 "${desc}, global server, enslaved device client, local"2198 2199	setup ${with_vrf}2200 2201	log_start2202	run_cmd nettest ${varg} -I ${VRF} -s &2203	sleep 12204	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &2205	sleep 32206	run_cmd ip link del ${VRF}2207	sleep 12208	log_test_addr ${a} 0 0 "${desc}, VRF server, enslaved device client, local"2209 2210	setup ${with_vrf}2211 2212	log_start2213	run_cmd nettest ${varg} -I ${NSA_DEV} -s &2214	sleep 12215	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &2216	sleep 32217	run_cmd ip link del ${VRF}2218	sleep 12219	log_test_addr ${a} 0 0 "${desc}, enslaved device server and client, local"2220}2221 2222ipv4_ping_rt()2223{2224	local with_vrf="yes"2225	local a2226 2227	for a in ${NSA_IP} ${VRF_IP}2228	do2229		log_start2230		run_cmd_nsb ping -f ${a} &2231		sleep 32232		run_cmd ip link del ${VRF}2233		sleep 12234		log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"2235 2236		setup ${with_vrf}2237	done2238 2239	a=${NSB_IP}2240	log_start2241	run_cmd ping -f -I ${VRF} ${a} &2242	sleep 32243	run_cmd ip link del ${VRF}2244	sleep 12245	log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"2246}2247 2248ipv4_runtime()2249{2250	log_section "Run time tests - ipv4"2251 2252	setup "yes"2253	ipv4_ping_rt2254 2255	setup "yes"2256	ipv4_rt "TCP active socket"  "-n -1"2257 2258	setup "yes"2259	ipv4_rt "TCP passive socket" "-i"2260}2261 2262################################################################################2263# IPv62264 2265ipv6_ping_novrf()2266{2267	local a2268 2269	# should not have an impact, but make a known state2270	set_sysctl net.ipv4.raw_l3mdev_accept=0 2>/dev/null2271 2272	#2273	# out2274	#2275	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}2276	do2277		log_start2278		run_cmd ${ping6} -c1 -w1 ${a}2279		log_test_addr ${a} $? 0 "ping out"2280	done2281 2282	for a in ${NSB_IP6} ${NSB_LO_IP6}2283	do2284		log_start2285		run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2286		log_test_addr ${a} $? 0 "ping out, device bind"2287 2288		log_start2289		run_cmd ${ping6} -c1 -w1 -I ${NSA_LO_IP6} ${a}2290		log_test_addr ${a} $? 0 "ping out, loopback address bind"2291	done2292 2293	#2294	# in2295	#2296	for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}2297	do2298		log_start2299		run_cmd_nsb ${ping6} -c1 -w1 ${a}2300		log_test_addr ${a} $? 0 "ping in"2301	done2302 2303	#2304	# local traffic, local address2305	#2306	for a in ${NSA_IP6} ${NSA_LO_IP6} ::1 ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}2307	do2308		log_start2309		run_cmd ${ping6} -c1 -w1 ${a}2310		log_test_addr ${a} $? 0 "ping local, no bind"2311	done2312 2313	for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}2314	do2315		log_start2316		run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2317		log_test_addr ${a} $? 0 "ping local, device bind"2318	done2319 2320	for a in ${NSA_LO_IP6} ::12321	do2322		log_start2323		show_hint "Fails since address on loopback is out of device scope"2324		run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2325		log_test_addr ${a} $? 2 "ping local, device bind"2326	done2327 2328	#2329	# ip rule blocks address2330	#2331	log_start2332	setup_cmd ip -6 rule add pref 32765 from all lookup local2333	setup_cmd ip -6 rule del pref 0 from all lookup local2334	setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit2335	setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit2336 2337	a=${NSB_LO_IP6}2338	run_cmd ${ping6} -c1 -w1 ${a}2339	log_test_addr ${a} $? 2 "ping out, blocked by rule"2340 2341	log_start2342	run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2343	log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"2344 2345	a=${NSA_LO_IP6}2346	log_start2347	show_hint "Response lost due to ip rule"2348	run_cmd_nsb ${ping6} -c1 -w1 ${a}2349	log_test_addr ${a} $? 1 "ping in, blocked by rule"2350 2351	setup_cmd ip -6 rule add pref 0 from all lookup local2352	setup_cmd ip -6 rule del pref 32765 from all lookup local2353	setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit2354	setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit2355 2356	#2357	# route blocks reachability to remote address2358	#2359	log_start2360	setup_cmd ip -6 route del ${NSB_LO_IP6}2361	setup_cmd ip -6 route add unreachable ${NSB_LO_IP6} metric 102362	setup_cmd ip -6 route add unreachable ${NSB_IP6} metric 102363 2364	a=${NSB_LO_IP6}2365	run_cmd ${ping6} -c1 -w1 ${a}2366	log_test_addr ${a} $? 2 "ping out, blocked by route"2367 2368	log_start2369	run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2370	log_test_addr ${a} $? 2 "ping out, device bind, blocked by route"2371 2372	a=${NSA_LO_IP6}2373	log_start2374	show_hint "Response lost due to ip route"2375	run_cmd_nsb ${ping6} -c1 -w1 ${a}2376	log_test_addr ${a} $? 1 "ping in, blocked by route"2377 2378 2379	#2380	# remove 'remote' routes; fallback to default2381	#2382	log_start2383	setup_cmd ip -6 ro del unreachable ${NSB_LO_IP6}2384	setup_cmd ip -6 ro del unreachable ${NSB_IP6}2385 2386	a=${NSB_LO_IP6}2387	run_cmd ${ping6} -c1 -w1 ${a}2388	log_test_addr ${a} $? 2 "ping out, unreachable route"2389 2390	log_start2391	run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2392	log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"2393}2394 2395ipv6_ping_vrf()2396{2397	local a2398 2399	# should default on; does not exist on older kernels2400	set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null2401 2402	#2403	# out2404	#2405	for a in ${NSB_IP6} ${NSB_LO_IP6}2406	do2407		log_start2408		run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}2409		log_test_addr ${a} $? 0 "ping out, VRF bind"2410	done2411 2412	for a in ${NSB_LINKIP6}%${VRF} ${MCAST}%${VRF}2413	do2414		log_start2415		show_hint "Fails since VRF device does not support linklocal or multicast"2416		run_cmd ${ping6} -c1 -w1 ${a}2417		log_test_addr ${a} $? 1 "ping out, VRF bind"2418	done2419 2420	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}2421	do2422		log_start2423		run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2424		log_test_addr ${a} $? 0 "ping out, device bind"2425	done2426 2427	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}2428	do2429		log_start2430		run_cmd ip vrf exec ${VRF} ${ping6} -c1 -w1 -I ${VRF_IP6} ${a}2431		log_test_addr ${a} $? 0 "ping out, vrf device+address bind"2432	done2433 2434	#2435	# in2436	#2437	for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV} ${MCAST}%${NSB_DEV}2438	do2439		log_start2440		run_cmd_nsb ${ping6} -c1 -w1 ${a}2441		log_test_addr ${a} $? 0 "ping in"2442	done2443 2444	a=${NSA_LO_IP6}2445	log_start2446	show_hint "Fails since loopback address is out of VRF scope"2447	run_cmd_nsb ${ping6} -c1 -w1 ${a}2448	log_test_addr ${a} $? 1 "ping in"2449 2450	#2451	# local traffic, local address2452	#2453	for a in ${NSA_IP6} ${VRF_IP6} ::12454	do2455		log_start2456		show_hint "Source address should be ${a}"2457		run_cmd ${ping6} -c1 -w1 -I ${VRF} ${a}2458		log_test_addr ${a} $? 0 "ping local, VRF bind"2459	done2460 2461	for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV}2462	do2463		log_start2464		run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2465		log_test_addr ${a} $? 0 "ping local, device bind"2466	done2467 2468	# LLA to GUA - remove ipv6 global addresses from ns-B2469	setup_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}2470	setup_cmd_nsb ip -6 addr del ${NSB_LO_IP6}/128 dev lo2471	setup_cmd_nsb ip -6 ro add ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}2472 2473	for a in ${NSA_IP6} ${VRF_IP6}2474	do2475		log_start2476		run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}2477		log_test_addr ${a} $? 0 "ping in, LLA to GUA"2478	done2479 2480	setup_cmd_nsb ip -6 ro del ${NSA_IP6}/128 via ${NSA_LINKIP6} dev ${NSB_DEV}2481	setup_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV}2482	setup_cmd_nsb ip -6 addr add ${NSB_LO_IP6}/128 dev lo2483 2484	#2485	# ip rule blocks address2486	#2487	log_start2488	setup_cmd ip -6 rule add pref 50 to ${NSB_LO_IP6} prohibit2489	setup_cmd ip -6 rule add pref 51 from ${NSB_IP6} prohibit2490 2491	a=${NSB_LO_IP6}2492	run_cmd ${ping6} -c1 -w1 ${a}2493	log_test_addr ${a} $? 2 "ping out, blocked by rule"2494 2495	log_start2496	run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2497	log_test_addr ${a} $? 2 "ping out, device bind, blocked by rule"2498 2499	a=${NSA_LO_IP6}2500	log_start2501	show_hint "Response lost due to ip rule"2502	run_cmd_nsb ${ping6} -c1 -w1 ${a}2503	log_test_addr ${a} $? 1 "ping in, blocked by rule"2504 2505	log_start2506	setup_cmd ip -6 rule del pref 50 to ${NSB_LO_IP6} prohibit2507	setup_cmd ip -6 rule del pref 51 from ${NSB_IP6} prohibit2508 2509	#2510	# remove 'remote' routes; fallback to default2511	#2512	log_start2513	setup_cmd ip -6 ro del ${NSB_LO_IP6} vrf ${VRF}2514 2515	a=${NSB_LO_IP6}2516	run_cmd ${ping6} -c1 -w1 ${a}2517	log_test_addr ${a} $? 2 "ping out, unreachable route"2518 2519	log_start2520	run_cmd ${ping6} -c1 -w1 -I ${NSA_DEV} ${a}2521	log_test_addr ${a} $? 2 "ping out, device bind, unreachable route"2522 2523	ip -netns ${NSB} -6 ro del ${NSA_LO_IP6}2524	a=${NSA_LO_IP6}2525	log_start2526	run_cmd_nsb ${ping6} -c1 -w1 ${a}2527	log_test_addr ${a} $? 2 "ping in, unreachable route"2528}2529 2530ipv6_ping()2531{2532	log_section "IPv6 ping"2533 2534	log_subsection "No VRF"2535	setup2536	ipv6_ping_novrf2537	setup2538	set_ping_group2539	ipv6_ping_novrf2540 2541	log_subsection "With VRF"2542	setup "yes"2543	ipv6_ping_vrf2544	setup "yes"2545	set_ping_group2546	ipv6_ping_vrf2547}2548 2549################################################################################2550# IPv6 TCP2551 2552#2553# MD5 tests without VRF2554#2555ipv6_tcp_md5_novrf()2556{2557	#2558	# single address2559	#2560 2561	# basic use case2562	log_start2563	run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &2564	sleep 12565	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2566	log_test $? 0 "MD5: Single address config"2567 2568	# client sends MD5, server not configured2569	log_start2570	show_hint "Should timeout due to MD5 mismatch"2571	run_cmd nettest -6 -s &2572	sleep 12573	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2574	log_test $? 2 "MD5: Server no config, client uses password"2575 2576	# wrong password2577	log_start2578	show_hint "Should timeout since client uses wrong password"2579	run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_IP6} &2580	sleep 12581	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2582	log_test $? 2 "MD5: Client uses wrong password"2583 2584	# client from different address2585	log_start2586	show_hint "Should timeout due to MD5 mismatch"2587	run_cmd nettest -6 -s -M ${MD5_PW} -m ${NSB_LO_IP6} &2588	sleep 12589	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2590	log_test $? 2 "MD5: Client address does not match address configured with password"2591 2592	#2593	# MD5 extension - prefix length2594	#2595 2596	# client in prefix2597	log_start2598	run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &2599	sleep 12600	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2601	log_test $? 0 "MD5: Prefix config"2602 2603	# client in prefix, wrong password2604	log_start2605	show_hint "Should timeout since client uses wrong password"2606	run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &2607	sleep 12608	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2609	log_test $? 2 "MD5: Prefix config, client uses wrong password"2610 2611	# client outside of prefix2612	log_start2613	show_hint "Should timeout due to MD5 mismatch"2614	run_cmd nettest -6 -s -M ${MD5_PW} -m ${NS_NET6} &2615	sleep 12616	run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}2617	log_test $? 2 "MD5: Prefix config, client address not in configured prefix"2618}2619 2620#2621# MD5 tests with VRF2622#2623ipv6_tcp_md5()2624{2625	#2626	# single address2627	#2628 2629	# basic use case2630	log_start2631	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &2632	sleep 12633	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2634	log_test $? 0 "MD5: VRF: Single address config"2635 2636	# client sends MD5, server not configured2637	log_start2638	show_hint "Should timeout since server does not have MD5 auth"2639	run_cmd nettest -6 -s -I ${VRF} &2640	sleep 12641	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2642	log_test $? 2 "MD5: VRF: Server no config, client uses password"2643 2644	# wrong password2645	log_start2646	show_hint "Should timeout since client uses wrong password"2647	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &2648	sleep 12649	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2650	log_test $? 2 "MD5: VRF: Client uses wrong password"2651 2652	# client from different address2653	log_start2654	show_hint "Should timeout since server config differs from client"2655	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_LO_IP6} &2656	sleep 12657	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2658	log_test $? 2 "MD5: VRF: Client address does not match address configured with password"2659 2660	#2661	# MD5 extension - prefix length2662	#2663 2664	# client in prefix2665	log_start2666	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2667	sleep 12668	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2669	log_test $? 0 "MD5: VRF: Prefix config"2670 2671	# client in prefix, wrong password2672	log_start2673	show_hint "Should timeout since client uses wrong password"2674	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2675	sleep 12676	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2677	log_test $? 2 "MD5: VRF: Prefix config, client uses wrong password"2678 2679	# client outside of prefix2680	log_start2681	show_hint "Should timeout since client address is outside of prefix"2682	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2683	sleep 12684	run_cmd_nsb nettest -6 -c ${NSB_LO_IP6} -r ${NSA_IP6} -X ${MD5_PW}2685	log_test $? 2 "MD5: VRF: Prefix config, client address not in configured prefix"2686 2687	#2688	# duplicate config between default VRF and a VRF2689	#2690 2691	log_start2692	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &2693	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &2694	sleep 12695	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2696	log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF"2697 2698	log_start2699	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &2700	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &2701	sleep 12702	run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2703	log_test $? 0 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF"2704 2705	log_start2706	show_hint "Should timeout since client in default VRF uses VRF password"2707	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &2708	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &2709	sleep 12710	run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2711	log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in default VRF with VRF pw"2712 2713	log_start2714	show_hint "Should timeout since client in VRF uses default VRF password"2715	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NSB_IP6} &2716	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NSB_IP6} &2717	sleep 12718	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2719	log_test $? 2 "MD5: VRF: Single address config in default VRF and VRF, conn in VRF with default VRF pw"2720 2721	log_start2722	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2723	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &2724	sleep 12725	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2726	log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF"2727 2728	log_start2729	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2730	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &2731	sleep 12732	run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2733	log_test $? 0 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF"2734 2735	log_start2736	show_hint "Should timeout since client in default VRF uses VRF password"2737	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2738	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &2739	sleep 12740	run_cmd_nsc nettest -6 -r ${NSA_IP6} -X ${MD5_PW}2741	log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in default VRF with VRF pw"2742 2743	log_start2744	show_hint "Should timeout since client in VRF uses default VRF password"2745	run_cmd nettest -6 -s -I ${VRF} -M ${MD5_PW} -m ${NS_NET6} &2746	run_cmd nettest -6 -s -M ${MD5_WRONG_PW} -m ${NS_NET6} &2747	sleep 12748	run_cmd_nsb nettest -6 -r ${NSA_IP6} -X ${MD5_WRONG_PW}2749	log_test $? 2 "MD5: VRF: Prefix config in default VRF and VRF, conn in VRF with default VRF pw"2750 2751	#2752	# negative tests2753	#2754	log_start2755	run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NSB_IP6}2756	log_test $? 1 "MD5: VRF: Device must be a VRF - single address"2757 2758	log_start2759	run_cmd nettest -6 -s -I ${NSA_DEV} -M ${MD5_PW} -m ${NS_NET6}2760	log_test $? 1 "MD5: VRF: Device must be a VRF - prefix"2761 2762}2763 2764ipv6_tcp_novrf()2765{2766	local a2767 2768	#2769	# server tests2770	#2771	for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}2772	do2773		log_start2774		run_cmd nettest -6 -s &2775		sleep 12776		run_cmd_nsb nettest -6 -r ${a}2777		log_test_addr ${a} $? 0 "Global server"2778	done2779 2780	# verify TCP reset received2781	for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}2782	do2783		log_start2784		show_hint "Should fail 'Connection refused'"2785		run_cmd_nsb nettest -6 -r ${a}2786		log_test_addr ${a} $? 1 "No server"2787	done2788 2789	#2790	# client2791	#2792	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}2793	do2794		log_start2795		run_cmd_nsb nettest -6 -s &2796		sleep 12797		run_cmd nettest -6 -r ${a}2798		log_test_addr ${a} $? 0 "Client"2799	done2800 2801	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}2802	do2803		log_start2804		run_cmd_nsb nettest -6 -s &2805		sleep 12806		run_cmd nettest -6 -r ${a} -d ${NSA_DEV}2807		log_test_addr ${a} $? 0 "Client, device bind"2808	done2809 2810	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}2811	do2812		log_start2813		show_hint "Should fail 'Connection refused'"2814		run_cmd nettest -6 -r ${a} -d ${NSA_DEV}2815		log_test_addr ${a} $? 1 "No server, device client"2816	done2817 2818	#2819	# local address tests2820	#2821	for a in ${NSA_IP6} ${NSA_LO_IP6} ::12822	do2823		log_start2824		run_cmd nettest -6 -s &2825		sleep 12826		run_cmd nettest -6 -r ${a}2827		log_test_addr ${a} $? 0 "Global server, local connection"2828	done2829 2830	a=${NSA_IP6}2831	log_start2832	run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &2833	sleep 12834	run_cmd nettest -6 -r ${a} -0 ${a}2835	log_test_addr ${a} $? 0 "Device server, unbound client, local connection"2836 2837	for a in ${NSA_LO_IP6} ::12838	do2839		log_start2840		show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"2841		run_cmd nettest -6 -s -I ${NSA_DEV} &2842		sleep 12843		run_cmd nettest -6 -r ${a}2844		log_test_addr ${a} $? 1 "Device server, unbound client, local connection"2845	done2846 2847	a=${NSA_IP6}2848	log_start2849	run_cmd nettest -6 -s &2850	sleep 12851	run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}2852	log_test_addr ${a} $? 0 "Global server, device client, local connection"2853 2854	for a in ${NSA_LO_IP6} ::12855	do2856		log_start2857		show_hint "Should fail 'Connection refused' since addresses on loopback are out of device scope"2858		run_cmd nettest -6 -s &2859		sleep 12860		run_cmd nettest -6 -r ${a} -d ${NSA_DEV}2861		log_test_addr ${a} $? 1 "Global server, device client, local connection"2862	done2863 2864	for a in ${NSA_IP6} ${NSA_LINKIP6}2865	do2866		log_start2867		run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &2868		sleep 12869		run_cmd nettest -6  -d ${NSA_DEV} -r ${a}2870		log_test_addr ${a} $? 0 "Device server, device client, local conn"2871	done2872 2873	for a in ${NSA_IP6} ${NSA_LINKIP6}2874	do2875		log_start2876		show_hint "Should fail 'Connection refused'"2877		run_cmd nettest -6 -d ${NSA_DEV} -r ${a}2878		log_test_addr ${a} $? 1 "No server, device client, local conn"2879	done2880 2881	[ "$fips_enabled" = "1" ] || ipv6_tcp_md5_novrf2882}2883 2884ipv6_tcp_vrf()2885{2886	local a2887 2888	# disable global server2889	log_subsection "Global server disabled"2890 2891	set_sysctl net.ipv4.tcp_l3mdev_accept=02892 2893	#2894	# server tests2895	#2896	for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}2897	do2898		log_start2899		show_hint "Should fail 'Connection refused' since global server with VRF is disabled"2900		run_cmd nettest -6 -s &2901		sleep 12902		run_cmd_nsb nettest -6 -r ${a}2903		log_test_addr ${a} $? 1 "Global server"2904	done2905 2906	for a in ${NSA_IP6} ${VRF_IP6}2907	do2908		log_start2909		run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &2910		sleep 12911		run_cmd_nsb nettest -6 -r ${a}2912		log_test_addr ${a} $? 0 "VRF server"2913	done2914 2915	# link local is always bound to ingress device2916	a=${NSA_LINKIP6}%${NSB_DEV}2917	log_start2918	run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &2919	sleep 12920	run_cmd_nsb nettest -6 -r ${a}2921	log_test_addr ${a} $? 0 "VRF server"2922 2923	for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}2924	do2925		log_start2926		run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &2927		sleep 12928		run_cmd_nsb nettest -6 -r ${a}2929		log_test_addr ${a} $? 0 "Device server"2930	done2931 2932	# verify TCP reset received2933	for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}2934	do2935		log_start2936		show_hint "Should fail 'Connection refused'"2937		run_cmd_nsb nettest -6 -r ${a}2938		log_test_addr ${a} $? 1 "No server"2939	done2940 2941	# local address tests2942	a=${NSA_IP6}2943	log_start2944	show_hint "Should fail 'Connection refused' since global server with VRF is disabled"2945	run_cmd nettest -6 -s &2946	sleep 12947	run_cmd nettest -6 -r ${a} -d ${NSA_DEV}2948	log_test_addr ${a} $? 1 "Global server, local connection"2949 2950	# run MD5 tests2951	if [ "$fips_enabled" = "0" ]; then2952		setup_vrf_dup2953		ipv6_tcp_md52954		cleanup_vrf_dup2955	fi2956 2957	#2958	# enable VRF global server2959	#2960	log_subsection "VRF Global server enabled"2961	set_sysctl net.ipv4.tcp_l3mdev_accept=12962 2963	for a in ${NSA_IP6} ${VRF_IP6}2964	do2965		log_start2966		run_cmd nettest -6 -s -3 ${VRF} &2967		sleep 12968		run_cmd_nsb nettest -6 -r ${a}2969		log_test_addr ${a} $? 0 "Global server"2970	done2971 2972	for a in ${NSA_IP6} ${VRF_IP6}2973	do2974		log_start2975		run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &2976		sleep 12977		run_cmd_nsb nettest -6 -r ${a}2978		log_test_addr ${a} $? 0 "VRF server"2979	done2980 2981	# For LLA, child socket is bound to device2982	a=${NSA_LINKIP6}%${NSB_DEV}2983	log_start2984	run_cmd nettest -6 -s -3 ${NSA_DEV} &2985	sleep 12986	run_cmd_nsb nettest -6 -r ${a}2987	log_test_addr ${a} $? 0 "Global server"2988 2989	log_start2990	run_cmd nettest -6 -s -I ${VRF} -3 ${NSA_DEV} &2991	sleep 12992	run_cmd_nsb nettest -6 -r ${a}2993	log_test_addr ${a} $? 0 "VRF server"2994 2995	for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}2996	do2997		log_start2998		run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &2999		sleep 13000		run_cmd_nsb nettest -6 -r ${a}3001		log_test_addr ${a} $? 0 "Device server"3002	done3003 3004	# verify TCP reset received3005	for a in ${NSA_IP6} ${VRF_IP6} ${NSA_LINKIP6}%${NSB_DEV}3006	do3007		log_start3008		show_hint "Should fail 'Connection refused'"3009		run_cmd_nsb nettest -6 -r ${a}3010		log_test_addr ${a} $? 1 "No server"3011	done3012 3013	# local address tests3014	for a in ${NSA_IP6} ${VRF_IP6}3015	do3016		log_start3017		show_hint "Fails 'Connection refused' since client is not in VRF"3018		run_cmd nettest -6 -s -I ${VRF} &3019		sleep 13020		run_cmd nettest -6 -r ${a}3021		log_test_addr ${a} $? 1 "Global server, local connection"3022	done3023 3024 3025	#3026	# client3027	#3028	for a in ${NSB_IP6} ${NSB_LO_IP6}3029	do3030		log_start3031		run_cmd_nsb nettest -6 -s &3032		sleep 13033		run_cmd nettest -6 -r ${a} -d ${VRF}3034		log_test_addr ${a} $? 0 "Client, VRF bind"3035	done3036 3037	a=${NSB_LINKIP6}3038	log_start3039	show_hint "Fails since VRF device does not allow linklocal addresses"3040	run_cmd_nsb nettest -6 -s &3041	sleep 13042	run_cmd nettest -6 -r ${a} -d ${VRF}3043	log_test_addr ${a} $? 1 "Client, VRF bind"3044 3045	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}3046	do3047		log_start3048		run_cmd_nsb nettest -6 -s &3049		sleep 13050		run_cmd nettest -6 -r ${a} -d ${NSA_DEV}3051		log_test_addr ${a} $? 0 "Client, device bind"3052	done3053 3054	for a in ${NSB_IP6} ${NSB_LO_IP6}3055	do3056		log_start3057		show_hint "Should fail 'Connection refused'"3058		run_cmd nettest -6 -r ${a} -d ${VRF}3059		log_test_addr ${a} $? 1 "No server, VRF client"3060	done3061 3062	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}3063	do3064		log_start3065		show_hint "Should fail 'Connection refused'"3066		run_cmd nettest -6 -r ${a} -d ${NSA_DEV}3067		log_test_addr ${a} $? 1 "No server, device client"3068	done3069 3070	for a in ${NSA_IP6} ${VRF_IP6} ::13071	do3072		log_start3073		run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &3074		sleep 13075		run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}3076		log_test_addr ${a} $? 0 "VRF server, VRF client, local connection"3077	done3078 3079	a=${NSA_IP6}3080	log_start3081	run_cmd nettest -6 -s -I ${VRF} -3 ${VRF} &3082	sleep 13083	run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}3084	log_test_addr ${a} $? 0 "VRF server, device client, local connection"3085 3086	a=${NSA_IP6}3087	log_start3088	show_hint "Should fail since unbound client is out of VRF scope"3089	run_cmd nettest -6 -s -I ${VRF} &3090	sleep 13091	run_cmd nettest -6 -r ${a}3092	log_test_addr ${a} $? 1 "VRF server, unbound client, local connection"3093 3094	log_start3095	run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &3096	sleep 13097	run_cmd nettest -6 -r ${a} -d ${VRF} -0 ${a}3098	log_test_addr ${a} $? 0 "Device server, VRF client, local connection"3099 3100	for a in ${NSA_IP6} ${NSA_LINKIP6}3101	do3102		log_start3103		run_cmd nettest -6 -s -I ${NSA_DEV} -3 ${NSA_DEV} &3104		sleep 13105		run_cmd nettest -6 -r ${a} -d ${NSA_DEV} -0 ${a}3106		log_test_addr ${a} $? 0 "Device server, device client, local connection"3107	done3108}3109 3110ipv6_tcp()3111{3112	log_section "IPv6/TCP"3113	log_subsection "No VRF"3114	setup3115 3116	# tcp_l3mdev_accept should have no affect without VRF;3117	# run tests with it enabled and disabled to verify3118	log_subsection "tcp_l3mdev_accept disabled"3119	set_sysctl net.ipv4.tcp_l3mdev_accept=03120	ipv6_tcp_novrf3121	log_subsection "tcp_l3mdev_accept enabled"3122	set_sysctl net.ipv4.tcp_l3mdev_accept=13123	ipv6_tcp_novrf3124 3125	log_subsection "With VRF"3126	setup "yes"3127	ipv6_tcp_vrf3128}3129 3130################################################################################3131# IPv6 UDP3132 3133ipv6_udp_novrf()3134{3135	local a3136 3137	#3138	# server tests3139	#3140	for a in ${NSA_IP6} ${NSA_LINKIP6}%${NSB_DEV}3141	do3142		log_start3143		run_cmd nettest -6 -D -s -3 ${NSA_DEV} &3144		sleep 13145		run_cmd_nsb nettest -6 -D -r ${a}3146		log_test_addr ${a} $? 0 "Global server"3147 3148		log_start3149		run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3150		sleep 13151		run_cmd_nsb nettest -6 -D -r ${a}3152		log_test_addr ${a} $? 0 "Device server"3153	done3154 3155	a=${NSA_LO_IP6}3156	log_start3157	run_cmd nettest -6 -D -s -3 ${NSA_DEV} &3158	sleep 13159	run_cmd_nsb nettest -6 -D -r ${a}3160	log_test_addr ${a} $? 0 "Global server"3161 3162	# should fail since loopback address is out of scope for a device3163	# bound server, but it does not - hence this is more documenting3164	# behavior.3165	#log_start3166	#show_hint "Should fail since loopback address is out of scope"3167	#run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3168	#sleep 13169	#run_cmd_nsb nettest -6 -D -r ${a}3170	#log_test_addr ${a} $? 1 "Device server"3171 3172	# negative test - should fail3173	for a in ${NSA_IP6} ${NSA_LO_IP6} ${NSA_LINKIP6}%${NSB_DEV}3174	do3175		log_start3176		show_hint "Should fail 'Connection refused' since there is no server"3177		run_cmd_nsb nettest -6 -D -r ${a}3178		log_test_addr ${a} $? 1 "No server"3179	done3180 3181	#3182	# client3183	#3184	for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV}3185	do3186		log_start3187		run_cmd_nsb nettest -6 -D -s &3188		sleep 13189		run_cmd nettest -6 -D -r ${a} -0 ${NSA_IP6}3190		log_test_addr ${a} $? 0 "Client"3191 3192		log_start3193		run_cmd_nsb nettest -6 -D -s &3194		sleep 13195		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -0 ${NSA_IP6}3196		log_test_addr ${a} $? 0 "Client, device bind"3197 3198		log_start3199		run_cmd_nsb nettest -6 -D -s &3200		sleep 13201		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C -0 ${NSA_IP6}3202		log_test_addr ${a} $? 0 "Client, device send via cmsg"3203 3204		log_start3205		run_cmd_nsb nettest -6 -D -s &3206		sleep 13207		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -0 ${NSA_IP6}3208		log_test_addr ${a} $? 0 "Client, device bind via IPV6_UNICAST_IF"3209 3210		log_start3211		show_hint "Should fail 'Connection refused'"3212		run_cmd nettest -6 -D -r ${a}3213		log_test_addr ${a} $? 1 "No server, unbound client"3214 3215		log_start3216		show_hint "Should fail 'Connection refused'"3217		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}3218		log_test_addr ${a} $? 1 "No server, device client"3219	done3220 3221	#3222	# local address tests3223	#3224	for a in ${NSA_IP6} ${NSA_LO_IP6} ::13225	do3226		log_start3227		run_cmd nettest -6 -D -s &3228		sleep 13229		run_cmd nettest -6 -D -r ${a} -0 ${a} -1 ${a}3230		log_test_addr ${a} $? 0 "Global server, local connection"3231	done3232 3233	a=${NSA_IP6}3234	log_start3235	run_cmd nettest -6 -s -D -I ${NSA_DEV} -3 ${NSA_DEV} &3236	sleep 13237	run_cmd nettest -6 -D -r ${a}3238	log_test_addr ${a} $? 0 "Device server, unbound client, local connection"3239 3240	for a in ${NSA_LO_IP6} ::13241	do3242		log_start3243		show_hint "Should fail 'Connection refused' since address is out of device scope"3244		run_cmd nettest -6 -s -D -I ${NSA_DEV} &3245		sleep 13246		run_cmd nettest -6 -D -r ${a}3247		log_test_addr ${a} $? 1 "Device server, local connection"3248	done3249 3250	a=${NSA_IP6}3251	log_start3252	run_cmd nettest -6 -s -D &3253	sleep 13254	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3255	log_test_addr ${a} $? 0 "Global server, device client, local connection"3256 3257	log_start3258	run_cmd nettest -6 -s -D &3259	sleep 13260	run_cmd nettest -6 -D -d ${NSA_DEV} -C -r ${a}3261	log_test_addr ${a} $? 0 "Global server, device send via cmsg, local connection"3262 3263	log_start3264	run_cmd nettest -6 -s -D &3265	sleep 13266	run_cmd nettest -6 -D -d ${NSA_DEV} -S -r ${a}3267	log_test_addr ${a} $? 0 "Global server, device client via IPV6_UNICAST_IF, local connection"3268 3269	for a in ${NSA_LO_IP6} ::13270	do3271		log_start3272		show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"3273		run_cmd nettest -6 -D -s &3274		sleep 13275		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV}3276		log_test_addr ${a} $? 1 "Global server, device client, local connection"3277 3278		log_start3279		show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"3280		run_cmd nettest -6 -D -s &3281		sleep 13282		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -C3283		log_test_addr ${a} $? 1 "Global server, device send via cmsg, local connection"3284 3285		log_start3286		show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"3287		run_cmd nettest -6 -D -s &3288		sleep 13289		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S3290		log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection"3291 3292		log_start3293		show_hint "Should fail 'No route to host' since addresses on loopback are out of device scope"3294		run_cmd nettest -6 -D -s &3295		sleep 13296		run_cmd nettest -6 -D -r ${a} -d ${NSA_DEV} -S -U3297		log_test_addr ${a} $? 1 "Global server, device client via IP_UNICAST_IF, local connection, with connect()"3298	done3299 3300	a=${NSA_IP6}3301	log_start3302	run_cmd nettest -6 -D -s -I ${NSA_DEV} -3 ${NSA_DEV} &3303	sleep 13304	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a} -0 ${a}3305	log_test_addr ${a} $? 0 "Device server, device client, local conn"3306 3307	log_start3308	show_hint "Should fail 'Connection refused'"3309	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3310	log_test_addr ${a} $? 1 "No server, device client, local conn"3311 3312	# LLA to GUA3313	run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}3314	run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}3315	log_start3316	run_cmd nettest -6 -s -D &3317	sleep 13318	run_cmd_nsb nettest -6 -D -r ${NSA_IP6}3319	log_test $? 0 "UDP in - LLA to GUA"3320 3321	run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}3322	run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad3323}3324 3325ipv6_udp_vrf()3326{3327	local a3328 3329	# disable global server3330	log_subsection "Global server disabled"3331	set_sysctl net.ipv4.udp_l3mdev_accept=03332 3333	#3334	# server tests3335	#3336	for a in ${NSA_IP6} ${VRF_IP6}3337	do3338		log_start3339		show_hint "Should fail 'Connection refused' since global server is disabled"3340		run_cmd nettest -6 -D -s &3341		sleep 13342		run_cmd_nsb nettest -6 -D -r ${a}3343		log_test_addr ${a} $? 1 "Global server"3344	done3345 3346	for a in ${NSA_IP6} ${VRF_IP6}3347	do3348		log_start3349		run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &3350		sleep 13351		run_cmd_nsb nettest -6 -D -r ${a}3352		log_test_addr ${a} $? 0 "VRF server"3353	done3354 3355	for a in ${NSA_IP6} ${VRF_IP6}3356	do3357		log_start3358		run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3359		sleep 13360		run_cmd_nsb nettest -6 -D -r ${a}3361		log_test_addr ${a} $? 0 "Enslaved device server"3362	done3363 3364	# negative test - should fail3365	for a in ${NSA_IP6} ${VRF_IP6}3366	do3367		log_start3368		show_hint "Should fail 'Connection refused' since there is no server"3369		run_cmd_nsb nettest -6 -D -r ${a}3370		log_test_addr ${a} $? 1 "No server"3371	done3372 3373	#3374	# local address tests3375	#3376	for a in ${NSA_IP6} ${VRF_IP6}3377	do3378		log_start3379		show_hint "Should fail 'Connection refused' since global server is disabled"3380		run_cmd nettest -6 -D -s &3381		sleep 13382		run_cmd nettest -6 -D -d ${VRF} -r ${a}3383		log_test_addr ${a} $? 1 "Global server, VRF client, local conn"3384	done3385 3386	for a in ${NSA_IP6} ${VRF_IP6}3387	do3388		log_start3389		run_cmd nettest -6 -D -I ${VRF} -s &3390		sleep 13391		run_cmd nettest -6 -D -d ${VRF} -r ${a}3392		log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"3393	done3394 3395	a=${NSA_IP6}3396	log_start3397	show_hint "Should fail 'Connection refused' since global server is disabled"3398	run_cmd nettest -6 -D -s &3399	sleep 13400	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3401	log_test_addr ${a} $? 1 "Global server, device client, local conn"3402 3403	log_start3404	run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &3405	sleep 13406	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3407	log_test_addr ${a} $? 0 "VRF server, device client, local conn"3408 3409	log_start3410	run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3411	sleep 13412	run_cmd nettest -6 -D -d ${VRF} -r ${a}3413	log_test_addr ${a} $? 0 "Enslaved device server, VRF client, local conn"3414 3415	log_start3416	run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3417	sleep 13418	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3419	log_test_addr ${a} $? 0 "Enslaved device server, device client, local conn"3420 3421	# disable global server3422	log_subsection "Global server enabled"3423	set_sysctl net.ipv4.udp_l3mdev_accept=13424 3425	#3426	# server tests3427	#3428	for a in ${NSA_IP6} ${VRF_IP6}3429	do3430		log_start3431		run_cmd nettest -6 -D -s -3 ${NSA_DEV} &3432		sleep 13433		run_cmd_nsb nettest -6 -D -r ${a}3434		log_test_addr ${a} $? 0 "Global server"3435	done3436 3437	for a in ${NSA_IP6} ${VRF_IP6}3438	do3439		log_start3440		run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &3441		sleep 13442		run_cmd_nsb nettest -6 -D -r ${a}3443		log_test_addr ${a} $? 0 "VRF server"3444	done3445 3446	for a in ${NSA_IP6} ${VRF_IP6}3447	do3448		log_start3449		run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3450		sleep 13451		run_cmd_nsb nettest -6 -D -r ${a}3452		log_test_addr ${a} $? 0 "Enslaved device server"3453	done3454 3455	# negative test - should fail3456	for a in ${NSA_IP6} ${VRF_IP6}3457	do3458		log_start3459		run_cmd_nsb nettest -6 -D -r ${a}3460		log_test_addr ${a} $? 1 "No server"3461	done3462 3463	#3464	# client tests3465	#3466	log_start3467	run_cmd_nsb nettest -6 -D -s &3468	sleep 13469	run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}3470	log_test $? 0 "VRF client"3471 3472	# negative test - should fail3473	log_start3474	run_cmd nettest -6 -D -d ${VRF} -r ${NSB_IP6}3475	log_test $? 1 "No server, VRF client"3476 3477	log_start3478	run_cmd_nsb nettest -6 -D -s &3479	sleep 13480	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}3481	log_test $? 0 "Enslaved device client"3482 3483	# negative test - should fail3484	log_start3485	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_IP6}3486	log_test $? 1 "No server, enslaved device client"3487 3488	#3489	# local address tests3490	#3491	a=${NSA_IP6}3492	log_start3493	run_cmd nettest -6 -D -s -3 ${NSA_DEV} &3494	sleep 13495	run_cmd nettest -6 -D -d ${VRF} -r ${a}3496	log_test_addr ${a} $? 0 "Global server, VRF client, local conn"3497 3498	#log_start3499	run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &3500	sleep 13501	run_cmd nettest -6 -D -d ${VRF} -r ${a}3502	log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"3503 3504 3505	a=${VRF_IP6}3506	log_start3507	run_cmd nettest -6 -D -s -3 ${VRF} &3508	sleep 13509	run_cmd nettest -6 -D -d ${VRF} -r ${a}3510	log_test_addr ${a} $? 0 "Global server, VRF client, local conn"3511 3512	log_start3513	run_cmd nettest -6 -D -I ${VRF} -s -3 ${VRF} &3514	sleep 13515	run_cmd nettest -6 -D -d ${VRF} -r ${a}3516	log_test_addr ${a} $? 0 "VRF server, VRF client, local conn"3517 3518	# negative test - should fail3519	for a in ${NSA_IP6} ${VRF_IP6}3520	do3521		log_start3522		run_cmd nettest -6 -D -d ${VRF} -r ${a}3523		log_test_addr ${a} $? 1 "No server, VRF client, local conn"3524	done3525 3526	# device to global IP3527	a=${NSA_IP6}3528	log_start3529	run_cmd nettest -6 -D -s -3 ${NSA_DEV} &3530	sleep 13531	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3532	log_test_addr ${a} $? 0 "Global server, device client, local conn"3533 3534	log_start3535	run_cmd nettest -6 -D -I ${VRF} -s -3 ${NSA_DEV} &3536	sleep 13537	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3538	log_test_addr ${a} $? 0 "VRF server, device client, local conn"3539 3540	log_start3541	run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3542	sleep 13543	run_cmd nettest -6 -D -d ${VRF} -r ${a}3544	log_test_addr ${a} $? 0 "Device server, VRF client, local conn"3545 3546	log_start3547	run_cmd nettest -6 -D -I ${NSA_DEV} -s -3 ${NSA_DEV} &3548	sleep 13549	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3550	log_test_addr ${a} $? 0 "Device server, device client, local conn"3551 3552	log_start3553	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${a}3554	log_test_addr ${a} $? 1 "No server, device client, local conn"3555 3556 3557	# link local addresses3558	log_start3559	run_cmd nettest -6 -D -s &3560	sleep 13561	run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}3562	log_test $? 0 "Global server, linklocal IP"3563 3564	log_start3565	run_cmd_nsb nettest -6 -D -d ${NSB_DEV} -r ${NSA_LINKIP6}3566	log_test $? 1 "No server, linklocal IP"3567 3568 3569	log_start3570	run_cmd_nsb nettest -6 -D -s &3571	sleep 13572	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}3573	log_test $? 0 "Enslaved device client, linklocal IP"3574 3575	log_start3576	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSB_LINKIP6}3577	log_test $? 1 "No server, device client, peer linklocal IP"3578 3579 3580	log_start3581	run_cmd nettest -6 -D -s &3582	sleep 13583	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}3584	log_test $? 0 "Enslaved device client, local conn - linklocal IP"3585 3586	log_start3587	run_cmd nettest -6 -D -d ${NSA_DEV} -r ${NSA_LINKIP6}3588	log_test $? 1 "No server, device client, local conn  - linklocal IP"3589 3590	# LLA to GUA3591	run_cmd_nsb ip -6 addr del ${NSB_IP6}/64 dev ${NSB_DEV}3592	run_cmd_nsb ip -6 ro add ${NSA_IP6}/128 dev ${NSB_DEV}3593	log_start3594	run_cmd nettest -6 -s -D &3595	sleep 13596	run_cmd_nsb nettest -6 -D -r ${NSA_IP6}3597	log_test $? 0 "UDP in - LLA to GUA"3598 3599	run_cmd_nsb ip -6 ro del ${NSA_IP6}/128 dev ${NSB_DEV}3600	run_cmd_nsb ip -6 addr add ${NSB_IP6}/64 dev ${NSB_DEV} nodad3601}3602 3603ipv6_udp()3604{3605        # should not matter, but set to known state3606        set_sysctl net.ipv4.udp_early_demux=13607 3608        log_section "IPv6/UDP"3609        log_subsection "No VRF"3610        setup3611 3612        # udp_l3mdev_accept should have no affect without VRF;3613        # run tests with it enabled and disabled to verify3614        log_subsection "udp_l3mdev_accept disabled"3615        set_sysctl net.ipv4.udp_l3mdev_accept=03616        ipv6_udp_novrf3617        log_subsection "udp_l3mdev_accept enabled"3618        set_sysctl net.ipv4.udp_l3mdev_accept=13619        ipv6_udp_novrf3620 3621        log_subsection "With VRF"3622        setup "yes"3623        ipv6_udp_vrf3624}3625 3626################################################################################3627# IPv6 address bind3628 3629ipv6_addr_bind_novrf()3630{3631	#3632	# raw socket3633	#3634	for a in ${NSA_IP6} ${NSA_LO_IP6}3635	do3636		log_start3637		run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -b3638		log_test_addr ${a} $? 0 "Raw socket bind to local address"3639 3640		log_start3641		run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b3642		log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"3643	done3644 3645	#3646	# raw socket with nonlocal bind3647	#3648	a=${NL_IP6}3649	log_start3650	run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${NSA_DEV} -b3651	log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address"3652 3653	#3654	# tcp sockets3655	#3656	a=${NSA_IP6}3657	log_start3658	run_cmd nettest -6 -s -l ${a} -t1 -b3659	log_test_addr ${a} $? 0 "TCP socket bind to local address"3660 3661	log_start3662	run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b3663	log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind"3664 3665	# Sadly, the kernel allows binding a socket to a device and then3666	# binding to an address not on the device. So this test passes3667	# when it really should not3668	a=${NSA_LO_IP6}3669	log_start3670	show_hint "Tecnically should fail since address is not on device but kernel allows"3671	run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b3672	log_test_addr ${a} $? 0 "TCP socket bind to out of scope local address"3673}3674 3675ipv6_addr_bind_vrf()3676{3677	#3678	# raw socket3679	#3680	for a in ${NSA_IP6} ${VRF_IP6}3681	do3682		log_start3683		run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b3684		log_test_addr ${a} $? 0 "Raw socket bind to local address after vrf bind"3685 3686		log_start3687		run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${NSA_DEV} -b3688		log_test_addr ${a} $? 0 "Raw socket bind to local address after device bind"3689	done3690 3691	a=${NSA_LO_IP6}3692	log_start3693	show_hint "Address on loopback is out of VRF scope"3694	run_cmd nettest -6 -s -R -P ipv6-icmp -l ${a} -I ${VRF} -b3695	log_test_addr ${a} $? 1 "Raw socket bind to invalid local address after vrf bind"3696 3697	#3698	# raw socket with nonlocal bind3699	#3700	a=${NL_IP6}3701	log_start3702	run_cmd nettest -6 -s -R -P icmp -f -l ${a} -I ${VRF} -b3703	log_test_addr ${a} $? 0 "Raw socket bind to nonlocal address after VRF bind"3704 3705	#3706	# tcp sockets3707	#3708	# address on enslaved device is valid for the VRF or device in a VRF3709	for a in ${NSA_IP6} ${VRF_IP6}3710	do3711		log_start3712		run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b3713		log_test_addr ${a} $? 0 "TCP socket bind to local address with VRF bind"3714	done3715 3716	a=${NSA_IP6}3717	log_start3718	run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b3719	log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind"3720 3721	# Sadly, the kernel allows binding a socket to a device and then3722	# binding to an address not on the device. The only restriction3723	# is that the address is valid in the L3 domain. So this test3724	# passes when it really should not3725	a=${VRF_IP6}3726	log_start3727	show_hint "Tecnically should fail since address is not on device but kernel allows"3728	run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b3729	log_test_addr ${a} $? 0 "TCP socket bind to VRF address with device bind"3730 3731	a=${NSA_LO_IP6}3732	log_start3733	show_hint "Address on loopback out of scope for VRF"3734	run_cmd nettest -6 -s -l ${a} -I ${VRF} -t1 -b3735	log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for VRF"3736 3737	log_start3738	show_hint "Address on loopback out of scope for device in VRF"3739	run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b3740	log_test_addr ${a} $? 1 "TCP socket bind to invalid local address for device bind"3741 3742}3743 3744ipv6_addr_bind()3745{3746	log_section "IPv6 address binds"3747 3748	log_subsection "No VRF"3749	setup3750	ipv6_addr_bind_novrf3751 3752	log_subsection "With VRF"3753	setup "yes"3754	ipv6_addr_bind_vrf3755}3756 3757################################################################################3758# IPv6 runtime tests3759 3760ipv6_rt()3761{3762	local desc="$1"3763	local varg="-6 $2"3764	local with_vrf="yes"3765	local a3766 3767	#3768	# server tests3769	#3770	for a in ${NSA_IP6} ${VRF_IP6}3771	do3772		log_start3773		run_cmd nettest ${varg} -s &3774		sleep 13775		run_cmd_nsb nettest ${varg} -r ${a} &3776		sleep 33777		run_cmd ip link del ${VRF}3778		sleep 13779		log_test_addr ${a} 0 0 "${desc}, global server"3780 3781		setup ${with_vrf}3782	done3783 3784	for a in ${NSA_IP6} ${VRF_IP6}3785	do3786		log_start3787		run_cmd nettest ${varg} -I ${VRF} -s &3788		sleep 13789		run_cmd_nsb nettest ${varg} -r ${a} &3790		sleep 33791		run_cmd ip link del ${VRF}3792		sleep 13793		log_test_addr ${a} 0 0 "${desc}, VRF server"3794 3795		setup ${with_vrf}3796	done3797 3798	for a in ${NSA_IP6} ${VRF_IP6}3799	do3800		log_start3801		run_cmd nettest ${varg} -I ${NSA_DEV} -s &3802		sleep 13803		run_cmd_nsb nettest ${varg} -r ${a} &3804		sleep 33805		run_cmd ip link del ${VRF}3806		sleep 13807		log_test_addr ${a} 0 0 "${desc}, enslaved device server"3808 3809		setup ${with_vrf}3810	done3811 3812	#3813	# client test3814	#3815	log_start3816	run_cmd_nsb nettest ${varg} -s &3817	sleep 13818	run_cmd nettest ${varg} -d ${VRF} -r ${NSB_IP6} &3819	sleep 33820	run_cmd ip link del ${VRF}3821	sleep 13822	log_test  0 0 "${desc}, VRF client"3823 3824	setup ${with_vrf}3825 3826	log_start3827	run_cmd_nsb nettest ${varg} -s &3828	sleep 13829	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${NSB_IP6} &3830	sleep 33831	run_cmd ip link del ${VRF}3832	sleep 13833	log_test  0 0 "${desc}, enslaved device client"3834 3835	setup ${with_vrf}3836 3837 3838	#3839	# local address tests3840	#3841	for a in ${NSA_IP6} ${VRF_IP6}3842	do3843		log_start3844		run_cmd nettest ${varg} -s &3845		sleep 13846		run_cmd nettest ${varg} -d ${VRF} -r ${a} &3847		sleep 33848		run_cmd ip link del ${VRF}3849		sleep 13850		log_test_addr ${a} 0 0 "${desc}, global server, VRF client"3851 3852		setup ${with_vrf}3853	done3854 3855	for a in ${NSA_IP6} ${VRF_IP6}3856	do3857		log_start3858		run_cmd nettest ${varg} -I ${VRF} -s &3859		sleep 13860		run_cmd nettest ${varg} -d ${VRF} -r ${a} &3861		sleep 33862		run_cmd ip link del ${VRF}3863		sleep 13864		log_test_addr ${a} 0 0 "${desc}, VRF server and client"3865 3866		setup ${with_vrf}3867	done3868 3869	a=${NSA_IP6}3870	log_start3871	run_cmd nettest ${varg} -s &3872	sleep 13873	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &3874	sleep 33875	run_cmd ip link del ${VRF}3876	sleep 13877	log_test_addr ${a} 0 0 "${desc}, global server, device client"3878 3879	setup ${with_vrf}3880 3881	log_start3882	run_cmd nettest ${varg} -I ${VRF} -s &3883	sleep 13884	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &3885	sleep 33886	run_cmd ip link del ${VRF}3887	sleep 13888	log_test_addr ${a} 0 0 "${desc}, VRF server, device client"3889 3890	setup ${with_vrf}3891 3892	log_start3893	run_cmd nettest ${varg} -I ${NSA_DEV} -s &3894	sleep 13895	run_cmd nettest ${varg} -d ${NSA_DEV} -r ${a} &3896	sleep 33897	run_cmd ip link del ${VRF}3898	sleep 13899	log_test_addr ${a} 0 0 "${desc}, device server, device client"3900}3901 3902ipv6_ping_rt()3903{3904	local with_vrf="yes"3905	local a3906 3907	a=${NSA_IP6}3908	log_start3909	run_cmd_nsb ${ping6} -f ${a} &3910	sleep 33911	run_cmd ip link del ${VRF}3912	sleep 13913	log_test_addr ${a} 0 0 "Device delete with active traffic - ping in"3914 3915	setup ${with_vrf}3916 3917	log_start3918	run_cmd ${ping6} -f ${NSB_IP6} -I ${VRF} &3919	sleep 13920	run_cmd ip link del ${VRF}3921	sleep 13922	log_test_addr ${a} 0 0 "Device delete with active traffic - ping out"3923}3924 3925ipv6_runtime()3926{3927	log_section "Run time tests - ipv6"3928 3929	setup "yes"3930	ipv6_ping_rt3931 3932	setup "yes"3933	ipv6_rt "TCP active socket"  "-n -1"3934 3935	setup "yes"3936	ipv6_rt "TCP passive socket" "-i"3937 3938	setup "yes"3939	ipv6_rt "UDP active socket"  "-D -n -1"3940}3941 3942################################################################################3943# netfilter blocking connections3944 3945netfilter_tcp_reset()3946{3947	local a3948 3949	for a in ${NSA_IP} ${VRF_IP}3950	do3951		log_start3952		run_cmd nettest -s &3953		sleep 13954		run_cmd_nsb nettest -r ${a}3955		log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"3956	done3957}3958 3959netfilter_icmp()3960{3961	local stype="$1"3962	local arg3963	local a3964 3965	[ "${stype}" = "UDP" ] && arg="-D"3966 3967	for a in ${NSA_IP} ${VRF_IP}3968	do3969		log_start3970		run_cmd nettest ${arg} -s &3971		sleep 13972		run_cmd_nsb nettest ${arg} -r ${a}3973		log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"3974	done3975}3976 3977ipv4_netfilter()3978{3979	log_section "IPv4 Netfilter"3980	log_subsection "TCP reset"3981 3982	setup "yes"3983	run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset3984 3985	netfilter_tcp_reset3986 3987	log_start3988	log_subsection "ICMP unreachable"3989 3990	log_start3991	run_cmd iptables -F3992	run_cmd iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-port-unreachable3993	run_cmd iptables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp-port-unreachable3994 3995	netfilter_icmp "TCP"3996	netfilter_icmp "UDP"3997 3998	log_start3999	iptables -F4000}4001 4002netfilter_tcp6_reset()4003{4004	local a4005 4006	for a in ${NSA_IP6} ${VRF_IP6}4007	do4008		log_start4009		run_cmd nettest -6 -s &4010		sleep 14011		run_cmd_nsb nettest -6 -r ${a}4012		log_test_addr ${a} $? 1 "Global server, reject with TCP-reset on Rx"4013	done4014}4015 4016netfilter_icmp6()4017{4018	local stype="$1"4019	local arg4020	local a4021 4022	[ "${stype}" = "UDP" ] && arg="$arg -D"4023 4024	for a in ${NSA_IP6} ${VRF_IP6}4025	do4026		log_start4027		run_cmd nettest -6 -s ${arg} &4028		sleep 14029		run_cmd_nsb nettest -6 ${arg} -r ${a}4030		log_test_addr ${a} $? 1 "Global ${stype} server, Rx reject icmp-port-unreach"4031	done4032}4033 4034ipv6_netfilter()4035{4036	log_section "IPv6 Netfilter"4037	log_subsection "TCP reset"4038 4039	setup "yes"4040	run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset4041 4042	netfilter_tcp6_reset4043 4044	log_subsection "ICMP unreachable"4045 4046	log_start4047	run_cmd ip6tables -F4048	run_cmd ip6tables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable4049	run_cmd ip6tables -A INPUT -p udp --dport 12345 -j REJECT --reject-with icmp6-port-unreachable4050 4051	netfilter_icmp6 "TCP"4052	netfilter_icmp6 "UDP"4053 4054	log_start4055	ip6tables -F4056}4057 4058################################################################################4059# specific use cases4060 4061# VRF only.4062# ns-A device enslaved to bridge. Verify traffic with and without4063# br_netfilter module loaded. Repeat with SVI on bridge.4064use_case_br()4065{4066	setup "yes"4067 4068	setup_cmd ip link set ${NSA_DEV} down4069	setup_cmd ip addr del dev ${NSA_DEV} ${NSA_IP}/244070	setup_cmd ip -6 addr del dev ${NSA_DEV} ${NSA_IP6}/644071 4072	setup_cmd ip link add br0 type bridge4073	setup_cmd ip addr add dev br0 ${NSA_IP}/244074	setup_cmd ip -6 addr add dev br0 ${NSA_IP6}/64 nodad4075 4076	setup_cmd ip li set ${NSA_DEV} master br04077	setup_cmd ip li set ${NSA_DEV} up4078	setup_cmd ip li set br0 up4079	setup_cmd ip li set br0 vrf ${VRF}4080 4081	rmmod br_netfilter 2>/dev/null4082	sleep 5 # DAD4083 4084	run_cmd ip neigh flush all4085	run_cmd ping -c1 -w1 -I br0 ${NSB_IP}4086	log_test $? 0 "Bridge into VRF - IPv4 ping out"4087 4088	run_cmd ip neigh flush all4089	run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}4090	log_test $? 0 "Bridge into VRF - IPv6 ping out"4091 4092	run_cmd ip neigh flush all4093	run_cmd_nsb ping -c1 -w1 ${NSA_IP}4094	log_test $? 0 "Bridge into VRF - IPv4 ping in"4095 4096	run_cmd ip neigh flush all4097	run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}4098	log_test $? 0 "Bridge into VRF - IPv6 ping in"4099 4100	modprobe br_netfilter4101	if [ $? -eq 0 ]; then4102		run_cmd ip neigh flush all4103		run_cmd ping -c1 -w1 -I br0 ${NSB_IP}4104		log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping out"4105 4106		run_cmd ip neigh flush all4107		run_cmd ${ping6} -c1 -w1 -I br0 ${NSB_IP6}4108		log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping out"4109 4110		run_cmd ip neigh flush all4111		run_cmd_nsb ping -c1 -w1 ${NSA_IP}4112		log_test $? 0 "Bridge into VRF with br_netfilter - IPv4 ping in"4113 4114		run_cmd ip neigh flush all4115		run_cmd_nsb ${ping6} -c1 -w1 ${NSA_IP6}4116		log_test $? 0 "Bridge into VRF with br_netfilter - IPv6 ping in"4117	fi4118 4119	setup_cmd ip li set br0 nomaster4120	setup_cmd ip li add br0.100 link br0 type vlan id 1004121	setup_cmd ip li set br0.100 vrf ${VRF} up4122	setup_cmd ip    addr add dev br0.100 172.16.101.1/244123	setup_cmd ip -6 addr add dev br0.100 2001:db8:101::1/64 nodad4124 4125	setup_cmd_nsb ip li add vlan100 link ${NSB_DEV} type vlan id 1004126	setup_cmd_nsb ip addr add dev vlan100 172.16.101.2/244127	setup_cmd_nsb ip -6 addr add dev vlan100 2001:db8:101::2/64 nodad4128	setup_cmd_nsb ip li set vlan100 up4129	sleep 14130 4131	rmmod br_netfilter 2>/dev/null4132 4133	run_cmd ip neigh flush all4134	run_cmd ping -c1 -w1 -I br0.100 172.16.101.24135	log_test $? 0 "Bridge vlan into VRF - IPv4 ping out"4136 4137	run_cmd ip neigh flush all4138	run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::24139	log_test $? 0 "Bridge vlan into VRF - IPv6 ping out"4140 4141	run_cmd ip neigh flush all4142	run_cmd_nsb ping -c1 -w1 172.16.101.14143	log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"4144 4145	run_cmd ip neigh flush all4146	run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::14147	log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"4148 4149	modprobe br_netfilter4150	if [ $? -eq 0 ]; then4151		run_cmd ip neigh flush all4152		run_cmd ping -c1 -w1 -I br0.100 172.16.101.24153		log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv4 ping out"4154 4155		run_cmd ip neigh flush all4156		run_cmd ${ping6} -c1 -w1 -I br0.100 2001:db8:101::24157		log_test $? 0 "Bridge vlan into VRF with br_netfilter - IPv6 ping out"4158 4159		run_cmd ip neigh flush all4160		run_cmd_nsb ping -c1 -w1 172.16.101.14161		log_test $? 0 "Bridge vlan into VRF - IPv4 ping in"4162 4163		run_cmd ip neigh flush all4164		run_cmd_nsb ${ping6} -c1 -w1 2001:db8:101::14165		log_test $? 0 "Bridge vlan into VRF - IPv6 ping in"4166	fi4167 4168	setup_cmd ip li del br0 2>/dev/null4169	setup_cmd_nsb ip li del vlan100 2>/dev/null4170}4171 4172# VRF only.4173# ns-A device is connected to both ns-B and ns-C on a single VRF but only has4174# LLA on the interfaces4175use_case_ping_lla_multi()4176{4177	setup_lla_only4178	# only want reply from ns-A4179	setup_cmd_nsb sysctl -qw net.ipv6.icmp.echo_ignore_multicast=14180	setup_cmd_nsc sysctl -qw net.ipv6.icmp.echo_ignore_multicast=14181 4182	log_start4183	run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}4184	log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Pre cycle, ping out ns-B"4185 4186	run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}4187	log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Pre cycle, ping out ns-C"4188 4189	# cycle/flap the first ns-A interface4190	setup_cmd ip link set ${NSA_DEV} down4191	setup_cmd ip link set ${NSA_DEV} up4192	sleep 14193 4194	log_start4195	run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}4196	log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-B"4197	run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}4198	log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV}, ping out ns-C"4199 4200	# cycle/flap the second ns-A interface4201	setup_cmd ip link set ${NSA_DEV2} down4202	setup_cmd ip link set ${NSA_DEV2} up4203	sleep 14204 4205	log_start4206	run_cmd_nsb ping -c1 -w1 ${MCAST}%${NSB_DEV}4207	log_test_addr ${MCAST}%${NSB_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-B"4208	run_cmd_nsc ping -c1 -w1 ${MCAST}%${NSC_DEV}4209	log_test_addr ${MCAST}%${NSC_DEV} $? 0 "Post cycle ${NSA} ${NSA_DEV2}, ping out ns-C"4210}4211 4212# Perform IPv{4,6} SNAT on ns-A, and verify TCP connection is successfully4213# established with ns-B.4214use_case_snat_on_vrf()4215{4216	setup "yes"4217 4218	local port="12345"4219 4220	run_cmd iptables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}4221	run_cmd ip6tables -t nat -A POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}4222 4223	run_cmd_nsb nettest -s -l ${NSB_IP} -p ${port} &4224	sleep 14225	run_cmd nettest -d ${VRF} -r ${NSB_IP} -p ${port}4226	log_test $? 0 "IPv4 TCP connection over VRF with SNAT"4227 4228	run_cmd_nsb nettest -6 -s -l ${NSB_IP6} -p ${port} &4229	sleep 14230	run_cmd nettest -6 -d ${VRF} -r ${NSB_IP6} -p ${port}4231	log_test $? 0 "IPv6 TCP connection over VRF with SNAT"4232 4233	# Cleanup4234	run_cmd iptables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP} -o ${VRF}4235	run_cmd ip6tables -t nat -D POSTROUTING -p tcp -m tcp --dport ${port} -j SNAT --to-source ${NSA_LO_IP6} -o ${VRF}4236}4237 4238use_cases()4239{4240	log_section "Use cases"4241	log_subsection "Device enslaved to bridge"4242	use_case_br4243	log_subsection "Ping LLA with multiple interfaces"4244	use_case_ping_lla_multi4245	log_subsection "SNAT on VRF"4246	use_case_snat_on_vrf4247}4248 4249################################################################################4250# usage4251 4252usage()4253{4254	cat <<EOF4255usage: ${0##*/} OPTS4256 4257	-4          IPv4 tests only4258	-6          IPv6 tests only4259	-t <test>   Test name/set to run4260	-p          Pause on fail4261	-P          Pause after each test4262	-v          Be verbose4263 4264Tests:4265	$TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER4266EOF4267}4268 4269################################################################################4270# main4271 4272TESTS_IPV4="ipv4_ping ipv4_tcp ipv4_udp ipv4_bind ipv4_runtime ipv4_netfilter"4273TESTS_IPV6="ipv6_ping ipv6_tcp ipv6_udp ipv6_bind ipv6_runtime ipv6_netfilter"4274TESTS_OTHER="use_cases"4275 4276PAUSE_ON_FAIL=no4277PAUSE=no4278 4279while getopts :46t:pPvh o4280do4281	case $o in4282		4) TESTS=ipv4;;4283		6) TESTS=ipv6;;4284		t) TESTS=$OPTARG;;4285		p) PAUSE_ON_FAIL=yes;;4286		P) PAUSE=yes;;4287		v) VERBOSE=1;;4288		h) usage; exit 0;;4289		*) usage; exit 1;;4290	esac4291done4292 4293# make sure we don't pause twice4294[ "${PAUSE}" = "yes" ] && PAUSE_ON_FAIL=no4295 4296#4297# show user test config4298#4299if [ -z "$TESTS" ]; then4300	TESTS="$TESTS_IPV4 $TESTS_IPV6 $TESTS_OTHER"4301elif [ "$TESTS" = "ipv4" ]; then4302	TESTS="$TESTS_IPV4"4303elif [ "$TESTS" = "ipv6" ]; then4304	TESTS="$TESTS_IPV6"4305fi4306 4307check_gen_prog "nettest"4308 4309declare -i nfail=04310declare -i nsuccess=04311 4312for t in $TESTS4313do4314	case $t in4315	ipv4_ping|ping)  ipv4_ping;;4316	ipv4_tcp|tcp)    ipv4_tcp;;4317	ipv4_udp|udp)    ipv4_udp;;4318	ipv4_bind|bind)  ipv4_addr_bind;;4319	ipv4_runtime)    ipv4_runtime;;4320	ipv4_netfilter)  ipv4_netfilter;;4321 4322	ipv6_ping|ping6) ipv6_ping;;4323	ipv6_tcp|tcp6)   ipv6_tcp;;4324	ipv6_udp|udp6)   ipv6_udp;;4325	ipv6_bind|bind6) ipv6_addr_bind;;4326	ipv6_runtime)    ipv6_runtime;;4327	ipv6_netfilter)  ipv6_netfilter;;4328 4329	use_cases)       use_cases;;4330 4331	# setup namespaces and config, but do not run any tests4332	setup)		 setup; exit 0;;4333	vrf_setup)	 setup "yes"; exit 0;;4334	esac4335done4336 4337cleanup 2>/dev/null4338 4339printf "\nTests passed: %3d\n" ${nsuccess}4340printf "Tests failed: %3d\n"   ${nfail}4341 4342if [ $nfail -ne 0 ]; then4343	exit 1 # KSFT_FAIL4344elif [ $nsuccess -eq 0 ]; then4345	exit $ksft_skip4346fi4347 4348exit 0 # KSFT_PASS4349