121 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # SPDX-License-Identifier: GPL-2.0
 | |
| 
 | |
| lib_dir=$(dirname $0)/../../../../net/forwarding
 | |
| 
 | |
| NUM_NETIFS=1
 | |
| source $lib_dir/lib.sh
 | |
| source devlink_lib_spectrum.sh
 | |
| 
 | |
| setup_prepare()
 | |
| {
 | |
| 	devlink_sp_read_kvd_defaults
 | |
| }
 | |
| 
 | |
| cleanup()
 | |
| {
 | |
| 	pre_cleanup
 | |
| 	devlink_sp_size_kvd_to_default
 | |
| }
 | |
| 
 | |
| trap cleanup EXIT
 | |
| 
 | |
| setup_prepare
 | |
| 
 | |
| profiles_test()
 | |
| {
 | |
| 	local i
 | |
| 
 | |
| 	log_info "Running profile tests"
 | |
| 
 | |
| 	for i in $KVD_PROFILES; do
 | |
| 		RET=0
 | |
| 		devlink_sp_resource_kvd_profile_set $i
 | |
| 		log_test "'$i' profile"
 | |
| 	done
 | |
| 
 | |
| 	# Default is explicitly tested at end to ensure it's actually applied
 | |
| 	RET=0
 | |
| 	devlink_sp_resource_kvd_profile_set "default"
 | |
| 	log_test "'default' profile"
 | |
| }
 | |
| 
 | |
| resources_min_test()
 | |
| {
 | |
| 	local size
 | |
| 	local i
 | |
| 	local j
 | |
| 
 | |
| 	log_info "Running KVD-minimum tests"
 | |
| 
 | |
| 	for i in $KVD_CHILDREN; do
 | |
| 		RET=0
 | |
| 		size=$(devlink_resource_get kvd "$i" | jq '.["size_min"]')
 | |
| 		devlink_resource_size_set "$size" kvd "$i"
 | |
| 
 | |
| 		# In case of linear, need to minimize sub-resources as well
 | |
| 		if [[ "$i" == "linear" ]]; then
 | |
| 			for j in $KVDL_CHILDREN; do
 | |
| 				devlink_resource_size_set 0 kvd linear "$j"
 | |
| 			done
 | |
| 		fi
 | |
| 
 | |
| 		devlink_reload
 | |
| 		devlink_sp_size_kvd_to_default
 | |
| 		log_test "'$i' minimize [$size]"
 | |
| 	done
 | |
| }
 | |
| 
 | |
| resources_max_test()
 | |
| {
 | |
| 	local min_size
 | |
| 	local size
 | |
| 	local i
 | |
| 	local j
 | |
| 
 | |
| 	log_info "Running KVD-maximum tests"
 | |
| 	for i in $KVD_CHILDREN; do
 | |
| 		RET=0
 | |
| 		devlink_sp_resource_minimize
 | |
| 
 | |
| 		# Calculate the maximum possible size for the given partition
 | |
| 		size=$(devlink_resource_size_get kvd)
 | |
| 		for j in $KVD_CHILDREN; do
 | |
| 			if [ "$i" != "$j" ]; then
 | |
| 				min_size=$(devlink_resource_get kvd "$j" | \
 | |
| 					   jq '.["size_min"]')
 | |
| 				size=$((size - min_size))
 | |
| 			fi
 | |
| 		done
 | |
| 
 | |
| 		# Test almost maximum size
 | |
| 		devlink_resource_size_set "$((size - 128))" kvd "$i"
 | |
| 		devlink_reload
 | |
| 		log_test "'$i' almost maximize [$((size - 128))]"
 | |
| 
 | |
| 		# Test above maximum size
 | |
| 		devlink resource set "$DEVLINK_DEV" \
 | |
| 			path "kvd/$i" size $((size + 128)) &> /dev/null
 | |
| 		check_fail $? "Set kvd/$i to size $((size + 128)) should fail"
 | |
| 		log_test "'$i' Overflow rejection [$((size + 128))]"
 | |
| 
 | |
| 		# Test maximum size
 | |
| 		if [ "$i" == "hash_single" ] || [ "$i" == "hash_double" ]; then
 | |
| 			echo "SKIP: Observed problem with exact max $i"
 | |
| 			continue
 | |
| 		fi
 | |
| 
 | |
| 		devlink_resource_size_set "$size" kvd "$i"
 | |
| 		devlink_reload
 | |
| 		log_test "'$i' maximize [$size]"
 | |
| 
 | |
| 		devlink_sp_size_kvd_to_default
 | |
| 	done
 | |
| }
 | |
| 
 | |
| profiles_test
 | |
| resources_min_test
 | |
| resources_max_test
 | |
| 
 | |
| exit "$RET"
 |