xref: /dpdk/doc/guides/nics/features.rst (revision 4e2cf9af)
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_lro:
189
190LRO
191---
192
193Supports Large Receive Offload.
194
195* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
196  ``dev_conf.rxmode.max_lro_pkt_size``.
197* **[implements] datapath**: ``LRO functionality``.
198* **[implements] rte_eth_dev_data**: ``lro``.
199* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
200* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
201* **[provides]   rte_eth_dev_info**: ``max_lro_pkt_size``.
202
203
204.. _nic_features_tso:
205
206TSO
207---
208
209Supports TCP Segmentation Offloading.
210
211* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
212* **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
213* **[uses]       mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
214* **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
215* **[implements] datapath**: ``TSO functionality``.
216* **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
217
218
219.. _nic_features_promiscuous_mode:
220
221Promiscuous mode
222----------------
223
224Supports enabling/disabling promiscuous mode for a port.
225
226* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
227* **[implements] rte_eth_dev_data**: ``promiscuous``.
228* **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
229  ``rte_eth_promiscuous_get()``.
230
231
232.. _nic_features_allmulticast_mode:
233
234Allmulticast mode
235-----------------
236
237Supports enabling/disabling receiving multicast frames.
238
239* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
240* **[implements] rte_eth_dev_data**: ``all_multicast``.
241* **[related]    API**: ``rte_eth_allmulticast_enable()``,
242  ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
243
244
245.. _nic_features_unicast_mac_filter:
246
247Unicast MAC filter
248------------------
249
250Supports adding MAC addresses to enable whitelist filtering to accept packets.
251
252* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
253* **[implements] rte_eth_dev_data**: ``mac_addrs``.
254* **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
255  ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
256  ``rte_eth_macaddr_get()``.
257
258
259.. _nic_features_multicast_mac_filter:
260
261Multicast MAC filter
262--------------------
263
264Supports setting multicast addresses to filter.
265
266* **[implements] eth_dev_ops**: ``set_mc_addr_list``.
267* **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
268
269
270.. _nic_features_rss_hash:
271
272RSS hash
273--------
274
275Supports RSS hashing on RX.
276
277* **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
278* **[uses]     user config**: ``dev_conf.rx_adv_conf.rss_conf``.
279* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
280* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
281* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
282
283
284.. _nic_features_inner_rss:
285
286Inner RSS
287---------
288
289Supports RX RSS hashing on Inner headers.
290
291* **[uses]    rte_flow_action_rss**: ``level``.
292* **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
293* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
294
295
296.. _nic_features_rss_key_update:
297
298RSS key update
299--------------
300
301Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
302Receive Side Scaling (RSS) hash key.
303
304* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
305* **[provides]   rte_eth_dev_info**: ``hash_key_size``.
306* **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
307  ``rte_eth_dev_rss_hash_conf_get()``.
308
309
310.. _nic_features_rss_reta_update:
311
312RSS reta update
313---------------
314
315Supports updating Redirection Table of the Receive Side Scaling (RSS).
316
317* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
318* **[provides]   rte_eth_dev_info**: ``reta_size``.
319* **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
320
321
322.. _nic_features_vmdq:
323
324VMDq
325----
326
327Supports Virtual Machine Device Queues (VMDq).
328
329* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
330* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
331* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
332* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
333* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
334
335
336.. _nic_features_sriov:
337
338SR-IOV
339------
340
341Driver supports creating Virtual Functions.
342
343* **[implements] rte_eth_dev_data**: ``sriov``.
344
345.. _nic_features_dcb:
346
347DCB
348---
349
350Supports Data Center Bridging (DCB).
351
352* **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
353* **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
354* **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
355* **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
356* **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
357* **[implements] eth_dev_ops**: ``get_dcb_info``.
358* **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
359
360
361.. _nic_features_vlan_filter:
362
363VLAN filter
364-----------
365
366Supports filtering of a VLAN Tag identifier.
367
368* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
369* **[implements] eth_dev_ops**: ``vlan_filter_set``.
370* **[related]    API**: ``rte_eth_dev_vlan_filter()``.
371
372
373.. _nic_features_flow_control:
374
375Flow control
376------------
377
378Supports configuring link flow control.
379
380* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
381  ``priority_flow_ctrl_set``.
382* **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
383  ``rte_eth_dev_priority_flow_ctrl_set()``.
384
385
386.. _nic_features_flow_api:
387
388Flow API
389--------
390
391Supports the DPDK Flow API for generic filtering.
392
393* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
394* **[implements] rte_flow_ops**: ``All``.
395
396
397.. _nic_features_rate_limitation:
398
399Rate limitation
400---------------
401
402Supports Tx rate limitation for a queue.
403
404* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
405* **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
406
407
408.. _nic_features_traffic_mirroring:
409
410Traffic mirroring
411-----------------
412
413Supports adding traffic mirroring rules.
414
415* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
416* **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
417
418
419.. _nic_features_inline_crypto_doc:
420
421Inline crypto
422-------------
423
424Supports inline crypto processing defined by rte_security library to perform crypto
425operations of security protocol while packet is received in NIC. NIC is not aware
426of protocol operations. See Security library and PMD documentation for more details.
427
428* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
429* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
430* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
431  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
432* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
433  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
434* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
435  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
436* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
437
438
439.. _nic_features_inline_protocol_doc:
440
441Inline protocol
442---------------
443
444Supports inline protocol processing defined by rte_security library to perform
445protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
446packet is received at NIC. The NIC is capable of understanding the security
447protocol operations. See security library and PMD documentation for more details.
448
449* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
450* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
451* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
452  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
453  ``capabilities_get``.
454* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
455  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
456* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
457  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
458* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
459
460
461.. _nic_features_crc_offload:
462
463CRC offload
464-----------
465
466Supports CRC stripping by hardware.
467A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
468
469* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
470
471
472.. _nic_features_vlan_offload:
473
474VLAN offload
475------------
476
477Supports VLAN offload to hardware.
478
479* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
480* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
481* **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
482* **[implements] eth_dev_ops**: ``vlan_offload_set``.
483* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
484* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
485  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
486* **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
487  ``rte_eth_dev_get_vlan_offload()``.
488
489
490.. _nic_features_qinq_offload:
491
492QinQ offload
493------------
494
495Supports QinQ (queue in queue) offload.
496
497* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
498* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
499* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
500* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
501  ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
502  ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
503* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
504  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
505
506
507.. _nic_features_l3_checksum_offload:
508
509L3 checksum offload
510-------------------
511
512Supports L3 checksum offload.
513
514* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
515* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
516* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
517  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
518* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
519* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
520  ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
521  ``PKT_RX_IP_CKSUM_NONE``.
522* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
523  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
524
525
526.. _nic_features_l4_checksum_offload:
527
528L4 checksum offload
529-------------------
530
531Supports L4 checksum offload.
532
533* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
534* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
535* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
536  ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
537  ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
538* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
539* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
540  ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
541  ``PKT_RX_L4_CKSUM_NONE``.
542* **[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``,
543  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
544
545.. _nic_features_hw_timestamp:
546
547Timestamp offload
548-----------------
549
550Supports Timestamp.
551
552* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
553* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
554* **[provides] mbuf**: ``mbuf.timestamp``.
555* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
556* **[related] eth_dev_ops**: ``read_clock``.
557
558.. _nic_features_macsec_offload:
559
560MACsec offload
561--------------
562
563Supports MACsec.
564
565* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
566* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
567* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
568* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
569  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
570
571
572.. _nic_features_inner_l3_checksum:
573
574Inner L3 checksum
575-----------------
576
577Supports inner packet L3 checksum.
578
579* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
580* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
581* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
582  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
583  ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
584  ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
585* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
586* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
587* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
588  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
589
590
591.. _nic_features_inner_l4_checksum:
592
593Inner L4 checksum
594-----------------
595
596Supports inner packet L4 checksum.
597
598* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
599* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
600  ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
601* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
602* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
603  ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
604* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
605* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
606  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
607
608
609.. _nic_features_packet_type_parsing:
610
611Packet type parsing
612-------------------
613
614Supports packet type parsing and returns a list of supported types.
615Allows application to set ptypes it is interested in.
616
617* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
618* **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
619  ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
620* **[provides]   mbuf**: ``mbuf.packet_type``.
621
622
623.. _nic_features_timesync:
624
625Timesync
626--------
627
628Supports IEEE1588/802.1AS timestamping.
629
630* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
631  ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
632  ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
633* **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
634  ``rte_eth_timesync_read_rx_timestamp()``,
635  ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
636  ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
637
638
639.. _nic_features_rx_descriptor_status:
640
641Rx descriptor status
642--------------------
643
644Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
645used, status can be "Available", "Done" or "Unavailable". When
646``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
647not set".
648
649* **[implements] rte_eth_dev**: ``rx_descriptor_status``.
650* **[related]    API**: ``rte_eth_rx_descriptor_status()``.
651* **[implements] rte_eth_dev**: ``rx_descriptor_done``.
652* **[related]    API**: ``rte_eth_rx_descriptor_done()``.
653
654
655.. _nic_features_tx_descriptor_status:
656
657Tx descriptor status
658--------------------
659
660Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
661or "Unavailable."
662
663* **[implements] rte_eth_dev**: ``tx_descriptor_status``.
664* **[related]    API**: ``rte_eth_tx_descriptor_status()``.
665
666
667.. _nic_features_basic_stats:
668
669Basic stats
670-----------
671
672Support basic statistics such as: ipackets, opackets, ibytes, obytes,
673imissed, ierrors, oerrors, rx_nombuf.
674
675And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
676
677These apply to all drivers.
678
679* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
680* **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
681
682
683.. _nic_features_extended_stats:
684
685Extended stats
686--------------
687
688Supports Extended Statistics, changes from driver to driver.
689
690* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
691* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
692* **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
693  ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
694  ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
695
696
697.. _nic_features_stats_per_queue:
698
699Stats per queue
700---------------
701
702Supports configuring per-queue stat counter mapping.
703
704* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
705* **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
706  ``rte_eth_dev_set_tx_queue_stats_mapping()``.
707
708
709.. _nic_features_fw_version:
710
711FW version
712----------
713
714Supports getting device hardware firmware information.
715
716* **[implements] eth_dev_ops**: ``fw_version_get``.
717* **[related]    API**: ``rte_eth_dev_fw_version_get()``.
718
719
720.. _nic_features_eeprom_dump:
721
722EEPROM dump
723-----------
724
725Supports getting/setting device eeprom data.
726
727* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
728* **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
729  ``rte_eth_dev_set_eeprom()``.
730
731
732.. _nic_features_module_eeprom_dump:
733
734Module EEPROM dump
735------------------
736
737Supports getting information and data of plugin module eeprom.
738
739* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
740* **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
741
742
743.. _nic_features_register_dump:
744
745Registers dump
746--------------
747
748Supports retrieving device registers and registering attributes (number of
749registers and register size).
750
751* **[implements] eth_dev_ops**: ``get_reg``.
752* **[related]    API**: ``rte_eth_dev_get_reg_info()``.
753
754
755.. _nic_features_led:
756
757LED
758---
759
760Supports turning on/off a software controllable LED on a device.
761
762* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
763* **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
764
765
766.. _nic_features_multiprocess_aware:
767
768Multiprocess aware
769------------------
770
771Driver can be used for primary-secondary process model.
772
773
774.. _nic_features_bsd_nic_uio:
775
776BSD nic_uio
777-----------
778
779BSD ``nic_uio`` module supported.
780
781
782.. _nic_features_linux_uio:
783
784Linux UIO
785---------
786
787Works with ``igb_uio`` kernel module.
788
789* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
790
791.. _nic_features_linux_vfio:
792
793Linux VFIO
794----------
795
796Works with ``vfio-pci`` kernel module.
797
798* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
799
800.. _nic_features_other_kdrv:
801
802Other kdrv
803----------
804
805Kernel module other than above ones supported.
806
807
808.. _nic_features_armv7:
809
810ARMv7
811-----
812
813Support armv7 architecture.
814
815Use ``defconfig_arm-armv7a-*-*``.
816
817
818.. _nic_features_armv8:
819
820ARMv8
821-----
822
823Support armv8a (64bit) architecture.
824
825Use ``defconfig_arm64-armv8a-*-*``
826
827
828.. _nic_features_power8:
829
830Power8
831------
832
833Support PowerPC architecture.
834
835Use ``defconfig_ppc_64-power8-*-*``
836
837.. _nic_features_x86-32:
838
839x86-32
840------
841
842Support 32bits x86 architecture.
843
844Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
845
846
847.. _nic_features_x86-64:
848
849x86-64
850------
851
852Support 64bits x86 architecture.
853
854Use ``defconfig_x86_64-native-*-*``.
855
856
857.. _nic_features_usage_doc:
858
859Usage doc
860---------
861
862Documentation describes usage.
863
864See ``doc/guides/nics/*.rst``
865
866
867.. _nic_features_design_doc:
868
869Design doc
870----------
871
872Documentation describes design.
873
874See ``doc/guides/nics/*.rst``.
875
876
877.. _nic_features_perf_doc:
878
879Perf doc
880--------
881
882Documentation describes performance values.
883
884See ``dpdk.org/doc/perf/*``.
885
886.. _nic_features_runtime_rx_queue_setup:
887
888Runtime Rx queue setup
889----------------------
890
891Supports Rx queue setup after device started.
892
893* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
894* **[related]  API**: ``rte_eth_dev_info_get()``.
895
896.. _nic_features_runtime_tx_queue_setup:
897
898Runtime Tx queue setup
899----------------------
900
901Supports Tx queue setup after device started.
902
903* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
904* **[related]  API**: ``rte_eth_dev_info_get()``.
905
906.. _nic_features_burst_mode_info:
907
908Burst mode info
909---------------
910
911Supports to get Rx/Tx packet burst mode information.
912
913* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
914* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
915
916.. _nic_features_other:
917
918Other dev ops not represented by a Feature
919------------------------------------------
920
921* ``rxq_info_get``
922* ``txq_info_get``
923* ``vlan_tpid_set``
924* ``vlan_strip_queue_set``
925* ``vlan_pvid_set``
926* ``rx_queue_count``
927* ``l2_tunnel_offload_set``
928* ``uc_hash_table_set``
929* ``uc_all_hash_table_set``
930* ``udp_tunnel_port_add``
931* ``udp_tunnel_port_del``
932* ``l2_tunnel_eth_type_conf``
933* ``l2_tunnel_offload_set``
934* ``tx_pkt_prepare``
935