0001
0002
0003
0004
0005 set -eu
0006
0007 wait_for_ip()
0008 {
0009 local _i
0010 echo -n "Wait for testing link-local IP to become available "
0011 for _i in $(seq ${MAX_PING_TRIES}); do
0012 echo -n "."
0013 if $PING6 -c 1 -W 1 ff02::1%${TEST_IF} >/dev/null 2>&1; then
0014 echo " OK"
0015 return
0016 fi
0017 sleep 1
0018 done
0019 echo 1>&2 "ERROR: Timeout waiting for test IP to become available."
0020 exit 1
0021 }
0022
0023 setup()
0024 {
0025
0026 ip link add dev ${TEST_IF} type veth peer name ${TEST_IF_PEER}
0027 ip link set ${TEST_IF} up
0028 ip link set ${TEST_IF_PEER} up
0029
0030 wait_for_ip
0031
0032 tc qdisc add dev ${TEST_IF} clsact
0033 tc filter add dev ${TEST_IF} egress bpf obj ${BPF_PROG_OBJ} \
0034 sec ${BPF_PROG_SECTION} da
0035
0036 BPF_PROG_ID=$(tc filter show dev ${TEST_IF} egress | \
0037 awk '/ id / {sub(/.* id /, "", $0); print($1)}')
0038 }
0039
0040 cleanup()
0041 {
0042 ip link del ${TEST_IF} 2>/dev/null || :
0043 ip link del ${TEST_IF_PEER} 2>/dev/null || :
0044 }
0045
0046 main()
0047 {
0048 trap cleanup EXIT 2 3 6 15
0049 setup
0050 ${PROG} ${TEST_IF} ${BPF_PROG_ID}
0051 }
0052
0053 DIR=$(dirname $0)
0054 TEST_IF="test_cgid_1"
0055 TEST_IF_PEER="test_cgid_2"
0056 MAX_PING_TRIES=5
0057 BPF_PROG_OBJ="${DIR}/test_skb_cgroup_id_kern.o"
0058 BPF_PROG_SECTION="cgroup_id_logger"
0059 BPF_PROG_ID=0
0060 PROG="${DIR}/test_skb_cgroup_id_user"
0061 type ping6 >/dev/null 2>&1 && PING6="ping6" || PING6="ping -6"
0062
0063 main