Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/sh
0002 # SPDX-License-Identifier: GPL-2.0
0003 # Copyright (c) 2018 Facebook
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         # Create testing interfaces not to interfere with current environment.
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