1d979e13aSRolf Eike Beer#!/bin/sh
2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
35aa5bd14SDaniel Borkmann
4272d1f4cSYauheni Kaliuta# Usage:
5272d1f4cSYauheni Kaliuta# ./test_kmod.sh [module_param]...
6272d1f4cSYauheni Kaliuta# Ex.: ./test_kmod.sh test_range=1,3
7272d1f4cSYauheni Kaliuta# All the parameters are passed to the kernel module.
8272d1f4cSYauheni Kaliuta
981e167c2SJeffrin Jose T# Kselftest framework requirement - SKIP code is 4.
1081e167c2SJeffrin Jose Tksft_skip=4
1181e167c2SJeffrin Jose T
1281e167c2SJeffrin Jose Tmsg="skip all tests:"
1381e167c2SJeffrin Jose Tif [ "$(id -u)" != "0" ]; then
1481e167c2SJeffrin Jose T	echo $msg please run this as root >&2
1581e167c2SJeffrin Jose T	exit $ksft_skip
1681e167c2SJeffrin Jose Tfi
1781e167c2SJeffrin Jose T
182ea48598SIlya Leoshkevichif [ "$building_out_of_srctree" ]; then
192ea48598SIlya Leoshkevich	# We are in linux-build/kselftest/bpf
202ea48598SIlya Leoshkevich	OUTPUT=../../
212ea48598SIlya Leoshkevichelse
222ea48598SIlya Leoshkevich	# We are in linux/tools/testing/selftests/bpf
232ea48598SIlya Leoshkevich	OUTPUT=../../../../
242ea48598SIlya Leoshkevichfi
255aa5bd14SDaniel Borkmann
265aa5bd14SDaniel Borkmanntest_run()
275aa5bd14SDaniel Borkmann{
285aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_enable=$1 2>&1 > /dev/null
295aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_harden=$2 2>&1 > /dev/null
305aa5bd14SDaniel Borkmann
315aa5bd14SDaniel Borkmann	echo "[ JIT enabled:$1 hardened:$2 ]"
32*2702c789SYauheni Kaliuta	shift 2
335aa5bd14SDaniel Borkmann	dmesg -C
342ea48598SIlya Leoshkevich	if [ -f ${OUTPUT}/lib/test_bpf.ko ]; then
35272d1f4cSYauheni Kaliuta		insmod ${OUTPUT}/lib/test_bpf.ko "$@" 2> /dev/null
365aa5bd14SDaniel Borkmann		if [ $? -ne 0 ]; then
375aa5bd14SDaniel Borkmann			rc=1
385aa5bd14SDaniel Borkmann		fi
39035d808fSNaresh Kamboju	else
40035d808fSNaresh Kamboju		# Use modprobe dry run to check for missing test_bpf module
41272d1f4cSYauheni Kaliuta		if ! /sbin/modprobe -q -n test_bpf "$@"; then
42035d808fSNaresh Kamboju			echo "test_bpf: [SKIP]"
43272d1f4cSYauheni Kaliuta		elif /sbin/modprobe -q test_bpf "$@"; then
44035d808fSNaresh Kamboju			echo "test_bpf: ok"
45035d808fSNaresh Kamboju		else
46035d808fSNaresh Kamboju			echo "test_bpf: [FAIL]"
47035d808fSNaresh Kamboju			rc=1
48035d808fSNaresh Kamboju		fi
49035d808fSNaresh Kamboju	fi
505aa5bd14SDaniel Borkmann	rmmod  test_bpf 2> /dev/null
515aa5bd14SDaniel Borkmann	dmesg | grep FAIL
525aa5bd14SDaniel Borkmann}
535aa5bd14SDaniel Borkmann
545aa5bd14SDaniel Borkmanntest_save()
555aa5bd14SDaniel Borkmann{
565aa5bd14SDaniel Borkmann	JE=`sysctl -n net.core.bpf_jit_enable`
575aa5bd14SDaniel Borkmann	JH=`sysctl -n net.core.bpf_jit_harden`
585aa5bd14SDaniel Borkmann}
595aa5bd14SDaniel Borkmann
605aa5bd14SDaniel Borkmanntest_restore()
615aa5bd14SDaniel Borkmann{
625aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_enable=$JE 2>&1 > /dev/null
635aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_harden=$JH 2>&1 > /dev/null
645aa5bd14SDaniel Borkmann}
655aa5bd14SDaniel Borkmann
665aa5bd14SDaniel Borkmannrc=0
675aa5bd14SDaniel Borkmanntest_save
68*2702c789SYauheni Kaliutatest_run 0 0 "$@"
69*2702c789SYauheni Kaliutatest_run 1 0 "$@"
70*2702c789SYauheni Kaliutatest_run 1 1 "$@"
71*2702c789SYauheni Kaliutatest_run 1 2 "$@"
725aa5bd14SDaniel Borkmanntest_restore
735aa5bd14SDaniel Borkmannexit $rc
74