131 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4lib_dir=$(dirname $0)/../../../net/forwarding5 6ALL_TESTS="7 default_hw_stats_test8 immediate_hw_stats_test9 delayed_hw_stats_test10 disabled_hw_stats_test11"12NUM_NETIFS=213 14source $lib_dir/tc_common.sh15source $lib_dir/lib.sh16source $lib_dir/devlink_lib.sh17 18h1_create()19{20 simple_if_init $h1 192.0.2.1/2421}22 23h1_destroy()24{25 simple_if_fini $h1 192.0.2.1/2426}27 28switch_create()29{30 simple_if_init $swp1 192.0.2.2/2431 tc qdisc add dev $swp1 clsact32}33 34switch_destroy()35{36 tc qdisc del dev $swp1 clsact37 simple_if_fini $swp1 192.0.2.2/2438}39 40hw_stats_test()41{42 RET=043 44 local name=$145 local action_hw_stats=$246 local occ_delta=$347 local expected_packet_count=$448 49 local orig_occ=$(devlink_resource_get "counters" "flow" | jq '.["occ"]')50 51 tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \52 skip_sw dst_ip 192.0.2.2 action drop $action_hw_stats53 check_err $? "Failed to add rule with $name hw_stats"54 55 local new_occ=$(devlink_resource_get "counters" "flow" | jq '.["occ"]')56 local expected_occ=$((orig_occ + occ_delta))57 [ "$new_occ" == "$expected_occ" ]58 check_err $? "Expected occupancy of $expected_occ, got $new_occ"59 60 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swp1mac -A 192.0.2.1 -B 192.0.2.2 \61 -t ip -q62 63 tc_check_packets "dev $swp1 ingress" 101 $expected_packet_count64 check_err $? "Did not match incoming packet"65 66 tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower67 68 log_test "$name hw_stats"69}70 71default_hw_stats_test()72{73 hw_stats_test "default" "" 2 174}75 76immediate_hw_stats_test()77{78 hw_stats_test "immediate" "hw_stats immediate" 2 179}80 81delayed_hw_stats_test()82{83 RET=084 85 tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \86 skip_sw dst_ip 192.0.2.2 action drop hw_stats delayed87 check_fail $? "Unexpected success in adding rule with delayed hw_stats"88 89 log_test "delayed hw_stats"90}91 92disabled_hw_stats_test()93{94 hw_stats_test "disabled" "hw_stats disabled" 0 095}96 97setup_prepare()98{99 h1=${NETIFS[p1]}100 swp1=${NETIFS[p2]}101 102 h1mac=$(mac_get $h1)103 swp1mac=$(mac_get $swp1)104 105 vrf_prepare106 107 h1_create108 switch_create109}110 111cleanup()112{113 pre_cleanup114 115 switch_destroy116 h1_destroy117 118 vrf_cleanup119}120 121check_tc_action_hw_stats_support122 123trap cleanup EXIT124 125setup_prepare126setup_wait127 128tests_run129 130exit $EXIT_STATUS131