1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 3 # 4 # Test that policers shared by different tc filters are correctly reference 5 # counted by observing policers' occupancy via devlink-resource. 6 7 lib_dir=$(dirname $0)/../../../net/forwarding 8 9 ALL_TESTS=" 10 tc_police_occ_test 11 " 12 NUM_NETIFS=2 13 source $lib_dir/lib.sh 14 source $lib_dir/devlink_lib.sh 15 16 h1_create() 17 { 18 simple_if_init $h1 19 } 20 21 h1_destroy() 22 { 23 simple_if_fini $h1 24 } 25 26 switch_create() 27 { 28 simple_if_init $swp1 29 tc qdisc add dev $swp1 clsact 30 } 31 32 switch_destroy() 33 { 34 tc qdisc del dev $swp1 clsact 35 simple_if_fini $swp1 36 } 37 38 setup_prepare() 39 { 40 h1=${NETIFS[p1]} 41 swp1=${NETIFS[p2]} 42 43 vrf_prepare 44 45 h1_create 46 switch_create 47 } 48 49 cleanup() 50 { 51 pre_cleanup 52 53 switch_destroy 54 h1_destroy 55 56 vrf_cleanup 57 } 58 59 tc_police_occ_get() 60 { 61 devlink_resource_occ_get global_policers single_rate_policers 62 } 63 64 tc_police_occ_test() 65 { 66 RET=0 67 68 local occ=$(tc_police_occ_get) 69 70 tc filter add dev $swp1 ingress pref 1 handle 101 proto ip \ 71 flower skip_sw \ 72 action police rate 100mbit burst 100k conform-exceed drop/ok 73 (( occ + 1 == $(tc_police_occ_get) )) 74 check_err $? "Got occupancy $(tc_police_occ_get), expected $((occ + 1))" 75 76 tc filter del dev $swp1 ingress pref 1 handle 101 flower 77 (( occ == $(tc_police_occ_get) )) 78 check_err $? "Got occupancy $(tc_police_occ_get), expected $occ" 79 80 tc filter add dev $swp1 ingress pref 1 handle 101 proto ip \ 81 flower skip_sw \ 82 action police rate 100mbit burst 100k conform-exceed drop/ok \ 83 index 10 84 tc filter add dev $swp1 ingress pref 2 handle 102 proto ip \ 85 flower skip_sw action police index 10 86 87 (( occ + 1 == $(tc_police_occ_get) )) 88 check_err $? "Got occupancy $(tc_police_occ_get), expected $((occ + 1))" 89 90 tc filter del dev $swp1 ingress pref 2 handle 102 flower 91 (( occ + 1 == $(tc_police_occ_get) )) 92 check_err $? "Got occupancy $(tc_police_occ_get), expected $((occ + 1))" 93 94 tc filter del dev $swp1 ingress pref 1 handle 101 flower 95 (( occ == $(tc_police_occ_get) )) 96 check_err $? "Got occupancy $(tc_police_occ_get), expected $occ" 97 98 log_test "tc police occupancy" 99 } 100 101 trap cleanup EXIT 102 103 setup_prepare 104 setup_wait 105 106 tests_run 107 108 exit $EXIT_STATUS
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.