Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: mirror: do_test_span_dir_ips(): Install accurate taps

The mirroring selftests work by sending ICMP traffic between two hosts.
Along the way, this traffic is mirrored to a gretap netdevice, and counter
taps are then installed strategically along the path of the mirrored
traffic to verify the mirroring took place.

The problem with this is that besides mirroring the primary traffic, any
other service traffic is mirrored as well. At the same time, because the
tests need to work in HW-offloaded scenarios, the ability of the device to
do arbitrary packet inspection should not be taken for granted. Most tests
therefore simply use matchall, one uses flower to match on IP address.

As a result, the selftests are noisy, because besides the primary ICMP
traffic, any amount of other service traffic is mirrored as well.

However, often the counter tap is installed at the remote end of the gretap
tunnel. Since this is a SW-datapath scenario anyway, we can make the filter
arbitrarily accurate.

Thus in this patch, add parameters forward_type and backward_type to
several mirroring test helpers, as some other helpers already have. Then
change do_test_span_dir_ips() to instead of installing one generic tap and
using it for test in both directions, install the tap for each direction
separately, matching on the ICMP type given by these parameters.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Danielle Ratson <danieller@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Petr Machata and committed by
David S. Miller
83341535 95e7b860

+44 -20
+6 -6
tools/testing/selftests/net/forwarding/mirror_gre.sh
··· 91 91 92 92 mirror_install $swp1 ingress gt4 "matchall $tcflags" 93 93 mirror_install $swp1 egress gt6 "matchall $tcflags" 94 - quick_test_span_gre_dir gt4 95 - quick_test_span_gre_dir gt6 94 + quick_test_span_gre_dir gt4 8 0 95 + quick_test_span_gre_dir gt6 0 8 96 96 97 97 mirror_uninstall $swp1 ingress 98 - fail_test_span_gre_dir gt4 99 - quick_test_span_gre_dir gt6 98 + fail_test_span_gre_dir gt4 8 0 99 + quick_test_span_gre_dir gt6 0 8 100 100 101 101 mirror_install $swp1 ingress gt4 "matchall $tcflags" 102 102 mirror_uninstall $swp1 egress 103 - quick_test_span_gre_dir gt4 104 - fail_test_span_gre_dir gt6 103 + quick_test_span_gre_dir gt4 8 0 104 + fail_test_span_gre_dir gt6 0 8 105 105 106 106 mirror_uninstall $swp1 ingress 107 107 log_test "two simultaneously configured mirrors ($tcflags)"
+18 -5
tools/testing/selftests/net/forwarding/mirror_gre_lib.sh
··· 7 7 local tundev=$1; shift 8 8 local ip1=$1; shift 9 9 local ip2=$1; shift 10 + local forward_type=$1; shift 11 + local backward_type=$1; shift 10 12 11 - do_test_span_dir_ips 10 h3-$tundev "$ip1" "$ip2" 13 + do_test_span_dir_ips 10 h3-$tundev "$ip1" "$ip2" \ 14 + "$forward_type" "$backward_type" 12 15 } 13 16 14 17 fail_test_span_gre_dir_ips() ··· 87 84 quick_test_span_gre_dir() 88 85 { 89 86 local tundev=$1; shift 87 + local forward_type=${1-8}; shift 88 + local backward_type=${1-0}; shift 90 89 91 - quick_test_span_gre_dir_ips "$tundev" 192.0.2.1 192.0.2.2 90 + quick_test_span_gre_dir_ips "$tundev" 192.0.2.1 192.0.2.2 \ 91 + "$forward_type" "$backward_type" 92 92 } 93 93 94 94 fail_test_span_gre_dir() ··· 145 139 local what=$1; shift 146 140 local ip1=$1; shift 147 141 local ip2=$1; shift 142 + local forward_type=$1; shift 143 + local backward_type=$1; shift 148 144 local h3mac=$(mac_get $h3) 149 145 150 146 RET=0 151 147 152 148 mirror_install $swp1 ingress $tundev "matchall $tcflags" 153 - quick_test_span_gre_dir_ips $tundev $ip1 $ip2 149 + quick_test_span_gre_dir_ips $tundev $ip1 $ip2 \ 150 + "$forward_type" "$backward_type" 154 151 155 152 bridge link set dev $nbpdev state disabled 156 153 sleep 1 ··· 161 152 162 153 bridge link set dev $nbpdev state forwarding 163 154 sleep 1 164 - quick_test_span_gre_dir_ips $tundev $ip1 $ip2 155 + quick_test_span_gre_dir_ips $tundev $ip1 $ip2 \ 156 + "$forward_type" "$backward_type" 165 157 166 158 mirror_uninstall $swp1 ingress 167 159 ··· 174 164 local tundev=$1; shift 175 165 local nbpdev=$1; shift 176 166 local what=$1; shift 167 + local forward_type=${1-8}; shift 168 + local backward_type=${1-0}; shift 177 169 178 170 full_test_span_gre_stp_ips "$tundev" "$nbpdev" "$what" \ 179 - 192.0.2.1 192.0.2.2 171 + 192.0.2.1 192.0.2.2 \ 172 + "$forward_type" "$backward_type" 180 173 }
+8 -6
tools/testing/selftests/net/forwarding/mirror_gre_neigh.sh
··· 60 60 local addr=$1; shift 61 61 local tundev=$1; shift 62 62 local direction=$1; shift 63 + local forward_type=$1; shift 64 + local backward_type=$1; shift 63 65 local what=$1; shift 64 66 65 67 RET=0 66 68 67 69 ip neigh replace dev $swp3 $addr lladdr 00:11:22:33:44:55 68 70 mirror_install $swp1 $direction $tundev "matchall $tcflags" 69 - fail_test_span_gre_dir $tundev 71 + fail_test_span_gre_dir $tundev "$forward_type" "$backward_type" 70 72 ip neigh del dev $swp3 $addr 71 - quick_test_span_gre_dir $tundev 73 + quick_test_span_gre_dir $tundev "$forward_type" "$backward_type" 72 74 mirror_uninstall $swp1 $direction 73 75 74 76 log_test "$direction $what: neighbor change ($tcflags)" ··· 78 76 79 77 test_gretap() 80 78 { 81 - test_span_gre_neigh 192.0.2.130 gt4 ingress "mirror to gretap" 82 - test_span_gre_neigh 192.0.2.130 gt4 egress "mirror to gretap" 79 + test_span_gre_neigh 192.0.2.130 gt4 ingress 8 0 "mirror to gretap" 80 + test_span_gre_neigh 192.0.2.130 gt4 egress 0 8 "mirror to gretap" 83 81 } 84 82 85 83 test_ip6gretap() 86 84 { 87 - test_span_gre_neigh 2001:db8:2::2 gt6 ingress "mirror to ip6gretap" 88 - test_span_gre_neigh 2001:db8:2::2 gt6 egress "mirror to ip6gretap" 85 + test_span_gre_neigh 2001:db8:2::2 gt6 ingress 8 0 "mirror to ip6gretap" 86 + test_span_gre_neigh 2001:db8:2::2 gt6 egress 0 8 "mirror to ip6gretap" 89 87 } 90 88 91 89 test_all()
+12 -3
tools/testing/selftests/net/forwarding/mirror_lib.sh
··· 61 61 local dev=$1; shift 62 62 local ip1=$1; shift 63 63 local ip2=$1; shift 64 + local forward_type=${1-8}; shift 65 + local backward_type=${1-0}; shift 64 66 65 - icmp_capture_install $dev 67 + icmp_capture_install $dev "type $forward_type" 66 68 mirror_test v$h1 $ip1 $ip2 $dev 100 $expect 69 + icmp_capture_uninstall $dev 70 + 71 + icmp_capture_install $dev "type $backward_type" 67 72 mirror_test v$h2 $ip2 $ip1 $dev 100 $expect 68 73 icmp_capture_uninstall $dev 69 74 } ··· 78 73 local dev=$1; shift 79 74 local ip1=$1; shift 80 75 local ip2=$1; shift 76 + local forward_type=${1-8}; shift 77 + local backward_type=${1-0}; shift 81 78 82 - do_test_span_dir_ips 10 "$dev" "$ip1" "$ip2" 79 + do_test_span_dir_ips 10 "$dev" "$ip1" "$ip2" \ 80 + "$forward_type" "$backward_type" 83 81 } 84 82 85 83 fail_test_span_dir_ips() ··· 103 95 local ip1=$1; shift 104 96 local ip2=$1; shift 105 97 106 - quick_test_span_dir_ips "$dev" "$ip1" "$ip2" 98 + quick_test_span_dir_ips "$dev" "$ip1" "$ip2" \ 99 + "$forward_type" "$backward_type" 107 100 108 101 icmp_capture_install $dev "type $forward_type" 109 102 mirror_test v$h1 $ip1 $ip2 $dev 100 10