| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #!/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
|