xref: /openbmc/linux/tools/testing/selftests/bpf/test_tcp_check_syncookie.sh (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1bafc0ba8SLorenz Bauer#!/bin/sh
2bafc0ba8SLorenz Bauer# SPDX-License-Identifier: GPL-2.0
3bafc0ba8SLorenz Bauer# Copyright (c) 2018 Facebook
4bafc0ba8SLorenz Bauer# Copyright (c) 2019 Cloudflare
5bafc0ba8SLorenz Bauer
6bafc0ba8SLorenz Bauerset -eu
7ab6bcc20SHangbin Liureadonly NS1="ns1-$(mktemp -u XXXXXX)"
8bafc0ba8SLorenz Bauer
9bafc0ba8SLorenz Bauerwait_for_ip()
10bafc0ba8SLorenz Bauer{
11bafc0ba8SLorenz Bauer	local _i
12bafc0ba8SLorenz Bauer	printf "Wait for IP %s to become available " "$1"
13bafc0ba8SLorenz Bauer	for _i in $(seq ${MAX_PING_TRIES}); do
14bafc0ba8SLorenz Bauer		printf "."
15bafc0ba8SLorenz Bauer		if ns1_exec ping -c 1 -W 1 "$1" >/dev/null 2>&1; then
16bafc0ba8SLorenz Bauer			echo " OK"
17bafc0ba8SLorenz Bauer			return
18bafc0ba8SLorenz Bauer		fi
19bafc0ba8SLorenz Bauer		sleep 1
20bafc0ba8SLorenz Bauer	done
21bafc0ba8SLorenz Bauer	echo 1>&2 "ERROR: Timeout waiting for test IP to become available."
22bafc0ba8SLorenz Bauer	exit 1
23bafc0ba8SLorenz Bauer}
24bafc0ba8SLorenz Bauer
25bafc0ba8SLorenz Bauerget_prog_id()
26bafc0ba8SLorenz Bauer{
27bafc0ba8SLorenz Bauer	awk '/ id / {sub(/.* id /, "", $0); print($1)}'
28bafc0ba8SLorenz Bauer}
29bafc0ba8SLorenz Bauer
30bafc0ba8SLorenz Bauerns1_exec()
31bafc0ba8SLorenz Bauer{
32ab6bcc20SHangbin Liu	ip netns exec ${NS1} "$@"
33bafc0ba8SLorenz Bauer}
34bafc0ba8SLorenz Bauer
35bafc0ba8SLorenz Bauersetup()
36bafc0ba8SLorenz Bauer{
37ab6bcc20SHangbin Liu	ip netns add ${NS1}
38bafc0ba8SLorenz Bauer	ns1_exec ip link set lo up
39bafc0ba8SLorenz Bauer
40bafc0ba8SLorenz Bauer	ns1_exec sysctl -w net.ipv4.tcp_syncookies=2
4191bc3578SPetar Penkov	ns1_exec sysctl -w net.ipv4.tcp_window_scaling=0
4291bc3578SPetar Penkov	ns1_exec sysctl -w net.ipv4.tcp_timestamps=0
4391bc3578SPetar Penkov	ns1_exec sysctl -w net.ipv4.tcp_sack=0
44bafc0ba8SLorenz Bauer
45bafc0ba8SLorenz Bauer	wait_for_ip 127.0.0.1
46bafc0ba8SLorenz Bauer	wait_for_ip ::1
47bafc0ba8SLorenz Bauer}
48bafc0ba8SLorenz Bauer
49bafc0ba8SLorenz Bauercleanup()
50bafc0ba8SLorenz Bauer{
51bafc0ba8SLorenz Bauer	ip netns del ns1 2>/dev/null || :
52bafc0ba8SLorenz Bauer}
53bafc0ba8SLorenz Bauer
54bafc0ba8SLorenz Bauermain()
55bafc0ba8SLorenz Bauer{
56bafc0ba8SLorenz Bauer	trap cleanup EXIT 2 3 6 15
57bafc0ba8SLorenz Bauer	setup
58bafc0ba8SLorenz Bauer
59bafc0ba8SLorenz Bauer	printf "Testing clsact..."
60bafc0ba8SLorenz Bauer	ns1_exec tc qdisc add dev "${TEST_IF}" clsact
61bafc0ba8SLorenz Bauer	ns1_exec tc filter add dev "${TEST_IF}" ingress \
62bafc0ba8SLorenz Bauer		bpf obj "${BPF_PROG_OBJ}" sec "${CLSACT_SECTION}" da
63bafc0ba8SLorenz Bauer
64bafc0ba8SLorenz Bauer	BPF_PROG_ID=$(ns1_exec tc filter show dev "${TEST_IF}" ingress | \
65bafc0ba8SLorenz Bauer		      get_prog_id)
66bafc0ba8SLorenz Bauer	ns1_exec "${PROG}" "${BPF_PROG_ID}"
67bafc0ba8SLorenz Bauer	ns1_exec tc qdisc del dev "${TEST_IF}" clsact
68bafc0ba8SLorenz Bauer
69bafc0ba8SLorenz Bauer	printf "Testing XDP..."
70bafc0ba8SLorenz Bauer	ns1_exec ip link set "${TEST_IF}" xdp \
71bafc0ba8SLorenz Bauer		object "${BPF_PROG_OBJ}" section "${XDP_SECTION}"
72bafc0ba8SLorenz Bauer	BPF_PROG_ID=$(ns1_exec ip link show "${TEST_IF}" | get_prog_id)
73bafc0ba8SLorenz Bauer	ns1_exec "${PROG}" "${BPF_PROG_ID}"
74bafc0ba8SLorenz Bauer}
75bafc0ba8SLorenz Bauer
76bafc0ba8SLorenz BauerDIR=$(dirname $0)
77bafc0ba8SLorenz BauerTEST_IF=lo
78bafc0ba8SLorenz BauerMAX_PING_TRIES=5
79*afef88e6SDaniel MüllerBPF_PROG_OBJ="${DIR}/test_tcp_check_syncookie_kern.bpf.o"
80c22bdd28SAndrii NakryikoCLSACT_SECTION="tc"
818fffa0e3SAndrii NakryikoXDP_SECTION="xdp"
82bafc0ba8SLorenz BauerBPF_PROG_ID=0
83bafc0ba8SLorenz BauerPROG="${DIR}/test_tcp_check_syncookie_user"
84bafc0ba8SLorenz Bauer
85bafc0ba8SLorenz Bauermain
86