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