0001
0002
0003
0004 lib_dir=$(dirname $0)/../../../net/forwarding
0005
0006 ALL_TESTS="
0007 default_hw_stats_test
0008 immediate_hw_stats_test
0009 delayed_hw_stats_test
0010 disabled_hw_stats_test
0011 "
0012 NUM_NETIFS=2
0013
0014 source $lib_dir/tc_common.sh
0015 source $lib_dir/lib.sh
0016 source $lib_dir/devlink_lib.sh
0017
0018 h1_create()
0019 {
0020 simple_if_init $h1 192.0.2.1/24
0021 }
0022
0023 h1_destroy()
0024 {
0025 simple_if_fini $h1 192.0.2.1/24
0026 }
0027
0028 switch_create()
0029 {
0030 simple_if_init $swp1 192.0.2.2/24
0031 tc qdisc add dev $swp1 clsact
0032 }
0033
0034 switch_destroy()
0035 {
0036 tc qdisc del dev $swp1 clsact
0037 simple_if_fini $swp1 192.0.2.2/24
0038 }
0039
0040 hw_stats_test()
0041 {
0042 RET=0
0043
0044 local name=$1
0045 local action_hw_stats=$2
0046 local occ_delta=$3
0047 local expected_packet_count=$4
0048
0049 local orig_occ=$(devlink_resource_get "counters" "flow" | jq '.["occ"]')
0050
0051 tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
0052 skip_sw dst_ip 192.0.2.2 action drop $action_hw_stats
0053 check_err $? "Failed to add rule with $name hw_stats"
0054
0055 local new_occ=$(devlink_resource_get "counters" "flow" | jq '.["occ"]')
0056 local expected_occ=$((orig_occ + occ_delta))
0057 [ "$new_occ" == "$expected_occ" ]
0058 check_err $? "Expected occupancy of $expected_occ, got $new_occ"
0059
0060 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swp1mac -A 192.0.2.1 -B 192.0.2.2 \
0061 -t ip -q
0062
0063 tc_check_packets "dev $swp1 ingress" 101 $expected_packet_count
0064 check_err $? "Did not match incoming packet"
0065
0066 tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
0067
0068 log_test "$name hw_stats"
0069 }
0070
0071 default_hw_stats_test()
0072 {
0073 hw_stats_test "default" "" 2 1
0074 }
0075
0076 immediate_hw_stats_test()
0077 {
0078 hw_stats_test "immediate" "hw_stats immediate" 2 1
0079 }
0080
0081 delayed_hw_stats_test()
0082 {
0083 RET=0
0084
0085 tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
0086 skip_sw dst_ip 192.0.2.2 action drop hw_stats delayed
0087 check_fail $? "Unexpected success in adding rule with delayed hw_stats"
0088
0089 log_test "delayed hw_stats"
0090 }
0091
0092 disabled_hw_stats_test()
0093 {
0094 hw_stats_test "disabled" "hw_stats disabled" 0 0
0095 }
0096
0097 setup_prepare()
0098 {
0099 h1=${NETIFS[p1]}
0100 swp1=${NETIFS[p2]}
0101
0102 h1mac=$(mac_get $h1)
0103 swp1mac=$(mac_get $swp1)
0104
0105 vrf_prepare
0106
0107 h1_create
0108 switch_create
0109 }
0110
0111 cleanup()
0112 {
0113 pre_cleanup
0114
0115 switch_destroy
0116 h1_destroy
0117
0118 vrf_cleanup
0119 }
0120
0121 check_tc_action_hw_stats_support
0122
0123 trap cleanup EXIT
0124
0125 setup_prepare
0126 setup_wait
0127
0128 tests_run
0129
0130 exit $EXIT_STATUS