Skip to content

Commit 67d5ffb

Browse files
pmachatadavem330
authored andcommitted
selftests: mlxsw: rif_bridge: Add a new selftest
This test verifies driver behavior with regards to creation of RIFs for a bridge as LAGs are added or removed to/from it, and ports added or removed to/from the LAG. 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 6b3f468 commit 67d5ffb

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-2.0
3+
4+
lib_dir=$(dirname $0)/../../../net/forwarding
5+
6+
ALL_TESTS="
7+
bridge_rif_add
8+
bridge_rif_nomaster
9+
bridge_rif_remaster
10+
bridge_rif_nomaster_addr
11+
bridge_rif_nomaster_port
12+
bridge_rif_remaster_port
13+
"
14+
15+
NUM_NETIFS=2
16+
source $lib_dir/lib.sh
17+
source $lib_dir/devlink_lib.sh
18+
19+
setup_prepare()
20+
{
21+
swp1=${NETIFS[p1]}
22+
swp2=${NETIFS[p2]}
23+
24+
team_create lag1 lacp
25+
ip link set dev lag1 addrgenmode none
26+
ip link set dev lag1 address $(mac_get $swp1)
27+
28+
team_create lag2 lacp
29+
ip link set dev lag2 addrgenmode none
30+
ip link set dev lag2 address $(mac_get $swp2)
31+
32+
ip link add name br1 type bridge vlan_filtering 1
33+
ip link set dev br1 addrgenmode none
34+
ip link set dev br1 address $(mac_get lag1)
35+
ip link set dev br1 up
36+
37+
ip link set dev lag1 master br1
38+
39+
ip link set dev $swp1 master lag1
40+
ip link set dev $swp1 up
41+
42+
ip link set dev $swp2 master lag2
43+
ip link set dev $swp2 up
44+
}
45+
46+
cleanup()
47+
{
48+
pre_cleanup
49+
50+
ip link set dev $swp2 nomaster
51+
ip link set dev $swp2 down
52+
53+
ip link set dev $swp1 nomaster
54+
ip link set dev $swp1 down
55+
56+
ip link del dev lag2
57+
ip link set dev lag1 nomaster
58+
ip link del dev lag1
59+
60+
ip link del dev br1
61+
}
62+
63+
bridge_rif_add()
64+
{
65+
RET=0
66+
67+
local rifs_occ_t0=$(devlink_resource_occ_get rifs)
68+
__addr_add_del br1 add 192.0.2.2/28
69+
sleep 1
70+
local rifs_occ_t1=$(devlink_resource_occ_get rifs)
71+
local expected_rifs=$((rifs_occ_t0 + 1))
72+
73+
((expected_rifs == rifs_occ_t1))
74+
check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
75+
76+
log_test "Add RIF for bridge on address addition"
77+
}
78+
79+
bridge_rif_nomaster()
80+
{
81+
RET=0
82+
83+
local rifs_occ_t0=$(devlink_resource_occ_get rifs)
84+
ip link set dev lag1 nomaster
85+
sleep 1
86+
local rifs_occ_t1=$(devlink_resource_occ_get rifs)
87+
local expected_rifs=$((rifs_occ_t0 - 1))
88+
89+
((expected_rifs == rifs_occ_t1))
90+
check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
91+
92+
log_test "Drop RIF for bridge on LAG deslavement"
93+
}
94+
95+
bridge_rif_remaster()
96+
{
97+
RET=0
98+
99+
local rifs_occ_t0=$(devlink_resource_occ_get rifs)
100+
ip link set dev lag1 master br1
101+
sleep 1
102+
local rifs_occ_t1=$(devlink_resource_occ_get rifs)
103+
local expected_rifs=$((rifs_occ_t0 + 1))
104+
105+
((expected_rifs == rifs_occ_t1))
106+
check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
107+
108+
log_test "Add RIF for bridge on LAG reenslavement"
109+
}
110+
111+
bridge_rif_nomaster_addr()
112+
{
113+
local rifs_occ_t0=$(devlink_resource_occ_get rifs)
114+
115+
# Adding an address while the LAG is enslaved shouldn't generate a RIF.
116+
__addr_add_del lag1 add 192.0.2.65/28
117+
sleep 1
118+
local rifs_occ_t1=$(devlink_resource_occ_get rifs)
119+
local expected_rifs=$((rifs_occ_t0))
120+
121+
((expected_rifs == rifs_occ_t1))
122+
check_err $? "After adding IP: Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
123+
124+
# Removing the LAG from the bridge should drop RIF for the bridge (as
125+
# tested in bridge_rif_lag_nomaster), but since the LAG now has an
126+
# address, it should gain a RIF.
127+
ip link set dev lag1 nomaster
128+
sleep 1
129+
local rifs_occ_t2=$(devlink_resource_occ_get rifs)
130+
local expected_rifs=$((rifs_occ_t0))
131+
132+
((expected_rifs == rifs_occ_t2))
133+
check_err $? "After deslaving: Expected $expected_rifs RIFs, $rifs_occ_t2 are used"
134+
135+
log_test "Add RIF for LAG on deslavement from bridge"
136+
137+
__addr_add_del lag1 del 192.0.2.65/28
138+
ip link set dev lag1 master br1
139+
sleep 1
140+
}
141+
142+
bridge_rif_nomaster_port()
143+
{
144+
RET=0
145+
146+
local rifs_occ_t0=$(devlink_resource_occ_get rifs)
147+
ip link set dev $swp1 nomaster
148+
sleep 1
149+
local rifs_occ_t1=$(devlink_resource_occ_get rifs)
150+
local expected_rifs=$((rifs_occ_t0 - 1))
151+
152+
((expected_rifs == rifs_occ_t1))
153+
check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
154+
155+
log_test "Drop RIF for bridge on deslavement of port from LAG"
156+
}
157+
158+
bridge_rif_remaster_port()
159+
{
160+
RET=0
161+
162+
local rifs_occ_t0=$(devlink_resource_occ_get rifs)
163+
ip link set dev $swp1 down
164+
ip link set dev $swp1 master lag1
165+
ip link set dev $swp1 up
166+
setup_wait_dev $swp1
167+
local rifs_occ_t1=$(devlink_resource_occ_get rifs)
168+
local expected_rifs=$((rifs_occ_t0 + 1))
169+
170+
((expected_rifs == rifs_occ_t1))
171+
check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
172+
173+
log_test "Add RIF for bridge on reenslavement of port to LAG"
174+
}
175+
176+
trap cleanup EXIT
177+
178+
setup_prepare
179+
setup_wait
180+
181+
tests_run
182+
183+
exit $EXIT_STATUS

0 commit comments

Comments
 (0)