@@ -8,7 +8,9 @@ XSKOBJ := xdpxceiver
TEST_PROGS := TEST_PREREQUISITES.sh \
TEST_XSK_SKB_NOPOLL.sh \
- TEST_XSK_SKB_POLL.sh
+ TEST_XSK_SKB_POLL.sh \
+ TEST_XSK_DRV_NOPOLL.sh \
+ TEST_XSK_DRV_POLL.sh
TEST_FILES := prereqs.sh xskenv.sh
TEST_TRANSIENT_FILES := veth.spec
TEST_PROGS_EXTENDED := $(XSKDIR)/$(XSKOBJ)
@@ -64,7 +64,16 @@ The following tests are run:
a. nopoll - soft-irq processing
b. poll - using poll() syscall
-Total tests: 2.
+2. AF_XDP DRV/Native mode
+ Works on any netdevice with XDP_REDIRECT support, driver dependent. Processes
+ packets before SKB allocation. Provides better performance than SKB. Driver
+ hook available just after DMA of buffer descriptor.
+ a. nopoll
+ b. poll
+ * Only copy mode is supported because veth does not currently support
+ zero-copy mode
+
+Total tests: 4.
Flow:
* Single process spawns two threads: Tx and Rx
new file mode 100755
@@ -0,0 +1,18 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright(c) 2020 Intel Corporation.
+
+. prereqs.sh
+. xskenv.sh
+
+TEST_NAME="DRV NOPOLL"
+
+vethXDPnative ${VETH0} ${VETH1} ${NS1}
+
+params=("-N")
+execxdpxceiver params
+
+retval=$?
+test_status $retval "${TEST_NAME}"
+
+test_exit $retval 0
new file mode 100755
@@ -0,0 +1,21 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright(c) 2020 Intel Corporation.
+
+. prereqs.sh
+. xskenv.sh
+
+TEST_NAME="DRV POLL"
+
+vethXDPnative ${VETH0} ${VETH1} ${NS1}
+
+params=("-N" "-p")
+execxdpxceiver params
+
+retval=$?
+test_status $retval "${TEST_NAME}"
+
+# Must be called in the last test to execute
+cleanup_exit ${VETH0} ${VETH1} ${NS1}
+
+test_exit $retval 0
@@ -15,7 +15,4 @@ execxdpxceiver params
retval=$?
test_status $retval "${TEST_NAME}"
-# Must be called in the last test to execute
-cleanup_exit ${VETH0} ${VETH1} ${NS1}
-
test_exit $retval 0
@@ -49,7 +49,7 @@ static void __exit_with_error(int error, const char *file, const char *func, int
#define exit_with_error(error) __exit_with_error(error, __FILE__, __func__, __LINE__)
#define print_ksft_result(void)\
- (ksft_test_result_pass("PASS: %s %s\n", uut ? "" : "SKB", opt_poll ? "POLL" : "NOPOLL"))
+ (ksft_test_result_pass("PASS: %s %s\n", uut ? "DRV" : "SKB", opt_poll ? "POLL" : "NOPOLL"))
static void pthread_init_mutex(void)
{
@@ -272,6 +272,7 @@ static struct option long_options[] = {
{"queue", optional_argument, 0, 'q'},
{"poll", no_argument, 0, 'p'},
{"xdp-skb", no_argument, 0, 'S'},
+ {"xdp-native", no_argument, 0, 'N'},
{"copy", no_argument, 0, 'c'},
{"debug", optional_argument, 0, 'D'},
{"tx-pkt-count", optional_argument, 0, 'C'},
@@ -287,6 +288,7 @@ static void usage(const char *prog)
" -q, --queue=n Use queue n (default 0)\n"
" -p, --poll Use poll syscall\n"
" -S, --xdp-skb=n Use XDP SKB mode\n"
+ " -N, --xdp-native=n Enforce XDP DRV (native) mode\n"
" -c, --copy Force copy mode\n"
" -D, --debug Debug mode - dump packets L2 - L5\n"
" -C, --tx-pkt-count=n Number of packets to send\n";
@@ -378,7 +380,7 @@ static void parse_command_line(int argc, char **argv)
opterr = 0;
for (;;) {
- c = getopt_long(argc, argv, "i:q:pScDC:", long_options, &option_index);
+ c = getopt_long(argc, argv, "i:q:pSNcDC:", long_options, &option_index);
if (c == -1)
break;
@@ -408,6 +410,11 @@ static void parse_command_line(int argc, char **argv)
opt_xdp_bind_flags |= XDP_COPY;
uut = ORDER_CONTENT_VALIDATE_XDP_SKB;
break;
+ case 'N':
+ opt_xdp_flags |= XDP_FLAGS_DRV_MODE;
+ opt_xdp_bind_flags |= XDP_COPY;
+ uut = ORDER_CONTENT_VALIDATE_XDP_DRV;
+ break;
case 'c':
opt_xdp_bind_flags |= XDP_COPY;
break;
@@ -45,6 +45,7 @@ typedef __u8 u8;
enum TESTS {
ORDER_CONTENT_VALIDATE_XDP_SKB = 0,
+ ORDER_CONTENT_VALIDATE_XDP_DRV = 1,
};
u8 uut;
Adds following tests: 2. AF_XDP DRV/Native mode Works on any netdevice with XDP_REDIRECT support, driver dependent. Processes packets before SKB allocation. Provides better performance than SKB. Driver hook available just after DMA of buffer descriptor. a. nopoll b. poll * Only copy mode is supported because veth does not currently support zero-copy mode Signed-off-by: Weqaar Janjua <weqaar.a.janjua@intel.com> --- tools/testing/selftests/xsk/Makefile | 4 +++- tools/testing/selftests/xsk/README | 11 +++++++++- .../selftests/xsk/TEST_XSK_DRV_NOPOLL.sh | 18 ++++++++++++++++ .../selftests/xsk/TEST_XSK_DRV_POLL.sh | 21 +++++++++++++++++++ .../selftests/xsk/TEST_XSK_SKB_POLL.sh | 3 --- .../selftests/xsk/xdpprogs/xdpxceiver.c | 11 ++++++++-- .../selftests/xsk/xdpprogs/xdpxceiver.h | 1 + 7 files changed, 62 insertions(+), 7 deletions(-) create mode 100755 tools/testing/selftests/xsk/TEST_XSK_DRV_NOPOLL.sh create mode 100755 tools/testing/selftests/xsk/TEST_XSK_DRV_POLL.sh