FD.io VPP  v21.06-1-gbb7418cf9
Vector Packet Processing
af_xdp.h
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * Copyright (c) 2018 Cisco and/or its affiliates.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *------------------------------------------------------------------
16  */
17 
18 #ifndef _AF_XDP_H_
19 #define _AF_XDP_H_
20 
21 #include <vlib/log.h>
22 #include <vnet/interface.h>
23 #include <bpf/xsk.h>
24 
25 #define AF_XDP_NUM_RX_QUEUES_ALL ((u16)-1)
26 
27 #define af_xdp_log(lvl, dev, f, ...) \
28  vlib_log(lvl, af_xdp_main.log_class, "%v: " f, (dev)->name, ##__VA_ARGS__)
29 
30 #define foreach_af_xdp_device_flags \
31  _ (0, INITIALIZED, "initialized") \
32  _ (1, ERROR, "error") \
33  _ (2, ADMIN_UP, "admin-up") \
34  _ (3, LINK_UP, "link-up") \
35  _ (4, ZEROCOPY, "zero-copy") \
36  _ (5, SYSCALL_LOCK, "syscall-lock")
37 
38 enum
39 {
40 #define _(a, b, c) AF_XDP_DEVICE_F_##b = (1 << a),
42 #undef _
43 };
44 
45 #define af_xdp_device_error(dev, fmt, ...) \
46  if (!(dev)->error) \
47  { \
48  clib_error_t *err_ = clib_error_return_unix (0, fmt, ## __VA_ARGS__); \
49  if (!clib_atomic_bool_cmp_and_swap (&(dev)->error, 0, err_)) \
50  clib_error_free(err_); \
51  }
52 
53 typedef enum
54 {
58 } __clib_packed af_xdp_rxq_mode_t;
59 
60 typedef struct
61 {
62  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
63 
64  /* fields below are accessed in data-plane (hot) */
65 
67  struct xsk_ring_cons rx;
68  struct xsk_ring_prod fq;
69  int xsk_fd;
70 
71  /* fields below are accessed in control-plane only (cold) */
72 
75  af_xdp_rxq_mode_t mode;
76 } af_xdp_rxq_t;
77 
78 typedef struct
79 {
80  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
81 
82  /* fields below are accessed in data-plane (hot) */
83 
86  struct xsk_ring_prod tx;
87  struct xsk_ring_cons cq;
88  int xsk_fd;
89 } af_xdp_txq_t;
90 
91 typedef struct
92 {
93  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
94 
95  /* fields below are accessed in data-plane (hot) */
96 
104  u8 pool; /* buffer pool index */
106 
107  /* fields below are accessed in control-plane only (cold) */
108 
109  char *name;
112  u8 hwaddr[6];
113 
115 
116  struct xsk_umem **umem;
117  struct xsk_socket **xsk;
118 
119  struct bpf_object *bpf_obj;
120  unsigned linux_ifindex;
121 
122  /* error */
125 
126 typedef struct
127 {
131 } af_xdp_main_t;
132 
134 
135 typedef enum
136 {
140 } af_xdp_mode_t;
141 
142 typedef enum
143 {
146 
147 typedef struct
148 {
150  char *name;
151  char *prog;
157 
158  /* return */
159  int rv;
163 
166 
168 
171 
172 /* format.c */
176 
177 /* unformat.c */
179 
180 typedef struct
181 {
185 
186 #define foreach_af_xdp_tx_func_error \
187  _ (NO_FREE_SLOTS, "no free tx slots") \
188  _ (SYSCALL_REQUIRED, "syscall required") \
189  _ (SYSCALL_FAILURES, "syscall failures")
190 
191 typedef enum
192 {
193 #define _(f,s) AF_XDP_TX_ERROR_##f,
195 #undef _
198 
199 #endif /* _AF_XDP_H_ */
200 
201 /*
202  * fd.io coding-style-patch-verification: ON
203  *
204  * Local Variables:
205  * eval: (c-set-style "gnu")
206  * End:
207  */
u16 msg_id_base
Definition: af_xdp.h:130
clib_spinlock_t syscall_lock
Definition: af_xdp.h:85
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:60
af_xdp_create_flag_t
Definition: af_xdp.h:142
vnet_device_class_t af_xdp_device_class
u32 per_interface_next_index
Definition: af_xdp.h:100
format_function_t format_af_xdp_device_name
Definition: af_xdp.h:174
clib_error_t * error
Definition: af_xdp.h:123
void af_xdp_delete_if(vlib_main_t *vm, af_xdp_device_t *ad)
Definition: device.c:90
struct _vnet_device_class vnet_device_class_t
unsigned char u8
Definition: types.h:56
af_xdp_device_t * devices
Definition: af_xdp.h:128
af_xdp_rxq_t * rxqs
Definition: af_xdp.h:97
unsigned int u32
Definition: types.h:88
u8 *() format_function_t(u8 *s, va_list *args)
Definition: format.h:48
struct xsk_umem ** umem
Definition: af_xdp.h:116
vlib_log_class_t log_class
Definition: af_xdp.h:129
struct xsk_socket ** xsk
Definition: af_xdp.h:117
vlib_buffer_t * buffer_template
Definition: af_xdp.h:99
u32 vlib_log_class_t
Definition: vlib.h:52
af_xdp_main_t af_xdp_main
Definition: device.c:31
uword file_index
Definition: af_xdp.h:73
char * name
Definition: af_xdp.h:109
unsigned linux_ifindex
Definition: af_xdp.h:120
format_function_t format_af_xdp_input_trace
Definition: af_xdp.h:175
af_xdp_rxq_mode_t mode
Definition: af_xdp.h:75
af_xdp_mode_t
Definition: af_xdp.h:135
int xsk_fd
Definition: af_xdp.h:69
unsigned short u16
Definition: types.h:57
af_xdp_tx_func_error_t
Definition: af_xdp.h:191
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
uword() unformat_function_t(unformat_input_t *input, va_list *args)
Definition: format.h:225
#define foreach_af_xdp_device_flags
Definition: af_xdp.h:30
u32 dev_instance
Definition: af_xdp.h:111
void af_xdp_create_if(vlib_main_t *vm, af_xdp_create_if_args_t *args)
Definition: device.c:365
char * linux_ifname
Definition: af_xdp.h:110
unformat_function_t unformat_af_xdp_create_if_args
Definition: af_xdp.h:178
format_function_t format_af_xdp_device
Definition: af_xdp.h:173
clib_spinlock_t lock
Definition: af_xdp.h:84
void af_xdp_device_input_refill(af_xdp_device_t *ad)
Definition: input.c:347
u32 hw_if_index
Definition: af_xdp.h:102
int xsk_fd
Definition: af_xdp.h:88
struct _vlib_node_registration vlib_node_registration_t
#define foreach_af_xdp_tx_func_error
Definition: af_xdp.h:186
VLIB buffer representation.
Definition: buffer.h:111
clib_error_t * error
Definition: af_xdp.h:161
u64 uword
Definition: types.h:112
u32 sw_if_index
Definition: af_xdp.h:101
vlib_node_registration_t af_xdp_input_node
(constructor) VLIB_REGISTER_NODE (af_xdp_input_node)
Definition: input.c:357
af_xdp_txq_t * txqs
Definition: af_xdp.h:98
af_xdp_mode_t mode
Definition: af_xdp.h:152
u32 queue_index
Definition: af_xdp.h:74
struct bpf_object * bpf_obj
Definition: af_xdp.h:119
clib_spinlock_t syscall_lock
Definition: af_xdp.h:66
af_xdp_create_flag_t flags
Definition: af_xdp.h:153