86 lines · bash
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.03# Copyright (c) 2018 Facebook4# Copyright (c) 2019 Cloudflare5 6set -eu7readonly NS1="ns1-$(mktemp -u XXXXXX)"8 9wait_for_ip()10{11 local _i12 printf "Wait for IP %s to become available " "$1"13 for _i in $(seq ${MAX_PING_TRIES}); do14 printf "."15 if ns1_exec ping -c 1 -W 1 "$1" >/dev/null 2>&1; then16 echo " OK"17 return18 fi19 sleep 120 done21 echo 1>&2 "ERROR: Timeout waiting for test IP to become available."22 exit 123}24 25get_prog_id()26{27 awk '/ id / {sub(/.* id /, "", $0); print($1)}'28}29 30ns1_exec()31{32 ip netns exec ${NS1} "$@"33}34 35setup()36{37 ip netns add ${NS1}38 ns1_exec ip link set lo up39 40 ns1_exec sysctl -w net.ipv4.tcp_syncookies=241 ns1_exec sysctl -w net.ipv4.tcp_window_scaling=042 ns1_exec sysctl -w net.ipv4.tcp_timestamps=043 ns1_exec sysctl -w net.ipv4.tcp_sack=044 45 wait_for_ip 127.0.0.146 wait_for_ip ::147}48 49cleanup()50{51 ip netns del ns1 2>/dev/null || :52}53 54main()55{56 trap cleanup EXIT 2 3 6 1557 setup58 59 printf "Testing clsact..."60 ns1_exec tc qdisc add dev "${TEST_IF}" clsact61 ns1_exec tc filter add dev "${TEST_IF}" ingress \62 bpf obj "${BPF_PROG_OBJ}" sec "${CLSACT_SECTION}" da63 64 BPF_PROG_ID=$(ns1_exec tc filter show dev "${TEST_IF}" ingress | \65 get_prog_id)66 ns1_exec "${PROG}" "${BPF_PROG_ID}"67 ns1_exec tc qdisc del dev "${TEST_IF}" clsact68 69 printf "Testing XDP..."70 ns1_exec ip link set "${TEST_IF}" xdp \71 object "${BPF_PROG_OBJ}" section "${XDP_SECTION}"72 BPF_PROG_ID=$(ns1_exec ip link show "${TEST_IF}" | get_prog_id)73 ns1_exec "${PROG}" "${BPF_PROG_ID}"74}75 76DIR=$(dirname $0)77TEST_IF=lo78MAX_PING_TRIES=579BPF_PROG_OBJ="${DIR}/test_tcp_check_syncookie_kern.bpf.o"80CLSACT_SECTION="tc"81XDP_SECTION="xdp"82BPF_PROG_ID=083PROG="${DIR}/test_tcp_check_syncookie_user"84 85main86