1239e754aSPetr Machata#!/bin/bash
2239e754aSPetr Machata# SPDX-License-Identifier: GPL-2.0
3239e754aSPetr Machata
4239e754aSPetr Machata# Test for "tc action mirred egress mirror" when the underlay route points at a
5239e754aSPetr Machata# bridge device with vlan filtering (802.1q).
6239e754aSPetr Machata#
7239e754aSPetr Machata# This test uses standard topology for testing mirror-to-gretap. See
8239e754aSPetr Machata# mirror_gre_topo_lib.sh for more details. The full topology is as follows:
9239e754aSPetr Machata#
10239e754aSPetr Machata#  +---------------------+                               +---------------------+
11239e754aSPetr Machata#  | H1                  |                               |                  H2 |
12239e754aSPetr Machata#  |     + $h1           |                               |           $h2 +     |
13239e754aSPetr Machata#  |     | 192.0.2.1/28  |                               |  192.0.2.2/28 |     |
14239e754aSPetr Machata#  +-----|---------------+                               +---------------|-----+
15239e754aSPetr Machata#        |                                                               |
16239e754aSPetr Machata#  +-----|---------------------------------------------------------------|-----+
17239e754aSPetr Machata#  | SW  o---> mirror                                                    |     |
18239e754aSPetr Machata#  | +---|---------------------------------------------------------------|---+ |
19239e754aSPetr Machata#  | |   + $swp1                  + br1 (802.1q bridge)            $swp2 +   | |
20239e754aSPetr Machata#  | |                              192.0.2.129/28                           | |
21239e754aSPetr Machata#  | |   + $swp3                    2001:db8:2::1/64                         | |
22239e754aSPetr Machata#  | |   | vid555                   vid555[pvid,untagged]                    | |
23239e754aSPetr Machata#  | +---|-------------------------------------------------------------------+ |
24239e754aSPetr Machata#  |     |                                          ^                      ^   |
25239e754aSPetr Machata#  |     |                     + gt6 (ip6gretap)    |   + gt4 (gretap)     |   |
26239e754aSPetr Machata#  |     |                     : loc=2001:db8:2::1  |   : loc=192.0.2.129  |   |
27239e754aSPetr Machata#  |     |                     : rem=2001:db8:2::2 -+   : rem=192.0.2.130 -+   |
28239e754aSPetr Machata#  |     |                     : ttl=100                : ttl=100              |
29239e754aSPetr Machata#  |     |                     : tos=inherit            : tos=inherit          |
30239e754aSPetr Machata#  +-----|---------------------:------------------------:----------------------+
31239e754aSPetr Machata#        |                     :                        :
32239e754aSPetr Machata#  +-----|---------------------:------------------------:----------------------+
33239e754aSPetr Machata#  | H3  + $h3                 + h3-gt6(ip6gretap)      + h3-gt4 (gretap)      |
34239e754aSPetr Machata#  |     |                       loc=2001:db8:2::2        loc=192.0.2.130      |
35239e754aSPetr Machata#  |     + $h3.555               rem=2001:db8:2::1        rem=192.0.2.129      |
36239e754aSPetr Machata#  |       192.0.2.130/28        ttl=100                  ttl=100              |
37239e754aSPetr Machata#  |       2001:db8:2::2/64      tos=inherit              tos=inherit          |
38239e754aSPetr Machata#  +---------------------------------------------------------------------------+
39239e754aSPetr Machata
40239e754aSPetr MachataALL_TESTS="
41239e754aSPetr Machata	test_gretap
42239e754aSPetr Machata	test_ip6gretap
43239e754aSPetr Machata"
44239e754aSPetr Machata
45239e754aSPetr MachataNUM_NETIFS=6
46239e754aSPetr Machatasource lib.sh
47239e754aSPetr Machatasource mirror_lib.sh
48239e754aSPetr Machatasource mirror_gre_lib.sh
49239e754aSPetr Machatasource mirror_gre_topo_lib.sh
50239e754aSPetr Machata
51239e754aSPetr Machatasetup_prepare()
52239e754aSPetr Machata{
53239e754aSPetr Machata	h1=${NETIFS[p1]}
54239e754aSPetr Machata	swp1=${NETIFS[p2]}
55239e754aSPetr Machata
56239e754aSPetr Machata	swp2=${NETIFS[p3]}
57239e754aSPetr Machata	h2=${NETIFS[p4]}
58239e754aSPetr Machata
59239e754aSPetr Machata	swp3=${NETIFS[p5]}
60239e754aSPetr Machata	h3=${NETIFS[p6]}
61239e754aSPetr Machata
62239e754aSPetr Machata	vrf_prepare
63239e754aSPetr Machata	mirror_gre_topo_create
643122257cSIdo Schimmel	# Avoid changing br1's PVID while it is operational as a L3 interface.
653122257cSIdo Schimmel	ip link set dev br1 down
66239e754aSPetr Machata
67239e754aSPetr Machata	ip link set dev $swp3 master br1
68239e754aSPetr Machata	bridge vlan add dev br1 vid 555 pvid untagged self
693122257cSIdo Schimmel	ip link set dev br1 up
70239e754aSPetr Machata	ip address add dev br1 192.0.2.129/28
71239e754aSPetr Machata	ip address add dev br1 2001:db8:2::1/64
72239e754aSPetr Machata
73239e754aSPetr Machata	ip -4 route add 192.0.2.130/32 dev br1
74239e754aSPetr Machata	ip -6 route add 2001:db8:2::2/128 dev br1
75239e754aSPetr Machata
76239e754aSPetr Machata	vlan_create $h3 555 v$h3 192.0.2.130/28 2001:db8:2::2/64
77239e754aSPetr Machata	bridge vlan add dev $swp3 vid 555
78239e754aSPetr Machata}
79239e754aSPetr Machata
80239e754aSPetr Machatacleanup()
81239e754aSPetr Machata{
82239e754aSPetr Machata	pre_cleanup
83239e754aSPetr Machata
84239e754aSPetr Machata	ip link set dev $swp3 nomaster
85239e754aSPetr Machata	vlan_destroy $h3 555
86239e754aSPetr Machata
87239e754aSPetr Machata	mirror_gre_topo_destroy
88239e754aSPetr Machata	vrf_cleanup
89239e754aSPetr Machata}
90239e754aSPetr Machata
91239e754aSPetr Machatatest_gretap()
92239e754aSPetr Machata{
93*c7c059fbSDanielle Ratson	ip neigh replace 192.0.2.130 lladdr $(mac_get $h3) \
94*c7c059fbSDanielle Ratson		 nud permanent dev br1
95239e754aSPetr Machata	full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap"
96239e754aSPetr Machata	full_test_span_gre_dir gt4 egress 0 8 "mirror to gretap"
97239e754aSPetr Machata}
98239e754aSPetr Machata
99239e754aSPetr Machatatest_ip6gretap()
100239e754aSPetr Machata{
101*c7c059fbSDanielle Ratson	ip neigh replace 2001:db8:2::2 lladdr $(mac_get $h3) \
102*c7c059fbSDanielle Ratson		nud permanent dev br1
103239e754aSPetr Machata	full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap"
104239e754aSPetr Machata	full_test_span_gre_dir gt6 egress 0 8 "mirror to ip6gretap"
105239e754aSPetr Machata}
106239e754aSPetr Machata
107239e754aSPetr Machatatests()
108239e754aSPetr Machata{
109239e754aSPetr Machata	slow_path_trap_install $swp1 ingress
110239e754aSPetr Machata	slow_path_trap_install $swp1 egress
111239e754aSPetr Machata
112239e754aSPetr Machata	tests_run
113239e754aSPetr Machata
114239e754aSPetr Machata	slow_path_trap_uninstall $swp1 egress
115239e754aSPetr Machata	slow_path_trap_uninstall $swp1 ingress
116239e754aSPetr Machata}
117239e754aSPetr Machata
118239e754aSPetr Machatatrap cleanup EXIT
119239e754aSPetr Machata
120239e754aSPetr Machatasetup_prepare
121239e754aSPetr Machatasetup_wait
122239e754aSPetr Machata
123239e754aSPetr Machatatcflags="skip_hw"
124239e754aSPetr Machatatests
125239e754aSPetr Machata
126239e754aSPetr Machataif ! tc_offload_check; then
127239e754aSPetr Machata	echo "WARN: Could not test offloaded functionality"
128239e754aSPetr Machataelse
129239e754aSPetr Machata	tcflags="skip_sw"
130239e754aSPetr Machata	tests
131239e754aSPetr Machatafi
132239e754aSPetr Machata
133239e754aSPetr Machataexit $EXIT_STATUS
134