1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4ALL_TESTS="shared_block_test match_indev_test" 5NUM_NETIFS=4 6source tc_common.sh 7source lib.sh 8 9tcflags="skip_hw" 10 11h1_create() 12{ 13 simple_if_init $h1 192.0.2.1/24 14} 15 16h1_destroy() 17{ 18 simple_if_fini $h1 192.0.2.1/24 19} 20 21h2_create() 22{ 23 simple_if_init $h2 192.0.2.1/24 24} 25 26h2_destroy() 27{ 28 simple_if_fini $h2 192.0.2.1/24 29} 30 31switch_create() 32{ 33 simple_if_init $swp1 192.0.2.2/24 34 tc qdisc add dev $swp1 ingress_block 22 egress_block 23 clsact 35 36 simple_if_init $swp2 192.0.2.2/24 37 tc qdisc add dev $swp2 ingress_block 22 egress_block 23 clsact 38} 39 40switch_destroy() 41{ 42 tc qdisc del dev $swp2 clsact 43 simple_if_fini $swp2 192.0.2.2/24 44 45 tc qdisc del dev $swp1 clsact 46 simple_if_fini $swp1 192.0.2.2/24 47} 48 49shared_block_test() 50{ 51 RET=0 52 53 tc filter add block 22 protocol ip pref 1 handle 101 flower \ 54 $tcflags dst_ip 192.0.2.2 action drop 55 56 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \ 57 -t ip -q 58 59 tc_check_packets "block 22" 101 1 60 check_err $? "Did not match first incoming packet on a block" 61 62 $MZ $h2 -c 1 -p 64 -a $h2mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \ 63 -t ip -q 64 65 tc_check_packets "block 22" 101 2 66 check_err $? "Did not match second incoming packet on a block" 67 68 tc filter del block 22 protocol ip pref 1 handle 101 flower 69 70 log_test "shared block ($tcflags)" 71} 72 73match_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)" 98} 99 100setup_prepare() 101{ 102 h1=${NETIFS[p1]} 103 swp1=${NETIFS[p2]} 104 105 swp2=${NETIFS[p3]} 106 h2=${NETIFS[p4]} 107 108 h1mac=$(mac_get $h1) 109 h2mac=$(mac_get $h2) 110 111 swmac=$(mac_get $swp1) 112 swp2origmac=$(mac_get $swp2) 113 ip link set $swp2 address $swmac 114 115 vrf_prepare 116 117 h1_create 118 h2_create 119 switch_create 120} 121 122cleanup() 123{ 124 pre_cleanup 125 126 switch_destroy 127 h2_destroy 128 h1_destroy 129 130 vrf_cleanup 131 132 ip link set $swp2 address $swp2origmac 133} 134 135check_tc_shblock_support 136 137trap cleanup EXIT 138 139setup_prepare 140setup_wait 141 142tests_run 143 144tc_offload_check 145if [[ $? -ne 0 ]]; then 146 log_info "Could not test offloaded functionality" 147else 148 tcflags="skip_sw" 149 tests_run 150fi 151 152exit $EXIT_STATUS 153