| # SPDX-License-Identifier: GPL-2.0 |
| |
| PORT_RANGE_NUM_NETIFS=2 |
| |
| port_range_h1_create() |
| { |
| simple_if_init $h1 |
| } |
| |
| port_range_h1_destroy() |
| { |
| simple_if_fini $h1 |
| } |
| |
| port_range_switch_create() |
| { |
| simple_if_init $swp1 |
| tc qdisc add dev $swp1 clsact |
| } |
| |
| port_range_switch_destroy() |
| { |
| tc qdisc del dev $swp1 clsact |
| simple_if_fini $swp1 |
| } |
| |
| port_range_rules_create() |
| { |
| local count=$1; shift |
| local should_fail=$1; shift |
| local batch_file="$(mktemp)" |
| |
| for ((i = 0; i < count; ++i)); do |
| cat >> $batch_file <<-EOF |
| filter add dev $swp1 ingress \ |
| prot ipv4 \ |
| pref 1000 \ |
| flower skip_sw \ |
| ip_proto udp dst_port 1-$((100 + i)) \ |
| action pass |
| EOF |
| done |
| |
| tc -b $batch_file |
| check_err_fail $should_fail $? "Rule insertion" |
| |
| rm -f $batch_file |
| } |
| |
| __port_range_test() |
| { |
| local count=$1; shift |
| local should_fail=$1; shift |
| |
| port_range_rules_create $count $should_fail |
| |
| offload_count=$(tc -j filter show dev $swp1 ingress | |
| jq "[.[] | select(.options.in_hw == true)] | length") |
| ((offload_count == count)) |
| check_err_fail $should_fail $? "port range offload count" |
| } |
| |
| port_range_test() |
| { |
| local count=$1; shift |
| local should_fail=$1; shift |
| |
| if ! tc_offload_check $PORT_RANGE_NUM_NETIFS; then |
| check_err 1 "Could not test offloaded functionality" |
| return |
| fi |
| |
| __port_range_test $count $should_fail |
| } |
| |
| port_range_setup_prepare() |
| { |
| h1=${NETIFS[p1]} |
| swp1=${NETIFS[p2]} |
| |
| vrf_prepare |
| |
| port_range_h1_create |
| port_range_switch_create |
| } |
| |
| port_range_cleanup() |
| { |
| pre_cleanup |
| |
| port_range_switch_destroy |
| port_range_h1_destroy |
| |
| vrf_cleanup |
| } |