Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
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