diff options
| -rwxr-xr-x | tools/testing/selftests/net/udpgso_bench.sh | 75 | ||||
| -rw-r--r-- | tools/testing/selftests/net/udpgso_bench_tx.c | 18 | 
2 files changed, 59 insertions, 34 deletions
| diff --git a/tools/testing/selftests/net/udpgso_bench.sh b/tools/testing/selftests/net/udpgso_bench.sh index 4df1cd8d69d2..80b5d352702e 100755 --- a/tools/testing/selftests/net/udpgso_bench.sh +++ b/tools/testing/selftests/net/udpgso_bench.sh @@ -3,9 +3,47 @@  #  # Run a series of udpgso benchmarks -GREEN='\033[0;92m' -RED='\033[0;31m' -NC='\033[0m' # No Color +readonly GREEN='\033[0;92m' +readonly YELLOW='\033[0;33m' +readonly RED='\033[0;31m' +readonly NC='\033[0m' # No Color + +readonly KSFT_PASS=0 +readonly KSFT_FAIL=1 +readonly KSFT_SKIP=4 + +num_pass=0 +num_err=0 +num_skip=0 + +kselftest_test_exitcode() { +	local -r exitcode=$1 + +	if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then +		num_pass=$(( $num_pass + 1 )) +	elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then +		num_skip=$(( $num_skip + 1 )) +	else +		num_err=$(( $num_err + 1 )) +	fi +} + +kselftest_exit() { +	echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}" + +	if [[ $num_err -ne 0 ]]; then +		echo -e "$(basename $0): ${RED}FAIL${NC}" +		exit ${KSFT_FAIL} +	fi + +	if [[ $num_skip -ne 0 ]]; then +		echo -e "$(basename $0): ${YELLOW}SKIP${NC}" +		exit ${KSFT_SKIP} +	fi + +	echo -e "$(basename $0): ${GREEN}PASS${NC}" +	exit ${KSFT_PASS} +}  wake_children() {  	local -r jobs="$(jobs -p)" @@ -29,93 +67,66 @@ run_in_netns() {  	local -r args=$@  	./in_netns.sh $0 __subprocess ${args} +	kselftest_test_exitcode $?  }  run_udp() {  	local -r args=$@ -	local errors=0  	echo "udp"  	run_in_netns ${args} -	errors=$(( $errors + $? ))  	echo "udp gso"  	run_in_netns ${args} -S 0 -	errors=$(( $errors + $? ))  	echo "udp gso zerocopy"  	run_in_netns ${args} -S 0 -z -	errors=$(( $errors + $? ))  	echo "udp gso timestamp"  	run_in_netns ${args} -S 0 -T -	errors=$(( $errors + $? ))  	echo "udp gso zerocopy audit"  	run_in_netns ${args} -S 0 -z -a -	errors=$(( $errors + $? ))  	echo "udp gso timestamp audit"  	run_in_netns ${args} -S 0 -T -a -	errors=$(( $errors + $? ))  	echo "udp gso zerocopy timestamp audit"  	run_in_netns ${args} -S 0 -T -z -a -	errors=$(( $errors + $? )) - -	return $errors  }  run_tcp() {  	local -r args=$@ -	local errors=0  	echo "tcp"  	run_in_netns ${args} -t -	errors=$(( $errors + $? ))  	echo "tcp zerocopy"  	run_in_netns ${args} -t -z -	errors=$(( $errors + $? ))  	# excluding for now because test fails intermittently  	# add -P option to include poll() to reduce possibility of lost messages  	#echo "tcp zerocopy audit"  	#run_in_netns ${args} -t -z -P -a -	#errors=$(( $errors + $? )) - -	return $errors  }  run_all() {  	local -r core_args="-l 3"  	local -r ipv4_args="${core_args} -4 -D 127.0.0.1"  	local -r ipv6_args="${core_args} -6 -D ::1" -	local errors=0  	echo "ipv4"  	run_tcp "${ipv4_args}" -	errors=$(( $errors + $? ))  	run_udp "${ipv4_args}" -	errors=$(( $errors + $? ))  	echo "ipv6"  	run_tcp "${ipv4_args}" -	errors=$(( $errors + $? ))  	run_udp "${ipv6_args}" -	errors=$(( $errors + $? )) - -	return $errors  }  if [[ $# -eq 0 ]]; then  	run_all -	if [ $? -ne 0 ]; then -		echo -e "$(basename $0): ${RED}FAIL${NC}" -		exit 1 -	fi - -	echo -e "$(basename $0): ${GREEN}PASS${NC}" +	kselftest_exit  elif [[ $1 == "__subprocess" ]]; then  	shift  	run_one $@ diff --git a/tools/testing/selftests/net/udpgso_bench_tx.c b/tools/testing/selftests/net/udpgso_bench_tx.c index dfa83ad57206..ada99496634a 100644 --- a/tools/testing/selftests/net/udpgso_bench_tx.c +++ b/tools/testing/selftests/net/udpgso_bench_tx.c @@ -25,6 +25,8 @@  #include <sys/types.h>  #include <unistd.h> +#include "../kselftest.h" +  #ifndef ETH_MAX_MTU  #define ETH_MAX_MTU 0xFFFFU  #endif @@ -45,6 +47,10 @@  #define MSG_ZEROCOPY	0x4000000  #endif +#ifndef ENOTSUPP +#define ENOTSUPP	524 +#endif +  #define NUM_PKT		100  static bool	cfg_cache_trash; @@ -603,7 +609,7 @@ int main(int argc, char **argv)  {  	unsigned long num_msgs, num_sends;  	unsigned long tnow, treport, tstop; -	int fd, i, val; +	int fd, i, val, ret;  	parse_opts(argc, argv); @@ -623,8 +629,16 @@ int main(int argc, char **argv)  	if (cfg_zerocopy) {  		val = 1; -		if (setsockopt(fd, SOL_SOCKET, SO_ZEROCOPY, &val, sizeof(val))) + +		ret = setsockopt(fd, SOL_SOCKET, SO_ZEROCOPY, +				 &val, sizeof(val)); +		if (ret) { +			if (errno == ENOPROTOOPT || errno == ENOTSUPP) { +				fprintf(stderr, "SO_ZEROCOPY not supported"); +				exit(KSFT_SKIP); +			}  			error(1, errno, "setsockopt zerocopy"); +		}  	}  	if (cfg_connected && | 

