# SPDX-License-Identifier: GPL-2.0 TC_POLICE_NUM_NETIFS=2 tc_police_h1_create() { simple_if_init $h1 } tc_police_h1_destroy() { simple_if_fini $h1 } tc_police_switch_create() { simple_if_init $swp1 tc qdisc add dev $swp1 clsact } tc_police_switch_destroy() { tc qdisc del dev $swp1 clsact simple_if_fini $swp1 } tc_police_addr() { local num=$1; shift printf "2001:db8:1::%x" $num } tc_police_rules_create() { local count=$1; shift local should_fail=$1; shift TC_POLICE_BATCH_FILE="$(mktemp)" for ((i = 0; i < count; ++i)); do cat >> $TC_POLICE_BATCH_FILE <<-EOF filter add dev $swp1 ingress \ prot ipv6 \ pref 1000 \ flower skip_sw dst_ip $(tc_police_addr $i) \ action police rate 10mbit burst 100k \ conform-exceed drop/ok EOF done tc -b $TC_POLICE_BATCH_FILE check_err_fail $should_fail $? "Rule insertion" } __tc_police_test() { local count=$1; shift local should_fail=$1; shift tc_police_rules_create $count $should_fail offload_count=$(tc filter show dev $swp1 ingress | grep in_hw | wc -l) ((offload_count == count)) check_err_fail $should_fail $? "tc police offload count" } tc_police_test() { local count=$1; shift local should_fail=$1; shift if ! tc_offload_check $TC_POLICE_NUM_NETIFS; then check_err 1 "Could not test offloaded functionality" return fi __tc_police_test $count $should_fail } tc_police_setup_prepare() { h1=${NETIFS[p1]} swp1=${NETIFS[p2]} vrf_prepare tc_police_h1_create tc_police_switch_create } tc_police_cleanup() { pre_cleanup tc_police_switch_destroy tc_police_h1_destroy vrf_cleanup }