112 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test that filters that match on the same port range, but with different5# combination of IPv4/IPv6 and TCP/UDP all use the same port range register by6# observing port range registers' occupancy via devlink-resource.7 8lib_dir=$(dirname $0)/../../../net/forwarding9 10ALL_TESTS="11 port_range_occ_test12"13NUM_NETIFS=214source $lib_dir/lib.sh15source $lib_dir/devlink_lib.sh16 17h1_create()18{19 simple_if_init $h120}21 22h1_destroy()23{24 simple_if_fini $h125}26 27switch_create()28{29 simple_if_init $swp130 tc qdisc add dev $swp1 clsact31}32 33switch_destroy()34{35 tc qdisc del dev $swp1 clsact36 simple_if_fini $swp137}38 39setup_prepare()40{41 h1=${NETIFS[p1]}42 swp1=${NETIFS[p2]}43 44 vrf_prepare45 46 h1_create47 switch_create48}49 50cleanup()51{52 pre_cleanup53 54 switch_destroy55 h1_destroy56 57 vrf_cleanup58}59 60port_range_occ_get()61{62 devlink_resource_occ_get port_range_registers63}64 65port_range_occ_test()66{67 RET=068 69 local occ=$(port_range_occ_get)70 71 # Two port range registers are used, for source and destination port72 # ranges.73 tc filter add dev $swp1 ingress pref 1 handle 101 proto ip \74 flower skip_sw ip_proto udp src_port 1-100 dst_port 1-100 \75 action pass76 (( occ + 2 == $(port_range_occ_get) ))77 check_err $? "Got occupancy $(port_range_occ_get), expected $((occ + 2))"78 79 tc filter add dev $swp1 ingress pref 1 handle 102 proto ip \80 flower skip_sw ip_proto tcp src_port 1-100 dst_port 1-100 \81 action pass82 tc filter add dev $swp1 ingress pref 2 handle 103 proto ipv6 \83 flower skip_sw ip_proto udp src_port 1-100 dst_port 1-100 \84 action pass85 tc filter add dev $swp1 ingress pref 2 handle 104 proto ipv6 \86 flower skip_sw ip_proto tcp src_port 1-100 dst_port 1-100 \87 action pass88 (( occ + 2 == $(port_range_occ_get) ))89 check_err $? "Got occupancy $(port_range_occ_get), expected $((occ + 2))"90 91 tc filter del dev $swp1 ingress pref 2 handle 104 flower92 tc filter del dev $swp1 ingress pref 2 handle 103 flower93 tc filter del dev $swp1 ingress pref 1 handle 102 flower94 (( occ + 2 == $(port_range_occ_get) ))95 check_err $? "Got occupancy $(port_range_occ_get), expected $((occ + 2))"96 97 tc filter del dev $swp1 ingress pref 1 handle 101 flower98 (( occ == $(port_range_occ_get) ))99 check_err $? "Got occupancy $(port_range_occ_get), expected $occ"100 101 log_test "port range occupancy"102}103 104trap cleanup EXIT105 106setup_prepare107setup_wait108 109tests_run110 111exit $EXIT_STATUS112