test_tcp_check_syncookie.sh 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Copyright (c) 2018 Facebook
  4. # Copyright (c) 2019 Cloudflare
  5. set -eu
  6. readonly NS1="ns1-$(mktemp -u XXXXXX)"
  7. wait_for_ip()
  8. {
  9. local _i
  10. printf "Wait for IP %s to become available " "$1"
  11. for _i in $(seq ${MAX_PING_TRIES}); do
  12. printf "."
  13. if ns1_exec ping -c 1 -W 1 "$1" >/dev/null 2>&1; then
  14. echo " OK"
  15. return
  16. fi
  17. sleep 1
  18. done
  19. echo 1>&2 "ERROR: Timeout waiting for test IP to become available."
  20. exit 1
  21. }
  22. get_prog_id()
  23. {
  24. awk '/ id / {sub(/.* id /, "", $0); print($1)}'
  25. }
  26. ns1_exec()
  27. {
  28. ip netns exec ${NS1} "$@"
  29. }
  30. setup()
  31. {
  32. ip netns add ${NS1}
  33. ns1_exec ip link set lo up
  34. ns1_exec sysctl -w net.ipv4.tcp_syncookies=2
  35. ns1_exec sysctl -w net.ipv4.tcp_window_scaling=0
  36. ns1_exec sysctl -w net.ipv4.tcp_timestamps=0
  37. ns1_exec sysctl -w net.ipv4.tcp_sack=0
  38. wait_for_ip 127.0.0.1
  39. wait_for_ip ::1
  40. }
  41. cleanup()
  42. {
  43. ip netns del ns1 2>/dev/null || :
  44. }
  45. main()
  46. {
  47. trap cleanup EXIT 2 3 6 15
  48. setup
  49. printf "Testing clsact..."
  50. ns1_exec tc qdisc add dev "${TEST_IF}" clsact
  51. ns1_exec tc filter add dev "${TEST_IF}" ingress \
  52. bpf obj "${BPF_PROG_OBJ}" sec "${CLSACT_SECTION}" da
  53. BPF_PROG_ID=$(ns1_exec tc filter show dev "${TEST_IF}" ingress | \
  54. get_prog_id)
  55. ns1_exec "${PROG}" "${BPF_PROG_ID}"
  56. ns1_exec tc qdisc del dev "${TEST_IF}" clsact
  57. printf "Testing XDP..."
  58. ns1_exec ip link set "${TEST_IF}" xdp \
  59. object "${BPF_PROG_OBJ}" section "${XDP_SECTION}"
  60. BPF_PROG_ID=$(ns1_exec ip link show "${TEST_IF}" | get_prog_id)
  61. ns1_exec "${PROG}" "${BPF_PROG_ID}"
  62. }
  63. DIR=$(dirname $0)
  64. TEST_IF=lo
  65. MAX_PING_TRIES=5
  66. BPF_PROG_OBJ="${DIR}/test_tcp_check_syncookie_kern.bpf.o"
  67. CLSACT_SECTION="tc"
  68. XDP_SECTION="xdp"
  69. BPF_PROG_ID=0
  70. PROG="${DIR}/test_tcp_check_syncookie_user"
  71. main