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
25 ipv6_replace_multipath
26 ipv6_append_multipath_to_single
33 NETDEVSIM_PATH
=/sys
/bus
/netdevsim
/
35 DEV
=netdevsim
${DEV_ADDR}
36 DEVLINK_DEV
=netdevsim
/${DEV}
37 SYSFS_NET_DIR
=/sys
/bus
/netdevsim
/devices
/$DEV/net
/
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"
50 fib_ipv4_tos_test
"testns1"
55 fib_ipv4_metric_test
"testns1"
60 fib_ipv4_replace_test
"testns1"
65 fib_ipv4_delete_test
"testns1"
70 fib_ipv4_plen_test
"testns1"
75 fib_ipv4_replay_metric_test
"testns1" "$DEVLINK_DEV"
80 fib_ipv4_replay_tos_test
"testns1" "$DEVLINK_DEV"
85 fib_ipv4_replay_plen_test
"testns1" "$DEVLINK_DEV"
97 fib_ipv4_flush_test
"testns1"
100 ipv4_error_path_add
()
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 IPv
4/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 \
117 log_test
"IPv4 error path - add"
119 ip
-n testns1 link del dev dummy1
122 ipv4_error_path_replay
()
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 IPv
4/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
138 devlink
-N testns1 resource
set $DEVLINK_DEV path IPv
4/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 IPv
4/fib size
100
147 devlink
-N testns1 dev reload
$DEVLINK_DEV
152 # Test the different error paths of the notifiers by limiting the size
153 # of the "IPv4/fib" resource.
155 ipv4_error_path_replay
160 fib_ipv6_add_test
"testns1"
165 fib_ipv6_metric_test
"testns1"
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"
200 fib_ipv6_delete_single_test
"testns1"
203 ipv6_delete_multipath
()
205 fib_ipv6_delete_multipath_test
"testns1"
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
()
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 IPv
6/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 \
235 log_test
"IPv6 error path - add single"
237 ip
-n testns1 link del dev dummy1
240 ipv6_error_path_add_multipath
()
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
252 devlink
-N testns1 resource
set $DEVLINK_DEV path IPv
6/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
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
268 ipv6_error_path_replay
()
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 IPv
6/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
284 devlink
-N testns1 resource
set $DEVLINK_DEV path IPv
6/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 IPv
6/fib size
100
293 devlink
-N testns1 dev reload
$DEVLINK_DEV
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
309 modprobe netdevsim
&> /dev
/null
311 echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device
312 while [ ! -d $SYSFS_NET_DIR ] ; do :; done
315 if [ $?
-ne 0 ]; then
316 echo "Failed to add netns \"testns1\""
320 devlink dev reload
$DEVLINK_DEV netns testns1
321 if [ $?
-ne 0 ]; then
322 echo "Failed to reload into netns \"testns1\""
331 echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device
332 modprobe
-r netdevsim
&> /dev
/null