0001
0002
0003
0004
0005
0006 CGRP_MNT="/tmp/cgroupv2-test_cgrp2_sock"
0007
0008
0009
0010 print_result()
0011 {
0012 local rc=$1
0013 local status=" OK "
0014
0015 [ $rc -ne 0 ] && status="FAIL"
0016
0017 printf "%-50s [%4s]\n" "$2" "$status"
0018 }
0019
0020 check_sock()
0021 {
0022 out=$(test_cgrp2_sock)
0023 echo $out | grep -q "$1"
0024 if [ $? -ne 0 ]; then
0025 print_result 1 "IPv4: $2"
0026 echo " expected: $1"
0027 echo " have: $out"
0028 rc=1
0029 else
0030 print_result 0 "IPv4: $2"
0031 fi
0032 }
0033
0034 check_sock6()
0035 {
0036 out=$(test_cgrp2_sock -6)
0037 echo $out | grep -q "$1"
0038 if [ $? -ne 0 ]; then
0039 print_result 1 "IPv6: $2"
0040 echo " expected: $1"
0041 echo " have: $out"
0042 rc=1
0043 else
0044 print_result 0 "IPv6: $2"
0045 fi
0046 }
0047
0048
0049
0050
0051 cleanup()
0052 {
0053 echo $$ >> ${CGRP_MNT}/cgroup.procs
0054 rmdir ${CGRP_MNT}/sockopts
0055 }
0056
0057 cleanup_and_exit()
0058 {
0059 local rc=$1
0060 local msg="$2"
0061
0062 [ -n "$msg" ] && echo "ERROR: $msg"
0063
0064 test_cgrp2_sock -d ${CGRP_MNT}/sockopts
0065 ip li del cgrp2_sock
0066 umount ${CGRP_MNT}
0067
0068 exit $rc
0069 }
0070
0071
0072
0073
0074
0075 rc=0
0076
0077 ip li add cgrp2_sock type dummy 2>/dev/null
0078
0079 set -e
0080 mkdir -p ${CGRP_MNT}
0081 mount -t cgroup2 none ${CGRP_MNT}
0082 set +e
0083
0084
0085
0086 cleanup 2>/dev/null
0087
0088 mkdir -p ${CGRP_MNT}/sockopts
0089 [ $? -ne 0 ] && cleanup_and_exit 1 "Failed to create cgroup hierarchy"
0090
0091
0092
0093 echo $$ > ${CGRP_MNT}/sockopts/cgroup.procs
0094
0095
0096 check_sock "dev , mark 0, priority 0" "No programs attached"
0097 check_sock6 "dev , mark 0, priority 0" "No programs attached"
0098
0099
0100
0101 test_cgrp2_sock -b cgrp2_sock ${CGRP_MNT}/sockopts
0102 if [ $? -ne 0 ]; then
0103 cleanup_and_exit 1 "Failed to install program to set device"
0104 fi
0105 check_sock "dev cgrp2_sock, mark 0, priority 0" "Device set"
0106 check_sock6 "dev cgrp2_sock, mark 0, priority 0" "Device set"
0107
0108
0109
0110 test_cgrp2_sock -m 666 ${CGRP_MNT}/sockopts
0111 if [ $? -ne 0 ]; then
0112 cleanup_and_exit 1 "Failed to install program to set mark"
0113 fi
0114 check_sock "dev , mark 666, priority 0" "Mark set"
0115 check_sock6 "dev , mark 666, priority 0" "Mark set"
0116
0117
0118
0119 test_cgrp2_sock -p 123 ${CGRP_MNT}/sockopts
0120 if [ $? -ne 0 ]; then
0121 cleanup_and_exit 1 "Failed to install program to set priority"
0122 fi
0123 check_sock "dev , mark 0, priority 123" "Priority set"
0124 check_sock6 "dev , mark 0, priority 123" "Priority set"
0125
0126
0127
0128 test_cgrp2_sock -b cgrp2_sock -m 666 -p 123 ${CGRP_MNT}/sockopts
0129 if [ $? -ne 0 ]; then
0130 cleanup_and_exit 1 "Failed to install program to set device, mark and priority"
0131 fi
0132 check_sock "dev cgrp2_sock, mark 666, priority 123" "Priority set"
0133 check_sock6 "dev cgrp2_sock, mark 666, priority 123" "Priority set"
0134
0135 cleanup_and_exit $rc