#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

lib_dir=$(dirname $0)/../../../net/forwarding

ALL_TESTS="fw_flash_test params_test regions_test reload_test \
	   netns_reload_test resource_test dev_info_test \
	   empty_reporter_test dummy_reporter_test rate_test"
NUM_NETIFS=0
source $lib_dir/lib.sh

BUS_ADDR=10
PORT_COUNT=4
VF_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

wait_for_devlink()
{
	"$@" | grep -q $DL_HANDLE
}

devlink_wait()
{
	local timeout=$1

	busywait "$timeout" wait_for_devlink devlink dev
}

fw_flash_test()
{
	DUMMYFILE=$(find /lib/firmware -type f -printf '%P\n' | head -1)
	RET=0

	if [ -z "$DUMMYFILE" ]
	then
		echo "SKIP: unable to find suitable dummy firmware file"
		return
	fi

	devlink dev flash $DL_HANDLE file $DUMMYFILE
	check_err $? "Failed to flash with status updates on"

	devlink dev flash $DL_HANDLE file $DUMMYFILE component fw.mgmt
	check_err $? "Failed to flash with component attribute"

	devlink dev flash $DL_HANDLE file $DUMMYFILE overwrite settings
	check_fail $? "Flash with overwrite settings should be rejected"

	echo "1"> $DEBUGFS_DIR/fw_update_overwrite_mask
	check_err $? "Failed to change allowed overwrite mask"

	devlink dev flash $DL_HANDLE file $DUMMYFILE overwrite settings
	check_err $? "Failed to flash with settings overwrite enabled"

	devlink dev flash $DL_HANDLE file $DUMMYFILE overwrite identifiers
	check_fail $? "Flash with overwrite settings should be identifiers"

	echo "3"> $DEBUGFS_DIR/fw_update_overwrite_mask
	check_err $? "Failed to change allowed overwrite mask"

	devlink dev flash $DL_HANDLE file $DUMMYFILE overwrite identifiers overwrite settings
	check_err $? "Failed to flash with settings and identifiers overwrite enabled"

	echo "n"> $DEBUGFS_DIR/fw_update_status
	check_err $? "Failed to disable status updates"

	devlink dev flash $DL_HANDLE file $DUMMYFILE
	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

	devlink region new $DL_HANDLE/dummy snapshot 25
	check_err $? "Failed to create a new snapshot with id 25"

	check_region_snapshot_count dummy post-first-request 3

	devlink region dump $DL_HANDLE/dummy snapshot 25 >> /dev/null
	check_err $? "Failed to dump snapshot with id 25"

	devlink region read $DL_HANDLE/dummy snapshot 25 addr 0 len 1 >> /dev/null
	check_err $? "Failed to read snapshot with id 25 (1 byte)"

	devlink region read $DL_HANDLE/dummy snapshot 25 addr 128 len 128 >> /dev/null
	check_err $? "Failed to read snapshot with id 25 (128 bytes)"

	devlink region read $DL_HANDLE/dummy snapshot 25 addr 128 len $((1<<32)) >> /dev/null
	check_err $? "Failed to read snapshot with id 25 (oversized)"

	devlink region read $DL_HANDLE/dummy snapshot 25 addr $((1<<32)) len 128 >> /dev/null 2>&1
	check_fail $? "Bad read of snapshot with id 25 did not fail"

	devlink region del $DL_HANDLE/dummy snapshot 25
	check_err $? "Failed to delete snapshot with id 25"

	check_region_snapshot_count dummy post-second-delete 2

	sid=$(devlink -j region new $DL_HANDLE/dummy | jq '.[][][][]')
	check_err $? "Failed to create a new snapshot with id allocated by the kernel"

	check_region_snapshot_count dummy post-first-request 3

	devlink region dump $DL_HANDLE/dummy snapshot $sid >> /dev/null
	check_err $? "Failed to dump a snapshot with id allocated by the kernel"

	devlink region del $DL_HANDLE/dummy snapshot $sid
	check_err $? "Failed to delete snapshot with id allocated by the kernel"

	check_region_snapshot_count dummy post-first-request 2

	log_test "regions test"
}

reload_test()
{
	RET=0

	devlink dev reload $DL_HANDLE
	check_err $? "Failed to reload"

	echo "y"> $DEBUGFS_DIR/fail_reload
	check_err $? "Failed to setup devlink reload to fail"

	devlink dev reload $DL_HANDLE
	check_fail $? "Unexpected success of devlink reload"

	echo "n"> $DEBUGFS_DIR/fail_reload
	check_err $? "Failed to setup devlink reload not to fail"

	devlink dev reload $DL_HANDLE
	check_err $? "Failed to reload after set not to fail"

	echo "y"> $DEBUGFS_DIR/dont_allow_reload
	check_err $? "Failed to forbid devlink reload"

	devlink dev reload $DL_HANDLE
	check_fail $? "Unexpected success of devlink reload"

	echo "n"> $DEBUGFS_DIR/dont_allow_reload
	check_err $? "Failed to re-enable devlink reload"

	devlink dev reload $DL_HANDLE
	check_err $? "Failed to reload after re-enable"

	log_test "reload test"
}

netns_reload_test()
{
	RET=0

	ip netns add testns1
	check_err $? "Failed add netns \"testns1\""
	ip netns add testns2
	check_err $? "Failed add netns \"testns2\""

	devlink dev reload $DL_HANDLE netns testns1
	check_err $? "Failed to reload into netns \"testns1\""

	devlink -N testns1 dev reload $DL_HANDLE netns testns2
	check_err $? "Failed to reload from netns \"testns1\" into netns \"testns2\""

	ip netns del testns2
	ip netns del testns1

	# Wait until netns async cleanup is done.
	devlink_wait 2000

	log_test "netns reload test"
}

DUMMYDEV="dummytest"

res_val_get()
{
	local netns=$1
	local parentname=$2
	local name=$3
	local type=$4

	cmd_jq "devlink -N $netns resource show $DL_HANDLE -j" \
	       ".[][][] | select(.name == \"$parentname\").resources[] \
	        | select(.name == \"$name\").$type"
}

resource_test()
{
	RET=0

	ip netns add testns1
	check_err $? "Failed add netns \"testns1\""
	ip netns add testns2
	check_err $? "Failed add netns \"testns2\""

	devlink dev reload $DL_HANDLE netns testns1
	check_err $? "Failed to reload into netns \"testns1\""

	# Create dummy dev to add the address and routes on.

	ip -n testns1 link add name $DUMMYDEV type dummy
	check_err $? "Failed create dummy device"
	ip -n testns1 link set $DUMMYDEV up
	check_err $? "Failed bring up dummy device"
	ip -n testns1 a a 192.0.1.1/24 dev $DUMMYDEV
	check_err $? "Failed add an IP address to dummy device"

	local occ=$(res_val_get testns1 IPv4 fib occ)
	local limit=$((occ+1))

	# Set fib size limit to handle one another route only.

	devlink -N testns1 resource set $DL_HANDLE path IPv4/fib size $limit
	check_err $? "Failed to set IPv4/fib resource size"
	local size_new=$(res_val_get testns1 IPv4 fib size_new)
	[ "$size_new" -eq "$limit" ]
	check_err $? "Unexpected \"size_new\" value (got $size_new, expected $limit)"

	devlink -N testns1 dev reload $DL_HANDLE
	check_err $? "Failed to reload"
	local size=$(res_val_get testns1 IPv4 fib size)
	[ "$size" -eq "$limit" ]
	check_err $? "Unexpected \"size\" value (got $size, expected $limit)"

	# Insert 2 routes, the first is going to be inserted,
	# the second is expected to fail to be inserted.

	ip -n testns1 r a 192.0.2.0/24 via 192.0.1.2
	check_err $? "Failed to add route"

	ip -n testns1 r a 192.0.3.0/24 via 192.0.1.2
	check_fail $? "Unexpected successful route add over limit"

	# Now create another dummy in second network namespace and
	# insert two routes. That is over the limit of the netdevsim
	# instance in the first namespace. Move the netdevsim instance
	# into the second namespace and expect it to fail.

	ip -n testns2 link add name $DUMMYDEV type dummy
	check_err $? "Failed create dummy device"
	ip -n testns2 link set $DUMMYDEV up
	check_err $? "Failed bring up dummy device"
	ip -n testns2 a a 192.0.1.1/24 dev $DUMMYDEV
	check_err $? "Failed add an IP address to dummy device"
	ip -n testns2 r a 192.0.2.0/24 via 192.0.1.2
	check_err $? "Failed to add route"
	ip -n testns2 r a 192.0.3.0/24 via 192.0.1.2
	check_err $? "Failed to add route"

	devlink -N testns1 dev reload $DL_HANDLE netns testns2
	check_fail $? "Unexpected successful reload from netns \"testns1\" into netns \"testns2\""

	devlink -N testns2 resource set $DL_HANDLE path IPv4/fib size ' -1'
	check_err $? "Failed to reset IPv4/fib resource size"

	devlink -N testns2 dev reload $DL_HANDLE netns 1
	check_err $? "Failed to reload devlink back"

	ip netns del testns2
	ip netns del testns1

	# Wait until netns async cleanup is done.
	devlink_wait 2000

	log_test "resource test"
}

info_get()
{
	local name=$1

	cmd_jq "devlink dev info $DL_HANDLE -j" ".[][][\"$name\"]" "-e"
}

dev_info_test()
{
	RET=0

	driver=$(info_get "driver")
	check_err $? "Failed to get driver name"
	[ "$driver" == "netdevsim" ]
	check_err $? "Unexpected driver name $driver"

	log_test "dev_info test"
}

empty_reporter_test()
{
	RET=0

	devlink health show $DL_HANDLE reporter empty >/dev/null
	check_err $? "Failed show empty reporter"

	devlink health dump show $DL_HANDLE reporter empty >/dev/null
	check_err $? "Failed show dump of empty reporter"

	devlink health diagnose $DL_HANDLE reporter empty >/dev/null
	check_err $? "Failed diagnose empty reporter"

	devlink health recover $DL_HANDLE reporter empty
	check_err $? "Failed recover empty reporter"

	log_test "empty reporter test"
}

check_reporter_info()
{
	local name=$1
	local expected_state=$2
	local expected_error=$3
	local expected_recover=$4
	local expected_grace_period=$5
	local expected_auto_recover=$6

	local show=$(devlink health show $DL_HANDLE reporter $name -j | jq -e -r ".[][][]")
	check_err $? "Failed show $name reporter"

	local state=$(echo $show | jq -r ".state")
	[ "$state" == "$expected_state" ]
	check_err $? "Unexpected \"state\" value (got $state, expected $expected_state)"

	local error=$(echo $show | jq -r ".error")
	[ "$error" == "$expected_error" ]
	check_err $? "Unexpected \"error\" value (got $error, expected $expected_error)"

	local recover=`echo $show | jq -r ".recover"`
	[ "$recover" == "$expected_recover" ]
	check_err $? "Unexpected \"recover\" value (got $recover, expected $expected_recover)"

	local grace_period=$(echo $show | jq -r ".grace_period")
	check_err $? "Failed get $name reporter grace_period"
	[ "$grace_period" == "$expected_grace_period" ]
	check_err $? "Unexpected \"grace_period\" value (got $grace_period, expected $expected_grace_period)"

	local auto_recover=$(echo $show | jq -r ".auto_recover")
	[ "$auto_recover" == "$expected_auto_recover" ]
	check_err $? "Unexpected \"auto_recover\" value (got $auto_recover, expected $expected_auto_recover)"
}

dummy_reporter_test()
{
	RET=0

	check_reporter_info dummy healthy 0 0 0 true

	devlink health set $DL_HANDLE reporter dummy auto_recover false
	check_err $? "Failed to dummy reporter auto_recover option"

	check_reporter_info dummy healthy 0 0 0 false

	local BREAK_MSG="foo bar"
	echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health
	check_err $? "Failed to break dummy reporter"

	check_reporter_info dummy error 1 0 0 false

	local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j)
	check_err $? "Failed show dump of dummy reporter"

	local dump_break_msg=$(echo $dump | jq -r ".break_message")
	[ "$dump_break_msg" == "$BREAK_MSG" ]
	check_err $? "Unexpected dump break message value (got $dump_break_msg, expected $BREAK_MSG)"

	devlink health dump clear $DL_HANDLE reporter dummy
	check_err $? "Failed clear dump of dummy reporter"

	devlink health recover $DL_HANDLE reporter dummy
	check_err $? "Failed recover dummy reporter"

	check_reporter_info dummy healthy 1 1 0 false

	devlink health set $DL_HANDLE reporter dummy auto_recover true
	check_err $? "Failed to dummy reporter auto_recover option"

	check_reporter_info dummy healthy 1 1 0 true

	echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health
	check_err $? "Failed to break dummy reporter"

	check_reporter_info dummy healthy 2 2 0 true

	local diagnose=$(devlink health diagnose $DL_HANDLE reporter dummy -j -p)
	check_err $? "Failed show diagnose of dummy reporter"

	local rcvrd_break_msg=$(echo $diagnose | jq -r ".recovered_break_message")
	[ "$rcvrd_break_msg" == "$BREAK_MSG" ]
	check_err $? "Unexpected recovered break message value (got $rcvrd_break_msg, expected $BREAK_MSG)"

	devlink health set $DL_HANDLE reporter dummy grace_period 10
	check_err $? "Failed to dummy reporter grace_period option"

	check_reporter_info dummy healthy 2 2 10 true

	echo "Y"> $DEBUGFS_DIR/health/fail_recover
	check_err $? "Failed set dummy reporter recovery to fail"

	echo "$BREAK_MSG"> $DEBUGFS_DIR/health/break_health
	check_fail $? "Unexpected success of dummy reporter break"

	check_reporter_info dummy error 3 2 10 true

	devlink health recover $DL_HANDLE reporter dummy
	check_fail $? "Unexpected success of dummy reporter recover"

	echo "N"> $DEBUGFS_DIR/health/fail_recover
	check_err $? "Failed set dummy reporter recovery to be successful"

	devlink health recover $DL_HANDLE reporter dummy
	check_err $? "Failed recover dummy reporter"

	check_reporter_info dummy healthy 3 3 10 true

	echo 8192 > $DEBUGFS_DIR/health/binary_len
	check_err $? "Failed set dummy reporter binary len to 8192"

	local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j)
	check_err $? "Failed show dump of dummy reporter"

	devlink health dump clear $DL_HANDLE reporter dummy
	check_err $? "Failed clear dump of dummy reporter"

	log_test "dummy reporter test"
}

rate_leafs_get()
{
	local handle=$1

	cmd_jq "devlink port function rate show -j" \
	       '.[] | to_entries | .[] | select(.value.type == "leaf") | .key | select(contains("'$handle'"))'
}

rate_nodes_get()
{
	local handle=$1

	cmd_jq "devlink port function rate show -j" \
		'.[] | to_entries | .[] | select(.value.type == "node") | .key | select(contains("'$handle'"))'
}

rate_attr_set()
{
	local handle=$1
	local name=$2
	local value=$3
	local units=$4

	devlink port function rate set $handle $name $value$units
}

rate_attr_get()
{
	local handle=$1
	local name=$2

	cmd_jq "devlink port function rate show $handle -j" '.[][].'$name
}

rate_attr_tx_rate_check()
{
	local handle=$1
	local name=$2
	local rate=$3
	local debug_file=$4

	rate_attr_set $handle $name $rate mbit
	check_err $? "Failed to set $name value"

	local debug_value=$(cat $debug_file)
	check_err $? "Failed to read $name value from debugfs"
	[ "$debug_value" == "$rate" ]
	check_err $? "Unexpected $name debug value $debug_value != $rate"

	local api_value=$(( $(rate_attr_get $handle $name) * 8 / 1000000 ))
	check_err $? "Failed to get $name attr value"
	[ "$api_value" == "$rate" ]
	check_err $? "Unexpected $name attr value $api_value != $rate"
}

rate_attr_parent_check()
{
	local handle=$1
	local parent=$2
	local debug_file=$3

	rate_attr_set $handle parent $parent
	check_err $? "Failed to set parent"

	debug_value=$(cat $debug_file)
	check_err $? "Failed to get parent debugfs value"
	[ "$debug_value" == "$parent" ]
	check_err $? "Unexpected parent debug value $debug_value != $parent"

	api_value=$(rate_attr_get $r_obj parent)
	check_err $? "Failed to get parent attr value"
	[ "$api_value" == "$parent" ]
	check_err $? "Unexpected parent attr value $api_value != $parent"
}

rate_node_add()
{
	local handle=$1

	devlink port function rate add $handle
}

rate_node_del()
{
	local handle=$1

	devlink port function rate del $handle
}

rate_test()
{
	RET=0

	echo $VF_COUNT > /sys/bus/netdevsim/devices/$DEV_NAME/sriov_numvfs
	devlink dev eswitch set $DL_HANDLE mode switchdev
	local leafs=`rate_leafs_get $DL_HANDLE`
	local num_leafs=`echo $leafs | wc -w`
	[ "$num_leafs" == "$VF_COUNT" ]
	check_err $? "Expected $VF_COUNT rate leafs but got $num_leafs"

	rate=10
	for r_obj in $leafs
	do
		rate_attr_tx_rate_check $r_obj tx_share $rate \
			$DEBUGFS_DIR/ports/${r_obj##*/}/tx_share
		rate=$(($rate+10))
	done

	rate=100
	for r_obj in $leafs
	do
		rate_attr_tx_rate_check $r_obj tx_max $rate \
			$DEBUGFS_DIR/ports/${r_obj##*/}/tx_max
		rate=$(($rate+100))
	done

	local node1_name='group1'
	local node1="$DL_HANDLE/$node1_name"
	rate_node_add "$node1"
	check_err $? "Failed to add node $node1"

	local num_nodes=`rate_nodes_get $DL_HANDLE | wc -w`
	[ $num_nodes == 1 ]
	check_err $? "Expected 1 rate node in output but got $num_nodes"

	local node_tx_share=10
	rate_attr_tx_rate_check $node1 tx_share $node_tx_share \
		$DEBUGFS_DIR/rate_nodes/${node1##*/}/tx_share

	local node_tx_max=100
	rate_attr_tx_rate_check $node1 tx_max $node_tx_max \
		$DEBUGFS_DIR/rate_nodes/${node1##*/}/tx_max

	rate_node_del "$node1"
	check_err $? "Failed to delete node $node1"
	local num_nodes=`rate_nodes_get $DL_HANDLE | wc -w`
	[ $num_nodes == 0 ]
	check_err $? "Expected 0 rate node but got $num_nodes"

	local node1_name='group1'
	local node1="$DL_HANDLE/$node1_name"
	rate_node_add "$node1"
	check_err $? "Failed to add node $node1"

	rate_attr_parent_check $r_obj $node1_name \
		$DEBUGFS_DIR/ports/${r_obj##*/}/rate_parent

	local node2_name='group2'
	local node2="$DL_HANDLE/$node2_name"
	rate_node_add "$node2"
	check_err $? "Failed to add node $node2"

	rate_attr_parent_check $node2 $node1_name \
		$DEBUGFS_DIR/rate_nodes/$node2_name/rate_parent
	rate_node_del "$node2"
	check_err $? "Failed to delete node $node2"
	rate_attr_set "$r_obj" noparent
	check_err $? "Failed to unset $r_obj parent node"
	rate_node_del "$node1"
	check_err $? "Failed to delete node $node1"

	log_test "rate 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
