Linux-libre 4.19.8-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / net / forwarding / mirror_gre_bridge_1d.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3
4 # Test for "tc action mirred egress mirror" when the underlay route points at a
5 # bridge device without vlan filtering (802.1d).
6 #
7 # This test uses standard topology for testing mirror-to-gretap. See
8 # mirror_gre_topo_lib.sh for more details. The full topology is as follows:
9 #
10 #  +---------------------+                             +---------------------+
11 #  | H1                  |                             |                  H2 |
12 #  |     + $h1           |                             |           $h2 +     |
13 #  |     | 192.0.2.1/28  |                             |  192.0.2.2/28 |     |
14 #  +-----|---------------+                             +---------------|-----+
15 #        |                                                             |
16 #  +-----|-------------------------------------------------------------|-----+
17 #  | SW  o---> mirror                                                  |     |
18 #  | +---|-------------------------------------------------------------|---+ |
19 #  | |   + $swp1            + br1 (802.1q bridge)                $swp2 +   | |
20 #  | +---------------------------------------------------------------------+ |
21 #  |                                                                         |
22 #  | +---------------------------------------------------------------------+ |
23 #  | |                      + br2 (802.1d bridge)                          | |
24 #  | |                        192.0.2.129/28                               | |
25 #  | |   + $swp3              2001:db8:2::1/64                             | |
26 #  | +---|-----------------------------------------------------------------+ |
27 #  |     |                                          ^                    ^   |
28 #  |     |                     + gt6 (ip6gretap)    | + gt4 (gretap)     |   |
29 #  |     |                     : loc=2001:db8:2::1  | : loc=192.0.2.129  |   |
30 #  |     |                     : rem=2001:db8:2::2 -+ : rem=192.0.2.130 -+   |
31 #  |     |                     : ttl=100              : ttl=100              |
32 #  |     |                     : tos=inherit          : tos=inherit          |
33 #  +-----|---------------------:----------------------:----------------------+
34 #        |                     :                      :
35 #  +-----|---------------------:----------------------:----------------------+
36 #  | H3  + $h3                 + h3-gt6(ip6gretap)    + h3-gt4 (gretap)      |
37 #  |       192.0.2.130/28        loc=2001:db8:2::2      loc=192.0.2.130      |
38 #  |       2001:db8:2::2/64      rem=2001:db8:2::1      rem=192.0.2.129      |
39 #  |                             ttl=100                ttl=100              |
40 #  |                             tos=inherit            tos=inherit          |
41 #  +-------------------------------------------------------------------------+
42
43 ALL_TESTS="
44         test_gretap
45         test_ip6gretap
46 "
47
48 NUM_NETIFS=6
49 source lib.sh
50 source mirror_lib.sh
51 source mirror_gre_lib.sh
52 source mirror_gre_topo_lib.sh
53
54 setup_prepare()
55 {
56         h1=${NETIFS[p1]}
57         swp1=${NETIFS[p2]}
58
59         swp2=${NETIFS[p3]}
60         h2=${NETIFS[p4]}
61
62         swp3=${NETIFS[p5]}
63         h3=${NETIFS[p6]}
64
65         vrf_prepare
66         mirror_gre_topo_create
67
68         ip link add name br2 type bridge vlan_filtering 0
69         ip link set dev br2 up
70
71         ip link set dev $swp3 master br2
72         ip route add 192.0.2.130/32 dev br2
73         ip -6 route add 2001:db8:2::2/128 dev br2
74
75         ip address add dev br2 192.0.2.129/28
76         ip address add dev br2 2001:db8:2::1/64
77
78         ip address add dev $h3 192.0.2.130/28
79         ip address add dev $h3 2001:db8:2::2/64
80 }
81
82 cleanup()
83 {
84         pre_cleanup
85
86         ip address del dev $h3 2001:db8:2::2/64
87         ip address del dev $h3 192.0.2.130/28
88         ip link del dev br2
89
90         mirror_gre_topo_destroy
91         vrf_cleanup
92 }
93
94 test_gretap()
95 {
96         full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap"
97         full_test_span_gre_dir gt4 egress 0 8 "mirror to gretap"
98 }
99
100 test_ip6gretap()
101 {
102         full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap"
103         full_test_span_gre_dir gt6 egress 0 8 "mirror to ip6gretap"
104 }
105
106 test_all()
107 {
108         slow_path_trap_install $swp1 ingress
109         slow_path_trap_install $swp1 egress
110
111         tests_run
112
113         slow_path_trap_uninstall $swp1 egress
114         slow_path_trap_uninstall $swp1 ingress
115 }
116
117 trap cleanup EXIT
118
119 setup_prepare
120 setup_wait
121
122 tcflags="skip_hw"
123 test_all
124
125 if ! tc_offload_check; then
126         echo "WARN: Could not test offloaded functionality"
127 else
128         tcflags="skip_sw"
129         test_all
130 fi
131
132 exit $EXIT_STATUS