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