FD.io VPP  v16.06
Vector Packet Processing
dpdk.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef __included_dpdk_h__
16 #define __included_dpdk_h__
17 
18 /* $$$$ We should rename always_inline -> clib_always_inline */
19 #undef always_inline
20 
21 #include <rte_config.h>
22 
23 #include <rte_common.h>
24 #include <rte_dev.h>
25 #include <rte_log.h>
26 #include <rte_memory.h>
27 #include <rte_memzone.h>
28 #include <rte_tailq.h>
29 #include <rte_eal.h>
30 #include <rte_per_lcore.h>
31 #include <rte_launch.h>
32 #include <rte_atomic.h>
33 #include <rte_cycles.h>
34 #include <rte_prefetch.h>
35 #include <rte_lcore.h>
36 #include <rte_per_lcore.h>
37 #include <rte_branch_prediction.h>
38 #include <rte_interrupts.h>
39 #include <rte_pci.h>
40 #include <rte_random.h>
41 #include <rte_debug.h>
42 #include <rte_ether.h>
43 #include <rte_ethdev.h>
44 #include <rte_ring.h>
45 #include <rte_mempool.h>
46 #include <rte_mbuf.h>
47 #ifdef RTE_LIBRTE_KNI
48 #include <rte_kni.h>
49 #endif
50 #include <rte_virtio_net.h>
51 #include <rte_pci_dev_ids.h>
52 #include <rte_version.h>
53 #include <rte_eth_bond.h>
54 
55 #include <vnet/unix/pcap.h>
57 
58 #if CLIB_DEBUG > 0
59 #define always_inline static inline
60 #else
61 #define always_inline static inline __attribute__ ((__always_inline__))
62 #endif
63 
64 #define NB_MBUF (32<<10)
65 
70 
71 typedef enum {
72  VNET_DPDK_DEV_ETH = 1, /* Standard DPDK PMD driver */
73  VNET_DPDK_DEV_KNI, /* Kernel NIC Interface */
75  VNET_DPDK_DEV_UNKNOWN, /* must be last */
77 
78 #define foreach_dpdk_pmd \
79  _ ("rte_nicvf_pmd", THUNDERX) \
80  _ ("rte_em_pmd", E1000EM) \
81  _ ("rte_igb_pmd", IGB) \
82  _ ("rte_igbvf_pmd", IGBVF) \
83  _ ("rte_ixgbe_pmd", IXGBE) \
84  _ ("rte_ixgbevf_pmd", IXGBEVF) \
85  _ ("rte_i40e_pmd", I40E) \
86  _ ("rte_i40evf_pmd", I40EVF) \
87  _ ("rte_virtio_pmd", VIRTIO) \
88  _ ("rte_vice_pmd", VICE) \
89  _ ("rte_enic_pmd", ENIC) \
90  _ ("rte_vmxnet3_pmd", VMXNET3) \
91  _ ("AF_PACKET PMD", AF_PACKET) \
92  _ ("rte_bond_pmd", BOND) \
93  _ ("rte_pmd_fm10k", FM10K) \
94  _ ("rte_cxgbe_pmd", CXGBE)
95 
96 typedef enum {
98 #define _(s,f) VNET_DPDK_PMD_##f,
100 #undef _
101 #ifdef NETMAP
102  VNET_DPDK_PMD_NETMAP,
103 #endif
104  VNET_DPDK_PMD_UNKNOWN, /* must be last */
105 } dpdk_pmd_t;
106 
107 typedef enum {
113 #ifdef NETMAP
114  VNET_DPDK_PORT_TYPE_NETMAP,
115 #endif
119 
120 typedef struct {
123 } dpdk_frame_t;
124 
125 #define DPDK_EFD_MAX_DISCARD_RATE 10
126 
127 typedef struct {
138 
139 typedef struct {
140  int callfd;
141  int kickfd;
142  int errfd;
143 #if RTE_VERSION >= RTE_VERSION_NUM(2, 2, 0, 0)
144  int enabled;
145 #endif
151 } dpdk_vu_vring;
152 
153 typedef struct {
158  char sock_filename[256];
162 
165 #if RTE_VERSION >= RTE_VERSION_NUM(2, 2, 0, 0)
166  dpdk_vu_vring vrings[VHOST_MAX_QUEUE_PAIRS * 2];
167 #else
168  dpdk_vu_vring vrings[2];
169 #endif
173 
175  u32 hw_if_index,
176  u32 n_packets);
177 
178 /*
179  * The header for the tx_vector in dpdk_device_t.
180  * Head and tail are indexes into the tx_vector and are of type
181  * u64 so they never overflow.
182  */
183 typedef struct {
186 } tx_ring_hdr_t;
187 
188 typedef struct {
189  CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
190  volatile u32 **lockp;
191 
192  /* Instance ID */
194 
197 
198  /* next node index if we decide to steal the rx graph arc */
200 
201  /* dpdk rte_mbuf rx and tx vectors, VLIB_FRAME_SIZE */
202  struct rte_mbuf *** tx_vectors; /* one per worker thread */
203  struct rte_mbuf *** rx_vectors;
204 
205  /* vector of traced contexts, per device */
207 
208  /* per-worker destination frame queue */
210 
211  /* number of sub-interfaces */
213 
214  dpdk_device_type_t dev_type:8;
215  dpdk_pmd_t pmd:8;
217 
220 
221  CLIB_CACHE_LINE_ALIGN_MARK(cacheline1);
222 
223  /* PMD related */
229  struct rte_eth_conf port_conf;
230  struct rte_eth_txconf tx_conf;
231 
232  /* KNI related */
233  struct rte_kni *kni;
235 
236  /* vhost-user related */
238  struct virtio_net vu_vhost_dev;
241 
242  /* af_packet */
244 
245  struct rte_eth_link link;
247 
248  struct rte_eth_stats stats;
249  struct rte_eth_stats last_stats;
250  struct rte_eth_stats last_cleared_stats;
251  struct rte_eth_xstats * xstats;
252  struct rte_eth_xstats * last_cleared_xstats;
255 
257  u8 need_txlock; /* Used by VNET_DPDK_DEV_VHOST_USER */
258 } dpdk_device_t;
259 
260 #define MAX_NELTS 32
261 typedef struct {
262  CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
270  i32 n_vectors[MAX_NELTS];
272 
273 typedef struct {
274  u64 count[MAX_NELTS];
276 
277 #define DPDK_TX_RING_SIZE (4 * 1024)
278 
279 #define DPDK_STATS_POLL_INTERVAL (10.0)
280 #define DPDK_MIN_STATS_POLL_INTERVAL (0.001) /* 1msec */
281 
282 #define DPDK_LINK_POLL_INTERVAL (3.0)
283 #define DPDK_MIN_LINK_POLL_INTERVAL (0.001) /* 1msec */
284 
285 typedef struct {
286  CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
287 
288  /* total input packet counter */
290 } dpdk_worker_t;
291 
292 typedef struct {
296 
297 /* Early-Fast-Discard (EFD) */
298 #define DPDK_EFD_DISABLED 0
299 #define DPDK_EFD_DISCARD_ENABLED (1 << 0)
300 #define DPDK_EFD_MONITOR_ENABLED (1 << 1)
301 #define DPDK_EFD_DROPALL_ENABLED (1 << 2)
302 
303 #define DPDK_EFD_DEFAULT_DEVICE_QUEUE_HI_THRESH_PCT 90
304 #define DPDK_EFD_DEFAULT_CONSEC_FULL_FRAMES_HI_THRESH 6
305 
306 typedef struct dpdk_efd_t {
311 } dpdk_efd_t;
312 
313 typedef struct {
314 
315  /* Devices */
318 
319  /* per-thread recycle lists */
321 
322  /* buffer flags template, configurable to enable/disable tcp / udp cksum */
324 
325  /* flow control callback. If 0 then flow control is disabled */
327 
328  /* vlib buffer free list, must be same size as an rte_mbuf */
330 
331  /*
332  * format interface names ala xxxEthernet%d/%d/%d instead of
333  * xxxEthernet%x/%x/%x. For VIRL.
334  */
336 
337 
338  /* dpdk worker "threads" */
340 
341  /* Config stuff */
348 
349  /* Required config parameters */
357  u8 num_kni; /* while kni_init allows u32, port_id in callback fn is only u8 */
358 
359  /* Ethernet input node index */
361 
362  /* dpdk i/o thread initialization barrier */
364 
365  /* pcap tracing [only works if (CLIB_DEBUG > 0)] */
371 
372  /* virtio vhost-user switch */
374 
375  /* vhost-user coalescence frames config */
378 
379  /* hashes */
384 
386 
387  /* efd (early-fast-discard) settings */
389 
390  /*
391  * flag indicating that a posted admin up/down
392  * (via post_sw_interface_set_flags) is in progress
393  */
395 
397 
398  /* which cpus are running dpdk-input */
401 
402  /* control interval of dpdk link state and stat polling */
405 
406  /* for frame queue tracing */
409 
410  /* convenience */
413 } dpdk_main_t;
414 
416 
417 typedef enum {
425 
426 typedef struct {
430  struct rte_mbuf mb;
431  /* Copy of VLIB buffer; packet data stored in pre_data. */
434 
435 typedef struct {
439  struct rte_mbuf mb;
440  vlib_buffer_t buffer; /* Copy of VLIB buffer; pkt data stored in pre_data. */
442 
444 
445 void dpdk_set_next_node (dpdk_rx_next_t, char *);
446 
448 
450  struct ether_addr mc_addr_vec[], int naddr);
451 
453 
455  u32 instances,
456  u32 instance_id,
457  char *worker_name,
458  dpdk_io_thread_callback_t callback);
460 
462 
464  dpdk_flowcontrol_callback_t callback);
465 
466 u32 dpdk_interface_tx_vector (vlib_main_t * vm, u32 dev_instance);
467 
469 
471 
472 void set_efd_bitmap (u8 *bitmap, u32 value, u32 op);
473 
474 struct rte_mbuf * dpdk_replicate_packet_mb (vlib_buffer_t * b);
475 struct rte_mbuf * dpdk_zerocopy_replicate_packet_mb (vlib_buffer_t * b);
476 
477 #define foreach_dpdk_error \
478  _(NONE, "no error") \
479  _(RX_PACKET_ERROR, "Rx packet errors") \
480  _(RX_BAD_FCS, "Rx bad fcs") \
481  _(L4_CHECKSUM_ERROR, "Rx L4 checksum errors") \
482  _(IP_CHECKSUM_ERROR, "Rx ip checksum errors") \
483  _(RX_ALLOC_FAIL, "rx buf alloc from free list failed") \
484  _(RX_ALLOC_NO_PHYSMEM, "rx buf alloc failed no physmem") \
485  _(RX_ALLOC_DROP_PKTS, "rx packets dropped due to alloc error") \
486  _(IPV4_EFD_DROP_PKTS, "IPV4 Early Fast Discard rx drops") \
487  _(IPV6_EFD_DROP_PKTS, "IPV6 Early Fast Discard rx drops") \
488  _(MPLS_EFD_DROP_PKTS, "MPLS Early Fast Discard rx drops") \
489  _(VLAN_EFD_DROP_PKTS, "VLAN Early Fast Discard rx drops")
490 
491 typedef enum {
492 #define _(f,s) DPDK_ERROR_##f,
494 #undef _
496 } dpdk_error_t;
497 
498 /*
499  * Increment EFD drop counter
500  */
503 {
504  vlib_node_t *my_n;
505 
506  my_n = vlib_get_node (vm, dpdk_input_node.index);
508 }
509 
510 int dpdk_set_stat_poll_interval (f64 interval);
512 void dpdk_update_link_state (dpdk_device_t * xd, f64 now);
515 void dpdk_efd_update_counters(dpdk_device_t *xd, u32 n_buffers, u16 enabled);
517  vlib_buffer_t * b0,
518  struct rte_mbuf *mb);
519 
520 /* dpdk vhost-user interrupt management */
523  int idx);
524 
525 
526 static inline u64 vnet_get_aggregate_rx_packets (void)
527 {
528  dpdk_main_t * dm = &dpdk_main;
529  u64 sum = 0;
530  dpdk_worker_t * dw;
531 
532  vec_foreach(dw, dm->workers)
533  sum += dw->aggregate_rx_packets;
534 
535  return sum;
536 }
537 
538 void dpdk_rx_trace (dpdk_main_t * dm,
539  vlib_node_runtime_t * node,
540  dpdk_device_t * xd,
541  u16 queue_id,
542  u32 * buffers,
543  uword n_buffers);
544 
545 #define EFD_OPERATION_LESS_THAN 0
546 #define EFD_OPERATION_GREATER_OR_EQUAL 1
547 
548 void efd_config(u32 enabled,
549  u32 ip_prec, u32 ip_op,
550  u32 mpls_exp, u32 mpls_op,
551  u32 vlan_cos, u32 vlan_op);
552 
553 void post_sw_interface_set_flags (vlib_main_t *vm, u32 sw_if_index, u32 flags);
554 
556 
557 void dpdk_vhost_user_process_init (void **ctx);
558 void dpdk_vhost_user_process_cleanup (void *ctx);
560 
561 // vhost-user calls
563  const char * sock_filename,
564  u8 is_server,
565  u32 * sw_if_index,
566  u64 feature_mask,
567  u8 renumber, u32 custom_dev_instance,
568  u8 *hwaddr);
570  const char * sock_filename,
571  u8 is_server,
572  u32 sw_if_index,
573  u64 feature_mask,
574  u8 renumber, u32 custom_dev_instance);
576  u32 sw_if_index);
578  vhost_user_intf_details_t **out_vuids);
579 
581 
582 u32 dpdk_num_mbufs (void);
583 
584 int dpdk_io_thread_release (void);
585 
587 
589 
590 uword
592 
594 dpdk_get_hw_interface_stats (u32 hw_if_index, struct rte_eth_stats* dest);
595 
603 
604 
605 static inline void
607 {
608  /* Add references to DPDK Driver Constructor functions to get the dynamic
609  * loader to pull in the driver library & run the constructors.
610  */
611 #define _(d) \
612  do { \
613  void devinitfn_ ##d(void); \
614  __attribute__((unused)) void (* volatile pf)(void); \
615  pf = devinitfn_ ##d; \
616  } while(0);
617 
618 #ifdef RTE_LIBRTE_EM_PMD
619  _(em_pmd_drv)
620 #endif
621 
622 #ifdef RTE_LIBRTE_IGB_PMD
623  _(pmd_igb_drv)
624 #endif
625 
626 #ifdef RTE_LIBRTE_IXGBE_PMD
627  _(rte_ixgbe_driver)
628 #endif
629 
630 #ifdef RTE_LIBRTE_I40E_PMD
631  _(rte_i40e_driver)
632  _(rte_i40evf_driver)
633 #endif
634 
635 #ifdef RTE_LIBRTE_FM10K_PMD
636  _(rte_fm10k_driver)
637 #endif
638 
639 #ifdef RTE_LIBRTE_VIRTIO_PMD
640  _(rte_virtio_driver)
641 #endif
642 
643 #ifdef RTE_LIBRTE_VMXNET3_PMD
644  _(rte_vmxnet3_driver)
645 #endif
646 
647 #ifdef RTE_LIBRTE_VICE_PMD
648  _(rte_vice_driver)
649 #endif
650 
651 #ifdef RTE_LIBRTE_ENIC_PMD
652  _(rte_enic_driver)
653 #endif
654 
655 #ifdef RTE_LIBRTE_PMD_AF_PACKET
656  _(pmd_af_packet_drv)
657 #endif
658 
659 #ifdef RTE_LIBRTE_CXGBE_PMD
660  _(rte_cxgbe_driver)
661 #endif
662 
663 #ifdef RTE_LIBRTE_PMD_BOND
664  _(bond_drv)
665 #endif
666 
667 #undef _
668 
669 /*
670  * At the moment, the ThunderX NIC driver doesn't have
671  * an entry point named "devinitfn_rte_xxx_driver"
672  */
673 #define _(d) \
674  do { \
675  void d(void); \
676  __attribute__((unused)) void (* volatile pf)(void); \
677  pf = d; \
678  } while(0);
679 
680 #ifdef RTE_LIBRTE_THUNDERVNIC_PMD
681  _(rte_nicvf_pmd_init)
682 #endif
683 #undef _
684 
685 }
686 
687 #endif /* __included_dpdk_h__ */
void(* dpdk_flowcontrol_callback_t)(vlib_main_t *vm, u32 hw_if_index, u32 n_packets)
Definition: dpdk.h:174
void dpdk_device_lock_free(dpdk_device_t *xd)
Definition: init.c:219
f64 time_last_link_update
Definition: dpdk.h:246
vmrglw vmrglh hi
u16 enabled
Definition: dpdk.h:307
u32 error_heap_index
Definition: node.h:244
void dpdk_io_thread(vlib_worker_thread_t *w, u32 instances, u32 instance_id, char *worker_name, dpdk_io_thread_callback_t callback)
Definition: node.c:1079
u32 coremask
Definition: dpdk.h:352
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:68
vlib_node_registration_t dpdk_io_input_node
(constructor) VLIB_REGISTER_NODE (dpdk_io_input_node)
Definition: node.c:1934
u8 promisc
Definition: dpdk.h:219
uword( unformat_function_t)(unformat_input_t *input, va_list *args)
Definition: format.h:229
struct rte_mbuf * dpdk_replicate_packet_mb(vlib_buffer_t *b)
Definition: device.c:80
u32 n_since_last_int
Definition: dpdk.h:147
void post_sw_interface_set_flags(vlib_main_t *vm, u32 sw_if_index, u32 flags)
Definition: device.c:1266
vlib_buffer_t buffer
Definition: dpdk.h:432
int dpdk_vhost_user_modify_if(vnet_main_t *vnm, vlib_main_t *vm, const char *sock_filename, u8 is_server, u32 sw_if_index, u64 feature_mask, u8 renumber, u32 custom_dev_instance)
Definition: vhost_user.c:1442
u8 no_multi_seg
Definition: dpdk.h:347
u16 max_burst_sz
Definition: dpdk.h:129
static void(BVT(clib_bihash)*h, BVT(clib_bihash_value)*v)
dpdk_main_t dpdk_main
Definition: dpdk.h:415
always_inline vlib_node_t * vlib_get_node(vlib_main_t *vm, u32 i)
Definition: node_funcs.h:46
void dpdk_vhost_user_send_interrupt(vlib_main_t *vm, dpdk_device_t *xd, int idx)
Definition: vhost_user.c:852
vnet_device_class_t dpdk_device_class
clib_error_t * dpdk_set_mc_filter(vnet_hw_interface_t *hi, struct ether_addr mc_addr_vec[], int naddr)
Definition: device.c:64
dpdk_device_type_t
Definition: dpdk.h:71
u8 ** eal_init_args
Definition: dpdk.h:342
uint16_t flags
Definition: net_netmap.h:148
u8 need_txlock
Definition: dpdk.h:257
u64 last_poll_time
Definition: dpdk.h:133
#define foreach_dpdk_error
Definition: dpdk.h:477
dpdk_error_t
Definition: dpdk.h:491
int dpdk_vhost_user_delete_if(vnet_main_t *vnm, vlib_main_t *vm, u32 sw_if_index)
Definition: vhost_user.c:1492
i8 dpdk_get_cpu_socket(vnet_hw_interface_t *hi)
Definition: device.c:1379
u32 vhost_coalesce_frames
Definition: dpdk.h:376
f64 vhost_coalesce_time
Definition: dpdk.h:377
uword dpdk_input_rss(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *f)
Definition: node.c:805
u32 dpdk_num_mbufs(void)
Definition: device.c:1342
void(* dpdk_io_thread_callback_t)(vlib_main_t *vm)
Definition: dpdk.h:452
static void dpdk_pmd_constructor_init()
Definition: dpdk.h:606
#define MAX_NELTS
Definition: dpdk.h:260
struct dpdk_efd_t dpdk_efd_t
dpdk_pmd_t dpdk_get_pmd_type(vnet_hw_interface_t *hi)
Definition: device.c:1362
struct _vlib_node_registration vlib_node_registration_t
u32 per_interface_next_index
Definition: dpdk.h:199
u8 nchannels_set_manually
Definition: dpdk.h:351
u64 tx_tail
Definition: dpdk.h:185
u32 next_vu_if_id
Definition: dpdk.h:385
u32 congestion_cnt
Definition: dpdk.h:132
format_function_t format_dpdk_rte_mbuf
Definition: dpdk.h:600
u64 packets
Definition: dpdk.h:149
struct _vnet_device_class vnet_device_class_t
u8 * pcap_filename
Definition: dpdk.h:368
format_function_t format_dpdk_tx_dma_trace
Definition: dpdk.h:598
u8 admin_up
Definition: dpdk.h:218
clib_error_t * dpdk_port_setup(dpdk_main_t *dm, dpdk_device_t *xd)
Definition: init.c:66
u32 dpdk_get_handoff_node_index(void)
Definition: node.c:266
f64 deadline
Definition: dpdk.h:121
u8 dpdk_vhost_user_want_interrupt(dpdk_device_t *xd, int idx)
Definition: vhost_user.c:836
struct rte_mbuf *** tx_vectors
Definition: dpdk.h:202
#define static_always_inline
Definition: clib.h:85
vlib_node_registration_t dpdk_input_node
(constructor) VLIB_REGISTER_NODE (dpdk_input_node)
Definition: node.c:829
void dpdk_set_next_node(dpdk_rx_next_t, char *)
Definition: node.c:857
f64 stat_poll_interval
Definition: dpdk.h:404
u32 max_tx_queues
Definition: dpdk.h:356
u32 pcap_pkts_to_capture
Definition: dpdk.h:370
u32 vu_is_running
Definition: dpdk.h:239
int i32
Definition: types.h:81
unformat_function_t unformat_socket_mem
Definition: dpdk.h:602
int input_cpu_first_index
Definition: dpdk.h:399
u32 dpdk_interface_tx_vector(vlib_main_t *vm, u32 dev_instance)
Definition: device.c:527
char i8
Definition: types.h:45
u16 rx_q_used
Definition: dpdk.h:225
void dpdk_vhost_user_process_cleanup(void *ctx)
Definition: vhost_user.c:1615
int sock_errno
Definition: dpdk.h:159
unsigned long u64
Definition: types.h:89
u32 dpdk_get_admin_up_down_in_progress(void)
Definition: device.c:1204
format_function_t format_dpdk_rx_rte_mbuf
Definition: dpdk.h:601
u32 device_index
Definition: dpdk.h:193
struct rte_eth_xstats * last_cleared_xstats
Definition: dpdk.h:252
dpdk_worker_t * workers
Definition: dpdk.h:339
vlib_node_registration_t handoff_dispatch_node
(constructor) VLIB_REGISTER_NODE (handoff_dispatch_node)
Definition: node.c:232
f64 time_last_stats_update
Definition: dpdk.h:253
u32 pcap_sw_if_index
Definition: dpdk.h:369
u16 consec_full_frames_hi_thresh
Definition: dpdk.h:309
u32 vlib_sw_if_index
Definition: dpdk.h:196
format_function_t format_dpdk_rx_dma_trace
Definition: dpdk.h:599
dpdk_device_and_queue_t ** devices_by_cpu
Definition: dpdk.h:317
u64 max_poll_delay
Definition: dpdk.h:134
static_always_inline void increment_efd_drop_counter(vlib_main_t *vm, u32 counter_index, u32 count)
Definition: dpdk.h:502
int dpdk_set_link_state_poll_interval(f64 interval)
Definition: init.c:1542
int kickfd
Definition: dpdk.h:141
u32 consec_full_frames_cnt
Definition: dpdk.h:131
vlib_error_main_t error_main
Definition: main.h:124
int dpdk_vhost_user_dump_ifs(vnet_main_t *vnm, vlib_main_t *vm, vhost_user_intf_details_t **out_vuids)
Definition: vhost_user.c:1525
void vnet_buffer_needs_dpdk_mb(vlib_buffer_t *b)
u32 vlib_hw_if_index
Definition: dpdk.h:195
dpdk_flowcontrol_callback_t flowcontrol_callback
Definition: dpdk.h:326
u8 use_virtio_vhost
Definition: dpdk.h:373
pcap_main_t pcap_main
Definition: dpdk.h:367
u8 * eth_if_whitelist
Definition: dpdk.h:345
static u64 vnet_get_aggregate_rx_packets(void)
Definition: dpdk.h:526
void efd_config(u32 enabled, u32 ip_prec, u32 ip_op, u32 mpls_exp, u32 mpls_op, u32 vlan_cos, u32 vlan_op)
Definition: node.c:1977
#define foreach_dpdk_pmd
Definition: dpdk.h:78
u8 * eal_init_args_str
Definition: dpdk.h:343
u16 last_burst_sz
Definition: dpdk.h:128
u64 bytes
Definition: dpdk.h:150
int dpdk_vhost_user_create_if(vnet_main_t *vnm, vlib_main_t *vm, const char *sock_filename, u8 is_server, u32 *sw_if_index, u64 feature_mask, u8 renumber, u32 custom_dev_instance, u8 *hwaddr)
Definition: vhost_user.c:1396
u16 vlan_subifs
Definition: dpdk.h:212
dpdk_port_type_t port_type
Definition: dpdk.h:254
vlib_frame_queue_elt_t * vlib_get_handoff_queue_elt(u32 vlib_worker_index)
Definition: node.c:881
u32 * d_trace_buffers
Definition: dpdk.h:206
u32 full_frames_cnt
Definition: dpdk.h:130
int input_cpu_count
Definition: dpdk.h:400
u8 have_io_threads
Definition: dpdk.h:396
void dpdk_rx_trace(dpdk_main_t *dm, vlib_node_runtime_t *node, dpdk_device_t *xd, u16 queue_id, u32 *buffers, uword n_buffers)
Definition: node.c:343
vlib_frame_t * frame
Definition: dpdk.h:122
u16 tx_q_used
Definition: dpdk.h:224
u16 nb_rx_desc
Definition: dpdk.h:226
frame_queue_nelt_counter_t * frame_queue_histogram
Definition: dpdk.h:408
int enabled
Definition: dpdk.h:144
u8 * eth_if_blacklist
Definition: dpdk.h:344
u64 aggregate_rx_packets
Definition: dpdk.h:289
void dpdk_thread_input(dpdk_main_t *dm, dpdk_device_t *xd)
u32 num_mbufs
Definition: dpdk.h:354
u64 * counters
Definition: error.h:73
u32 ** recycle
Definition: dpdk.h:320
clib_error_t * dpdk_get_hw_interface_stats(u32 hw_if_index, struct rte_eth_stats *dest)
Definition: device.c:1319
dpdk_device_t * devices
Definition: dpdk.h:316
u16 * cpu_socket_id_by_queue
Definition: dpdk.h:228
struct rte_kni * kni
Definition: dpdk.h:233
volatile u32 ** lockp
Definition: dpdk.h:190
struct rte_mbuf *** rx_vectors
Definition: dpdk.h:203
u16 queue_hi_thresh
Definition: dpdk.h:308
u32 use_rss
Definition: dpdk.h:355
#define VHOST_MEMORY_MAX_NREGIONS
Definition: vhost-user.h:19
int dpdk_set_stat_poll_interval(f64 interval)
Definition: init.c:1532
dpdk_pmd_t
Definition: dpdk.h:96
format_function_t format_dpdk_device
Definition: dpdk.h:597
u32 num_vrings
Definition: dpdk.h:164
f64 int_deadline
Definition: dpdk.h:148
void dpdk_efd_update_counters(dpdk_device_t *xd, u32 n_buffers, u16 enabled)
Definition: node.c:398
u32 discard_cnt
Definition: dpdk.h:135
int callfd
Definition: dpdk.h:140
void dpdk_set_flowcontrol_callback(vlib_main_t *vm, dpdk_flowcontrol_callback_t callback)
Definition: device.c:1195
u8 num_kni
Definition: dpdk.h:357
u32 vu_if_id
Definition: dpdk.h:237
format_function_t format_dpdk_device_name
Definition: dpdk.h:596
unsigned int u32
Definition: types.h:88
u32 * vu_inactive_interfaces_device_index
Definition: dpdk.h:383
void dpdk_vhost_user_process_init(void **ctx)
Definition: vhost_user.c:1603
u64 tx_head
Definition: dpdk.h:184
dpdk_frame_t * frames
Definition: dpdk.h:209
dpdk_efd_t efd
Definition: dpdk.h:388
u8 af_packet_port_id
Definition: dpdk.h:243
void dpdk_device_lock_init(dpdk_device_t *xd)
Definition: init.c:205
struct rte_mbuf * dpdk_zerocopy_replicate_packet_mb(vlib_buffer_t *b)
Definition: device.c:150
u8 sock_is_server
Definition: dpdk.h:160
u32 callfd_idx
Definition: dpdk.h:146
void dpdk_update_link_state(dpdk_device_t *xd, f64 now)
Definition: init.c:1243
clib_error_t * dpdk_set_mac_address(vnet_hw_interface_t *hi, char *address)
Definition: device.c:47
u32 is_efd_discardable(vlib_thread_main_t *tm, vlib_buffer_t *b0, struct rte_mbuf *mb)
Definition: node.c:435
u8 *( format_function_t)(u8 *s, va_list *args)
Definition: format.h:48
frame_queue_trace_t * frame_queue_traces
Definition: dpdk.h:407
u32 unix_file_index
Definition: dpdk.h:156
u64 uword
Definition: types.h:112
dpdk_port_type_t
Definition: dpdk.h:107
dpdk_rx_next_t
Definition: dpdk.h:417
u8 kni_port_id
Definition: dpdk.h:234
u32 nchannels
Definition: dpdk.h:353
unsigned short u16
Definition: types.h:57
u8 interface_name_format_decimal
Definition: dpdk.h:335
vlib_buffer_t buffer
Definition: dpdk.h:440
int dpdk_io_thread_release(void)
Definition: device.c:1352
u32 ethernet_input_node_index
Definition: dpdk.h:360
double f64
Definition: types.h:140
unsigned char u8
Definition: types.h:56
dpdk_efd_agent_t efd_agent
Definition: dpdk.h:256
u8 admin_up_down_in_progress
Definition: dpdk.h:394
void set_efd_bitmap(u8 *bitmap, u32 value, u32 op)
Definition: node.c:1963
u16 pad
Definition: dpdk.h:310
u32 client_fd
Definition: dpdk.h:157
struct rte_eth_xstats * xstats
Definition: dpdk.h:251
u32 buffer_flags_template
Definition: dpdk.h:323
u8 * uio_driver_name
Definition: dpdk.h:346
u32 vlib_buffer_free_list_index
Definition: dpdk.h:329
volatile u32 io_thread_release
Definition: dpdk.h:363
u8 coremask_set_manually
Definition: dpdk.h:350
#define vec_foreach(var, vec)
Vector iterator.
i8 cpu_socket
Definition: dpdk.h:216
u32 total_packet_cnt
Definition: dpdk.h:136
u32 unix_fd
Definition: dpdk.h:155
u64 feature_mask
Definition: dpdk.h:163
dpdk_vu_intf_t * vu_intf
Definition: dpdk.h:240
u32 is_up
Definition: dpdk.h:154
int tx_pcap_enable
Definition: dpdk.h:366
vnet_main_t * vnet_main
Definition: dpdk.h:412
u16 nb_tx_desc
Definition: dpdk.h:227
uword dpdk_vhost_user_process_if(vlib_main_t *vm, dpdk_device_t *xd, void *ctx)
Definition: vhost_user.c:1620
int errfd
Definition: dpdk.h:142
always_inline u32 counter_index(vlib_main_t *vm, vlib_error_t e)
uword * dpdk_device_by_kni_port_id
Definition: dpdk.h:380
uword * vu_sw_if_index_by_listener_fd
Definition: dpdk.h:381
f64 link_state_poll_interval
Definition: dpdk.h:403
uword * vu_sw_if_index_by_sock_fd
Definition: dpdk.h:382
vlib_main_t * vlib_main
Definition: dpdk.h:411