summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/net/test_so_rcv.sh
blob: d8aa4362879da66f450d498ad62440f461383fd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/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