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