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