File Index
Files and directories
Sign in
FILE

vlan_bridge_binding.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/net/vlan_bridge_binding.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3
  4source lib.sh
  5
  6ALL_TESTS="
  7	test_binding_on
  8	test_binding_off
  9	test_binding_toggle_on
 10	test_binding_toggle_off
 11	test_binding_toggle_on_when_upper_down
 12	test_binding_toggle_off_when_upper_down
 13	test_binding_toggle_on_when_lower_down
 14	test_binding_toggle_off_when_lower_down
 15"
 16
 17setup_prepare()
 18{
 19	local port
 20
 21	adf_ip_link_add br up type bridge vlan_filtering 1
 22
 23	for port in d1 d2 d3; do
 24		adf_ip_link_add $port type veth peer name r$port
 25		adf_ip_link_set_up $port
 26		adf_ip_link_set_up r$port
 27		adf_ip_link_set_master $port br
 28	done
 29
 30	adf_bridge_vlan_add vid 11 dev br self
 31	adf_bridge_vlan_add vid 11 dev d1 master
 32
 33	adf_bridge_vlan_add vid 12 dev br self
 34	adf_bridge_vlan_add vid 12 dev d2 master
 35
 36	adf_bridge_vlan_add vid 13 dev br self
 37	adf_bridge_vlan_add vid 13 dev d1 master
 38	adf_bridge_vlan_add vid 13 dev d2 master
 39
 40	adf_bridge_vlan_add vid 14 dev br self
 41	adf_bridge_vlan_add vid 14 dev d1 master
 42	adf_bridge_vlan_add vid 14 dev d2 master
 43	adf_bridge_vlan_add vid 14 dev d3 master
 44}
 45
 46operstate_is()
 47{
 48	local dev=$1; shift
 49	local expect=$1; shift
 50
 51	local operstate=$(ip -j link show $dev | jq -r .[].operstate)
 52	if [[ $operstate == UP ]]; then
 53		operstate=1
 54	elif [[ $operstate == DOWN || $operstate == LOWERLAYERDOWN ]]; then
 55		operstate=0
 56	fi
 57	echo -n $operstate
 58	[[ $operstate == $expect ]]
 59}
 60
 61check_operstate()
 62{
 63	local dev=$1; shift
 64	local expect=$1; shift
 65	local operstate
 66
 67	operstate=$(busywait 1000 \
 68			operstate_is "$dev" "$expect")
 69	check_err $? "Got operstate of $operstate, expected $expect"
 70}
 71
 72add_one_vlan()
 73{
 74	local link=$1; shift
 75	local id=$1; shift
 76
 77	adf_ip_link_add $link.$id link $link type vlan id $id "$@"
 78}
 79
 80add_vlans()
 81{
 82	add_one_vlan br 11 "$@"
 83	add_one_vlan br 12 "$@"
 84	add_one_vlan br 13 "$@"
 85	add_one_vlan br 14 "$@"
 86}
 87
 88set_vlans()
 89{
 90	ip link set dev br.11 "$@"
 91	ip link set dev br.12 "$@"
 92	ip link set dev br.13 "$@"
 93	ip link set dev br.14 "$@"
 94}
 95
 96down_netdevs()
 97{
 98	local dev
 99
100	for dev in "$@"; do
101		adf_ip_link_set_down $dev
102	done
103}
104
105check_operstates()
106{
107	local opst_11=$1; shift
108	local opst_12=$1; shift
109	local opst_13=$1; shift
110	local opst_14=$1; shift
111
112	check_operstate br.11 $opst_11
113	check_operstate br.12 $opst_12
114	check_operstate br.13 $opst_13
115	check_operstate br.14 $opst_14
116}
117
118do_test_binding()
119{
120	local inject=$1; shift
121	local what=$1; shift
122	local opsts_d1=$1; shift
123	local opsts_d2=$1; shift
124	local opsts_d12=$1; shift
125	local opsts_d123=$1; shift
126
127	RET=0
128
129	defer_scope_push
130		down_netdevs d1
131		$inject
132		check_operstates $opsts_d1
133	defer_scope_pop
134
135	defer_scope_push
136		down_netdevs d2
137		$inject
138		check_operstates $opsts_d2
139	defer_scope_pop
140
141	defer_scope_push
142		down_netdevs d1 d2
143		$inject
144		check_operstates $opsts_d12
145	defer_scope_pop
146
147	defer_scope_push
148		down_netdevs d1 d2 d3
149		$inject
150		check_operstates $opsts_d123
151	defer_scope_pop
152
153	log_test "Test bridge_binding $what"
154}
155
156do_test_binding_on()
157{
158	local inject=$1; shift
159	local what=$1; shift
160
161	do_test_binding "$inject" "$what"	\
162			"0 1 1 1"		\
163			"1 0 1 1"		\
164			"0 0 0 1"		\
165			"0 0 0 0"
166}
167
168do_test_binding_off()
169{
170	local inject=$1; shift
171	local what=$1; shift
172
173	do_test_binding "$inject" "$what"	\
174			"1 1 1 1"		\
175			"1 1 1 1"		\
176			"1 1 1 1"		\
177			"0 0 0 0"
178}
179
180test_binding_on()
181{
182	add_vlans bridge_binding on
183	set_vlans up
184	do_test_binding_on : "on"
185}
186
187test_binding_off()
188{
189	add_vlans bridge_binding off
190	set_vlans up
191	do_test_binding_off : "off"
192}
193
194test_binding_toggle_on()
195{
196	add_vlans bridge_binding off
197	set_vlans up
198	set_vlans type vlan bridge_binding on
199	do_test_binding_on : "off->on"
200}
201
202test_binding_toggle_off()
203{
204	add_vlans bridge_binding on
205	set_vlans up
206	set_vlans type vlan bridge_binding off
207	do_test_binding_off : "on->off"
208}
209
210adf_set_binding_on()
211{
212	set_vlans type vlan bridge_binding on
213	defer set_vlans type vlan bridge_binding off
214}
215
216adf_set_binding_off()
217{
218	set_vlans type vlan bridge_binding off
219	defer set_vlans type vlan bridge_binding on
220}
221
222test_binding_toggle_on_when_lower_down()
223{
224	add_vlans bridge_binding off
225	set_vlans up
226	do_test_binding_on adf_set_binding_on "off->on when lower down"
227}
228
229test_binding_toggle_off_when_lower_down()
230{
231	add_vlans bridge_binding on
232	set_vlans up
233	do_test_binding_off adf_set_binding_off "on->off when lower down"
234}
235
236test_binding_toggle_on_when_upper_down()
237{
238	add_vlans bridge_binding off
239	set_vlans type vlan bridge_binding on
240	set_vlans up
241	do_test_binding_on : "off->on when upper down"
242}
243
244test_binding_toggle_off_when_upper_down()
245{
246	add_vlans bridge_binding on
247	set_vlans type vlan bridge_binding off
248	set_vlans up
249	do_test_binding_off : "on->off when upper down"
250}
251
252require_command jq
253
254trap defer_scopes_cleanup EXIT
255setup_prepare
256tests_run
257
258exit $EXIT_STATUS
~/ Read-only file preview.