Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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 bool check_consumer;
99};
100
101struct pkt {
102 int offset;
103 u32 len;
104 u32 pkt_nb;
105 bool valid;
106 u16 options;
107};
108
109struct pkt_stream {
110 u32 nb_pkts;
111 u32 current_pkt_nb;
112 struct pkt *pkts;
113 u32 max_pkt_len;
114 u32 nb_rx_pkts;
115 u32 nb_valid_entries;
116 bool verbatim;
117};
118
119struct set_hw_ring {
120 u32 default_tx;
121 u32 default_rx;
122};
123
124struct ifobject;
125struct test_spec;
126typedef int (*validation_func_t)(struct ifobject *ifobj);
127typedef void *(*thread_func_t)(void *arg);
128typedef int (*test_func_t)(struct test_spec *test);
129
130struct ifobject {
131 char ifname[MAX_INTERFACE_NAME_CHARS];
132 struct xsk_socket_info *xsk;
133 struct xsk_socket_info *xsk_arr;
134 struct xsk_umem_info *umem;
135 thread_func_t func_ptr;
136 validation_func_t validation_func;
137 struct xsk_xdp_progs *xdp_progs;
138 struct bpf_map *xskmap;
139 struct bpf_program *xdp_prog;
140 struct ethtool_ringparam ring;
141 struct set_hw_ring set_ring;
142 enum test_mode mode;
143 int ifindex;
144 int mtu;
145 u32 bind_flags;
146 u32 xdp_zc_max_segs;
147 bool tx_on;
148 bool rx_on;
149 bool use_poll;
150 bool busy_poll;
151 bool use_fill_ring;
152 bool release_rx;
153 bool shared_umem;
154 bool use_metadata;
155 bool unaligned_supp;
156 bool multi_buff_supp;
157 bool multi_buff_zc_supp;
158 bool hw_ring_size_supp;
159};
160
161struct test_spec {
162 struct ifobject *ifobj_tx;
163 struct ifobject *ifobj_rx;
164 struct pkt_stream *tx_pkt_stream_default;
165 struct pkt_stream *rx_pkt_stream_default;
166 struct bpf_program *xdp_prog_rx;
167 struct bpf_program *xdp_prog_tx;
168 struct bpf_map *xskmap_rx;
169 struct bpf_map *xskmap_tx;
170 test_func_t test_func;
171 int mtu;
172 u16 total_steps;
173 u16 current_step;
174 u16 nb_sockets;
175 bool fail;
176 bool set_ring;
177 bool adjust_tail;
178 bool adjust_tail_support;
179 enum test_mode mode;
180 char name[MAX_TEST_NAME_SIZE];
181};
182
183pthread_barrier_t barr;
184pthread_mutex_t pacing_mutex = PTHREAD_MUTEX_INITIALIZER;
185
186int pkts_in_flight;
187
188static const u8 g_mac[ETH_ALEN] = {0x55, 0x44, 0x33, 0x22, 0x11, 0x00};
189
190#endif /* XSKXCEIVER_H_ */