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 8 lib_dir=$(dirname $0)/../../../net/forwarding 9 10 ALL_TESTS=" 11 port_range_occ_test 12 " 13 NUM_NETIFS=2 14 source $lib_dir/lib.sh 15 source $lib_dir/devlink_lib.sh 16 17 h1_create() 18 { 19 simple_if_init $h1 20 } 21 22 h1_destroy() 23 { 24 simple_if_fini $h1 25 } 26 27 switch_create() 28 { 29 simple_if_init $swp1 30 tc qdisc add dev $swp1 clsact 31 } 32 33 switch_destroy() 34 { 35 tc qdisc del dev $swp1 clsact 36 simple_if_fini $swp1 37 } 38 39 setup_prepare() 40 { 41 h1=${NETIFS[p1]} 42 swp1=${NETIFS[p2]} 43 44 vrf_prepare 45 46 h1_create 47 switch_create 48 } 49 50 cleanup() 51 { 52 pre_cleanup 53 54 switch_destroy 55 h1_destroy 56 57 vrf_cleanup 58 } 59 60 port_range_occ_get() 61 { 62 devlink_resource_occ_get port_range_registers 63 } 64 65 port_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 104 trap cleanup EXIT 105 106 setup_prepare 107 setup_wait 108 109 tests_run 110 111 exit $EXIT_STATUS
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.