| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| lib_dir=$(dirname $0)/../../../net/forwarding |
| |
| ALL_TESTS="fw_flash_test params_test regions_test" |
| NUM_NETIFS=0 |
| source $lib_dir/lib.sh |
| |
| BUS_ADDR=10 |
| PORT_COUNT=4 |
| DEV_NAME=netdevsim$BUS_ADDR |
| SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/ |
| DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/ |
| DL_HANDLE=netdevsim/$DEV_NAME |
| |
| fw_flash_test() |
| { |
| RET=0 |
| |
| devlink dev flash $DL_HANDLE file dummy |
| check_err $? "Failed to flash with status updates on" |
| |
| echo "n"> $DEBUGFS_DIR/fw_update_status |
| check_err $? "Failed to disable status updates" |
| |
| devlink dev flash $DL_HANDLE file dummy |
| check_err $? "Failed to flash with status updates off" |
| |
| log_test "fw flash test" |
| } |
| |
| param_get() |
| { |
| local name=$1 |
| |
| cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \ |
| '.[][][].values[] | select(.cmode == "driverinit").value' |
| } |
| |
| param_set() |
| { |
| local name=$1 |
| local value=$2 |
| |
| devlink dev param set $DL_HANDLE name $name cmode driverinit value $value |
| } |
| |
| check_value() |
| { |
| local name=$1 |
| local phase_name=$2 |
| local expected_param_value=$3 |
| local expected_debugfs_value=$4 |
| local value |
| |
| value=$(param_get $name) |
| check_err $? "Failed to get $name param value" |
| [ "$value" == "$expected_param_value" ] |
| check_err $? "Unexpected $phase_name $name param value" |
| value=$(<$DEBUGFS_DIR/$name) |
| check_err $? "Failed to get $name debugfs value" |
| [ "$value" == "$expected_debugfs_value" ] |
| check_err $? "Unexpected $phase_name $name debugfs value" |
| } |
| |
| params_test() |
| { |
| RET=0 |
| |
| local max_macs |
| local test1 |
| |
| check_value max_macs initial 32 32 |
| check_value test1 initial true Y |
| |
| param_set max_macs 16 |
| check_err $? "Failed to set max_macs param value" |
| param_set test1 false |
| check_err $? "Failed to set test1 param value" |
| |
| check_value max_macs post-set 16 32 |
| check_value test1 post-set false Y |
| |
| devlink dev reload $DL_HANDLE |
| |
| check_value max_macs post-reload 16 16 |
| check_value test1 post-reload false N |
| |
| log_test "params test" |
| } |
| |
| check_region_size() |
| { |
| local name=$1 |
| local size |
| |
| size=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].size') |
| check_err $? "Failed to get $name region size" |
| [ $size -eq 32768 ] |
| check_err $? "Invalid $name region size" |
| } |
| |
| check_region_snapshot_count() |
| { |
| local name=$1 |
| local phase_name=$2 |
| local expected_count=$3 |
| local count |
| |
| count=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].snapshot | length') |
| [ $count -eq $expected_count ] |
| check_err $? "Unexpected $phase_name snapshot count" |
| } |
| |
| regions_test() |
| { |
| RET=0 |
| |
| local count |
| |
| check_region_size dummy |
| check_region_snapshot_count dummy initial 0 |
| |
| echo ""> $DEBUGFS_DIR/take_snapshot |
| check_err $? "Failed to take first dummy region snapshot" |
| check_region_snapshot_count dummy post-first-snapshot 1 |
| |
| echo ""> $DEBUGFS_DIR/take_snapshot |
| check_err $? "Failed to take second dummy region snapshot" |
| check_region_snapshot_count dummy post-second-snapshot 2 |
| |
| echo ""> $DEBUGFS_DIR/take_snapshot |
| check_err $? "Failed to take third dummy region snapshot" |
| check_region_snapshot_count dummy post-third-snapshot 3 |
| |
| devlink region del $DL_HANDLE/dummy snapshot 1 |
| check_err $? "Failed to delete first dummy region snapshot" |
| |
| check_region_snapshot_count dummy post-first-delete 2 |
| |
| log_test "regions test" |
| } |
| |
| setup_prepare() |
| { |
| modprobe netdevsim |
| echo "$BUS_ADDR $PORT_COUNT" > /sys/bus/netdevsim/new_device |
| while [ ! -d $SYSFS_NET_DIR ] ; do :; done |
| } |
| |
| cleanup() |
| { |
| pre_cleanup |
| echo "$BUS_ADDR" > /sys/bus/netdevsim/del_device |
| modprobe -r netdevsim |
| } |
| |
| trap cleanup EXIT |
| |
| setup_prepare |
| |
| tests_run |
| |
| exit $EXIT_STATUS |