examples/ipsec-secgw: clean up test scripts
[dpdk.git] / examples / ipsec-secgw / test / common_defs.sh
index 35cdd1c..df68080 100644 (file)
@@ -1,12 +1,13 @@
 #! /bin/bash
 # SPDX-License-Identifier: BSD-3-Clause
 
-#check ETH_DEV
+# check ETH_DEV
 if [[ -z "${ETH_DEV}" ]]; then
        echo "ETH_DEV is invalid"
        exit 127
 fi
-#check that REMOTE_HOST is reachable
+
+# check that REMOTE_HOST is reachable
 ssh ${REMOTE_HOST} echo
 st=$?
 if [[ $st -ne 0 ]]; then
@@ -14,7 +15,7 @@ if [[ $st -ne 0 ]]; then
        exit $st
 fi
 
-#get ether addr of REMOTE_HOST
+# get ether addr of REMOTE_HOST
 REMOTE_MAC=`ssh ${REMOTE_HOST} ip addr show dev ${REMOTE_IFACE}`
 st=$?
 REMOTE_MAC=`echo ${REMOTE_MAC} | sed -e 's/^.*ether //' -e 's/ brd.*$//'`
@@ -35,6 +36,7 @@ LOCAL_IPV6=fd12:3456:789a:0031:0000:0000:0000:0092
 
 DPDK_PATH=${RTE_SDK:-${PWD}}
 DPDK_BUILD=${RTE_TARGET:-x86_64-native-linux-gcc}
+DPDK_VARS=""
 
 # by default ipsec-secgw can't deal with multi-segment packets
 # make sure our local/remote host wouldn't generate fragmented packets
@@ -42,40 +44,114 @@ DPDK_BUILD=${RTE_TARGET:-x86_64-native-linux-gcc}
 DEF_MTU_LEN=1400
 DEF_PING_LEN=1200
 
-#upsate operation mode based on env vars values
+# set operation mode based on environment variables values
 select_mode()
 {
-       # select sync/async mode
-       if [[ -n "${CRYPTO_PRIM_TYPE}" && -n "${SGW_CMD_XPRM}" ]]; then
-               echo "${CRYPTO_PRIM_TYPE} is enabled"
-               SGW_CFG_XPRM="${SGW_CFG_XPRM} ${CRYPTO_PRIM_TYPE}"
+       echo "Test environment configuration:"
+       # check which mode to be enabled (library/legacy)
+       if [[ -n "${SGW_MODE}" && "${SGW_MODE}" == "library" ]]; then
+               DPDK_MODE="-w 300 -l"
+               echo "[enabled]  library mode"
+       else
+               DPDK_MODE=""
+               echo "[enabled]  legacy mode"
+       fi
+
+       # check if esn is demanded
+       if [[ -n "${SGW_ESN}" && "${SGW_ESN}" == "esn-on" ]]; then
+               DPDK_VARS="${DPDK_VARS} -e"
+               XFRM_ESN="flag esn"
+               echo "[enabled]  extended sequence number"
+       else
+               XFRM_ESN=""
+               echo "[disabled] extended sequence number"
+       fi
+
+       # check if atom is demanded
+       if [[ -n "${SGW_ATOM}" && "${SGW_ATOM}" == "atom-on" ]]; then
+               DPDK_VARS="${DPDK_VARS} -a"
+               echo "[enabled]  sequence number atomic behavior"
+       else
+               echo "[disabled] sequence number atomic behavior"
+       fi
+
+       # check if inline should be enabled
+       if [[ -n "${SGW_CRYPTO}" && "${SGW_CRYPTO}" == "inline" ]]; then
+               CRYPTO_DEV='--vdev="crypto_null0"'
+               SGW_CFG_XPRM_IN="port_id 0 type inline-crypto-offload"
+               SGW_CFG_XPRM_OUT="port_id 0 type inline-crypto-offload"
+               echo "[enabled]  inline crypto mode"
+       else
+               SGW_CFG_XPRM_IN=""
+               SGW_CFG_XPRM_OUT=""
+               echo "[disabled] inline crypto mode"
        fi
 
-       # check if fallback type is needed
-       if [[ "${MODE}" == *fallback* ]]; then
-               if [[ -n "${CRYPTO_FLBK_TYPE}" ]]; then
-                       echo "${CRYPTO_FLBK_TYPE} is enabled"
+       # check if fallback should be enabled
+       if [[ -n "${SGW_CRYPTO_FLBK}" ]] && [[ -n ${SGW_CFG_XPRM_IN} ]] \
+       && [[ "${SGW_MODE}" == "library" ]] \
+       && [[ "${SGW_CRYPTO_FLBK}" == "cpu-crypto" \
+       || "${SGW_CRYPTO_FLBK}" == "lookaside-none" ]]; then
+               CRYPTO_DEV=""
+               SGW_CFG_XPRM_IN="${SGW_CFG_XPRM_IN} fallback ${SGW_CRYPTO_FLBK}"
+               SGW_CFG_XPRM_OUT=""
+               echo "[enabled]  crypto fallback ${SGW_CRYPTO_FLBK} mode"
+       else
+               if [[ -n "${SGW_CRYPTO_FLBK}" \
+               && "${SGW_CRYPTO}" != "inline" ]]; then
+                       echo "SGW_CRYPTO variable needs to be set to \
+\"inline\" for ${SGW_CRYPTO_FLBK} fallback setting"
+                       exit 127
+               elif [[ -n "${SGW_CRYPTO_FLBK}" \
+               && "${SGW_MODE}" != "library" ]]; then
+                       echo "SGW_MODE variable needs to be set to \
+\"library\" for ${SGW_CRYPTO_FLBK} fallback setting"
+                       exit 127
+               fi
+               echo "[disabled] crypto fallback mode"
+       fi
+
+       # select sync/async mode
+       if [[ -n "${CRYPTO_PRIM_TYPE}" && -n "${DPDK_MODE}" ]]; then
+               echo "[enabled]  crypto primary type - ${CRYPTO_PRIM_TYPE}"
+               SGW_CFG_XPRM_IN="${SGW_CFG_XPRM_IN} type ${CRYPTO_PRIM_TYPE}"
+               SGW_CFG_XPRM_OUT="${SGW_CFG_XPRM_OUT} type ${CRYPTO_PRIM_TYPE}"
+       else
+               if [[ -n "${CRYPTO_PRIM_TYPE}" \
+               && "${SGW_MODE}" != "library" ]]; then
+                       echo "SGW_MODE variable needs to be set to \
+\"library\" for ${CRYPTO_PRIM_TYPE} crypto primary type setting"
+                       exit 127
                fi
        fi
 
-       #make linux to generate fragmented packets
-       if [[ -n "${MULTI_SEG_TEST}" && -n "${SGW_CMD_XPRM}" ]]; then
-               echo "multi-segment test is enabled"
-               SGW_CMD_XPRM="${SGW_CMD_XPRM} ${MULTI_SEG_TEST}"
+
+       # make linux to generate fragmented packets
+       if [[ -n "${SGW_MULTI_SEG}" && -n "${DPDK_MODE}" ]]; then
+               echo -e "[enabled]  multi-segment test is enabled\n"
+               SGW_CMD_XPRM="--reassemble ${SGW_MULTI_SEG}"
                PING_LEN=5000
                MTU_LEN=1500
        else
-               if [[ -z "${MULTI_SEG_TEST}" && "${MODE}" == *fallback* ]]; then
-                       echo "MULTI_SEG_TEST environment variable needs to be \
-set for ${MODE} test"
+               if [[ -z "${SGW_MULTI_SEG}" \
+               && "${SGW_CFG_XPRM_IN}" == *fallback* ]]; then
+                       echo "SGW_MULTI_SEG environment variable needs \
+to be set for ${SGW_CRYPTO_FLBK} fallback test"
                        exit 127
+               elif [[ -n "${SGW_MULTI_SEG}" \
+               && "${SGW_MODE}" != "library" ]]; then
+                       echo "SGW_MODE variable needs to be set to \
+\"library\" for multiple segment reassemble setting"
+               exit 127
                fi
+
+               echo -e "[disabled] multi-segment test\n"
                PING_LEN=${DEF_PING_LEN}
                MTU_LEN=${DEF_MTU_LEN}
        fi
 }
 
-#setup mtu on local iface
+# setup mtu on local iface
 set_local_mtu()
 {
        mtu=$1
@@ -105,7 +181,7 @@ config6_local_iface()
        ip neigh show dev ${LOCAL_IFACE}
 }
 
-#configure remote host/iface
+# configure remote host/iface
 config_remote_iface()
 {
        ssh ${REMOTE_HOST} ifconfig ${REMOTE_IFACE} down
@@ -114,11 +190,8 @@ config_remote_iface()
 
        ssh ${REMOTE_HOST} ip neigh flush dev ${REMOTE_IFACE}
 
-       # by some reason following ip neigh doesn't work for me here properly:
-       #ssh ${REMOTE_HOST} ip neigh add ${LOCAL_IPV4} \
-       #               dev ${REMOTE_IFACE} lladr ${LOCAL_MAC}
-       # so used arp instead.
-       ssh ${REMOTE_HOST} arp -i ${REMOTE_IFACE} -s ${LOCAL_IPV4} ${LOCAL_MAC}
+       ssh ${REMOTE_HOST} ip neigh add ${LOCAL_IPV4} \
+               dev ${REMOTE_IFACE} lladdr ${LOCAL_MAC}
        ssh ${REMOTE_HOST} ip neigh show dev ${REMOTE_IFACE}
 
        ssh ${REMOTE_HOST} iptables --flush
@@ -139,7 +212,7 @@ config6_remote_iface()
        ssh ${REMOTE_HOST} ip6tables --flush
 }
 
-#configure remote and local host/iface
+# configure remote and local host/iface
 config_iface()
 {
        config_local_iface