Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# +--------------------------------------------+
5# | H1 (vrf) |
6# | |
7# | + LAG1.100 + LAG1.200 |
8# | | 192.0.2.1/28 | 192.0.2.17/28 |
9# | | 2001:db8:1::1/64 | 2001:db8:3:1/64 |
10# | \___________ _______/ |
11# | v |
12# | + LAG1 (team) |
13# | | |
14# | ____^____ |
15# | / \ |
16# | + $h1 + $h4 |
17# | | | |
18# +----------|-----------|---------------------+
19# | |
20# +----------|-----------|---------------------+
21# | SW | | |
22# | + $swp1 + $swp4 |
23# | \____ ____/ |
24# | v |
25# | LAG2 (team) + |
26# | | |
27# | _______^______________ |
28# | / \ |
29# | +------|------------+ +-------|----------+ |
30# | | + LAG2.100 | | + LAG2.200 | |
31# | | | | | |
32# | | BR1 (802.1d) | | BR2 (802.1d) | |
33# | | 192.0.2.2/28 | | 192.0.2.18/28 | |
34# | | 2001:db8:1::2/64 | | 2001:db8:3:2/64 | |
35# | | | | | |
36# | +-------------------+ +------------------+ |
37# | |
38# | + LAG3.100 + LAG3.200 |
39# | | 192.0.2.129/28 | 192.0.2.145/28 |
40# | | 2001:db8:2::1/64 | 2001:db8:4::1/64 |
41# | | | |
42# | \_________ ___________/ |
43# | v |
44# | + LAG3 (team) |
45# | ____|____ |
46# | / \ |
47# | + $swp2 + $swp3 |
48# | | | |
49# +-------|---------|--------------------------+
50# | |
51# +-------|---------|--------------------------+
52# | | | |
53# | + $h2 + $h3 |
54# | \____ ___/ |
55# | | |
56# | + LAG4 (team) |
57# | | |
58# | __________^__________ |
59# | / \ |
60# | | | |
61# | + LAG4.100 + LAG4.200 |
62# | 192.0.2.130/28 192.0.2.146/28 |
63# | 2001:db8:2::2/64 2001:db8:4::2/64 |
64# | |
65# | H2 (vrf) |
66# +--------------------------------------------+
67
68ALL_TESTS="
69 ping_ipv4
70 ping_ipv6
71
72 $(: exercise remastering of LAG2 slaves )
73 config_deslave_swp4
74 config_wait
75 ping_ipv4
76 ping_ipv6
77 config_enslave_swp4
78 config_deslave_swp1
79 config_wait
80 ping_ipv4
81 ping_ipv6
82 config_deslave_swp4
83 config_enslave_swp1
84 config_enslave_swp4
85 config_wait
86 ping_ipv4
87 ping_ipv6
88
89 $(: exercise remastering of LAG2 itself )
90 config_remaster_lag2
91 config_wait
92 ping_ipv4
93 ping_ipv6
94
95 $(: exercise remastering of LAG3 slaves )
96 config_deslave_swp2
97 config_wait
98 ping_ipv4
99 ping_ipv6
100 config_enslave_swp2
101 config_deslave_swp3
102 config_wait
103 ping_ipv4
104 ping_ipv6
105 config_deslave_swp2
106 config_enslave_swp3
107 config_enslave_swp2
108 config_wait
109 ping_ipv4
110 ping_ipv6
111"
112REQUIRE_TEAMD="yes"
113NUM_NETIFS=8
114source lib.sh
115
116h1_create()
117{
118 team_create lag1 lacp
119 ip link set dev lag1 addrgenmode none
120 ip link set dev lag1 address $(mac_get $h1)
121 ip link set dev $h1 master lag1
122 ip link set dev $h4 master lag1
123 simple_if_init lag1
124 ip link set dev $h1 up
125 ip link set dev $h4 up
126
127 vlan_create lag1 100 vlag1 192.0.2.1/28 2001:db8:1::1/64
128 vlan_create lag1 200 vlag1 192.0.2.17/28 2001:db8:3::1/64
129
130 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2
131 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2
132
133 ip -4 route add 192.0.2.144/28 vrf vlag1 nexthop via 192.0.2.18
134 ip -6 route add 2001:db8:4::/64 vrf vlag1 nexthop via 2001:db8:3::2
135}
136
137h1_destroy()
138{
139 ip -6 route del 2001:db8:4::/64 vrf vlag1
140 ip -4 route del 192.0.2.144/28 vrf vlag1
141
142 ip -6 route del 2001:db8:2::/64 vrf vlag1
143 ip -4 route del 192.0.2.128/28 vrf vlag1
144
145 vlan_destroy lag1 200
146 vlan_destroy lag1 100
147
148 ip link set dev $h4 down
149 ip link set dev $h1 down
150 simple_if_fini lag1
151 ip link set dev $h4 nomaster
152 ip link set dev $h1 nomaster
153 team_destroy lag1
154}
155
156h2_create()
157{
158 team_create lag4 lacp
159 ip link set dev lag4 addrgenmode none
160 ip link set dev lag4 address $(mac_get $h2)
161 ip link set dev $h2 master lag4
162 ip link set dev $h3 master lag4
163 simple_if_init lag4
164 ip link set dev $h2 up
165 ip link set dev $h3 up
166
167 vlan_create lag4 100 vlag4 192.0.2.130/28 2001:db8:2::2/64
168 vlan_create lag4 200 vlag4 192.0.2.146/28 2001:db8:4::2/64
169
170 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129
171 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1
172
173 ip -4 route add 192.0.2.16/28 vrf vlag4 nexthop via 192.0.2.145
174 ip -6 route add 2001:db8:3::/64 vrf vlag4 nexthop via 2001:db8:4::1
175}
176
177h2_destroy()
178{
179 ip -6 route del 2001:db8:3::/64 vrf vlag4
180 ip -4 route del 192.0.2.16/28 vrf vlag4
181
182 ip -6 route del 2001:db8:1::/64 vrf vlag4
183 ip -4 route del 192.0.2.0/28 vrf vlag4
184
185 vlan_destroy lag4 200
186 vlan_destroy lag4 100
187
188 ip link set dev $h3 down
189 ip link set dev $h2 down
190 simple_if_fini lag4
191 ip link set dev $h3 nomaster
192 ip link set dev $h2 nomaster
193 team_destroy lag4
194}
195
196router_create()
197{
198 team_create lag2 lacp
199 ip link set dev lag2 addrgenmode none
200 ip link set dev lag2 address $(mac_get $swp1)
201 ip link set dev $swp1 master lag2
202 ip link set dev $swp4 master lag2
203
204 vlan_create lag2 100
205 vlan_create lag2 200
206
207 ip link add name br1 type bridge vlan_filtering 0
208 ip link set dev br1 address $(mac_get lag2.100)
209 ip link set dev lag2.100 master br1
210
211 ip link add name br2 type bridge vlan_filtering 0
212 ip link set dev br2 address $(mac_get lag2.200)
213 ip link set dev lag2.200 master br2
214
215 ip link set dev $swp1 up
216 ip link set dev $swp4 up
217 ip link set dev br1 up
218 ip link set dev br2 up
219
220 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64
221 __addr_add_del br2 add 192.0.2.18/28 2001:db8:3::2/64
222
223 team_create lag3 lacp
224 ip link set dev lag3 addrgenmode none
225 ip link set dev lag3 address $(mac_get $swp2)
226 ip link set dev $swp2 master lag3
227 ip link set dev $swp3 master lag3
228 ip link set dev $swp2 up
229 ip link set dev $swp3 up
230
231 vlan_create lag3 100
232 vlan_create lag3 200
233
234 __addr_add_del lag3.100 add 192.0.2.129/28 2001:db8:2::1/64
235 __addr_add_del lag3.200 add 192.0.2.145/28 2001:db8:4::1/64
236}
237
238router_destroy()
239{
240 __addr_add_del lag3.200 del 192.0.2.145/28 2001:db8:4::1/64
241 __addr_add_del lag3.100 del 192.0.2.129/28 2001:db8:2::1/64
242
243 vlan_destroy lag3 200
244 vlan_destroy lag3 100
245
246 ip link set dev $swp3 down
247 ip link set dev $swp2 down
248 ip link set dev $swp3 nomaster
249 ip link set dev $swp2 nomaster
250 team_destroy lag3
251
252 __addr_add_del br2 del 192.0.2.18/28 2001:db8:3::2/64
253 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64
254
255 ip link set dev br2 down
256 ip link set dev br1 down
257 ip link set dev $swp4 down
258 ip link set dev $swp1 down
259
260 ip link set dev lag2.200 nomaster
261 ip link del dev br2
262
263 ip link set dev lag2.100 nomaster
264 ip link del dev br1
265
266 vlan_destroy lag2 200
267 vlan_destroy lag2 100
268
269 ip link set dev $swp4 nomaster
270 ip link set dev $swp1 nomaster
271 team_destroy lag2
272}
273
274config_remaster_lag2()
275{
276 log_info "Remaster bridge slaves"
277
278 ip link set dev lag2.200 nomaster
279 ip link set dev lag2.100 nomaster
280 sleep 2
281 ip link set dev lag2.100 master br1
282 ip link set dev lag2.200 master br2
283}
284
285config_deslave()
286{
287 local netdev=$1; shift
288
289 log_info "Deslave $netdev"
290 ip link set dev $netdev down
291 ip link set dev $netdev nomaster
292 ip link set dev $netdev up
293}
294
295config_deslave_swp1()
296{
297 config_deslave $swp1
298}
299
300config_deslave_swp2()
301{
302 config_deslave $swp2
303}
304
305config_deslave_swp3()
306{
307 config_deslave $swp3
308}
309
310config_deslave_swp4()
311{
312 config_deslave $swp4
313}
314
315config_enslave()
316{
317 local netdev=$1; shift
318 local master=$1; shift
319
320 log_info "Enslave $netdev to $master"
321 ip link set dev $netdev down
322 ip link set dev $netdev master $master
323 ip link set dev $netdev up
324}
325
326config_enslave_swp1()
327{
328 config_enslave $swp1 lag2
329}
330
331config_enslave_swp2()
332{
333 config_enslave $swp2 lag3
334}
335
336config_enslave_swp3()
337{
338 config_enslave $swp3 lag3
339}
340
341config_enslave_swp4()
342{
343 config_enslave $swp4 lag2
344}
345
346config_wait()
347{
348 setup_wait_dev lag2
349 setup_wait_dev lag3
350}
351
352setup_prepare()
353{
354 h1=${NETIFS[p1]}
355 swp1=${NETIFS[p2]}
356
357 swp2=${NETIFS[p3]}
358 h2=${NETIFS[p4]}
359
360 swp3=${NETIFS[p5]}
361 h3=${NETIFS[p6]}
362
363 h4=${NETIFS[p7]}
364 swp4=${NETIFS[p8]}
365
366 vrf_prepare
367
368 h1_create
369 h2_create
370
371 router_create
372
373 forwarding_enable
374}
375
376cleanup()
377{
378 pre_cleanup
379
380 forwarding_restore
381
382 router_destroy
383
384 h2_destroy
385 h1_destroy
386
387 vrf_cleanup
388}
389
390ping_ipv4()
391{
392 ping_test lag1.100 192.0.2.130 ": via 100"
393 ping_test lag1.200 192.0.2.146 ": via 200"
394}
395
396ping_ipv6()
397{
398 ping6_test lag1.100 2001:db8:2::2 ": via 100"
399 ping6_test lag1.200 2001:db8:4::2 ": via 200"
400}
401
402trap cleanup EXIT
403
404setup_prepare
405setup_wait
406
407tests_run
408
409exit $EXIT_STATUS