WIP FPC-III support
[linux/fpc-iii.git] / tools / testing / selftests / drivers / net / netdevsim / fib.sh
blob2f87c3be76a9594f926c7c11ffe98082810a505c
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 # This test is for checking the FIB offload API. It makes use of netdevsim
5 # which registers a listener to the FIB notification chain.
7 lib_dir=$(dirname $0)/../../../net/forwarding
9 ALL_TESTS="
10 ipv4_identical_routes
11 ipv4_tos
12 ipv4_metric
13 ipv4_replace
14 ipv4_delete
15 ipv4_plen
16 ipv4_replay
17 ipv4_flush
18 ipv4_error_path
19 ipv6_add
20 ipv6_metric
21 ipv6_append_single
22 ipv6_replace_single
23 ipv6_metric_multipath
24 ipv6_append_multipath
25 ipv6_replace_multipath
26 ipv6_append_multipath_to_single
27 ipv6_delete_single
28 ipv6_delete_multipath
29 ipv6_replay_single
30 ipv6_replay_multipath
31 ipv6_error_path
33 NETDEVSIM_PATH=/sys/bus/netdevsim/
34 DEV_ADDR=1337
35 DEV=netdevsim${DEV_ADDR}
36 DEVLINK_DEV=netdevsim/${DEV}
37 SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/
38 NUM_NETIFS=0
39 source $lib_dir/lib.sh
40 source $lib_dir/devlink_lib.sh
41 source $lib_dir/fib_offload_lib.sh
43 ipv4_identical_routes()
45 fib_ipv4_identical_routes_test "testns1"
48 ipv4_tos()
50 fib_ipv4_tos_test "testns1"
53 ipv4_metric()
55 fib_ipv4_metric_test "testns1"
58 ipv4_replace()
60 fib_ipv4_replace_test "testns1"
63 ipv4_delete()
65 fib_ipv4_delete_test "testns1"
68 ipv4_plen()
70 fib_ipv4_plen_test "testns1"
73 ipv4_replay_metric()
75 fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV"
78 ipv4_replay_tos()
80 fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV"
83 ipv4_replay_plen()
85 fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV"
88 ipv4_replay()
90 ipv4_replay_metric
91 ipv4_replay_tos
92 ipv4_replay_plen
95 ipv4_flush()
97 fib_ipv4_flush_test "testns1"
100 ipv4_error_path_add()
102 local lsb
104 RET=0
106 ip -n testns1 link add name dummy1 type dummy
107 ip -n testns1 link set dev dummy1 up
109 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
110 devlink -N testns1 dev reload $DEVLINK_DEV
112 for lsb in $(seq 1 20); do
113 ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1 \
114 &> /dev/null
115 done
117 log_test "IPv4 error path - add"
119 ip -n testns1 link del dev dummy1
122 ipv4_error_path_replay()
124 local lsb
126 RET=0
128 ip -n testns1 link add name dummy1 type dummy
129 ip -n testns1 link set dev dummy1 up
131 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
132 devlink -N testns1 dev reload $DEVLINK_DEV
134 for lsb in $(seq 1 20); do
135 ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1
136 done
138 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
139 devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
141 log_test "IPv4 error path - replay"
143 ip -n testns1 link del dev dummy1
145 # Successfully reload after deleting all the routes.
146 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
147 devlink -N testns1 dev reload $DEVLINK_DEV
150 ipv4_error_path()
152 # Test the different error paths of the notifiers by limiting the size
153 # of the "IPv4/fib" resource.
154 ipv4_error_path_add
155 ipv4_error_path_replay
158 ipv6_add()
160 fib_ipv6_add_test "testns1"
163 ipv6_metric()
165 fib_ipv6_metric_test "testns1"
168 ipv6_append_single()
170 fib_ipv6_append_single_test "testns1"
173 ipv6_replace_single()
175 fib_ipv6_replace_single_test "testns1"
178 ipv6_metric_multipath()
180 fib_ipv6_metric_multipath_test "testns1"
183 ipv6_append_multipath()
185 fib_ipv6_append_multipath_test "testns1"
188 ipv6_replace_multipath()
190 fib_ipv6_replace_multipath_test "testns1"
193 ipv6_append_multipath_to_single()
195 fib_ipv6_append_multipath_to_single_test "testns1"
198 ipv6_delete_single()
200 fib_ipv6_delete_single_test "testns1"
203 ipv6_delete_multipath()
205 fib_ipv6_delete_multipath_test "testns1"
208 ipv6_replay_single()
210 fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV"
213 ipv6_replay_multipath()
215 fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV"
218 ipv6_error_path_add_single()
220 local lsb
222 RET=0
224 ip -n testns1 link add name dummy1 type dummy
225 ip -n testns1 link set dev dummy1 up
227 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
228 devlink -N testns1 dev reload $DEVLINK_DEV
230 for lsb in $(seq 1 20); do
231 ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1 \
232 &> /dev/null
233 done
235 log_test "IPv6 error path - add single"
237 ip -n testns1 link del dev dummy1
240 ipv6_error_path_add_multipath()
242 local lsb
244 RET=0
246 for i in $(seq 1 2); do
247 ip -n testns1 link add name dummy$i type dummy
248 ip -n testns1 link set dev dummy$i up
249 ip -n testns1 address add 2001:db8:$i::1/64 dev dummy$i
250 done
252 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
253 devlink -N testns1 dev reload $DEVLINK_DEV
255 for lsb in $(seq 1 20); do
256 ip -n testns1 route add 2001:db8:10::${lsb}/128 \
257 nexthop via 2001:db8:1::2 dev dummy1 \
258 nexthop via 2001:db8:2::2 dev dummy2 &> /dev/null
259 done
261 log_test "IPv6 error path - add multipath"
263 for i in $(seq 1 2); do
264 ip -n testns1 link del dev dummy$i
265 done
268 ipv6_error_path_replay()
270 local lsb
272 RET=0
274 ip -n testns1 link add name dummy1 type dummy
275 ip -n testns1 link set dev dummy1 up
277 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
278 devlink -N testns1 dev reload $DEVLINK_DEV
280 for lsb in $(seq 1 20); do
281 ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1
282 done
284 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
285 devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
287 log_test "IPv6 error path - replay"
289 ip -n testns1 link del dev dummy1
291 # Successfully reload after deleting all the routes.
292 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
293 devlink -N testns1 dev reload $DEVLINK_DEV
296 ipv6_error_path()
298 # Test the different error paths of the notifiers by limiting the size
299 # of the "IPv6/fib" resource.
300 ipv6_error_path_add_single
301 ipv6_error_path_add_multipath
302 ipv6_error_path_replay
305 setup_prepare()
307 local netdev
309 modprobe netdevsim &> /dev/null
311 echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device
312 while [ ! -d $SYSFS_NET_DIR ] ; do :; done
314 ip netns add testns1
315 if [ $? -ne 0 ]; then
316 echo "Failed to add netns \"testns1\""
317 exit 1
320 devlink dev reload $DEVLINK_DEV netns testns1
321 if [ $? -ne 0 ]; then
322 echo "Failed to reload into netns \"testns1\""
323 exit 1
327 cleanup()
329 pre_cleanup
330 ip netns del testns1
331 echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device
332 modprobe -r netdevsim &> /dev/null
335 trap cleanup EXIT
337 setup_prepare
339 tests_run
341 exit $EXIT_STATUS