#!/bin/bash # SPDX-License-Identifier: GPL-2.0 source lib.sh HOSTS=("127.0.0.1" "::1") PORT=1234 TOTAL_TESTS=0 FAILED_TESTS=0 declare -A TESTS=( ["SO_RCVPRIORITY"]="-P 2" ["SO_RCVMARK"]="-M 3" ) check_result() { ((TOTAL_TESTS++)) if [ "$1" -ne 0 ]; then ((FAILED_TESTS++)) fi } cleanup() { cleanup_ns $NS } trap cleanup EXIT setup_ns NS for HOST in "${HOSTS[@]}"; do PROTOCOL="IPv4" if [[ "$HOST" == "::1" ]]; then PROTOCOL="IPv6" fi for test_name in "${!TESTS[@]}"; do echo "Running $test_name test, $PROTOCOL" arg=${TESTS[$test_name]} ip netns exec $NS ./so_rcv_listener $arg $HOST $PORT & LISTENER_PID=$! sleep 0.5 if ! ip netns exec $NS ./cmsg_sender $arg $HOST $PORT; then echo "Sender failed for $test_name, $PROTOCOL" kill "$LISTENER_PID" 2>/dev/null wait "$LISTENER_PID" check_result 1 continue fi wait "$LISTENER_PID" LISTENER_EXIT_CODE=$? if [ "$LISTENER_EXIT_CODE" -eq 0 ]; then echo "Rcv test OK for $test_name, $PROTOCOL" check_result 0 else echo "Rcv test FAILED for $test_name, $PROTOCOL" check_result 1 fi done done if [ "$FAILED_TESTS" -ne 0 ]; then echo "FAIL - $FAILED_TESTS/$TOTAL_TESTS tests failed" exit ${KSFT_FAIL} else echo "OK - All $TOTAL_TESTS tests passed" exit ${KSFT_PASS} fi