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