#!/bin/bash # SPDX-License-Identifier: GPL-2.0 lib_dir=$(dirname $0)/../../../../net/forwarding NUM_NETIFS=1 source $lib_dir/lib.sh source devlink_lib_spectrum.sh setup_prepare() { devlink_sp_read_kvd_defaults } cleanup() { pre_cleanup devlink_sp_size_kvd_to_default } trap cleanup EXIT setup_prepare profiles_test() { local i log_info "Running profile tests" for i in $KVD_PROFILES; do RET=0 devlink_sp_resource_kvd_profile_set $i log_test "'$i' profile" done # Default is explicitly tested at end to ensure it's actually applied RET=0 devlink_sp_resource_kvd_profile_set "default" log_test "'default' profile" } resources_min_test() { local size local i local j log_info "Running KVD-minimum tests" for i in $KVD_CHILDREN; do RET=0 size=$(devlink_resource_get kvd "$i" | jq '.["size_min"]') devlink_resource_size_set "$size" kvd "$i" # In case of linear, need to minimize sub-resources as well if [[ "$i" == "linear" ]]; then for j in $KVDL_CHILDREN; do devlink_resource_size_set 0 kvd linear "$j" done fi devlink_reload devlink_sp_size_kvd_to_default log_test "'$i' minimize [$size]" done } resources_max_test() { local min_size local size local i local j log_info "Running KVD-maximum tests" for i in $KVD_CHILDREN; do RET=0 devlink_sp_resource_minimize # Calculate the maximum possible size for the given partition size=$(devlink_resource_size_get kvd) for j in $KVD_CHILDREN; do if [ "$i" != "$j" ]; then min_size=$(devlink_resource_get kvd "$j" | \ jq '.["size_min"]') size=$((size - min_size)) fi done # Test almost maximum size devlink_resource_size_set "$((size - 128))" kvd "$i" devlink_reload log_test "'$i' almost maximize [$((size - 128))]" # Test above maximum size devlink resource set "$DEVLINK_DEV" \ path "kvd/$i" size $((size + 128)) &> /dev/null check_fail $? "Set kvd/$i to size $((size + 128)) should fail" log_test "'$i' Overflow rejection [$((size + 128))]" # Test maximum size if [ "$i" == "hash_single" ] || [ "$i" == "hash_double" ]; then echo "SKIP: Observed problem with exact max $i" continue fi devlink_resource_size_set "$size" kvd "$i" devlink_reload log_test "'$i' maximize [$size]" devlink_sp_size_kvd_to_default done } profiles_test resources_min_test resources_max_test exit "$RET"