File Index
Files and directories
Sign in
FILE

mirror_gre_lag_lacp.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/net/forwarding/mirror_gre_lag_lacp.sh BASH
  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# team device.
  6#
  7# +----------------------+                             +----------------------+
  8# | H1                   |                             |                   H2 |
  9# |    + $h1.333         |                             |        $h1.555 +     |
 10# |    | 192.0.2.1/28    |                             |  192.0.2.18/28 |     |
 11# +----|-----------------+                             +----------------|-----+
 12#      |                                $h1                             |
 13#      +---------------------------------+------------------------------+
 14#                                        |
 15# +--------------------------------------|------------------------------------+
 16# | SW                                   o---> mirror                         |
 17# |                                      |                                    |
 18# |   +----------------------------------+------------------------------+     |
 19# |   |                                $swp1                            |     |
 20# |   + $swp1.333                                             $swp1.555 +     |
 21# |     192.0.2.2/28                                      192.0.2.17/28       |
 22# |                                                                           |
 23# |                                                                           |
 24# |   + gt4 (gretap)      ,-> + lag1 (team)                                   |
 25# |     loc=192.0.2.129   |   | 192.0.2.129/28                                |
 26# |     rem=192.0.2.130 --'   |                                               |
 27# |     ttl=100               |                                               |
 28# |     tos=inherit           |                                               |
 29# |      _____________________|______________________                         |
 30# |     /                                            \                        |
 31# |    /                                              \                       |
 32# |   + $swp3                                          + $swp4                |
 33# +---|------------------------------------------------|----------------------+
 34#     |                                                |
 35# +---|------------------------------------------------|----------------------+
 36# |   + $h3                                            + $h4               H3 |
 37# |    \                                              /                       |
 38# |     \____________________________________________/                        |
 39# |                           |                                               |
 40# |                           + lag2 (team)  ------>   + gt4-dst (gretap)     |
 41# |                             192.0.2.130/28           loc=192.0.2.130      |
 42# |                                                      rem=192.0.2.129      |
 43# |                                                      ttl=100              |
 44# |                                                      tos=inherit          |
 45# |                                                                           |
 46# |                                                                           |
 47# |                                                                           |
 48# |                                                                           |
 49# +---------------------------------------------------------------------------+
 50
 51ALL_TESTS="
 52	test_mirror_gretap_first
 53	test_mirror_gretap_second
 54"
 55
 56REQUIRE_TEAMD="yes"
 57NUM_NETIFS=6
 58source lib.sh
 59source mirror_lib.sh
 60
 61vlan_host_create()
 62{
 63	local if_name=$1; shift
 64	local vid=$1; shift
 65	local vrf_name=$1; shift
 66	local ips=("${@}")
 67
 68	vrf_create $vrf_name
 69	ip link set dev $vrf_name up
 70	vlan_create $if_name $vid $vrf_name "${ips[@]}"
 71}
 72
 73vlan_host_destroy()
 74{
 75	local if_name=$1; shift
 76	local vid=$1; shift
 77	local vrf_name=$1; shift
 78
 79	vlan_destroy $if_name $vid
 80	ip link set dev $vrf_name down
 81	vrf_destroy $vrf_name
 82}
 83
 84h1_create()
 85{
 86	vlan_host_create $h1 333 vrf-h1 192.0.2.1/28
 87	ip -4 route add 192.0.2.16/28 vrf vrf-h1 nexthop via 192.0.2.2
 88}
 89
 90h1_destroy()
 91{
 92	ip -4 route del 192.0.2.16/28 vrf vrf-h1
 93	vlan_host_destroy $h1 333 vrf-h1
 94}
 95
 96h2_create()
 97{
 98	vlan_host_create $h1 555 vrf-h2 192.0.2.18/28
 99	ip -4 route add 192.0.2.0/28 vrf vrf-h2 nexthop via 192.0.2.17
100}
101
102h2_destroy()
103{
104	ip -4 route del 192.0.2.0/28 vrf vrf-h2
105	vlan_host_destroy $h1 555 vrf-h2
106}
107
108h3_create_team()
109{
110	team_create lag2 lacp $h3 $h4
111	__simple_if_init lag2 vrf-h3 192.0.2.130/32
112	ip -4 route add vrf vrf-h3 192.0.2.129/32 dev lag2
113}
114
115h3_destroy_team()
116{
117	ip -4 route del vrf vrf-h3 192.0.2.129/32 dev lag2
118	__simple_if_fini lag2 192.0.2.130/32
119	team_destroy lag2
120
121	ip link set dev $h3 down
122	ip link set dev $h4 down
123}
124
125h3_create()
126{
127	vrf_create vrf-h3
128	ip link set dev vrf-h3 up
129	h3_create_team
130
131	tunnel_create gt4-dst gretap 192.0.2.130 192.0.2.129 \
132		      ttl 100 tos inherit
133	ip link set dev gt4-dst master vrf-h3
134	tc qdisc add dev gt4-dst clsact
135}
136
137h3_destroy()
138{
139	tc qdisc del dev gt4-dst clsact
140	ip link set dev gt4-dst nomaster
141	tunnel_destroy gt4-dst
142
143	h3_destroy_team
144	ip link set dev vrf-h3 down
145	vrf_destroy vrf-h3
146}
147
148switch_create()
149{
150	ip link set dev $swp1 up
151	tc qdisc add dev $swp1 clsact
152	vlan_create $swp1 333 "" 192.0.2.2/28
153	vlan_create $swp1 555 "" 192.0.2.17/28
154
155	tunnel_create gt4 gretap 192.0.2.129 192.0.2.130 \
156		      ttl 100 tos inherit
157
158	ip link set dev $swp3 up
159	ip link set dev $swp4 up
160	team_create lag1 lacp $swp3 $swp4
161	__addr_add_del lag1 add 192.0.2.129/32
162	ip -4 route add 192.0.2.130/32 dev lag1
163}
164
165switch_destroy()
166{
167	ip -4 route del 192.0.2.130/32 dev lag1
168	__addr_add_del lag1 del 192.0.2.129/32
169	team_destroy lag1
170
171	ip link set dev $swp4 down
172	ip link set dev $swp3 down
173
174	tunnel_destroy gt4
175
176	vlan_destroy $swp1 555
177	vlan_destroy $swp1 333
178	tc qdisc del dev $swp1 clsact
179	ip link set dev $swp1 down
180}
181
182setup_prepare()
183{
184	h1=${NETIFS[p1]}
185	swp1=${NETIFS[p2]}
186
187	swp3=${NETIFS[p3]}
188	h3=${NETIFS[p4]}
189
190	swp4=${NETIFS[p5]}
191	h4=${NETIFS[p6]}
192
193	vrf_prepare
194
195	ip link set dev $h1 up
196	h1_create
197	h2_create
198	h3_create
199	switch_create
200}
201
202cleanup()
203{
204	pre_cleanup
205
206	switch_destroy
207	h3_destroy
208	h2_destroy
209	h1_destroy
210	ip link set dev $h1 down
211
212	vrf_cleanup
213}
214
215test_lag_slave()
216{
217	local up_dev=$1; shift
218	local down_dev=$1; shift
219	local what=$1; shift
220
221	RET=0
222
223	mirror_install $swp1 ingress gt4 \
224		       "proto 802.1q flower vlan_id 333"
225	vlan_capture_install gt4-dst "vlan_ethtype ipv4 ip_proto icmp type 8"
226
227	# Move $down_dev away from the team. That will prompt change in
228	# txability of the connected device, without changing its upness. The
229	# driver should notice the txability change and move the traffic to the
230	# other slave.
231	ip link set dev $down_dev nomaster
232	sleep 2
233	mirror_test vrf-h1 192.0.2.1 192.0.2.18 gt4-dst 100 10
234
235	# Test lack of connectivity when neither slave is txable.
236	ip link set dev $up_dev nomaster
237	sleep 2
238	mirror_test vrf-h1 192.0.2.1 192.0.2.18 gt4-dst 100 0
239
240	vlan_capture_uninstall gt4-dst
241	mirror_uninstall $swp1 ingress
242
243	# Recreate H3's team device, because mlxsw, which this test is
244	# predominantly mean to test, requires a bottom-up construction and
245	# doesn't allow enslavement to a device that already has an upper.
246	h3_destroy_team
247	h3_create_team
248	# Wait for ${h,swp}{3,4}.
249	setup_wait
250
251	log_test "$what"
252}
253
254test_mirror_gretap_first()
255{
256	test_lag_slave $h3 $h4 "mirror to gretap: LAG first slave"
257}
258
259test_mirror_gretap_second()
260{
261	test_lag_slave $h4 $h3 "mirror to gretap: LAG second slave"
262}
263
264trap cleanup EXIT
265
266setup_prepare
267setup_wait
268
269tests_run
270
271exit $EXIT_STATUS
~/ Read-only file preview.