xref: /linux/tools/testing/selftests/net/test_so_rcv.sh (revision 1a9239bb4253f9076b5b4b2a1a4e8d7defd77a95)
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