2020-12-07 21:53:30 +00:00
/* SPDX-License-Identifier: GPL-2.0
* Copyright ( c ) 2020 Intel Corporation .
*/
# ifndef XDPXCEIVER_H_
# define XDPXCEIVER_H_
# ifndef SOL_XDP
# define SOL_XDP 283
# endif
# ifndef AF_XDP
# define AF_XDP 44
# endif
# ifndef PF_XDP
# define PF_XDP AF_XDP
# endif
# define MAX_INTERFACES 2
# define MAX_INTERFACE_NAME_CHARS 7
# define MAX_INTERFACES_NAMESPACE_CHARS 10
# define MAX_SOCKS 1
2020-12-07 21:53:32 +00:00
# define MAX_TEARDOWN_ITER 10
2020-12-07 21:53:33 +00:00
# define MAX_BIDI_ITER 2
2021-03-30 00:43:13 +02:00
# define MAX_BPF_ITER 2
2020-12-07 21:53:30 +00:00
# define PKT_HDR_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \
sizeof ( struct udphdr ) )
# define MIN_PKT_SIZE 64
# define ETH_FCS_SIZE 4
# define PKT_SIZE (MIN_PKT_SIZE - ETH_FCS_SIZE)
# define IP_PKT_SIZE (PKT_SIZE - sizeof(struct ethhdr))
# define IP_PKT_VER 0x4
# define IP_PKT_TOS 0x9
# define UDP_PKT_SIZE (IP_PKT_SIZE - sizeof(struct iphdr))
# define UDP_PKT_DATA_SIZE (UDP_PKT_SIZE - sizeof(struct udphdr))
2021-08-25 11:37:11 +02:00
# define USLEEP_MAX 10000
2020-12-07 21:53:30 +00:00
# define SOCK_RECONF_CTR 10
2021-08-25 11:37:17 +02:00
# define BATCH_SIZE 8
2020-12-07 21:53:30 +00:00
# define POLL_TMOUT 1000
2021-08-25 11:37:08 +02:00
# define DEFAULT_PKT_CNT (4 * 1024)
2021-02-23 16:23:04 +00:00
# define RX_FULL_RXQSIZE 32
2020-12-07 21:53:30 +00:00
2021-02-23 16:23:01 +00:00
# define print_verbose(x...) do { if (opt_verbose) ksft_print_msg(x); } while (0)
2021-02-23 16:23:03 +00:00
enum TEST_MODES {
TEST_MODE_UNCONFIGURED = - 1 ,
TEST_MODE_SKB ,
TEST_MODE_DRV ,
TEST_MODE_MAX
2020-12-07 21:53:30 +00:00
} ;
2021-02-23 16:23:03 +00:00
enum TEST_TYPES {
TEST_TYPE_NOPOLL ,
TEST_TYPE_POLL ,
TEST_TYPE_TEARDOWN ,
TEST_TYPE_BIDI ,
2021-02-23 16:23:04 +00:00
TEST_TYPE_STATS ,
2021-03-30 00:43:13 +02:00
TEST_TYPE_BPF_RES ,
2021-02-23 16:23:03 +00:00
TEST_TYPE_MAX
} ;
2021-02-23 16:23:04 +00:00
enum STAT_TEST_TYPES {
STAT_TEST_RX_DROPPED ,
STAT_TEST_TX_INVALID ,
STAT_TEST_RX_FULL ,
STAT_TEST_RX_FILL_EMPTY ,
STAT_TEST_TYPE_MAX
} ;
2021-02-23 16:23:03 +00:00
static int configured_mode = TEST_MODE_UNCONFIGURED ;
2021-02-23 16:23:01 +00:00
static u8 debug_pkt_dump ;
2021-08-25 11:37:13 +02:00
static u32 num_frames = DEFAULT_PKT_CNT / 4 ;
2021-03-30 00:43:13 +02:00
static bool second_step ;
2021-02-23 16:23:03 +00:00
static int test_type ;
2020-12-07 21:53:30 +00:00
2021-08-25 11:37:08 +02:00
static u32 opt_pkt_count = DEFAULT_PKT_CNT ;
2021-02-23 16:23:01 +00:00
static u8 opt_verbose ;
2021-02-23 16:23:03 +00:00
static u32 xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST ;
static u32 xdp_bind_flags = XDP_USE_NEED_WAKEUP | XDP_COPY ;
2020-12-07 21:53:30 +00:00
static u32 pkt_counter ;
static int sigvar ;
2021-02-23 16:23:04 +00:00
static int stat_test_type ;
static u32 rxqsize ;
static u32 frame_headroom ;
2020-12-07 21:53:30 +00:00
struct xsk_umem_info {
struct xsk_ring_prod fq ;
struct xsk_ring_cons cq ;
struct xsk_umem * umem ;
void * buffer ;
} ;
struct xsk_socket_info {
struct xsk_ring_cons rx ;
struct xsk_ring_prod tx ;
struct xsk_umem_info * umem ;
struct xsk_socket * xsk ;
u32 outstanding_tx ;
} ;
struct flow_vector {
enum fvector {
tx ,
rx ,
} vector ;
} ;
struct ifobject {
char ifname [ MAX_INTERFACE_NAME_CHARS ] ;
char nsname [ MAX_INTERFACES_NAMESPACE_CHARS ] ;
struct xsk_socket_info * xsk ;
2021-03-30 00:43:13 +02:00
struct xsk_socket_info * * xsk_arr ;
struct xsk_umem_info * * umem_arr ;
2020-12-07 21:53:30 +00:00
struct xsk_umem_info * umem ;
2021-03-30 00:43:10 +02:00
void * ( * func_ptr ) ( void * arg ) ;
struct flow_vector fv ;
int ns_fd ;
2020-12-07 21:53:30 +00:00
u32 dst_ip ;
u32 src_ip ;
u16 src_port ;
u16 dst_port ;
2021-03-30 00:43:10 +02:00
u8 dst_mac [ ETH_ALEN ] ;
u8 src_mac [ ETH_ALEN ] ;
2020-12-07 21:53:30 +00:00
} ;
static struct ifobject * ifdict [ MAX_INTERFACES ] ;
2021-03-30 00:43:10 +02:00
static struct ifobject * ifdict_rx ;
static struct ifobject * ifdict_tx ;
2020-12-07 21:53:30 +00:00
/*threads*/
2021-03-30 00:43:15 +02:00
pthread_barrier_t barr ;
2021-03-30 00:43:07 +02:00
pthread_t t0 , t1 ;
2020-12-07 21:53:30 +00:00
# endif /* XDPXCEIVER_H */