Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/sh
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 # Test various socket options that can be set by attaching programs to cgroups.
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 # main
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 # make sure we have a known start point
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 # set pid into cgroup
0093 echo $$ > ${CGRP_MNT}/sockopts/cgroup.procs
0094 
0095 # no bpf program attached, so socket should show no settings
0096 check_sock "dev , mark 0, priority 0" "No programs attached"
0097 check_sock6 "dev , mark 0, priority 0" "No programs attached"
0098 
0099 # verify device is set
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 # verify mark is set
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 # verify priority is set
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 # all 3 at once
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