selftests: forwarding: mirror_gre_vlan_bridge_1q: Fix untagged test
authorPetr Machata <petrm@mellanox.com>
Thu, 31 Jan 2019 22:35:18 +0000 (22:35 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 1 Feb 2019 23:26:36 +0000 (15:26 -0800)
The untagged egress test sets up mirroring to {,ip6}gretap such that the
underlay goes through a bridge. Then VLAN flags are manipulated to test
that the traffic leaves the bridge 802.1q-tagged or not, as appropriate.

However, when a neighbor expires at the time that the bridge VLAN is
configured as PVID and egress untagged, the following discovery process
can't finish, because the IP address on H3 is still at the VLAN-tagged
netdevice. This manifests by occasional failures where only several of
the 10 required packets get through.

Therefore, when reconfiguring the VLAN flags, move the IP address to the
appropriate device in the H3 VRF.

In addition to that, take this opportunity to embed an ASCII art diagram
to make the topology move obvious.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/forwarding/mirror_gre_vlan_bridge_1q.sh

index 204b25f..43ee505 100755 (executable)
@@ -1,11 +1,44 @@
 #!/bin/bash
 # SPDX-License-Identifier: GPL-2.0
 
-# This test uses standard topology for testing gretap. See
-# mirror_gre_topo_lib.sh for more details.
-#
 # Test for "tc action mirred egress mirror" when the underlay route points at a
 # vlan device on top of a bridge device with vlan filtering (802.1q).
+#
+#   +---------------------+                             +---------------------+
+#   | H1                  |                             |                  H2 |
+#   |     + $h1           |                             |           $h2 +     |
+#   |     | 192.0.2.1/28  |                             |  192.0.2.2/28 |     |
+#   +-----|---------------+                             +---------------|-----+
+#         |                                                             |
+#   +-----|-------------------------------------------------------------|-----+
+#   | SW  o--> mirred egress mirror dev {gt4,gt6}                       |     |
+#   |     |                                                             |     |
+#   | +---|-------------------------------------------------------------|---+ |
+#   | |   + $swp1                    br1                          $swp2 +   | |
+#   | |                                                                     | |
+#   | |   + $swp3                                                           | |
+#   | +---|-----------------------------------------------------------------+ |
+#   |     |                        |                                          |
+#   |     |                        + br1.555                                  |
+#   |     |                          192.0.2.130/28                           |
+#   |     |                          2001:db8:2::2/64                         |
+#   |     |                                                                   |
+#   |     |                     + gt6 (ip6gretap)      + gt4 (gretap)         |
+#   |     |                     : loc=2001:db8:2::1    : loc=192.0.2.129      |
+#   |     |                     : rem=2001:db8:2::2    : rem=192.0.2.130      |
+#   |     |                     : ttl=100              : ttl=100              |
+#   |     |                     : tos=inherit          : tos=inherit          |
+#   |     |                     :                      :                      |
+#   +-----|---------------------:----------------------:----------------------+
+#         |                     :                      :
+#   +-----|---------------------:----------------------:----------------------+
+#   | H3  + $h3                 + h3-gt6 (ip6gretap)   + h3-gt4 (gretap)      |
+#   |     |                       loc=2001:db8:2::2      loc=192.0.2.130      |
+#   |     + $h3.555               rem=2001:db8:2::1      rem=192.0.2.129      |
+#   |       192.0.2.130/28        ttl=100                ttl=100              |
+#   |       2001:db8:2::2/64      tos=inherit            tos=inherit          |
+#   |                                                                         |
+#   +-------------------------------------------------------------------------+
 
 ALL_TESTS="
        test_gretap
@@ -30,6 +63,15 @@ source mirror_gre_topo_lib.sh
 
 require_command $ARPING
 
+h3_addr_add_del()
+{
+       local add_del=$1; shift
+       local dev=$1; shift
+
+       ip addr $add_del dev $dev 192.0.2.130/28
+       ip addr $add_del dev $dev 2001:db8:2::2/64
+}
+
 setup_prepare()
 {
        h1=${NETIFS[p1]}
@@ -55,7 +97,8 @@ setup_prepare()
        ip route rep 192.0.2.130/32 dev br1.555
        ip -6 route rep 2001:db8:2::2/128 dev br1.555
 
-       vlan_create $h3 555 v$h3 192.0.2.130/28 2001:db8:2::2/64
+       vlan_create $h3 555 v$h3
+       h3_addr_add_del add $h3.555
 
        ip link set dev $swp3 master br1
        bridge vlan add dev $swp3 vid 555
@@ -68,6 +111,8 @@ cleanup()
 
        ip link set dev $swp2 nomaster
        ip link set dev $swp3 nomaster
+
+       h3_addr_add_del del $h3.555
        vlan_destroy $h3 555
        vlan_destroy br1 555
 
@@ -182,13 +227,19 @@ test_span_gre_untagged_egress()
        quick_test_span_gre_dir $tundev ingress
        quick_test_span_vlan_dir $h3 555 ingress
 
+       h3_addr_add_del del $h3.555
        bridge vlan add dev $swp3 vid 555 pvid untagged
-       sleep 1
+       h3_addr_add_del add $h3
+       sleep 5
+
        quick_test_span_gre_dir $tundev ingress
        fail_test_span_vlan_dir $h3 555 ingress
 
+       h3_addr_add_del del $h3
        bridge vlan add dev $swp3 vid 555
-       sleep 1
+       h3_addr_add_del add $h3.555
+       sleep 5
+
        quick_test_span_gre_dir $tundev ingress
        quick_test_span_vlan_dir $h3 555 ingress