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
15NUM_NETIFS=2
16source $lib_dir/lib.sh
17source $lib_dir/devlink_lib.sh
18
19setup_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
46cleanup()
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
63bridge_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
79bridge_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
95bridge_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
111bridge_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
142bridge_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
158bridge_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
176trap cleanup EXIT
177
178setup_prepare
179setup_wait
180
181tests_run
182
183exit $EXIT_STATUS