#!/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