xref: /OK3568_Linux_fs/kernel/samples/bpf/test_cgrp2_sock.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun# Test various socket options that can be set by attaching programs to cgroups.
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunCGRP_MNT="/tmp/cgroupv2-test_cgrp2_sock"
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun################################################################################
9*4882a593Smuzhiyun#
10*4882a593Smuzhiyunprint_result()
11*4882a593Smuzhiyun{
12*4882a593Smuzhiyun	local rc=$1
13*4882a593Smuzhiyun	local status=" OK "
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun	[ $rc -ne 0 ] && status="FAIL"
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun	printf "%-50s    [%4s]\n" "$2" "$status"
18*4882a593Smuzhiyun}
19*4882a593Smuzhiyun
20*4882a593Smuzhiyuncheck_sock()
21*4882a593Smuzhiyun{
22*4882a593Smuzhiyun	out=$(test_cgrp2_sock)
23*4882a593Smuzhiyun	echo $out | grep -q "$1"
24*4882a593Smuzhiyun	if [ $? -ne 0 ]; then
25*4882a593Smuzhiyun		print_result 1 "IPv4: $2"
26*4882a593Smuzhiyun		echo "    expected: $1"
27*4882a593Smuzhiyun		echo "        have: $out"
28*4882a593Smuzhiyun		rc=1
29*4882a593Smuzhiyun	else
30*4882a593Smuzhiyun		print_result 0 "IPv4: $2"
31*4882a593Smuzhiyun	fi
32*4882a593Smuzhiyun}
33*4882a593Smuzhiyun
34*4882a593Smuzhiyuncheck_sock6()
35*4882a593Smuzhiyun{
36*4882a593Smuzhiyun	out=$(test_cgrp2_sock -6)
37*4882a593Smuzhiyun	echo $out | grep -q "$1"
38*4882a593Smuzhiyun	if [ $? -ne 0 ]; then
39*4882a593Smuzhiyun		print_result 1 "IPv6: $2"
40*4882a593Smuzhiyun		echo "    expected: $1"
41*4882a593Smuzhiyun		echo "        have: $out"
42*4882a593Smuzhiyun		rc=1
43*4882a593Smuzhiyun	else
44*4882a593Smuzhiyun		print_result 0 "IPv6: $2"
45*4882a593Smuzhiyun	fi
46*4882a593Smuzhiyun}
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun################################################################################
49*4882a593Smuzhiyun#
50*4882a593Smuzhiyun
51*4882a593Smuzhiyuncleanup()
52*4882a593Smuzhiyun{
53*4882a593Smuzhiyun	echo $$ >> ${CGRP_MNT}/cgroup.procs
54*4882a593Smuzhiyun	rmdir ${CGRP_MNT}/sockopts
55*4882a593Smuzhiyun}
56*4882a593Smuzhiyun
57*4882a593Smuzhiyuncleanup_and_exit()
58*4882a593Smuzhiyun{
59*4882a593Smuzhiyun	local rc=$1
60*4882a593Smuzhiyun	local msg="$2"
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	[ -n "$msg" ] && echo "ERROR: $msg"
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	test_cgrp2_sock -d ${CGRP_MNT}/sockopts
65*4882a593Smuzhiyun	ip li del cgrp2_sock
66*4882a593Smuzhiyun	umount ${CGRP_MNT}
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun	exit $rc
69*4882a593Smuzhiyun}
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun################################################################################
73*4882a593Smuzhiyun# main
74*4882a593Smuzhiyun
75*4882a593Smuzhiyunrc=0
76*4882a593Smuzhiyun
77*4882a593Smuzhiyunip li add cgrp2_sock type dummy 2>/dev/null
78*4882a593Smuzhiyun
79*4882a593Smuzhiyunset -e
80*4882a593Smuzhiyunmkdir -p ${CGRP_MNT}
81*4882a593Smuzhiyunmount -t cgroup2 none ${CGRP_MNT}
82*4882a593Smuzhiyunset +e
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun# make sure we have a known start point
86*4882a593Smuzhiyuncleanup 2>/dev/null
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunmkdir -p ${CGRP_MNT}/sockopts
89*4882a593Smuzhiyun[ $? -ne 0 ] && cleanup_and_exit 1 "Failed to create cgroup hierarchy"
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun# set pid into cgroup
93*4882a593Smuzhiyunecho $$ > ${CGRP_MNT}/sockopts/cgroup.procs
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun# no bpf program attached, so socket should show no settings
96*4882a593Smuzhiyuncheck_sock "dev , mark 0, priority 0" "No programs attached"
97*4882a593Smuzhiyuncheck_sock6 "dev , mark 0, priority 0" "No programs attached"
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun# verify device is set
100*4882a593Smuzhiyun#
101*4882a593Smuzhiyuntest_cgrp2_sock -b cgrp2_sock ${CGRP_MNT}/sockopts
102*4882a593Smuzhiyunif [ $? -ne 0 ]; then
103*4882a593Smuzhiyun	cleanup_and_exit 1 "Failed to install program to set device"
104*4882a593Smuzhiyunfi
105*4882a593Smuzhiyuncheck_sock "dev cgrp2_sock, mark 0, priority 0" "Device set"
106*4882a593Smuzhiyuncheck_sock6 "dev cgrp2_sock, mark 0, priority 0" "Device set"
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun# verify mark is set
109*4882a593Smuzhiyun#
110*4882a593Smuzhiyuntest_cgrp2_sock -m 666 ${CGRP_MNT}/sockopts
111*4882a593Smuzhiyunif [ $? -ne 0 ]; then
112*4882a593Smuzhiyun	cleanup_and_exit 1 "Failed to install program to set mark"
113*4882a593Smuzhiyunfi
114*4882a593Smuzhiyuncheck_sock "dev , mark 666, priority 0" "Mark set"
115*4882a593Smuzhiyuncheck_sock6 "dev , mark 666, priority 0" "Mark set"
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun# verify priority is set
118*4882a593Smuzhiyun#
119*4882a593Smuzhiyuntest_cgrp2_sock -p 123 ${CGRP_MNT}/sockopts
120*4882a593Smuzhiyunif [ $? -ne 0 ]; then
121*4882a593Smuzhiyun	cleanup_and_exit 1 "Failed to install program to set priority"
122*4882a593Smuzhiyunfi
123*4882a593Smuzhiyuncheck_sock "dev , mark 0, priority 123" "Priority set"
124*4882a593Smuzhiyuncheck_sock6 "dev , mark 0, priority 123" "Priority set"
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun# all 3 at once
127*4882a593Smuzhiyun#
128*4882a593Smuzhiyuntest_cgrp2_sock -b cgrp2_sock -m 666 -p 123 ${CGRP_MNT}/sockopts
129*4882a593Smuzhiyunif [ $? -ne 0 ]; then
130*4882a593Smuzhiyun	cleanup_and_exit 1 "Failed to install program to set device, mark and priority"
131*4882a593Smuzhiyunfi
132*4882a593Smuzhiyuncheck_sock "dev cgrp2_sock, mark 666, priority 123" "Priority set"
133*4882a593Smuzhiyuncheck_sock6 "dev cgrp2_sock, mark 666, priority 123" "Priority set"
134*4882a593Smuzhiyun
135*4882a593Smuzhiyuncleanup_and_exit $rc
136