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