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.7-rc1 176 lines 3.8 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#include <limits.h> 9 10#include "xsk_xdp_progs.skel.h" 11#include "xsk_xdp_common.h" 12 13#ifndef SOL_XDP 14#define SOL_XDP 283 15#endif 16 17#ifndef AF_XDP 18#define AF_XDP 44 19#endif 20 21#ifndef PF_XDP 22#define PF_XDP AF_XDP 23#endif 24 25#ifndef SO_BUSY_POLL_BUDGET 26#define SO_BUSY_POLL_BUDGET 70 27#endif 28 29#ifndef SO_PREFER_BUSY_POLL 30#define SO_PREFER_BUSY_POLL 69 31#endif 32 33#define TEST_PASS 0 34#define TEST_FAILURE -1 35#define TEST_CONTINUE 1 36#define TEST_SKIP 2 37#define MAX_INTERFACES 2 38#define MAX_INTERFACE_NAME_CHARS 16 39#define MAX_TEST_NAME_SIZE 48 40#define MAX_TEARDOWN_ITER 10 41#define PKT_HDR_SIZE (sizeof(struct ethhdr) + 2) /* Just to align the data in the packet */ 42#define MIN_PKT_SIZE 64 43#define MAX_ETH_PKT_SIZE 1518 44#define MAX_ETH_JUMBO_SIZE 9000 45#define USLEEP_MAX 10000 46#define SOCK_RECONF_CTR 10 47#define BATCH_SIZE 64 48#define POLL_TMOUT 1000 49#define THREAD_TMOUT 3 50#define DEFAULT_PKT_CNT (4 * 1024) 51#define DEFAULT_UMEM_BUFFERS (DEFAULT_PKT_CNT / 4) 52#define RX_FULL_RXQSIZE 32 53#define UMEM_HEADROOM_TEST_SIZE 128 54#define XSK_UMEM__INVALID_FRAME_SIZE (MAX_ETH_JUMBO_SIZE + 1) 55#define XSK_UMEM__LARGE_FRAME_SIZE (3 * 1024) 56#define XSK_UMEM__MAX_FRAME_SIZE (4 * 1024) 57#define XSK_DESC__INVALID_OPTION (0xffff) 58#define XSK_DESC__MAX_SKB_FRAGS 18 59#define HUGEPAGE_SIZE (2 * 1024 * 1024) 60#define PKT_DUMP_NB_TO_PRINT 16 61#define RUN_ALL_TESTS UINT_MAX 62#define NUM_MAC_ADDRESSES 4 63 64#define print_verbose(x...) do { if (opt_verbose) ksft_print_msg(x); } while (0) 65 66enum test_mode { 67 TEST_MODE_SKB, 68 TEST_MODE_DRV, 69 TEST_MODE_ZC, 70 TEST_MODE_ALL 71}; 72 73struct xsk_umem_info { 74 struct xsk_ring_prod fq; 75 struct xsk_ring_cons cq; 76 struct xsk_umem *umem; 77 u64 next_buffer; 78 u32 num_frames; 79 u32 frame_headroom; 80 void *buffer; 81 u32 frame_size; 82 u32 base_addr; 83 bool unaligned_mode; 84}; 85 86struct xsk_socket_info { 87 struct xsk_ring_cons rx; 88 struct xsk_ring_prod tx; 89 struct xsk_umem_info *umem; 90 struct xsk_socket *xsk; 91 struct pkt_stream *pkt_stream; 92 u32 outstanding_tx; 93 u32 rxqsize; 94 u8 dst_mac[ETH_ALEN]; 95 u8 src_mac[ETH_ALEN]; 96}; 97 98struct pkt { 99 int offset; 100 u32 len; 101 u32 pkt_nb; 102 bool valid; 103 u16 options; 104}; 105 106struct pkt_stream { 107 u32 nb_pkts; 108 u32 current_pkt_nb; 109 struct pkt *pkts; 110 u32 max_pkt_len; 111 u32 nb_rx_pkts; 112 u32 nb_valid_entries; 113 bool verbatim; 114}; 115 116struct ifobject; 117struct test_spec; 118typedef int (*validation_func_t)(struct ifobject *ifobj); 119typedef void *(*thread_func_t)(void *arg); 120typedef int (*test_func_t)(struct test_spec *test); 121 122struct ifobject { 123 char ifname[MAX_INTERFACE_NAME_CHARS]; 124 struct xsk_socket_info *xsk; 125 struct xsk_socket_info *xsk_arr; 126 struct xsk_umem_info *umem; 127 thread_func_t func_ptr; 128 validation_func_t validation_func; 129 struct xsk_xdp_progs *xdp_progs; 130 struct bpf_map *xskmap; 131 struct bpf_program *xdp_prog; 132 enum test_mode mode; 133 int ifindex; 134 int mtu; 135 u32 bind_flags; 136 u32 xdp_zc_max_segs; 137 bool tx_on; 138 bool rx_on; 139 bool use_poll; 140 bool busy_poll; 141 bool use_fill_ring; 142 bool release_rx; 143 bool shared_umem; 144 bool use_metadata; 145 bool unaligned_supp; 146 bool multi_buff_supp; 147 bool multi_buff_zc_supp; 148}; 149 150struct test_spec { 151 struct ifobject *ifobj_tx; 152 struct ifobject *ifobj_rx; 153 struct pkt_stream *tx_pkt_stream_default; 154 struct pkt_stream *rx_pkt_stream_default; 155 struct bpf_program *xdp_prog_rx; 156 struct bpf_program *xdp_prog_tx; 157 struct bpf_map *xskmap_rx; 158 struct bpf_map *xskmap_tx; 159 test_func_t test_func; 160 int mtu; 161 u16 total_steps; 162 u16 current_step; 163 u16 nb_sockets; 164 bool fail; 165 enum test_mode mode; 166 char name[MAX_TEST_NAME_SIZE]; 167}; 168 169pthread_barrier_t barr; 170pthread_mutex_t pacing_mutex = PTHREAD_MUTEX_INITIALIZER; 171 172int pkts_in_flight; 173 174static const u8 g_mac[ETH_ALEN] = {0x55, 0x44, 0x33, 0x22, 0x11, 0x00}; 175 176#endif /* XSKXCEIVER_H_ */