test_cgrp2_sock.sh 2.9 KB

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