test_cgrp2_sock.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Test various socket options that can be set by attaching programs to cgroups.
  4. CGRP_MNT="/tmp/cgroupv2-test_cgrp2_sock"
  5. ################################################################################
  6. #
  7. print_result()
  8. {
  9. local rc=$1
  10. local status=" OK "
  11. [ $rc -ne 0 ] && status="FAIL"
  12. printf "%-50s [%4s]\n" "$2" "$status"
  13. }
  14. check_sock()
  15. {
  16. out=$(test_cgrp2_sock)
  17. echo $out | grep -q "$1"
  18. if [ $? -ne 0 ]; then
  19. print_result 1 "IPv4: $2"
  20. echo " expected: $1"
  21. echo " have: $out"
  22. rc=1
  23. else
  24. print_result 0 "IPv4: $2"
  25. fi
  26. }
  27. check_sock6()
  28. {
  29. out=$(test_cgrp2_sock -6)
  30. echo $out | grep -q "$1"
  31. if [ $? -ne 0 ]; then
  32. print_result 1 "IPv6: $2"
  33. echo " expected: $1"
  34. echo " have: $out"
  35. rc=1
  36. else
  37. print_result 0 "IPv6: $2"
  38. fi
  39. }
  40. ################################################################################
  41. #
  42. cleanup()
  43. {
  44. echo $$ >> ${CGRP_MNT}/cgroup.procs
  45. rmdir ${CGRP_MNT}/sockopts
  46. }
  47. cleanup_and_exit()
  48. {
  49. local rc=$1
  50. local msg="$2"
  51. [ -n "$msg" ] && echo "ERROR: $msg"
  52. test_cgrp2_sock -d ${CGRP_MNT}/sockopts
  53. ip li del cgrp2_sock
  54. umount ${CGRP_MNT}
  55. exit $rc
  56. }
  57. ################################################################################
  58. # main
  59. rc=0
  60. ip li add cgrp2_sock type dummy 2>/dev/null
  61. set -e
  62. mkdir -p ${CGRP_MNT}
  63. mount -t cgroup2 none ${CGRP_MNT}
  64. set +e
  65. # make sure we have a known start point
  66. cleanup 2>/dev/null
  67. mkdir -p ${CGRP_MNT}/sockopts
  68. [ $? -ne 0 ] && cleanup_and_exit 1 "Failed to create cgroup hierarchy"
  69. # set pid into cgroup
  70. echo $$ > ${CGRP_MNT}/sockopts/cgroup.procs
  71. # no bpf program attached, so socket should show no settings
  72. check_sock "dev , mark 0, priority 0" "No programs attached"
  73. check_sock6 "dev , mark 0, priority 0" "No programs attached"
  74. # verify device is set
  75. #
  76. test_cgrp2_sock -b cgrp2_sock ${CGRP_MNT}/sockopts
  77. if [ $? -ne 0 ]; then
  78. cleanup_and_exit 1 "Failed to install program to set device"
  79. fi
  80. check_sock "dev cgrp2_sock, mark 0, priority 0" "Device set"
  81. check_sock6 "dev cgrp2_sock, mark 0, priority 0" "Device set"
  82. # verify mark is set
  83. #
  84. test_cgrp2_sock -m 666 ${CGRP_MNT}/sockopts
  85. if [ $? -ne 0 ]; then
  86. cleanup_and_exit 1 "Failed to install program to set mark"
  87. fi
  88. check_sock "dev , mark 666, priority 0" "Mark set"
  89. check_sock6 "dev , mark 666, priority 0" "Mark set"
  90. # verify priority is set
  91. #
  92. test_cgrp2_sock -p 123 ${CGRP_MNT}/sockopts
  93. if [ $? -ne 0 ]; then
  94. cleanup_and_exit 1 "Failed to install program to set priority"
  95. fi
  96. check_sock "dev , mark 0, priority 123" "Priority set"
  97. check_sock6 "dev , mark 0, priority 123" "Priority set"
  98. # all 3 at once
  99. #
  100. test_cgrp2_sock -b cgrp2_sock -m 666 -p 123 ${CGRP_MNT}/sockopts
  101. if [ $? -ne 0 ]; then
  102. cleanup_and_exit 1 "Failed to install program to set device, mark and priority"
  103. fi
  104. check_sock "dev cgrp2_sock, mark 666, priority 123" "Priority set"
  105. check_sock6 "dev cgrp2_sock, mark 666, priority 123" "Priority set"
  106. cleanup_and_exit $rc