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