# SPDX-License-Identifier: GPL-2.0
 
 ALL_TESTS="gact_drop_and_ok_test mirred_egress_redirect_test \
-       mirred_egress_mirror_test gact_trap_test"
+       mirred_egress_mirror_test matchall_mirred_egress_mirror_test \
+       gact_trap_test"
 NUM_NETIFS=4
 source tc_common.sh
 source lib.sh
 mirred_egress_test()
 {
        local action=$1
+       local protocol=$2
+       local classifier=$3
+       local classifier_args=$4
 
        RET=0
 
        tc_check_packets "dev $h2 ingress" 101 1
        check_fail $? "Matched without redirect rule inserted"
 
-       tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
-               $tcflags dst_ip 192.0.2.2 action mirred egress $action \
-               dev $swp2
+       tc filter add dev $swp1 ingress protocol $protocol pref 1 handle 101 \
+               $classifier $tcflags $classifier_args \
+               action mirred egress $action dev $swp2
 
        $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
                -t ip -q
        tc_check_packets "dev $h2 ingress" 101 1
        check_err $? "Did not match incoming $action packet"
 
-       tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
+       tc filter del dev $swp1 ingress protocol $protocol pref 1 handle 101 \
+               $classifier
        tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower
 
-       log_test "mirred egress $action ($tcflags)"
+       log_test "mirred egress $classifier $action ($tcflags)"
 }
 
 gact_drop_and_ok_test()
 
 mirred_egress_redirect_test()
 {
-       mirred_egress_test "redirect"
+       mirred_egress_test "redirect" "ip" "flower" "dst_ip 192.0.2.2"
 }
 
 mirred_egress_mirror_test()
 {
-       mirred_egress_test "mirror"
+       mirred_egress_test "mirror" "ip" "flower" "dst_ip 192.0.2.2"
+}
+
+matchall_mirred_egress_mirror_test()
+{
+       mirred_egress_test "mirror" "all" "matchall" ""
 }
 
 trap cleanup EXIT