0001
0002
0003
0004
0005
0006
0007 lib_dir=$(dirname $0)/../../../net/forwarding
0008
0009 ALL_TESTS="
0010 ipv4_identical_routes
0011 ipv4_tos
0012 ipv4_metric
0013 ipv4_replace
0014 ipv4_delete
0015 ipv4_plen
0016 ipv4_replay
0017 ipv4_flush
0018 ipv4_error_path
0019 ipv4_delete_fail
0020 ipv6_add
0021 ipv6_metric
0022 ipv6_append_single
0023 ipv6_replace_single
0024 ipv6_metric_multipath
0025 ipv6_append_multipath
0026 ipv6_replace_multipath
0027 ipv6_append_multipath_to_single
0028 ipv6_delete_single
0029 ipv6_delete_multipath
0030 ipv6_replay_single
0031 ipv6_replay_multipath
0032 ipv6_error_path
0033 ipv6_delete_fail
0034 "
0035 NETDEVSIM_PATH=/sys/bus/netdevsim/
0036 DEV_ADDR=1337
0037 DEV=netdevsim${DEV_ADDR}
0038 SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/
0039 DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV/
0040 NUM_NETIFS=0
0041 source $lib_dir/lib.sh
0042 source $lib_dir/fib_offload_lib.sh
0043
0044 DEVLINK_DEV=
0045 source $lib_dir/devlink_lib.sh
0046 DEVLINK_DEV=netdevsim/${DEV}
0047
0048 ipv4_identical_routes()
0049 {
0050 fib_ipv4_identical_routes_test "testns1"
0051 }
0052
0053 ipv4_tos()
0054 {
0055 fib_ipv4_tos_test "testns1"
0056 }
0057
0058 ipv4_metric()
0059 {
0060 fib_ipv4_metric_test "testns1"
0061 }
0062
0063 ipv4_replace()
0064 {
0065 fib_ipv4_replace_test "testns1"
0066 }
0067
0068 ipv4_delete()
0069 {
0070 fib_ipv4_delete_test "testns1"
0071 }
0072
0073 ipv4_plen()
0074 {
0075 fib_ipv4_plen_test "testns1"
0076 }
0077
0078 ipv4_replay_metric()
0079 {
0080 fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV"
0081 }
0082
0083 ipv4_replay_tos()
0084 {
0085 fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV"
0086 }
0087
0088 ipv4_replay_plen()
0089 {
0090 fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV"
0091 }
0092
0093 ipv4_replay()
0094 {
0095 ipv4_replay_metric
0096 ipv4_replay_tos
0097 ipv4_replay_plen
0098 }
0099
0100 ipv4_flush()
0101 {
0102 fib_ipv4_flush_test "testns1"
0103 }
0104
0105 ipv4_error_path_add()
0106 {
0107 local lsb
0108
0109 RET=0
0110
0111 ip -n testns1 link add name dummy1 type dummy
0112 ip -n testns1 link set dev dummy1 up
0113
0114 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
0115 devlink -N testns1 dev reload $DEVLINK_DEV
0116
0117 for lsb in $(seq 1 20); do
0118 ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1 \
0119 &> /dev/null
0120 done
0121
0122 log_test "IPv4 error path - add"
0123
0124 ip -n testns1 link del dev dummy1
0125 }
0126
0127 ipv4_error_path_replay()
0128 {
0129 local lsb
0130
0131 RET=0
0132
0133 ip -n testns1 link add name dummy1 type dummy
0134 ip -n testns1 link set dev dummy1 up
0135
0136 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
0137 devlink -N testns1 dev reload $DEVLINK_DEV
0138
0139 for lsb in $(seq 1 20); do
0140 ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1
0141 done
0142
0143 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
0144 devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
0145
0146 log_test "IPv4 error path - replay"
0147
0148 ip -n testns1 link del dev dummy1
0149
0150
0151 devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
0152 devlink -N testns1 dev reload $DEVLINK_DEV
0153 }
0154
0155 ipv4_error_path()
0156 {
0157
0158
0159 ipv4_error_path_add
0160 ipv4_error_path_replay
0161 }
0162
0163 ipv4_delete_fail()
0164 {
0165 RET=0
0166
0167 echo "y" > $DEBUGFS_DIR/fib/fail_route_delete
0168
0169 ip -n testns1 link add name dummy1 type dummy
0170 ip -n testns1 link set dev dummy1 up
0171
0172 ip -n testns1 route add 192.0.2.0/24 dev dummy1
0173 ip -n testns1 route del 192.0.2.0/24 dev dummy1 &> /dev/null
0174
0175
0176
0177 ip -n testns1 link del dev dummy1
0178
0179 log_test "IPv4 route delete failure"
0180
0181 echo "n" > $DEBUGFS_DIR/fib/fail_route_delete
0182 }
0183
0184 ipv6_add()
0185 {
0186 fib_ipv6_add_test "testns1"
0187 }
0188
0189 ipv6_metric()
0190 {
0191 fib_ipv6_metric_test "testns1"
0192 }
0193
0194 ipv6_append_single()
0195 {
0196 fib_ipv6_append_single_test "testns1"
0197 }
0198
0199 ipv6_replace_single()
0200 {
0201 fib_ipv6_replace_single_test "testns1"
0202 }
0203
0204 ipv6_metric_multipath()
0205 {
0206 fib_ipv6_metric_multipath_test "testns1"
0207 }
0208
0209 ipv6_append_multipath()
0210 {
0211 fib_ipv6_append_multipath_test "testns1"
0212 }
0213
0214 ipv6_replace_multipath()
0215 {
0216 fib_ipv6_replace_multipath_test "testns1"
0217 }
0218
0219 ipv6_append_multipath_to_single()
0220 {
0221 fib_ipv6_append_multipath_to_single_test "testns1"
0222 }
0223
0224 ipv6_delete_single()
0225 {
0226 fib_ipv6_delete_single_test "testns1"
0227 }
0228
0229 ipv6_delete_multipath()
0230 {
0231 fib_ipv6_delete_multipath_test "testns1"
0232 }
0233
0234 ipv6_replay_single()
0235 {
0236 fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV"
0237 }
0238
0239 ipv6_replay_multipath()
0240 {
0241 fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV"
0242 }
0243
0244 ipv6_error_path_add_single()
0245 {
0246 local lsb
0247
0248 RET=0
0249
0250 ip -n testns1 link add name dummy1 type dummy
0251 ip -n testns1 link set dev dummy1 up
0252
0253 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
0254 devlink -N testns1 dev reload $DEVLINK_DEV
0255
0256 for lsb in $(seq 1 20); do
0257 ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1 \
0258 &> /dev/null
0259 done
0260
0261 log_test "IPv6 error path - add single"
0262
0263 ip -n testns1 link del dev dummy1
0264 }
0265
0266 ipv6_error_path_add_multipath()
0267 {
0268 local lsb
0269
0270 RET=0
0271
0272 for i in $(seq 1 2); do
0273 ip -n testns1 link add name dummy$i type dummy
0274 ip -n testns1 link set dev dummy$i up
0275 ip -n testns1 address add 2001:db8:$i::1/64 dev dummy$i
0276 done
0277
0278 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
0279 devlink -N testns1 dev reload $DEVLINK_DEV
0280
0281 for lsb in $(seq 1 20); do
0282 ip -n testns1 route add 2001:db8:10::${lsb}/128 \
0283 nexthop via 2001:db8:1::2 dev dummy1 \
0284 nexthop via 2001:db8:2::2 dev dummy2 &> /dev/null
0285 done
0286
0287 log_test "IPv6 error path - add multipath"
0288
0289 for i in $(seq 1 2); do
0290 ip -n testns1 link del dev dummy$i
0291 done
0292 }
0293
0294 ipv6_error_path_replay()
0295 {
0296 local lsb
0297
0298 RET=0
0299
0300 ip -n testns1 link add name dummy1 type dummy
0301 ip -n testns1 link set dev dummy1 up
0302
0303 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
0304 devlink -N testns1 dev reload $DEVLINK_DEV
0305
0306 for lsb in $(seq 1 20); do
0307 ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1
0308 done
0309
0310 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
0311 devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
0312
0313 log_test "IPv6 error path - replay"
0314
0315 ip -n testns1 link del dev dummy1
0316
0317
0318 devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
0319 devlink -N testns1 dev reload $DEVLINK_DEV
0320 }
0321
0322 ipv6_error_path()
0323 {
0324
0325
0326 ipv6_error_path_add_single
0327 ipv6_error_path_add_multipath
0328 ipv6_error_path_replay
0329 }
0330
0331 ipv6_delete_fail()
0332 {
0333 RET=0
0334
0335 echo "y" > $DEBUGFS_DIR/fib/fail_route_delete
0336
0337 ip -n testns1 link add name dummy1 type dummy
0338 ip -n testns1 link set dev dummy1 up
0339
0340 ip -n testns1 route add 2001:db8:1::/64 dev dummy1
0341 ip -n testns1 route del 2001:db8:1::/64 dev dummy1 &> /dev/null
0342
0343
0344
0345 ip -n testns1 link del dev dummy1
0346
0347 log_test "IPv6 route delete failure"
0348
0349 echo "n" > $DEBUGFS_DIR/fib/fail_route_delete
0350 }
0351
0352 fib_notify_on_flag_change_set()
0353 {
0354 local notify=$1; shift
0355
0356 ip netns exec testns1 sysctl -qw net.ipv4.fib_notify_on_flag_change=$notify
0357 ip netns exec testns1 sysctl -qw net.ipv6.fib_notify_on_flag_change=$notify
0358
0359 log_info "Set fib_notify_on_flag_change to $notify"
0360 }
0361
0362 setup_prepare()
0363 {
0364 local netdev
0365
0366 modprobe netdevsim &> /dev/null
0367
0368 echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device
0369 while [ ! -d $SYSFS_NET_DIR ] ; do :; done
0370
0371 ip netns add testns1
0372 if [ $? -ne 0 ]; then
0373 echo "Failed to add netns \"testns1\""
0374 exit 1
0375 fi
0376
0377 devlink dev reload $DEVLINK_DEV netns testns1
0378 if [ $? -ne 0 ]; then
0379 echo "Failed to reload into netns \"testns1\""
0380 exit 1
0381 fi
0382 }
0383
0384 cleanup()
0385 {
0386 pre_cleanup
0387 ip netns del testns1
0388 echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device
0389 modprobe -r netdevsim &> /dev/null
0390 }
0391
0392 trap cleanup EXIT
0393
0394 setup_prepare
0395
0396 fib_notify_on_flag_change_set 1
0397 tests_run
0398
0399 fib_notify_on_flag_change_set 0
0400 tests_run
0401
0402 exit $EXIT_STATUS