xref: /dpdk/examples/ipsec-secgw/test/run_test.sh (revision db27370b57202632ad8830352c1c0ee2dde4542f)
1#! /bin/bash
2# SPDX-License-Identifier: BSD-3-Clause
3
4# Usage: /bin/bash run_test.sh [-46miflscph] <ipsec_mode>
5# Run all defined linux_test.sh test-cases one by one
6# If <ipsec_mode> is specified, run only that test case
7# User has to setup properly the following environment variables:
8#  SGW_PATH	- path to the ipsec-secgw binary to test
9#  REMOTE_HOST	- ip/hostname of the DUT
10#  REMOTE_IFACE	- iface name for the test-port on DUT
11#  ETH_DEV	- ethernet device to be used on SUT by DPDK ('-a <pci-id>')
12# Also user can optionally setup:
13#  SGW_LCORE	- lcore to run ipsec-secgw on (default value is 0)
14#  CRYPTO_DEV	- crypto device to be used ('-a <pci-id>')
15#	       if none specified appropriate vdevs will be created by the script
16#  SGW_MULTI_SEG - ipsec-secgw option to enable reassembly support and
17#		specify size of reassembly table (i.e. SGW_MULTI_SEG=128)
18# Refer to linux_test.sh for more information
19
20# All supported modes to test:
21#  trs_3descbc_sha1
22#  trs_aescbc_sha1
23#  trs_aesctr_sha1
24#  trs_aesgcm
25#  tun_3descbc_sha1
26#  tun_aescbc_sha1
27#  tun_aesctr_sha1
28#  tun_aesgcm
29# Naming convention:
30# 'tun/trs' refer to tunnel/transport mode respectively
31
32usage()
33{
34	echo "Usage:"
35	echo -e "\t$0 -[46miflscph] <ipsec_mode>"
36	echo -e "\t\t-4 Perform Linux IPv4 network tests"
37	echo -e "\t\t-6 Perform Linux IPv6 network tests"
38	echo -e "\t\t-m Add mixed IP protocol tests to IPv4/IPv6 \
39(only with option [-46])"
40	echo -e "\t\t-i Run inline tests (only with option [-46])"
41	echo -e "\t\t-f Run fallback tests (only with option [-46])"
42	echo -e "\t\t-l Run tests in legacy mode"
43	echo -e "\t\t-s Run all tests with reassembly support \
44(on default only fallback tests use reassembly support)"
45	echo -e "\t\t-c Run tests with use of cpu-crypto \
46(on default lookaside-none is used)"
47	echo -e "\t\t-p Perform packet validation tests"
48	echo -e "\t\t-h Display this help"
49	echo -e "\t\t<ipsec_mode> Run only specified test case i.e. tun_aesgcm"
50}
51
52LINUX_TEST="trs_3descbc_sha1 \
53trs_aescbc_sha1 \
54trs_aesctr_sha1 \
55trs_aesgcm \
56tun_3descbc_sha1 \
57tun_aescbc_sha1 \
58tun_aesctr_sha1 \
59tun_aesgcm"
60
61LINUX_TEST_INLINE_FALLBACK="trs_aesgcm \
62tun_aesgcm"
63
64LINUX_TEST_RUN=""
65
66PKT_TESTS="trs_ipv6opts \
67tun_null_header_reconstruct"
68
69DIR=$(dirname $0)
70
71# get input options
72run4=0
73run6=0
74runpkt=0
75mixed=0
76inline=0
77fallback=0
78legacy=0
79multi_seg=0
80cpu_crypto=0
81options=""
82while getopts ":46miflscph" opt
83do
84	case $opt in
85		4)
86			run4=1
87			;;
88		6)
89			run6=1
90			;;
91		m)
92			mixed=1
93			;;
94		i)
95			inline=1
96			;;
97		f)
98			fallback=1
99			;;
100		l)
101			legacy=1
102			options="${options} -l"
103			;;
104		s)
105			multi_seg=1
106			options="${options} -s"
107			;;
108		c)
109			cpu_crypto=1
110			options="${options} -c"
111			;;
112		p)
113			runpkt=1
114			;;
115		h)
116			usage
117			exit 0
118			;;
119		?)
120			echo "Invalid option"
121			usage
122			exit 127
123			;;
124	esac
125done
126
127shift $((OPTIND -1))
128LINUX_TEST_RUN=$*
129
130# no test suite has been selected
131if [[ ${run4} -eq 0 && ${run6} -eq 0 && ${runpkt} -eq 0 ]]; then
132	usage
133	exit 127
134fi
135
136# check parameters
137if [[ ${legacy} -eq 1 ]] && [[ ${multi_seg} -eq 1 || ${fallback} -eq 1 \
138   || ${cpu_crypto} -eq 1 ]]; then
139	echo "Fallback/reassembly/cpu-crypto cannot be used with legacy mode"
140	exit 127
141fi
142
143if [[ ${cpu_crypto} -eq 1 && ${inline} -eq 1 && ${fallback} -eq 0 ]]; then
144	echo "cpu-crypto cannot be used with inline mode"
145	exit 127
146fi
147
148# perform packet processing validation tests
149st=0
150if [ $runpkt -eq 1 ]; then
151	echo "Performing packet validation tests"
152	/bin/bash ${DIR}/pkttest.sh ${PKT_TESTS}
153	st=$?
154
155	echo "pkttests finished with status ${st}"
156	if [[ ${st} -ne 0 ]]; then
157		echo "ERROR pkttests FAILED"
158		exit ${st}
159	fi
160fi
161
162desc=""
163
164# set inline/fallback tests if needed
165if [[ ${inline} -eq 1  || ${fallback} -eq 1 ]]; then
166
167	# add inline option if needed
168	if [[ ${inline} -eq 1 ]]; then
169		options="${options} -i"
170		desc="inline"
171	fi
172	# add fallback option if needed
173	if [[ ${fallback} -eq 1 ]]; then
174		options="${options} -f"
175		if [[ "${desc}" == "inline" ]]; then
176			desc="${desc} and fallback"
177		else
178			desc="fallback"
179		fi
180	fi
181
182	# select tests to run
183	if [[ -z "${LINUX_TEST_RUN}" ]]; then
184		LINUX_TEST_RUN="${LINUX_TEST_INLINE_FALLBACK}"
185	fi
186else
187	options="${options} -r"
188fi
189
190# select tests to run
191if [[ -z "${LINUX_TEST_RUN}" ]]; then
192	LINUX_TEST_RUN="${LINUX_TEST}"
193fi
194
195# perform selected tests
196if [[ ${run4} -eq 1 || ${run6} -eq 1 ]] ; then
197
198	for i in ${LINUX_TEST_RUN}; do
199
200		echo "starting ${desc} test ${i}"
201
202		st4=0
203		st4m=0
204		if [[ ${run4} -ne 0 ]]; then
205			/bin/bash ${DIR}/load_env.sh ${options} ipv4-ipv4 ${i}
206			st4=$?
207			echo "${desc} test IPv4 ${i} finished with status \
208${st4}"
209			if [[ ${mixed} -ne 0 ]] && [[ "${i}" == tun* ]]; then
210				/bin/bash ${DIR}/load_env.sh ${options} \
211				ipv4-ipv6 ${i}
212				st4m=$?
213				echo "${desc} test IPv4-IPv6 ${i} finished with\
214 status ${st4m}"
215			fi
216		fi
217
218		st6=0
219		st6m=0
220		if [[ ${run6} -ne 0 ]]; then
221			/bin/bash ${DIR}/load_env.sh ${options} ipv6-ipv6 ${i}
222			st6=$?
223			echo "${desc} test IPv6 ${i} finished with status \
224${st6}"
225			if [[ ${mixed} -ne 0 ]] && [[ "${i}" == tun* ]]; then
226				/bin/bash ${DIR}/load_env.sh ${options} \
227				ipv6-ipv4 ${i}
228				st6m=$?
229				echo "${desc} test IPv6-IPv4 ${i} finished with\
230 status ${st6m}"
231			fi
232		fi
233
234		let "st = st4 + st6 + st4m + st6m"
235		if [[ $st -ne 0 ]]; then
236			echo "ERROR ${desc} test ${i} FAILED"
237			exit $st
238		fi
239	done
240fi
241
242echo "All tests have ended successfully"
243