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