Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.17.
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0
  3#
  4# OVS kernel module self tests
  5
  6# Kselftest framework requirement - SKIP code is 4.
  7ksft_skip=4
  8
  9PAUSE_ON_FAIL=no
 10VERBOSE=0
 11TRACING=0
 12
 13tests="
 14	netlink_checks				ovsnl: validate netlink attrs and settings"
 15
 16info() {
 17    [ $VERBOSE = 0 ] || echo $*
 18}
 19
 20ovs_base=`pwd`
 21sbxs=
 22sbx_add () {
 23	info "adding sandbox '$1'"
 24
 25	sbxs="$sbxs $1"
 26
 27	NO_BIN=0
 28
 29	# Create sandbox.
 30	local d="$ovs_base"/$1
 31	if [ -e $d ]; then
 32		info "removing $d"
 33		rm -rf "$d"
 34	fi
 35	mkdir "$d" || return 1
 36	ovs_setenv $1
 37}
 38
 39ovs_exit_sig() {
 40	[ -e ${ovs_dir}/cleanup ] && . "$ovs_dir/cleanup"
 41}
 42
 43on_exit() {
 44	echo "$1" > ${ovs_dir}/cleanup.tmp
 45	cat ${ovs_dir}/cleanup >> ${ovs_dir}/cleanup.tmp
 46	mv ${ovs_dir}/cleanup.tmp ${ovs_dir}/cleanup
 47}
 48
 49ovs_setenv() {
 50	sandbox=$1
 51
 52	ovs_dir=$ovs_base${1:+/$1}; export ovs_dir
 53
 54	test -e ${ovs_dir}/cleanup || : > ${ovs_dir}/cleanup
 55}
 56
 57ovs_sbx() {
 58	if test "X$2" != X; then
 59		(ovs_setenv $1; shift; "$@" >> ${ovs_dir}/debug.log)
 60	else
 61		ovs_setenv $1
 62	fi
 63}
 64
 65ovs_add_dp () {
 66	info "Adding DP/Bridge IF: sbx:$1 dp:$2 {$3, $4, $5}"
 67	sbxname="$1"
 68	shift
 69	ovs_sbx "$sbxname" python3 $ovs_base/ovs-dpctl.py add-dp $*
 70	on_exit "ovs_sbx $sbxname python3 $ovs_base/ovs-dpctl.py del-dp $1;"
 71}
 72
 73usage() {
 74	echo
 75	echo "$0 [OPTIONS] [TEST]..."
 76	echo "If no TEST argument is given, all tests will be run."
 77	echo
 78	echo "Options"
 79	echo "  -t: capture traffic via tcpdump"
 80	echo "  -v: verbose"
 81	echo "  -p: pause on failure"
 82	echo
 83	echo "Available tests${tests}"
 84	exit 1
 85}
 86
 87# netlink_validation
 88# - Create a dp
 89# - check no warning with "old version" simulation
 90test_netlink_checks () {
 91	sbx_add "test_netlink_checks" || return 1
 92
 93	info "setting up new DP"
 94	ovs_add_dp "test_netlink_checks" nv0 || return 1
 95	# now try again
 96	PRE_TEST=$(dmesg | grep -E "RIP: [0-9a-fA-Fx]+:ovs_dp_cmd_new\+")
 97	ovs_add_dp "test_netlink_checks" nv0 -V 0 || return 1
 98	POST_TEST=$(dmesg | grep -E "RIP: [0-9a-fA-Fx]+:ovs_dp_cmd_new\+")
 99	if [ "$PRE_TEST" != "$POST_TEST" ]; then
100		info "failed - gen warning"
101		return 1
102	fi
103
104	return 0
105}
106
107run_test() {
108	(
109	tname="$1"
110	tdesc="$2"
111
112	if ! lsmod | grep openvswitch >/dev/null 2>&1; then
113		stdbuf -o0 printf "TEST: %-60s  [NOMOD]\n" "${tdesc}"
114		return $ksft_skip
115	fi
116
117	if python3 ovs-dpctl.py -h 2>&1 | \
118	     grep "Need to install the python" >/dev/null 2>&1; then
119		stdbuf -o0 printf "TEST: %-60s  [PYLIB]\n" "${tdesc}"
120		return $ksft_skip
121	fi
122	printf "TEST: %-60s  [START]\n" "${tname}"
123
124	unset IFS
125
126	eval test_${tname}
127	ret=$?
128
129	if [ $ret -eq 0 ]; then
130		printf "TEST: %-60s  [ OK ]\n" "${tdesc}"
131		ovs_exit_sig
132		rm -rf "$ovs_dir"
133	elif [ $ret -eq 1 ]; then
134		printf "TEST: %-60s  [FAIL]\n" "${tdesc}"
135		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
136			echo
137			echo "Pausing. Logs in $ovs_dir/. Hit enter to continue"
138			read a
139		fi
140		ovs_exit_sig
141		[ "${PAUSE_ON_FAIL}" = "yes" ] || rm -rf "$ovs_dir"
142		exit 1
143	elif [ $ret -eq $ksft_skip ]; then
144		printf "TEST: %-60s  [SKIP]\n" "${tdesc}"
145	elif [ $ret -eq 2 ]; then
146		rm -rf test_${tname}
147		run_test "$1" "$2"
148	fi
149
150	return $ret
151	)
152	ret=$?
153	case $ret in
154		0)
155			[ $all_skipped = true ] && [ $exitcode=$ksft_skip ] && exitcode=0
156			all_skipped=false
157		;;
158		$ksft_skip)
159			[ $all_skipped = true ] && exitcode=$ksft_skip
160		;;
161		*)
162			all_skipped=false
163			exitcode=1
164		;;
165	esac
166
167	return $ret
168}
169
170
171exitcode=0
172desc=0
173all_skipped=true
174
175while getopts :pvt o
176do
177	case $o in
178	p) PAUSE_ON_FAIL=yes;;
179	v) VERBOSE=1;;
180	t) if which tcpdump > /dev/null 2>&1; then
181		TRACING=1
182	   else
183		echo "=== tcpdump not available, tracing disabled"
184	   fi
185	   ;;
186	*) usage;;
187	esac
188done
189shift $(($OPTIND-1))
190
191IFS="	
192"
193
194for arg do
195	# Check first that all requested tests are available before running any
196	command -v > /dev/null "test_${arg}" || { echo "=== Test ${arg} not found"; usage; }
197done
198
199name=""
200desc=""
201for t in ${tests}; do
202	[ "${name}" = "" ]	&& name="${t}"	&& continue
203	[ "${desc}" = "" ]	&& desc="${t}"
204
205	run_this=1
206	for arg do
207		[ "${arg}" != "${arg#--*}" ] && continue
208		[ "${arg}" = "${name}" ] && run_this=1 && break
209		run_this=0
210	done
211	if [ $run_this -eq 1 ]; then
212		run_test "${name}" "${desc}"
213	fi
214	name=""
215	desc=""
216done
217
218exit ${exitcode}