brintos

brintos / linux-shallow public Read only

0
0
Text · 3.9 KiB · e46e823 Raw
188 lines · c
1/* SPDX-License-Identifier: GPL-2.02 * 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_XDP14#define SOL_XDP 28315#endif16 17#ifndef AF_XDP18#define AF_XDP 4419#endif20 21#ifndef PF_XDP22#define PF_XDP AF_XDP23#endif24 25#ifndef SO_BUSY_POLL_BUDGET26#define SO_BUSY_POLL_BUDGET 7027#endif28 29#ifndef SO_PREFER_BUSY_POLL30#define SO_PREFER_BUSY_POLL 6931#endif32 33#define TEST_PASS 034#define TEST_FAILURE -135#define TEST_CONTINUE 136#define TEST_SKIP 237#define MAX_INTERFACES 238#define MAX_INTERFACE_NAME_CHARS 1639#define MAX_TEST_NAME_SIZE 4840#define MAX_TEARDOWN_ITER 1041#define PKT_HDR_SIZE (sizeof(struct ethhdr) + 2) /* Just to align the data in the packet */42#define MIN_PKT_SIZE 6443#define MAX_ETH_PKT_SIZE 151844#define MAX_ETH_JUMBO_SIZE 900045#define USLEEP_MAX 1000046#define SOCK_RECONF_CTR 1047#define DEFAULT_BATCH_SIZE 6448#define POLL_TMOUT 100049#define THREAD_TMOUT 350#define DEFAULT_PKT_CNT (4 * 1024)51#define DEFAULT_UMEM_BUFFERS (DEFAULT_PKT_CNT / 4)52#define RX_FULL_RXQSIZE 3253#define UMEM_HEADROOM_TEST_SIZE 12854#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 HUGEPAGE_SIZE (2 * 1024 * 1024)59#define PKT_DUMP_NB_TO_PRINT 1660#define RUN_ALL_TESTS UINT_MAX61#define NUM_MAC_ADDRESSES 462 63#define print_verbose(x...) do { if (opt_verbose) ksft_print_msg(x); } while (0)64 65enum test_mode {66	TEST_MODE_SKB,67	TEST_MODE_DRV,68	TEST_MODE_ZC,69	TEST_MODE_ALL70};71 72struct xsk_umem_info {73	struct xsk_ring_prod fq;74	struct xsk_ring_cons cq;75	struct xsk_umem *umem;76	u64 next_buffer;77	u32 num_frames;78	u32 frame_headroom;79	void *buffer;80	u32 frame_size;81	u32 base_addr;82	u32 fill_size;83	u32 comp_size;84	bool unaligned_mode;85};86 87struct xsk_socket_info {88	struct xsk_ring_cons rx;89	struct xsk_ring_prod tx;90	struct xsk_umem_info *umem;91	struct xsk_socket *xsk;92	struct pkt_stream *pkt_stream;93	u32 outstanding_tx;94	u32 rxqsize;95	u32 batch_size;96	u8 dst_mac[ETH_ALEN];97	u8 src_mac[ETH_ALEN];98};99 100struct pkt {101	int offset;102	u32 len;103	u32 pkt_nb;104	bool valid;105	u16 options;106};107 108struct pkt_stream {109	u32 nb_pkts;110	u32 current_pkt_nb;111	struct pkt *pkts;112	u32 max_pkt_len;113	u32 nb_rx_pkts;114	u32 nb_valid_entries;115	bool verbatim;116};117 118struct set_hw_ring {119	u32 default_tx;120	u32 default_rx;121};122 123struct ifobject;124struct test_spec;125typedef int (*validation_func_t)(struct ifobject *ifobj);126typedef void *(*thread_func_t)(void *arg);127typedef int (*test_func_t)(struct test_spec *test);128 129struct ifobject {130	char ifname[MAX_INTERFACE_NAME_CHARS];131	struct xsk_socket_info *xsk;132	struct xsk_socket_info *xsk_arr;133	struct xsk_umem_info *umem;134	thread_func_t func_ptr;135	validation_func_t validation_func;136	struct xsk_xdp_progs *xdp_progs;137	struct bpf_map *xskmap;138	struct bpf_program *xdp_prog;139	struct ethtool_ringparam ring;140	struct set_hw_ring set_ring;141	enum test_mode mode;142	int ifindex;143	int mtu;144	u32 bind_flags;145	u32 xdp_zc_max_segs;146	bool tx_on;147	bool rx_on;148	bool use_poll;149	bool busy_poll;150	bool use_fill_ring;151	bool release_rx;152	bool shared_umem;153	bool use_metadata;154	bool unaligned_supp;155	bool multi_buff_supp;156	bool multi_buff_zc_supp;157	bool hw_ring_size_supp;158};159 160struct test_spec {161	struct ifobject *ifobj_tx;162	struct ifobject *ifobj_rx;163	struct pkt_stream *tx_pkt_stream_default;164	struct pkt_stream *rx_pkt_stream_default;165	struct bpf_program *xdp_prog_rx;166	struct bpf_program *xdp_prog_tx;167	struct bpf_map *xskmap_rx;168	struct bpf_map *xskmap_tx;169	test_func_t test_func;170	int mtu;171	u16 total_steps;172	u16 current_step;173	u16 nb_sockets;174	bool fail;175	bool set_ring;176	enum test_mode mode;177	char name[MAX_TEST_NAME_SIZE];178};179 180pthread_barrier_t barr;181pthread_mutex_t pacing_mutex = PTHREAD_MUTEX_INITIALIZER;182 183int pkts_in_flight;184 185static const u8 g_mac[ETH_ALEN] = {0x55, 0x44, 0x33, 0x22, 0x11, 0x00};186 187#endif				/* XSKXCEIVER_H_ */188