xref: /f-stack/dpdk/doc/guides/nics/features.rst (revision 2d9fd380)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2017 Intel Corporation.
3
4Features Overview
5=================
6
7This section explains the supported features that are listed in the
8:doc:`overview`.
9
10As a guide to implementers it also shows the structs where the features are
11defined and the APIs that can be use to get/set the values.
12
13Following tags used for feature details, these are from driver point of view:
14
15``[uses]``       : Driver uses some kind of input from the application.
16
17``[implements]`` : Driver implements a functionality.
18
19``[provides]``   : Driver provides some kind of data to the application. It is possible
20to provide data by implementing some function, but "provides" is used
21for cases where provided data can't be represented simply by a function.
22
23``[related]``    : Related API with that feature.
24
25
26.. _nic_features_speed_capabilities:
27
28Speed capabilities
29------------------
30
31Supports getting the speed capabilities that the current device is capable of.
32
33* **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
34* **[related]  API**: ``rte_eth_dev_info_get()``.
35
36
37.. _nic_features_link_status:
38
39Link status
40-----------
41
42Supports getting the link speed, duplex mode and link state (up/down).
43
44* **[implements] eth_dev_ops**: ``link_update``.
45* **[implements] rte_eth_dev_data**: ``dev_link``.
46* **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
47
48
49.. _nic_features_link_status_event:
50
51Link status event
52-----------------
53
54Supports Link Status Change interrupts.
55
56* **[uses]       user config**: ``dev_conf.intr_conf.lsc``.
57* **[uses]       rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
58* **[uses]       rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
59* **[implements] rte_eth_dev_data**: ``dev_link``.
60* **[provides]   rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
61* **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
62
63
64.. _nic_features_removal_event:
65
66Removal event
67-------------
68
69Supports device removal interrupts.
70
71* **[uses]     user config**: ``dev_conf.intr_conf.rmv``.
72* **[uses]     rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
73* **[uses]     rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
74* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
75
76
77.. _nic_features_queue_status_event:
78
79Queue status event
80------------------
81
82Supports queue enable/disable events.
83
84* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87.. _nic_features_rx_interrupt:
88
89Rx interrupt
90------------
91
92Supports Rx interrupts.
93
94* **[uses]       user config**: ``dev_conf.intr_conf.rxq``.
95* **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
96* **[related]    API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
97
98
99.. _nic_features_lock-free_tx_queue:
100
101Lock-free Tx queue
102------------------
103
104If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
106
107* **[uses]    rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MT_LOCKFREE``.
108* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
109* **[related]  API**: ``rte_eth_tx_burst()``.
110
111
112.. _nic_features_fast_mbuf_free:
113
114Fast mbuf free
115--------------
116
117Supports optimization for fast release of mbufs following successful Tx.
118Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
119
120* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
121* **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
122
123
124.. _nic_features_free_tx_mbuf_on_demand:
125
126Free Tx mbuf on demand
127----------------------
128
129Supports freeing consumed buffers on a Tx ring.
130
131* **[implements] eth_dev_ops**: ``tx_done_cleanup``.
132* **[related]    API**: ``rte_eth_tx_done_cleanup()``.
133
134
135.. _nic_features_queue_start_stop:
136
137Queue start/stop
138----------------
139
140Supports starting/stopping a specific Rx/Tx queue of a port.
141
142* **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
143  ``tx_queue_stop``.
144* **[related]    API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
145  ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
146
147
148.. _nic_features_mtu_update:
149
150MTU update
151----------
152
153Supports updating port MTU.
154
155* **[implements] eth_dev_ops**: ``mtu_set``.
156* **[implements] rte_eth_dev_data**: ``mtu``.
157* **[provides]   rte_eth_dev_info**: ``max_rx_pktlen``.
158* **[related]    API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
159
160
161.. _nic_features_jumbo_frame:
162
163Jumbo frame
164-----------
165
166Supports Rx jumbo frames.
167
168* **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
169  ``dev_conf.rxmode.max_rx_pkt_len``.
170* **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
171* **[related] API**: ``rte_eth_dev_set_mtu()``.
172
173
174.. _nic_features_scattered_rx:
175
176Scattered Rx
177------------
178
179Supports receiving segmented mbufs.
180
181* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
182* **[implements] datapath**: ``Scattered Rx function``.
183* **[implements] rte_eth_dev_data**: ``scattered_rx``.
184* **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
185* **[related]    eth_dev_ops**: ``rx_pkt_burst``.
186
187
188.. _nic_features_buffer_split:
189
190Buffer Split on Rx
191------------------
192
193Scatters the packets being received on specified boundaries to segmented mbufs.
194
195* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
196* **[uses]       rte_eth_rxconf**: ``rx_conf.rx_seg, rx_conf.rx_nseg``.
197* **[implements] datapath**: ``Buffer Split functionality``.
198* **[provides]   rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
199* **[related] API**: ``rte_eth_rx_queue_setup()``.
200
201
202.. _nic_features_lro:
203
204LRO
205---
206
207Supports Large Receive Offload.
208
209* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
210  ``dev_conf.rxmode.max_lro_pkt_size``.
211* **[implements] datapath**: ``LRO functionality``.
212* **[implements] rte_eth_dev_data**: ``lro``.
213* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
214* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
215* **[provides]   rte_eth_dev_info**: ``max_lro_pkt_size``.
216
217
218.. _nic_features_tso:
219
220TSO
221---
222
223Supports TCP Segmentation Offloading.
224
225* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
226* **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
227* **[uses]       mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
228* **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
229* **[implements] datapath**: ``TSO functionality``.
230* **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
231
232
233.. _nic_features_promiscuous_mode:
234
235Promiscuous mode
236----------------
237
238Supports enabling/disabling promiscuous mode for a port.
239
240* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
241* **[implements] rte_eth_dev_data**: ``promiscuous``.
242* **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
243  ``rte_eth_promiscuous_get()``.
244
245
246.. _nic_features_allmulticast_mode:
247
248Allmulticast mode
249-----------------
250
251Supports enabling/disabling receiving multicast frames.
252
253* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
254* **[implements] rte_eth_dev_data**: ``all_multicast``.
255* **[related]    API**: ``rte_eth_allmulticast_enable()``,
256  ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
257
258
259.. _nic_features_unicast_mac_filter:
260
261Unicast MAC filter
262------------------
263
264Supports adding MAC addresses to enable incoming filtering of packets.
265
266* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
267* **[implements] rte_eth_dev_data**: ``mac_addrs``.
268* **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
269  ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
270  ``rte_eth_macaddr_get()``.
271
272
273.. _nic_features_multicast_mac_filter:
274
275Multicast MAC filter
276--------------------
277
278Supports setting multicast addresses to filter.
279
280* **[implements] eth_dev_ops**: ``set_mc_addr_list``.
281* **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
282
283
284.. _nic_features_rss_hash:
285
286RSS hash
287--------
288
289Supports RSS hashing on RX.
290
291* **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
292* **[uses]     user config**: ``dev_conf.rx_adv_conf.rss_conf``.
293* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
294* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
295* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
296
297
298.. _nic_features_inner_rss:
299
300Inner RSS
301---------
302
303Supports RX RSS hashing on Inner headers.
304
305* **[uses]    rte_flow_action_rss**: ``level``.
306* **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
307* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
308
309
310.. _nic_features_rss_key_update:
311
312RSS key update
313--------------
314
315Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
316Receive Side Scaling (RSS) hash key.
317
318* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
319* **[provides]   rte_eth_dev_info**: ``hash_key_size``.
320* **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
321  ``rte_eth_dev_rss_hash_conf_get()``.
322
323
324.. _nic_features_rss_reta_update:
325
326RSS reta update
327---------------
328
329Supports updating Redirection Table of the Receive Side Scaling (RSS).
330
331* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
332* **[provides]   rte_eth_dev_info**: ``reta_size``.
333* **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
334
335
336.. _nic_features_vmdq:
337
338VMDq
339----
340
341Supports Virtual Machine Device Queues (VMDq).
342
343* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
344* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
345* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
346* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
347* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
348
349
350.. _nic_features_sriov:
351
352SR-IOV
353------
354
355Driver supports creating Virtual Functions.
356
357* **[implements] rte_eth_dev_data**: ``sriov``.
358
359.. _nic_features_dcb:
360
361DCB
362---
363
364Supports Data Center Bridging (DCB).
365
366* **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
367* **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
368* **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
369* **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
370* **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
371* **[implements] eth_dev_ops**: ``get_dcb_info``.
372* **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
373
374
375.. _nic_features_vlan_filter:
376
377VLAN filter
378-----------
379
380Supports filtering of a VLAN Tag identifier.
381
382* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
383* **[implements] eth_dev_ops**: ``vlan_filter_set``.
384* **[related]    API**: ``rte_eth_dev_vlan_filter()``.
385
386
387.. _nic_features_flow_control:
388
389Flow control
390------------
391
392Supports configuring link flow control.
393
394* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
395  ``priority_flow_ctrl_set``.
396* **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
397  ``rte_eth_dev_priority_flow_ctrl_set()``.
398
399
400.. _nic_features_flow_api:
401
402Flow API
403--------
404
405Supports the DPDK Flow API for generic filtering.
406
407* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
408* **[implements] rte_flow_ops**: ``All``.
409
410
411.. _nic_features_rate_limitation:
412
413Rate limitation
414---------------
415
416Supports Tx rate limitation for a queue.
417
418* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
419* **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
420
421
422.. _nic_features_traffic_mirroring:
423
424Traffic mirroring
425-----------------
426
427Supports adding traffic mirroring rules.
428
429* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
430* **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
431
432
433.. _nic_features_inline_crypto_doc:
434
435Inline crypto
436-------------
437
438Supports inline crypto processing defined by rte_security library to perform crypto
439operations of security protocol while packet is received in NIC. NIC is not aware
440of protocol operations. See Security library and PMD documentation for more details.
441
442* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
443* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
444* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
445  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
446* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
447  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
448* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
449  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
450* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
451
452
453.. _nic_features_inline_protocol_doc:
454
455Inline protocol
456---------------
457
458Supports inline protocol processing defined by rte_security library to perform
459protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
460packet is received at NIC. The NIC is capable of understanding the security
461protocol operations. See security library and PMD documentation for more details.
462
463* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
464* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
465* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
466  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
467  ``capabilities_get``.
468* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
469  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
470* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
471  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
472* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
473
474
475.. _nic_features_crc_offload:
476
477CRC offload
478-----------
479
480Supports CRC stripping by hardware.
481A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
482
483* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
484
485
486.. _nic_features_vlan_offload:
487
488VLAN offload
489------------
490
491Supports VLAN offload to hardware.
492
493* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
494* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
495* **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
496* **[implements] eth_dev_ops**: ``vlan_offload_set``.
497* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
498* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
499  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
500* **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
501  ``rte_eth_dev_get_vlan_offload()``.
502
503
504.. _nic_features_qinq_offload:
505
506QinQ offload
507------------
508
509Supports QinQ (queue in queue) offload.
510
511* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
512* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
513* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
514* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
515  ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
516  ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
517* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
518  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
519
520
521.. _nic_features_l3_checksum_offload:
522
523L3 checksum offload
524-------------------
525
526Supports L3 checksum offload.
527
528* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
529* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
530* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
531  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
532* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
533* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
534  ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
535  ``PKT_RX_IP_CKSUM_NONE``.
536* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
537  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
538
539
540.. _nic_features_l4_checksum_offload:
541
542L4 checksum offload
543-------------------
544
545Supports L4 checksum offload.
546
547* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
548* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
549* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
550  ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
551  ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
552* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
553* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
554  ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
555  ``PKT_RX_L4_CKSUM_NONE``.
556* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``,
557  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
558
559.. _nic_features_hw_timestamp:
560
561Timestamp offload
562-----------------
563
564Supports Timestamp.
565
566* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
567* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
568* **[provides] mbuf**: ``mbuf.timestamp``.
569* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
570* **[related] eth_dev_ops**: ``read_clock``.
571
572.. _nic_features_macsec_offload:
573
574MACsec offload
575--------------
576
577Supports MACsec.
578
579* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
580* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
581* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
582* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
583  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
584
585
586.. _nic_features_inner_l3_checksum:
587
588Inner L3 checksum
589-----------------
590
591Supports inner packet L3 checksum.
592
593* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
594* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
595* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
596  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
597  ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
598  ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
599* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
600* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
601* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
602  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
603
604
605.. _nic_features_inner_l4_checksum:
606
607Inner L4 checksum
608-----------------
609
610Supports inner packet L4 checksum.
611
612* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
613* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
614  ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
615* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
616* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
617  ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
618* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
619* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
620  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
621
622
623.. _nic_features_packet_type_parsing:
624
625Packet type parsing
626-------------------
627
628Supports packet type parsing and returns a list of supported types.
629Allows application to set ptypes it is interested in.
630
631* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
632* **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
633  ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
634* **[provides]   mbuf**: ``mbuf.packet_type``.
635
636
637.. _nic_features_timesync:
638
639Timesync
640--------
641
642Supports IEEE1588/802.1AS timestamping.
643
644* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
645  ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
646  ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
647* **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
648  ``rte_eth_timesync_read_rx_timestamp()``,
649  ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
650  ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
651
652
653.. _nic_features_rx_descriptor_status:
654
655Rx descriptor status
656--------------------
657
658Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
659used, status can be "Available", "Done" or "Unavailable". When
660``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
661not set".
662
663* **[implements] rte_eth_dev**: ``rx_descriptor_status``.
664* **[related]    API**: ``rte_eth_rx_descriptor_status()``.
665* **[implements] rte_eth_dev**: ``rx_descriptor_done``.
666* **[related]    API**: ``rte_eth_rx_descriptor_done()``.
667
668
669.. _nic_features_tx_descriptor_status:
670
671Tx descriptor status
672--------------------
673
674Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
675or "Unavailable."
676
677* **[implements] rte_eth_dev**: ``tx_descriptor_status``.
678* **[related]    API**: ``rte_eth_tx_descriptor_status()``.
679
680
681.. _nic_features_basic_stats:
682
683Basic stats
684-----------
685
686Support basic statistics such as: ipackets, opackets, ibytes, obytes,
687imissed, ierrors, oerrors, rx_nombuf.
688
689And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
690
691These apply to all drivers.
692
693* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
694* **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
695
696
697.. _nic_features_extended_stats:
698
699Extended stats
700--------------
701
702Supports Extended Statistics, changes from driver to driver.
703
704* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
705* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
706* **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
707  ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
708  ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
709
710
711.. _nic_features_stats_per_queue:
712
713Stats per queue
714---------------
715
716Supports configuring per-queue stat counter mapping.
717
718* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
719* **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
720  ``rte_eth_dev_set_tx_queue_stats_mapping()``.
721
722
723.. _nic_features_fw_version:
724
725FW version
726----------
727
728Supports getting device hardware firmware information.
729
730* **[implements] eth_dev_ops**: ``fw_version_get``.
731* **[related]    API**: ``rte_eth_dev_fw_version_get()``.
732
733
734.. _nic_features_eeprom_dump:
735
736EEPROM dump
737-----------
738
739Supports getting/setting device eeprom data.
740
741* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
742* **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
743  ``rte_eth_dev_set_eeprom()``.
744
745
746.. _nic_features_module_eeprom_dump:
747
748Module EEPROM dump
749------------------
750
751Supports getting information and data of plugin module eeprom.
752
753* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
754* **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
755
756
757.. _nic_features_register_dump:
758
759Registers dump
760--------------
761
762Supports retrieving device registers and registering attributes (number of
763registers and register size).
764
765* **[implements] eth_dev_ops**: ``get_reg``.
766* **[related]    API**: ``rte_eth_dev_get_reg_info()``.
767
768
769.. _nic_features_led:
770
771LED
772---
773
774Supports turning on/off a software controllable LED on a device.
775
776* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
777* **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
778
779
780.. _nic_features_multiprocess_aware:
781
782Multiprocess aware
783------------------
784
785Driver can be used for primary-secondary process model.
786
787
788.. _nic_features_bsd_nic_uio:
789
790BSD nic_uio
791-----------
792
793BSD ``nic_uio`` module supported.
794
795
796.. _nic_features_linux_uio:
797
798Linux UIO
799---------
800
801Works with ``igb_uio`` kernel module.
802
803* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
804
805.. _nic_features_linux_vfio:
806
807Linux VFIO
808----------
809
810Works with ``vfio-pci`` kernel module.
811
812* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
813
814.. _nic_features_other_kdrv:
815
816Other kdrv
817----------
818
819Kernel module other than above ones supported.
820
821
822.. _nic_features_armv7:
823
824ARMv7
825-----
826
827Support armv7 architecture.
828
829
830.. _nic_features_armv8:
831
832ARMv8
833-----
834
835Support armv8a (64bit) architecture.
836
837
838.. _nic_features_power8:
839
840Power8
841------
842
843Support PowerPC architecture.
844
845
846.. _nic_features_x86-32:
847
848x86-32
849------
850
851Support 32bits x86 architecture.
852
853
854.. _nic_features_x86-64:
855
856x86-64
857------
858
859Support 64bits x86 architecture.
860
861
862.. _nic_features_usage_doc:
863
864Usage doc
865---------
866
867Documentation describes usage.
868
869See ``doc/guides/nics/*.rst``
870
871
872.. _nic_features_design_doc:
873
874Design doc
875----------
876
877Documentation describes design.
878
879See ``doc/guides/nics/*.rst``.
880
881
882.. _nic_features_perf_doc:
883
884Perf doc
885--------
886
887Documentation describes performance values.
888
889See ``dpdk.org/doc/perf/*``.
890
891.. _nic_features_runtime_rx_queue_setup:
892
893Runtime Rx queue setup
894----------------------
895
896Supports Rx queue setup after device started.
897
898* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
899* **[related]  API**: ``rte_eth_dev_info_get()``.
900
901.. _nic_features_runtime_tx_queue_setup:
902
903Runtime Tx queue setup
904----------------------
905
906Supports Tx queue setup after device started.
907
908* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
909* **[related]  API**: ``rte_eth_dev_info_get()``.
910
911.. _nic_features_burst_mode_info:
912
913Burst mode info
914---------------
915
916Supports to get Rx/Tx packet burst mode information.
917
918* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
919* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
920
921.. _nic_features_other:
922
923Other dev ops not represented by a Feature
924------------------------------------------
925
926* ``rxq_info_get``
927* ``txq_info_get``
928* ``vlan_tpid_set``
929* ``vlan_strip_queue_set``
930* ``vlan_pvid_set``
931* ``rx_queue_count``
932* ``uc_hash_table_set``
933* ``uc_all_hash_table_set``
934* ``udp_tunnel_port_add``
935* ``udp_tunnel_port_del``
936* ``tx_pkt_prepare``
937