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
4lib_dir=$(dirname $0)/../../../net/forwarding
5
6ALL_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
15REQUIRE_TEAMD="yes"
16NUM_NETIFS=2
17source $lib_dir/lib.sh
18source $lib_dir/devlink_lib.sh
19
20setup_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
47cleanup()
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
64bridge_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
80bridge_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
96bridge_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
112bridge_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
143bridge_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
159bridge_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
177trap cleanup EXIT
178
179setup_prepare
180setup_wait
181
182tests_run
183
184exit $EXIT_STATUS