test_bpftool_metadata.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Kselftest framework requirement - SKIP code is 4.
  4. ksft_skip=4
  5. BPF_FILE_USED="metadata_used.bpf.o"
  6. BPF_FILE_UNUSED="metadata_unused.bpf.o"
  7. TESTNAME=bpftool_metadata
  8. BPF_FS=$(awk '$3 == "bpf" {print $2; exit}' /proc/mounts)
  9. BPF_DIR=$BPF_FS/test_$TESTNAME
  10. _cleanup()
  11. {
  12. set +e
  13. rm -rf $BPF_DIR 2> /dev/null
  14. }
  15. cleanup_skip()
  16. {
  17. echo "selftests: $TESTNAME [SKIP]"
  18. _cleanup
  19. exit $ksft_skip
  20. }
  21. cleanup()
  22. {
  23. if [ "$?" = 0 ]; then
  24. echo "selftests: $TESTNAME [PASS]"
  25. else
  26. echo "selftests: $TESTNAME [FAILED]"
  27. fi
  28. _cleanup
  29. }
  30. if [ $(id -u) -ne 0 ]; then
  31. echo "selftests: $TESTNAME [SKIP] Need root privileges"
  32. exit $ksft_skip
  33. fi
  34. if [ -z "$BPF_FS" ]; then
  35. echo "selftests: $TESTNAME [SKIP] Could not run test without bpffs mounted"
  36. exit $ksft_skip
  37. fi
  38. if ! bpftool version > /dev/null 2>&1; then
  39. echo "selftests: $TESTNAME [SKIP] Could not run test without bpftool"
  40. exit $ksft_skip
  41. fi
  42. set -e
  43. trap cleanup_skip EXIT
  44. mkdir $BPF_DIR
  45. trap cleanup EXIT
  46. bpftool prog load $BPF_FILE_UNUSED $BPF_DIR/unused
  47. METADATA_PLAIN="$(bpftool prog)"
  48. echo "$METADATA_PLAIN" | grep 'a = "foo"' > /dev/null
  49. echo "$METADATA_PLAIN" | grep 'b = 1' > /dev/null
  50. bpftool prog --json | grep '"metadata":{"a":"foo","b":1}' > /dev/null
  51. bpftool map | grep 'metadata.rodata' > /dev/null
  52. rm $BPF_DIR/unused
  53. bpftool prog load $BPF_FILE_USED $BPF_DIR/used
  54. METADATA_PLAIN="$(bpftool prog)"
  55. echo "$METADATA_PLAIN" | grep 'a = "bar"' > /dev/null
  56. echo "$METADATA_PLAIN" | grep 'b = 2' > /dev/null
  57. bpftool prog --json | grep '"metadata":{"a":"bar","b":2}' > /dev/null
  58. bpftool map | grep 'metadata.rodata' > /dev/null
  59. rm $BPF_DIR/used
  60. exit 0