xref: /dpdk/doc/guides/nics/features.rst (revision 081e42dab11d1add2d038fdf2bd4c86b20043d08)
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_inline_crypto_doc:
412
413Inline crypto
414-------------
415
416Supports inline crypto processing defined by rte_security library to perform crypto
417operations of security protocol while packet is received in NIC. NIC is not aware
418of protocol operations. See Security library and PMD documentation for more details.
419
420* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
421* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
422* **[uses]       mbuf**: ``mbuf.l2_len``.
423* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
424  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
425* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
426  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
427* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
428  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
429* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
430
431
432.. _nic_features_inline_protocol_doc:
433
434Inline protocol
435---------------
436
437Supports inline protocol processing defined by rte_security library to perform
438protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
439packet is received at NIC. The NIC is capable of understanding the security
440protocol 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* **[uses]       mbuf**: ``mbuf.l2_len``.
445* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
446  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
447  ``capabilities_get``.
448* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
449  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
450* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
451  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
452* **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
453
454
455.. _nic_features_crc_offload:
456
457CRC offload
458-----------
459
460Supports CRC stripping by hardware.
461A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
462
463* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
464
465
466.. _nic_features_vlan_offload:
467
468VLAN offload
469------------
470
471Supports VLAN offload to hardware.
472
473* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
474* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
475* **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
476* **[implements] eth_dev_ops**: ``vlan_offload_set``.
477* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
478* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
479  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
480* **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
481  ``rte_eth_dev_get_vlan_offload()``.
482
483
484.. _nic_features_qinq_offload:
485
486QinQ offload
487------------
488
489Supports QinQ (queue in queue) offload.
490
491* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
492* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
493* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
494* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
495  ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
496  ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
497* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
498  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
499
500
501.. _nic_features_fec:
502
503FEC
504---
505
506Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode.
507It adds error correction information to data packets at the transmit end, and uses the error correction
508information to correct the bit errors generated during data packet transmission at the receive end. This
509improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required.
510
511* **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``.
512* **[provides]   rte_eth_fec_capa**: ``speed:ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``.
513* **[related]    API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``.
514
515
516.. _nic_features_l3_checksum_offload:
517
518L3 checksum offload
519-------------------
520
521Supports L3 checksum offload.
522
523* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
524* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
525* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
526  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
527* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
528* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
529  ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
530  ``PKT_RX_IP_CKSUM_NONE``.
531* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
532  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
533
534
535.. _nic_features_l4_checksum_offload:
536
537L4 checksum offload
538-------------------
539
540Supports L4 checksum offload.
541
542* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
543* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
544* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
545  ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
546  ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
547* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
548* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
549  ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
550  ``PKT_RX_L4_CKSUM_NONE``.
551* **[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``,
552  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
553
554.. _nic_features_hw_timestamp:
555
556Timestamp offload
557-----------------
558
559Supports Timestamp.
560
561* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
562* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
563* **[provides] mbuf**: ``mbuf.timestamp``.
564* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
565* **[related] eth_dev_ops**: ``read_clock``.
566
567.. _nic_features_macsec_offload:
568
569MACsec offload
570--------------
571
572Supports MACsec.
573
574* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
575* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
576* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
577* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
578  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
579
580
581.. _nic_features_inner_l3_checksum:
582
583Inner L3 checksum
584-----------------
585
586Supports inner packet L3 checksum.
587
588* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
589* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
590* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
591  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
592  ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
593  ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
594* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
595* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_IP_CKSUM_BAD``.
596* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
597  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
598
599
600.. _nic_features_inner_l4_checksum:
601
602Inner L4 checksum
603-----------------
604
605Supports inner packet L4 checksum.
606
607* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
608* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
609  ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
610* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
611* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
612  ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
613* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
614* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
615  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
616
617
618.. _nic_features_packet_type_parsing:
619
620Packet type parsing
621-------------------
622
623Supports packet type parsing and returns a list of supported types.
624Allows application to set ptypes it is interested in.
625
626* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
627* **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
628  ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
629* **[provides]   mbuf**: ``mbuf.packet_type``.
630
631
632.. _nic_features_timesync:
633
634Timesync
635--------
636
637Supports IEEE1588/802.1AS timestamping.
638
639* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
640  ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
641  ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
642* **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
643  ``rte_eth_timesync_read_rx_timestamp()``,
644  ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
645  ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
646
647
648.. _nic_features_rx_descriptor_status:
649
650Rx descriptor status
651--------------------
652
653Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
654used, status can be "Available", "Done" or "Unavailable".
655
656* **[implements] rte_eth_dev**: ``rx_descriptor_status``.
657* **[related]    API**: ``rte_eth_rx_descriptor_status()``.
658
659
660.. _nic_features_tx_descriptor_status:
661
662Tx descriptor status
663--------------------
664
665Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
666or "Unavailable."
667
668* **[implements] rte_eth_dev**: ``tx_descriptor_status``.
669* **[related]    API**: ``rte_eth_tx_descriptor_status()``.
670
671
672.. _nic_features_basic_stats:
673
674Basic stats
675-----------
676
677Support basic statistics such as: ipackets, opackets, ibytes, obytes,
678imissed, ierrors, oerrors, rx_nombuf.
679
680And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
681
682These apply to all drivers.
683
684* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
685* **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
686
687
688.. _nic_features_extended_stats:
689
690Extended stats
691--------------
692
693Supports Extended Statistics, changes from driver to driver.
694
695* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
696* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
697* **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
698  ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
699  ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
700
701
702.. _nic_features_stats_per_queue:
703
704Stats per queue
705---------------
706
707Supports configuring per-queue stat counter mapping.
708
709* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
710* **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
711  ``rte_eth_dev_set_tx_queue_stats_mapping()``.
712
713
714.. _nic_features_fw_version:
715
716FW version
717----------
718
719Supports getting device hardware firmware information.
720
721* **[implements] eth_dev_ops**: ``fw_version_get``.
722* **[related]    API**: ``rte_eth_dev_fw_version_get()``.
723
724
725.. _nic_features_eeprom_dump:
726
727EEPROM dump
728-----------
729
730Supports getting/setting device eeprom data.
731
732* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
733* **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
734  ``rte_eth_dev_set_eeprom()``.
735
736
737.. _nic_features_module_eeprom_dump:
738
739Module EEPROM dump
740------------------
741
742Supports getting information and data of plugin module eeprom.
743
744* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
745* **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
746
747
748.. _nic_features_register_dump:
749
750Registers dump
751--------------
752
753Supports retrieving device registers and registering attributes (number of
754registers and register size).
755
756* **[implements] eth_dev_ops**: ``get_reg``.
757* **[related]    API**: ``rte_eth_dev_get_reg_info()``.
758
759
760.. _nic_features_led:
761
762LED
763---
764
765Supports turning on/off a software controllable LED on a device.
766
767* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
768* **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
769
770
771.. _nic_features_multiprocess_aware:
772
773Multiprocess aware
774------------------
775
776Driver can be used for primary-secondary process model.
777
778
779.. _nic_features_freebsd:
780
781FreeBSD
782-------
783
784Supports running on FreeBSD.
785
786
787.. _nic_features_linux:
788
789Linux
790-----
791
792Supports running on Linux.
793
794
795.. _nic_features_windows:
796
797Windows
798-------
799
800Supports running on Windows.
801
802
803.. _nic_features_armv7:
804
805ARMv7
806-----
807
808Support armv7 architecture.
809
810
811.. _nic_features_armv8:
812
813ARMv8
814-----
815
816Support armv8a (64bit) architecture.
817
818
819.. _nic_features_power8:
820
821Power8
822------
823
824Support PowerPC architecture.
825
826
827.. _nic_features_x86-32:
828
829x86-32
830------
831
832Support 32bits x86 architecture.
833
834
835.. _nic_features_x86-64:
836
837x86-64
838------
839
840Support 64bits x86 architecture.
841
842
843.. _nic_features_usage_doc:
844
845Usage doc
846---------
847
848Documentation describes usage.
849
850See ``doc/guides/nics/*.rst``
851
852
853.. _nic_features_design_doc:
854
855Design doc
856----------
857
858Documentation describes design.
859
860See ``doc/guides/nics/*.rst``.
861
862
863.. _nic_features_perf_doc:
864
865Perf doc
866--------
867
868Documentation describes performance values.
869
870See ``dpdk.org/doc/perf/*``.
871
872.. _nic_features_runtime_rx_queue_setup:
873
874Runtime Rx queue setup
875----------------------
876
877Supports Rx queue setup after device started.
878
879* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
880* **[related]  API**: ``rte_eth_dev_info_get()``.
881
882.. _nic_features_runtime_tx_queue_setup:
883
884Runtime Tx queue setup
885----------------------
886
887Supports Tx queue setup after device started.
888
889* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
890* **[related]  API**: ``rte_eth_dev_info_get()``.
891
892.. _nic_features_burst_mode_info:
893
894Burst mode info
895---------------
896
897Supports to get Rx/Tx packet burst mode information.
898
899* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
900* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
901
902.. _nic_features_get_monitor_addr:
903
904PMD power management using monitor addresses
905--------------------------------------------
906
907Supports getting a monitoring condition to use together with Ethernet PMD power
908management (see :doc:`../prog_guide/power_man` for more details).
909
910* **[implements] eth_dev_ops**: ``get_monitor_addr``
911
912.. _nic_features_other:
913
914Other dev ops not represented by a Feature
915------------------------------------------
916
917* ``rxq_info_get``
918* ``txq_info_get``
919* ``vlan_tpid_set``
920* ``vlan_strip_queue_set``
921* ``vlan_pvid_set``
922* ``rx_queue_count``
923* ``uc_hash_table_set``
924* ``uc_all_hash_table_set``
925* ``udp_tunnel_port_add``
926* ``udp_tunnel_port_del``
927* ``tx_pkt_prepare``
928