FD.io VPP  v16.09
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 #if RTE_VERSION < RTE_VERSION_NUM(16, 7, 0, 0)
65 #define DPDK_VHOST_USER 1
66 #else
67 #define DPDK_VHOST_USER 0
68 #endif
69 
70 #include <vlib/pci/pci.h>
71 
72 #define NB_MBUF (16<<10)
73 
77 
78 typedef enum
79 {
80  VNET_DPDK_DEV_ETH = 1, /* Standard DPDK PMD driver */
81  VNET_DPDK_DEV_KNI, /* Kernel NIC Interface */
83  VNET_DPDK_DEV_UNKNOWN, /* must be last */
85 
86 #define foreach_dpdk_pmd \
87  _ ("rte_nicvf_pmd", THUNDERX) \
88  _ ("rte_em_pmd", E1000EM) \
89  _ ("rte_igb_pmd", IGB) \
90  _ ("rte_igbvf_pmd", IGBVF) \
91  _ ("rte_ixgbe_pmd", IXGBE) \
92  _ ("rte_ixgbevf_pmd", IXGBEVF) \
93  _ ("rte_i40e_pmd", I40E) \
94  _ ("rte_i40evf_pmd", I40EVF) \
95  _ ("rte_virtio_pmd", VIRTIO) \
96  _ ("rte_enic_pmd", ENIC) \
97  _ ("rte_vmxnet3_pmd", VMXNET3) \
98  _ ("AF_PACKET PMD", AF_PACKET) \
99  _ ("rte_bond_pmd", BOND) \
100  _ ("rte_pmd_fm10k", FM10K) \
101  _ ("rte_cxgbe_pmd", CXGBE) \
102  _ ("rte_dpaa2_dpni", DPAA2)
103 
104 typedef enum
105 {
107 #define _(s,f) VNET_DPDK_PMD_##f,
109 #undef _
110  VNET_DPDK_PMD_UNKNOWN, /* must be last */
111 } dpdk_pmd_t;
112 
113 typedef enum
114 {
123 
124 typedef struct
125 {
128 } dpdk_frame_t;
129 
130 #define DPDK_EFD_MAX_DISCARD_RATE 10
131 
132 typedef struct
133 {
144 
145 #if DPDK_VHOST_USER
146 typedef struct
147 {
148  int callfd;
149  int kickfd;
150  int errfd;
151  int enabled;
152  u32 callfd_idx;
153  u32 n_since_last_int;
154  f64 int_deadline;
155  u64 packets;
156  u64 bytes;
157 } dpdk_vu_vring;
158 
159 typedef struct
160 {
161  u32 is_up;
162  u32 unix_fd;
163  u32 unix_file_index;
164  u32 client_fd;
165  char sock_filename[256];
166  int sock_errno;
167  u8 sock_is_server;
168  u8 active;
169 
170  u64 feature_mask;
171  u32 num_vrings;
172  dpdk_vu_vring vrings[VHOST_MAX_QUEUE_PAIRS * 2];
173  u64 region_addr[VHOST_MEMORY_MAX_NREGIONS];
174  u32 region_fd[VHOST_MEMORY_MAX_NREGIONS];
175  u64 region_offset[VHOST_MEMORY_MAX_NREGIONS];
176 } dpdk_vu_intf_t;
177 #endif
178 
180  u32 hw_if_index, u32 n_packets);
181 
182 /*
183  * The header for the tx_vector in dpdk_device_t.
184  * Head and tail are indexes into the tx_vector and are of type
185  * u64 so they never overflow.
186  */
187 typedef struct
188 {
191 } tx_ring_hdr_t;
192 
193 typedef struct
194 {
195  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
196  volatile u32 **lockp;
197 
198  /* Instance ID */
200 
203 
204  /* next node index if we decide to steal the rx graph arc */
206 
207  /* dpdk rte_mbuf rx and tx vectors, VLIB_FRAME_SIZE */
208  struct rte_mbuf ***tx_vectors; /* one per worker thread */
209  struct rte_mbuf ***rx_vectors;
210 
211  /* vector of traced contexts, per device */
213 
214  /* number of sub-interfaces */
216 
217  dpdk_device_type_t dev_type:8;
218  dpdk_pmd_t pmd:8;
220 
223 
224  CLIB_CACHE_LINE_ALIGN_MARK (cacheline1);
225 
227 
228  /* PMD related */
234  struct rte_eth_conf port_conf;
235  struct rte_eth_txconf tx_conf;
236 
237  /* KNI related */
238  struct rte_kni *kni;
240 
241 #if DPDK_VHOST_USER
242  /* vhost-user related */
243  u32 vu_if_id;
244  struct virtio_net vu_vhost_dev;
245  u32 vu_is_running;
246  dpdk_vu_intf_t *vu_intf;
247 #endif
248 
249  /* af_packet */
251 
252  struct rte_eth_link link;
254 
255  struct rte_eth_stats stats;
256  struct rte_eth_stats last_stats;
257  struct rte_eth_stats last_cleared_stats;
258 #if RTE_VERSION >= RTE_VERSION_NUM(16, 7, 0, 0)
259  struct rte_eth_xstat *xstats;
260  struct rte_eth_xstat *last_cleared_xstats;
261 #else
262  struct rte_eth_xstats *xstats;
263  struct rte_eth_xstats *last_cleared_xstats;
264 #endif
267 
269  u8 need_txlock; /* Used by VNET_DPDK_DEV_VHOST_USER */
270 } dpdk_device_t;
271 
272 
273 #define DPDK_TX_RING_SIZE (4 * 1024)
274 
275 #define DPDK_STATS_POLL_INTERVAL (10.0)
276 #define DPDK_MIN_STATS_POLL_INTERVAL (0.001) /* 1msec */
277 
278 #define DPDK_LINK_POLL_INTERVAL (3.0)
279 #define DPDK_MIN_LINK_POLL_INTERVAL (0.001) /* 1msec */
280 
281 typedef struct
282 {
283  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
284 
285  /* total input packet counter */
287 } dpdk_worker_t;
288 
289 typedef struct
290 {
294 
295 /* Early-Fast-Discard (EFD) */
296 #define DPDK_EFD_DISABLED 0
297 #define DPDK_EFD_DISCARD_ENABLED (1 << 0)
298 #define DPDK_EFD_MONITOR_ENABLED (1 << 1)
299 #define DPDK_EFD_DROPALL_ENABLED (1 << 2)
300 
301 #define DPDK_EFD_DEFAULT_DEVICE_QUEUE_HI_THRESH_PCT 90
302 #define DPDK_EFD_DEFAULT_CONSEC_FULL_FRAMES_HI_THRESH 6
303 
304 typedef struct dpdk_efd_t
305 {
310 } dpdk_efd_t;
311 
312 #define foreach_dpdk_device_config_item \
313  _ (num_rx_queues) \
314  _ (num_tx_queues) \
315  _ (num_rx_desc) \
316  _ (num_tx_desc) \
317  _ (rss_fn)
318 
319 typedef struct
320 {
321  vlib_pci_addr_t pci_addr;
324 #define DPDK_DEVICE_VLAN_STRIP_DEFAULT 0
325 #define DPDK_DEVICE_VLAN_STRIP_OFF 1
326 #define DPDK_DEVICE_VLAN_STRIP_ON 2
327 
328 #define _(x) uword x;
330 #undef _
333 
334 typedef struct
335 {
336 
337  /* Config stuff */
343 
344  /* Required config parameters */
350  u8 num_kni; /* while kni_init allows u32, port_id in callback fn is only u8 */
351 
352  /*
353  * format interface names ala xxxEthernet%d/%d/%d instead of
354  * xxxEthernet%x/%x/%x.
355  */
357 
358  /* virtio vhost-user switch */
360 
361  /* vhost-user coalescence frames config */
364 
365  /* per-device config */
369 
371 
373 
374 typedef struct
375 {
376 
377  /* Devices */
380 
381  /* per-thread recycle lists */
383 
384  /* buffer flags template, configurable to enable/disable tcp / udp cksum */
386 
387  /* flow control callback. If 0 then flow control is disabled */
389 
390  /* vlib buffer free list, must be same size as an rte_mbuf */
392 
393  /* dpdk worker "threads" */
395 
396 
397  /* Ethernet input node index */
399 
400  /* pcap tracing [only works if (CLIB_DEBUG > 0)] */
406 
407  /* hashes */
412 
414 
415  /* efd (early-fast-discard) settings */
417 
418  /*
419  * flag indicating that a posted admin up/down
420  * (via post_sw_interface_set_flags) is in progress
421  */
423 
425 
426  /* which cpus are running dpdk-input */
429 
430  /* control interval of dpdk link state and stat polling */
433 
434  /* Sleep for this many MS after each device poll */
436 
437  /* convenience */
441 } dpdk_main_t;
442 
444 
445 typedef enum
446 {
454 
455 typedef struct
456 {
460  struct rte_mbuf mb;
461  /* Copy of VLIB buffer; packet data stored in pre_data. */
464 
465 typedef struct
466 {
470  struct rte_mbuf mb;
471  vlib_buffer_t buffer; /* Copy of VLIB buffer; pkt data stored in pre_data. */
472  u8 data[256]; /* First 256 data bytes, used for hexdump */
474 
476 
477 void dpdk_set_next_node (dpdk_rx_next_t, char *);
478 
480 
482  struct ether_addr mc_addr_vec[], int naddr);
483 
485 
487 
489  dpdk_flowcontrol_callback_t callback);
490 
491 u32 dpdk_interface_tx_vector (vlib_main_t * vm, u32 dev_instance);
492 
493 void set_efd_bitmap (u8 * bitmap, u32 value, u32 op);
494 
495 struct rte_mbuf *dpdk_replicate_packet_mb (vlib_buffer_t * b);
496 struct rte_mbuf *dpdk_zerocopy_replicate_packet_mb (vlib_buffer_t * b);
497 
498 #define foreach_dpdk_error \
499  _(NONE, "no error") \
500  _(RX_PACKET_ERROR, "Rx packet errors") \
501  _(RX_BAD_FCS, "Rx bad fcs") \
502  _(L4_CHECKSUM_ERROR, "Rx L4 checksum errors") \
503  _(IP_CHECKSUM_ERROR, "Rx ip checksum errors") \
504  _(RX_ALLOC_FAIL, "rx buf alloc from free list failed") \
505  _(RX_ALLOC_NO_PHYSMEM, "rx buf alloc failed no physmem") \
506  _(RX_ALLOC_DROP_PKTS, "rx packets dropped due to alloc error") \
507  _(IPV4_EFD_DROP_PKTS, "IPV4 Early Fast Discard rx drops") \
508  _(IPV6_EFD_DROP_PKTS, "IPV6 Early Fast Discard rx drops") \
509  _(MPLS_EFD_DROP_PKTS, "MPLS Early Fast Discard rx drops") \
510  _(VLAN_EFD_DROP_PKTS, "VLAN Early Fast Discard rx drops")
511 
512 typedef enum
513 {
514 #define _(f,s) DPDK_ERROR_##f,
516 #undef _
518 } dpdk_error_t;
519 
520 /*
521  * Increment EFD drop counter
522  */
525 {
526  vlib_node_t *my_n;
527 
528  my_n = vlib_get_node (vm, dpdk_input_node.index);
529  vm->error_main.counters[my_n->error_heap_index + counter_index] += count;
530 }
531 
532 int dpdk_set_stat_poll_interval (f64 interval);
534 void dpdk_update_link_state (dpdk_device_t * xd, f64 now);
537 void dpdk_efd_update_counters (dpdk_device_t * xd, u32 n_buffers,
538  u16 enabled);
540  struct rte_mbuf *mb);
541 
542 #if DPDK_VHOST_USER
543 /* dpdk vhost-user interrupt management */
544 u8 dpdk_vhost_user_want_interrupt (dpdk_device_t * xd, int idx);
545 void dpdk_vhost_user_send_interrupt (vlib_main_t * vm, dpdk_device_t * xd,
546  int idx);
547 #endif
548 
549 
550 static inline u64
552 {
553  dpdk_main_t *dm = &dpdk_main;
554  u64 sum = 0;
555  dpdk_worker_t *dw;
556 
557  vec_foreach (dw, dm->workers) sum += dw->aggregate_rx_packets;
558 
559  return sum;
560 }
561 
562 void dpdk_rx_trace (dpdk_main_t * dm,
563  vlib_node_runtime_t * node,
564  dpdk_device_t * xd,
565  u16 queue_id, u32 * buffers, uword n_buffers);
566 
567 #define EFD_OPERATION_LESS_THAN 0
568 #define EFD_OPERATION_GREATER_OR_EQUAL 1
569 
570 void efd_config (u32 enabled,
571  u32 ip_prec, u32 ip_op,
572  u32 mpls_exp, u32 mpls_op, u32 vlan_cos, u32 vlan_op);
573 
574 void post_sw_interface_set_flags (vlib_main_t * vm, u32 sw_if_index,
575  u32 flags);
576 
577 #if DPDK_VHOST_USER
579 
580 void dpdk_vhost_user_process_init (void **ctx);
581 void dpdk_vhost_user_process_cleanup (void *ctx);
582 uword dpdk_vhost_user_process_if (vlib_main_t * vm, dpdk_device_t * xd,
583  void *ctx);
584 
585 // vhost-user calls
586 int dpdk_vhost_user_create_if (vnet_main_t * vnm, vlib_main_t * vm,
587  const char *sock_filename,
588  u8 is_server,
589  u32 * sw_if_index,
590  u64 feature_mask,
591  u8 renumber, u32 custom_dev_instance,
592  u8 * hwaddr);
593 int dpdk_vhost_user_modify_if (vnet_main_t * vnm, vlib_main_t * vm,
594  const char *sock_filename,
595  u8 is_server,
596  u32 sw_if_index,
597  u64 feature_mask,
598  u8 renumber, u32 custom_dev_instance);
599 int dpdk_vhost_user_delete_if (vnet_main_t * vnm, vlib_main_t * vm,
600  u32 sw_if_index);
601 int dpdk_vhost_user_dump_ifs (vnet_main_t * vnm, vlib_main_t * vm,
602  vhost_user_intf_details_t ** out_vuids);
603 #endif
604 
606 
607 u32 dpdk_num_mbufs (void);
608 
610 
612 
616 
618  struct rte_eth_stats *dest);
619 
628 
629 
630 static inline void
632 {
633  /* Add references to DPDK Driver Constructor functions to get the dynamic
634  * loader to pull in the driver library & run the constructors.
635  */
636 #define _(d) \
637  do { \
638  void devinitfn_ ##d(void); \
639  __attribute__((unused)) void (* volatile pf)(void); \
640  pf = devinitfn_ ##d; \
641  } while(0);
642 
643 #ifdef RTE_LIBRTE_EM_PMD
644  _(em_pmd_drv)
645 #endif
646 #ifdef RTE_LIBRTE_IGB_PMD
647  _(pmd_igb_drv)
648 #endif
649 #ifdef RTE_LIBRTE_IXGBE_PMD
650  _(rte_ixgbe_driver)
651 #endif
652 #ifdef RTE_LIBRTE_I40E_PMD
653  _(rte_i40e_driver) _(rte_i40evf_driver)
654 #endif
655 #ifdef RTE_LIBRTE_FM10K_PMD
656  _(rte_fm10k_driver)
657 #endif
658 #ifdef RTE_LIBRTE_VIRTIO_PMD
659  _(rte_virtio_driver)
660 #endif
661 #ifdef RTE_LIBRTE_VMXNET3_PMD
662  _(rte_vmxnet3_driver)
663 #endif
664 #ifdef RTE_LIBRTE_VICE_PMD
665  _(rte_vice_driver)
666 #endif
667 #ifdef RTE_LIBRTE_ENIC_PMD
668  _(rte_enic_driver)
669 #endif
670 #ifdef RTE_LIBRTE_PMD_AF_PACKET
671  _(pmd_af_packet_drv)
672 #endif
673 #ifdef RTE_LIBRTE_CXGBE_PMD
674  _(rte_cxgbe_driver)
675 #endif
676 #ifdef RTE_LIBRTE_PMD_BOND
677  _(bond_drv)
678 #endif
679 #ifdef RTE_LIBRTE_DPAA2_PMD
680  _(pmd_dpaa2_drv)
681 #endif
682 #undef _
683 /*
684  * At the moment, the ThunderX NIC driver doesn't have
685  * an entry point named "devinitfn_rte_xxx_driver"
686  */
687 #define _(d) \
688  do { \
689  void d(void); \
690  __attribute__((unused)) void (* volatile pf)(void); \
691  pf = d; \
692  } while(0);
693 #ifdef RTE_LIBRTE_THUNDERVNIC_PMD
694  _(rte_nicvf_pmd_init)
695 #endif
696 #undef _
697 }
698 
699 uword
702 
703 #endif /* __included_dpdk_h__ */
704 
705 /*
706  * fd.io coding-style-patch-verification: ON
707  *
708  * Local Variables:
709  * eval: (c-set-style "gnu")
710  * End:
711  */
void(* dpdk_flowcontrol_callback_t)(vlib_main_t *vm, u32 hw_if_index, u32 n_packets)
Definition: dpdk.h:179
void dpdk_device_lock_free(dpdk_device_t *xd)
Definition: init.c:224
f64 time_last_link_update
Definition: dpdk.h:253
vmrglw vmrglh hi
u16 enabled
Definition: dpdk.h:306
u32 error_heap_index
Definition: node.h:278
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:68
u8 promisc
Definition: dpdk.h:222
uword( unformat_function_t)(unformat_input_t *input, va_list *args)
Definition: format.h:231
struct rte_mbuf * dpdk_replicate_packet_mb(vlib_buffer_t *b)
Definition: device.c:88
u8 * eal_init_args_str
Definition: dpdk.h:339
void post_sw_interface_set_flags(vlib_main_t *vm, u32 sw_if_index, u32 flags)
Definition: device.c:1354
vlib_buffer_t buffer
Definition: dpdk.h:462
u16 max_burst_sz
Definition: dpdk.h:135
u8 interface_name_format_decimal
Definition: dpdk.h:356
dpdk_main_t dpdk_main
Definition: dpdk.h:443
u8 use_rss
Definition: dpdk.h:424
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:68
u32 vhost_coalesce_frames
Definition: dpdk.h:362
dpdk_device_type_t
Definition: dpdk.h:78
u8 need_txlock
Definition: dpdk.h:269
u64 last_poll_time
Definition: dpdk.h:139
#define foreach_dpdk_error
Definition: dpdk.h:498
dpdk_error_t
Definition: dpdk.h:512
i8 dpdk_get_cpu_socket(vnet_hw_interface_t *hi)
Definition: device.c:1423
PCAP utility definitions.
u32 dpdk_num_mbufs(void)
Definition: device.c:1394
static void dpdk_pmd_constructor_init()
Definition: dpdk.h:631
struct dpdk_efd_t dpdk_efd_t
dpdk_pmd_t dpdk_get_pmd_type(vnet_hw_interface_t *hi)
Definition: device.c:1405
struct _vlib_node_registration vlib_node_registration_t
u32 per_interface_next_index
Definition: dpdk.h:205
u8 enable_tcp_udp_checksum
Definition: dpdk.h:342
u64 tx_tail
Definition: dpdk.h:190
u32 next_vu_if_id
Definition: dpdk.h:413
u32 congestion_cnt
Definition: dpdk.h:138
struct rte_eth_xstat * last_cleared_xstats
Definition: dpdk.h:260
format_function_t format_dpdk_rte_mbuf
Definition: dpdk.h:624
struct _vnet_device_class vnet_device_class_t
u8 * pcap_filename
Definition: dpdk.h:403
format_function_t format_dpdk_tx_dma_trace
Definition: dpdk.h:622
u8 admin_up
Definition: dpdk.h:221
clib_error_t * dpdk_port_setup(dpdk_main_t *dm, dpdk_device_t *xd)
Definition: init.c:65
f64 deadline
Definition: dpdk.h:126
void * dpdk_input_efd_multiarch_select()
struct rte_mbuf *** tx_vectors
Definition: dpdk.h:208
f64 vhost_coalesce_time
Definition: dpdk.h:363
foreach_dpdk_device_config_item clib_bitmap_t * workers
Definition: dpdk.h:331
#define static_always_inline
Definition: clib.h:85
PCAP main state data structure.
Definition: pcap.h:122
dpdk_config_main_t dpdk_config_main
Definition: dpdk.h:372
vlib_node_registration_t dpdk_input_node
(constructor) VLIB_REGISTER_NODE (dpdk_input_node)
Definition: node.c:787
dpdk_device_config_t default_devconf
Definition: dpdk.h:366
void dpdk_set_next_node(dpdk_rx_next_t, char *)
Definition: node.c:828
f64 stat_poll_interval
Definition: dpdk.h:432
static u32 counter_index(vlib_main_t *vm, vlib_error_t e)
u32 pcap_pkts_to_capture
Definition: dpdk.h:405
unformat_function_t unformat_socket_mem
Definition: dpdk.h:626
int input_cpu_first_index
Definition: dpdk.h:427
u32 dpdk_interface_tx_vector(vlib_main_t *vm, u32 dev_instance)
Definition: device.c:562
char i8
Definition: types.h:45
u16 rx_q_used
Definition: dpdk.h:230
unsigned long u64
Definition: types.h:89
u32 dpdk_get_admin_up_down_in_progress(void)
Definition: device.c:1287
format_function_t format_dpdk_rx_rte_mbuf
Definition: dpdk.h:625
clib_error_t * unformat_rss_fn(unformat_input_t *input, uword *rss_fn)
Definition: format.c:845
u32 device_index
Definition: dpdk.h:199
dpdk_worker_t * workers
Definition: dpdk.h:394
void * dpdk_input_multiarch_select()
vlib_node_registration_t handoff_dispatch_node
(constructor) VLIB_REGISTER_NODE (handoff_dispatch_node)
Definition: handoff.c:504
f64 time_last_stats_update
Definition: dpdk.h:265
u32 pcap_sw_if_index
Definition: dpdk.h:404
u16 consec_full_frames_hi_thresh
Definition: dpdk.h:308
u32 vlib_sw_if_index
Definition: dpdk.h:202
vlib_pci_addr_t pci_addr
Definition: dpdk.h:321
format_function_t format_dpdk_rx_dma_trace
Definition: dpdk.h:623
dpdk_device_and_queue_t ** devices_by_cpu
Definition: dpdk.h:379
u64 max_poll_delay
Definition: dpdk.h:140
static_always_inline void increment_efd_drop_counter(vlib_main_t *vm, u32 counter_index, u32 count)
Definition: dpdk.h:524
int dpdk_set_link_state_poll_interval(f64 interval)
Definition: init.c:1779
u8 ** eal_init_args
Definition: dpdk.h:338
u32 consec_full_frames_cnt
Definition: dpdk.h:137
vlib_error_main_t error_main
Definition: main.h:124
void vnet_buffer_needs_dpdk_mb(vlib_buffer_t *b)
u32 vlib_hw_if_index
Definition: dpdk.h:201
dpdk_flowcontrol_callback_t flowcontrol_callback
Definition: dpdk.h:388
pcap_main_t pcap_main
Definition: dpdk.h:402
static u64 vnet_get_aggregate_rx_packets(void)
Definition: dpdk.h:551
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:870
#define foreach_dpdk_pmd
Definition: dpdk.h:86
u16 last_burst_sz
Definition: dpdk.h:134
u16 vlan_subifs
Definition: dpdk.h:215
dpdk_port_type_t port_type
Definition: dpdk.h:266
u32 * d_trace_buffers
Definition: dpdk.h:212
u32 full_frames_cnt
Definition: dpdk.h:136
int input_cpu_count
Definition: dpdk.h:428
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:142
vlib_frame_t * frame
Definition: dpdk.h:127
u16 tx_q_used
Definition: dpdk.h:229
u16 nb_rx_desc
Definition: dpdk.h:231
u64 aggregate_rx_packets
Definition: dpdk.h:286
void dpdk_thread_input(dpdk_main_t *dm, dpdk_device_t *xd)
u64 * counters
Definition: error.h:78
u32 ** recycle
Definition: dpdk.h:382
clib_error_t * dpdk_get_hw_interface_stats(u32 hw_if_index, struct rte_eth_stats *dest)
Definition: device.c:1367
dpdk_device_t * devices
Definition: dpdk.h:378
u8 nchannels_set_manually
Definition: dpdk.h:346
u16 * cpu_socket_id_by_queue
Definition: dpdk.h:233
struct rte_kni * kni
Definition: dpdk.h:238
volatile u32 ** lockp
Definition: dpdk.h:196
dpdk_device_config_t * dev_confs
Definition: dpdk.h:367
struct rte_mbuf *** rx_vectors
Definition: dpdk.h:209
u16 queue_hi_thresh
Definition: dpdk.h:307
#define VHOST_MEMORY_MAX_NREGIONS
Definition: vhost-user.h:19
int dpdk_set_stat_poll_interval(f64 interval)
Definition: init.c:1768
u8 coremask_set_manually
Definition: dpdk.h:345
dpdk_pmd_t
Definition: dpdk.h:104
uword admin_up_down_process(vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
Definition: device.c:1293
format_function_t format_dpdk_device
Definition: dpdk.h:621
void dpdk_efd_update_counters(dpdk_device_t *xd, u32 n_buffers, u16 enabled)
Definition: node.c:197
struct rte_eth_xstat * xstats
Definition: dpdk.h:259
u8 * interface_name_suffix
Definition: dpdk.h:226
u32 discard_cnt
Definition: dpdk.h:141
void dpdk_set_flowcontrol_callback(vlib_main_t *vm, dpdk_flowcontrol_callback_t callback)
Definition: device.c:1277
format_function_t format_dpdk_device_name
Definition: dpdk.h:620
unsigned int u32
Definition: types.h:88
u32 * vu_inactive_interfaces_device_index
Definition: dpdk.h:411
u64 tx_head
Definition: dpdk.h:189
u32 poll_sleep
Definition: dpdk.h:435
void * dpdk_input_rss_multiarch_select()
dpdk_efd_t efd
Definition: dpdk.h:416
u8 af_packet_port_id
Definition: dpdk.h:250
void dpdk_device_lock_init(dpdk_device_t *xd)
Definition: init.c:210
u8 use_virtio_vhost
Definition: dpdk.h:359
struct rte_mbuf * dpdk_zerocopy_replicate_packet_mb(vlib_buffer_t *b)
Definition: device.c:159
void dpdk_update_link_state(dpdk_device_t *xd, f64 now)
Definition: init.c:1449
clib_error_t * dpdk_set_mac_address(vnet_hw_interface_t *hi, char *address)
Definition: device.c:48
u32 is_efd_discardable(vlib_thread_main_t *tm, vlib_buffer_t *b0, struct rte_mbuf *mb)
Definition: node.c:233
u8 *( format_function_t)(u8 *s, va_list *args)
Definition: format.h:48
u64 uword
Definition: types.h:112
dpdk_port_type_t
Definition: dpdk.h:113
dpdk_rx_next_t
Definition: dpdk.h:445
u8 kni_port_id
Definition: dpdk.h:239
unsigned short u16
Definition: types.h:57
vlib_buffer_t buffer
Definition: dpdk.h:471
u32 ethernet_input_node_index
Definition: dpdk.h:398
double f64
Definition: types.h:142
unsigned char u8
Definition: types.h:56
dpdk_efd_agent_t efd_agent
Definition: dpdk.h:268
u8 admin_up_down_in_progress
Definition: dpdk.h:422
void set_efd_bitmap(u8 *bitmap, u32 value, u32 op)
Definition: node.c:854
u16 pad
Definition: dpdk.h:309
u32 buffer_flags_template
Definition: dpdk.h:385
u32 vlib_buffer_free_list_index
Definition: dpdk.h:391
#define foreach_dpdk_device_config_item
Definition: dpdk.h:312
uword clib_bitmap_t
Definition: bitmap.h:50
static vlib_node_t * vlib_get_node(vlib_main_t *vm, u32 i)
Get vlib node by index.
Definition: node_funcs.h:58
#define vec_foreach(var, vec)
Vector iterator.
i8 cpu_socket
Definition: dpdk.h:219
u32 total_packet_cnt
Definition: dpdk.h:142
struct _unformat_input_t unformat_input_t
u8 * uio_driver_name
Definition: dpdk.h:340
u32 flags
Definition: vhost-user.h:76
int tx_pcap_enable
Definition: dpdk.h:401
vnet_main_t * vnet_main
Definition: dpdk.h:439
u16 nb_tx_desc
Definition: dpdk.h:232
uword * device_config_index_by_pci_addr
Definition: dpdk.h:368
uword * dpdk_device_by_kni_port_id
Definition: dpdk.h:408
uword * vu_sw_if_index_by_listener_fd
Definition: dpdk.h:409
f64 link_state_poll_interval
Definition: dpdk.h:431
dpdk_config_main_t * conf
Definition: dpdk.h:440
uword * vu_sw_if_index_by_sock_fd
Definition: dpdk.h:410
vlib_main_t * vlib_main
Definition: dpdk.h:438