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