Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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
7lib_dir=$(dirname $0)/../../../net/forwarding
8
9ALL_TESTS="
10 tc_police_occ_test
11"
12NUM_NETIFS=2
13source $lib_dir/lib.sh
14source $lib_dir/devlink_lib.sh
15
16h1_create()
17{
18 simple_if_init $h1
19}
20
21h1_destroy()
22{
23 simple_if_fini $h1
24}
25
26switch_create()
27{
28 simple_if_init $swp1
29 tc qdisc add dev $swp1 clsact
30}
31
32switch_destroy()
33{
34 tc qdisc del dev $swp1 clsact
35 simple_if_fini $swp1
36}
37
38setup_prepare()
39{
40 h1=${NETIFS[p1]}
41 swp1=${NETIFS[p2]}
42
43 vrf_prepare
44
45 h1_create
46 switch_create
47}
48
49cleanup()
50{
51 pre_cleanup
52
53 switch_destroy
54 h1_destroy
55
56 vrf_cleanup
57}
58
59tc_police_occ_get()
60{
61 devlink_resource_occ_get global_policers single_rate_policers
62}
63
64tc_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
101trap cleanup EXIT
102
103setup_prepare
104setup_wait
105
106tests_run
107
108exit $EXIT_STATUS