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 v6.2-rc4 181 lines 4.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 2 * Copyright(c) 2020 Intel Corporation. 3 */ 4 5#ifndef XSKXCEIVER_H_ 6#define XSKXCEIVER_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#ifndef SO_BUSY_POLL_BUDGET 21#define SO_BUSY_POLL_BUDGET 70 22#endif 23 24#ifndef SO_PREFER_BUSY_POLL 25#define SO_PREFER_BUSY_POLL 69 26#endif 27 28#define TEST_PASS 0 29#define TEST_FAILURE -1 30#define TEST_CONTINUE 1 31#define MAX_INTERFACES 2 32#define MAX_INTERFACE_NAME_CHARS 16 33#define MAX_INTERFACES_NAMESPACE_CHARS 16 34#define MAX_SOCKETS 2 35#define MAX_TEST_NAME_SIZE 32 36#define MAX_TEARDOWN_ITER 10 37#define PKT_HDR_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \ 38 sizeof(struct udphdr)) 39#define MIN_ETH_PKT_SIZE 64 40#define ETH_FCS_SIZE 4 41#define MIN_PKT_SIZE (MIN_ETH_PKT_SIZE - ETH_FCS_SIZE) 42#define PKT_SIZE (MIN_PKT_SIZE) 43#define IP_PKT_SIZE (PKT_SIZE - sizeof(struct ethhdr)) 44#define IP_PKT_VER 0x4 45#define IP_PKT_TOS 0x9 46#define UDP_PKT_SIZE (IP_PKT_SIZE - sizeof(struct iphdr)) 47#define UDP_PKT_DATA_SIZE (UDP_PKT_SIZE - sizeof(struct udphdr)) 48#define USLEEP_MAX 10000 49#define SOCK_RECONF_CTR 10 50#define BATCH_SIZE 64 51#define POLL_TMOUT 1000 52#define THREAD_TMOUT 3 53#define DEFAULT_PKT_CNT (4 * 1024) 54#define DEFAULT_UMEM_BUFFERS (DEFAULT_PKT_CNT / 4) 55#define UMEM_SIZE (DEFAULT_UMEM_BUFFERS * XSK_UMEM__DEFAULT_FRAME_SIZE) 56#define RX_FULL_RXQSIZE 32 57#define UMEM_HEADROOM_TEST_SIZE 128 58#define XSK_UMEM__INVALID_FRAME_SIZE (XSK_UMEM__DEFAULT_FRAME_SIZE + 1) 59 60#define print_verbose(x...) do { if (opt_verbose) ksft_print_msg(x); } while (0) 61 62enum test_mode { 63 TEST_MODE_SKB, 64 TEST_MODE_DRV, 65 TEST_MODE_ZC, 66 TEST_MODE_MAX 67}; 68 69enum test_type { 70 TEST_TYPE_RUN_TO_COMPLETION, 71 TEST_TYPE_RUN_TO_COMPLETION_2K_FRAME, 72 TEST_TYPE_RUN_TO_COMPLETION_SINGLE_PKT, 73 TEST_TYPE_RX_POLL, 74 TEST_TYPE_TX_POLL, 75 TEST_TYPE_POLL_RXQ_TMOUT, 76 TEST_TYPE_POLL_TXQ_TMOUT, 77 TEST_TYPE_UNALIGNED, 78 TEST_TYPE_ALIGNED_INV_DESC, 79 TEST_TYPE_ALIGNED_INV_DESC_2K_FRAME, 80 TEST_TYPE_UNALIGNED_INV_DESC, 81 TEST_TYPE_HEADROOM, 82 TEST_TYPE_TEARDOWN, 83 TEST_TYPE_BIDI, 84 TEST_TYPE_STATS_RX_DROPPED, 85 TEST_TYPE_STATS_TX_INVALID_DESCS, 86 TEST_TYPE_STATS_RX_FULL, 87 TEST_TYPE_STATS_FILL_EMPTY, 88 TEST_TYPE_BPF_RES, 89 TEST_TYPE_MAX 90}; 91 92static bool opt_pkt_dump; 93static bool opt_verbose; 94 95struct xsk_umem_info { 96 struct xsk_ring_prod fq; 97 struct xsk_ring_cons cq; 98 struct xsk_umem *umem; 99 u32 num_frames; 100 u32 frame_headroom; 101 void *buffer; 102 u32 frame_size; 103 u32 base_addr; 104 bool unaligned_mode; 105}; 106 107struct xsk_socket_info { 108 struct xsk_ring_cons rx; 109 struct xsk_ring_prod tx; 110 struct xsk_umem_info *umem; 111 struct xsk_socket *xsk; 112 u32 outstanding_tx; 113 u32 rxqsize; 114}; 115 116struct pkt { 117 u64 addr; 118 u32 len; 119 u32 payload; 120 bool valid; 121}; 122 123struct pkt_stream { 124 u32 nb_pkts; 125 u32 rx_pkt_nb; 126 struct pkt *pkts; 127 bool use_addr_for_fill; 128}; 129 130struct ifobject; 131typedef int (*validation_func_t)(struct ifobject *ifobj); 132typedef void *(*thread_func_t)(void *arg); 133 134struct ifobject { 135 char ifname[MAX_INTERFACE_NAME_CHARS]; 136 char nsname[MAX_INTERFACES_NAMESPACE_CHARS]; 137 struct xsk_socket_info *xsk; 138 struct xsk_socket_info *xsk_arr; 139 struct xsk_umem_info *umem; 140 thread_func_t func_ptr; 141 validation_func_t validation_func; 142 struct pkt_stream *pkt_stream; 143 int ns_fd; 144 int xsk_map_fd; 145 u32 dst_ip; 146 u32 src_ip; 147 u32 xdp_flags; 148 u32 bind_flags; 149 u16 src_port; 150 u16 dst_port; 151 bool tx_on; 152 bool rx_on; 153 bool use_poll; 154 bool busy_poll; 155 bool use_fill_ring; 156 bool release_rx; 157 bool shared_umem; 158 u8 dst_mac[ETH_ALEN]; 159 u8 src_mac[ETH_ALEN]; 160}; 161 162struct test_spec { 163 struct ifobject *ifobj_tx; 164 struct ifobject *ifobj_rx; 165 struct pkt_stream *tx_pkt_stream_default; 166 struct pkt_stream *rx_pkt_stream_default; 167 u16 total_steps; 168 u16 current_step; 169 u16 nb_sockets; 170 bool fail; 171 enum test_mode mode; 172 char name[MAX_TEST_NAME_SIZE]; 173}; 174 175pthread_barrier_t barr; 176pthread_mutex_t pacing_mutex = PTHREAD_MUTEX_INITIALIZER; 177pthread_cond_t pacing_cond = PTHREAD_COND_INITIALIZER; 178 179int pkts_in_flight; 180 181#endif /* XSKXCEIVER_H_ */