184 lines
4.0 KiB
Bash
184 lines
4.0 KiB
Bash
|
#!/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=1337
|
||
|
DEV=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=0
|
||
|
source $lib_dir/lib.sh
|
||
|
|
||
|
DEVLINK_DEV=
|
||
|
source $lib_dir/devlink_lib.sh
|
||
|
DEVLINK_DEV=netdevsim/${DEV}
|
||
|
|
||
|
# Available at https://github.com/Mellanox/libpsample
|
||
|
require_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
|