test_so_rcv.sh 1.3 KB

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