2 # SPDX-License-Identifier: GPL-2.0
4 # Test for "tc action mirred egress mirror" when the underlay route points at a
5 # bridge device with vlan filtering (802.1q), and the egress device is a team
8 # +----------------------+ +----------------------+
10 # | + $h1.333 | | $h1.555 + |
11 # | | 192.0.2.1/28 | | 192.0.2.18/28 | |
12 # +-----|----------------+ +----------------|-----+
14 # +--------------------------------+------------------------------+
16 # +--------------------------------------|------------------------------------+
19 # | +--------------------------------+------------------------------+ |
21 # | + $swp1.333 $swp1.555 + |
22 # | 192.0.2.2/28 192.0.2.17/28 |
24 # | +-----------------------------------------------------------------------+ |
25 # | | BR1 (802.1q) | |
26 # | | + lag (team) 192.0.2.129/28 | |
27 # | | / \ 2001:db8:2::1/64 | |
28 # | +---/---\---------------------------------------------------------------+ |
30 # | | \ + gt4 (gretap) | |
31 # | | \ loc=192.0.2.129 | |
32 # | | \ rem=192.0.2.130 -+ |
36 # | | \_________________________________ |
39 # +---|------------------------------------------------|----------------------+
41 # +---|----------------------+ +---|----------------------+
42 # | + $h3 H3 | | + $h4 H4 |
43 # | 192.0.2.130/28 | | 192.0.2.130/28 |
44 # | 2001:db8:2::2/64 | | 2001:db8:2::2/64 |
45 # +--------------------------+ +--------------------------+
48 test_mirror_gretap_first
49 test_mirror_gretap_second
55 source mirror_gre_lib.sh
57 require_command $ARPING
61 local if_name=$1; shift
63 local vrf_name=$1; shift
67 ip link set dev $vrf_name up
68 vlan_create $if_name $vid $vrf_name "${ips[@]}"
73 local if_name=$1; shift
75 local vrf_name=$1; shift
77 vlan_destroy $if_name $vid
78 ip link set dev $vrf_name down
84 vlan_host_create $h1 333 vrf-h1 192.0.2.1/28
85 ip -4 route add 192.0.2.16/28 vrf vrf-h1 nexthop via 192.0.2.2
90 ip -4 route del 192.0.2.16/28 vrf vrf-h1
91 vlan_host_destroy $h1 333 vrf-h1
96 vlan_host_create $h1 555 vrf-h2 192.0.2.18/28
97 ip -4 route add 192.0.2.0/28 vrf vrf-h2 nexthop via 192.0.2.17
102 ip -4 route del 192.0.2.0/28 vrf vrf-h2
103 vlan_host_destroy $h1 555 vrf-h2
108 simple_if_init $h3 192.0.2.130/28
109 tc qdisc add dev $h3 clsact
114 tc qdisc del dev $h3 clsact
115 simple_if_fini $h3 192.0.2.130/28
120 simple_if_init $h4 192.0.2.130/28
121 tc qdisc add dev $h4 clsact
126 tc qdisc del dev $h4 clsact
127 simple_if_fini $h4 192.0.2.130/28
132 ip link set dev $swp1 up
133 tc qdisc add dev $swp1 clsact
134 vlan_create $swp1 333 "" 192.0.2.2/28
135 vlan_create $swp1 555 "" 192.0.2.17/28
137 tunnel_create gt4 gretap 192.0.2.129 192.0.2.130 \
140 ip link set dev $swp3 up
141 ip link set dev $swp4 up
143 ip link add name br1 type bridge vlan_filtering 1
144 ip link set dev br1 up
145 __addr_add_del br1 add 192.0.2.129/32
146 ip -4 route add 192.0.2.130/32 dev br1
148 team_create lag loadbalance $swp3 $swp4
149 ip link set dev lag master br1
154 ip link set dev lag nomaster
157 ip -4 route del 192.0.2.130/32 dev br1
158 __addr_add_del br1 del 192.0.2.129/32
159 ip link set dev br1 down
162 ip link set dev $swp4 down
163 ip link set dev $swp3 down
167 vlan_destroy $swp1 555
168 vlan_destroy $swp1 333
169 tc qdisc del dev $swp1 clsact
170 ip link set dev $swp1 down
186 ip link set dev $h1 up
193 trap_install $h3 ingress
194 trap_install $h4 ingress
201 trap_uninstall $h4 ingress
202 trap_uninstall $h3 ingress
209 ip link set dev $h1 down
216 local host_dev=$1; shift
217 local up_dev=$1; shift
218 local down_dev=$1; shift
223 mirror_install $swp1 ingress gt4 \
224 "proto 802.1q flower vlan_id 333 $tcflags"
226 # Test connectivity through $up_dev when $down_dev is set down.
227 ip link set dev $down_dev down
228 setup_wait_dev $up_dev
229 setup_wait_dev $host_dev
230 $ARPING -I br1 192.0.2.130 -qfc 1
232 mirror_test vrf-h1 192.0.2.1 192.0.2.18 $host_dev 1 10
234 # Test lack of connectivity when both slaves are down.
235 ip link set dev $up_dev down
237 mirror_test vrf-h1 192.0.2.1 192.0.2.18 $h3 1 0
238 mirror_test vrf-h1 192.0.2.1 192.0.2.18 $h4 1 0
240 ip link set dev $up_dev up
241 ip link set dev $down_dev up
242 mirror_uninstall $swp1 ingress
244 log_test "$what ($tcflags)"
247 test_mirror_gretap_first()
249 test_lag_slave $h3 $swp3 $swp4 "mirror to gretap: LAG first slave"
252 test_mirror_gretap_second()
254 test_lag_slave $h4 $swp4 $swp3 "mirror to gretap: LAG second slave"
259 slow_path_trap_install $swp1 ingress
260 slow_path_trap_install $swp1 egress
264 slow_path_trap_uninstall $swp1 egress
265 slow_path_trap_uninstall $swp1 ingress
276 if ! tc_offload_check; then
277 echo "WARN: Could not test offloaded functionality"