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) | | H2 (vrf) |
6# | | | |
7# | + LAG1 (team) | | + LAG4 (team) |
8# | | 192.0.2.1/28 | | | 192.0.2.130/28 |
9# | | 2001:db8:1::1/64 | | | 2001:db8:2::2/64 |
10# | __^___ | | __^_____ |
11# | / \ | | / \ |
12# | + $h1 + $h4 | | + $h2 + $h3 |
13# | | | | | | | |
14# +----|--------|--------------+ +-|----------|-------------+
15# | | | |
16# +----|--------|------------------------------------|----------|-------------+
17# | SW | | | | |
18# | + $swp1 + $swp4 + $swp2 + $swp3 |
19# | \__ ___/ \__ _____/ |
20# | v v |
21# | +------|-------------------------------+ | |
22# | | + LAG2 BR1 (802.1q) | + LAG3 (team) |
23# | | (team) 192.0.2.2/28 | 192.0.2.129/28 |
24# | | 2001:db8:1::2/64 | 2001:db8:2::1/64 |
25# | | | |
26# | +--------------------------------------+ |
27# +---------------------------------------------------------------------------+
28
29: ${ALL_TESTS:="
30 ping_ipv4
31 ping_ipv6
32
33 $(: exercise remastering of LAG2 slaves )
34 config_deslave_swp4
35 config_wait
36 ping_ipv4
37 ping_ipv6
38 config_enslave_swp4
39 config_deslave_swp1
40 config_wait
41 ping_ipv4
42 ping_ipv6
43 config_deslave_swp4
44 config_enslave_swp1
45 config_enslave_swp4
46 config_wait
47 ping_ipv4
48 ping_ipv6
49
50 $(: exercise remastering of LAG2 itself )
51 config_remaster_lag2
52 config_wait
53 ping_ipv4
54 ping_ipv6
55
56 $(: exercise remastering of LAG3 slaves )
57 config_deslave_swp2
58 config_wait
59 ping_ipv4
60 ping_ipv6
61 config_enslave_swp2
62 config_deslave_swp3
63 config_wait
64 ping_ipv4
65 ping_ipv6
66 config_deslave_swp2
67 config_enslave_swp3
68 config_enslave_swp2
69 config_wait
70 ping_ipv4
71 ping_ipv6
72
73 $(: move LAG3 to a bridge and then out )
74 config_remaster_lag3
75 config_wait
76 ping_ipv4
77 ping_ipv6
78 "}
79REQUIRE_TEAMD="yes"
80NUM_NETIFS=8
81: ${lib_dir:=.}
82source $lib_dir/lib.sh
83$EXTRA_SOURCE
84
85h1_create()
86{
87 team_create lag1 lacp
88 ip link set dev lag1 address $(mac_get $h1)
89 ip link set dev $h1 master lag1
90 ip link set dev $h4 master lag1
91 simple_if_init lag1 192.0.2.1/28 2001:db8:1::1/64
92 ip link set dev $h1 up
93 ip link set dev $h4 up
94 ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2
95 ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2
96}
97
98h1_destroy()
99{
100 ip -6 route del 2001:db8:2::/64 vrf vlag1
101 ip -4 route del 192.0.2.128/28 vrf vlag1
102 ip link set dev $h4 down
103 ip link set dev $h1 down
104 simple_if_fini lag1 192.0.2.1/28 2001:db8:1::1/64
105 ip link set dev $h4 nomaster
106 ip link set dev $h1 nomaster
107 team_destroy lag1
108}
109
110h2_create()
111{
112 team_create lag4 lacp
113 ip link set dev lag4 address $(mac_get $h2)
114 ip link set dev $h2 master lag4
115 ip link set dev $h3 master lag4
116 simple_if_init lag4 192.0.2.130/28 2001:db8:2::2/64
117 ip link set dev $h2 up
118 ip link set dev $h3 up
119 ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129
120 ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1
121}
122
123h2_destroy()
124{
125 ip -6 route del 2001:db8:1::/64 vrf vlag4
126 ip -4 route del 192.0.2.0/28 vrf vlag4
127 ip link set dev $h3 down
128 ip link set dev $h2 down
129 simple_if_fini lag4 192.0.2.130/28 2001:db8:2::2/64
130 ip link set dev $h3 nomaster
131 ip link set dev $h2 nomaster
132 team_destroy lag4
133}
134
135router_create()
136{
137 team_create lag2 lacp
138 ip link set dev lag2 address $(mac_get $swp1)
139 ip link set dev $swp1 master lag2
140 ip link set dev $swp4 master lag2
141
142 ip link add name br1 address $(mac_get lag2) \
143 type bridge vlan_filtering 1
144 ip link set dev lag2 master br1
145
146 ip link set dev $swp1 up
147 ip link set dev $swp4 up
148 ip link set dev br1 up
149
150 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64
151
152 team_create lag3 lacp
153 ip link set dev lag3 address $(mac_get $swp2)
154 ip link set dev $swp2 master lag3
155 ip link set dev $swp3 master lag3
156 ip link set dev $swp2 up
157 ip link set dev $swp3 up
158 __addr_add_del lag3 add 192.0.2.129/28 2001:db8:2::1/64
159}
160
161router_destroy()
162{
163 __addr_add_del lag3 del 192.0.2.129/28 2001:db8:2::1/64
164 ip link set dev $swp3 down
165 ip link set dev $swp2 down
166 ip link set dev $swp3 nomaster
167 ip link set dev $swp2 nomaster
168 team_destroy lag3
169
170 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64
171
172 ip link set dev $swp4 down
173 ip link set dev $swp1 down
174 ip link set dev br1 down
175
176 ip link set dev lag2 nomaster
177 ip link del dev br1
178
179 ip link set dev $swp4 nomaster
180 ip link set dev $swp1 nomaster
181 team_destroy lag2
182}
183
184config_remaster_lag2()
185{
186 log_info "Remaster bridge slave"
187
188 ip link set dev lag2 nomaster
189 sleep 2
190 ip link set dev lag2 master br1
191}
192
193config_remaster_lag3()
194{
195 log_info "Move lag3 to the bridge, then out again"
196
197 ip link set dev lag3 master br1
198 sleep 2
199 ip link set dev lag3 nomaster
200}
201
202config_deslave()
203{
204 local netdev=$1; shift
205
206 log_info "Deslave $netdev"
207 ip link set dev $netdev down
208 ip link set dev $netdev nomaster
209 ip link set dev $netdev up
210}
211
212config_deslave_swp1()
213{
214 config_deslave $swp1
215}
216
217config_deslave_swp2()
218{
219 config_deslave $swp2
220}
221
222config_deslave_swp3()
223{
224 config_deslave $swp3
225}
226
227config_deslave_swp4()
228{
229 config_deslave $swp4
230}
231
232config_enslave()
233{
234 local netdev=$1; shift
235 local master=$1; shift
236
237 log_info "Enslave $netdev to $master"
238 ip link set dev $netdev down
239 ip link set dev $netdev master $master
240 ip link set dev $netdev up
241}
242
243config_enslave_swp1()
244{
245 config_enslave $swp1 lag2
246}
247
248config_enslave_swp2()
249{
250 config_enslave $swp2 lag3
251}
252
253config_enslave_swp3()
254{
255 config_enslave $swp3 lag3
256}
257
258config_enslave_swp4()
259{
260 config_enslave $swp4 lag2
261}
262
263config_wait()
264{
265 setup_wait_dev lag2
266 setup_wait_dev lag3
267}
268
269setup_prepare()
270{
271 h1=${NETIFS[p1]}
272 swp1=${NETIFS[p2]}
273
274 swp2=${NETIFS[p3]}
275 h2=${NETIFS[p4]}
276
277 swp3=${NETIFS[p5]}
278 h3=${NETIFS[p6]}
279
280 h4=${NETIFS[p7]}
281 swp4=${NETIFS[p8]}
282
283 vrf_prepare
284
285 h1_create
286 h2_create
287
288 router_create
289
290 forwarding_enable
291}
292
293cleanup()
294{
295 pre_cleanup
296
297 forwarding_restore
298
299 router_destroy
300
301 h2_destroy
302 h1_destroy
303
304 vrf_cleanup
305}
306
307ping_ipv4()
308{
309 ping_test lag1 192.0.2.130
310}
311
312ping_ipv6()
313{
314 ping6_test lag1 2001:db8:2::2
315}
316
317trap cleanup EXIT
318
319setup_prepare
320setup_wait
321
322tests_run
323
324exit $EXIT_STATUS