File Index
Files and directories
Sign in
FILE

port_range_occ.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/mlxsw/port_range_occ.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3#
  4# Test that filters that match on the same port range, but with different
  5# combination of IPv4/IPv6 and TCP/UDP all use the same port range register by
  6# observing port range registers' occupancy via devlink-resource.
  7
  8lib_dir=$(dirname $0)/../../../net/forwarding
  9
 10ALL_TESTS="
 11	port_range_occ_test
 12"
 13NUM_NETIFS=2
 14source $lib_dir/lib.sh
 15source $lib_dir/devlink_lib.sh
 16
 17h1_create()
 18{
 19	simple_if_init $h1
 20}
 21
 22h1_destroy()
 23{
 24	simple_if_fini $h1
 25}
 26
 27switch_create()
 28{
 29	simple_if_init $swp1
 30	tc qdisc add dev $swp1 clsact
 31}
 32
 33switch_destroy()
 34{
 35	tc qdisc del dev $swp1 clsact
 36	simple_if_fini $swp1
 37}
 38
 39setup_prepare()
 40{
 41	h1=${NETIFS[p1]}
 42	swp1=${NETIFS[p2]}
 43
 44	vrf_prepare
 45
 46	h1_create
 47	switch_create
 48}
 49
 50cleanup()
 51{
 52	pre_cleanup
 53
 54	switch_destroy
 55	h1_destroy
 56
 57	vrf_cleanup
 58}
 59
 60port_range_occ_get()
 61{
 62	devlink_resource_occ_get port_range_registers
 63}
 64
 65port_range_occ_test()
 66{
 67	RET=0
 68
 69	local occ=$(port_range_occ_get)
 70
 71	# Two port range registers are used, for source and destination port
 72	# 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 pass
 76	(( 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 pass
 82	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 pass
 85	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 pass
 88	(( 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 flower
 92	tc filter del dev $swp1 ingress pref 2 handle 103 flower
 93	tc filter del dev $swp1 ingress pref 1 handle 102 flower
 94	(( 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 flower
 98	(( 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 EXIT
105
106setup_prepare
107setup_wait
108
109tests_run
110
111exit $EXIT_STATUS
~/ Read-only file preview.