153 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4ALL_TESTS="shared_block_test match_indev_test"5NUM_NETIFS=46source tc_common.sh7source lib.sh8 9tcflags="skip_hw"10 11h1_create()12{13 simple_if_init $h1 192.0.2.1/2414}15 16h1_destroy()17{18 simple_if_fini $h1 192.0.2.1/2419}20 21h2_create()22{23 simple_if_init $h2 192.0.2.1/2424}25 26h2_destroy()27{28 simple_if_fini $h2 192.0.2.1/2429}30 31switch_create()32{33 simple_if_init $swp1 192.0.2.2/2434 tc qdisc add dev $swp1 ingress_block 22 egress_block 23 clsact35 36 simple_if_init $swp2 192.0.2.2/2437 tc qdisc add dev $swp2 ingress_block 22 egress_block 23 clsact38}39 40switch_destroy()41{42 tc qdisc del dev $swp2 clsact43 simple_if_fini $swp2 192.0.2.2/2444 45 tc qdisc del dev $swp1 clsact46 simple_if_fini $swp1 192.0.2.2/2447}48 49shared_block_test()50{51 RET=052 53 tc filter add block 22 protocol ip pref 1 handle 101 flower \54 $tcflags dst_ip 192.0.2.2 action drop55 56 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \57 -t ip -q58 59 tc_check_packets "block 22" 101 160 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 -q64 65 tc_check_packets "block 22" 101 266 check_err $? "Did not match second incoming packet on a block"67 68 tc filter del block 22 protocol ip pref 1 handle 101 flower69 70 log_test "shared block ($tcflags)"71}72 73match_indev_test()74{75 RET=076 77 tc filter add block 22 protocol ip pref 1 handle 101 flower \78 $tcflags indev $swp1 dst_mac $swmac action drop79 tc filter add block 22 protocol ip pref 2 handle 102 flower \80 $tcflags indev $swp2 dst_mac $swmac action drop81 82 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \83 -t ip -q84 85 tc_check_packets "block 22" 101 186 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 -q90 91 tc_check_packets "block 22" 102 192 check_err $? "Did not match second incoming packet on a block"93 94 tc filter del block 22 protocol ip pref 1 handle 101 flower95 tc filter del block 22 protocol ip pref 2 handle 102 flower96 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 $swmac114 115 vrf_prepare116 117 h1_create118 h2_create119 switch_create120}121 122cleanup()123{124 pre_cleanup125 126 switch_destroy127 h2_destroy128 h1_destroy129 130 vrf_cleanup131 132 ip link set $swp2 address $swp2origmac133}134 135check_tc_shblock_support136 137trap cleanup EXIT138 139setup_prepare140setup_wait141 142tests_run143 144tc_offload_check145if [[ $? -ne 0 ]]; then146 log_info "Could not test offloaded functionality"147else148 tcflags="skip_sw"149 tests_run150fi151 152exit $EXIT_STATUS153