Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.16 162 lines 3.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 2 * Copyright(c) 2020 Intel Corporation. 3 */ 4 5#ifndef XDPXCEIVER_H_ 6#define XDPXCEIVER_H_ 7 8#ifndef SOL_XDP 9#define SOL_XDP 283 10#endif 11 12#ifndef AF_XDP 13#define AF_XDP 44 14#endif 15 16#ifndef PF_XDP 17#define PF_XDP AF_XDP 18#endif 19 20#define MAX_INTERFACES 2 21#define MAX_INTERFACE_NAME_CHARS 7 22#define MAX_INTERFACES_NAMESPACE_CHARS 10 23#define MAX_SOCKETS 2 24#define MAX_TEST_NAME_SIZE 32 25#define MAX_TEARDOWN_ITER 10 26#define PKT_HDR_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \ 27 sizeof(struct udphdr)) 28#define MIN_PKT_SIZE 64 29#define ETH_FCS_SIZE 4 30#define PKT_SIZE (MIN_PKT_SIZE - ETH_FCS_SIZE) 31#define IP_PKT_SIZE (PKT_SIZE - sizeof(struct ethhdr)) 32#define IP_PKT_VER 0x4 33#define IP_PKT_TOS 0x9 34#define UDP_PKT_SIZE (IP_PKT_SIZE - sizeof(struct iphdr)) 35#define UDP_PKT_DATA_SIZE (UDP_PKT_SIZE - sizeof(struct udphdr)) 36#define USLEEP_MAX 10000 37#define SOCK_RECONF_CTR 10 38#define BATCH_SIZE 64 39#define POLL_TMOUT 1000 40#define DEFAULT_PKT_CNT (4 * 1024) 41#define DEFAULT_UMEM_BUFFERS (DEFAULT_PKT_CNT / 4) 42#define UMEM_SIZE (DEFAULT_UMEM_BUFFERS * XSK_UMEM__DEFAULT_FRAME_SIZE) 43#define RX_FULL_RXQSIZE 32 44#define UMEM_HEADROOM_TEST_SIZE 128 45#define XSK_UMEM__INVALID_FRAME_SIZE (XSK_UMEM__DEFAULT_FRAME_SIZE + 1) 46 47#define print_verbose(x...) do { if (opt_verbose) ksft_print_msg(x); } while (0) 48 49enum test_mode { 50 TEST_MODE_SKB, 51 TEST_MODE_DRV, 52 TEST_MODE_MAX 53}; 54 55enum test_type { 56 TEST_TYPE_RUN_TO_COMPLETION, 57 TEST_TYPE_RUN_TO_COMPLETION_2K_FRAME, 58 TEST_TYPE_RUN_TO_COMPLETION_SINGLE_PKT, 59 TEST_TYPE_POLL, 60 TEST_TYPE_UNALIGNED, 61 TEST_TYPE_ALIGNED_INV_DESC, 62 TEST_TYPE_ALIGNED_INV_DESC_2K_FRAME, 63 TEST_TYPE_UNALIGNED_INV_DESC, 64 TEST_TYPE_HEADROOM, 65 TEST_TYPE_TEARDOWN, 66 TEST_TYPE_BIDI, 67 TEST_TYPE_STATS, 68 TEST_TYPE_BPF_RES, 69 TEST_TYPE_MAX 70}; 71 72enum stat_test_type { 73 STAT_TEST_RX_DROPPED, 74 STAT_TEST_TX_INVALID, 75 STAT_TEST_RX_FULL, 76 STAT_TEST_RX_FILL_EMPTY, 77 STAT_TEST_TYPE_MAX 78}; 79 80static bool opt_pkt_dump; 81static int test_type; 82 83static bool opt_verbose; 84static int stat_test_type; 85 86struct xsk_umem_info { 87 struct xsk_ring_prod fq; 88 struct xsk_ring_cons cq; 89 struct xsk_umem *umem; 90 u32 num_frames; 91 u32 frame_headroom; 92 void *buffer; 93 u32 frame_size; 94 bool unaligned_mode; 95}; 96 97struct xsk_socket_info { 98 struct xsk_ring_cons rx; 99 struct xsk_ring_prod tx; 100 struct xsk_umem_info *umem; 101 struct xsk_socket *xsk; 102 u32 outstanding_tx; 103 u32 rxqsize; 104}; 105 106struct pkt { 107 u64 addr; 108 u32 len; 109 u32 payload; 110 bool valid; 111}; 112 113struct pkt_stream { 114 u32 nb_pkts; 115 u32 rx_pkt_nb; 116 struct pkt *pkts; 117 bool use_addr_for_fill; 118}; 119 120typedef void *(*thread_func_t)(void *arg); 121 122struct ifobject { 123 char ifname[MAX_INTERFACE_NAME_CHARS]; 124 char nsname[MAX_INTERFACES_NAMESPACE_CHARS]; 125 struct xsk_socket_info *xsk; 126 struct xsk_socket_info *xsk_arr; 127 struct xsk_umem_info *umem; 128 struct xsk_umem_info *umem_arr; 129 thread_func_t func_ptr; 130 struct pkt_stream *pkt_stream; 131 int ns_fd; 132 u32 dst_ip; 133 u32 src_ip; 134 u32 xdp_flags; 135 u32 bind_flags; 136 u16 src_port; 137 u16 dst_port; 138 bool tx_on; 139 bool rx_on; 140 bool use_poll; 141 bool pacing_on; 142 u8 dst_mac[ETH_ALEN]; 143 u8 src_mac[ETH_ALEN]; 144}; 145 146struct test_spec { 147 struct ifobject *ifobj_tx; 148 struct ifobject *ifobj_rx; 149 struct pkt_stream *pkt_stream_default; 150 u16 total_steps; 151 u16 current_step; 152 u16 nb_sockets; 153 char name[MAX_TEST_NAME_SIZE]; 154}; 155 156pthread_barrier_t barr; 157pthread_mutex_t pacing_mutex = PTHREAD_MUTEX_INITIALIZER; 158pthread_cond_t pacing_cond = PTHREAD_COND_INITIALIZER; 159 160u32 pkts_in_flight; 161 162#endif /* XDPXCEIVER_H */