facb7cb2e9
Adds following tests: 1. AF_XDP SKB mode Generic mode XDP is driver independent, used when the driver does not have support for XDP. Works on any netdevice using sockets and generic XDP path. XDP hook from netif_receive_skb(). a. nopoll - soft-irq processing b. poll - using poll() syscall Signed-off-by: Weqaar Janjua <weqaar.a.janjua@intel.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Tested-by: Yonghong Song <yhs@fb.com> Acked-by: Björn Töpel <bjorn.topel@intel.com> Link: https://lore.kernel.org/bpf/20201207215333.11586-3-weqaar.a.janjua@intel.com
136 lines
2.7 KiB
Bash
Executable File
136 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright(c) 2020 Intel Corporation.
|
|
|
|
ksft_pass=0
|
|
ksft_fail=1
|
|
ksft_xfail=2
|
|
ksft_xpass=3
|
|
ksft_skip=4
|
|
|
|
GREEN='\033[0;92m'
|
|
YELLOW='\033[0;93m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
STACK_LIM=131072
|
|
SPECFILE=veth.spec
|
|
XSKOBJ=xdpxceiver
|
|
NUMPKTS=10000
|
|
|
|
validate_root_exec()
|
|
{
|
|
msg="skip all tests:"
|
|
if [ $UID != 0 ]; then
|
|
echo $msg must be run as root >&2
|
|
test_exit $ksft_fail 2
|
|
else
|
|
return $ksft_pass
|
|
fi
|
|
}
|
|
|
|
validate_veth_support()
|
|
{
|
|
msg="skip all tests:"
|
|
if [ $(ip link add $1 type veth 2>/dev/null; echo $?;) != 0 ]; then
|
|
echo $msg veth kernel support not available >&2
|
|
test_exit $ksft_skip 1
|
|
else
|
|
ip link del $1
|
|
return $ksft_pass
|
|
fi
|
|
}
|
|
|
|
validate_veth_spec_file()
|
|
{
|
|
if [ ! -f ${SPECFILE} ]; then
|
|
test_exit $ksft_skip 1
|
|
fi
|
|
}
|
|
|
|
test_status()
|
|
{
|
|
statusval=$1
|
|
if [ -n "${colorconsole+set}" ]; then
|
|
if [ $statusval -eq 2 ]; then
|
|
echo -e "${YELLOW}$2${NC}: [ ${RED}FAIL${NC} ]"
|
|
elif [ $statusval -eq 1 ]; then
|
|
echo -e "${YELLOW}$2${NC}: [ ${RED}SKIPPED${NC} ]"
|
|
elif [ $statusval -eq 0 ]; then
|
|
echo -e "${YELLOW}$2${NC}: [ ${GREEN}PASS${NC} ]"
|
|
fi
|
|
else
|
|
if [ $statusval -eq 2 ]; then
|
|
echo -e "$2: [ FAIL ]"
|
|
elif [ $statusval -eq 1 ]; then
|
|
echo -e "$2: [ SKIPPED ]"
|
|
elif [ $statusval -eq 0 ]; then
|
|
echo -e "$2: [ PASS ]"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
test_exit()
|
|
{
|
|
retval=$1
|
|
if [ $2 -ne 0 ]; then
|
|
test_status $2 $(basename $0)
|
|
fi
|
|
exit $retval
|
|
}
|
|
|
|
clear_configs()
|
|
{
|
|
if [ $(ip netns show | grep $3 &>/dev/null; echo $?;) == 0 ]; then
|
|
[ $(ip netns exec $3 ip link show $2 &>/dev/null; echo $?;) == 0 ] &&
|
|
{ echo "removing link $1:$2"; ip netns exec $3 ip link del $2; }
|
|
echo "removing ns $3"
|
|
ip netns del $3
|
|
fi
|
|
#Once we delete a veth pair node, the entire veth pair is removed,
|
|
#this is just to be cautious just incase the NS does not exist then
|
|
#veth node inside NS won't get removed so we explicitly remove it
|
|
[ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] &&
|
|
{ echo "removing link $1"; ip link del $1; }
|
|
if [ -f ${SPECFILE} ]; then
|
|
echo "removing spec file:" ${SPECFILE}
|
|
rm -f ${SPECFILE}
|
|
fi
|
|
}
|
|
|
|
cleanup_exit()
|
|
{
|
|
echo "cleaning up..."
|
|
clear_configs $1 $2 $3
|
|
}
|
|
|
|
validate_ip_utility()
|
|
{
|
|
[ ! $(type -P ip) ] && { echo "'ip' not found. Skipping tests."; test_exit $ksft_skip 1; }
|
|
}
|
|
|
|
vethXDPgeneric()
|
|
{
|
|
ip link set dev $1 xdpdrv off
|
|
ip netns exec $3 ip link set dev $2 xdpdrv off
|
|
}
|
|
|
|
vethXDPnative()
|
|
{
|
|
ip link set dev $1 xdpgeneric off
|
|
ip netns exec $3 ip link set dev $2 xdpgeneric off
|
|
}
|
|
|
|
execxdpxceiver()
|
|
{
|
|
local -a 'paramkeys=("${!'"$1"'[@]}")' copy
|
|
paramkeysstr=${paramkeys[*]}
|
|
|
|
for index in $paramkeysstr;
|
|
do
|
|
current=$1"[$index]"
|
|
copy[$index]=${!current}
|
|
done
|
|
|
|
./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${copy[*]} -C ${NUMPKTS}
|
|
}
|