1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4ALL_TESTS="unreachable_chain_test gact_goto_chain_test" 5NUM_NETIFS=2 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.2/24 24 tc qdisc add dev $h2 clsact 25} 26 27h2_destroy() 28{ 29 tc qdisc del dev $h2 clsact 30 simple_if_fini $h2 192.0.2.2/24 31} 32 33unreachable_chain_test() 34{ 35 RET=0 36 37 tc filter add dev $h2 ingress chain 1 protocol ip pref 1 handle 1101 \ 38 flower $tcflags dst_mac $h2mac action drop 39 40 $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \ 41 -t ip -q 42 43 tc_check_packets "dev $h2 ingress" 1101 1 44 check_fail $? "matched on filter in unreachable chain" 45 46 tc filter del dev $h2 ingress chain 1 protocol ip pref 1 handle 1101 \ 47 flower 48 49 log_test "unreachable chain ($tcflags)" 50} 51 52gact_goto_chain_test() 53{ 54 RET=0 55 56 tc filter add dev $h2 ingress chain 1 protocol ip pref 1 handle 1101 \ 57 flower $tcflags dst_mac $h2mac action drop 58 tc filter add dev $h2 ingress protocol ip pref 2 handle 102 flower \ 59 $tcflags dst_mac $h2mac action drop 60 tc filter add dev $h2 ingress protocol ip pref 1 handle 101 flower \ 61 $tcflags dst_mac $h2mac action goto chain 1 62 63 $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \ 64 -t ip -q 65 66 tc_check_packets "dev $h2 ingress" 102 1 67 check_fail $? "Matched on a wrong filter" 68 69 tc_check_packets "dev $h2 ingress" 101 1 70 check_err $? "Did not match on correct filter with goto chain action" 71 72 tc_check_packets "dev $h2 ingress" 1101 1 73 check_err $? "Did not match on correct filter in chain 1" 74 75 tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower 76 tc filter del dev $h2 ingress protocol ip pref 2 handle 102 flower 77 tc filter del dev $h2 ingress chain 1 protocol ip pref 1 handle 1101 \ 78 flower 79 80 log_test "gact goto chain ($tcflags)" 81} 82 83setup_prepare() 84{ 85 h1=${NETIFS[p1]} 86 h2=${NETIFS[p2]} 87 h1mac=$(mac_get $h1) 88 h2mac=$(mac_get $h2) 89 90 vrf_prepare 91 92 h1_create 93 h2_create 94} 95 96cleanup() 97{ 98 pre_cleanup 99 100 h2_destroy 101 h1_destroy 102 103 vrf_cleanup 104} 105 106trap cleanup EXIT 107 108setup_prepare 109setup_wait 110 111tests_run 112 113tc_offload_check 114if [[ $? -ne 0 ]]; then 115 log_info "Could not test offloaded functionality" 116else 117 tcflags="skip_sw" 118 tests_run 119fi 120 121exit $EXIT_STATUS 122