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