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