|
@@ -1,47 +1,133 @@
|
|
|
-#!/bin/bash
|
|
|
-
|
|
|
-function config_device {
|
|
|
- ip netns add at_ns0
|
|
|
- ip link add veth0 type veth peer name veth0b
|
|
|
- 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
|
|
|
- ip netns exec at_ns0 ip link set dev veth0 up
|
|
|
- ip link add foo type vrf table 1234
|
|
|
- ip link set foo up
|
|
|
- ip addr add 172.16.1.101/24 dev veth0b
|
|
|
- ip addr add 2401:db00::2/64 dev veth0b nodad
|
|
|
- ip link set veth0b master foo
|
|
|
+#!/bin/sh
|
|
|
+
|
|
|
+# 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]\n" "$2" "$status"
|
|
|
}
|
|
|
|
|
|
-function attach_bpf {
|
|
|
- rm -rf /tmp/cgroupv2
|
|
|
- mkdir -p /tmp/cgroupv2
|
|
|
- mount -t cgroup2 none /tmp/cgroupv2
|
|
|
- mkdir -p /tmp/cgroupv2/foo
|
|
|
- test_cgrp2_sock -b foo /tmp/cgroupv2/foo
|
|
|
- echo $$ >> /tmp/cgroupv2/foo/cgroup.procs
|
|
|
+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
|
|
|
}
|
|
|
|
|
|
-function cleanup {
|
|
|
- set +ex
|
|
|
- ip netns delete at_ns0
|
|
|
- ip link del veth0
|
|
|
- ip link del foo
|
|
|
- umount /tmp/cgroupv2
|
|
|
- rm -rf /tmp/cgroupv2
|
|
|
- set -ex
|
|
|
+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
|
|
|
}
|
|
|
|
|
|
-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
|
|
|
-config_device
|
|
|
-attach_bpf
|
|
|
-do_test
|
|
|
-cleanup
|
|
|
-echo "*** PASS ***"
|
|
|
+
|
|
|
+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
|