18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_cilib_dir=$(dirname $0)/../../../net/forwarding 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ciALL_TESTS="fw_flash_test params_test regions_test reload_test \ 78c2ecf20Sopenharmony_ci netns_reload_test resource_test dev_info_test \ 88c2ecf20Sopenharmony_ci empty_reporter_test dummy_reporter_test" 98c2ecf20Sopenharmony_ciNUM_NETIFS=0 108c2ecf20Sopenharmony_cisource $lib_dir/lib.sh 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ciBUS_ADDR=10 138c2ecf20Sopenharmony_ciPORT_COUNT=4 148c2ecf20Sopenharmony_ciDEV_NAME=netdevsim$BUS_ADDR 158c2ecf20Sopenharmony_ciSYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/ 168c2ecf20Sopenharmony_ciDEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/ 178c2ecf20Sopenharmony_ciDL_HANDLE=netdevsim/$DEV_NAME 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ciwait_for_devlink() 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci "$@" | grep -q $DL_HANDLE 228c2ecf20Sopenharmony_ci} 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cidevlink_wait() 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci local timeout=$1 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci busywait "$timeout" wait_for_devlink devlink dev 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cifw_flash_test() 328c2ecf20Sopenharmony_ci{ 338c2ecf20Sopenharmony_ci RET=0 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy 368c2ecf20Sopenharmony_ci check_err $? "Failed to flash with status updates on" 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy component fw.mgmt 398c2ecf20Sopenharmony_ci check_err $? "Failed to flash with component attribute" 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy overwrite settings 428c2ecf20Sopenharmony_ci check_fail $? "Flash with overwrite settings should be rejected" 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci echo "1"> $DEBUGFS_DIR/fw_update_overwrite_mask 458c2ecf20Sopenharmony_ci check_err $? "Failed to change allowed overwrite mask" 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy overwrite settings 488c2ecf20Sopenharmony_ci check_err $? "Failed to flash with settings overwrite enabled" 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy overwrite identifiers 518c2ecf20Sopenharmony_ci check_fail $? "Flash with overwrite settings should be identifiers" 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci echo "3"> $DEBUGFS_DIR/fw_update_overwrite_mask 548c2ecf20Sopenharmony_ci check_err $? "Failed to change allowed overwrite mask" 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy overwrite identifiers overwrite settings 578c2ecf20Sopenharmony_ci check_err $? "Failed to flash with settings and identifiers overwrite enabled" 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci echo "n"> $DEBUGFS_DIR/fw_update_status 608c2ecf20Sopenharmony_ci check_err $? "Failed to disable status updates" 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci devlink dev flash $DL_HANDLE file dummy 638c2ecf20Sopenharmony_ci check_err $? "Failed to flash with status updates off" 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci log_test "fw flash test" 668c2ecf20Sopenharmony_ci} 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciparam_get() 698c2ecf20Sopenharmony_ci{ 708c2ecf20Sopenharmony_ci local name=$1 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \ 738c2ecf20Sopenharmony_ci '.[][][].values[] | select(.cmode == "driverinit").value' 748c2ecf20Sopenharmony_ci} 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ciparam_set() 778c2ecf20Sopenharmony_ci{ 788c2ecf20Sopenharmony_ci local name=$1 798c2ecf20Sopenharmony_ci local value=$2 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci devlink dev param set $DL_HANDLE name $name cmode driverinit value $value 828c2ecf20Sopenharmony_ci} 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_cicheck_value() 858c2ecf20Sopenharmony_ci{ 868c2ecf20Sopenharmony_ci local name=$1 878c2ecf20Sopenharmony_ci local phase_name=$2 888c2ecf20Sopenharmony_ci local expected_param_value=$3 898c2ecf20Sopenharmony_ci local expected_debugfs_value=$4 908c2ecf20Sopenharmony_ci local value 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci value=$(param_get $name) 938c2ecf20Sopenharmony_ci check_err $? "Failed to get $name param value" 948c2ecf20Sopenharmony_ci [ "$value" == "$expected_param_value" ] 958c2ecf20Sopenharmony_ci check_err $? "Unexpected $phase_name $name param value" 968c2ecf20Sopenharmony_ci value=$(<$DEBUGFS_DIR/$name) 978c2ecf20Sopenharmony_ci check_err $? "Failed to get $name debugfs value" 988c2ecf20Sopenharmony_ci [ "$value" == "$expected_debugfs_value" ] 998c2ecf20Sopenharmony_ci check_err $? "Unexpected $phase_name $name debugfs value" 1008c2ecf20Sopenharmony_ci} 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ciparams_test() 1038c2ecf20Sopenharmony_ci{ 1048c2ecf20Sopenharmony_ci RET=0 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci local max_macs 1078c2ecf20Sopenharmony_ci local test1 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci check_value max_macs initial 32 32 1108c2ecf20Sopenharmony_ci check_value test1 initial true Y 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci param_set max_macs 16 1138c2ecf20Sopenharmony_ci check_err $? "Failed to set max_macs param value" 1148c2ecf20Sopenharmony_ci param_set test1 false 1158c2ecf20Sopenharmony_ci check_err $? "Failed to set test1 param value" 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci check_value max_macs post-set 16 32 1188c2ecf20Sopenharmony_ci check_value test1 post-set false Y 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci check_value max_macs post-reload 16 16 1238c2ecf20Sopenharmony_ci check_value test1 post-reload false N 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ci log_test "params test" 1268c2ecf20Sopenharmony_ci} 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_cicheck_region_size() 1298c2ecf20Sopenharmony_ci{ 1308c2ecf20Sopenharmony_ci local name=$1 1318c2ecf20Sopenharmony_ci local size 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ci size=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].size') 1348c2ecf20Sopenharmony_ci check_err $? "Failed to get $name region size" 1358c2ecf20Sopenharmony_ci [ $size -eq 32768 ] 1368c2ecf20Sopenharmony_ci check_err $? "Invalid $name region size" 1378c2ecf20Sopenharmony_ci} 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_cicheck_region_snapshot_count() 1408c2ecf20Sopenharmony_ci{ 1418c2ecf20Sopenharmony_ci local name=$1 1428c2ecf20Sopenharmony_ci local phase_name=$2 1438c2ecf20Sopenharmony_ci local expected_count=$3 1448c2ecf20Sopenharmony_ci local count 1458c2ecf20Sopenharmony_ci 1468c2ecf20Sopenharmony_ci count=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].snapshot | length') 1478c2ecf20Sopenharmony_ci [ $count -eq $expected_count ] 1488c2ecf20Sopenharmony_ci check_err $? "Unexpected $phase_name snapshot count" 1498c2ecf20Sopenharmony_ci} 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ciregions_test() 1528c2ecf20Sopenharmony_ci{ 1538c2ecf20Sopenharmony_ci RET=0 1548c2ecf20Sopenharmony_ci 1558c2ecf20Sopenharmony_ci local count 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_ci check_region_size dummy 1588c2ecf20Sopenharmony_ci check_region_snapshot_count dummy initial 0 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci echo ""> $DEBUGFS_DIR/take_snapshot 1618c2ecf20Sopenharmony_ci check_err $? "Failed to take first dummy region snapshot" 1628c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-first-snapshot 1 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_ci echo ""> $DEBUGFS_DIR/take_snapshot 1658c2ecf20Sopenharmony_ci check_err $? "Failed to take second dummy region snapshot" 1668c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-second-snapshot 2 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ci echo ""> $DEBUGFS_DIR/take_snapshot 1698c2ecf20Sopenharmony_ci check_err $? "Failed to take third dummy region snapshot" 1708c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-third-snapshot 3 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_ci devlink region del $DL_HANDLE/dummy snapshot 1 1738c2ecf20Sopenharmony_ci check_err $? "Failed to delete first dummy region snapshot" 1748c2ecf20Sopenharmony_ci 1758c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-first-delete 2 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ci devlink region new $DL_HANDLE/dummy snapshot 25 1788c2ecf20Sopenharmony_ci check_err $? "Failed to create a new snapshot with id 25" 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-first-request 3 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci devlink region dump $DL_HANDLE/dummy snapshot 25 >> /dev/null 1838c2ecf20Sopenharmony_ci check_err $? "Failed to dump snapshot with id 25" 1848c2ecf20Sopenharmony_ci 1858c2ecf20Sopenharmony_ci devlink region read $DL_HANDLE/dummy snapshot 25 addr 0 len 1 >> /dev/null 1868c2ecf20Sopenharmony_ci check_err $? "Failed to read snapshot with id 25 (1 byte)" 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci devlink region read $DL_HANDLE/dummy snapshot 25 addr 128 len 128 >> /dev/null 1898c2ecf20Sopenharmony_ci check_err $? "Failed to read snapshot with id 25 (128 bytes)" 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ci devlink region read $DL_HANDLE/dummy snapshot 25 addr 128 len $((1<<32)) >> /dev/null 1928c2ecf20Sopenharmony_ci check_err $? "Failed to read snapshot with id 25 (oversized)" 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci devlink region read $DL_HANDLE/dummy snapshot 25 addr $((1<<32)) len 128 >> /dev/null 2>&1 1958c2ecf20Sopenharmony_ci check_fail $? "Bad read of snapshot with id 25 did not fail" 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_ci devlink region del $DL_HANDLE/dummy snapshot 25 1988c2ecf20Sopenharmony_ci check_err $? "Failed to delete snapshot with id 25" 1998c2ecf20Sopenharmony_ci 2008c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-second-delete 2 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ci sid=$(devlink -j region new $DL_HANDLE/dummy | jq '.[][][][]') 2038c2ecf20Sopenharmony_ci check_err $? "Failed to create a new snapshot with id allocated by the kernel" 2048c2ecf20Sopenharmony_ci 2058c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-first-request 3 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ci devlink region dump $DL_HANDLE/dummy snapshot $sid >> /dev/null 2088c2ecf20Sopenharmony_ci check_err $? "Failed to dump a snapshot with id allocated by the kernel" 2098c2ecf20Sopenharmony_ci 2108c2ecf20Sopenharmony_ci devlink region del $DL_HANDLE/dummy snapshot $sid 2118c2ecf20Sopenharmony_ci check_err $? "Failed to delete snapshot with id allocated by the kernel" 2128c2ecf20Sopenharmony_ci 2138c2ecf20Sopenharmony_ci check_region_snapshot_count dummy post-first-request 2 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ci log_test "regions test" 2168c2ecf20Sopenharmony_ci} 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_cireload_test() 2198c2ecf20Sopenharmony_ci{ 2208c2ecf20Sopenharmony_ci RET=0 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE 2238c2ecf20Sopenharmony_ci check_err $? "Failed to reload" 2248c2ecf20Sopenharmony_ci 2258c2ecf20Sopenharmony_ci echo "y"> $DEBUGFS_DIR/fail_reload 2268c2ecf20Sopenharmony_ci check_err $? "Failed to setup devlink reload to fail" 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE 2298c2ecf20Sopenharmony_ci check_fail $? "Unexpected success of devlink reload" 2308c2ecf20Sopenharmony_ci 2318c2ecf20Sopenharmony_ci echo "n"> $DEBUGFS_DIR/fail_reload 2328c2ecf20Sopenharmony_ci check_err $? "Failed to setup devlink reload not to fail" 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE 2358c2ecf20Sopenharmony_ci check_err $? "Failed to reload after set not to fail" 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ci echo "y"> $DEBUGFS_DIR/dont_allow_reload 2388c2ecf20Sopenharmony_ci check_err $? "Failed to forbid devlink reload" 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE 2418c2ecf20Sopenharmony_ci check_fail $? "Unexpected success of devlink reload" 2428c2ecf20Sopenharmony_ci 2438c2ecf20Sopenharmony_ci echo "n"> $DEBUGFS_DIR/dont_allow_reload 2448c2ecf20Sopenharmony_ci check_err $? "Failed to re-enable devlink reload" 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE 2478c2ecf20Sopenharmony_ci check_err $? "Failed to reload after re-enable" 2488c2ecf20Sopenharmony_ci 2498c2ecf20Sopenharmony_ci log_test "reload test" 2508c2ecf20Sopenharmony_ci} 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_cinetns_reload_test() 2538c2ecf20Sopenharmony_ci{ 2548c2ecf20Sopenharmony_ci RET=0 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_ci ip netns add testns1 2578c2ecf20Sopenharmony_ci check_err $? "Failed add netns \"testns1\"" 2588c2ecf20Sopenharmony_ci ip netns add testns2 2598c2ecf20Sopenharmony_ci check_err $? "Failed add netns \"testns2\"" 2608c2ecf20Sopenharmony_ci 2618c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE netns testns1 2628c2ecf20Sopenharmony_ci check_err $? "Failed to reload into netns \"testns1\"" 2638c2ecf20Sopenharmony_ci 2648c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DL_HANDLE netns testns2 2658c2ecf20Sopenharmony_ci check_err $? "Failed to reload from netns \"testns1\" into netns \"testns2\"" 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci ip netns del testns2 2688c2ecf20Sopenharmony_ci ip netns del testns1 2698c2ecf20Sopenharmony_ci 2708c2ecf20Sopenharmony_ci # Wait until netns async cleanup is done. 2718c2ecf20Sopenharmony_ci devlink_wait 2000 2728c2ecf20Sopenharmony_ci 2738c2ecf20Sopenharmony_ci log_test "netns reload test" 2748c2ecf20Sopenharmony_ci} 2758c2ecf20Sopenharmony_ci 2768c2ecf20Sopenharmony_ciDUMMYDEV="dummytest" 2778c2ecf20Sopenharmony_ci 2788c2ecf20Sopenharmony_cires_val_get() 2798c2ecf20Sopenharmony_ci{ 2808c2ecf20Sopenharmony_ci local netns=$1 2818c2ecf20Sopenharmony_ci local parentname=$2 2828c2ecf20Sopenharmony_ci local name=$3 2838c2ecf20Sopenharmony_ci local type=$4 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_ci cmd_jq "devlink -N $netns resource show $DL_HANDLE -j" \ 2868c2ecf20Sopenharmony_ci ".[][][] | select(.name == \"$parentname\").resources[] \ 2878c2ecf20Sopenharmony_ci | select(.name == \"$name\").$type" 2888c2ecf20Sopenharmony_ci} 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_ciresource_test() 2918c2ecf20Sopenharmony_ci{ 2928c2ecf20Sopenharmony_ci RET=0 2938c2ecf20Sopenharmony_ci 2948c2ecf20Sopenharmony_ci ip netns add testns1 2958c2ecf20Sopenharmony_ci check_err $? "Failed add netns \"testns1\"" 2968c2ecf20Sopenharmony_ci ip netns add testns2 2978c2ecf20Sopenharmony_ci check_err $? "Failed add netns \"testns2\"" 2988c2ecf20Sopenharmony_ci 2998c2ecf20Sopenharmony_ci devlink dev reload $DL_HANDLE netns testns1 3008c2ecf20Sopenharmony_ci check_err $? "Failed to reload into netns \"testns1\"" 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_ci # Create dummy dev to add the address and routes on. 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_ci ip -n testns1 link add name $DUMMYDEV type dummy 3058c2ecf20Sopenharmony_ci check_err $? "Failed create dummy device" 3068c2ecf20Sopenharmony_ci ip -n testns1 link set $DUMMYDEV up 3078c2ecf20Sopenharmony_ci check_err $? "Failed bring up dummy device" 3088c2ecf20Sopenharmony_ci ip -n testns1 a a 192.0.1.1/24 dev $DUMMYDEV 3098c2ecf20Sopenharmony_ci check_err $? "Failed add an IP address to dummy device" 3108c2ecf20Sopenharmony_ci 3118c2ecf20Sopenharmony_ci local occ=$(res_val_get testns1 IPv4 fib occ) 3128c2ecf20Sopenharmony_ci local limit=$((occ+1)) 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_ci # Set fib size limit to handle one another route only. 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_ci devlink -N testns1 resource set $DL_HANDLE path IPv4/fib size $limit 3178c2ecf20Sopenharmony_ci check_err $? "Failed to set IPv4/fib resource size" 3188c2ecf20Sopenharmony_ci local size_new=$(res_val_get testns1 IPv4 fib size_new) 3198c2ecf20Sopenharmony_ci [ "$size_new" -eq "$limit" ] 3208c2ecf20Sopenharmony_ci check_err $? "Unexpected \"size_new\" value (got $size_new, expected $limit)" 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DL_HANDLE 3238c2ecf20Sopenharmony_ci check_err $? "Failed to reload" 3248c2ecf20Sopenharmony_ci local size=$(res_val_get testns1 IPv4 fib size) 3258c2ecf20Sopenharmony_ci [ "$size" -eq "$limit" ] 3268c2ecf20Sopenharmony_ci check_err $? "Unexpected \"size\" value (got $size, expected $limit)" 3278c2ecf20Sopenharmony_ci 3288c2ecf20Sopenharmony_ci # Insert 2 routes, the first is going to be inserted, 3298c2ecf20Sopenharmony_ci # the second is expected to fail to be inserted. 3308c2ecf20Sopenharmony_ci 3318c2ecf20Sopenharmony_ci ip -n testns1 r a 192.0.2.0/24 via 192.0.1.2 3328c2ecf20Sopenharmony_ci check_err $? "Failed to add route" 3338c2ecf20Sopenharmony_ci 3348c2ecf20Sopenharmony_ci ip -n testns1 r a 192.0.3.0/24 via 192.0.1.2 3358c2ecf20Sopenharmony_ci check_fail $? "Unexpected successful route add over limit" 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_ci # Now create another dummy in second network namespace and 3388c2ecf20Sopenharmony_ci # insert two routes. That is over the limit of the netdevsim 3398c2ecf20Sopenharmony_ci # instance in the first namespace. Move the netdevsim instance 3408c2ecf20Sopenharmony_ci # into the second namespace and expect it to fail. 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_ci ip -n testns2 link add name $DUMMYDEV type dummy 3438c2ecf20Sopenharmony_ci check_err $? "Failed create dummy device" 3448c2ecf20Sopenharmony_ci ip -n testns2 link set $DUMMYDEV up 3458c2ecf20Sopenharmony_ci check_err $? "Failed bring up dummy device" 3468c2ecf20Sopenharmony_ci ip -n testns2 a a 192.0.1.1/24 dev $DUMMYDEV 3478c2ecf20Sopenharmony_ci check_err $? "Failed add an IP address to dummy device" 3488c2ecf20Sopenharmony_ci ip -n testns2 r a 192.0.2.0/24 via 192.0.1.2 3498c2ecf20Sopenharmony_ci check_err $? "Failed to add route" 3508c2ecf20Sopenharmony_ci ip -n testns2 r a 192.0.3.0/24 via 192.0.1.2 3518c2ecf20Sopenharmony_ci check_err $? "Failed to add route" 3528c2ecf20Sopenharmony_ci 3538c2ecf20Sopenharmony_ci devlink -N testns1 dev reload $DL_HANDLE netns testns2 3548c2ecf20Sopenharmony_ci check_fail $? "Unexpected successful reload from netns \"testns1\" into netns \"testns2\"" 3558c2ecf20Sopenharmony_ci 3568c2ecf20Sopenharmony_ci devlink -N testns2 resource set $DL_HANDLE path IPv4/fib size ' -1' 3578c2ecf20Sopenharmony_ci check_err $? "Failed to reset IPv4/fib resource size" 3588c2ecf20Sopenharmony_ci 3598c2ecf20Sopenharmony_ci devlink -N testns2 dev reload $DL_HANDLE netns 1 3608c2ecf20Sopenharmony_ci check_err $? "Failed to reload devlink back" 3618c2ecf20Sopenharmony_ci 3628c2ecf20Sopenharmony_ci ip netns del testns2 3638c2ecf20Sopenharmony_ci ip netns del testns1 3648c2ecf20Sopenharmony_ci 3658c2ecf20Sopenharmony_ci # Wait until netns async cleanup is done. 3668c2ecf20Sopenharmony_ci devlink_wait 2000 3678c2ecf20Sopenharmony_ci 3688c2ecf20Sopenharmony_ci log_test "resource test" 3698c2ecf20Sopenharmony_ci} 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_ciinfo_get() 3728c2ecf20Sopenharmony_ci{ 3738c2ecf20Sopenharmony_ci local name=$1 3748c2ecf20Sopenharmony_ci 3758c2ecf20Sopenharmony_ci cmd_jq "devlink dev info $DL_HANDLE -j" ".[][][\"$name\"]" "-e" 3768c2ecf20Sopenharmony_ci} 3778c2ecf20Sopenharmony_ci 3788c2ecf20Sopenharmony_cidev_info_test() 3798c2ecf20Sopenharmony_ci{ 3808c2ecf20Sopenharmony_ci RET=0 3818c2ecf20Sopenharmony_ci 3828c2ecf20Sopenharmony_ci driver=$(info_get "driver") 3838c2ecf20Sopenharmony_ci check_err $? "Failed to get driver name" 3848c2ecf20Sopenharmony_ci [ "$driver" == "netdevsim" ] 3858c2ecf20Sopenharmony_ci check_err $? "Unexpected driver name $driver" 3868c2ecf20Sopenharmony_ci 3878c2ecf20Sopenharmony_ci log_test "dev_info test" 3888c2ecf20Sopenharmony_ci} 3898c2ecf20Sopenharmony_ci 3908c2ecf20Sopenharmony_ciempty_reporter_test() 3918c2ecf20Sopenharmony_ci{ 3928c2ecf20Sopenharmony_ci RET=0 3938c2ecf20Sopenharmony_ci 3948c2ecf20Sopenharmony_ci devlink health show $DL_HANDLE reporter empty >/dev/null 3958c2ecf20Sopenharmony_ci check_err $? "Failed show empty reporter" 3968c2ecf20Sopenharmony_ci 3978c2ecf20Sopenharmony_ci devlink health dump show $DL_HANDLE reporter empty >/dev/null 3988c2ecf20Sopenharmony_ci check_err $? "Failed show dump of empty reporter" 3998c2ecf20Sopenharmony_ci 4008c2ecf20Sopenharmony_ci devlink health diagnose $DL_HANDLE reporter empty >/dev/null 4018c2ecf20Sopenharmony_ci check_err $? "Failed diagnose empty reporter" 4028c2ecf20Sopenharmony_ci 4038c2ecf20Sopenharmony_ci devlink health recover $DL_HANDLE reporter empty 4048c2ecf20Sopenharmony_ci check_err $? "Failed recover empty reporter" 4058c2ecf20Sopenharmony_ci 4068c2ecf20Sopenharmony_ci log_test "empty reporter test" 4078c2ecf20Sopenharmony_ci} 4088c2ecf20Sopenharmony_ci 4098c2ecf20Sopenharmony_cicheck_reporter_info() 4108c2ecf20Sopenharmony_ci{ 4118c2ecf20Sopenharmony_ci local name=$1 4128c2ecf20Sopenharmony_ci local expected_state=$2 4138c2ecf20Sopenharmony_ci local expected_error=$3 4148c2ecf20Sopenharmony_ci local expected_recover=$4 4158c2ecf20Sopenharmony_ci local expected_grace_period=$5 4168c2ecf20Sopenharmony_ci local expected_auto_recover=$6 4178c2ecf20Sopenharmony_ci 4188c2ecf20Sopenharmony_ci local show=$(devlink health show $DL_HANDLE reporter $name -j | jq -e -r ".[][][]") 4198c2ecf20Sopenharmony_ci check_err $? "Failed show $name reporter" 4208c2ecf20Sopenharmony_ci 4218c2ecf20Sopenharmony_ci local state=$(echo $show | jq -r ".state") 4228c2ecf20Sopenharmony_ci [ "$state" == "$expected_state" ] 4238c2ecf20Sopenharmony_ci check_err $? "Unexpected \"state\" value (got $state, expected $expected_state)" 4248c2ecf20Sopenharmony_ci 4258c2ecf20Sopenharmony_ci local error=$(echo $show | jq -r ".error") 4268c2ecf20Sopenharmony_ci [ "$error" == "$expected_error" ] 4278c2ecf20Sopenharmony_ci check_err $? "Unexpected \"error\" value (got $error, expected $expected_error)" 4288c2ecf20Sopenharmony_ci 4298c2ecf20Sopenharmony_ci local recover=`echo $show | jq -r ".recover"` 4308c2ecf20Sopenharmony_ci [ "$recover" == "$expected_recover" ] 4318c2ecf20Sopenharmony_ci check_err $? "Unexpected \"recover\" value (got $recover, expected $expected_recover)" 4328c2ecf20Sopenharmony_ci 4338c2ecf20Sopenharmony_ci local grace_period=$(echo $show | jq -r ".grace_period") 4348c2ecf20Sopenharmony_ci check_err $? "Failed get $name reporter grace_period" 4358c2ecf20Sopenharmony_ci [ "$grace_period" == "$expected_grace_period" ] 4368c2ecf20Sopenharmony_ci check_err $? "Unexpected \"grace_period\" value (got $grace_period, expected $expected_grace_period)" 4378c2ecf20Sopenharmony_ci 4388c2ecf20Sopenharmony_ci local auto_recover=$(echo $show | jq -r ".auto_recover") 4398c2ecf20Sopenharmony_ci [ "$auto_recover" == "$expected_auto_recover" ] 4408c2ecf20Sopenharmony_ci check_err $? "Unexpected \"auto_recover\" value (got $auto_recover, expected $expected_auto_recover)" 4418c2ecf20Sopenharmony_ci} 4428c2ecf20Sopenharmony_ci 4438c2ecf20Sopenharmony_cidummy_reporter_test() 4448c2ecf20Sopenharmony_ci{ 4458c2ecf20Sopenharmony_ci RET=0 4468c2ecf20Sopenharmony_ci 4478c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 0 0 0 true 4488c2ecf20Sopenharmony_ci 4498c2ecf20Sopenharmony_ci devlink health set $DL_HANDLE reporter dummy auto_recover false 4508c2ecf20Sopenharmony_ci check_err $? "Failed to dummy reporter auto_recover option" 4518c2ecf20Sopenharmony_ci 4528c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 0 0 0 false 4538c2ecf20Sopenharmony_ci 4548c2ecf20Sopenharmony_ci local BREAK_MSG="foo bar" 4558c2ecf20Sopenharmony_ci echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health 4568c2ecf20Sopenharmony_ci check_err $? "Failed to break dummy reporter" 4578c2ecf20Sopenharmony_ci 4588c2ecf20Sopenharmony_ci check_reporter_info dummy error 1 0 0 false 4598c2ecf20Sopenharmony_ci 4608c2ecf20Sopenharmony_ci local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j) 4618c2ecf20Sopenharmony_ci check_err $? "Failed show dump of dummy reporter" 4628c2ecf20Sopenharmony_ci 4638c2ecf20Sopenharmony_ci local dump_break_msg=$(echo $dump | jq -r ".break_message") 4648c2ecf20Sopenharmony_ci [ "$dump_break_msg" == "$BREAK_MSG" ] 4658c2ecf20Sopenharmony_ci check_err $? "Unexpected dump break message value (got $dump_break_msg, expected $BREAK_MSG)" 4668c2ecf20Sopenharmony_ci 4678c2ecf20Sopenharmony_ci devlink health dump clear $DL_HANDLE reporter dummy 4688c2ecf20Sopenharmony_ci check_err $? "Failed clear dump of dummy reporter" 4698c2ecf20Sopenharmony_ci 4708c2ecf20Sopenharmony_ci devlink health recover $DL_HANDLE reporter dummy 4718c2ecf20Sopenharmony_ci check_err $? "Failed recover dummy reporter" 4728c2ecf20Sopenharmony_ci 4738c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 1 1 0 false 4748c2ecf20Sopenharmony_ci 4758c2ecf20Sopenharmony_ci devlink health set $DL_HANDLE reporter dummy auto_recover true 4768c2ecf20Sopenharmony_ci check_err $? "Failed to dummy reporter auto_recover option" 4778c2ecf20Sopenharmony_ci 4788c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 1 1 0 true 4798c2ecf20Sopenharmony_ci 4808c2ecf20Sopenharmony_ci echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health 4818c2ecf20Sopenharmony_ci check_err $? "Failed to break dummy reporter" 4828c2ecf20Sopenharmony_ci 4838c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 2 2 0 true 4848c2ecf20Sopenharmony_ci 4858c2ecf20Sopenharmony_ci local diagnose=$(devlink health diagnose $DL_HANDLE reporter dummy -j -p) 4868c2ecf20Sopenharmony_ci check_err $? "Failed show diagnose of dummy reporter" 4878c2ecf20Sopenharmony_ci 4888c2ecf20Sopenharmony_ci local rcvrd_break_msg=$(echo $diagnose | jq -r ".recovered_break_message") 4898c2ecf20Sopenharmony_ci [ "$rcvrd_break_msg" == "$BREAK_MSG" ] 4908c2ecf20Sopenharmony_ci check_err $? "Unexpected recovered break message value (got $rcvrd_break_msg, expected $BREAK_MSG)" 4918c2ecf20Sopenharmony_ci 4928c2ecf20Sopenharmony_ci devlink health set $DL_HANDLE reporter dummy grace_period 10 4938c2ecf20Sopenharmony_ci check_err $? "Failed to dummy reporter grace_period option" 4948c2ecf20Sopenharmony_ci 4958c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 2 2 10 true 4968c2ecf20Sopenharmony_ci 4978c2ecf20Sopenharmony_ci echo "Y"> $DEBUGFS_DIR/health/fail_recover 4988c2ecf20Sopenharmony_ci check_err $? "Failed set dummy reporter recovery to fail" 4998c2ecf20Sopenharmony_ci 5008c2ecf20Sopenharmony_ci echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health 5018c2ecf20Sopenharmony_ci check_fail $? "Unexpected success of dummy reporter break" 5028c2ecf20Sopenharmony_ci 5038c2ecf20Sopenharmony_ci check_reporter_info dummy error 3 2 10 true 5048c2ecf20Sopenharmony_ci 5058c2ecf20Sopenharmony_ci devlink health recover $DL_HANDLE reporter dummy 5068c2ecf20Sopenharmony_ci check_fail $? "Unexpected success of dummy reporter recover" 5078c2ecf20Sopenharmony_ci 5088c2ecf20Sopenharmony_ci echo "N"> $DEBUGFS_DIR/health/fail_recover 5098c2ecf20Sopenharmony_ci check_err $? "Failed set dummy reporter recovery to be successful" 5108c2ecf20Sopenharmony_ci 5118c2ecf20Sopenharmony_ci devlink health recover $DL_HANDLE reporter dummy 5128c2ecf20Sopenharmony_ci check_err $? "Failed recover dummy reporter" 5138c2ecf20Sopenharmony_ci 5148c2ecf20Sopenharmony_ci check_reporter_info dummy healthy 3 3 10 true 5158c2ecf20Sopenharmony_ci 5168c2ecf20Sopenharmony_ci echo 8192 > $DEBUGFS_DIR/health/binary_len 5178c2ecf20Sopenharmony_ci check_err $? "Failed set dummy reporter binary len to 8192" 5188c2ecf20Sopenharmony_ci 5198c2ecf20Sopenharmony_ci local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j) 5208c2ecf20Sopenharmony_ci check_err $? "Failed show dump of dummy reporter" 5218c2ecf20Sopenharmony_ci 5228c2ecf20Sopenharmony_ci devlink health dump clear $DL_HANDLE reporter dummy 5238c2ecf20Sopenharmony_ci check_err $? "Failed clear dump of dummy reporter" 5248c2ecf20Sopenharmony_ci 5258c2ecf20Sopenharmony_ci log_test "dummy reporter test" 5268c2ecf20Sopenharmony_ci} 5278c2ecf20Sopenharmony_ci 5288c2ecf20Sopenharmony_cisetup_prepare() 5298c2ecf20Sopenharmony_ci{ 5308c2ecf20Sopenharmony_ci modprobe netdevsim 5318c2ecf20Sopenharmony_ci echo "$BUS_ADDR $PORT_COUNT" > /sys/bus/netdevsim/new_device 5328c2ecf20Sopenharmony_ci while [ ! -d $SYSFS_NET_DIR ] ; do :; done 5338c2ecf20Sopenharmony_ci} 5348c2ecf20Sopenharmony_ci 5358c2ecf20Sopenharmony_cicleanup() 5368c2ecf20Sopenharmony_ci{ 5378c2ecf20Sopenharmony_ci pre_cleanup 5388c2ecf20Sopenharmony_ci echo "$BUS_ADDR" > /sys/bus/netdevsim/del_device 5398c2ecf20Sopenharmony_ci modprobe -r netdevsim 5408c2ecf20Sopenharmony_ci} 5418c2ecf20Sopenharmony_ci 5428c2ecf20Sopenharmony_citrap cleanup EXIT 5438c2ecf20Sopenharmony_ci 5448c2ecf20Sopenharmony_cisetup_prepare 5458c2ecf20Sopenharmony_ci 5468c2ecf20Sopenharmony_citests_run 5478c2ecf20Sopenharmony_ci 5488c2ecf20Sopenharmony_ciexit $EXIT_STATUS 549