Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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