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
17*facb7cb2SWeqaar JanjuaXSKOBJ=xdpxceiver
18*facb7cb2SWeqaar 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 ] &&
85a8905257SWeqaar Janjua			{ echo "removing link $1:$2"; ip netns exec $3 ip link del $2; }
86a8905257SWeqaar Janjua		echo "removing ns $3"
87a8905257SWeqaar Janjua		ip netns del $3
88a8905257SWeqaar Janjua	fi
89a8905257SWeqaar Janjua	#Once we delete a veth pair node, the entire veth pair is removed,
90a8905257SWeqaar Janjua	#this is just to be cautious just incase the NS does not exist then
91a8905257SWeqaar Janjua	#veth node inside NS won't get removed so we explicitly remove it
92a8905257SWeqaar Janjua	[ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] &&
93a8905257SWeqaar Janjua		{ echo "removing link $1"; ip link del $1; }
94a8905257SWeqaar Janjua	if [ -f ${SPECFILE} ]; then
95a8905257SWeqaar Janjua		echo "removing spec file:" ${SPECFILE}
96a8905257SWeqaar Janjua		rm -f ${SPECFILE}
97a8905257SWeqaar Janjua	fi
98a8905257SWeqaar Janjua}
99a8905257SWeqaar Janjua
100a8905257SWeqaar Janjuacleanup_exit()
101a8905257SWeqaar Janjua{
102a8905257SWeqaar Janjua	echo "cleaning up..."
103a8905257SWeqaar Janjua	clear_configs $1 $2 $3
104a8905257SWeqaar Janjua}
105a8905257SWeqaar Janjua
106a8905257SWeqaar Janjuavalidate_ip_utility()
107a8905257SWeqaar Janjua{
108a8905257SWeqaar Janjua	[ ! $(type -P ip) ] && { echo "'ip' not found. Skipping tests."; test_exit $ksft_skip 1; }
109a8905257SWeqaar Janjua}
110a8905257SWeqaar Janjua
111a8905257SWeqaar JanjuavethXDPgeneric()
112a8905257SWeqaar Janjua{
113a8905257SWeqaar Janjua	ip link set dev $1 xdpdrv off
114a8905257SWeqaar Janjua	ip netns exec $3 ip link set dev $2 xdpdrv off
115a8905257SWeqaar Janjua}
116a8905257SWeqaar Janjua
117a8905257SWeqaar JanjuavethXDPnative()
118a8905257SWeqaar Janjua{
119a8905257SWeqaar Janjua	ip link set dev $1 xdpgeneric off
120a8905257SWeqaar Janjua	ip netns exec $3 ip link set dev $2 xdpgeneric off
121a8905257SWeqaar Janjua}
122*facb7cb2SWeqaar Janjua
123*facb7cb2SWeqaar Janjuaexecxdpxceiver()
124*facb7cb2SWeqaar Janjua{
125*facb7cb2SWeqaar Janjua	local -a 'paramkeys=("${!'"$1"'[@]}")' copy
126*facb7cb2SWeqaar Janjua	paramkeysstr=${paramkeys[*]}
127*facb7cb2SWeqaar Janjua
128*facb7cb2SWeqaar Janjua	for index in $paramkeysstr;
129*facb7cb2SWeqaar Janjua		do
130*facb7cb2SWeqaar Janjua			current=$1"[$index]"
131*facb7cb2SWeqaar Janjua			copy[$index]=${!current}
132*facb7cb2SWeqaar Janjua		done
133*facb7cb2SWeqaar Janjua
134*facb7cb2SWeqaar Janjua	./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${copy[*]} -C ${NUMPKTS}
135*facb7cb2SWeqaar Janjua}
136