1f26b3091SIdo Schimmel#!/bin/bash 2f26b3091SIdo Schimmel# SPDX-License-Identifier: GPL-2.0 3f26b3091SIdo Schimmel# 4f26b3091SIdo Schimmel# This test is for checking the psample module. It makes use of netdevsim 5f26b3091SIdo Schimmel# which periodically generates "sampled" packets. 6f26b3091SIdo Schimmel 7f26b3091SIdo Schimmellib_dir=$(dirname $0)/../../../net/forwarding 8f26b3091SIdo Schimmel 9f26b3091SIdo SchimmelALL_TESTS=" 10f26b3091SIdo Schimmel psample_enable_test 11f26b3091SIdo Schimmel psample_group_num_test 12f26b3091SIdo Schimmel psample_md_test 13f26b3091SIdo Schimmel" 14f26b3091SIdo SchimmelNETDEVSIM_PATH=/sys/bus/netdevsim/ 15f26b3091SIdo SchimmelDEV_ADDR=1337 16f26b3091SIdo SchimmelDEV=netdevsim${DEV_ADDR} 17f26b3091SIdo SchimmelSYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/ 18f26b3091SIdo SchimmelPSAMPLE_DIR=/sys/kernel/debug/netdevsim/$DEV/psample/ 19f26b3091SIdo SchimmelCAPTURE_FILE=$(mktemp) 20f26b3091SIdo SchimmelNUM_NETIFS=0 21f26b3091SIdo Schimmelsource $lib_dir/lib.sh 22*0521a262SPetr Machata 23*0521a262SPetr MachataDEVLINK_DEV= 24f26b3091SIdo Schimmelsource $lib_dir/devlink_lib.sh 25*0521a262SPetr MachataDEVLINK_DEV=netdevsim/${DEV} 26f26b3091SIdo Schimmel 27f26b3091SIdo Schimmel# Available at https://github.com/Mellanox/libpsample 28f26b3091SIdo Schimmelrequire_command psample 29f26b3091SIdo Schimmel 30f26b3091SIdo Schimmelpsample_capture() 31f26b3091SIdo Schimmel{ 32f26b3091SIdo Schimmel rm -f $CAPTURE_FILE 33f26b3091SIdo Schimmel 34f26b3091SIdo Schimmel timeout 2 ip netns exec testns1 psample &> $CAPTURE_FILE 35f26b3091SIdo Schimmel} 36f26b3091SIdo Schimmel 37f26b3091SIdo Schimmelpsample_enable_test() 38f26b3091SIdo Schimmel{ 39f26b3091SIdo Schimmel RET=0 40f26b3091SIdo Schimmel 41f26b3091SIdo Schimmel echo 1 > $PSAMPLE_DIR/enable 42f26b3091SIdo Schimmel check_err $? "Failed to enable sampling when should not" 43f26b3091SIdo Schimmel 44f26b3091SIdo Schimmel echo 1 > $PSAMPLE_DIR/enable 2>/dev/null 45f26b3091SIdo Schimmel check_fail $? "Sampling enablement succeeded when should fail" 46f26b3091SIdo Schimmel 47f26b3091SIdo Schimmel psample_capture 48f26b3091SIdo Schimmel if [ $(cat $CAPTURE_FILE | wc -l) -eq 0 ]; then 49f26b3091SIdo Schimmel check_err 1 "Failed to capture sampled packets" 50f26b3091SIdo Schimmel fi 51f26b3091SIdo Schimmel 52f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/enable 53f26b3091SIdo Schimmel check_err $? "Failed to disable sampling when should not" 54f26b3091SIdo Schimmel 55f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/enable 2>/dev/null 56f26b3091SIdo Schimmel check_fail $? "Sampling disablement succeeded when should fail" 57f26b3091SIdo Schimmel 58f26b3091SIdo Schimmel psample_capture 59f26b3091SIdo Schimmel if [ $(cat $CAPTURE_FILE | wc -l) -ne 0 ]; then 60f26b3091SIdo Schimmel check_err 1 "Captured sampled packets when should not" 61f26b3091SIdo Schimmel fi 62f26b3091SIdo Schimmel 63f26b3091SIdo Schimmel log_test "psample enable / disable" 64f26b3091SIdo Schimmel} 65f26b3091SIdo Schimmel 66f26b3091SIdo Schimmelpsample_group_num_test() 67f26b3091SIdo Schimmel{ 68f26b3091SIdo Schimmel RET=0 69f26b3091SIdo Schimmel 70f26b3091SIdo Schimmel echo 1234 > $PSAMPLE_DIR/group_num 71f26b3091SIdo Schimmel echo 1 > $PSAMPLE_DIR/enable 72f26b3091SIdo Schimmel 73f26b3091SIdo Schimmel psample_capture 74f26b3091SIdo Schimmel grep -q -e "group 1234" $CAPTURE_FILE 75f26b3091SIdo Schimmel check_err $? "Sampled packets reported with wrong group number" 76f26b3091SIdo Schimmel 77f26b3091SIdo Schimmel # New group number should only be used after disable / enable. 78f26b3091SIdo Schimmel echo 4321 > $PSAMPLE_DIR/group_num 79f26b3091SIdo Schimmel 80f26b3091SIdo Schimmel psample_capture 81f26b3091SIdo Schimmel grep -q -e "group 4321" $CAPTURE_FILE 82f26b3091SIdo Schimmel check_fail $? "Group number changed while sampling is active" 83f26b3091SIdo Schimmel 84f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/enable && echo 1 > $PSAMPLE_DIR/enable 85f26b3091SIdo Schimmel 86f26b3091SIdo Schimmel psample_capture 87f26b3091SIdo Schimmel grep -q -e "group 4321" $CAPTURE_FILE 88f26b3091SIdo Schimmel check_err $? "Group number did not change after restarting sampling" 89f26b3091SIdo Schimmel 90f26b3091SIdo Schimmel log_test "psample group number" 91f26b3091SIdo Schimmel 92f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/enable 93f26b3091SIdo Schimmel} 94f26b3091SIdo Schimmel 95f26b3091SIdo Schimmelpsample_md_test() 96f26b3091SIdo Schimmel{ 97f26b3091SIdo Schimmel RET=0 98f26b3091SIdo Schimmel 99f26b3091SIdo Schimmel echo 1 > $PSAMPLE_DIR/enable 100f26b3091SIdo Schimmel 101f26b3091SIdo Schimmel echo 1234 > $PSAMPLE_DIR/in_ifindex 102f26b3091SIdo Schimmel echo 4321 > $PSAMPLE_DIR/out_ifindex 103f26b3091SIdo Schimmel psample_capture 104f26b3091SIdo Schimmel 105f26b3091SIdo Schimmel grep -q -e "in-ifindex 1234" $CAPTURE_FILE 106f26b3091SIdo Schimmel check_err $? "Sampled packets reported with wrong in-ifindex" 107f26b3091SIdo Schimmel 108f26b3091SIdo Schimmel grep -q -e "out-ifindex 4321" $CAPTURE_FILE 109f26b3091SIdo Schimmel check_err $? "Sampled packets reported with wrong out-ifindex" 110f26b3091SIdo Schimmel 111f26b3091SIdo Schimmel echo 5 > $PSAMPLE_DIR/out_tc 112f26b3091SIdo Schimmel psample_capture 113f26b3091SIdo Schimmel 114f26b3091SIdo Schimmel grep -q -e "out-tc 5" $CAPTURE_FILE 115f26b3091SIdo Schimmel check_err $? "Sampled packets reported with wrong out-tc" 116f26b3091SIdo Schimmel 117f26b3091SIdo Schimmel echo $((2**16 - 1)) > $PSAMPLE_DIR/out_tc 118f26b3091SIdo Schimmel psample_capture 119f26b3091SIdo Schimmel 120f26b3091SIdo Schimmel grep -q -e "out-tc " $CAPTURE_FILE 121f26b3091SIdo Schimmel check_fail $? "Sampled packets reported with out-tc when should not" 122f26b3091SIdo Schimmel 123f26b3091SIdo Schimmel echo 1 > $PSAMPLE_DIR/out_tc 124f26b3091SIdo Schimmel echo 10000 > $PSAMPLE_DIR/out_tc_occ_max 125f26b3091SIdo Schimmel psample_capture 126f26b3091SIdo Schimmel 127f26b3091SIdo Schimmel grep -q -e "out-tc-occ " $CAPTURE_FILE 128f26b3091SIdo Schimmel check_err $? "Sampled packets not reported with out-tc-occ when should" 129f26b3091SIdo Schimmel 130f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/out_tc_occ_max 131f26b3091SIdo Schimmel psample_capture 132f26b3091SIdo Schimmel 133f26b3091SIdo Schimmel grep -q -e "out-tc-occ " $CAPTURE_FILE 134f26b3091SIdo Schimmel check_fail $? "Sampled packets reported with out-tc-occ when should not" 135f26b3091SIdo Schimmel 136f26b3091SIdo Schimmel echo 10000 > $PSAMPLE_DIR/latency_max 137f26b3091SIdo Schimmel psample_capture 138f26b3091SIdo Schimmel 139f26b3091SIdo Schimmel grep -q -e "latency " $CAPTURE_FILE 140f26b3091SIdo Schimmel check_err $? "Sampled packets not reported with latency when should" 141f26b3091SIdo Schimmel 142f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/latency_max 143f26b3091SIdo Schimmel psample_capture 144f26b3091SIdo Schimmel 145f26b3091SIdo Schimmel grep -q -e "latency " $CAPTURE_FILE 146f26b3091SIdo Schimmel check_fail $? "Sampled packets reported with latency when should not" 147f26b3091SIdo Schimmel 148f26b3091SIdo Schimmel log_test "psample metadata" 149f26b3091SIdo Schimmel 150f26b3091SIdo Schimmel echo 0 > $PSAMPLE_DIR/enable 151f26b3091SIdo Schimmel} 152f26b3091SIdo Schimmel 153f26b3091SIdo Schimmelsetup_prepare() 154f26b3091SIdo Schimmel{ 155f26b3091SIdo Schimmel modprobe netdevsim &> /dev/null 156f26b3091SIdo Schimmel 157f26b3091SIdo Schimmel echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device 158f26b3091SIdo Schimmel while [ ! -d $SYSFS_NET_DIR ] ; do :; done 159f26b3091SIdo Schimmel 160f26b3091SIdo Schimmel set -e 161f26b3091SIdo Schimmel 162f26b3091SIdo Schimmel ip netns add testns1 163f26b3091SIdo Schimmel devlink dev reload $DEVLINK_DEV netns testns1 164f26b3091SIdo Schimmel 165f26b3091SIdo Schimmel set +e 166f26b3091SIdo Schimmel} 167f26b3091SIdo Schimmel 168f26b3091SIdo Schimmelcleanup() 169f26b3091SIdo Schimmel{ 170f26b3091SIdo Schimmel pre_cleanup 171f26b3091SIdo Schimmel rm -f $CAPTURE_FILE 172f26b3091SIdo Schimmel ip netns del testns1 173f26b3091SIdo Schimmel echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device 174f26b3091SIdo Schimmel modprobe -r netdevsim &> /dev/null 175f26b3091SIdo Schimmel} 176f26b3091SIdo Schimmel 177f26b3091SIdo Schimmeltrap cleanup EXIT 178f26b3091SIdo Schimmel 179f26b3091SIdo Schimmelsetup_prepare 180f26b3091SIdo Schimmel 181f26b3091SIdo Schimmeltests_run 182f26b3091SIdo Schimmel 183f26b3091SIdo Schimmelexit $EXIT_STATUS 184