xref: /dpdk/doc/guides/nics/features.rst (revision e9fd1ebf981f361844aea9ec94e17f4bda5e1479)
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:RTE_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 RTE_ETH_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:RTE_ETH_TX_OFFLOAD_MT_LOCKFREE``.
108* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_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:RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE``.
121* **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_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_scattered_rx:
162
163Scattered Rx
164------------
165
166Supports receiving segmented mbufs.
167
168* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SCATTER``.
169* **[implements] datapath**: ``Scattered Rx function``.
170* **[implements] rte_eth_dev_data**: ``scattered_rx``.
171* **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
172* **[related]    eth_dev_ops**: ``rx_pkt_burst``.
173
174
175.. _nic_features_buffer_split:
176
177Buffer split on Rx
178------------------
179
180Scatters the packets being received on specified boundaries to segmented mbufs.
181
182* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
183* **[uses]       rte_eth_rxconf**: ``rx_conf.rx_seg, rx_conf.rx_nseg``.
184* **[implements] eth_dev_ops**: ``buffer_split_supported_hdr_ptypes_get``,
185* **[implements] datapath**: ``Buffer Split functionality``.
186* **[provides]   rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
187* **[related] API**: ``rte_eth_rx_queue_setup()``, ``rte_eth_buffer_split_get_supported_hdr_ptypes()``.
188
189
190.. _nic_features_lro:
191
192LRO
193---
194
195Supports Large Receive Offload.
196
197* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TCP_LRO``.
198  ``dev_conf.rxmode.max_lro_pkt_size``.
199* **[implements] datapath**: ``LRO functionality``.
200* **[implements] rte_eth_dev_data**: ``lro``.
201* **[provides]   mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_LRO``, ``mbuf.tso_segsz``.
202* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_TCP_LRO``.
203* **[provides]   rte_eth_dev_info**: ``max_lro_pkt_size``.
204
205
206.. _nic_features_tso:
207
208TSO
209---
210
211Supports TCP Segmentation Offloading.
212
213* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_TCP_TSO``.
214* **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
215* **[uses]       mbuf**: ``mbuf.ol_flags:`` ``RTE_MBUF_F_TX_TCP_SEG``, ``RTE_MBUF_F_TX_IPV4``, ``RTE_MBUF_F_TX_IPV6``, ``RTE_MBUF_F_TX_IP_CKSUM``.
216* **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
217* **[implements] datapath**: ``TSO functionality``.
218* **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_TCP_TSO,RTE_ETH_TX_OFFLOAD_UDP_TSO``.
219
220
221.. _nic_features_promiscuous_mode:
222
223Promiscuous mode
224----------------
225
226Supports enabling/disabling promiscuous mode for a port.
227
228* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
229* **[implements] rte_eth_dev_data**: ``promiscuous``.
230* **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
231  ``rte_eth_promiscuous_get()``.
232
233
234.. _nic_features_allmulticast_mode:
235
236Allmulticast mode
237-----------------
238
239Supports enabling/disabling receiving multicast frames.
240
241* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
242* **[implements] rte_eth_dev_data**: ``all_multicast``.
243* **[related]    API**: ``rte_eth_allmulticast_enable()``,
244  ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
245
246
247.. _nic_features_unicast_mac_filter:
248
249Unicast MAC filter
250------------------
251
252Supports adding MAC addresses to enable incoming filtering of packets.
253
254* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
255* **[implements] rte_eth_dev_data**: ``mac_addrs``.
256* **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
257  ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
258  ``rte_eth_macaddr_get()``.
259
260
261.. _nic_features_multicast_mac_filter:
262
263Multicast MAC filter
264--------------------
265
266Supports setting multicast addresses to filter.
267
268* **[implements] eth_dev_ops**: ``set_mc_addr_list``.
269* **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
270
271
272.. _nic_features_rss_hash:
273
274RSS hash
275--------
276
277Supports RSS hashing on RX.
278
279* **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_RSS_FLAG``.
280* **[uses]     user config**: ``rss_conf.rss_hf``.
281* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``.
282* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
283* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_RSS_HASH``, ``mbuf.rss``.
284* **[related]  API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update``
285  ``rte_eth_dev_rss_hash_conf_get()``.
286
287Supports RSS hash algorithm on Rx.
288
289* **[implements] eth_dev_ops**: ``dev_configure``, ``rss_hash_update``, ``rss_hash_conf_get``.
290* **[uses]       user config**: ``rss_conf.algorithm``
291* **[provides]   rte_eth_dev_info**: ``rss_algo_capa``.
292* **[related]    API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update()``,
293  ``rte_eth_dev_rss_hash_conf_get()``.
294
295
296.. _nic_features_inner_rss:
297
298Inner RSS
299---------
300
301Supports RSS hashing on inner headers with flow API.
302
303* **[uses]    rte_flow_action_rss**: ``level``.
304* **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``.
305* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_RSS_HASH``, ``mbuf.rss``.
306
307
308.. _nic_features_rss_key_update:
309
310RSS key update
311--------------
312
313Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
314Receive Side Scaling (RSS) hash key.
315
316* **[implements] eth_dev_ops**: ``dev_configure``, ``rss_hash_update``, ``rss_hash_conf_get``.
317* **[uses]       user config**: ``rss_conf.rss_key``, ``rss_conf.rss_key_len``.
318* **[provides]   rte_eth_dev_info**: ``hash_key_size``.
319* **[related]    API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update()``,
320  ``rte_eth_dev_rss_hash_conf_get()``.
321
322
323.. _nic_features_rss_reta_update:
324
325RSS reta update
326---------------
327
328Supports updating Redirection Table of the Receive Side Scaling (RSS).
329
330* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
331* **[provides]   rte_eth_dev_info**: ``reta_size``.
332* **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
333
334
335.. _nic_features_vmdq:
336
337VMDq
338----
339
340Supports Virtual Machine Device Queues (VMDq).
341
342* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_VMDQ_FLAG``.
343* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
344* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
345* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
346* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
347
348
349.. _nic_features_sriov:
350
351SR-IOV
352------
353
354Driver supports creating Virtual Functions.
355
356* **[implements] rte_eth_dev_data**: ``sriov``.
357
358.. _nic_features_dcb:
359
360DCB
361---
362
363Supports Data Center Bridging (DCB).
364
365* **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_DCB_FLAG``.
366* **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
367* **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
368* **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
369* **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
370* **[implements] eth_dev_ops**: ``get_dcb_info``.
371* **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
372
373
374.. _nic_features_vlan_filter:
375
376VLAN filter
377-----------
378
379Supports filtering of a VLAN Tag identifier.
380
381* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_VLAN_FILTER``.
382* **[implements] eth_dev_ops**: ``vlan_filter_set``.
383* **[related]    API**: ``rte_eth_dev_vlan_filter()``.
384
385
386.. _nic_features_flow_control:
387
388Flow control
389------------
390
391Supports configuring link flow control.
392
393* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
394  ``priority_flow_ctrl_set``, ``priority_flow_ctrl_queue_info_get``,
395  ``priority_flow_ctrl_queue_configure``
396* **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
397  ``rte_eth_dev_priority_flow_ctrl_set()``,
398  ``rte_eth_dev_priority_flow_ctrl_queue_info_get()``,
399  ``rte_eth_dev_priority_flow_ctrl_queue_configure()``.
400
401
402.. _nic_features_rate_limitation:
403
404Rate limitation
405---------------
406
407Supports Tx rate limitation for a queue.
408
409* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
410* **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
411
412
413.. _nic_features_inline_crypto_doc:
414
415Inline crypto
416-------------
417
418Supports inline crypto processing defined by rte_security library to perform crypto
419operations of security protocol while packet is received in NIC. NIC is not aware
420of protocol operations. See Security library and PMD documentation for more details.
421
422* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SECURITY``,
423* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_SECURITY``.
424* **[uses]       mbuf**: ``mbuf.l2_len``.
425* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
426  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
427* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_SECURITY``,
428  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_SECURITY``.
429* **[provides]   mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD``,
430  ``mbuf.ol_flags:RTE_MBUF_F_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED``.
431* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
432
433
434.. _nic_features_inline_protocol_doc:
435
436Inline protocol
437---------------
438
439Supports inline protocol processing defined by rte_security library to perform
440protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
441packet is received at NIC. The NIC is capable of understanding the security
442protocol operations. See security library and PMD documentation for more details.
443
444* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SECURITY``,
445* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_SECURITY``.
446* **[uses]       mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.ol_flags``.
447* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
448  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``,
449  ``capabilities_get``.
450* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_SECURITY``,
451  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_SECURITY``.
452* **[provides]   mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD``,
453  ``mbuf.ol_flags:RTE_MBUF_F_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED``.
454* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
455
456
457.. _nic_features_crc_offload:
458
459CRC offload
460-----------
461
462Supports CRC stripping by hardware.
463A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
464
465* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_KEEP_CRC``.
466
467
468.. _nic_features_vlan_offload:
469
470VLAN offload
471------------
472
473Supports VLAN offload to hardware.
474
475* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_VLAN_STRIP,RTE_ETH_RX_OFFLOAD_VLAN_FILTER,RTE_ETH_RX_OFFLOAD_VLAN_EXTEND``.
476* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_VLAN_INSERT``.
477* **[uses]       mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_VLAN``, ``mbuf.vlan_tci``.
478* **[implements] eth_dev_ops**: ``vlan_offload_set``.
479* **[provides]   mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN`` ``mbuf.vlan_tci``.
480* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_VLAN_STRIP``,
481  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_VLAN_INSERT``.
482* **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
483  ``rte_eth_dev_get_vlan_offload()``.
484
485
486.. _nic_features_qinq_offload:
487
488QinQ offload
489------------
490
491Supports QinQ (queue in queue) offload.
492
493* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_QINQ_STRIP``.
494* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_QINQ_INSERT``.
495* **[uses]     mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_QINQ``, ``mbuf.vlan_tci_outer``.
496* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_QINQ``,
497  ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN``
498  ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
499* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_QINQ_STRIP``,
500  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_QINQ_INSERT``.
501
502
503.. _nic_features_fec:
504
505FEC
506---
507
508Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode.
509It adds error correction information to data packets at the transmit end, and uses the error correction
510information to correct the bit errors generated during data packet transmission at the receive end. This
511improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required.
512
513* **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``.
514* **[provides]   rte_eth_fec_capa**: ``speed:RTE_ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``.
515* **[related]    API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``.
516
517
518.. _nic_features_ip_reassembly:
519
520IP reassembly
521-------------
522
523Supports IP reassembly in hardware.
524
525* **[provides] eth_dev_ops**: ``ip_reassembly_capability_get``,
526  ``ip_reassembly_conf_get``, ``ip_reassembly_conf_set``.
527* **[related]    API**: ``rte_eth_ip_reassembly_capability_get()``,
528  ``rte_eth_ip_reassembly_conf_get()``, ``rte_eth_ip_reassembly_conf_set()``.
529
530
531.. _nic_features_l3_checksum_offload:
532
533L3 checksum offload
534-------------------
535
536Supports L3 checksum offload.
537
538* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``.
539* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``.
540* **[uses]     mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``,
541  ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``.
542* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
543* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN`` |
544  ``RTE_MBUF_F_RX_IP_CKSUM_BAD`` | ``RTE_MBUF_F_RX_IP_CKSUM_GOOD`` |
545  ``RTE_MBUF_F_RX_IP_CKSUM_NONE``.
546* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``,
547  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``.
548
549
550.. _nic_features_l4_checksum_offload:
551
552L4 checksum offload
553-------------------
554
555Supports L4 checksum offload.
556
557* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_UDP_CKSUM,RTE_ETH_RX_OFFLOAD_TCP_CKSUM,RTE_ETH_RX_OFFLOAD_SCTP_CKSUM``.
558* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_UDP_CKSUM,RTE_ETH_TX_OFFLOAD_TCP_CKSUM,RTE_ETH_TX_OFFLOAD_SCTP_CKSUM``.
559* **[uses]     mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``,
560  ``mbuf.ol_flags:RTE_MBUF_F_TX_L4_NO_CKSUM`` | ``RTE_MBUF_F_TX_TCP_CKSUM`` |
561  ``RTE_MBUF_F_TX_SCTP_CKSUM`` | ``RTE_MBUF_F_TX_UDP_CKSUM``.
562* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
563* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN`` |
564  ``RTE_MBUF_F_RX_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_L4_CKSUM_GOOD`` |
565  ``RTE_MBUF_F_RX_L4_CKSUM_NONE``.
566* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_UDP_CKSUM,RTE_ETH_RX_OFFLOAD_TCP_CKSUM,RTE_ETH_RX_OFFLOAD_SCTP_CKSUM``,
567  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_UDP_CKSUM,RTE_ETH_TX_OFFLOAD_TCP_CKSUM,RTE_ETH_TX_OFFLOAD_SCTP_CKSUM``.
568
569.. _nic_features_hw_timestamp:
570
571Timestamp offload
572-----------------
573
574Supports Timestamp.
575
576* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TIMESTAMP``.
577* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_TIMESTAMP``.
578* **[provides] mbuf**: ``mbuf.timestamp``.
579* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: RTE_ETH_RX_OFFLOAD_TIMESTAMP``.
580* **[related] eth_dev_ops**: ``read_clock``.
581
582.. _nic_features_macsec_offload:
583
584MACsec offload
585--------------
586
587Supports MACsec.
588
589* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``.
590* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``.
591* **[uses]     mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_MACSEC``.
592* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``,
593  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``.
594
595
596.. _nic_features_inner_l3_checksum:
597
598Inner L3 checksum
599-----------------
600
601Supports inner packet L3 checksum.
602
603* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
604* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
605* **[uses]     mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``,
606  ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``,
607  ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IP_CKSUM``,
608  ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``.
609* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
610* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD``.
611* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
612  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
613
614
615.. _nic_features_inner_l4_checksum:
616
617Inner L4 checksum
618-----------------
619
620Supports inner packet L4 checksum.
621
622* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``.
623* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN`` |
624  ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_INVALID``.
625* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``.
626* **[uses]     mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``.
627  ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_UDP_CKSUM``.
628* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
629* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``,
630  ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``.
631
632
633.. _nic_features_shared_rx_queue:
634
635Shared Rx queue
636---------------
637
638Supports shared Rx queue for ports in same Rx domain of a switch domain.
639
640* **[uses]     rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RXQ_SHARE``.
641* **[uses]     rte_eth_dev_info,rte_eth_switch_info**: ``rx_domain``, ``domain_id``.
642* **[uses]     rte_eth_rxconf**: ``share_group``, ``share_qid``.
643* **[provides] mbuf**: ``mbuf.port``.
644
645
646.. _nic_features_packet_type_parsing:
647
648Packet type parsing
649-------------------
650
651Supports packet type parsing and returns a list of supported types.
652Allows application to set ptypes it is interested in.
653
654* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
655* **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
656  ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
657* **[provides]   mbuf**: ``mbuf.packet_type``.
658
659
660.. _nic_features_timesync:
661
662Timesync
663--------
664
665Supports IEEE1588/802.1AS timestamping.
666
667* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
668  ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
669  ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
670* **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
671  ``rte_eth_timesync_read_rx_timestamp()``,
672  ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
673  ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
674
675
676.. _nic_features_rx_descriptor_status:
677
678Rx descriptor status
679--------------------
680
681Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
682used, status can be "Available", "Done" or "Unavailable".
683
684* **[implements] rte_eth_dev**: ``rx_descriptor_status``.
685* **[related]    API**: ``rte_eth_rx_descriptor_status()``.
686
687
688.. _nic_features_tx_descriptor_status:
689
690Tx descriptor status
691--------------------
692
693Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
694or "Unavailable."
695
696* **[implements] rte_eth_dev**: ``tx_descriptor_status``.
697* **[related]    API**: ``rte_eth_tx_descriptor_status()``.
698
699
700.. _nic_features_tx_queue_count:
701
702Tx queue count
703--------------
704
705Supports getting the number of used descriptors of a Tx queue.
706
707* **[implements] eth_dev_ops**: ``tx_queue_count``.
708* **[related] API**: ``rte_eth_tx_queue_count()``.
709
710
711.. _nic_features_basic_stats:
712
713Basic stats
714-----------
715
716Support basic statistics such as: ipackets, opackets, ibytes, obytes,
717imissed, ierrors, oerrors, rx_nombuf.
718
719And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
720
721These apply to all drivers.
722
723* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
724* **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
725
726
727.. _nic_features_extended_stats:
728
729Extended stats
730--------------
731
732Supports Extended Statistics, changes from driver to driver.
733
734* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
735* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
736* **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
737  ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
738  ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
739
740
741.. _nic_features_stats_per_queue:
742
743Stats per queue
744---------------
745
746Supports configuring per-queue stat counter mapping.
747
748* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
749* **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
750  ``rte_eth_dev_set_tx_queue_stats_mapping()``.
751
752
753.. _nic_features_congestion_management:
754
755Congestion management
756---------------------
757
758Supports congestion management.
759
760* **[implements] eth_dev_ops**: ``cman_info_get``, ``cman_config_set``, ``cman_config_get``.
761* **[related]    API**: ``rte_eth_cman_info_get()``, ``rte_eth_cman_config_init()``,
762  ``rte_eth_cman_config_set()``, ``rte_eth_cman_config_get()``.
763
764
765.. _nic_features_fw_version:
766
767FW version
768----------
769
770Supports getting device hardware firmware information.
771
772* **[implements] eth_dev_ops**: ``fw_version_get``.
773* **[related]    API**: ``rte_eth_dev_fw_version_get()``.
774
775
776.. _nic_features_eeprom_dump:
777
778EEPROM dump
779-----------
780
781Supports getting/setting device eeprom data.
782
783* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
784* **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
785  ``rte_eth_dev_set_eeprom()``.
786
787
788.. _nic_features_module_eeprom_dump:
789
790Module EEPROM dump
791------------------
792
793Supports getting information and data of plugin module eeprom.
794
795* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
796* **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
797
798
799.. _nic_features_register_dump:
800
801Registers dump
802--------------
803
804Supports retrieving device registers and registering attributes (number of
805registers and register size).
806
807* **[implements] eth_dev_ops**: ``get_reg``.
808* **[related]    API**: ``rte_eth_dev_get_reg_info()``.
809
810
811.. _nic_features_led:
812
813LED
814---
815
816Supports turning on/off a software controllable LED on a device.
817
818* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
819* **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
820
821
822.. _nic_features_multiprocess_aware:
823
824Multiprocess aware
825------------------
826
827Driver can be used for primary-secondary process model.
828
829
830.. _nic_features_freebsd:
831
832FreeBSD
833-------
834
835Supports running on FreeBSD.
836
837
838.. _nic_features_linux:
839
840Linux
841-----
842
843Supports running on Linux.
844
845
846.. _nic_features_windows:
847
848Windows
849-------
850
851Supports running on Windows.
852
853
854.. _nic_features_armv7:
855
856ARMv7
857-----
858
859Support armv7 architecture.
860
861
862.. _nic_features_armv8:
863
864ARMv8
865-----
866
867Support armv8a (64bit) architecture.
868
869
870.. _nic_features_loongarch64:
871
872LoongArch64
873-----------
874
875Support 64-bit LoongArch architecture.
876
877
878.. _nic_features_power8:
879
880Power8
881------
882
883Support PowerPC architecture.
884
885
886.. _nic_features_x86-32:
887
888rv64
889----
890
891Support 64-bit RISC-V architecture.
892
893
894x86-32
895------
896
897Support 32bits x86 architecture.
898
899
900.. _nic_features_x86-64:
901
902x86-64
903------
904
905Support 64bits x86 architecture.
906
907.. _nic_features_usage_doc:
908
909Usage doc
910---------
911
912Documentation describes usage.
913
914See ``doc/guides/nics/*.rst``
915
916
917.. _nic_features_design_doc:
918
919Design doc
920----------
921
922Documentation describes design.
923
924See ``doc/guides/nics/*.rst``.
925
926
927.. _nic_features_perf_doc:
928
929Perf doc
930--------
931
932Documentation describes performance values.
933
934See ``dpdk.org/doc/perf/*``.
935
936.. _nic_features_runtime_rx_queue_setup:
937
938Runtime Rx queue setup
939----------------------
940
941Supports Rx queue setup after device started.
942
943* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
944* **[related]  API**: ``rte_eth_dev_info_get()``.
945
946.. _nic_features_runtime_tx_queue_setup:
947
948Runtime Tx queue setup
949----------------------
950
951Supports Tx queue setup after device started.
952
953* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
954* **[related]  API**: ``rte_eth_dev_info_get()``.
955
956.. _nic_features_burst_mode_info:
957
958Burst mode info
959---------------
960
961Supports to get Rx/Tx packet burst mode information.
962
963* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
964* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
965
966.. _nic_features_get_monitor_addr:
967
968PMD power management using monitor addresses
969--------------------------------------------
970
971Supports getting a monitoring condition to use together with Ethernet PMD power
972management (see :doc:`../prog_guide/power_man` for more details).
973
974* **[implements] eth_dev_ops**: ``get_monitor_addr``
975
976.. _nic_features_other:
977
978Other dev ops not represented by a Feature
979------------------------------------------
980
981* ``rxq_info_get``
982* ``txq_info_get``
983* ``vlan_tpid_set``
984* ``vlan_strip_queue_set``
985* ``vlan_pvid_set``
986* ``rx_queue_count``
987* ``uc_hash_table_set``
988* ``uc_all_hash_table_set``
989* ``udp_tunnel_port_add``
990* ``udp_tunnel_port_del``
991* ``tx_pkt_prepare``
992