xref: /openbmc/linux/tools/testing/selftests/drivers/net/mlxsw/tc_restrictions.sh (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1b886dea3SJiri Pirko#!/bin/bash
2b886dea3SJiri Pirko# SPDX-License-Identifier: GPL-2.0
3b886dea3SJiri Pirko
4b886dea3SJiri Pirkolib_dir=$(dirname $0)/../../../net/forwarding
5b886dea3SJiri Pirko
6b886dea3SJiri PirkoALL_TESTS="
7b886dea3SJiri Pirko	shared_block_drop_test
8b886dea3SJiri Pirko	egress_redirect_test
9b886dea3SJiri Pirko	multi_mirror_test
10240fe734SJiri Pirko	matchall_sample_egress_test
11aa743112SJiri Pirko	matchall_mirror_behind_flower_ingress_test
12aa743112SJiri Pirko	matchall_sample_behind_flower_ingress_test
13aa743112SJiri Pirko	matchall_mirror_behind_flower_egress_test
14c3572a0bSIdo Schimmel	matchall_proto_match_test
15cb12d176SIdo Schimmel	police_limits_test
16cb12d176SIdo Schimmel	multi_police_test
17b886dea3SJiri Pirko"
18b886dea3SJiri PirkoNUM_NETIFS=2
19b886dea3SJiri Pirko
20b886dea3SJiri Pirkosource $lib_dir/tc_common.sh
21b886dea3SJiri Pirkosource $lib_dir/lib.sh
220f967d9eSIdo Schimmelsource $lib_dir/devlink_lib.sh
23*b8bfafe4SPetr Machatasource mlxsw_lib.sh
24b886dea3SJiri Pirko
25b886dea3SJiri Pirkoswitch_create()
26b886dea3SJiri Pirko{
27b886dea3SJiri Pirko	simple_if_init $swp1 192.0.2.1/24
28b886dea3SJiri Pirko	simple_if_init $swp2 192.0.2.2/24
29b886dea3SJiri Pirko}
30b886dea3SJiri Pirko
31b886dea3SJiri Pirkoswitch_destroy()
32b886dea3SJiri Pirko{
33b886dea3SJiri Pirko	simple_if_fini $swp2 192.0.2.2/24
34b886dea3SJiri Pirko	simple_if_fini $swp1 192.0.2.1/24
35b886dea3SJiri Pirko}
36b886dea3SJiri Pirko
37b886dea3SJiri Pirkoshared_block_drop_test()
38b886dea3SJiri Pirko{
39b886dea3SJiri Pirko	RET=0
40b886dea3SJiri Pirko
41b886dea3SJiri Pirko	# It is forbidden in mlxsw driver to have mixed-bound
42b886dea3SJiri Pirko	# shared block with a drop rule.
43b886dea3SJiri Pirko
44b886dea3SJiri Pirko	tc qdisc add dev $swp1 ingress_block 22 clsact
45b886dea3SJiri Pirko	check_err $? "Failed to create clsact with ingress block"
46b886dea3SJiri Pirko
47b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
48b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
49b886dea3SJiri Pirko	check_err $? "Failed to add drop rule to ingress bound block"
50b886dea3SJiri Pirko
51b886dea3SJiri Pirko	tc qdisc add dev $swp2 ingress_block 22 clsact
52b886dea3SJiri Pirko	check_err $? "Failed to create another clsact with ingress shared block"
53b886dea3SJiri Pirko
54b886dea3SJiri Pirko	tc qdisc del dev $swp2 clsact
55b886dea3SJiri Pirko
56b886dea3SJiri Pirko	tc qdisc add dev $swp2 egress_block 22 clsact
57b886dea3SJiri Pirko	check_fail $? "Incorrect success to create another clsact with egress shared block"
58b886dea3SJiri Pirko
59b886dea3SJiri Pirko	tc filter del block 22 protocol ip pref 1 handle 101 flower
60b886dea3SJiri Pirko
61b886dea3SJiri Pirko	tc qdisc add dev $swp2 egress_block 22 clsact
62b886dea3SJiri Pirko	check_err $? "Failed to create another clsact with egress shared block after blocker drop rule removed"
63b886dea3SJiri Pirko
64b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
65b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
66b886dea3SJiri Pirko	check_fail $? "Incorrect success to add drop rule to mixed bound block"
67b886dea3SJiri Pirko
68b886dea3SJiri Pirko	tc qdisc del dev $swp1 clsact
69b886dea3SJiri Pirko
70b886dea3SJiri Pirko	tc qdisc add dev $swp1 egress_block 22 clsact
71b886dea3SJiri Pirko	check_err $? "Failed to create another clsact with egress shared block"
72b886dea3SJiri Pirko
73b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
74b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
75b886dea3SJiri Pirko	check_err $? "Failed to add drop rule to egress bound shared block"
76b886dea3SJiri Pirko
77b886dea3SJiri Pirko	tc filter del block 22 protocol ip pref 1 handle 101 flower
78b886dea3SJiri Pirko
79b886dea3SJiri Pirko	tc qdisc del dev $swp2 clsact
80b886dea3SJiri Pirko	tc qdisc del dev $swp1 clsact
81b886dea3SJiri Pirko
82b886dea3SJiri Pirko	log_test "shared block drop"
83b886dea3SJiri Pirko}
84b886dea3SJiri Pirko
85b886dea3SJiri Pirkoegress_redirect_test()
86b886dea3SJiri Pirko{
87b886dea3SJiri Pirko	RET=0
88b886dea3SJiri Pirko
89b886dea3SJiri Pirko	# It is forbidden in mlxsw driver to have mirred redirect on
90b886dea3SJiri Pirko	# egress-bound block.
91b886dea3SJiri Pirko
92b886dea3SJiri Pirko	tc qdisc add dev $swp1 ingress_block 22 clsact
93b886dea3SJiri Pirko	check_err $? "Failed to create clsact with ingress block"
94b886dea3SJiri Pirko
95b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
96b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 \
97b886dea3SJiri Pirko		action mirred egress redirect dev $swp2
98b886dea3SJiri Pirko	check_err $? "Failed to add redirect rule to ingress bound block"
99b886dea3SJiri Pirko
100b886dea3SJiri Pirko	tc qdisc add dev $swp2 ingress_block 22 clsact
101b886dea3SJiri Pirko	check_err $? "Failed to create another clsact with ingress shared block"
102b886dea3SJiri Pirko
103b886dea3SJiri Pirko	tc qdisc del dev $swp2 clsact
104b886dea3SJiri Pirko
105b886dea3SJiri Pirko	tc qdisc add dev $swp2 egress_block 22 clsact
106b886dea3SJiri Pirko	check_fail $? "Incorrect success to create another clsact with egress shared block"
107b886dea3SJiri Pirko
108b886dea3SJiri Pirko	tc filter del block 22 protocol ip pref 1 handle 101 flower
109b886dea3SJiri Pirko
110b886dea3SJiri Pirko	tc qdisc add dev $swp2 egress_block 22 clsact
111b886dea3SJiri Pirko	check_err $? "Failed to create another clsact with egress shared block after blocker redirect rule removed"
112b886dea3SJiri Pirko
113b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
114b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 \
115b886dea3SJiri Pirko		action mirred egress redirect dev $swp2
116b886dea3SJiri Pirko	check_fail $? "Incorrect success to add redirect rule to mixed bound block"
117b886dea3SJiri Pirko
118b886dea3SJiri Pirko	tc qdisc del dev $swp1 clsact
119b886dea3SJiri Pirko
120b886dea3SJiri Pirko	tc qdisc add dev $swp1 egress_block 22 clsact
121b886dea3SJiri Pirko	check_err $? "Failed to create another clsact with egress shared block"
122b886dea3SJiri Pirko
123b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
124b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 \
125b886dea3SJiri Pirko		action mirred egress redirect dev $swp2
126b886dea3SJiri Pirko	check_fail $? "Incorrect success to add redirect rule to egress bound shared block"
127b886dea3SJiri Pirko
128b886dea3SJiri Pirko	tc qdisc del dev $swp2 clsact
129b886dea3SJiri Pirko
130b886dea3SJiri Pirko	tc filter add block 22 protocol ip pref 1 handle 101 flower \
131b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 \
132b886dea3SJiri Pirko		action mirred egress redirect dev $swp2
133b886dea3SJiri Pirko	check_fail $? "Incorrect success to add redirect rule to egress bound block"
134b886dea3SJiri Pirko
135b886dea3SJiri Pirko	tc qdisc del dev $swp1 clsact
136b886dea3SJiri Pirko
137b886dea3SJiri Pirko	log_test "shared block drop"
138b886dea3SJiri Pirko}
139b886dea3SJiri Pirko
140b886dea3SJiri Pirkomulti_mirror_test()
141b886dea3SJiri Pirko{
142b886dea3SJiri Pirko	RET=0
143b886dea3SJiri Pirko
144b886dea3SJiri Pirko	# It is forbidden in mlxsw driver to have multiple mirror
145b886dea3SJiri Pirko	# actions in a single rule.
146b886dea3SJiri Pirko
147b886dea3SJiri Pirko	tc qdisc add dev $swp1 clsact
148b886dea3SJiri Pirko
149b886dea3SJiri Pirko	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
150b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 \
151b886dea3SJiri Pirko		action mirred egress mirror dev $swp2
152b886dea3SJiri Pirko	check_err $? "Failed to add rule with single mirror action"
153b886dea3SJiri Pirko
154b886dea3SJiri Pirko	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
155b886dea3SJiri Pirko
156b886dea3SJiri Pirko	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
157b886dea3SJiri Pirko		skip_sw dst_ip 192.0.2.2 \
158b886dea3SJiri Pirko		action mirred egress mirror dev $swp2 \
159b886dea3SJiri Pirko		action mirred egress mirror dev $swp1
160b886dea3SJiri Pirko	check_fail $? "Incorrect success to add rule with two mirror actions"
161b886dea3SJiri Pirko
162b886dea3SJiri Pirko	tc qdisc del dev $swp1 clsact
163b886dea3SJiri Pirko
164b886dea3SJiri Pirko	log_test "multi mirror"
165b886dea3SJiri Pirko}
166b886dea3SJiri Pirko
167240fe734SJiri Pirkomatchall_sample_egress_test()
168240fe734SJiri Pirko{
169240fe734SJiri Pirko	RET=0
170240fe734SJiri Pirko
171240fe734SJiri Pirko	# It is forbidden in mlxsw driver to have matchall with sample action
1720f967d9eSIdo Schimmel	# bound on egress. Spectrum-1 specific restriction
173*b8bfafe4SPetr Machata	mlxsw_only_on_spectrum 1 || return
174240fe734SJiri Pirko
175240fe734SJiri Pirko	tc qdisc add dev $swp1 clsact
176240fe734SJiri Pirko
177240fe734SJiri Pirko	tc filter add dev $swp1 ingress protocol all pref 1 handle 101 \
178240fe734SJiri Pirko		matchall skip_sw action sample rate 100 group 1
179240fe734SJiri Pirko	check_err $? "Failed to add rule with sample action on ingress"
180240fe734SJiri Pirko
181240fe734SJiri Pirko	tc filter del dev $swp1 ingress protocol all pref 1 handle 101 matchall
182240fe734SJiri Pirko
183240fe734SJiri Pirko	tc filter add dev $swp1 egress protocol all pref 1 handle 101 \
184240fe734SJiri Pirko		matchall skip_sw action sample rate 100 group 1
185240fe734SJiri Pirko	check_fail $? "Incorrect success to add rule with sample action on egress"
186240fe734SJiri Pirko
187240fe734SJiri Pirko	tc qdisc del dev $swp1 clsact
188240fe734SJiri Pirko
189240fe734SJiri Pirko	log_test "matchall sample egress"
190240fe734SJiri Pirko}
191240fe734SJiri Pirko
192aa743112SJiri Pirkomatchall_behind_flower_ingress_test()
193aa743112SJiri Pirko{
194aa743112SJiri Pirko	local action=$1
195aa743112SJiri Pirko	local action_args=$2
196aa743112SJiri Pirko
197aa743112SJiri Pirko	RET=0
198aa743112SJiri Pirko
199aa743112SJiri Pirko	# On ingress, all matchall-mirror and matchall-sample
200aa743112SJiri Pirko	# rules have to be in front of the flower rules
201aa743112SJiri Pirko
202aa743112SJiri Pirko	tc qdisc add dev $swp1 clsact
203aa743112SJiri Pirko
204aa743112SJiri Pirko	tc filter add dev $swp1 ingress protocol ip pref 10 handle 101 flower \
205aa743112SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
206aa743112SJiri Pirko
207aa743112SJiri Pirko	tc filter add dev $swp1 ingress protocol all pref 9 handle 102 \
208aa743112SJiri Pirko		matchall skip_sw action $action_args
209aa743112SJiri Pirko	check_err $? "Failed to add matchall rule in front of a flower rule"
210aa743112SJiri Pirko
211aa743112SJiri Pirko	tc filter del dev $swp1 ingress protocol all pref 9 handle 102 matchall
212aa743112SJiri Pirko
213aa743112SJiri Pirko	tc filter add dev $swp1 ingress protocol all pref 11 handle 102 \
214aa743112SJiri Pirko		matchall skip_sw action $action_args
215aa743112SJiri Pirko	check_fail $? "Incorrect success to add matchall rule behind a flower rule"
216aa743112SJiri Pirko
217aa743112SJiri Pirko	tc filter del dev $swp1 ingress protocol ip pref 10 handle 101 flower
218aa743112SJiri Pirko
219aa743112SJiri Pirko	tc filter add dev $swp1 ingress protocol all pref 9 handle 102 \
220aa743112SJiri Pirko		matchall skip_sw action $action_args
221aa743112SJiri Pirko
222aa743112SJiri Pirko	tc filter add dev $swp1 ingress protocol ip pref 10 handle 101 flower \
223aa743112SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
224aa743112SJiri Pirko	check_err $? "Failed to add flower rule behind a matchall rule"
225aa743112SJiri Pirko
226aa743112SJiri Pirko	tc filter del dev $swp1 ingress protocol ip pref 10 handle 101 flower
227aa743112SJiri Pirko
228aa743112SJiri Pirko	tc filter add dev $swp1 ingress protocol ip pref 8 handle 101 flower \
229aa743112SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
230aa743112SJiri Pirko	check_fail $? "Incorrect success to add flower rule in front of a matchall rule"
231aa743112SJiri Pirko
232aa743112SJiri Pirko	tc qdisc del dev $swp1 clsact
233aa743112SJiri Pirko
234aa743112SJiri Pirko	log_test "matchall $action flower ingress"
235aa743112SJiri Pirko}
236aa743112SJiri Pirko
237aa743112SJiri Pirkomatchall_mirror_behind_flower_ingress_test()
238aa743112SJiri Pirko{
239aa743112SJiri Pirko	matchall_behind_flower_ingress_test "mirror" "mirred egress mirror dev $swp2"
240aa743112SJiri Pirko}
241aa743112SJiri Pirko
242aa743112SJiri Pirkomatchall_sample_behind_flower_ingress_test()
243aa743112SJiri Pirko{
244aa743112SJiri Pirko	matchall_behind_flower_ingress_test "sample" "sample rate 100 group 1"
245aa743112SJiri Pirko}
246aa743112SJiri Pirko
247aa743112SJiri Pirkomatchall_behind_flower_egress_test()
248aa743112SJiri Pirko{
249aa743112SJiri Pirko	local action=$1
250aa743112SJiri Pirko	local action_args=$2
251aa743112SJiri Pirko
252aa743112SJiri Pirko	RET=0
253aa743112SJiri Pirko
254aa743112SJiri Pirko	# On egress, all matchall-mirror rules have to be behind the flower rules
255aa743112SJiri Pirko
256aa743112SJiri Pirko	tc qdisc add dev $swp1 clsact
257aa743112SJiri Pirko
258aa743112SJiri Pirko	tc filter add dev $swp1 egress protocol ip pref 10 handle 101 flower \
259aa743112SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
260aa743112SJiri Pirko
261aa743112SJiri Pirko	tc filter add dev $swp1 egress protocol all pref 11 handle 102 \
262aa743112SJiri Pirko		matchall skip_sw action $action_args
263aa743112SJiri Pirko	check_err $? "Failed to add matchall rule in front of a flower rule"
264aa743112SJiri Pirko
265aa743112SJiri Pirko	tc filter del dev $swp1 egress protocol all pref 11 handle 102 matchall
266aa743112SJiri Pirko
267aa743112SJiri Pirko	tc filter add dev $swp1 egress protocol all pref 9 handle 102 \
268aa743112SJiri Pirko		matchall skip_sw action $action_args
269aa743112SJiri Pirko	check_fail $? "Incorrect success to add matchall rule behind a flower rule"
270aa743112SJiri Pirko
271aa743112SJiri Pirko	tc filter del dev $swp1 egress protocol ip pref 10 handle 101 flower
272aa743112SJiri Pirko
273aa743112SJiri Pirko	tc filter add dev $swp1 egress protocol all pref 11 handle 102 \
274aa743112SJiri Pirko		matchall skip_sw action $action_args
275aa743112SJiri Pirko
276aa743112SJiri Pirko	tc filter add dev $swp1 egress protocol ip pref 10 handle 101 flower \
277aa743112SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
278aa743112SJiri Pirko	check_err $? "Failed to add flower rule behind a matchall rule"
279aa743112SJiri Pirko
280aa743112SJiri Pirko	tc filter del dev $swp1 egress protocol ip pref 10 handle 101 flower
281aa743112SJiri Pirko
282aa743112SJiri Pirko	tc filter add dev $swp1 egress protocol ip pref 12 handle 101 flower \
283aa743112SJiri Pirko		skip_sw dst_ip 192.0.2.2 action drop
284aa743112SJiri Pirko	check_fail $? "Incorrect success to add flower rule in front of a matchall rule"
285aa743112SJiri Pirko
286aa743112SJiri Pirko	tc qdisc del dev $swp1 clsact
287aa743112SJiri Pirko
288aa743112SJiri Pirko	log_test "matchall $action flower egress"
289aa743112SJiri Pirko}
290aa743112SJiri Pirko
291aa743112SJiri Pirkomatchall_mirror_behind_flower_egress_test()
292aa743112SJiri Pirko{
293aa743112SJiri Pirko	matchall_behind_flower_egress_test "mirror" "mirred egress mirror dev $swp2"
294aa743112SJiri Pirko}
295aa743112SJiri Pirko
296c3572a0bSIdo Schimmelmatchall_proto_match_test()
297c3572a0bSIdo Schimmel{
298c3572a0bSIdo Schimmel	RET=0
299c3572a0bSIdo Schimmel
300c3572a0bSIdo Schimmel	tc qdisc add dev $swp1 clsact
301c3572a0bSIdo Schimmel
302c3572a0bSIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
303c3572a0bSIdo Schimmel		matchall skip_sw \
304c3572a0bSIdo Schimmel		action sample group 1 rate 100
305c3572a0bSIdo Schimmel	check_fail $? "Incorrect success to add matchall rule with protocol match"
306c3572a0bSIdo Schimmel
307c3572a0bSIdo Schimmel	tc qdisc del dev $swp1 clsact
308c3572a0bSIdo Schimmel
309c3572a0bSIdo Schimmel	log_test "matchall protocol match"
310c3572a0bSIdo Schimmel}
311c3572a0bSIdo Schimmel
312cb12d176SIdo Schimmelpolice_limits_test()
313cb12d176SIdo Schimmel{
314cb12d176SIdo Schimmel	RET=0
315cb12d176SIdo Schimmel
316cb12d176SIdo Schimmel	tc qdisc add dev $swp1 clsact
317cb12d176SIdo Schimmel
318cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
319cb12d176SIdo Schimmel		flower skip_sw \
320cb12d176SIdo Schimmel		action police rate 0.5kbit burst 1m conform-exceed drop/ok
321cb12d176SIdo Schimmel	check_fail $? "Incorrect success to add police action with too low rate"
322cb12d176SIdo Schimmel
323cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
324cb12d176SIdo Schimmel		flower skip_sw \
325cb12d176SIdo Schimmel		action police rate 2.5tbit burst 1g conform-exceed drop/ok
326cb12d176SIdo Schimmel	check_fail $? "Incorrect success to add police action with too high rate"
327cb12d176SIdo Schimmel
328cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
329cb12d176SIdo Schimmel		flower skip_sw \
330cb12d176SIdo Schimmel		action police rate 1.5kbit burst 1m conform-exceed drop/ok
331cb12d176SIdo Schimmel	check_err $? "Failed to add police action with low rate"
332cb12d176SIdo Schimmel
333cb12d176SIdo Schimmel	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
334cb12d176SIdo Schimmel
335cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
336cb12d176SIdo Schimmel		flower skip_sw \
337cb12d176SIdo Schimmel		action police rate 1.9tbit burst 1g conform-exceed drop/ok
338cb12d176SIdo Schimmel	check_err $? "Failed to add police action with high rate"
339cb12d176SIdo Schimmel
340cb12d176SIdo Schimmel	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
341cb12d176SIdo Schimmel
342cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
343cb12d176SIdo Schimmel		flower skip_sw \
344cb12d176SIdo Schimmel		action police rate 1.5kbit burst 512b conform-exceed drop/ok
345cb12d176SIdo Schimmel	check_fail $? "Incorrect success to add police action with too low burst size"
346cb12d176SIdo Schimmel
347cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress pref 1 proto ip handle 101 \
348cb12d176SIdo Schimmel		flower skip_sw \
349cb12d176SIdo Schimmel		action police rate 1.5kbit burst 2k conform-exceed drop/ok
350cb12d176SIdo Schimmel	check_err $? "Failed to add police action with low burst size"
351cb12d176SIdo Schimmel
352cb12d176SIdo Schimmel	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
353cb12d176SIdo Schimmel
354cb12d176SIdo Schimmel	tc qdisc del dev $swp1 clsact
355cb12d176SIdo Schimmel
356cb12d176SIdo Schimmel	log_test "police rate and burst limits"
357cb12d176SIdo Schimmel}
358cb12d176SIdo Schimmel
359cb12d176SIdo Schimmelmulti_police_test()
360cb12d176SIdo Schimmel{
361cb12d176SIdo Schimmel	RET=0
362cb12d176SIdo Schimmel
363cb12d176SIdo Schimmel	# It is forbidden in mlxsw driver to have multiple police
364cb12d176SIdo Schimmel	# actions in a single rule.
365cb12d176SIdo Schimmel
366cb12d176SIdo Schimmel	tc qdisc add dev $swp1 clsact
367cb12d176SIdo Schimmel
368cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 \
369cb12d176SIdo Schimmel		flower skip_sw \
370cb12d176SIdo Schimmel		action police rate 100mbit burst 100k conform-exceed drop/ok
371cb12d176SIdo Schimmel	check_err $? "Failed to add rule with single police action"
372cb12d176SIdo Schimmel
373cb12d176SIdo Schimmel	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
374cb12d176SIdo Schimmel
375cb12d176SIdo Schimmel	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 \
376cb12d176SIdo Schimmel		flower skip_sw \
377cb12d176SIdo Schimmel		action police rate 100mbit burst 100k conform-exceed drop/pipe \
378cb12d176SIdo Schimmel		action police rate 200mbit burst 200k conform-exceed drop/ok
379cb12d176SIdo Schimmel	check_fail $? "Incorrect success to add rule with two police actions"
380cb12d176SIdo Schimmel
381cb12d176SIdo Schimmel	tc qdisc del dev $swp1 clsact
382cb12d176SIdo Schimmel
383cb12d176SIdo Schimmel	log_test "multi police"
384cb12d176SIdo Schimmel}
385cb12d176SIdo Schimmel
386b886dea3SJiri Pirkosetup_prepare()
387b886dea3SJiri Pirko{
388b886dea3SJiri Pirko	swp1=${NETIFS[p1]}
389b886dea3SJiri Pirko	swp2=${NETIFS[p2]}
390b886dea3SJiri Pirko
391b886dea3SJiri Pirko	vrf_prepare
392b886dea3SJiri Pirko
393b886dea3SJiri Pirko	switch_create
394b886dea3SJiri Pirko}
395b886dea3SJiri Pirko
396b886dea3SJiri Pirkocleanup()
397b886dea3SJiri Pirko{
398b886dea3SJiri Pirko	pre_cleanup
399b886dea3SJiri Pirko
400b886dea3SJiri Pirko	switch_destroy
401b886dea3SJiri Pirko
402b886dea3SJiri Pirko	vrf_cleanup
403b886dea3SJiri Pirko}
404b886dea3SJiri Pirko
405b886dea3SJiri Pirkocheck_tc_shblock_support
406b886dea3SJiri Pirko
407b886dea3SJiri Pirkotrap cleanup EXIT
408b886dea3SJiri Pirko
409b886dea3SJiri Pirkosetup_prepare
410b886dea3SJiri Pirkosetup_wait
411b886dea3SJiri Pirko
412b886dea3SJiri Pirkotests_run
413b886dea3SJiri Pirko
414b886dea3SJiri Pirkoexit $EXIT_STATUS
415