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