Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: tc: add ingress device matching support

Extend tc_flower to test plain ingress device matching and also
tc_shblock to test ingress device matching on shared block.
Add new tc_flower_router.sh where ingress device matching on egress
(after routing) is done.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jiri Pirko and committed by
David S. Miller
dcc5e1f9 0c1f391d

+225 -2
+25 -1
tools/testing/selftests/net/forwarding/tc_flower.sh
··· 3 3 4 4 ALL_TESTS="match_dst_mac_test match_src_mac_test match_dst_ip_test \ 5 5 match_src_ip_test match_ip_flags_test match_pcp_test match_vlan_test \ 6 - match_ip_tos_test" 6 + match_ip_tos_test match_indev_test" 7 7 NUM_NETIFS=2 8 8 source tc_common.sh 9 9 source lib.sh ··· 308 308 tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower 309 309 310 310 log_test "ip_tos match ($tcflags)" 311 + } 312 + 313 + match_indev_test() 314 + { 315 + RET=0 316 + 317 + tc filter add dev $h2 ingress protocol ip pref 1 handle 101 flower \ 318 + $tcflags indev $h1 dst_mac $h2mac action drop 319 + tc filter add dev $h2 ingress protocol ip pref 2 handle 102 flower \ 320 + $tcflags indev $h2 dst_mac $h2mac action drop 321 + 322 + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \ 323 + -t ip -q 324 + 325 + tc_check_packets "dev $h2 ingress" 101 1 326 + check_fail $? "Matched on a wrong filter" 327 + 328 + tc_check_packets "dev $h2 ingress" 102 1 329 + check_err $? "Did not match on correct filter" 330 + 331 + tc filter del dev $h2 ingress protocol ip pref 2 handle 102 flower 332 + tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower 333 + 334 + log_test "indev match ($tcflags)" 311 335 } 312 336 313 337 setup_prepare()
+172
tools/testing/selftests/net/forwarding/tc_flower_router.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + ALL_TESTS="match_indev_egress_test" 5 + NUM_NETIFS=6 6 + source tc_common.sh 7 + source lib.sh 8 + 9 + h1_create() 10 + { 11 + simple_if_init $h1 192.0.1.1/24 12 + 13 + ip route add 192.0.2.0/24 vrf v$h1 nexthop via 192.0.1.2 14 + ip route add 192.0.3.0/24 vrf v$h1 nexthop via 192.0.1.2 15 + } 16 + 17 + h1_destroy() 18 + { 19 + ip route del 192.0.3.0/24 vrf v$h1 20 + ip route del 192.0.2.0/24 vrf v$h1 21 + 22 + simple_if_fini $h1 192.0.1.1/24 23 + } 24 + 25 + h2_create() 26 + { 27 + simple_if_init $h2 192.0.2.1/24 28 + 29 + ip route add 192.0.1.0/24 vrf v$h2 nexthop via 192.0.2.2 30 + ip route add 192.0.3.0/24 vrf v$h2 nexthop via 192.0.2.2 31 + } 32 + 33 + h2_destroy() 34 + { 35 + ip route del 192.0.3.0/24 vrf v$h2 36 + ip route del 192.0.1.0/24 vrf v$h2 37 + 38 + simple_if_fini $h2 192.0.2.1/24 39 + } 40 + 41 + h3_create() 42 + { 43 + simple_if_init $h3 192.0.3.1/24 44 + 45 + ip route add 192.0.1.0/24 vrf v$h3 nexthop via 192.0.3.2 46 + ip route add 192.0.2.0/24 vrf v$h3 nexthop via 192.0.3.2 47 + } 48 + 49 + h3_destroy() 50 + { 51 + ip route del 192.0.2.0/24 vrf v$h3 52 + ip route del 192.0.1.0/24 vrf v$h3 53 + 54 + simple_if_fini $h3 192.0.3.1/24 55 + } 56 + 57 + 58 + router_create() 59 + { 60 + ip link set dev $rp1 up 61 + ip link set dev $rp2 up 62 + ip link set dev $rp3 up 63 + 64 + tc qdisc add dev $rp3 clsact 65 + 66 + ip address add 192.0.1.2/24 dev $rp1 67 + ip address add 192.0.2.2/24 dev $rp2 68 + ip address add 192.0.3.2/24 dev $rp3 69 + } 70 + 71 + router_destroy() 72 + { 73 + ip address del 192.0.3.2/24 dev $rp3 74 + ip address del 192.0.2.2/24 dev $rp2 75 + ip address del 192.0.1.2/24 dev $rp1 76 + 77 + tc qdisc del dev $rp3 clsact 78 + 79 + ip link set dev $rp3 down 80 + ip link set dev $rp2 down 81 + ip link set dev $rp1 down 82 + } 83 + 84 + match_indev_egress_test() 85 + { 86 + RET=0 87 + 88 + tc filter add dev $rp3 egress protocol ip pref 1 handle 101 flower \ 89 + $tcflags indev $rp1 dst_ip 192.0.3.1 action drop 90 + tc filter add dev $rp3 egress protocol ip pref 2 handle 102 flower \ 91 + $tcflags indev $rp2 dst_ip 192.0.3.1 action drop 92 + 93 + $MZ $h1 -c 1 -p 64 -a $h1mac -b $rp1mac -A 192.0.1.1 -B 192.0.3.1 \ 94 + -t ip -q 95 + 96 + tc_check_packets "dev $rp3 egress" 102 1 97 + check_fail $? "Matched on a wrong filter" 98 + 99 + tc_check_packets "dev $rp3 egress" 101 1 100 + check_err $? "Did not match on correct filter" 101 + 102 + $MZ $h2 -c 1 -p 64 -a $h2mac -b $rp2mac -A 192.0.2.1 -B 192.0.3.1 \ 103 + -t ip -q 104 + 105 + tc_check_packets "dev $rp3 egress" 101 2 106 + check_fail $? "Matched on a wrong filter" 107 + 108 + tc_check_packets "dev $rp3 egress" 102 1 109 + check_err $? "Did not match on correct filter" 110 + 111 + tc filter del dev $rp3 egress protocol ip pref 2 handle 102 flower 112 + tc filter del dev $rp3 egress protocol ip pref 1 handle 101 flower 113 + 114 + log_test "indev egress match ($tcflags)" 115 + } 116 + 117 + setup_prepare() 118 + { 119 + h1=${NETIFS[p1]} 120 + rp1=${NETIFS[p2]} 121 + 122 + h2=${NETIFS[p3]} 123 + rp2=${NETIFS[p4]} 124 + 125 + h3=${NETIFS[p5]} 126 + rp3=${NETIFS[p6]} 127 + 128 + h1mac=$(mac_get $h1) 129 + rp1mac=$(mac_get $rp1) 130 + h2mac=$(mac_get $h2) 131 + rp2mac=$(mac_get $rp2) 132 + 133 + vrf_prepare 134 + 135 + h1_create 136 + h2_create 137 + h3_create 138 + 139 + router_create 140 + 141 + forwarding_enable 142 + } 143 + 144 + cleanup() 145 + { 146 + pre_cleanup 147 + 148 + forwarding_restore 149 + 150 + router_destroy 151 + 152 + h3_destroy 153 + h2_destroy 154 + h1_destroy 155 + 156 + vrf_cleanup 157 + } 158 + 159 + trap cleanup EXIT 160 + 161 + setup_prepare 162 + setup_wait 163 + 164 + tc_offload_check 165 + if [[ $? -ne 0 ]]; then 166 + log_info "Could not test offloaded functionality" 167 + else 168 + tcflags="skip_sw" 169 + tests_run 170 + fi 171 + 172 + exit $EXIT_STATUS
+28 -1
tools/testing/selftests/net/forwarding/tc_shblocks.sh
··· 1 1 #!/bin/bash 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 - ALL_TESTS="shared_block_test" 4 + ALL_TESTS="shared_block_test match_indev_test" 5 5 NUM_NETIFS=4 6 6 source tc_common.sh 7 7 source lib.sh ··· 68 68 tc filter del block 22 protocol ip pref 1 handle 101 flower 69 69 70 70 log_test "shared block ($tcflags)" 71 + } 72 + 73 + match_indev_test() 74 + { 75 + RET=0 76 + 77 + tc filter add block 22 protocol ip pref 1 handle 101 flower \ 78 + $tcflags indev $swp1 dst_mac $swmac action drop 79 + tc filter add block 22 protocol ip pref 2 handle 102 flower \ 80 + $tcflags indev $swp2 dst_mac $swmac action drop 81 + 82 + $MZ $h1 -c 1 -p 64 -a $h1mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \ 83 + -t ip -q 84 + 85 + tc_check_packets "block 22" 101 1 86 + check_err $? "Did not match first incoming packet on a block" 87 + 88 + $MZ $h2 -c 1 -p 64 -a $h2mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \ 89 + -t ip -q 90 + 91 + tc_check_packets "block 22" 102 1 92 + check_err $? "Did not match second incoming packet on a block" 93 + 94 + tc filter del block 22 protocol ip pref 1 handle 101 flower 95 + tc filter del block 22 protocol ip pref 2 handle 102 flower 96 + 97 + log_test "indev match ($tcflags)" 71 98 } 72 99 73 100 setup_prepare()