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