test_skb_cgroup_id.sh 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Copyright (c) 2018 Facebook
  4. set -eu
  5. wait_for_ip()
  6. {
  7. local _i
  8. echo -n "Wait for testing link-local IP to become available "
  9. for _i in $(seq ${MAX_PING_TRIES}); do
  10. echo -n "."
  11. if ping -6 -q -c 1 -W 1 ff02::1%${TEST_IF} >/dev/null 2>&1; then
  12. echo " OK"
  13. return
  14. fi
  15. sleep 1
  16. done
  17. echo 1>&2 "ERROR: Timeout waiting for test IP to become available."
  18. exit 1
  19. }
  20. setup()
  21. {
  22. # Create testing interfaces not to interfere with current environment.
  23. ip link add dev ${TEST_IF} type veth peer name ${TEST_IF_PEER}
  24. ip link set ${TEST_IF} up
  25. ip link set ${TEST_IF_PEER} up
  26. wait_for_ip
  27. tc qdisc add dev ${TEST_IF} clsact
  28. tc filter add dev ${TEST_IF} egress bpf obj ${BPF_PROG_OBJ} \
  29. sec ${BPF_PROG_SECTION} da
  30. BPF_PROG_ID=$(tc filter show dev ${TEST_IF} egress | \
  31. awk '/ id / {sub(/.* id /, "", $0); print($1)}')
  32. }
  33. cleanup()
  34. {
  35. ip link del ${TEST_IF} 2>/dev/null || :
  36. ip link del ${TEST_IF_PEER} 2>/dev/null || :
  37. }
  38. main()
  39. {
  40. trap cleanup EXIT 2 3 6 15
  41. setup
  42. ${PROG} ${TEST_IF} ${BPF_PROG_ID}
  43. }
  44. DIR=$(dirname $0)
  45. TEST_IF="test_cgid_1"
  46. TEST_IF_PEER="test_cgid_2"
  47. MAX_PING_TRIES=5
  48. BPF_PROG_OBJ="${DIR}/test_skb_cgroup_id_kern.o"
  49. BPF_PROG_SECTION="cgroup_id_logger"
  50. BPF_PROG_ID=0
  51. PROG="${DIR}/test_skb_cgroup_id_user"
  52. main