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