1a8905257SWeqaar Janjua#!/bin/bash 2a8905257SWeqaar Janjua# SPDX-License-Identifier: GPL-2.0 3a8905257SWeqaar Janjua# Copyright(c) 2020 Intel Corporation. 4a8905257SWeqaar Janjua 5a8905257SWeqaar Janjuaksft_pass=0 6a8905257SWeqaar Janjuaksft_fail=1 7a8905257SWeqaar Janjuaksft_xfail=2 8a8905257SWeqaar Janjuaksft_xpass=3 9a8905257SWeqaar Janjuaksft_skip=4 10a8905257SWeqaar Janjua 11a8905257SWeqaar JanjuaGREEN='\033[0;92m' 12a8905257SWeqaar JanjuaYELLOW='\033[0;93m' 13a8905257SWeqaar JanjuaRED='\033[0;31m' 14a8905257SWeqaar JanjuaNC='\033[0m' 15a8905257SWeqaar JanjuaSTACK_LIM=131072 16a8905257SWeqaar JanjuaSPECFILE=veth.spec 17facb7cb2SWeqaar JanjuaXSKOBJ=xdpxceiver 18facb7cb2SWeqaar JanjuaNUMPKTS=10000 19a8905257SWeqaar Janjua 20a8905257SWeqaar Janjuavalidate_root_exec() 21a8905257SWeqaar Janjua{ 22a8905257SWeqaar Janjua msg="skip all tests:" 23a8905257SWeqaar Janjua if [ $UID != 0 ]; then 24a8905257SWeqaar Janjua echo $msg must be run as root >&2 25a8905257SWeqaar Janjua test_exit $ksft_fail 2 26a8905257SWeqaar Janjua else 27a8905257SWeqaar Janjua return $ksft_pass 28a8905257SWeqaar Janjua fi 29a8905257SWeqaar Janjua} 30a8905257SWeqaar Janjua 31a8905257SWeqaar Janjuavalidate_veth_support() 32a8905257SWeqaar Janjua{ 33a8905257SWeqaar Janjua msg="skip all tests:" 34a8905257SWeqaar Janjua if [ $(ip link add $1 type veth 2>/dev/null; echo $?;) != 0 ]; then 35a8905257SWeqaar Janjua echo $msg veth kernel support not available >&2 36a8905257SWeqaar Janjua test_exit $ksft_skip 1 37a8905257SWeqaar Janjua else 38a8905257SWeqaar Janjua ip link del $1 39a8905257SWeqaar Janjua return $ksft_pass 40a8905257SWeqaar Janjua fi 41a8905257SWeqaar Janjua} 42a8905257SWeqaar Janjua 43a8905257SWeqaar Janjuavalidate_veth_spec_file() 44a8905257SWeqaar Janjua{ 45a8905257SWeqaar Janjua if [ ! -f ${SPECFILE} ]; then 46a8905257SWeqaar Janjua test_exit $ksft_skip 1 47a8905257SWeqaar Janjua fi 48a8905257SWeqaar Janjua} 49a8905257SWeqaar Janjua 50a8905257SWeqaar Janjuatest_status() 51a8905257SWeqaar Janjua{ 52a8905257SWeqaar Janjua statusval=$1 53a8905257SWeqaar Janjua if [ -n "${colorconsole+set}" ]; then 54a8905257SWeqaar Janjua if [ $statusval -eq 2 ]; then 55a8905257SWeqaar Janjua echo -e "${YELLOW}$2${NC}: [ ${RED}FAIL${NC} ]" 56a8905257SWeqaar Janjua elif [ $statusval -eq 1 ]; then 57a8905257SWeqaar Janjua echo -e "${YELLOW}$2${NC}: [ ${RED}SKIPPED${NC} ]" 58a8905257SWeqaar Janjua elif [ $statusval -eq 0 ]; then 59a8905257SWeqaar Janjua echo -e "${YELLOW}$2${NC}: [ ${GREEN}PASS${NC} ]" 60a8905257SWeqaar Janjua fi 61a8905257SWeqaar Janjua else 62a8905257SWeqaar Janjua if [ $statusval -eq 2 ]; then 63a8905257SWeqaar Janjua echo -e "$2: [ FAIL ]" 64a8905257SWeqaar Janjua elif [ $statusval -eq 1 ]; then 65a8905257SWeqaar Janjua echo -e "$2: [ SKIPPED ]" 66a8905257SWeqaar Janjua elif [ $statusval -eq 0 ]; then 67a8905257SWeqaar Janjua echo -e "$2: [ PASS ]" 68a8905257SWeqaar Janjua fi 69a8905257SWeqaar Janjua fi 70a8905257SWeqaar Janjua} 71a8905257SWeqaar Janjua 72a8905257SWeqaar Janjuatest_exit() 73a8905257SWeqaar Janjua{ 74a8905257SWeqaar Janjua retval=$1 75a8905257SWeqaar Janjua if [ $2 -ne 0 ]; then 76a8905257SWeqaar Janjua test_status $2 $(basename $0) 77a8905257SWeqaar Janjua fi 78a8905257SWeqaar Janjua exit $retval 79a8905257SWeqaar Janjua} 80a8905257SWeqaar Janjua 81a8905257SWeqaar Janjuaclear_configs() 82a8905257SWeqaar Janjua{ 83a8905257SWeqaar Janjua if [ $(ip netns show | grep $3 &>/dev/null; echo $?;) == 0 ]; then 84a8905257SWeqaar Janjua [ $(ip netns exec $3 ip link show $2 &>/dev/null; echo $?;) == 0 ] && 85*ecde6061SMagnus Karlsson { ip netns exec $3 ip link del $2; } 86a8905257SWeqaar Janjua ip netns del $3 87a8905257SWeqaar Janjua fi 88a8905257SWeqaar Janjua #Once we delete a veth pair node, the entire veth pair is removed, 89a8905257SWeqaar Janjua #this is just to be cautious just incase the NS does not exist then 90a8905257SWeqaar Janjua #veth node inside NS won't get removed so we explicitly remove it 91a8905257SWeqaar Janjua [ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] && 92*ecde6061SMagnus Karlsson { ip link del $1; } 93a8905257SWeqaar Janjua if [ -f ${SPECFILE} ]; then 94a8905257SWeqaar Janjua rm -f ${SPECFILE} 95a8905257SWeqaar Janjua fi 96a8905257SWeqaar Janjua} 97a8905257SWeqaar Janjua 98a8905257SWeqaar Janjuacleanup_exit() 99a8905257SWeqaar Janjua{ 100a8905257SWeqaar Janjua clear_configs $1 $2 $3 101a8905257SWeqaar Janjua} 102a8905257SWeqaar Janjua 103a8905257SWeqaar Janjuavalidate_ip_utility() 104a8905257SWeqaar Janjua{ 105a8905257SWeqaar Janjua [ ! $(type -P ip) ] && { echo "'ip' not found. Skipping tests."; test_exit $ksft_skip 1; } 106a8905257SWeqaar Janjua} 107a8905257SWeqaar Janjua 108a8905257SWeqaar JanjuavethXDPgeneric() 109a8905257SWeqaar Janjua{ 110a8905257SWeqaar Janjua ip link set dev $1 xdpdrv off 111a8905257SWeqaar Janjua ip netns exec $3 ip link set dev $2 xdpdrv off 112a8905257SWeqaar Janjua} 113a8905257SWeqaar Janjua 114a8905257SWeqaar JanjuavethXDPnative() 115a8905257SWeqaar Janjua{ 116a8905257SWeqaar Janjua ip link set dev $1 xdpgeneric off 117a8905257SWeqaar Janjua ip netns exec $3 ip link set dev $2 xdpgeneric off 118a8905257SWeqaar Janjua} 119facb7cb2SWeqaar Janjua 120facb7cb2SWeqaar Janjuaexecxdpxceiver() 121facb7cb2SWeqaar Janjua{ 122facb7cb2SWeqaar Janjua local -a 'paramkeys=("${!'"$1"'[@]}")' copy 123facb7cb2SWeqaar Janjua paramkeysstr=${paramkeys[*]} 124facb7cb2SWeqaar Janjua 125facb7cb2SWeqaar Janjua for index in $paramkeysstr; 126facb7cb2SWeqaar Janjua do 127facb7cb2SWeqaar Janjua current=$1"[$index]" 128facb7cb2SWeqaar Janjua copy[$index]=${!current} 129facb7cb2SWeqaar Janjua done 130facb7cb2SWeqaar Janjua 131*ecde6061SMagnus Karlsson ./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${copy[*]} -C ${NUMPKTS} ${VERBOSE_ARG} 132facb7cb2SWeqaar Janjua} 133