xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/drivers/net/mlxsw/fib.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# This test is for checking the FIB offload API on top of mlxsw.
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunlib_dir=$(dirname $0)/../../../net/forwarding
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunALL_TESTS="
9*4882a593Smuzhiyun	ipv4_identical_routes
10*4882a593Smuzhiyun	ipv4_tos
11*4882a593Smuzhiyun	ipv4_metric
12*4882a593Smuzhiyun	ipv4_replace
13*4882a593Smuzhiyun	ipv4_delete
14*4882a593Smuzhiyun	ipv4_plen
15*4882a593Smuzhiyun	ipv4_replay
16*4882a593Smuzhiyun	ipv4_flush
17*4882a593Smuzhiyun	ipv4_local_replace
18*4882a593Smuzhiyun	ipv6_add
19*4882a593Smuzhiyun	ipv6_metric
20*4882a593Smuzhiyun	ipv6_append_single
21*4882a593Smuzhiyun	ipv6_replace_single
22*4882a593Smuzhiyun	ipv6_metric_multipath
23*4882a593Smuzhiyun	ipv6_append_multipath
24*4882a593Smuzhiyun	ipv6_replace_multipath
25*4882a593Smuzhiyun	ipv6_append_multipath_to_single
26*4882a593Smuzhiyun	ipv6_delete_single
27*4882a593Smuzhiyun	ipv6_delete_multipath
28*4882a593Smuzhiyun	ipv6_replay_single
29*4882a593Smuzhiyun	ipv6_replay_multipath
30*4882a593Smuzhiyun	ipv6_local_replace
31*4882a593Smuzhiyun"
32*4882a593SmuzhiyunNUM_NETIFS=0
33*4882a593Smuzhiyunsource $lib_dir/lib.sh
34*4882a593Smuzhiyunsource $lib_dir/devlink_lib.sh
35*4882a593Smuzhiyunsource $lib_dir/fib_offload_lib.sh
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunipv4_identical_routes()
38*4882a593Smuzhiyun{
39*4882a593Smuzhiyun	fib_ipv4_identical_routes_test "testns1"
40*4882a593Smuzhiyun}
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunipv4_tos()
43*4882a593Smuzhiyun{
44*4882a593Smuzhiyun	fib_ipv4_tos_test "testns1"
45*4882a593Smuzhiyun}
46*4882a593Smuzhiyun
47*4882a593Smuzhiyunipv4_metric()
48*4882a593Smuzhiyun{
49*4882a593Smuzhiyun	fib_ipv4_metric_test "testns1"
50*4882a593Smuzhiyun}
51*4882a593Smuzhiyun
52*4882a593Smuzhiyunipv4_replace()
53*4882a593Smuzhiyun{
54*4882a593Smuzhiyun	fib_ipv4_replace_test "testns1"
55*4882a593Smuzhiyun}
56*4882a593Smuzhiyun
57*4882a593Smuzhiyunipv4_delete()
58*4882a593Smuzhiyun{
59*4882a593Smuzhiyun	fib_ipv4_delete_test "testns1"
60*4882a593Smuzhiyun}
61*4882a593Smuzhiyun
62*4882a593Smuzhiyunipv4_plen()
63*4882a593Smuzhiyun{
64*4882a593Smuzhiyun	fib_ipv4_plen_test "testns1"
65*4882a593Smuzhiyun}
66*4882a593Smuzhiyun
67*4882a593Smuzhiyunipv4_replay_metric()
68*4882a593Smuzhiyun{
69*4882a593Smuzhiyun	fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV"
70*4882a593Smuzhiyun}
71*4882a593Smuzhiyun
72*4882a593Smuzhiyunipv4_replay_tos()
73*4882a593Smuzhiyun{
74*4882a593Smuzhiyun	fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV"
75*4882a593Smuzhiyun}
76*4882a593Smuzhiyun
77*4882a593Smuzhiyunipv4_replay_plen()
78*4882a593Smuzhiyun{
79*4882a593Smuzhiyun	fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV"
80*4882a593Smuzhiyun}
81*4882a593Smuzhiyun
82*4882a593Smuzhiyunipv4_replay()
83*4882a593Smuzhiyun{
84*4882a593Smuzhiyun	ipv4_replay_metric
85*4882a593Smuzhiyun	ipv4_replay_tos
86*4882a593Smuzhiyun	ipv4_replay_plen
87*4882a593Smuzhiyun}
88*4882a593Smuzhiyun
89*4882a593Smuzhiyunipv4_flush()
90*4882a593Smuzhiyun{
91*4882a593Smuzhiyun	fib_ipv4_flush_test "testns1"
92*4882a593Smuzhiyun}
93*4882a593Smuzhiyun
94*4882a593Smuzhiyunipv4_local_replace()
95*4882a593Smuzhiyun{
96*4882a593Smuzhiyun	local ns="testns1"
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun	RET=0
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun	ip -n $ns link add name dummy1 type dummy
101*4882a593Smuzhiyun	ip -n $ns link set dev dummy1 up
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun	ip -n $ns route add table local 192.0.2.1/32 dev dummy1
104*4882a593Smuzhiyun	fib4_trap_check $ns "table local 192.0.2.1/32 dev dummy1" false
105*4882a593Smuzhiyun	check_err $? "Local table route not in hardware when should"
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun	ip -n $ns route add table main 192.0.2.1/32 dev dummy1
108*4882a593Smuzhiyun	fib4_trap_check $ns "table main 192.0.2.1/32 dev dummy1" true
109*4882a593Smuzhiyun	check_err $? "Main table route in hardware when should not"
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun	fib4_trap_check $ns "table local 192.0.2.1/32 dev dummy1" false
112*4882a593Smuzhiyun	check_err $? "Local table route was replaced when should not"
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun	# Test that local routes can replace routes in main table.
115*4882a593Smuzhiyun	ip -n $ns route add table main 192.0.2.2/32 dev dummy1
116*4882a593Smuzhiyun	fib4_trap_check $ns "table main 192.0.2.2/32 dev dummy1" false
117*4882a593Smuzhiyun	check_err $? "Main table route not in hardware when should"
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun	ip -n $ns route add table local 192.0.2.2/32 dev dummy1
120*4882a593Smuzhiyun	fib4_trap_check $ns "table local 192.0.2.2/32 dev dummy1" false
121*4882a593Smuzhiyun	check_err $? "Local table route did not replace route in main table when should"
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun	fib4_trap_check $ns "table main 192.0.2.2/32 dev dummy1" true
124*4882a593Smuzhiyun	check_err $? "Main table route was not replaced when should"
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun	log_test "IPv4 local table route replacement"
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun	ip -n $ns link del dev dummy1
129*4882a593Smuzhiyun}
130*4882a593Smuzhiyun
131*4882a593Smuzhiyunipv6_add()
132*4882a593Smuzhiyun{
133*4882a593Smuzhiyun	fib_ipv6_add_test "testns1"
134*4882a593Smuzhiyun}
135*4882a593Smuzhiyun
136*4882a593Smuzhiyunipv6_metric()
137*4882a593Smuzhiyun{
138*4882a593Smuzhiyun	fib_ipv6_metric_test "testns1"
139*4882a593Smuzhiyun}
140*4882a593Smuzhiyun
141*4882a593Smuzhiyunipv6_append_single()
142*4882a593Smuzhiyun{
143*4882a593Smuzhiyun	fib_ipv6_append_single_test "testns1"
144*4882a593Smuzhiyun}
145*4882a593Smuzhiyun
146*4882a593Smuzhiyunipv6_replace_single()
147*4882a593Smuzhiyun{
148*4882a593Smuzhiyun	fib_ipv6_replace_single_test "testns1"
149*4882a593Smuzhiyun}
150*4882a593Smuzhiyun
151*4882a593Smuzhiyunipv6_metric_multipath()
152*4882a593Smuzhiyun{
153*4882a593Smuzhiyun	fib_ipv6_metric_multipath_test "testns1"
154*4882a593Smuzhiyun}
155*4882a593Smuzhiyun
156*4882a593Smuzhiyunipv6_append_multipath()
157*4882a593Smuzhiyun{
158*4882a593Smuzhiyun	fib_ipv6_append_multipath_test "testns1"
159*4882a593Smuzhiyun}
160*4882a593Smuzhiyun
161*4882a593Smuzhiyunipv6_replace_multipath()
162*4882a593Smuzhiyun{
163*4882a593Smuzhiyun	fib_ipv6_replace_multipath_test "testns1"
164*4882a593Smuzhiyun}
165*4882a593Smuzhiyun
166*4882a593Smuzhiyunipv6_append_multipath_to_single()
167*4882a593Smuzhiyun{
168*4882a593Smuzhiyun	fib_ipv6_append_multipath_to_single_test "testns1"
169*4882a593Smuzhiyun}
170*4882a593Smuzhiyun
171*4882a593Smuzhiyunipv6_delete_single()
172*4882a593Smuzhiyun{
173*4882a593Smuzhiyun	fib_ipv6_delete_single_test "testns1"
174*4882a593Smuzhiyun}
175*4882a593Smuzhiyun
176*4882a593Smuzhiyunipv6_delete_multipath()
177*4882a593Smuzhiyun{
178*4882a593Smuzhiyun	fib_ipv6_delete_multipath_test "testns1"
179*4882a593Smuzhiyun}
180*4882a593Smuzhiyun
181*4882a593Smuzhiyunipv6_replay_single()
182*4882a593Smuzhiyun{
183*4882a593Smuzhiyun	fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV"
184*4882a593Smuzhiyun}
185*4882a593Smuzhiyun
186*4882a593Smuzhiyunipv6_replay_multipath()
187*4882a593Smuzhiyun{
188*4882a593Smuzhiyun	fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV"
189*4882a593Smuzhiyun}
190*4882a593Smuzhiyun
191*4882a593Smuzhiyunipv6_local_replace()
192*4882a593Smuzhiyun{
193*4882a593Smuzhiyun	local ns="testns1"
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun	RET=0
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun	ip -n $ns link add name dummy1 type dummy
198*4882a593Smuzhiyun	ip -n $ns link set dev dummy1 up
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun	ip -n $ns route add table local 2001:db8:1::1/128 dev dummy1
201*4882a593Smuzhiyun	fib6_trap_check $ns "table local 2001:db8:1::1/128 dev dummy1" false
202*4882a593Smuzhiyun	check_err $? "Local table route not in hardware when should"
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun	ip -n $ns route add table main 2001:db8:1::1/128 dev dummy1
205*4882a593Smuzhiyun	fib6_trap_check $ns "table main 2001:db8:1::1/128 dev dummy1" true
206*4882a593Smuzhiyun	check_err $? "Main table route in hardware when should not"
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun	fib6_trap_check $ns "table local 2001:db8:1::1/128 dev dummy1" false
209*4882a593Smuzhiyun	check_err $? "Local table route was replaced when should not"
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun	# Test that local routes can replace routes in main table.
212*4882a593Smuzhiyun	ip -n $ns route add table main 2001:db8:1::2/128 dev dummy1
213*4882a593Smuzhiyun	fib6_trap_check $ns "table main 2001:db8:1::2/128 dev dummy1" false
214*4882a593Smuzhiyun	check_err $? "Main table route not in hardware when should"
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun	ip -n $ns route add table local 2001:db8:1::2/128 dev dummy1
217*4882a593Smuzhiyun	fib6_trap_check $ns "table local 2001:db8:1::2/128 dev dummy1" false
218*4882a593Smuzhiyun	check_err $? "Local route route did not replace route in main table when should"
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun	fib6_trap_check $ns "table main 2001:db8:1::2/128 dev dummy1" true
221*4882a593Smuzhiyun	check_err $? "Main table route was not replaced when should"
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun	log_test "IPv6 local table route replacement"
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun	ip -n $ns link del dev dummy1
226*4882a593Smuzhiyun}
227*4882a593Smuzhiyun
228*4882a593Smuzhiyunsetup_prepare()
229*4882a593Smuzhiyun{
230*4882a593Smuzhiyun	ip netns add testns1
231*4882a593Smuzhiyun	if [ $? -ne 0 ]; then
232*4882a593Smuzhiyun		echo "Failed to add netns \"testns1\""
233*4882a593Smuzhiyun		exit 1
234*4882a593Smuzhiyun	fi
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun	devlink dev reload $DEVLINK_DEV netns testns1
237*4882a593Smuzhiyun	if [ $? -ne 0 ]; then
238*4882a593Smuzhiyun		echo "Failed to reload into netns \"testns1\""
239*4882a593Smuzhiyun		exit 1
240*4882a593Smuzhiyun	fi
241*4882a593Smuzhiyun}
242*4882a593Smuzhiyun
243*4882a593Smuzhiyuncleanup()
244*4882a593Smuzhiyun{
245*4882a593Smuzhiyun	pre_cleanup
246*4882a593Smuzhiyun	devlink -N testns1 dev reload $DEVLINK_DEV netns $$
247*4882a593Smuzhiyun	ip netns del testns1
248*4882a593Smuzhiyun}
249*4882a593Smuzhiyun
250*4882a593Smuzhiyuntrap cleanup EXIT
251*4882a593Smuzhiyun
252*4882a593Smuzhiyunsetup_prepare
253*4882a593Smuzhiyun
254*4882a593Smuzhiyuntests_run
255*4882a593Smuzhiyun
256*4882a593Smuzhiyunexit $EXIT_STATUS
257