123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #!/bin/sh
- # SPDX-License-Identifier: GPL-2.0
- # Test various socket options that can be set by attaching programs to cgroups.
- CGRP_MNT="/tmp/cgroupv2-test_cgrp2_sock"
- ################################################################################
- #
- print_result()
- {
- local rc=$1
- local status=" OK "
- [ $rc -ne 0 ] && status="FAIL"
- printf "%-50s [%4s]\n" "$2" "$status"
- }
- check_sock()
- {
- out=$(test_cgrp2_sock)
- echo $out | grep -q "$1"
- if [ $? -ne 0 ]; then
- print_result 1 "IPv4: $2"
- echo " expected: $1"
- echo " have: $out"
- rc=1
- else
- print_result 0 "IPv4: $2"
- fi
- }
- check_sock6()
- {
- out=$(test_cgrp2_sock -6)
- echo $out | grep -q "$1"
- if [ $? -ne 0 ]; then
- print_result 1 "IPv6: $2"
- echo " expected: $1"
- echo " have: $out"
- rc=1
- else
- print_result 0 "IPv6: $2"
- fi
- }
- ################################################################################
- #
- cleanup()
- {
- echo $$ >> ${CGRP_MNT}/cgroup.procs
- rmdir ${CGRP_MNT}/sockopts
- }
- cleanup_and_exit()
- {
- local rc=$1
- local msg="$2"
- [ -n "$msg" ] && echo "ERROR: $msg"
- test_cgrp2_sock -d ${CGRP_MNT}/sockopts
- ip li del cgrp2_sock
- umount ${CGRP_MNT}
- exit $rc
- }
- ################################################################################
- # main
- rc=0
- ip li add cgrp2_sock type dummy 2>/dev/null
- set -e
- mkdir -p ${CGRP_MNT}
- mount -t cgroup2 none ${CGRP_MNT}
- set +e
- # make sure we have a known start point
- cleanup 2>/dev/null
- mkdir -p ${CGRP_MNT}/sockopts
- [ $? -ne 0 ] && cleanup_and_exit 1 "Failed to create cgroup hierarchy"
- # set pid into cgroup
- echo $$ > ${CGRP_MNT}/sockopts/cgroup.procs
- # no bpf program attached, so socket should show no settings
- check_sock "dev , mark 0, priority 0" "No programs attached"
- check_sock6 "dev , mark 0, priority 0" "No programs attached"
- # verify device is set
- #
- test_cgrp2_sock -b cgrp2_sock ${CGRP_MNT}/sockopts
- if [ $? -ne 0 ]; then
- cleanup_and_exit 1 "Failed to install program to set device"
- fi
- check_sock "dev cgrp2_sock, mark 0, priority 0" "Device set"
- check_sock6 "dev cgrp2_sock, mark 0, priority 0" "Device set"
- # verify mark is set
- #
- test_cgrp2_sock -m 666 ${CGRP_MNT}/sockopts
- if [ $? -ne 0 ]; then
- cleanup_and_exit 1 "Failed to install program to set mark"
- fi
- check_sock "dev , mark 666, priority 0" "Mark set"
- check_sock6 "dev , mark 666, priority 0" "Mark set"
- # verify priority is set
- #
- test_cgrp2_sock -p 123 ${CGRP_MNT}/sockopts
- if [ $? -ne 0 ]; then
- cleanup_and_exit 1 "Failed to install program to set priority"
- fi
- check_sock "dev , mark 0, priority 123" "Priority set"
- check_sock6 "dev , mark 0, priority 123" "Priority set"
- # all 3 at once
- #
- test_cgrp2_sock -b cgrp2_sock -m 666 -p 123 ${CGRP_MNT}/sockopts
- if [ $? -ne 0 ]; then
- cleanup_and_exit 1 "Failed to install program to set device, mark and priority"
- fi
- check_sock "dev cgrp2_sock, mark 666, priority 123" "Priority set"
- check_sock6 "dev cgrp2_sock, mark 666, priority 123" "Priority set"
- cleanup_and_exit $rc
|