18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci# 48c2ecf20Sopenharmony_ci# This test is for checking the FIB offload API. It makes use of netdevsim 58c2ecf20Sopenharmony_ci# which registers a listener to the FIB notification chain. 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cilib_dir=$(dirname $0)/../../../net/forwarding 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciALL_TESTS=" 108c2ecf20Sopenharmony_ci ipv4_identical_routes 118c2ecf20Sopenharmony_ci ipv4_tos 128c2ecf20Sopenharmony_ci ipv4_metric 138c2ecf20Sopenharmony_ci ipv4_replace 148c2ecf20Sopenharmony_ci ipv4_delete 158c2ecf20Sopenharmony_ci ipv4_plen 168c2ecf20Sopenharmony_ci ipv4_replay 178c2ecf20Sopenharmony_ci ipv4_flush 188c2ecf20Sopenharmony_ci ipv4_error_path 198c2ecf20Sopenharmony_ci ipv6_add 208c2ecf20Sopenharmony_ci ipv6_metric 218c2ecf20Sopenharmony_ci ipv6_append_single 228c2ecf20Sopenharmony_ci ipv6_replace_single 238c2ecf20Sopenharmony_ci ipv6_metric_multipath 248c2ecf20Sopenharmony_ci ipv6_append_multipath 258c2ecf20Sopenharmony_ci ipv6_replace_multipath 268c2ecf20Sopenharmony_ci ipv6_append_multipath_to_single 278c2ecf20Sopenharmony_ci ipv6_delete_single 288c2ecf20Sopenharmony_ci ipv6_delete_multipath 298c2ecf20Sopenharmony_ci ipv6_replay_single 308c2ecf20Sopenharmony_ci ipv6_replay_multipath 318c2ecf20Sopenharmony_ci ipv6_error_path 328c2ecf20Sopenharmony_ci" 338c2ecf20Sopenharmony_ciNETDEVSIM_PATH=/sys/bus/netdevsim/ 348c2ecf20Sopenharmony_ciDEV_ADDR=1337 358c2ecf20Sopenharmony_ciDEV=netdevsim${DEV_ADDR} 368c2ecf20Sopenharmony_ciDEVLINK_DEV=netdevsim/${DEV} 378c2ecf20Sopenharmony_ciSYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/ 388c2ecf20Sopenharmony_ciNUM_NETIFS=0 398c2ecf20Sopenharmony_cisource $lib_dir/lib.sh 408c2ecf20Sopenharmony_cisource $lib_dir/devlink_lib.sh 418c2ecf20Sopenharmony_cisource $lib_dir/fib_offload_lib.sh 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ciipv4_identical_routes() 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci fib_ipv4_identical_routes_test "testns1" 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ciipv4_tos() 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci fib_ipv4_tos_test "testns1" 518c2ecf20Sopenharmony_ci} 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ciipv4_metric() 548c2ecf20Sopenharmony_ci{ 558c2ecf20Sopenharmony_ci fib_ipv4_metric_test "testns1" 568c2ecf20Sopenharmony_ci} 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ciipv4_replace() 598c2ecf20Sopenharmony_ci{ 608c2ecf20Sopenharmony_ci fib_ipv4_replace_test "testns1" 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ciipv4_delete() 648c2ecf20Sopenharmony_ci{ 658c2ecf20Sopenharmony_ci fib_ipv4_delete_test "testns1" 668c2ecf20Sopenharmony_ci} 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciipv4_plen() 698c2ecf20Sopenharmony_ci{ 708c2ecf20Sopenharmony_ci fib_ipv4_plen_test "testns1" 718c2ecf20Sopenharmony_ci} 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ciipv4_replay_metric() 748c2ecf20Sopenharmony_ci{ 758c2ecf20Sopenharmony_ci fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV" 768c2ecf20Sopenharmony_ci} 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ciipv4_replay_tos() 798c2ecf20Sopenharmony_ci{ 808c2ecf20Sopenharmony_ci fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV" 818c2ecf20Sopenharmony_ci} 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ciipv4_replay_plen() 848c2ecf20Sopenharmony_ci{ 858c2ecf20Sopenharmony_ci fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV" 868c2ecf20Sopenharmony_ci} 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ciipv4_replay() 898c2ecf20Sopenharmony_ci{ 908c2ecf20Sopenharmony_ci ipv4_replay_metric 918c2ecf20Sopenharmony_ci ipv4_replay_tos 928c2ecf20Sopenharmony_ci ipv4_replay_plen 938c2ecf20Sopenharmony_ci} 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ciipv4_flush() 968c2ecf20Sopenharmony_ci{ 978c2ecf20Sopenharmony_ci fib_ipv4_flush_test "testns1" 988c2ecf20Sopenharmony_ci} 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ciipv4_error_path_add() 1018c2ecf20Sopenharmony_ci{ 1028c2ecf20Sopenharmony_ci local lsb 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci RET=0 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci ip -n testns1 link add name dummy1 type dummy 1078c2ecf20Sopenharmony_ci ip -n testns1 link set dev dummy1 up 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10 1108c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci for lsb in $(seq 1 20); do 1138c2ecf20Sopenharmony_ci ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1 \ 1148c2ecf20Sopenharmony_ci &> /dev/null 1158c2ecf20Sopenharmony_ci done 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci log_test "IPv4 error path - add" 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci ip -n testns1 link del dev dummy1 1208c2ecf20Sopenharmony_ci} 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ciipv4_error_path_replay() 1238c2ecf20Sopenharmony_ci{ 1248c2ecf20Sopenharmony_ci local lsb 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_ci RET=0 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_ci ip -n testns1 link add name dummy1 type dummy 1298c2ecf20Sopenharmony_ci ip -n testns1 link set dev dummy1 up 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100 1328c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci for lsb in $(seq 1 20); do 1358c2ecf20Sopenharmony_ci ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1 1368c2ecf20Sopenharmony_ci done 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10 1398c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_ci log_test "IPv4 error path - replay" 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci ip -n testns1 link del dev dummy1 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_ci # Successfully reload after deleting all the routes. 1468c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100 1478c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 1488c2ecf20Sopenharmony_ci} 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ciipv4_error_path() 1518c2ecf20Sopenharmony_ci{ 1528c2ecf20Sopenharmony_ci # Test the different error paths of the notifiers by limiting the size 1538c2ecf20Sopenharmony_ci # of the "IPv4/fib" resource. 1548c2ecf20Sopenharmony_ci ipv4_error_path_add 1558c2ecf20Sopenharmony_ci ipv4_error_path_replay 1568c2ecf20Sopenharmony_ci} 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ciipv6_add() 1598c2ecf20Sopenharmony_ci{ 1608c2ecf20Sopenharmony_ci fib_ipv6_add_test "testns1" 1618c2ecf20Sopenharmony_ci} 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_ciipv6_metric() 1648c2ecf20Sopenharmony_ci{ 1658c2ecf20Sopenharmony_ci fib_ipv6_metric_test "testns1" 1668c2ecf20Sopenharmony_ci} 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ciipv6_append_single() 1698c2ecf20Sopenharmony_ci{ 1708c2ecf20Sopenharmony_ci fib_ipv6_append_single_test "testns1" 1718c2ecf20Sopenharmony_ci} 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ciipv6_replace_single() 1748c2ecf20Sopenharmony_ci{ 1758c2ecf20Sopenharmony_ci fib_ipv6_replace_single_test "testns1" 1768c2ecf20Sopenharmony_ci} 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_ciipv6_metric_multipath() 1798c2ecf20Sopenharmony_ci{ 1808c2ecf20Sopenharmony_ci fib_ipv6_metric_multipath_test "testns1" 1818c2ecf20Sopenharmony_ci} 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_ciipv6_append_multipath() 1848c2ecf20Sopenharmony_ci{ 1858c2ecf20Sopenharmony_ci fib_ipv6_append_multipath_test "testns1" 1868c2ecf20Sopenharmony_ci} 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ciipv6_replace_multipath() 1898c2ecf20Sopenharmony_ci{ 1908c2ecf20Sopenharmony_ci fib_ipv6_replace_multipath_test "testns1" 1918c2ecf20Sopenharmony_ci} 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_ciipv6_append_multipath_to_single() 1948c2ecf20Sopenharmony_ci{ 1958c2ecf20Sopenharmony_ci fib_ipv6_append_multipath_to_single_test "testns1" 1968c2ecf20Sopenharmony_ci} 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ciipv6_delete_single() 1998c2ecf20Sopenharmony_ci{ 2008c2ecf20Sopenharmony_ci fib_ipv6_delete_single_test "testns1" 2018c2ecf20Sopenharmony_ci} 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_ciipv6_delete_multipath() 2048c2ecf20Sopenharmony_ci{ 2058c2ecf20Sopenharmony_ci fib_ipv6_delete_multipath_test "testns1" 2068c2ecf20Sopenharmony_ci} 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_ciipv6_replay_single() 2098c2ecf20Sopenharmony_ci{ 2108c2ecf20Sopenharmony_ci fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV" 2118c2ecf20Sopenharmony_ci} 2128c2ecf20Sopenharmony_ci 2138c2ecf20Sopenharmony_ciipv6_replay_multipath() 2148c2ecf20Sopenharmony_ci{ 2158c2ecf20Sopenharmony_ci fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV" 2168c2ecf20Sopenharmony_ci} 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_ciipv6_error_path_add_single() 2198c2ecf20Sopenharmony_ci{ 2208c2ecf20Sopenharmony_ci local lsb 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ci RET=0 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_ci ip -n testns1 link add name dummy1 type dummy 2258c2ecf20Sopenharmony_ci ip -n testns1 link set dev dummy1 up 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10 2288c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci for lsb in $(seq 1 20); do 2318c2ecf20Sopenharmony_ci ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1 \ 2328c2ecf20Sopenharmony_ci &> /dev/null 2338c2ecf20Sopenharmony_ci done 2348c2ecf20Sopenharmony_ci 2358c2ecf20Sopenharmony_ci log_test "IPv6 error path - add single" 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ci ip -n testns1 link del dev dummy1 2388c2ecf20Sopenharmony_ci} 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ciipv6_error_path_add_multipath() 2418c2ecf20Sopenharmony_ci{ 2428c2ecf20Sopenharmony_ci local lsb 2438c2ecf20Sopenharmony_ci 2448c2ecf20Sopenharmony_ci RET=0 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci for i in $(seq 1 2); do 2478c2ecf20Sopenharmony_ci ip -n testns1 link add name dummy$i type dummy 2488c2ecf20Sopenharmony_ci ip -n testns1 link set dev dummy$i up 2498c2ecf20Sopenharmony_ci ip -n testns1 address add 2001:db8:$i::1/64 dev dummy$i 2508c2ecf20Sopenharmony_ci done 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10 2538c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci for lsb in $(seq 1 20); do 2568c2ecf20Sopenharmony_ci ip -n testns1 route add 2001:db8:10::${lsb}/128 \ 2578c2ecf20Sopenharmony_ci nexthop via 2001:db8:1::2 dev dummy1 \ 2588c2ecf20Sopenharmony_ci nexthop via 2001:db8:2::2 dev dummy2 &> /dev/null 2598c2ecf20Sopenharmony_ci done 2608c2ecf20Sopenharmony_ci 2618c2ecf20Sopenharmony_ci log_test "IPv6 error path - add multipath" 2628c2ecf20Sopenharmony_ci 2638c2ecf20Sopenharmony_ci for i in $(seq 1 2); do 2648c2ecf20Sopenharmony_ci ip -n testns1 link del dev dummy$i 2658c2ecf20Sopenharmony_ci done 2668c2ecf20Sopenharmony_ci} 2678c2ecf20Sopenharmony_ci 2688c2ecf20Sopenharmony_ciipv6_error_path_replay() 2698c2ecf20Sopenharmony_ci{ 2708c2ecf20Sopenharmony_ci local lsb 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_ci RET=0 2738c2ecf20Sopenharmony_ci 2748c2ecf20Sopenharmony_ci ip -n testns1 link add name dummy1 type dummy 2758c2ecf20Sopenharmony_ci ip -n testns1 link set dev dummy1 up 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100 2788c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 2798c2ecf20Sopenharmony_ci 2808c2ecf20Sopenharmony_ci for lsb in $(seq 1 20); do 2818c2ecf20Sopenharmony_ci ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1 2828c2ecf20Sopenharmony_ci done 2838c2ecf20Sopenharmony_ci 2848c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10 2858c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null 2868c2ecf20Sopenharmony_ci 2878c2ecf20Sopenharmony_ci log_test "IPv6 error path - replay" 2888c2ecf20Sopenharmony_ci 2898c2ecf20Sopenharmony_ci ip -n testns1 link del dev dummy1 2908c2ecf20Sopenharmony_ci 2918c2ecf20Sopenharmony_ci # Successfully reload after deleting all the routes. 2928c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100 2938c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DEVLINK_DEV 2948c2ecf20Sopenharmony_ci} 2958c2ecf20Sopenharmony_ci 2968c2ecf20Sopenharmony_ciipv6_error_path() 2978c2ecf20Sopenharmony_ci{ 2988c2ecf20Sopenharmony_ci # Test the different error paths of the notifiers by limiting the size 2998c2ecf20Sopenharmony_ci # of the "IPv6/fib" resource. 3008c2ecf20Sopenharmony_ci ipv6_error_path_add_single 3018c2ecf20Sopenharmony_ci ipv6_error_path_add_multipath 3028c2ecf20Sopenharmony_ci ipv6_error_path_replay 3038c2ecf20Sopenharmony_ci} 3048c2ecf20Sopenharmony_ci 3058c2ecf20Sopenharmony_cisetup_prepare() 3068c2ecf20Sopenharmony_ci{ 3078c2ecf20Sopenharmony_ci local netdev 3088c2ecf20Sopenharmony_ci 3098c2ecf20Sopenharmony_ci modprobe netdevsim &> /dev/null 3108c2ecf20Sopenharmony_ci 3118c2ecf20Sopenharmony_ci echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device 3128c2ecf20Sopenharmony_ci while [ ! -d $SYSFS_NET_DIR ] ; do :; done 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_ci ip netns add testns1 3158c2ecf20Sopenharmony_ci if [ $? -ne 0 ]; then 3168c2ecf20Sopenharmony_ci echo "Failed to add netns \"testns1\"" 3178c2ecf20Sopenharmony_ci exit 1 3188c2ecf20Sopenharmony_ci fi 3198c2ecf20Sopenharmony_ci 3208c2ecf20Sopenharmony_ci devlink dev reload $DEVLINK_DEV netns testns1 3218c2ecf20Sopenharmony_ci if [ $? -ne 0 ]; then 3228c2ecf20Sopenharmony_ci echo "Failed to reload into netns \"testns1\"" 3238c2ecf20Sopenharmony_ci exit 1 3248c2ecf20Sopenharmony_ci fi 3258c2ecf20Sopenharmony_ci} 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_cicleanup() 3288c2ecf20Sopenharmony_ci{ 3298c2ecf20Sopenharmony_ci pre_cleanup 3308c2ecf20Sopenharmony_ci ip netns del testns1 3318c2ecf20Sopenharmony_ci echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device 3328c2ecf20Sopenharmony_ci modprobe -r netdevsim &> /dev/null 3338c2ecf20Sopenharmony_ci} 3348c2ecf20Sopenharmony_ci 3358c2ecf20Sopenharmony_citrap cleanup EXIT 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_cisetup_prepare 3388c2ecf20Sopenharmony_ci 3398c2ecf20Sopenharmony_citests_run 3408c2ecf20Sopenharmony_ci 3418c2ecf20Sopenharmony_ciexit $EXIT_STATUS 342