183 lines · 4.0 KB · Shell
RawDownload
#!/bin/bash# SPDX-License-Identifier: GPL-2.0## This test is for checking the psample module. It makes use of netdevsim# which periodically generates "sampled" packets. lib_dir=$(dirname $0)/../../../net/forwarding ALL_TESTS="	psample_enable_test	psample_group_num_test	psample_md_test"NETDEVSIM_PATH=/sys/bus/netdevsim/DEV_ADDR=1337DEV=netdevsim${DEV_ADDR}SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/PSAMPLE_DIR=/sys/kernel/debug/netdevsim/$DEV/psample/CAPTURE_FILE=$(mktemp)NUM_NETIFS=0source $lib_dir/lib.sh DEVLINK_DEV=source $lib_dir/devlink_lib.shDEVLINK_DEV=netdevsim/${DEV} # Available at https://github.com/Mellanox/libpsamplerequire_command psample psample_capture(){	rm -f $CAPTURE_FILE 	timeout 2 ip netns exec testns1 psample &> $CAPTURE_FILE} psample_enable_test(){	RET=0 	echo 1 > $PSAMPLE_DIR/enable	check_err $? "Failed to enable sampling when should not" 	echo 1 > $PSAMPLE_DIR/enable 2>/dev/null	check_fail $? "Sampling enablement succeeded when should fail" 	psample_capture	if [ $(cat $CAPTURE_FILE | wc -l) -eq 0 ]; then		check_err 1 "Failed to capture sampled packets"	fi 	echo 0 > $PSAMPLE_DIR/enable	check_err $? "Failed to disable sampling when should not" 	echo 0 > $PSAMPLE_DIR/enable 2>/dev/null	check_fail $? "Sampling disablement succeeded when should fail" 	psample_capture	if [ $(cat $CAPTURE_FILE | wc -l) -ne 0 ]; then		check_err 1 "Captured sampled packets when should not"	fi 	log_test "psample enable / disable"} psample_group_num_test(){	RET=0 	echo 1234 > $PSAMPLE_DIR/group_num	echo 1 > $PSAMPLE_DIR/enable 	psample_capture	grep -q -e "group 1234" $CAPTURE_FILE	check_err $? "Sampled packets reported with wrong group number" 	# New group number should only be used after disable / enable.	echo 4321 > $PSAMPLE_DIR/group_num 	psample_capture	grep -q -e "group 4321" $CAPTURE_FILE	check_fail $? "Group number changed while sampling is active" 	echo 0 > $PSAMPLE_DIR/enable && echo 1 > $PSAMPLE_DIR/enable 	psample_capture	grep -q -e "group 4321" $CAPTURE_FILE	check_err $? "Group number did not change after restarting sampling" 	log_test "psample group number" 	echo 0 > $PSAMPLE_DIR/enable} psample_md_test(){	RET=0 	echo 1 > $PSAMPLE_DIR/enable 	echo 1234 > $PSAMPLE_DIR/in_ifindex	echo 4321 > $PSAMPLE_DIR/out_ifindex	psample_capture 	grep -q -e "in-ifindex 1234" $CAPTURE_FILE	check_err $? "Sampled packets reported with wrong in-ifindex" 	grep -q -e "out-ifindex 4321" $CAPTURE_FILE	check_err $? "Sampled packets reported with wrong out-ifindex" 	echo 5 > $PSAMPLE_DIR/out_tc	psample_capture 	grep -q -e "out-tc 5" $CAPTURE_FILE	check_err $? "Sampled packets reported with wrong out-tc" 	echo $((2**16 - 1)) > $PSAMPLE_DIR/out_tc	psample_capture 	grep -q -e "out-tc " $CAPTURE_FILE	check_fail $? "Sampled packets reported with out-tc when should not" 	echo 1 > $PSAMPLE_DIR/out_tc	echo 10000 > $PSAMPLE_DIR/out_tc_occ_max	psample_capture 	grep -q -e "out-tc-occ " $CAPTURE_FILE	check_err $? "Sampled packets not reported with out-tc-occ when should" 	echo 0 > $PSAMPLE_DIR/out_tc_occ_max	psample_capture 	grep -q -e "out-tc-occ " $CAPTURE_FILE	check_fail $? "Sampled packets reported with out-tc-occ when should not" 	echo 10000 > $PSAMPLE_DIR/latency_max	psample_capture 	grep -q -e "latency " $CAPTURE_FILE	check_err $? "Sampled packets not reported with latency when should" 	echo 0 > $PSAMPLE_DIR/latency_max	psample_capture 	grep -q -e "latency " $CAPTURE_FILE	check_fail $? "Sampled packets reported with latency when should not" 	log_test "psample metadata" 	echo 0 > $PSAMPLE_DIR/enable} setup_prepare(){	modprobe netdevsim &> /dev/null 	echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device	while [ ! -d $SYSFS_NET_DIR ] ; do :; done 	set -e 	ip netns add testns1	devlink dev reload $DEVLINK_DEV netns testns1 	set +e} cleanup(){	pre_cleanup	rm -f $CAPTURE_FILE	ip netns del testns1	echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device	modprobe -r netdevsim &> /dev/null} trap cleanup EXIT setup_prepare tests_run exit $EXIT_STATUS