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