Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #!/bin/bash # SPDX-License-Identifier: GPL-2.0 lib_dir=$(dirname $0)/../../../net/forwarding ALL_TESTS=" default_hw_stats_test immediate_hw_stats_test delayed_hw_stats_test disabled_hw_stats_test " NUM_NETIFS=2 source $lib_dir/tc_common.sh source $lib_dir/lib.sh source $lib_dir/devlink_lib.sh h1_create() { simple_if_init $h1 192.0.2.1/24 } h1_destroy() { simple_if_fini $h1 192.0.2.1/24 } switch_create() { simple_if_init $swp1 192.0.2.2/24 tc qdisc add dev $swp1 clsact } switch_destroy() { tc qdisc del dev $swp1 clsact simple_if_fini $swp1 192.0.2.2/24 } hw_stats_test() { RET=0 local name=$1 local action_hw_stats=$2 local occ_delta=$3 local expected_packet_count=$4 local orig_occ=$(devlink_resource_get "counters" "flow" | jq '.["occ"]') tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \ skip_sw dst_ip 192.0.2.2 action drop $action_hw_stats check_err $? "Failed to add rule with $name hw_stats" local new_occ=$(devlink_resource_get "counters" "flow" | jq '.["occ"]') local expected_occ=$((orig_occ + occ_delta)) [ "$new_occ" == "$expected_occ" ] check_err $? "Expected occupancy of $expected_occ, got $new_occ" $MZ $h1 -c 1 -p 64 -a $h1mac -b $swp1mac -A 192.0.2.1 -B 192.0.2.2 \ -t ip -q tc_check_packets "dev $swp1 ingress" 101 $expected_packet_count check_err $? "Did not match incoming packet" tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower log_test "$name hw_stats" } default_hw_stats_test() { hw_stats_test "default" "" 2 1 } immediate_hw_stats_test() { hw_stats_test "immediate" "hw_stats immediate" 2 1 } delayed_hw_stats_test() { RET=0 tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \ skip_sw dst_ip 192.0.2.2 action drop hw_stats delayed check_fail $? "Unexpected success in adding rule with delayed hw_stats" log_test "delayed hw_stats" } disabled_hw_stats_test() { hw_stats_test "disabled" "hw_stats disabled" 0 0 } setup_prepare() { h1=${NETIFS[p1]} swp1=${NETIFS[p2]} h1mac=$(mac_get $h1) swp1mac=$(mac_get $swp1) vrf_prepare h1_create switch_create } cleanup() { pre_cleanup switch_destroy h1_destroy vrf_cleanup } check_tc_action_hw_stats_support trap cleanup EXIT setup_prepare setup_wait tests_run exit $EXIT_STATUS |