]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftest: netdevsim: test devlink default params
authorDaniel Zahka <daniel.zahka@gmail.com>
Wed, 19 Nov 2025 02:50:36 +0000 (18:50 -0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Nov 2025 03:01:23 +0000 (19:01 -0800)
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>
tools/testing/selftests/drivers/net/netdevsim/devlink.sh

index 030762b203d76be8c230d19a19c47aa44bd752ec..1b529ccaf0508bdec0830867c689562c64c5d1ca 100755 (executable)
@@ -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