Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Daniel Zahka and committed by
Jakub Kicinski
8be656cf 72924056

+110 -6
+110 -6
tools/testing/selftests/drivers/net/netdevsim/devlink.sh
··· 3 3 4 4 lib_dir=$(dirname $0)/../../../net/forwarding 5 5 6 - ALL_TESTS="fw_flash_test params_test regions_test reload_test \ 6 + ALL_TESTS="fw_flash_test params_test \ 7 + params_default_test regions_test reload_test \ 7 8 netns_reload_test resource_test dev_info_test \ 8 9 empty_reporter_test dummy_reporter_test rate_test" 9 10 NUM_NETIFS=0 ··· 79 78 param_get() 80 79 { 81 80 local name=$1 81 + local attr=${2:-value} 82 + local cmode=${3:-driverinit} 82 83 83 84 cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \ 84 - '.[][][].values[] | select(.cmode == "driverinit").value' 85 + '.[][][].values[] | select(.cmode == "'"$cmode"'").'"$attr" 85 86 } 86 87 87 88 param_set() 88 89 { 89 90 local name=$1 90 91 local value=$2 92 + local cmode=${3:-driverinit} 91 93 92 - devlink dev param set $DL_HANDLE name $name cmode driverinit value $value 94 + devlink dev param set $DL_HANDLE name $name cmode $cmode value $value 95 + } 96 + 97 + param_set_default() 98 + { 99 + local name=$1 100 + local cmode=${2:-driverinit} 101 + 102 + devlink dev param set $DL_HANDLE name $name default cmode $cmode 93 103 } 94 104 95 105 check_value() ··· 109 97 local phase_name=$2 110 98 local expected_param_value=$3 111 99 local expected_debugfs_value=$4 100 + local cmode=${5:-driverinit} 112 101 local value 102 + local attr="value" 113 103 114 - value=$(param_get $name) 115 - check_err $? "Failed to get $name param value" 104 + if [[ "$phase_name" == *"default"* ]]; then 105 + attr="default" 106 + fi 107 + 108 + value=$(param_get $name $attr $cmode) 109 + check_err $? "Failed to get $name param $attr" 116 110 [ "$value" == "$expected_param_value" ] 117 - check_err $? "Unexpected $phase_name $name param value" 111 + check_err $? "Unexpected $phase_name $name param $attr" 118 112 value=$(<$DEBUGFS_DIR/$name) 119 113 check_err $? "Failed to get $name debugfs value" 120 114 [ "$value" == "$expected_debugfs_value" ] ··· 151 133 check_value test1 post-reload false N 152 134 153 135 log_test "params test" 136 + } 137 + 138 + value_to_debugfs() 139 + { 140 + local value=$1 141 + 142 + case "$value" in 143 + true) 144 + echo "Y" 145 + ;; 146 + false) 147 + echo "N" 148 + ;; 149 + *) 150 + echo "$value" 151 + ;; 152 + esac 153 + } 154 + 155 + test_default() 156 + { 157 + local param_name=$1 158 + local new_value=$2 159 + local expected_default=$3 160 + local cmode=${4:-driverinit} 161 + local default_debugfs 162 + local new_debugfs 163 + local expected_debugfs 164 + 165 + default_debugfs=$(value_to_debugfs $expected_default) 166 + new_debugfs=$(value_to_debugfs $new_value) 167 + 168 + expected_debugfs=$default_debugfs 169 + check_value $param_name initial-default $expected_default $expected_debugfs $cmode 170 + 171 + param_set $param_name $new_value $cmode 172 + check_err $? "Failed to set $param_name to $new_value" 173 + 174 + expected_debugfs=$([ "$cmode" == "runtime" ] && echo "$new_debugfs" || echo "$default_debugfs") 175 + check_value $param_name post-set $new_value $expected_debugfs $cmode 176 + 177 + devlink dev reload $DL_HANDLE 178 + check_err $? "Failed to reload device" 179 + 180 + expected_debugfs=$new_debugfs 181 + check_value $param_name post-reload-new-value $new_value $expected_debugfs $cmode 182 + 183 + param_set_default $param_name $cmode 184 + check_err $? "Failed to set $param_name to default" 185 + 186 + expected_debugfs=$([ "$cmode" == "runtime" ] && echo "$default_debugfs" || echo "$new_debugfs") 187 + check_value $param_name post-set-default $expected_default $expected_debugfs $cmode 188 + 189 + devlink dev reload $DL_HANDLE 190 + check_err $? "Failed to reload device" 191 + 192 + expected_debugfs=$default_debugfs 193 + check_value $param_name post-reload-default $expected_default $expected_debugfs $cmode 194 + } 195 + 196 + params_default_test() 197 + { 198 + RET=0 199 + 200 + if ! devlink dev param help 2>&1 | grep -q "value VALUE | default"; then 201 + echo "SKIP: devlink cli missing default feature" 202 + return 203 + fi 204 + 205 + # Remove side effects of previous tests. Use plain param_set, because 206 + # param_set_default is a feature under test here. 207 + param_set max_macs 32 driverinit 208 + check_err $? "Failed to reset max_macs to default value" 209 + param_set test1 true driverinit 210 + check_err $? "Failed to reset test1 to default value" 211 + param_set test2 1234 runtime 212 + check_err $? "Failed to reset test2 to default value" 213 + 214 + devlink dev reload $DL_HANDLE 215 + check_err $? "Failed to reload device for clean state" 216 + 217 + test_default max_macs 16 32 driverinit 218 + test_default test1 false true driverinit 219 + test_default test2 100 1234 runtime 220 + 221 + log_test "params default test" 154 222 } 155 223 156 224 check_region_size()