112a2ea96SPaolo Abeni#!/bin/bash 23a687befSWillem de Bruijn# SPDX-License-Identifier: GPL-2.0 33a687befSWillem de Bruijn# 43a687befSWillem de Bruijn# Run a series of udpgso benchmarks 53a687befSWillem de Bruijn 622f1a38aSWillem de Bruijnreadonly GREEN='\033[0;92m' 722f1a38aSWillem de Bruijnreadonly YELLOW='\033[0;33m' 822f1a38aSWillem de Bruijnreadonly RED='\033[0;31m' 922f1a38aSWillem de Bruijnreadonly NC='\033[0m' # No Color 1022f1a38aSWillem de Bruijn 1122f1a38aSWillem de Bruijnreadonly KSFT_PASS=0 1222f1a38aSWillem de Bruijnreadonly KSFT_FAIL=1 1322f1a38aSWillem de Bruijnreadonly KSFT_SKIP=4 1422f1a38aSWillem de Bruijn 1522f1a38aSWillem de Bruijnnum_pass=0 1622f1a38aSWillem de Bruijnnum_err=0 1722f1a38aSWillem de Bruijnnum_skip=0 1822f1a38aSWillem de Bruijn 1922f1a38aSWillem de Bruijnkselftest_test_exitcode() { 2022f1a38aSWillem de Bruijn local -r exitcode=$1 2122f1a38aSWillem de Bruijn 2222f1a38aSWillem de Bruijn if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then 2322f1a38aSWillem de Bruijn num_pass=$(( $num_pass + 1 )) 2422f1a38aSWillem de Bruijn elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then 2522f1a38aSWillem de Bruijn num_skip=$(( $num_skip + 1 )) 2622f1a38aSWillem de Bruijn else 2722f1a38aSWillem de Bruijn num_err=$(( $num_err + 1 )) 2822f1a38aSWillem de Bruijn fi 2922f1a38aSWillem de Bruijn} 3022f1a38aSWillem de Bruijn 3122f1a38aSWillem de Bruijnkselftest_exit() { 3222f1a38aSWillem de Bruijn echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}" 3322f1a38aSWillem de Bruijn 3422f1a38aSWillem de Bruijn if [[ $num_err -ne 0 ]]; then 3522f1a38aSWillem de Bruijn echo -e "$(basename $0): ${RED}FAIL${NC}" 3622f1a38aSWillem de Bruijn exit ${KSFT_FAIL} 3722f1a38aSWillem de Bruijn fi 3822f1a38aSWillem de Bruijn 3922f1a38aSWillem de Bruijn if [[ $num_skip -ne 0 ]]; then 4022f1a38aSWillem de Bruijn echo -e "$(basename $0): ${YELLOW}SKIP${NC}" 4122f1a38aSWillem de Bruijn exit ${KSFT_SKIP} 4222f1a38aSWillem de Bruijn fi 4322f1a38aSWillem de Bruijn 4422f1a38aSWillem de Bruijn echo -e "$(basename $0): ${GREEN}PASS${NC}" 4522f1a38aSWillem de Bruijn exit ${KSFT_PASS} 4622f1a38aSWillem de Bruijn} 474ffc37f5SFred Klassen 483a687befSWillem de Bruijnwake_children() { 493a687befSWillem de Bruijn local -r jobs="$(jobs -p)" 503a687befSWillem de Bruijn 513a687befSWillem de Bruijn if [[ "${jobs}" != "" ]]; then 523a687befSWillem de Bruijn kill -1 ${jobs} 2>/dev/null 533a687befSWillem de Bruijn fi 543a687befSWillem de Bruijn} 553a687befSWillem de Bruijntrap wake_children EXIT 563a687befSWillem de Bruijn 573a687befSWillem de Bruijnrun_one() { 583a687befSWillem de Bruijn local -r args=$@ 593a687befSWillem de Bruijn 603a687befSWillem de Bruijn ./udpgso_bench_rx & 613a687befSWillem de Bruijn ./udpgso_bench_rx -t & 623a687befSWillem de Bruijn 633a687befSWillem de Bruijn ./udpgso_bench_tx ${args} 643a687befSWillem de Bruijn} 653a687befSWillem de Bruijn 663a687befSWillem de Bruijnrun_in_netns() { 673a687befSWillem de Bruijn local -r args=$@ 683a687befSWillem de Bruijn 693a687befSWillem de Bruijn ./in_netns.sh $0 __subprocess ${args} 7022f1a38aSWillem de Bruijn kselftest_test_exitcode $? 713a687befSWillem de Bruijn} 723a687befSWillem de Bruijn 733a687befSWillem de Bruijnrun_udp() { 743a687befSWillem de Bruijn local -r args=$@ 753a687befSWillem de Bruijn 763a687befSWillem de Bruijn echo "udp" 773a687befSWillem de Bruijn run_in_netns ${args} 783a687befSWillem de Bruijn 793a687befSWillem de Bruijn echo "udp gso" 803327a9c4SPaolo Abeni run_in_netns ${args} -S 0 81db63e489SWillem de Bruijn 82db63e489SWillem de Bruijn echo "udp gso zerocopy" 83db63e489SWillem de Bruijn run_in_netns ${args} -S 0 -z 84ade90d69SFred Klassen 85ade90d69SFred Klassen echo "udp gso timestamp" 86ade90d69SFred Klassen run_in_netns ${args} -S 0 -T 87ade90d69SFred Klassen 88ade90d69SFred Klassen echo "udp gso zerocopy audit" 89ade90d69SFred Klassen run_in_netns ${args} -S 0 -z -a 90ade90d69SFred Klassen 91ade90d69SFred Klassen echo "udp gso timestamp audit" 92ade90d69SFred Klassen run_in_netns ${args} -S 0 -T -a 93ade90d69SFred Klassen 94ade90d69SFred Klassen echo "udp gso zerocopy timestamp audit" 95ade90d69SFred Klassen run_in_netns ${args} -S 0 -T -z -a 963a687befSWillem de Bruijn} 973a687befSWillem de Bruijn 983a687befSWillem de Bruijnrun_tcp() { 993a687befSWillem de Bruijn local -r args=$@ 1003a687befSWillem de Bruijn 1013a687befSWillem de Bruijn echo "tcp" 1023a687befSWillem de Bruijn run_in_netns ${args} -t 1033a687befSWillem de Bruijn 1043a687befSWillem de Bruijn echo "tcp zerocopy" 1053a687befSWillem de Bruijn run_in_netns ${args} -t -z 106ade90d69SFred Klassen 107ade90d69SFred Klassen # excluding for now because test fails intermittently 108ade90d69SFred Klassen # add -P option to include poll() to reduce possibility of lost messages 109ade90d69SFred Klassen #echo "tcp zerocopy audit" 110ade90d69SFred Klassen #run_in_netns ${args} -t -z -P -a 1113a687befSWillem de Bruijn} 1123a687befSWillem de Bruijn 1133a687befSWillem de Bruijnrun_all() { 114ade90d69SFred Klassen local -r core_args="-l 3" 1153a687befSWillem de Bruijn local -r ipv4_args="${core_args} -4 -D 127.0.0.1" 1163a687befSWillem de Bruijn local -r ipv6_args="${core_args} -6 -D ::1" 1173a687befSWillem de Bruijn 1183a687befSWillem de Bruijn echo "ipv4" 1193a687befSWillem de Bruijn run_tcp "${ipv4_args}" 1203a687befSWillem de Bruijn run_udp "${ipv4_args}" 1213a687befSWillem de Bruijn 1223a687befSWillem de Bruijn echo "ipv6" 123*b9680808SDimitris Michailidis run_tcp "${ipv6_args}" 1243a687befSWillem de Bruijn run_udp "${ipv6_args}" 1253a687befSWillem de Bruijn} 1263a687befSWillem de Bruijn 1273a687befSWillem de Bruijnif [[ $# -eq 0 ]]; then 1283a687befSWillem de Bruijn run_all 12922f1a38aSWillem de Bruijn kselftest_exit 1303a687befSWillem de Bruijnelif [[ $1 == "__subprocess" ]]; then 1313a687befSWillem de Bruijn shift 1323a687befSWillem de Bruijn run_one $@ 1333a687befSWillem de Bruijnelse 1343a687befSWillem de Bruijn run_in_netns $@ 1353a687befSWillem de Bruijnfi 136