{
        local tundev=$1; shift
        local direction=$1; shift
-       local prot=$1; shift
        local what=$1; shift
 
-       local swp3mac=$(mac_get $swp3)
-       local h3mac=$(mac_get $h3)
+       case "$direction" in
+       ingress) local src_mac=$(mac_get $h1); local dst_mac=$(mac_get $h2)
+               ;;
+       egress) local src_mac=$(mac_get $h2); local dst_mac=$(mac_get $h1)
+               ;;
+       esac
 
        RET=0
 
        mirror_install $swp1 $direction $tundev "matchall $tcflags"
-       tc filter add dev $h3 ingress pref 77 prot $prot \
-               flower ip_proto 0x2f src_mac $swp3mac dst_mac $h3mac \
-               action pass
+       icmp_capture_install h3-${tundev} "src_mac $src_mac dst_mac $dst_mac"
 
-       mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 10
+       mirror_test v$h1 192.0.2.1 192.0.2.2 h3-${tundev} 100 10
 
-       tc filter del dev $h3 ingress pref 77
+       icmp_capture_uninstall h3-${tundev}
        mirror_uninstall $swp1 $direction
 
        log_test "$direction $what: envelope MAC ($tcflags)"
 
 test_gretap_mac()
 {
-       test_span_gre_mac gt4 ingress ip "mirror to gretap"
-       test_span_gre_mac gt4 egress ip "mirror to gretap"
+       test_span_gre_mac gt4 ingress "mirror to gretap"
+       test_span_gre_mac gt4 egress "mirror to gretap"
 }
 
 test_ip6gretap_mac()
 {
-       test_span_gre_mac gt6 ingress ipv6 "mirror to ip6gretap"
-       test_span_gre_mac gt6 egress ipv6 "mirror to ip6gretap"
+       test_span_gre_mac gt6 ingress "mirror to ip6gretap"
+       test_span_gre_mac gt6 egress "mirror to ip6gretap"
 }
 
 test_all()