109 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test that policers shared by different tc filters are correctly reference5# counted by observing policers' occupancy via devlink-resource.6 7lib_dir=$(dirname $0)/../../../net/forwarding8 9ALL_TESTS="10 tc_police_occ_test11"12NUM_NETIFS=213source $lib_dir/lib.sh14source $lib_dir/devlink_lib.sh15 16h1_create()17{18 simple_if_init $h119}20 21h1_destroy()22{23 simple_if_fini $h124}25 26switch_create()27{28 simple_if_init $swp129 tc qdisc add dev $swp1 clsact30}31 32switch_destroy()33{34 tc qdisc del dev $swp1 clsact35 simple_if_fini $swp136}37 38setup_prepare()39{40 h1=${NETIFS[p1]}41 swp1=${NETIFS[p2]}42 43 vrf_prepare44 45 h1_create46 switch_create47}48 49cleanup()50{51 pre_cleanup52 53 switch_destroy54 h1_destroy55 56 vrf_cleanup57}58 59tc_police_occ_get()60{61 devlink_resource_occ_get global_policers single_rate_policers62}63 64tc_police_occ_test()65{66 RET=067 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/ok73 (( 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 flower77 (( 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 1084 tc filter add dev $swp1 ingress pref 2 handle 102 proto ip \85 flower skip_sw action police index 1086 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 flower91 (( 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 flower95 (( 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 101trap cleanup EXIT102 103setup_prepare104setup_wait105 106tests_run107 108exit $EXIT_STATUS109