1
0
Fork 0

samples/bpf: Update cgrp2 socket tests

Update cgrp2 bpf sock tests to check that device, mark and priority
can all be set on a socket via bpf programs attached to a cgroup.

Signed-off-by: David Ahern <dsahern@gmail.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
zero-colors
David Ahern 2017-08-31 15:05:49 -07:00 committed by David S. Miller
parent f776d460b8
commit 33aeb5e30a
1 changed files with 123 additions and 37 deletions

View File

@ -1,47 +1,133 @@
#!/bin/bash #!/bin/sh
function config_device { # Test various socket options that can be set by attaching programs to cgroups.
ip netns add at_ns0
ip link add veth0 type veth peer name veth0b CGRP_MNT="/tmp/cgroupv2-test_cgrp2_sock"
ip link set veth0b up
ip link set veth0 netns at_ns0 ################################################################################
ip netns exec at_ns0 ip addr add 172.16.1.100/24 dev veth0 #
ip netns exec at_ns0 ip addr add 2401:db00::1/64 dev veth0 nodad print_result()
ip netns exec at_ns0 ip link set dev veth0 up {
ip link add foo type vrf table 1234 local rc=$1
ip link set foo up local status=" OK "
ip addr add 172.16.1.101/24 dev veth0b
ip addr add 2401:db00::2/64 dev veth0b nodad [ $rc -ne 0 ] && status="FAIL"
ip link set veth0b master foo
printf "%-50s [%4s]\n" "$2" "$status"
} }
function attach_bpf { check_sock()
rm -rf /tmp/cgroupv2 {
mkdir -p /tmp/cgroupv2 out=$(test_cgrp2_sock)
mount -t cgroup2 none /tmp/cgroupv2 echo $out | grep -q "$1"
mkdir -p /tmp/cgroupv2/foo if [ $? -ne 0 ]; then
test_cgrp2_sock -b foo /tmp/cgroupv2/foo print_result 1 "IPv4: $2"
echo $$ >> /tmp/cgroupv2/foo/cgroup.procs echo " expected: $1"
echo " have: $out"
rc=1
else
print_result 0 "IPv4: $2"
fi
} }
function cleanup { check_sock6()
set +ex {
ip netns delete at_ns0 out=$(test_cgrp2_sock -6)
ip link del veth0 echo $out | grep -q "$1"
ip link del foo if [ $? -ne 0 ]; then
umount /tmp/cgroupv2 print_result 1 "IPv6: $2"
rm -rf /tmp/cgroupv2 echo " expected: $1"
set -ex echo " have: $out"
rc=1
else
print_result 0 "IPv6: $2"
fi
} }
function do_test { ################################################################################
ping -c1 -w1 172.16.1.100 #
ping6 -c1 -w1 2401:db00::1
cleanup()
{
echo $$ >> ${CGRP_MNT}/cgroup.procs
rmdir ${CGRP_MNT}/sockopts
} }
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
cleanup 2>/dev/null cleanup 2>/dev/null
config_device
attach_bpf mkdir -p ${CGRP_MNT}/sockopts
do_test [ $? -ne 0 ] && cleanup_and_exit 1 "Failed to create cgroup hierarchy"
cleanup
echo "*** PASS ***"
# 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