Linux Audio

Check our new training course

Loading...
v6.13.7
  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 DEFAULT_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 HUGEPAGE_SIZE (2 * 1024 * 1024)
 59#define PKT_DUMP_NB_TO_PRINT 16
 60#define RUN_ALL_TESTS UINT_MAX
 61#define NUM_MAC_ADDRESSES 4
 62
 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_ALL
 70};
 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_ */
v6.8
  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_ */