The benchmark script does not exercise TCP payload verification.

Add a verification case for IPv4 and IPv6 using 100 4 KiB payloads.
The payload length is not a multiple of 26, allowing the test to
detect missing per-payload pattern resets.

Wait for the receiver and propagate verification failures. Bound
both processes with timeouts and leave the existing benchmarks
unchanged.

Signed-off-by: shuo huang <[email protected]>
---
 tools/testing/selftests/net/udpgso_bench.sh | 34 +++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/tools/testing/selftests/net/udpgso_bench.sh 
b/tools/testing/selftests/net/udpgso_bench.sh
index 88fa1d53b..d02f206ec 100755
--- a/tools/testing/selftests/net/udpgso_bench.sh
+++ b/tools/testing/selftests/net/udpgso_bench.sh
@@ -8,6 +8,8 @@ readonly YELLOW='\033[0;33m'
 readonly RED='\033[0;31m'
 readonly NC='\033[0m' # No Color
 readonly TESTPORT=8000
+# Avoid a multiple of 26 to detect missing payload resets.
+readonly TCP_VERIFY_LEN=$((4 * 1024))
 
 readonly KSFT_PASS=0
 readonly KSFT_FAIL=1
@@ -79,6 +81,31 @@ run_one() {
        ./udpgso_bench_tx -p "$TESTPORT" ${args}
 }
 
+run_tcp_verify_one() {
+       local tcp_rx_pid
+       local i=0
+       local -r timeout=10
+
+       timeout -k 1 30 ./udpgso_bench_rx -p "$TESTPORT" -t -v -l 
"$TCP_VERIFY_LEN" &
+       tcp_rx_pid=$!
+
+       while [ "$i" -lt "$timeout" ]; do
+               ss -lnHt "sport = :$TESTPORT" | grep -q . && break
+               i=$((i + 1))
+               sleep 1
+       done
+       if [ "$i" -eq "$timeout" ]; then
+               echo "timed out while waiting for udpgso_bench_rx"
+               return 1
+       fi
+
+       timeout -k 1 30 ./udpgso_bench_tx -p "$TESTPORT" "$@" \
+               -t -s "$TCP_VERIFY_LEN" -M 100 || return $?
+
+       # A successful sender does not imply that payload verification passed.
+       wait "$tcp_rx_pid"
+}
+
 run_in_netns() {
        local -r args=$@
 
@@ -123,6 +150,10 @@ run_tcp() {
        echo "tcp zerocopy"
        run_in_netns ${args} -t -z
 
+       echo "tcp verify"
+       ./in_netns.sh "$0" __verify_tcp ${args}
+       kselftest_test_exitcode $?
+
        # excluding for now because test fails intermittently
        # add -P option to include poll() to reduce possibility of lost messages
        #echo "tcp zerocopy audit"
@@ -149,6 +180,9 @@ if [[ $# -eq 0 ]]; then
 elif [[ $1 == "__subprocess" ]]; then
        shift
        run_one $@
+elif [[ $1 == "__verify_tcp" ]]; then
+       shift
+       run_tcp_verify_one "$@"
 else
        run_in_netns $@
 fi
-- 
2.34.1


Reply via email to