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
11*018a8e75SMaciej FijalkowskiXSKOBJ=xskxceiver
12a8905257SWeqaar Janjua
13a8905257SWeqaar Janjuavalidate_root_exec()
14a8905257SWeqaar Janjua{
15a8905257SWeqaar Janjua	msg="skip all tests:"
16a8905257SWeqaar Janjua	if [ $UID != 0 ]; then
17a8905257SWeqaar Janjua		echo $msg must be run as root >&2
18895b62eeSMagnus Karlsson		test_exit $ksft_fail
19a8905257SWeqaar Janjua	else
20a8905257SWeqaar Janjua		return $ksft_pass
21a8905257SWeqaar Janjua	fi
22a8905257SWeqaar Janjua}
23a8905257SWeqaar Janjua
24a8905257SWeqaar Janjuavalidate_veth_support()
25a8905257SWeqaar Janjua{
26a8905257SWeqaar Janjua	msg="skip all tests:"
27a8905257SWeqaar Janjua	if [ $(ip link add $1 type veth 2>/dev/null; echo $?;) != 0 ]; then
28a8905257SWeqaar Janjua		echo $msg veth kernel support not available >&2
29895b62eeSMagnus Karlsson		test_exit $ksft_skip
30a8905257SWeqaar Janjua	else
31a8905257SWeqaar Janjua		ip link del $1
32a8905257SWeqaar Janjua		return $ksft_pass
33a8905257SWeqaar Janjua	fi
34a8905257SWeqaar Janjua}
35a8905257SWeqaar Janjua
36a8905257SWeqaar Janjuatest_status()
37a8905257SWeqaar Janjua{
38a8905257SWeqaar Janjua	statusval=$1
39895b62eeSMagnus Karlsson	if [ $statusval -eq $ksft_fail ]; then
40895b62eeSMagnus Karlsson		echo "$2: [ FAIL ]"
41895b62eeSMagnus Karlsson	elif [ $statusval -eq $ksft_skip ]; then
42895b62eeSMagnus Karlsson		echo "$2: [ SKIPPED ]"
43895b62eeSMagnus Karlsson	elif [ $statusval -eq $ksft_pass ]; then
44895b62eeSMagnus Karlsson		echo "$2: [ PASS ]"
45a8905257SWeqaar Janjua	fi
46a8905257SWeqaar Janjua}
47a8905257SWeqaar Janjua
48a8905257SWeqaar Janjuatest_exit()
49a8905257SWeqaar Janjua{
50895b62eeSMagnus Karlsson	if [ $1 -ne 0 ]; then
51895b62eeSMagnus Karlsson		test_status $1 $(basename $0)
52a8905257SWeqaar Janjua	fi
53895b62eeSMagnus Karlsson	exit 1
54a8905257SWeqaar Janjua}
55a8905257SWeqaar Janjua
56a8905257SWeqaar Janjuaclear_configs()
57a8905257SWeqaar Janjua{
58a8905257SWeqaar Janjua	if [ $(ip netns show | grep $3 &>/dev/null; echo $?;) == 0 ]; then
59a8905257SWeqaar Janjua		[ $(ip netns exec $3 ip link show $2 &>/dev/null; echo $?;) == 0 ] &&
60ecde6061SMagnus Karlsson			{ ip netns exec $3 ip link del $2; }
61a8905257SWeqaar Janjua		ip netns del $3
62a8905257SWeqaar Janjua	fi
63a8905257SWeqaar Janjua	#Once we delete a veth pair node, the entire veth pair is removed,
64a8905257SWeqaar Janjua	#this is just to be cautious just incase the NS does not exist then
65a8905257SWeqaar Janjua	#veth node inside NS won't get removed so we explicitly remove it
66a8905257SWeqaar Janjua	[ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] &&
67ecde6061SMagnus Karlsson		{ ip link del $1; }
68a8905257SWeqaar Janjua}
69a8905257SWeqaar Janjua
70a8905257SWeqaar Janjuacleanup_exit()
71a8905257SWeqaar Janjua{
72a8905257SWeqaar Janjua	clear_configs $1 $2 $3
73a8905257SWeqaar Janjua}
74a8905257SWeqaar Janjua
75a8905257SWeqaar Janjuavalidate_ip_utility()
76a8905257SWeqaar Janjua{
77895b62eeSMagnus Karlsson	[ ! $(type -P ip) ] && { echo "'ip' not found. Skipping tests."; test_exit $ksft_skip; }
78a8905257SWeqaar Janjua}
79a8905257SWeqaar Janjua
80*018a8e75SMaciej Fijalkowskiexec_xskxceiver()
81facb7cb2SWeqaar Janjua{
82f90062b5SMagnus Karlsson        if [[ $busy_poll -eq 1 ]]; then
83f90062b5SMagnus Karlsson	        ARGS+="-b "
84f90062b5SMagnus Karlsson	fi
85f90062b5SMagnus Karlsson
86f90062b5SMagnus Karlsson	./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${ARGS}
87895b62eeSMagnus Karlsson
88895b62eeSMagnus Karlsson	retval=$?
89895b62eeSMagnus Karlsson	test_status $retval "${TEST_NAME}"
90895b62eeSMagnus Karlsson	statusList+=($retval)
91895b62eeSMagnus Karlsson	nameList+=(${TEST_NAME})
92facb7cb2SWeqaar Janjua}
93