forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.9 KiB
135 lines
2.9 KiB
#!/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
|
|
|