X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Faf_xdp%2Faf_xdp.h;fp=src%2Fplugins%2Faf_xdp%2Faf_xdp.h;h=91895ced23b7402df76924d74bc7e0a54a8801d6;hb=a42c41be4eed3e1ce2a42038b07ce1d3420891cd;hp=568380baa5692704c7d9ee467181022e5eaa4ff5;hpb=92a8d761c412590f5112239be4c511091b2b2d5a;p=vpp.git diff --git a/src/plugins/af_xdp/af_xdp.h b/src/plugins/af_xdp/af_xdp.h index 568380baa56..91895ced23b 100644 --- a/src/plugins/af_xdp/af_xdp.h +++ b/src/plugins/af_xdp/af_xdp.h @@ -32,7 +32,8 @@ _ (1, ERROR, "error") \ _ (2, ADMIN_UP, "admin-up") \ _ (3, LINK_UP, "link-up") \ - _ (4, ZEROCOPY, "zero-copy") + _ (4, ZEROCOPY, "zero-copy") \ + _ (5, SYSCALL_LOCK, "syscall-lock") enum { @@ -49,12 +50,20 @@ enum clib_error_free(err_); \ } +typedef enum +{ + AF_XDP_RXQ_MODE_UNKNOWN, + AF_XDP_RXQ_MODE_POLLING, + AF_XDP_RXQ_MODE_INTERRUPT, +} __clib_packed af_xdp_rxq_mode_t; + typedef struct { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); /* fields below are accessed in data-plane (hot) */ + clib_spinlock_t syscall_lock; struct xsk_ring_cons rx; struct xsk_ring_prod fq; int xsk_fd; @@ -63,7 +72,7 @@ typedef struct uword file_index; u32 queue_index; - u8 is_polling; + af_xdp_rxq_mode_t mode; } af_xdp_rxq_t; typedef struct @@ -73,6 +82,7 @@ typedef struct /* fields below are accessed in data-plane (hot) */ clib_spinlock_t lock; + clib_spinlock_t syscall_lock; struct xsk_ring_prod tx; struct xsk_ring_cons cq; int xsk_fd; @@ -101,6 +111,8 @@ typedef struct u32 dev_instance; u8 hwaddr[6]; + u8 rxq_num; + struct xsk_umem **umem; struct xsk_socket **xsk; @@ -127,12 +139,18 @@ typedef enum AF_XDP_MODE_ZERO_COPY = 2, } af_xdp_mode_t; +typedef enum +{ + AF_XDP_CREATE_FLAGS_NO_SYSCALL_LOCK = 1, +} af_xdp_create_flag_t; + typedef struct { char *linux_ifname; char *name; char *prog; af_xdp_mode_t mode; + af_xdp_create_flag_t flags; u32 rxq_size; u32 txq_size; u32 rxq_num; @@ -163,10 +181,10 @@ typedef struct u32 hw_if_index; } af_xdp_input_trace_t; -#define foreach_af_xdp_tx_func_error \ -_(NO_FREE_SLOTS, "no free tx slots") \ -_(SENDTO_REQUIRED, "sendto required") \ -_(SENDTO_FAILURES, "sendto failures") +#define foreach_af_xdp_tx_func_error \ + _ (NO_FREE_SLOTS, "no free tx slots") \ + _ (SYSCALL_REQUIRED, "syscall required") \ + _ (SYSCALL_FAILURES, "syscall failures") typedef enum {