Blame view

samples/bpf/test_cgrp2_sock.sh 2.85 KB
33aeb5e30   David Ahern   samples/bpf: Upda...
1
  #!/bin/sh
b24413180   Greg Kroah-Hartman   License cleanup: ...
2
  # SPDX-License-Identifier: GPL-2.0
33aeb5e30   David Ahern   samples/bpf: Upda...
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
  # 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]
  " "$2" "$status"
ad2805dc7   David Ahern   samples: bpf: add...
19
  }
33aeb5e30   David Ahern   samples/bpf: Upda...
20
21
22
23
24
25
26
27
28
29
30
31
  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
ad2805dc7   David Ahern   samples: bpf: add...
32
  }
33aeb5e30   David Ahern   samples/bpf: Upda...
33
34
35
36
37
38
39
40
41
42
43
44
  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
ad2805dc7   David Ahern   samples: bpf: add...
45
  }
33aeb5e30   David Ahern   samples/bpf: Upda...
46
47
48
49
50
51
52
  ################################################################################
  #
  
  cleanup()
  {
  	echo $$ >> ${CGRP_MNT}/cgroup.procs
  	rmdir ${CGRP_MNT}/sockopts
ad2805dc7   David Ahern   samples: bpf: add...
53
  }
33aeb5e30   David Ahern   samples/bpf: Upda...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  cleanup_and_exit()
  {
  	local rc=$1
  	local msg="$2"
  
  	[ -n "$msg" ] && echo "ERROR: $msg"
  
  	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
ad2805dc7   David Ahern   samples: bpf: add...
82
  cleanup 2>/dev/null
33aeb5e30   David Ahern   samples/bpf: Upda...
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
  
  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