File Index
Files and directories
Sign in
FILE

ingress_rif_conf_1d.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/mlxsw/ingress_rif_conf_1d.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3
  4# Test routing over bridge and verify that the order of configuration does not
  5# impact switch behavior. Verify that RIF is added correctly for existing
  6# mappings and that new mappings use the correct RIF.
  7
  8# +-------------------+                   +--------------------+
  9# | H1                |                   | H2                 |
 10# |                   |                   |                    |
 11# |         $h1.10 +  |                   |  + $h2.10          |
 12# |   192.0.2.1/28 |  |                   |  | 192.0.2.3/28    |
 13# |                |  |                   |  |                 |
 14# |            $h1 +  |                   |  + $h2             |
 15# +----------------|--+                   +--|-----------------+
 16#                  |                         |
 17# +----------------|-------------------------|-----------------+
 18# | SW       $swp1 +                         + $swp2           |
 19# |                |                         |                 |
 20# | +--------------|-------------------------|---------------+ |
 21# | |     $swp1.10 +                         + $swp2.10      | |
 22# | |                                                        | |
 23# | |                           br0                          | |
 24# | |                       192.0.2.2/28                     | |
 25# | +--------------------------------------------------------+ |
 26# |                                                            |
 27# |      $swp3.10 +                                            |
 28# | 192.0.2.17/28 |                                            |
 29# |               |                                            |
 30# |         $swp3 +                                            |
 31# +---------------|--------------------------------------------+
 32#                 |
 33# +---------------|--+
 34# |           $h3 +  |
 35# |               |  |
 36# |        $h3.10 +  |
 37# | 192.0.2.18/28    |
 38# |                  |
 39# | H3               |
 40# +------------------+
 41
 42lib_dir=$(dirname $0)/../../../net/forwarding
 43
 44ALL_TESTS="
 45	port_vid_map_rif
 46	rif_port_vid_map
 47"
 48
 49NUM_NETIFS=6
 50source $lib_dir/lib.sh
 51source $lib_dir/tc_common.sh
 52source $lib_dir/devlink_lib.sh
 53
 54h1_create()
 55{
 56	simple_if_init $h1
 57	vlan_create $h1 10 v$h1 192.0.2.1/28
 58
 59	ip route add 192.0.2.16/28 vrf v$h1 nexthop via 192.0.2.2
 60}
 61
 62h1_destroy()
 63{
 64	ip route del 192.0.2.16/28 vrf v$h1 nexthop via 192.0.2.2
 65
 66	vlan_destroy $h1 10
 67	simple_if_fini $h1
 68}
 69
 70h2_create()
 71{
 72	simple_if_init $h2
 73	vlan_create $h2 10 v$h2 192.0.2.3/28
 74}
 75
 76h2_destroy()
 77{
 78	vlan_destroy $h2 10
 79	simple_if_fini $h2
 80}
 81
 82h3_create()
 83{
 84	simple_if_init $h3
 85	vlan_create $h3 10 v$h3 192.0.2.18/28
 86
 87	ip route add 192.0.2.0/28 vrf v$h3 nexthop via 192.0.2.17
 88}
 89
 90h3_destroy()
 91{
 92	ip route del 192.0.2.0/28 vrf v$h3 nexthop via 192.0.2.17
 93
 94	vlan_destroy $h3 10
 95	simple_if_fini $h3
 96}
 97
 98switch_create()
 99{
100	ip link set dev $swp1 up
101
102	ip link add dev br0 type bridge mcast_snooping 0
103
104	# By default, a link-local address is generated when netdevice becomes
105	# up. Adding an address to the bridge will cause creating a RIF for it.
106	# Prevent generating link-local address to be able to control when the
107	# RIF is added.
108	sysctl_set net.ipv6.conf.br0.addr_gen_mode 1
109	ip link set dev br0 up
110
111	ip link set dev $swp2 up
112	vlan_create $swp2 10
113	ip link set dev $swp2.10 master br0
114
115	ip link set dev $swp3 up
116	vlan_create $swp3 10 "" 192.0.2.17/28
117	tc qdisc add dev $swp3 clsact
118
119	# Replace neighbor to avoid 1 packet which is forwarded in software due
120	# to "unresolved neigh".
121	ip neigh replace dev $swp3.10 192.0.2.18 lladdr $(mac_get $h3.10)
122}
123
124switch_destroy()
125{
126	tc qdisc del dev $swp3 clsact
127	vlan_destroy $swp3 10
128	ip link set dev $swp3 down
129
130	ip link set dev $swp2.10 nomaster
131	vlan_destroy $swp2 10
132	ip link set dev $swp2 down
133
134	ip link set dev br0 down
135	sysctl_restore net.ipv6.conf.br0.addr_gen_mode
136	ip link del dev br0
137
138	ip link set dev $swp1 down
139}
140
141setup_prepare()
142{
143	h1=${NETIFS[p1]}
144	swp1=${NETIFS[p2]}
145
146	swp2=${NETIFS[p3]}
147	h2=${NETIFS[p4]}
148
149	swp3=${NETIFS[p5]}
150	h3=${NETIFS[p6]}
151
152	vrf_prepare
153	forwarding_enable
154
155	h1_create
156	h2_create
157	h3_create
158
159	switch_create
160}
161
162cleanup()
163{
164	pre_cleanup
165
166	switch_destroy
167
168	h3_destroy
169	h2_destroy
170	h1_destroy
171
172	forwarding_restore
173	vrf_cleanup
174}
175
176bridge_rif_add()
177{
178	rifs_occ_t0=$(devlink_resource_occ_get rifs)
179	__addr_add_del br0 add 192.0.2.2/28
180	rifs_occ_t1=$(devlink_resource_occ_get rifs)
181
182	expected_rifs=$((rifs_occ_t0 + 1))
183
184	[[ $expected_rifs -eq $rifs_occ_t1 ]]
185	check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
186
187	sleep 1
188}
189
190bridge_rif_del()
191{
192	__addr_add_del br0 del 192.0.2.2/28
193}
194
195port_vid_map_rif()
196{
197	RET=0
198
199	# First add {port, VID}->FID for $swp1.10, then add a RIF and verify
200	# that packets can be routed via the existing mapping.
201	vlan_create $swp1 10
202	ip link set dev $swp1.10 master br0
203	bridge_rif_add
204
205	# The hardware matches on the first ethertype which is not VLAN,
206	# so the protocol should be IP.
207	tc filter add dev $swp3 egress protocol ip pref 1 handle 101 \
208		flower skip_sw dst_ip 192.0.2.18 action pass
209
210	ping_do $h1.10 192.0.2.18
211	check_err $? "Ping failed"
212
213	tc_check_at_least_x_packets "dev $swp3 egress" 101 10
214	check_err $? "Packets were not routed in hardware"
215
216	log_test "Add RIF for existing {port, VID}->FID mapping"
217
218	tc filter del dev $swp3 egress
219
220	bridge_rif_del
221	ip link set dev $swp1.10 nomaster
222	vlan_destroy $swp1 10
223}
224
225rif_port_vid_map()
226{
227	RET=0
228
229	# First add an address to the bridge, which will create a RIF on top of
230	# it, then add a new {port, VID}->FID mapping and verify that packets
231	# can be routed via the new mapping.
232	bridge_rif_add
233	vlan_create $swp1 10
234	ip link set dev $swp1.10 master br0
235
236	# The hardware matches on the first ethertype which is not VLAN,
237	# so the protocol should be IP.
238	tc filter add dev $swp3 egress protocol ip pref 1 handle 101 \
239		flower skip_sw dst_ip 192.0.2.18 action pass
240
241	ping_do $h1.10 192.0.2.18
242	check_err $? "Ping failed"
243
244	tc_check_at_least_x_packets "dev $swp3 egress" 101 10
245	check_err $? "Packets were not routed in hardware"
246
247	log_test "Add {port, VID}->FID mapping for FID with a RIF"
248
249	tc filter del dev $swp3 egress
250
251	ip link set dev $swp1.10 nomaster
252	vlan_destroy $swp1 10
253	bridge_rif_del
254}
255
256trap cleanup EXIT
257
258setup_prepare
259setup_wait
260
261tests_run
262
263exit $EXIT_STATUS
~/ Read-only file preview.