1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4source lib.sh 5 6HOSTS=("127.0.0.1" "::1") 7PORT=1234 8TOTAL_TESTS=0 9FAILED_TESTS=0 10 11declare -A TESTS=( 12 ["SO_RCVPRIORITY"]="-P 2" 13 ["SO_RCVMARK"]="-M 3" 14) 15 16check_result() { 17 ((TOTAL_TESTS++)) 18 if [ "$1" -ne 0 ]; then 19 ((FAILED_TESTS++)) 20 fi 21} 22 23cleanup() 24{ 25 cleanup_ns $NS 26} 27 28trap cleanup EXIT 29 30setup_ns NS 31 32for HOST in "${HOSTS[@]}"; do 33 PROTOCOL="IPv4" 34 if [[ "$HOST" == "::1" ]]; then 35 PROTOCOL="IPv6" 36 fi 37 for test_name in "${!TESTS[@]}"; do 38 echo "Running $test_name test, $PROTOCOL" 39 arg=${TESTS[$test_name]} 40 41 ip netns exec $NS ./so_rcv_listener $arg $HOST $PORT & 42 LISTENER_PID=$! 43 44 sleep 0.5 45 46 if ! ip netns exec $NS ./cmsg_sender $arg $HOST $PORT; then 47 echo "Sender failed for $test_name, $PROTOCOL" 48 kill "$LISTENER_PID" 2>/dev/null 49 wait "$LISTENER_PID" 50 check_result 1 51 continue 52 fi 53 54 wait "$LISTENER_PID" 55 LISTENER_EXIT_CODE=$? 56 57 if [ "$LISTENER_EXIT_CODE" -eq 0 ]; then 58 echo "Rcv test OK for $test_name, $PROTOCOL" 59 check_result 0 60 else 61 echo "Rcv test FAILED for $test_name, $PROTOCOL" 62 check_result 1 63 fi 64 done 65done 66 67if [ "$FAILED_TESTS" -ne 0 ]; then 68 echo "FAIL - $FAILED_TESTS/$TOTAL_TESTS tests failed" 69 exit ${KSFT_FAIL} 70else 71 echo "OK - All $TOTAL_TESTS tests passed" 72 exit ${KSFT_PASS} 73fi 74