xref: /linux/tools/testing/selftests/drivers/net/mlxsw/tc_police_occ.sh (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
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