| .. | .. |
|---|
| 1 | 1 | #!/bin/bash |
|---|
| 2 | 2 | # SPDX-License-Identifier: GPL-2.0 |
|---|
| 3 | 3 | |
|---|
| 4 | | -# This test uses standard topology for testing gretap. See |
|---|
| 5 | | -# mirror_gre_topo_lib.sh for more details. |
|---|
| 6 | | -# |
|---|
| 7 | 4 | # Test for "tc action mirred egress mirror" when the underlay route points at a |
|---|
| 8 | 5 | # vlan device on top of a bridge device with vlan filtering (802.1q). |
|---|
| 6 | +# |
|---|
| 7 | +# +---------------------+ +---------------------+ |
|---|
| 8 | +# | H1 | | H2 | |
|---|
| 9 | +# | + $h1 | | $h2 + | |
|---|
| 10 | +# | | 192.0.2.1/28 | | 192.0.2.2/28 | | |
|---|
| 11 | +# +-----|---------------+ +---------------|-----+ |
|---|
| 12 | +# | | |
|---|
| 13 | +# +-----|-------------------------------------------------------------|-----+ |
|---|
| 14 | +# | SW o--> mirred egress mirror dev {gt4,gt6} | | |
|---|
| 15 | +# | | | | |
|---|
| 16 | +# | +---|-------------------------------------------------------------|---+ | |
|---|
| 17 | +# | | + $swp1 br1 $swp2 + | | |
|---|
| 18 | +# | | | | |
|---|
| 19 | +# | | + $swp3 | | |
|---|
| 20 | +# | +---|-----------------------------------------------------------------+ | |
|---|
| 21 | +# | | | | |
|---|
| 22 | +# | | + br1.555 | |
|---|
| 23 | +# | | 192.0.2.130/28 | |
|---|
| 24 | +# | | 2001:db8:2::2/64 | |
|---|
| 25 | +# | | | |
|---|
| 26 | +# | | + gt6 (ip6gretap) + gt4 (gretap) | |
|---|
| 27 | +# | | : loc=2001:db8:2::1 : loc=192.0.2.129 | |
|---|
| 28 | +# | | : rem=2001:db8:2::2 : rem=192.0.2.130 | |
|---|
| 29 | +# | | : ttl=100 : ttl=100 | |
|---|
| 30 | +# | | : tos=inherit : tos=inherit | |
|---|
| 31 | +# | | : : | |
|---|
| 32 | +# +-----|---------------------:----------------------:----------------------+ |
|---|
| 33 | +# | : : |
|---|
| 34 | +# +-----|---------------------:----------------------:----------------------+ |
|---|
| 35 | +# | H3 + $h3 + h3-gt6 (ip6gretap) + h3-gt4 (gretap) | |
|---|
| 36 | +# | | loc=2001:db8:2::2 loc=192.0.2.130 | |
|---|
| 37 | +# | + $h3.555 rem=2001:db8:2::1 rem=192.0.2.129 | |
|---|
| 38 | +# | 192.0.2.130/28 ttl=100 ttl=100 | |
|---|
| 39 | +# | 2001:db8:2::2/64 tos=inherit tos=inherit | |
|---|
| 40 | +# | | |
|---|
| 41 | +# +-------------------------------------------------------------------------+ |
|---|
| 9 | 42 | |
|---|
| 10 | 43 | ALL_TESTS=" |
|---|
| 11 | 44 | test_gretap |
|---|
| .. | .. |
|---|
| 29 | 62 | source mirror_gre_topo_lib.sh |
|---|
| 30 | 63 | |
|---|
| 31 | 64 | require_command $ARPING |
|---|
| 65 | + |
|---|
| 66 | +h3_addr_add_del() |
|---|
| 67 | +{ |
|---|
| 68 | + local add_del=$1; shift |
|---|
| 69 | + local dev=$1; shift |
|---|
| 70 | + |
|---|
| 71 | + ip addr $add_del dev $dev 192.0.2.130/28 |
|---|
| 72 | + ip addr $add_del dev $dev 2001:db8:2::2/64 |
|---|
| 73 | +} |
|---|
| 32 | 74 | |
|---|
| 33 | 75 | setup_prepare() |
|---|
| 34 | 76 | { |
|---|
| .. | .. |
|---|
| 55 | 97 | ip route rep 192.0.2.130/32 dev br1.555 |
|---|
| 56 | 98 | ip -6 route rep 2001:db8:2::2/128 dev br1.555 |
|---|
| 57 | 99 | |
|---|
| 58 | | - vlan_create $h3 555 v$h3 192.0.2.130/28 2001:db8:2::2/64 |
|---|
| 100 | + vlan_create $h3 555 v$h3 |
|---|
| 101 | + h3_addr_add_del add $h3.555 |
|---|
| 59 | 102 | |
|---|
| 60 | 103 | ip link set dev $swp3 master br1 |
|---|
| 61 | 104 | bridge vlan add dev $swp3 vid 555 |
|---|
| .. | .. |
|---|
| 68 | 111 | |
|---|
| 69 | 112 | ip link set dev $swp2 nomaster |
|---|
| 70 | 113 | ip link set dev $swp3 nomaster |
|---|
| 114 | + |
|---|
| 115 | + h3_addr_add_del del $h3.555 |
|---|
| 71 | 116 | vlan_destroy $h3 555 |
|---|
| 72 | 117 | vlan_destroy br1 555 |
|---|
| 73 | 118 | |
|---|
| .. | .. |
|---|
| 182 | 227 | quick_test_span_gre_dir $tundev ingress |
|---|
| 183 | 228 | quick_test_span_vlan_dir $h3 555 ingress |
|---|
| 184 | 229 | |
|---|
| 230 | + h3_addr_add_del del $h3.555 |
|---|
| 185 | 231 | bridge vlan add dev $swp3 vid 555 pvid untagged |
|---|
| 186 | | - sleep 1 |
|---|
| 232 | + h3_addr_add_del add $h3 |
|---|
| 233 | + sleep 5 |
|---|
| 234 | + |
|---|
| 187 | 235 | quick_test_span_gre_dir $tundev ingress |
|---|
| 188 | 236 | fail_test_span_vlan_dir $h3 555 ingress |
|---|
| 189 | 237 | |
|---|
| 238 | + h3_addr_add_del del $h3 |
|---|
| 190 | 239 | bridge vlan add dev $swp3 vid 555 |
|---|
| 191 | | - sleep 1 |
|---|
| 240 | + h3_addr_add_del add $h3.555 |
|---|
| 241 | + sleep 5 |
|---|
| 242 | + |
|---|
| 192 | 243 | quick_test_span_gre_dir $tundev ingress |
|---|
| 193 | 244 | quick_test_span_vlan_dir $h3 555 ingress |
|---|
| 194 | 245 | |
|---|
| .. | .. |
|---|
| 218 | 269 | mirror_install $swp1 ingress $tundev "matchall $tcflags" |
|---|
| 219 | 270 | quick_test_span_gre_dir $tundev ingress |
|---|
| 220 | 271 | |
|---|
| 221 | | - bridge fdb del dev $swp3 $h3mac vlan 555 master |
|---|
| 222 | | - bridge fdb add dev $swp2 $h3mac vlan 555 master |
|---|
| 223 | | - sleep 1 |
|---|
| 224 | | - fail_test_span_gre_dir $tundev ingress |
|---|
| 272 | + while ((RET == 0)); do |
|---|
| 273 | + bridge fdb del dev $swp3 $h3mac vlan 555 master 2>/dev/null |
|---|
| 274 | + bridge fdb add dev $swp2 $h3mac vlan 555 master static |
|---|
| 275 | + sleep 1 |
|---|
| 276 | + fail_test_span_gre_dir $tundev ingress |
|---|
| 225 | 277 | |
|---|
| 226 | | - bridge fdb del dev $swp2 $h3mac vlan 555 master |
|---|
| 278 | + if ! bridge fdb sh dev $swp2 vlan 555 master \ |
|---|
| 279 | + | grep -q $h3mac; then |
|---|
| 280 | + printf "TEST: %-60s [RETRY]\n" \ |
|---|
| 281 | + "$what: MAC roaming ($tcflags)" |
|---|
| 282 | + # ARP or ND probably reprimed the FDB while the test |
|---|
| 283 | + # was running. We would get a spurious failure. |
|---|
| 284 | + RET=0 |
|---|
| 285 | + continue |
|---|
| 286 | + fi |
|---|
| 287 | + break |
|---|
| 288 | + done |
|---|
| 289 | + |
|---|
| 290 | + bridge fdb del dev $swp2 $h3mac vlan 555 master 2>/dev/null |
|---|
| 227 | 291 | # Re-prime FDB |
|---|
| 228 | 292 | $ARPING -I br1.555 192.0.2.130 -fqc 1 |
|---|
| 229 | 293 | sleep 1 |
|---|