xref: /dpdk/examples/ipsec-secgw/test/run_test.sh (revision db27370b57202632ad8830352c1c0ee2dde4542f)
192978445SKonstantin Ananyev#! /bin/bash
21dc48bceSStephen Hemminger# SPDX-License-Identifier: BSD-3-Clause
392978445SKonstantin Ananyev
49dbc4e21SMariusz Drost# Usage: /bin/bash run_test.sh [-46miflscph] <ipsec_mode>
59dbc4e21SMariusz Drost# Run all defined linux_test.sh test-cases one by one
69dbc4e21SMariusz Drost# If <ipsec_mode> is specified, run only that test case
79dbc4e21SMariusz Drost# User has to setup properly the following environment variables:
892978445SKonstantin Ananyev#  SGW_PATH	- path to the ipsec-secgw binary to test
992978445SKonstantin Ananyev#  REMOTE_HOST	- ip/hostname of the DUT
1092978445SKonstantin Ananyev#  REMOTE_IFACE	- iface name for the test-port on DUT
11*db27370bSStephen Hemminger#  ETH_DEV	- ethernet device to be used on SUT by DPDK ('-a <pci-id>')
129dbc4e21SMariusz Drost# Also user can optionally setup:
1392978445SKonstantin Ananyev#  SGW_LCORE	- lcore to run ipsec-secgw on (default value is 0)
14*db27370bSStephen Hemminger#  CRYPTO_DEV	- crypto device to be used ('-a <pci-id>')
159dbc4e21SMariusz Drost#	       if none specified appropriate vdevs will be created by the script
169dbc4e21SMariusz Drost#  SGW_MULTI_SEG - ipsec-secgw option to enable reassembly support and
179dbc4e21SMariusz Drost#		specify size of reassembly table (i.e. SGW_MULTI_SEG=128)
189dbc4e21SMariusz Drost# Refer to linux_test.sh for more information
19d06fe6eaSKonstantin Ananyev
209dbc4e21SMariusz Drost# All supported modes to test:
219dbc4e21SMariusz Drost#  trs_3descbc_sha1
229dbc4e21SMariusz Drost#  trs_aescbc_sha1
239dbc4e21SMariusz Drost#  trs_aesctr_sha1
249dbc4e21SMariusz Drost#  trs_aesgcm
259dbc4e21SMariusz Drost#  tun_3descbc_sha1
269dbc4e21SMariusz Drost#  tun_aescbc_sha1
279dbc4e21SMariusz Drost#  tun_aesctr_sha1
289dbc4e21SMariusz Drost#  tun_aesgcm
299dbc4e21SMariusz Drost# Naming convention:
3092978445SKonstantin Ananyev# 'tun/trs' refer to tunnel/transport mode respectively
319a18283aSMarcin Smoczynski
329a18283aSMarcin Smoczynskiusage()
339a18283aSMarcin Smoczynski{
349a18283aSMarcin Smoczynski	echo "Usage:"
359dbc4e21SMariusz Drost	echo -e "\t$0 -[46miflscph] <ipsec_mode>"
369a18283aSMarcin Smoczynski	echo -e "\t\t-4 Perform Linux IPv4 network tests"
379a18283aSMarcin Smoczynski	echo -e "\t\t-6 Perform Linux IPv6 network tests"
389dbc4e21SMariusz Drost	echo -e "\t\t-m Add mixed IP protocol tests to IPv4/IPv6 \
399dbc4e21SMariusz Drost(only with option [-46])"
409dbc4e21SMariusz Drost	echo -e "\t\t-i Run inline tests (only with option [-46])"
419dbc4e21SMariusz Drost	echo -e "\t\t-f Run fallback tests (only with option [-46])"
429dbc4e21SMariusz Drost	echo -e "\t\t-l Run tests in legacy mode"
439dbc4e21SMariusz Drost	echo -e "\t\t-s Run all tests with reassembly support \
449dbc4e21SMariusz Drost(on default only fallback tests use reassembly support)"
459dbc4e21SMariusz Drost	echo -e "\t\t-c Run tests with use of cpu-crypto \
469dbc4e21SMariusz Drost(on default lookaside-none is used)"
479a18283aSMarcin Smoczynski	echo -e "\t\t-p Perform packet validation tests"
489a18283aSMarcin Smoczynski	echo -e "\t\t-h Display this help"
499dbc4e21SMariusz Drost	echo -e "\t\t<ipsec_mode> Run only specified test case i.e. tun_aesgcm"
509a18283aSMarcin Smoczynski}
519a18283aSMarcin Smoczynski
529dbc4e21SMariusz DrostLINUX_TEST="trs_3descbc_sha1 \
5392978445SKonstantin Ananyevtrs_aescbc_sha1 \
548f600988SFan Zhangtrs_aesctr_sha1 \
559dbc4e21SMariusz Drosttrs_aesgcm \
562004a147SFan Zhangtun_3descbc_sha1 \
579dbc4e21SMariusz Drosttun_aescbc_sha1 \
589dbc4e21SMariusz Drosttun_aesctr_sha1 \
599dbc4e21SMariusz Drosttun_aesgcm"
609dbc4e21SMariusz Drost
619dbc4e21SMariusz DrostLINUX_TEST_INLINE_FALLBACK="trs_aesgcm \
629dbc4e21SMariusz Drosttun_aesgcm"
639dbc4e21SMariusz Drost
649dbc4e21SMariusz DrostLINUX_TEST_RUN=""
6592978445SKonstantin Ananyev
661cfd1559SFan ZhangPKT_TESTS="trs_ipv6opts \
671cfd1559SFan Zhangtun_null_header_reconstruct"
689a18283aSMarcin Smoczynski
699a18283aSMarcin SmoczynskiDIR=$(dirname $0)
7092978445SKonstantin Ananyev
7192978445SKonstantin Ananyev# get input options
7292978445SKonstantin Ananyevrun4=0
7392978445SKonstantin Ananyevrun6=0
749a18283aSMarcin Smoczynskirunpkt=0
759dbc4e21SMariusz Drostmixed=0
769dbc4e21SMariusz Drostinline=0
779dbc4e21SMariusz Drostfallback=0
789dbc4e21SMariusz Drostlegacy=0
799dbc4e21SMariusz Drostmulti_seg=0
809dbc4e21SMariusz Drostcpu_crypto=0
819dbc4e21SMariusz Drostoptions=""
829dbc4e21SMariusz Drostwhile getopts ":46miflscph" opt
839a18283aSMarcin Smoczynskido
849a18283aSMarcin Smoczynski	case $opt in
859a18283aSMarcin Smoczynski		4)
8692978445SKonstantin Ananyev			run4=1
879a18283aSMarcin Smoczynski			;;
889a18283aSMarcin Smoczynski		6)
8992978445SKonstantin Ananyev			run6=1
909a18283aSMarcin Smoczynski			;;
919dbc4e21SMariusz Drost		m)
929dbc4e21SMariusz Drost			mixed=1
939dbc4e21SMariusz Drost			;;
949dbc4e21SMariusz Drost		i)
959dbc4e21SMariusz Drost			inline=1
969dbc4e21SMariusz Drost			;;
979dbc4e21SMariusz Drost		f)
989dbc4e21SMariusz Drost			fallback=1
999dbc4e21SMariusz Drost			;;
1009dbc4e21SMariusz Drost		l)
1019dbc4e21SMariusz Drost			legacy=1
1029dbc4e21SMariusz Drost			options="${options} -l"
1039dbc4e21SMariusz Drost			;;
1049dbc4e21SMariusz Drost		s)
1059dbc4e21SMariusz Drost			multi_seg=1
1069dbc4e21SMariusz Drost			options="${options} -s"
1079dbc4e21SMariusz Drost			;;
1089dbc4e21SMariusz Drost		c)
1099dbc4e21SMariusz Drost			cpu_crypto=1
1109dbc4e21SMariusz Drost			options="${options} -c"
1119dbc4e21SMariusz Drost			;;
1129a18283aSMarcin Smoczynski		p)
1139a18283aSMarcin Smoczynski			runpkt=1
1149a18283aSMarcin Smoczynski			;;
1159a18283aSMarcin Smoczynski		h)
1169a18283aSMarcin Smoczynski			usage
1179a18283aSMarcin Smoczynski			exit 0
1189a18283aSMarcin Smoczynski			;;
1199a18283aSMarcin Smoczynski		?)
1209a18283aSMarcin Smoczynski			echo "Invalid option"
1219a18283aSMarcin Smoczynski			usage
1229a18283aSMarcin Smoczynski			exit 127
1239a18283aSMarcin Smoczynski			;;
1249a18283aSMarcin Smoczynski	esac
12592978445SKonstantin Ananyevdone
12692978445SKonstantin Ananyev
1279dbc4e21SMariusz Drostshift $((OPTIND -1))
1289dbc4e21SMariusz DrostLINUX_TEST_RUN=$*
1299dbc4e21SMariusz Drost
1309a18283aSMarcin Smoczynski# no test suite has been selected
1319a18283aSMarcin Smoczynskiif [[ ${run4} -eq 0 && ${run6} -eq 0 && ${runpkt} -eq 0 ]]; then
1329a18283aSMarcin Smoczynski	usage
13392978445SKonstantin Ananyev	exit 127
13492978445SKonstantin Ananyevfi
13592978445SKonstantin Ananyev
1369dbc4e21SMariusz Drost# check parameters
1379dbc4e21SMariusz Drostif [[ ${legacy} -eq 1 ]] && [[ ${multi_seg} -eq 1 || ${fallback} -eq 1 \
1389dbc4e21SMariusz Drost   || ${cpu_crypto} -eq 1 ]]; then
1399dbc4e21SMariusz Drost	echo "Fallback/reassembly/cpu-crypto cannot be used with legacy mode"
1409dbc4e21SMariusz Drost	exit 127
1419dbc4e21SMariusz Drostfi
1429dbc4e21SMariusz Drost
1439dbc4e21SMariusz Drostif [[ ${cpu_crypto} -eq 1 && ${inline} -eq 1 && ${fallback} -eq 0 ]]; then
1449dbc4e21SMariusz Drost	echo "cpu-crypto cannot be used with inline mode"
1459dbc4e21SMariusz Drost	exit 127
1469dbc4e21SMariusz Drostfi
1479dbc4e21SMariusz Drost
1489a18283aSMarcin Smoczynski# perform packet processing validation tests
1499a18283aSMarcin Smoczynskist=0
1509a18283aSMarcin Smoczynskiif [ $runpkt -eq 1 ]; then
1519a18283aSMarcin Smoczynski	echo "Performing packet validation tests"
1529a18283aSMarcin Smoczynski	/bin/bash ${DIR}/pkttest.sh ${PKT_TESTS}
1539a18283aSMarcin Smoczynski	st=$?
1549a18283aSMarcin Smoczynski
1559a18283aSMarcin Smoczynski	echo "pkttests finished with status ${st}"
1569a18283aSMarcin Smoczynski	if [[ ${st} -ne 0 ]]; then
1579a18283aSMarcin Smoczynski		echo "ERROR pkttests FAILED"
1589a18283aSMarcin Smoczynski		exit ${st}
1599a18283aSMarcin Smoczynski	fi
1609a18283aSMarcin Smoczynskifi
1619a18283aSMarcin Smoczynski
1629dbc4e21SMariusz Drostdesc=""
16392978445SKonstantin Ananyev
1649dbc4e21SMariusz Drost# set inline/fallback tests if needed
1659dbc4e21SMariusz Drostif [[ ${inline} -eq 1  || ${fallback} -eq 1 ]]; then
1669dbc4e21SMariusz Drost
1679dbc4e21SMariusz Drost	# add inline option if needed
1689dbc4e21SMariusz Drost	if [[ ${inline} -eq 1 ]]; then
1699dbc4e21SMariusz Drost		options="${options} -i"
1709dbc4e21SMariusz Drost		desc="inline"
1719dbc4e21SMariusz Drost	fi
1729dbc4e21SMariusz Drost	# add fallback option if needed
1739dbc4e21SMariusz Drost	if [[ ${fallback} -eq 1 ]]; then
1749dbc4e21SMariusz Drost		options="${options} -f"
1759dbc4e21SMariusz Drost		if [[ "${desc}" == "inline" ]]; then
1769dbc4e21SMariusz Drost			desc="${desc} and fallback"
1779dbc4e21SMariusz Drost		else
1789dbc4e21SMariusz Drost			desc="fallback"
1799dbc4e21SMariusz Drost		fi
1809dbc4e21SMariusz Drost	fi
1819dbc4e21SMariusz Drost
1829dbc4e21SMariusz Drost	# select tests to run
1839dbc4e21SMariusz Drost	if [[ -z "${LINUX_TEST_RUN}" ]]; then
1849dbc4e21SMariusz Drost		LINUX_TEST_RUN="${LINUX_TEST_INLINE_FALLBACK}"
1859dbc4e21SMariusz Drost	fi
1869dbc4e21SMariusz Drostelse
1879dbc4e21SMariusz Drost	options="${options} -r"
1889dbc4e21SMariusz Drostfi
1899dbc4e21SMariusz Drost
1909dbc4e21SMariusz Drost# select tests to run
1919dbc4e21SMariusz Drostif [[ -z "${LINUX_TEST_RUN}" ]]; then
1929dbc4e21SMariusz Drost	LINUX_TEST_RUN="${LINUX_TEST}"
1939dbc4e21SMariusz Drostfi
1949dbc4e21SMariusz Drost
1959dbc4e21SMariusz Drost# perform selected tests
1969dbc4e21SMariusz Drostif [[ ${run4} -eq 1 || ${run6} -eq 1 ]] ; then
1979dbc4e21SMariusz Drost
1989dbc4e21SMariusz Drost	for i in ${LINUX_TEST_RUN}; do
1999dbc4e21SMariusz Drost
2009dbc4e21SMariusz Drost		echo "starting ${desc} test ${i}"
20192978445SKonstantin Ananyev
20292978445SKonstantin Ananyev		st4=0
2039dbc4e21SMariusz Drost		st4m=0
20492978445SKonstantin Ananyev		if [[ ${run4} -ne 0 ]]; then
2059dbc4e21SMariusz Drost			/bin/bash ${DIR}/load_env.sh ${options} ipv4-ipv4 ${i}
20692978445SKonstantin Ananyev			st4=$?
2079dbc4e21SMariusz Drost			echo "${desc} test IPv4 ${i} finished with status \
2089dbc4e21SMariusz Drost${st4}"
2099dbc4e21SMariusz Drost			if [[ ${mixed} -ne 0 ]] && [[ "${i}" == tun* ]]; then
2109dbc4e21SMariusz Drost				/bin/bash ${DIR}/load_env.sh ${options} \
2119dbc4e21SMariusz Drost				ipv4-ipv6 ${i}
2129dbc4e21SMariusz Drost				st4m=$?
2139dbc4e21SMariusz Drost				echo "${desc} test IPv4-IPv6 ${i} finished with\
2149dbc4e21SMariusz Drost status ${st4m}"
2159dbc4e21SMariusz Drost			fi
21692978445SKonstantin Ananyev		fi
21792978445SKonstantin Ananyev
21892978445SKonstantin Ananyev		st6=0
2199dbc4e21SMariusz Drost		st6m=0
22092978445SKonstantin Ananyev		if [[ ${run6} -ne 0 ]]; then
2219dbc4e21SMariusz Drost			/bin/bash ${DIR}/load_env.sh ${options} ipv6-ipv6 ${i}
22292978445SKonstantin Ananyev			st6=$?
2239dbc4e21SMariusz Drost			echo "${desc} test IPv6 ${i} finished with status \
2249dbc4e21SMariusz Drost${st6}"
2259dbc4e21SMariusz Drost			if [[ ${mixed} -ne 0 ]] && [[ "${i}" == tun* ]]; then
2269dbc4e21SMariusz Drost				/bin/bash ${DIR}/load_env.sh ${options} \
2279dbc4e21SMariusz Drost				ipv6-ipv4 ${i}
2289dbc4e21SMariusz Drost				st6m=$?
2299dbc4e21SMariusz Drost				echo "${desc} test IPv6-IPv4 ${i} finished with\
2309dbc4e21SMariusz Drost status ${st6m}"
2319dbc4e21SMariusz Drost			fi
23292978445SKonstantin Ananyev		fi
23392978445SKonstantin Ananyev
2349dbc4e21SMariusz Drost		let "st = st4 + st6 + st4m + st6m"
23592978445SKonstantin Ananyev		if [[ $st -ne 0 ]]; then
2369dbc4e21SMariusz Drost			echo "ERROR ${desc} test ${i} FAILED"
23792978445SKonstantin Ananyev			exit $st
23892978445SKonstantin Ananyev		fi
23992978445SKonstantin Ananyev	done
2409a18283aSMarcin Smoczynskifi
2419dbc4e21SMariusz Drost
2429dbc4e21SMariusz Drostecho "All tests have ended successfully"
243