selftests/bpf: Add xdpdrv mode for test_xdp_redirect
authorHangbin Liu <liuhangbin@gmail.com>
Wed, 29 Jul 2020 08:56:58 +0000 (16:56 +0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 30 Jul 2020 22:43:49 +0000 (00:43 +0200)
This patch add xdpdrv mode for test_xdp_redirect.sh since veth has support
native mode. After update here is the test result:

  # ./test_xdp_redirect.sh
  selftests: test_xdp_redirect xdpgeneric [PASS]
  selftests: test_xdp_redirect xdpdrv [PASS]

Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Song Liu <songliubraving@fb.com>
Acked-by: William Tu <u9012063@gmail.com>
Link: https://lore.kernel.org/bpf/20200729085658.403794-1-liuhangbin@gmail.com
tools/testing/selftests/bpf/test_xdp_redirect.sh

index c4b17e0..dd80f0c 100755 (executable)
 #     | xdp forwarding |
 #     ------------------
 
-cleanup()
+ret=0
+
+setup()
 {
-       if [ "$?" = "0" ]; then
-               echo "selftests: test_xdp_redirect [PASS]";
-       else
-               echo "selftests: test_xdp_redirect [FAILED]";
-       fi
 
-       set +e
+       local xdpmode=$1
+
+       ip netns add ns1
+       ip netns add ns2
+
+       ip link add veth1 index 111 type veth peer name veth11 netns ns1
+       ip link add veth2 index 222 type veth peer name veth22 netns ns2
+
+       ip link set veth1 up
+       ip link set veth2 up
+       ip -n ns1 link set dev veth11 up
+       ip -n ns2 link set dev veth22 up
+
+       ip -n ns1 addr add 10.1.1.11/24 dev veth11
+       ip -n ns2 addr add 10.1.1.22/24 dev veth22
+}
+
+cleanup()
+{
        ip link del veth1 2> /dev/null
        ip link del veth2 2> /dev/null
        ip netns del ns1 2> /dev/null
        ip netns del ns2 2> /dev/null
 }
 
-ip link set dev lo xdpgeneric off 2>/dev/null > /dev/null
-if [ $? -ne 0 ];then
-       echo "selftests: [SKIP] Could not run test without the ip xdpgeneric support"
-       exit 0
-fi
-set -e
-
-ip netns add ns1
-ip netns add ns2
+test_xdp_redirect()
+{
+       local xdpmode=$1
 
-trap cleanup 0 2 3 6 9
+       setup
 
-ip link add veth1 index 111 type veth peer name veth11
-ip link add veth2 index 222 type veth peer name veth22
+       ip link set dev veth1 $xdpmode off &> /dev/null
+       if [ $? -ne 0 ];then
+               echo "selftests: test_xdp_redirect $xdpmode [SKIP]"
+               return 0
+       fi
 
-ip link set veth11 netns ns1
-ip link set veth22 netns ns2
+       ip -n ns1 link set veth11 $xdpmode obj xdp_dummy.o sec xdp_dummy &> /dev/null
+       ip -n ns2 link set veth22 $xdpmode obj xdp_dummy.o sec xdp_dummy &> /dev/null
+       ip link set dev veth1 $xdpmode obj test_xdp_redirect.o sec redirect_to_222 &> /dev/null
+       ip link set dev veth2 $xdpmode obj test_xdp_redirect.o sec redirect_to_111 &> /dev/null
 
-ip link set veth1 up
-ip link set veth2 up
+       ip netns exec ns1 ping -c 1 10.1.1.22 &> /dev/null
+       local ret1=$?
+       ip netns exec ns2 ping -c 1 10.1.1.11 &> /dev/null
+       local ret2=$?
 
-ip netns exec ns1 ip addr add 10.1.1.11/24 dev veth11
-ip netns exec ns2 ip addr add 10.1.1.22/24 dev veth22
+       if [ $ret1 -eq 0 -a $ret2 -eq 0 ]; then
+               echo "selftests: test_xdp_redirect $xdpmode [PASS]";
+       else
+               ret=1
+               echo "selftests: test_xdp_redirect $xdpmode [FAILED]";
+       fi
 
-ip netns exec ns1 ip link set dev veth11 up
-ip netns exec ns2 ip link set dev veth22 up
+       cleanup
+}
 
-ip link set dev veth1 xdpgeneric obj test_xdp_redirect.o sec redirect_to_222
-ip link set dev veth2 xdpgeneric obj test_xdp_redirect.o sec redirect_to_111
+set -e
+trap cleanup 2 3 6 9
 
-ip netns exec ns1 ping -c 1 10.1.1.22
-ip netns exec ns2 ping -c 1 10.1.1.11
+test_xdp_redirect xdpgeneric
+test_xdp_redirect xdpdrv
 
-exit 0
+exit $ret