New upstream version 17.11.5
[deb_dpdk.git] / doc / guides / nics / features.rst
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
31 Features Overview
32 =================
33
34 This section explains the supported features that are listed in the
35 :doc:`overview`.
36
37 As a guide to implementers it also shows the structs where the features are
38 defined and the APIs that can be use to get/set the values.
39
40 Following 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
47 to provide data by implementing some function, but "provides" is used
48 for 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
55 Speed capabilities
56 ------------------
57
58 Supports 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
66 Link status
67 -----------
68
69 Supports 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
78 Link status event
79 -----------------
80
81 Supports 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
93 Removal event
94 -------------
95
96 Supports 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
106 Queue status event
107 ------------------
108
109 Supports queue enable/disable events.
110
111 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
112
113
114 .. _nic_features_rx_interrupt:
115
116 Rx interrupt
117 ------------
118
119 Supports 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
128 Lock-free Tx queue
129 ------------------
130
131 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
132 invoke 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
141 Fast mbuf free
142 --------------
143
144 Supports optimization for fast release of mbufs following successful Tx.
145 Requires 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
153 Free Tx mbuf on demand
154 ----------------------
155
156 Supports 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
164 Queue start/stop
165 ----------------
166
167 Supports 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
177 MTU update
178 ----------
179
180 Supports 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
190 Jumbo frame
191 -----------
192
193 Supports 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
203 Scattered Rx
204 ------------
205
206 Supports 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
217 LRO
218 ---
219
220 Supports 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
231 TSO
232 ---
233
234 Supports 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``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
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
246 Promiscuous mode
247 ----------------
248
249 Supports 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
259 Allmulticast mode
260 -----------------
261
262 Supports 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
272 Unicast MAC filter
273 ------------------
274
275 Supports 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
286 Multicast MAC filter
287 --------------------
288
289 Supports 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
297 RSS hash
298 --------
299
300 Supports 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
310 RSS key update
311 --------------
312
313 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
314 Receive 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
324 RSS reta update
325 ---------------
326
327 Supports 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
336 VMDq
337 ----
338
339 Supports 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
350 SR-IOV
351 ------
352
353 Driver supports creating Virtual Functions.
354
355 * **[implements] rte_eth_dev_data**: ``sriov``.
356
357 .. _nic_features_dcb:
358
359 DCB
360 ---
361
362 Supports 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
375 VLAN filter
376 -----------
377
378 Supports 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
387 Ethertype filter
388 ----------------
389
390 Supports 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
397 N-tuple filter
398 --------------
399
400 Supports 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
408 SYN filter
409 ----------
410
411 Supports 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
419 Tunnel filter
420 -------------
421
422 Supports 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
430 Flexible filter
431 ---------------
432
433 Supports 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
441 Hash filter
442 -----------
443
444 Supports 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
452 Flow director
453 -------------
454
455 Supports 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
465 Flow control
466 ------------
467
468 Supports 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
478 Flow API
479 --------
480
481 Supports 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
489 Rate limitation
490 ---------------
491
492 Supports 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
500 Traffic mirroring
501 -----------------
502
503 Supports 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
511 Inline crypto
512 -------------
513
514 Supports 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
528 CRC offload
529 -----------
530
531 Supports 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
538 VLAN offload
539 ------------
540
541 Supports 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
555 QinQ offload
556 ------------
557
558 Supports 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
571 L3 checksum offload
572 -------------------
573
574 Supports 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 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
581 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
582   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
583   ``PKT_RX_IP_CKSUM_NONE``.
584 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
585   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
586
587
588 .. _nic_features_l4_checksum_offload:
589
590 L4 checksum offload
591 -------------------
592
593 Supports L4 checksum offload.
594
595 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.
596 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
597 * **[uses]     user config**: ``dev_conf.rxmode.hw_ip_checksum``.
598 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
599   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
600   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
601 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
602 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
603   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
604   ``PKT_RX_L4_CKSUM_NONE``.
605 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
606   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
607
608 .. _nic_features_hw_timestamp:
609
610 Timestamp offload
611 -----------------
612
613 Supports Timestamp.
614
615 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
616 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
617 * **[provides] mbuf**: ``mbuf.timestamp``.
618 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
619
620 .. _nic_features_macsec_offload:
621
622 MACsec offload
623 --------------
624
625 Supports MACsec.
626
627 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
628 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
629 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
630 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
631   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
632
633
634 .. _nic_features_inner_l3_checksum:
635
636 Inner L3 checksum
637 -----------------
638
639 Supports inner packet L3 checksum.
640
641 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
642 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
643 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
644   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
645   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
646   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
647 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
648 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
649 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
650   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
651
652
653 .. _nic_features_inner_l4_checksum:
654
655 Inner L4 checksum
656 -----------------
657
658 Supports inner packet L4 checksum.
659
660
661 .. _nic_features_packet_type_parsing:
662
663 Packet type parsing
664 -------------------
665
666 Supports packet type parsing and returns a list of supported types.
667
668 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
669 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
670
671
672 .. _nic_features_timesync:
673
674 Timesync
675 --------
676
677 Supports IEEE1588/802.1AS timestamping.
678
679 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
680   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
681   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
682 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
683   ``rte_eth_timesync_read_rx_timestamp()``,
684   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
685   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
686
687
688 .. _nic_features_rx_descriptor_status:
689
690 Rx descriptor status
691 --------------------
692
693 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
694 used, status can be "Available", "Done" or "Unavailable". When
695 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
696 not set".
697
698 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
699 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
700 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
701 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
702
703
704 .. _nic_features_tx_descriptor_status:
705
706 Tx descriptor status
707 --------------------
708
709 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
710 or "Unavailable."
711
712 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
713 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
714
715
716 .. _nic_features_basic_stats:
717
718 Basic stats
719 -----------
720
721 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
722 imissed, ierrors, oerrors, rx_nombuf.
723
724 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
725
726 These apply to all drivers.
727
728 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
729 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
730
731
732 .. _nic_features_extended_stats:
733
734 Extended stats
735 --------------
736
737 Supports Extended Statistics, changes from driver to driver.
738
739 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
740 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
741 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
742   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
743   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
744
745
746 .. _nic_features_stats_per_queue:
747
748 Stats per queue
749 ---------------
750
751 Supports configuring per-queue stat counter mapping.
752
753 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
754 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
755   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
756
757
758 .. _nic_features_fw_version:
759
760 FW version
761 ----------
762
763 Supports getting device hardware firmware information.
764
765 * **[implements] eth_dev_ops**: ``fw_version_get``.
766 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
767
768
769 .. _nic_features_eeprom_dump:
770
771 EEPROM dump
772 -----------
773
774 Supports getting/setting device eeprom data.
775
776 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
777 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
778   ``rte_eth_dev_set_eeprom()``.
779
780
781 .. _nic_features_register_dump:
782
783 Registers dump
784 --------------
785
786 Supports retrieving device registers and registering attributes (number of
787 registers and register size).
788
789 * **[implements] eth_dev_ops**: ``get_reg``.
790 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
791
792
793 .. _nic_features_led:
794
795 LED
796 ---
797
798 Supports turning on/off a software controllable LED on a device.
799
800 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
801 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
802
803
804 .. _nic_features_multiprocess_aware:
805
806 Multiprocess aware
807 ------------------
808
809 Driver can be used for primary-secondary process model.
810
811
812 .. _nic_features_bsd_nic_uio:
813
814 BSD nic_uio
815 -----------
816
817 BSD ``nic_uio`` module supported.
818
819
820 .. _nic_features_linux_uio:
821
822 Linux UIO
823 ---------
824
825 Works with ``igb_uio`` kernel module.
826
827 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
828
829 .. _nic_features_linux_vfio:
830
831 Linux VFIO
832 ----------
833
834 Works with ``vfio-pci`` kernel module.
835
836 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
837
838 .. _nic_features_other_kdrv:
839
840 Other kdrv
841 ----------
842
843 Kernel module other than above ones supported.
844
845
846 .. _nic_features_armv7:
847
848 ARMv7
849 -----
850
851 Support armv7 architecture.
852
853 Use ``defconfig_arm-armv7a-*-*``.
854
855
856 .. _nic_features_armv8:
857
858 ARMv8
859 -----
860
861 Support armv8a (64bit) architecture.
862
863 Use ``defconfig_arm64-armv8a-*-*``
864
865
866 .. _nic_features_power8:
867
868 Power8
869 ------
870
871 Support PowerPC architecture.
872
873 Use ``defconfig_ppc_64-power8-*-*``
874
875 .. _nic_features_x86-32:
876
877 x86-32
878 ------
879
880 Support 32bits x86 architecture.
881
882 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
883
884
885 .. _nic_features_x86-64:
886
887 x86-64
888 ------
889
890 Support 64bits x86 architecture.
891
892 Use ``defconfig_x86_64-native-*-*``.
893
894
895 .. _nic_features_usage_doc:
896
897 Usage doc
898 ---------
899
900 Documentation describes usage.
901
902 See ``doc/guides/nics/*.rst``
903
904
905 .. _nic_features_design_doc:
906
907 Design doc
908 ----------
909
910 Documentation describes design.
911
912 See ``doc/guides/nics/*.rst``.
913
914
915 .. _nic_features_perf_doc:
916
917 Perf doc
918 --------
919
920 Documentation describes performance values.
921
922 See ``dpdk.org/doc/perf/*``.
923
924
925
926 .. _nic_features_other:
927
928 Other dev ops not represented by a Feature
929 ------------------------------------------
930
931 * ``rxq_info_get``
932 * ``txq_info_get``
933 * ``vlan_tpid_set``
934 * ``vlan_strip_queue_set``
935 * ``vlan_pvid_set``
936 * ``rx_queue_count``
937 * ``l2_tunnel_offload_set``
938 * ``uc_hash_table_set``
939 * ``uc_all_hash_table_set``
940 * ``udp_tunnel_port_add``
941 * ``udp_tunnel_port_del``
942 * ``l2_tunnel_eth_type_conf``
943 * ``l2_tunnel_offload_set``
944 * ``tx_pkt_prepare``