mbuf: rename outer IP checksum macro
[dpdk.git] / doc / guides / nics / features.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2017 Intel Corporation.
3
4 Features Overview
5 =================
6
7 This section explains the supported features that are listed in the
8 :doc:`overview`.
9
10 As a guide to implementers it also shows the structs where the features are
11 defined and the APIs that can be use to get/set the values.
12
13 Following 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
20 to provide data by implementing some function, but "provides" is used
21 for 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
28 Speed capabilities
29 ------------------
30
31 Supports 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
39 Link status
40 -----------
41
42 Supports 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
51 Link status event
52 -----------------
53
54 Supports 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
66 Removal event
67 -------------
68
69 Supports 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
79 Queue status event
80 ------------------
81
82 Supports queue enable/disable events.
83
84 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87 .. _nic_features_rx_interrupt:
88
89 Rx interrupt
90 ------------
91
92 Supports 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
101 Lock-free Tx queue
102 ------------------
103
104 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105 invoke 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
114 Fast mbuf free
115 --------------
116
117 Supports optimization for fast release of mbufs following successful Tx.
118 Requires 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
126 Free Tx mbuf on demand
127 ----------------------
128
129 Supports 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
137 Queue start/stop
138 ----------------
139
140 Supports 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
150 MTU update
151 ----------
152
153 Supports 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
163 Jumbo frame
164 -----------
165
166 Supports 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
176 Scattered Rx
177 ------------
178
179 Supports 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
190 Buffer Split on Rx
191 ------------------
192
193 Scatters 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
204 LRO
205 ---
206
207 Supports 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
220 TSO
221 ---
222
223 Supports 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
235 Promiscuous mode
236 ----------------
237
238 Supports 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
248 Allmulticast mode
249 -----------------
250
251 Supports 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
261 Unicast MAC filter
262 ------------------
263
264 Supports 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
275 Multicast MAC filter
276 --------------------
277
278 Supports 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
286 RSS hash
287 --------
288
289 Supports 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
300 Inner RSS
301 ---------
302
303 Supports 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
312 RSS key update
313 --------------
314
315 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
316 Receive 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
326 RSS reta update
327 ---------------
328
329 Supports 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
338 VMDq
339 ----
340
341 Supports 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
352 SR-IOV
353 ------
354
355 Driver supports creating Virtual Functions.
356
357 * **[implements] rte_eth_dev_data**: ``sriov``.
358
359 .. _nic_features_dcb:
360
361 DCB
362 ---
363
364 Supports 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
377 VLAN filter
378 -----------
379
380 Supports 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
389 Flow control
390 ------------
391
392 Supports configuring link flow control.
393
394 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
395   ``priority_flow_ctrl_set``.
396 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
397   ``rte_eth_dev_priority_flow_ctrl_set()``.
398
399
400 .. _nic_features_flow_api:
401
402 Flow API
403 --------
404
405 Supports the DPDK Flow API for generic filtering.
406
407 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
408 * **[implements] rte_flow_ops**: ``All``.
409
410
411 .. _nic_features_rate_limitation:
412
413 Rate limitation
414 ---------------
415
416 Supports Tx rate limitation for a queue.
417
418 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
419 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
420
421
422 .. _nic_features_traffic_mirroring:
423
424 Traffic mirroring
425 -----------------
426
427 Supports adding traffic mirroring rules.
428
429 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
430 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
431
432
433 .. _nic_features_inline_crypto_doc:
434
435 Inline crypto
436 -------------
437
438 Supports inline crypto processing defined by rte_security library to perform crypto
439 operations of security protocol while packet is received in NIC. NIC is not aware
440 of protocol operations. See Security library and PMD documentation for more details.
441
442 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
443 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
444 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
445   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
446 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
447   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
448 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
449   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
450 * **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
451
452
453 .. _nic_features_inline_protocol_doc:
454
455 Inline protocol
456 ---------------
457
458 Supports inline protocol processing defined by rte_security library to perform
459 protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
460 packet is received at NIC. The NIC is capable of understanding the security
461 protocol operations. See security library and PMD documentation for more details.
462
463 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
464 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
465 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
466   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
467   ``capabilities_get``.
468 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
469   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
470 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
471   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
472 * **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
473
474
475 .. _nic_features_crc_offload:
476
477 CRC offload
478 -----------
479
480 Supports CRC stripping by hardware.
481 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
482
483 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
484
485
486 .. _nic_features_vlan_offload:
487
488 VLAN offload
489 ------------
490
491 Supports VLAN offload to hardware.
492
493 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
494 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
495 * **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
496 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
497 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
498 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
499   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
500 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
501   ``rte_eth_dev_get_vlan_offload()``.
502
503
504 .. _nic_features_qinq_offload:
505
506 QinQ offload
507 ------------
508
509 Supports QinQ (queue in queue) offload.
510
511 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
512 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
513 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
514 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
515   ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
516   ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
517 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
518   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
519
520
521 .. _nic_features_fec:
522
523 FEC
524 ---
525
526 Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode.
527 It adds error correction information to data packets at the transmit end, and uses the error correction
528 information to correct the bit errors generated during data packet transmission at the receive end. This
529 improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required.
530
531 * **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``.
532 * **[provides]   rte_eth_fec_capa**: ``speed:ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``.
533 * **[related]    API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``.
534
535
536 .. _nic_features_l3_checksum_offload:
537
538 L3 checksum offload
539 -------------------
540
541 Supports L3 checksum offload.
542
543 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
544 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
545 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
546   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
547 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
548 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
549   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
550   ``PKT_RX_IP_CKSUM_NONE``.
551 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
552   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
553
554
555 .. _nic_features_l4_checksum_offload:
556
557 L4 checksum offload
558 -------------------
559
560 Supports L4 checksum offload.
561
562 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
563 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
564 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
565   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
566   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
567 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
568 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
569   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
570   ``PKT_RX_L4_CKSUM_NONE``.
571 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``,
572   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
573
574 .. _nic_features_hw_timestamp:
575
576 Timestamp offload
577 -----------------
578
579 Supports Timestamp.
580
581 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
582 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
583 * **[provides] mbuf**: ``mbuf.timestamp``.
584 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
585 * **[related] eth_dev_ops**: ``read_clock``.
586
587 .. _nic_features_macsec_offload:
588
589 MACsec offload
590 --------------
591
592 Supports MACsec.
593
594 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
595 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
596 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
597 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
598   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
599
600
601 .. _nic_features_inner_l3_checksum:
602
603 Inner L3 checksum
604 -----------------
605
606 Supports inner packet L3 checksum.
607
608 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
609 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
610 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
611   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
612   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
613   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
614 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
615 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_IP_CKSUM_BAD``.
616 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
617   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
618
619
620 .. _nic_features_inner_l4_checksum:
621
622 Inner L4 checksum
623 -----------------
624
625 Supports inner packet L4 checksum.
626
627 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
628 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
629   ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
630 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
631 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
632   ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
633 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
634 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
635   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
636
637
638 .. _nic_features_packet_type_parsing:
639
640 Packet type parsing
641 -------------------
642
643 Supports packet type parsing and returns a list of supported types.
644 Allows application to set ptypes it is interested in.
645
646 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
647 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
648   ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
649 * **[provides]   mbuf**: ``mbuf.packet_type``.
650
651
652 .. _nic_features_timesync:
653
654 Timesync
655 --------
656
657 Supports IEEE1588/802.1AS timestamping.
658
659 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
660   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
661   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
662 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
663   ``rte_eth_timesync_read_rx_timestamp()``,
664   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
665   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
666
667
668 .. _nic_features_rx_descriptor_status:
669
670 Rx descriptor status
671 --------------------
672
673 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
674 used, status can be "Available", "Done" or "Unavailable". When
675 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
676 not set".
677
678 * **[implements] rte_eth_dev**: ``rx_descriptor_status``.
679 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
680 * **[implements] rte_eth_dev**: ``rx_descriptor_done``.
681 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
682
683
684 .. _nic_features_tx_descriptor_status:
685
686 Tx descriptor status
687 --------------------
688
689 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
690 or "Unavailable."
691
692 * **[implements] rte_eth_dev**: ``tx_descriptor_status``.
693 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
694
695
696 .. _nic_features_basic_stats:
697
698 Basic stats
699 -----------
700
701 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
702 imissed, ierrors, oerrors, rx_nombuf.
703
704 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
705
706 These apply to all drivers.
707
708 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
709 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
710
711
712 .. _nic_features_extended_stats:
713
714 Extended stats
715 --------------
716
717 Supports Extended Statistics, changes from driver to driver.
718
719 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
720 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
721 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
722   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
723   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
724
725
726 .. _nic_features_stats_per_queue:
727
728 Stats per queue
729 ---------------
730
731 Supports configuring per-queue stat counter mapping.
732
733 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
734 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
735   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
736
737
738 .. _nic_features_fw_version:
739
740 FW version
741 ----------
742
743 Supports getting device hardware firmware information.
744
745 * **[implements] eth_dev_ops**: ``fw_version_get``.
746 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
747
748
749 .. _nic_features_eeprom_dump:
750
751 EEPROM dump
752 -----------
753
754 Supports getting/setting device eeprom data.
755
756 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
757 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
758   ``rte_eth_dev_set_eeprom()``.
759
760
761 .. _nic_features_module_eeprom_dump:
762
763 Module EEPROM dump
764 ------------------
765
766 Supports getting information and data of plugin module eeprom.
767
768 * **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
769 * **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
770
771
772 .. _nic_features_register_dump:
773
774 Registers dump
775 --------------
776
777 Supports retrieving device registers and registering attributes (number of
778 registers and register size).
779
780 * **[implements] eth_dev_ops**: ``get_reg``.
781 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
782
783
784 .. _nic_features_led:
785
786 LED
787 ---
788
789 Supports turning on/off a software controllable LED on a device.
790
791 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
792 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
793
794
795 .. _nic_features_multiprocess_aware:
796
797 Multiprocess aware
798 ------------------
799
800 Driver can be used for primary-secondary process model.
801
802
803 .. _nic_features_freebsd:
804
805 FreeBSD
806 -------
807
808 Supports running on FreeBSD.
809
810
811 .. _nic_features_linux:
812
813 Linux
814 -----
815
816 Supports running on Linux.
817
818
819 .. _nic_features_windows:
820
821 Windows
822 -------
823
824 Supports running on Windows.
825
826
827 .. _nic_features_armv7:
828
829 ARMv7
830 -----
831
832 Support armv7 architecture.
833
834
835 .. _nic_features_armv8:
836
837 ARMv8
838 -----
839
840 Support armv8a (64bit) architecture.
841
842
843 .. _nic_features_power8:
844
845 Power8
846 ------
847
848 Support PowerPC architecture.
849
850
851 .. _nic_features_x86-32:
852
853 x86-32
854 ------
855
856 Support 32bits x86 architecture.
857
858
859 .. _nic_features_x86-64:
860
861 x86-64
862 ------
863
864 Support 64bits x86 architecture.
865
866
867 .. _nic_features_usage_doc:
868
869 Usage doc
870 ---------
871
872 Documentation describes usage.
873
874 See ``doc/guides/nics/*.rst``
875
876
877 .. _nic_features_design_doc:
878
879 Design doc
880 ----------
881
882 Documentation describes design.
883
884 See ``doc/guides/nics/*.rst``.
885
886
887 .. _nic_features_perf_doc:
888
889 Perf doc
890 --------
891
892 Documentation describes performance values.
893
894 See ``dpdk.org/doc/perf/*``.
895
896 .. _nic_features_runtime_rx_queue_setup:
897
898 Runtime Rx queue setup
899 ----------------------
900
901 Supports Rx queue setup after device started.
902
903 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
904 * **[related]  API**: ``rte_eth_dev_info_get()``.
905
906 .. _nic_features_runtime_tx_queue_setup:
907
908 Runtime Tx queue setup
909 ----------------------
910
911 Supports Tx queue setup after device started.
912
913 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
914 * **[related]  API**: ``rte_eth_dev_info_get()``.
915
916 .. _nic_features_burst_mode_info:
917
918 Burst mode info
919 ---------------
920
921 Supports to get Rx/Tx packet burst mode information.
922
923 * **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
924 * **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
925
926 .. _nic_features_other:
927
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 * ``uc_hash_table_set``
938 * ``uc_all_hash_table_set``
939 * ``udp_tunnel_port_add``
940 * ``udp_tunnel_port_del``
941 * ``tx_pkt_prepare``