Commit 9103a859 authored by Weqaar Janjua's avatar Weqaar Janjua Committed by Daniel Borkmann

selftests/bpf: Xsk selftests - DRV POLL, NOPOLL

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: default avatarWeqaar Janjua <weqaar.a.janjua@intel.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Tested-by: default avatarYonghong Song <yhs@fb.com>
Acked-by: default avatarBjörn Töpel <bjorn.topel@intel.com>
Link: https://lore.kernel.org/bpf/20201207215333.11586-4-weqaar.a.janjua@intel.com
parent facb7cb2
...@@ -173,6 +173,30 @@ retval=$? ...@@ -173,6 +173,30 @@ retval=$?
test_status $retval "${TEST_NAME}" test_status $retval "${TEST_NAME}"
statusList+=($retval) statusList+=($retval)
### TEST 4
TEST_NAME="DRV NOPOLL"
vethXDPnative ${VETH0} ${VETH1} ${NS1}
params=("-N")
execxdpxceiver params
retval=$?
test_status $retval "${TEST_NAME}"
statusList+=($retval)
### TEST 5
TEST_NAME="DRV POLL"
vethXDPnative ${VETH0} ${VETH1} ${NS1}
params=("-N" "-p")
execxdpxceiver params
retval=$?
test_status $retval "${TEST_NAME}"
statusList+=($retval)
## END TESTS ## END TESTS
cleanup_exit ${VETH0} ${VETH1} ${NS1} cleanup_exit ${VETH0} ${VETH1} ${NS1}
......
...@@ -27,7 +27,16 @@ ...@@ -27,7 +27,16 @@
* a. nopoll - soft-irq processing * a. nopoll - soft-irq processing
* b. poll - using poll() syscall * 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: * Flow:
* ----- * -----
...@@ -88,7 +97,7 @@ static void __exit_with_error(int error, const char *file, const char *func, int ...@@ -88,7 +97,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 exit_with_error(error) __exit_with_error(error, __FILE__, __func__, __LINE__)
#define print_ksft_result(void)\ #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) static void pthread_init_mutex(void)
{ {
...@@ -311,6 +320,7 @@ static struct option long_options[] = { ...@@ -311,6 +320,7 @@ static struct option long_options[] = {
{"queue", optional_argument, 0, 'q'}, {"queue", optional_argument, 0, 'q'},
{"poll", no_argument, 0, 'p'}, {"poll", no_argument, 0, 'p'},
{"xdp-skb", no_argument, 0, 'S'}, {"xdp-skb", no_argument, 0, 'S'},
{"xdp-native", no_argument, 0, 'N'},
{"copy", no_argument, 0, 'c'}, {"copy", no_argument, 0, 'c'},
{"debug", optional_argument, 0, 'D'}, {"debug", optional_argument, 0, 'D'},
{"tx-pkt-count", optional_argument, 0, 'C'}, {"tx-pkt-count", optional_argument, 0, 'C'},
...@@ -326,6 +336,7 @@ static void usage(const char *prog) ...@@ -326,6 +336,7 @@ static void usage(const char *prog)
" -q, --queue=n Use queue n (default 0)\n" " -q, --queue=n Use queue n (default 0)\n"
" -p, --poll Use poll syscall\n" " -p, --poll Use poll syscall\n"
" -S, --xdp-skb=n Use XDP SKB mode\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" " -c, --copy Force copy mode\n"
" -D, --debug Debug mode - dump packets L2 - L5\n" " -D, --debug Debug mode - dump packets L2 - L5\n"
" -C, --tx-pkt-count=n Number of packets to send\n"; " -C, --tx-pkt-count=n Number of packets to send\n";
...@@ -417,7 +428,7 @@ static void parse_command_line(int argc, char **argv) ...@@ -417,7 +428,7 @@ static void parse_command_line(int argc, char **argv)
opterr = 0; opterr = 0;
for (;;) { 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) if (c == -1)
break; break;
...@@ -448,6 +459,11 @@ static void parse_command_line(int argc, char **argv) ...@@ -448,6 +459,11 @@ static void parse_command_line(int argc, char **argv)
opt_xdp_bind_flags |= XDP_COPY; opt_xdp_bind_flags |= XDP_COPY;
uut = ORDER_CONTENT_VALIDATE_XDP_SKB; uut = ORDER_CONTENT_VALIDATE_XDP_SKB;
break; 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': case 'c':
opt_xdp_bind_flags |= XDP_COPY; opt_xdp_bind_flags |= XDP_COPY;
break; break;
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#define SOCK_RECONF_CTR 10 #define SOCK_RECONF_CTR 10
#define BATCH_SIZE 64 #define BATCH_SIZE 64
#define POLL_TMOUT 1000 #define POLL_TMOUT 1000
#define NEED_WAKEUP 1 #define NEED_WAKEUP true
typedef __u32 u32; typedef __u32 u32;
typedef __u16 u16; typedef __u16 u16;
...@@ -46,6 +46,7 @@ typedef __u8 u8; ...@@ -46,6 +46,7 @@ typedef __u8 u8;
enum TESTS { enum TESTS {
ORDER_CONTENT_VALIDATE_XDP_SKB = 0, ORDER_CONTENT_VALIDATE_XDP_SKB = 0,
ORDER_CONTENT_VALIDATE_XDP_DRV = 1,
}; };
u8 uut; u8 uut;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment