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