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