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 10*dafe93b9SAndrei Gherzanreadonly TESTPORT=8000 1122f1a38aSWillem de Bruijn 1222f1a38aSWillem de Bruijnreadonly KSFT_PASS=0 1322f1a38aSWillem de Bruijnreadonly KSFT_FAIL=1 1422f1a38aSWillem de Bruijnreadonly KSFT_SKIP=4 1522f1a38aSWillem de Bruijn 1622f1a38aSWillem de Bruijnnum_pass=0 1722f1a38aSWillem de Bruijnnum_err=0 1822f1a38aSWillem de Bruijnnum_skip=0 1922f1a38aSWillem de Bruijn 2022f1a38aSWillem de Bruijnkselftest_test_exitcode() { 2122f1a38aSWillem de Bruijn local -r exitcode=$1 2222f1a38aSWillem de Bruijn 2322f1a38aSWillem de Bruijn if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then 2422f1a38aSWillem de Bruijn num_pass=$(( $num_pass + 1 )) 2522f1a38aSWillem de Bruijn elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then 2622f1a38aSWillem de Bruijn num_skip=$(( $num_skip + 1 )) 2722f1a38aSWillem de Bruijn else 2822f1a38aSWillem de Bruijn num_err=$(( $num_err + 1 )) 2922f1a38aSWillem de Bruijn fi 3022f1a38aSWillem de Bruijn} 3122f1a38aSWillem de Bruijn 3222f1a38aSWillem de Bruijnkselftest_exit() { 3322f1a38aSWillem de Bruijn echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}" 3422f1a38aSWillem de Bruijn 3522f1a38aSWillem de Bruijn if [[ $num_err -ne 0 ]]; then 3622f1a38aSWillem de Bruijn echo -e "$(basename $0): ${RED}FAIL${NC}" 3722f1a38aSWillem de Bruijn exit ${KSFT_FAIL} 3822f1a38aSWillem de Bruijn fi 3922f1a38aSWillem de Bruijn 4022f1a38aSWillem de Bruijn if [[ $num_skip -ne 0 ]]; then 4122f1a38aSWillem de Bruijn echo -e "$(basename $0): ${YELLOW}SKIP${NC}" 4222f1a38aSWillem de Bruijn exit ${KSFT_SKIP} 4322f1a38aSWillem de Bruijn fi 4422f1a38aSWillem de Bruijn 4522f1a38aSWillem de Bruijn echo -e "$(basename $0): ${GREEN}PASS${NC}" 4622f1a38aSWillem de Bruijn exit ${KSFT_PASS} 4722f1a38aSWillem de Bruijn} 484ffc37f5SFred Klassen 493a687befSWillem de Bruijnwake_children() { 503a687befSWillem de Bruijn local -r jobs="$(jobs -p)" 513a687befSWillem de Bruijn 523a687befSWillem de Bruijn if [[ "${jobs}" != "" ]]; then 533a687befSWillem de Bruijn kill -1 ${jobs} 2>/dev/null 543a687befSWillem de Bruijn fi 553a687befSWillem de Bruijn} 563a687befSWillem de Bruijntrap wake_children EXIT 573a687befSWillem de Bruijn 583a687befSWillem de Bruijnrun_one() { 593a687befSWillem de Bruijn local -r args=$@ 60*dafe93b9SAndrei Gherzan local nr_socks=0 61*dafe93b9SAndrei Gherzan local i=0 62*dafe93b9SAndrei Gherzan local -r timeout=10 633a687befSWillem de Bruijn 64*dafe93b9SAndrei Gherzan ./udpgso_bench_rx -p "$TESTPORT" & 65*dafe93b9SAndrei Gherzan ./udpgso_bench_rx -p "$TESTPORT" -t & 663a687befSWillem de Bruijn 67*dafe93b9SAndrei Gherzan # Wait for the above test program to get ready to receive connections. 68*dafe93b9SAndrei Gherzan while [ "$i" -lt "$timeout" ]; do 69*dafe93b9SAndrei Gherzan nr_socks="$(ss -lnHi | grep -c "\*:${TESTPORT}")" 70*dafe93b9SAndrei Gherzan [ "$nr_socks" -eq 2 ] && break 71*dafe93b9SAndrei Gherzan i=$((i + 1)) 72*dafe93b9SAndrei Gherzan sleep 1 73*dafe93b9SAndrei Gherzan done 74*dafe93b9SAndrei Gherzan if [ "$nr_socks" -ne 2 ]; then 75*dafe93b9SAndrei Gherzan echo "timed out while waiting for udpgso_bench_rx" 76*dafe93b9SAndrei Gherzan exit 1 77*dafe93b9SAndrei Gherzan fi 78*dafe93b9SAndrei Gherzan 79*dafe93b9SAndrei Gherzan ./udpgso_bench_tx -p "$TESTPORT" ${args} 803a687befSWillem de Bruijn} 813a687befSWillem de Bruijn 823a687befSWillem de Bruijnrun_in_netns() { 833a687befSWillem de Bruijn local -r args=$@ 843a687befSWillem de Bruijn 853a687befSWillem de Bruijn ./in_netns.sh $0 __subprocess ${args} 8622f1a38aSWillem de Bruijn kselftest_test_exitcode $? 873a687befSWillem de Bruijn} 883a687befSWillem de Bruijn 893a687befSWillem de Bruijnrun_udp() { 903a687befSWillem de Bruijn local -r args=$@ 913a687befSWillem de Bruijn 923a687befSWillem de Bruijn echo "udp" 933a687befSWillem de Bruijn run_in_netns ${args} 943a687befSWillem de Bruijn 953a687befSWillem de Bruijn echo "udp gso" 963327a9c4SPaolo Abeni run_in_netns ${args} -S 0 97db63e489SWillem de Bruijn 98db63e489SWillem de Bruijn echo "udp gso zerocopy" 99db63e489SWillem de Bruijn run_in_netns ${args} -S 0 -z 100ade90d69SFred Klassen 101ade90d69SFred Klassen echo "udp gso timestamp" 102ade90d69SFred Klassen run_in_netns ${args} -S 0 -T 103ade90d69SFred Klassen 104ade90d69SFred Klassen echo "udp gso zerocopy audit" 105ade90d69SFred Klassen run_in_netns ${args} -S 0 -z -a 106ade90d69SFred Klassen 107ade90d69SFred Klassen echo "udp gso timestamp audit" 108ade90d69SFred Klassen run_in_netns ${args} -S 0 -T -a 109ade90d69SFred Klassen 110ade90d69SFred Klassen echo "udp gso zerocopy timestamp audit" 111ade90d69SFred Klassen run_in_netns ${args} -S 0 -T -z -a 1123a687befSWillem de Bruijn} 1133a687befSWillem de Bruijn 1143a687befSWillem de Bruijnrun_tcp() { 1153a687befSWillem de Bruijn local -r args=$@ 1163a687befSWillem de Bruijn 1173a687befSWillem de Bruijn echo "tcp" 1183a687befSWillem de Bruijn run_in_netns ${args} -t 1193a687befSWillem de Bruijn 1203a687befSWillem de Bruijn echo "tcp zerocopy" 1213a687befSWillem de Bruijn run_in_netns ${args} -t -z 122ade90d69SFred Klassen 123ade90d69SFred Klassen # excluding for now because test fails intermittently 124ade90d69SFred Klassen # add -P option to include poll() to reduce possibility of lost messages 125ade90d69SFred Klassen #echo "tcp zerocopy audit" 126ade90d69SFred Klassen #run_in_netns ${args} -t -z -P -a 1273a687befSWillem de Bruijn} 1283a687befSWillem de Bruijn 1293a687befSWillem de Bruijnrun_all() { 130ade90d69SFred Klassen local -r core_args="-l 3" 1313a687befSWillem de Bruijn local -r ipv4_args="${core_args} -4 -D 127.0.0.1" 1323a687befSWillem de Bruijn local -r ipv6_args="${core_args} -6 -D ::1" 1333a687befSWillem de Bruijn 1343a687befSWillem de Bruijn echo "ipv4" 1353a687befSWillem de Bruijn run_tcp "${ipv4_args}" 1363a687befSWillem de Bruijn run_udp "${ipv4_args}" 1373a687befSWillem de Bruijn 1383a687befSWillem de Bruijn echo "ipv6" 139b9680808SDimitris Michailidis run_tcp "${ipv6_args}" 1403a687befSWillem de Bruijn run_udp "${ipv6_args}" 1413a687befSWillem de Bruijn} 1423a687befSWillem de Bruijn 1433a687befSWillem de Bruijnif [[ $# -eq 0 ]]; then 1443a687befSWillem de Bruijn run_all 14522f1a38aSWillem de Bruijn kselftest_exit 1463a687befSWillem de Bruijnelif [[ $1 == "__subprocess" ]]; then 1473a687befSWillem de Bruijn shift 1483a687befSWillem de Bruijn run_one $@ 1493a687befSWillem de Bruijnelse 1503a687befSWillem de Bruijn run_in_netns $@ 1513a687befSWillem de Bruijnfi 152