selftest: netdevsim: test devlink default params

Test querying default values and resetting to default values for
netdevsim devlink params.

This should cover the basic paths of interest: driverinit and
non-driverinit cmodes, as well as bool and non-bool value
type. Default param values of type bool are encoded with u8 netlink
type as opposed to flag type, so that userspace can distinguish
"not-present" from false.

Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
Link: https://patch.msgid.link/20251119025038.651131-7-daniel.zahka@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Daniel Zahka
2025-11-18 18:50:36 -08:00
committed by Jakub Kicinski
parent 72924056eb
commit 8be656cfb9

View File

@@ -3,7 +3,8 @@
lib_dir=$(dirname $0)/../../../net/forwarding
ALL_TESTS="fw_flash_test params_test regions_test reload_test \
ALL_TESTS="fw_flash_test params_test \
params_default_test regions_test reload_test \
netns_reload_test resource_test dev_info_test \
empty_reporter_test dummy_reporter_test rate_test"
NUM_NETIFS=0
@@ -78,17 +79,28 @@ fw_flash_test()
param_get()
{
local name=$1
local attr=${2:-value}
local cmode=${3:-driverinit}
cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \
'.[][][].values[] | select(.cmode == "driverinit").value'
'.[][][].values[] | select(.cmode == "'"$cmode"'").'"$attr"
}
param_set()
{
local name=$1
local value=$2
local cmode=${3:-driverinit}
devlink dev param set $DL_HANDLE name $name cmode driverinit value $value
devlink dev param set $DL_HANDLE name $name cmode $cmode value $value
}
param_set_default()
{
local name=$1
local cmode=${2:-driverinit}
devlink dev param set $DL_HANDLE name $name default cmode $cmode
}
check_value()
@@ -97,12 +109,18 @@ check_value()
local phase_name=$2
local expected_param_value=$3
local expected_debugfs_value=$4
local cmode=${5:-driverinit}
local value
local attr="value"
value=$(param_get $name)
check_err $? "Failed to get $name param value"
if [[ "$phase_name" == *"default"* ]]; then
attr="default"
fi
value=$(param_get $name $attr $cmode)
check_err $? "Failed to get $name param $attr"
[ "$value" == "$expected_param_value" ]
check_err $? "Unexpected $phase_name $name param value"
check_err $? "Unexpected $phase_name $name param $attr"
value=$(<$DEBUGFS_DIR/$name)
check_err $? "Failed to get $name debugfs value"
[ "$value" == "$expected_debugfs_value" ]
@@ -135,6 +153,92 @@ params_test()
log_test "params test"
}
value_to_debugfs()
{
local value=$1
case "$value" in
true)
echo "Y"
;;
false)
echo "N"
;;
*)
echo "$value"
;;
esac
}
test_default()
{
local param_name=$1
local new_value=$2
local expected_default=$3
local cmode=${4:-driverinit}
local default_debugfs
local new_debugfs
local expected_debugfs
default_debugfs=$(value_to_debugfs $expected_default)
new_debugfs=$(value_to_debugfs $new_value)
expected_debugfs=$default_debugfs
check_value $param_name initial-default $expected_default $expected_debugfs $cmode
param_set $param_name $new_value $cmode
check_err $? "Failed to set $param_name to $new_value"
expected_debugfs=$([ "$cmode" == "runtime" ] && echo "$new_debugfs" || echo "$default_debugfs")
check_value $param_name post-set $new_value $expected_debugfs $cmode
devlink dev reload $DL_HANDLE
check_err $? "Failed to reload device"
expected_debugfs=$new_debugfs
check_value $param_name post-reload-new-value $new_value $expected_debugfs $cmode
param_set_default $param_name $cmode
check_err $? "Failed to set $param_name to default"
expected_debugfs=$([ "$cmode" == "runtime" ] && echo "$default_debugfs" || echo "$new_debugfs")
check_value $param_name post-set-default $expected_default $expected_debugfs $cmode
devlink dev reload $DL_HANDLE
check_err $? "Failed to reload device"
expected_debugfs=$default_debugfs
check_value $param_name post-reload-default $expected_default $expected_debugfs $cmode
}
params_default_test()
{
RET=0
if ! devlink dev param help 2>&1 | grep -q "value VALUE | default"; then
echo "SKIP: devlink cli missing default feature"
return
fi
# Remove side effects of previous tests. Use plain param_set, because
# param_set_default is a feature under test here.
param_set max_macs 32 driverinit
check_err $? "Failed to reset max_macs to default value"
param_set test1 true driverinit
check_err $? "Failed to reset test1 to default value"
param_set test2 1234 runtime
check_err $? "Failed to reset test2 to default value"
devlink dev reload $DL_HANDLE
check_err $? "Failed to reload device for clean state"
test_default max_macs 16 32 driverinit
test_default test1 false true driverinit
test_default test2 100 1234 runtime
log_test "params default test"
}
check_region_size()
{
local name=$1