xref: /linux/samples/bpf/test_cgrp2_sock.sh (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
133aeb5e3SDavid Ahern#!/bin/sh
2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
3ad2805dcSDavid Ahern
433aeb5e3SDavid Ahern# Test various socket options that can be set by attaching programs to cgroups.
533aeb5e3SDavid Ahern
6*f20f064eSDaniel T. LeeMY_DIR=$(dirname $0)
7*f20f064eSDaniel T. LeeTEST=$MY_DIR/test_cgrp2_sock
833aeb5e3SDavid AhernCGRP_MNT="/tmp/cgroupv2-test_cgrp2_sock"
933aeb5e3SDavid Ahern
1033aeb5e3SDavid Ahern################################################################################
1133aeb5e3SDavid Ahern#
1233aeb5e3SDavid Ahernprint_result()
1333aeb5e3SDavid Ahern{
1433aeb5e3SDavid Ahern	local rc=$1
1533aeb5e3SDavid Ahern	local status=" OK "
1633aeb5e3SDavid Ahern
1733aeb5e3SDavid Ahern	[ $rc -ne 0 ] && status="FAIL"
1833aeb5e3SDavid Ahern
1933aeb5e3SDavid Ahern	printf "%-50s    [%4s]\n" "$2" "$status"
20ad2805dcSDavid Ahern}
21ad2805dcSDavid Ahern
2233aeb5e3SDavid Aherncheck_sock()
2333aeb5e3SDavid Ahern{
24*f20f064eSDaniel T. Lee	out=$($TEST)
2533aeb5e3SDavid Ahern	echo $out | grep -q "$1"
2633aeb5e3SDavid Ahern	if [ $? -ne 0 ]; then
2733aeb5e3SDavid Ahern		print_result 1 "IPv4: $2"
2833aeb5e3SDavid Ahern		echo "    expected: $1"
2933aeb5e3SDavid Ahern		echo "        have: $out"
3033aeb5e3SDavid Ahern		rc=1
3133aeb5e3SDavid Ahern	else
3233aeb5e3SDavid Ahern		print_result 0 "IPv4: $2"
3333aeb5e3SDavid Ahern	fi
34ad2805dcSDavid Ahern}
35ad2805dcSDavid Ahern
3633aeb5e3SDavid Aherncheck_sock6()
3733aeb5e3SDavid Ahern{
38*f20f064eSDaniel T. Lee	out=$($TEST -6)
3933aeb5e3SDavid Ahern	echo $out | grep -q "$1"
4033aeb5e3SDavid Ahern	if [ $? -ne 0 ]; then
4133aeb5e3SDavid Ahern		print_result 1 "IPv6: $2"
4233aeb5e3SDavid Ahern		echo "    expected: $1"
4333aeb5e3SDavid Ahern		echo "        have: $out"
4433aeb5e3SDavid Ahern		rc=1
4533aeb5e3SDavid Ahern	else
4633aeb5e3SDavid Ahern		print_result 0 "IPv6: $2"
4733aeb5e3SDavid Ahern	fi
48ad2805dcSDavid Ahern}
49ad2805dcSDavid Ahern
5033aeb5e3SDavid Ahern################################################################################
5133aeb5e3SDavid Ahern#
5233aeb5e3SDavid Ahern
5333aeb5e3SDavid Aherncleanup()
5433aeb5e3SDavid Ahern{
5533aeb5e3SDavid Ahern	echo $$ >> ${CGRP_MNT}/cgroup.procs
5633aeb5e3SDavid Ahern	rmdir ${CGRP_MNT}/sockopts
57ad2805dcSDavid Ahern}
58ad2805dcSDavid Ahern
5933aeb5e3SDavid Aherncleanup_and_exit()
6033aeb5e3SDavid Ahern{
6133aeb5e3SDavid Ahern	local rc=$1
6233aeb5e3SDavid Ahern	local msg="$2"
6333aeb5e3SDavid Ahern
6433aeb5e3SDavid Ahern	[ -n "$msg" ] && echo "ERROR: $msg"
6533aeb5e3SDavid Ahern
66*f20f064eSDaniel T. Lee	$TEST -d ${CGRP_MNT}/sockopts
6733aeb5e3SDavid Ahern	ip li del cgrp2_sock
6833aeb5e3SDavid Ahern	umount ${CGRP_MNT}
6933aeb5e3SDavid Ahern
7033aeb5e3SDavid Ahern	exit $rc
7133aeb5e3SDavid Ahern}
7233aeb5e3SDavid Ahern
7333aeb5e3SDavid Ahern
7433aeb5e3SDavid Ahern################################################################################
7533aeb5e3SDavid Ahern# main
7633aeb5e3SDavid Ahern
7733aeb5e3SDavid Ahernrc=0
7833aeb5e3SDavid Ahern
7933aeb5e3SDavid Ahernip li add cgrp2_sock type dummy 2>/dev/null
8033aeb5e3SDavid Ahern
8133aeb5e3SDavid Ahernset -e
8233aeb5e3SDavid Ahernmkdir -p ${CGRP_MNT}
8333aeb5e3SDavid Ahernmount -t cgroup2 none ${CGRP_MNT}
8433aeb5e3SDavid Ahernset +e
8533aeb5e3SDavid Ahern
8633aeb5e3SDavid Ahern
8733aeb5e3SDavid Ahern# make sure we have a known start point
88ad2805dcSDavid Aherncleanup 2>/dev/null
8933aeb5e3SDavid Ahern
9033aeb5e3SDavid Ahernmkdir -p ${CGRP_MNT}/sockopts
9133aeb5e3SDavid Ahern[ $? -ne 0 ] && cleanup_and_exit 1 "Failed to create cgroup hierarchy"
9233aeb5e3SDavid Ahern
9333aeb5e3SDavid Ahern
9433aeb5e3SDavid Ahern# set pid into cgroup
9533aeb5e3SDavid Ahernecho $$ > ${CGRP_MNT}/sockopts/cgroup.procs
9633aeb5e3SDavid Ahern
9733aeb5e3SDavid Ahern# no bpf program attached, so socket should show no settings
9833aeb5e3SDavid Aherncheck_sock "dev , mark 0, priority 0" "No programs attached"
9933aeb5e3SDavid Aherncheck_sock6 "dev , mark 0, priority 0" "No programs attached"
10033aeb5e3SDavid Ahern
10133aeb5e3SDavid Ahern# verify device is set
10233aeb5e3SDavid Ahern#
103*f20f064eSDaniel T. Lee$TEST -b cgrp2_sock ${CGRP_MNT}/sockopts
10433aeb5e3SDavid Ahernif [ $? -ne 0 ]; then
10533aeb5e3SDavid Ahern	cleanup_and_exit 1 "Failed to install program to set device"
10633aeb5e3SDavid Ahernfi
10733aeb5e3SDavid Aherncheck_sock "dev cgrp2_sock, mark 0, priority 0" "Device set"
10833aeb5e3SDavid Aherncheck_sock6 "dev cgrp2_sock, mark 0, priority 0" "Device set"
10933aeb5e3SDavid Ahern
11033aeb5e3SDavid Ahern# verify mark is set
11133aeb5e3SDavid Ahern#
112*f20f064eSDaniel T. Lee$TEST -m 666 ${CGRP_MNT}/sockopts
11333aeb5e3SDavid Ahernif [ $? -ne 0 ]; then
11433aeb5e3SDavid Ahern	cleanup_and_exit 1 "Failed to install program to set mark"
11533aeb5e3SDavid Ahernfi
11633aeb5e3SDavid Aherncheck_sock "dev , mark 666, priority 0" "Mark set"
11733aeb5e3SDavid Aherncheck_sock6 "dev , mark 666, priority 0" "Mark set"
11833aeb5e3SDavid Ahern
11933aeb5e3SDavid Ahern# verify priority is set
12033aeb5e3SDavid Ahern#
121*f20f064eSDaniel T. Lee$TEST -p 123 ${CGRP_MNT}/sockopts
12233aeb5e3SDavid Ahernif [ $? -ne 0 ]; then
12333aeb5e3SDavid Ahern	cleanup_and_exit 1 "Failed to install program to set priority"
12433aeb5e3SDavid Ahernfi
12533aeb5e3SDavid Aherncheck_sock "dev , mark 0, priority 123" "Priority set"
12633aeb5e3SDavid Aherncheck_sock6 "dev , mark 0, priority 123" "Priority set"
12733aeb5e3SDavid Ahern
12833aeb5e3SDavid Ahern# all 3 at once
12933aeb5e3SDavid Ahern#
130*f20f064eSDaniel T. Lee$TEST -b cgrp2_sock -m 666 -p 123 ${CGRP_MNT}/sockopts
13133aeb5e3SDavid Ahernif [ $? -ne 0 ]; then
13233aeb5e3SDavid Ahern	cleanup_and_exit 1 "Failed to install program to set device, mark and priority"
13333aeb5e3SDavid Ahernfi
13433aeb5e3SDavid Aherncheck_sock "dev cgrp2_sock, mark 666, priority 123" "Priority set"
13533aeb5e3SDavid Aherncheck_sock6 "dev cgrp2_sock, mark 666, priority 123" "Priority set"
13633aeb5e3SDavid Ahern
13733aeb5e3SDavid Aherncleanup_and_exit $rc
138