summaryrefslogtreecommitdiffstats
path: root/lib/libxdp/tests/test-libxdp.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libxdp/tests/test-libxdp.sh')
-rw-r--r--lib/libxdp/tests/test-libxdp.sh99
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/libxdp/tests/test-libxdp.sh b/lib/libxdp/tests/test-libxdp.sh
new file mode 100644
index 0000000..90fc44c
--- /dev/null
+++ b/lib/libxdp/tests/test-libxdp.sh
@@ -0,0 +1,99 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+
+ALL_TESTS="test_link_so test_link_a test_old_dispatcher test_xdp_frags test_xsk_prog_refcnt_bpffs test_xsk_prog_refcnt_legacy"
+
+TESTS_DIR=$(dirname "${BASH_SOURCE[0]}")
+
+test_link_so()
+{
+ TMPDIR=$(mktemp --tmpdir -d libxdp-test.XXXXXX)
+ cat >$TMPDIR/libxdptest.c <<EOF
+#include <xdp/libxdp.h>
+int main(int argc, char **argv) {
+ (void) argc; (void) argv;
+ (void) xdp_program__open_file("filename", "section_name", NULL);
+ return 0;
+}
+EOF
+ $CC -o $TMPDIR/libxdptest $TMPDIR/libxdptest.c $CFLAGS $CPPFLAGS -lxdp $LDLIBS 2>&1
+ retval=$?
+ rm -rf "$TMPDIR"
+ return $retval
+}
+
+test_link_a()
+{
+ TMPDIR=$(mktemp --tmpdir -d libxdp-test.XXXXXX)
+ cat >$TMPDIR/libxdptest.c <<EOF
+#include <xdp/libxdp.h>
+int main(int argc, char **argv) {
+ (void) argc; (void) argv;
+ (void) xdp_program__open_file("filename", "section_name", NULL);
+ return 0;
+}
+EOF
+ $CC -o $TMPDIR/libxdptest $TMPDIR/libxdptest.c $CFLAGS $CPPFLAGS -l:libxdp.a $LDLIBS 2>&1
+ retval=$?
+ rm -rf "$TMPDIR"
+ return $retval
+}
+
+test_refcnt_once()
+{
+ # We need multiple queues for this test
+ NUM_QUEUES_REQUIRED=3
+ ip link add xsk_veth0 numrxqueues $NUM_QUEUES_REQUIRED type veth peer name xsk_veth1
+ check_run $TESTS_DIR/test_xsk_refcnt xsk_veth0 2>&1
+ ip link delete xsk_veth0
+}
+
+check_mount_bpffs()
+{
+ mount | grep -q /sys/fs/bpf || mount -t bpf bpf /sys/fs/bpf/ || echo "Unable to mount /sys/fs/bpf"
+ mount | grep -q /sys/fs/bpf
+}
+
+check_unmount_bpffs()
+{
+ mount | grep -q /sys/fs/bpf && umount /sys/fs/bpf/ || echo "Unable to unmount /sys/fs/bpf"
+ ! mount | grep -q /sys/fs/bpf
+}
+
+test_xsk_prog_refcnt_bpffs()
+{
+ check_mount_bpffs && test_refcnt_once "$@"
+}
+
+test_xsk_prog_refcnt_legacy()
+{
+ check_unmount_bpffs && test_refcnt_once "$@"
+}
+
+test_xdp_frags()
+{
+ skip_if_missing_libxdp_compat
+
+ check_mount_bpffs || return 1
+ ip link add xdp_veth_big0 mtu 5000 type veth peer name xdp_veth_big1 mtu 5000
+ ip link add xdp_veth_small0 type veth peer name xdp_veth_small1
+ check_run $TESTS_DIR/test_xdp_frags xdp_veth_big0 xdp_veth_small0 2>&1
+ ip link delete xdp_veth_big0
+ ip link delete xdp_veth_small0
+}
+
+test_old_dispatcher()
+{
+ skip_if_missing_libxdp_compat
+
+ check_mount_bpffs || return 1
+ ip link add xdp_veth0 type veth peer name xdp_veth1
+ check_run $TESTS_DIR/test_dispatcher_versions xdp_veth0
+ ip link delete xdp_veth0
+}
+
+cleanup_tests()
+{
+ ip link del dev xdp_veth_big0 >/dev/null 2>&1
+ ip link del dev xdp_veth_small0 >/dev/null 2>&1
+ ip link del dev xsk_veth0 >/dev/null 2>&1
+}