Skip to content

Commit 3f0c4e7

Browse files
pmachatadavem330
authored andcommitted
selftests: router_bridge_lag: Add a new selftest
Add a selftest to verify that routing through a bridge works when LAG is used instead of physical ports. Signed-off-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Danielle Ratson <danieller@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 49e15de commit 3f0c4e7

File tree

2 files changed

+324
-0
lines changed

2 files changed

+324
-0
lines changed

tools/testing/selftests/net/forwarding/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ TEST_PROGS = bridge_igmp.sh \
6565
q_in_vni.sh \
6666
router_bridge.sh \
6767
router_bridge_1d.sh \
68+
router_bridge_lag.sh \
6869
router_bridge_vlan.sh \
6970
router_bridge_vlan_upper.sh \
7071
router_bridge_pvid_vlan_upper.sh \
Lines changed: 323 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,323 @@
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+
"}
79+
NUM_NETIFS=8
80+
: ${lib_dir:=.}
81+
source $lib_dir/lib.sh
82+
$EXTRA_SOURCE
83+
84+
h1_create()
85+
{
86+
team_create lag1 lacp
87+
ip link set dev lag1 address $(mac_get $h1)
88+
ip link set dev $h1 master lag1
89+
ip link set dev $h4 master lag1
90+
simple_if_init lag1 192.0.2.1/28 2001:db8:1::1/64
91+
ip link set dev $h1 up
92+
ip link set dev $h4 up
93+
ip -4 route add 192.0.2.128/28 vrf vlag1 nexthop via 192.0.2.2
94+
ip -6 route add 2001:db8:2::/64 vrf vlag1 nexthop via 2001:db8:1::2
95+
}
96+
97+
h1_destroy()
98+
{
99+
ip -6 route del 2001:db8:2::/64 vrf vlag1
100+
ip -4 route del 192.0.2.128/28 vrf vlag1
101+
ip link set dev $h4 down
102+
ip link set dev $h1 down
103+
simple_if_fini lag1 192.0.2.1/28 2001:db8:1::1/64
104+
ip link set dev $h4 nomaster
105+
ip link set dev $h1 nomaster
106+
team_destroy lag1
107+
}
108+
109+
h2_create()
110+
{
111+
team_create lag4 lacp
112+
ip link set dev lag4 address $(mac_get $h2)
113+
ip link set dev $h2 master lag4
114+
ip link set dev $h3 master lag4
115+
simple_if_init lag4 192.0.2.130/28 2001:db8:2::2/64
116+
ip link set dev $h2 up
117+
ip link set dev $h3 up
118+
ip -4 route add 192.0.2.0/28 vrf vlag4 nexthop via 192.0.2.129
119+
ip -6 route add 2001:db8:1::/64 vrf vlag4 nexthop via 2001:db8:2::1
120+
}
121+
122+
h2_destroy()
123+
{
124+
ip -6 route del 2001:db8:1::/64 vrf vlag4
125+
ip -4 route del 192.0.2.0/28 vrf vlag4
126+
ip link set dev $h3 down
127+
ip link set dev $h2 down
128+
simple_if_fini lag4 192.0.2.130/28 2001:db8:2::2/64
129+
ip link set dev $h3 nomaster
130+
ip link set dev $h2 nomaster
131+
team_destroy lag4
132+
}
133+
134+
router_create()
135+
{
136+
team_create lag2 lacp
137+
ip link set dev lag2 address $(mac_get $swp1)
138+
ip link set dev $swp1 master lag2
139+
ip link set dev $swp4 master lag2
140+
141+
ip link add name br1 address $(mac_get lag2) \
142+
type bridge vlan_filtering 1
143+
ip link set dev lag2 master br1
144+
145+
ip link set dev $swp1 up
146+
ip link set dev $swp4 up
147+
ip link set dev br1 up
148+
149+
__addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64
150+
151+
team_create lag3 lacp
152+
ip link set dev lag3 address $(mac_get $swp2)
153+
ip link set dev $swp2 master lag3
154+
ip link set dev $swp3 master lag3
155+
ip link set dev $swp2 up
156+
ip link set dev $swp3 up
157+
__addr_add_del lag3 add 192.0.2.129/28 2001:db8:2::1/64
158+
}
159+
160+
router_destroy()
161+
{
162+
__addr_add_del lag3 del 192.0.2.129/28 2001:db8:2::1/64
163+
ip link set dev $swp3 down
164+
ip link set dev $swp2 down
165+
ip link set dev $swp3 nomaster
166+
ip link set dev $swp2 nomaster
167+
team_destroy lag3
168+
169+
__addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64
170+
171+
ip link set dev $swp4 down
172+
ip link set dev $swp1 down
173+
ip link set dev br1 down
174+
175+
ip link set dev lag2 nomaster
176+
ip link del dev br1
177+
178+
ip link set dev $swp4 nomaster
179+
ip link set dev $swp1 nomaster
180+
team_destroy lag2
181+
}
182+
183+
config_remaster_lag2()
184+
{
185+
log_info "Remaster bridge slave"
186+
187+
ip link set dev lag2 nomaster
188+
sleep 2
189+
ip link set dev lag2 master br1
190+
}
191+
192+
config_remaster_lag3()
193+
{
194+
log_info "Move lag3 to the bridge, then out again"
195+
196+
ip link set dev lag3 master br1
197+
sleep 2
198+
ip link set dev lag3 nomaster
199+
}
200+
201+
config_deslave()
202+
{
203+
local netdev=$1; shift
204+
205+
log_info "Deslave $netdev"
206+
ip link set dev $netdev down
207+
ip link set dev $netdev nomaster
208+
ip link set dev $netdev up
209+
}
210+
211+
config_deslave_swp1()
212+
{
213+
config_deslave $swp1
214+
}
215+
216+
config_deslave_swp2()
217+
{
218+
config_deslave $swp2
219+
}
220+
221+
config_deslave_swp3()
222+
{
223+
config_deslave $swp3
224+
}
225+
226+
config_deslave_swp4()
227+
{
228+
config_deslave $swp4
229+
}
230+
231+
config_enslave()
232+
{
233+
local netdev=$1; shift
234+
local master=$1; shift
235+
236+
log_info "Enslave $netdev to $master"
237+
ip link set dev $netdev down
238+
ip link set dev $netdev master $master
239+
ip link set dev $netdev up
240+
}
241+
242+
config_enslave_swp1()
243+
{
244+
config_enslave $swp1 lag2
245+
}
246+
247+
config_enslave_swp2()
248+
{
249+
config_enslave $swp2 lag3
250+
}
251+
252+
config_enslave_swp3()
253+
{
254+
config_enslave $swp3 lag3
255+
}
256+
257+
config_enslave_swp4()
258+
{
259+
config_enslave $swp4 lag2
260+
}
261+
262+
config_wait()
263+
{
264+
setup_wait_dev lag2
265+
setup_wait_dev lag3
266+
}
267+
268+
setup_prepare()
269+
{
270+
h1=${NETIFS[p1]}
271+
swp1=${NETIFS[p2]}
272+
273+
swp2=${NETIFS[p3]}
274+
h2=${NETIFS[p4]}
275+
276+
swp3=${NETIFS[p5]}
277+
h3=${NETIFS[p6]}
278+
279+
h4=${NETIFS[p7]}
280+
swp4=${NETIFS[p8]}
281+
282+
vrf_prepare
283+
284+
h1_create
285+
h2_create
286+
287+
router_create
288+
289+
forwarding_enable
290+
}
291+
292+
cleanup()
293+
{
294+
pre_cleanup
295+
296+
forwarding_restore
297+
298+
router_destroy
299+
300+
h2_destroy
301+
h1_destroy
302+
303+
vrf_cleanup
304+
}
305+
306+
ping_ipv4()
307+
{
308+
ping_test lag1 192.0.2.130
309+
}
310+
311+
ping_ipv6()
312+
{
313+
ping6_test lag1 2001:db8:2::2
314+
}
315+
316+
trap cleanup EXIT
317+
318+
setup_prepare
319+
setup_wait
320+
321+
tests_run
322+
323+
exit $EXIT_STATUS

0 commit comments

Comments
 (0)