File Index
Files and directories
Sign in
FILE

rif_bridge.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/mlxsw/rif_bridge.sh BASH
  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
~/ Read-only file preview.