1 .. SPDX-License-Identifier: BSD-3-Clause
2 Copyright(c) 2017 Intel Corporation.
7 This section explains the supported features that are listed in the
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.
13 Following tags used for feature details, these are from driver point of view:
15 ``[uses]`` : Driver uses some kind of input from the application.
17 ``[implements]`` : Driver implements a functionality.
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.
23 ``[related]`` : Related API with that feature.
26 .. _nic_features_speed_capabilities:
31 Supports getting the speed capabilities that the current device is capable of.
33 * **[provides] rte_eth_dev_info**: ``speed_capa:RTE_ETH_LINK_SPEED_*``.
34 * **[related] API**: ``rte_eth_dev_info_get()``.
37 .. _nic_features_link_status:
42 Supports getting the link speed, duplex mode and link state (up/down).
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()``.
49 .. _nic_features_link_status_event:
54 Supports Link Status Change interrupts.
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()``.
64 .. _nic_features_removal_event:
69 Supports device removal interrupts.
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``.
77 .. _nic_features_queue_status_event:
82 Supports queue enable/disable events.
84 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
87 .. _nic_features_rx_interrupt:
92 Supports Rx interrupts.
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()``.
99 .. _nic_features_lock-free_tx_queue:
104 If a PMD advertises RTE_ETH_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105 invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
107 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_MT_LOCKFREE``.
108 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_MT_LOCKFREE``.
109 * **[related] API**: ``rte_eth_tx_burst()``.
112 .. _nic_features_fast_mbuf_free:
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.
120 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE``.
121 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE``.
124 .. _nic_features_free_tx_mbuf_on_demand:
126 Free Tx mbuf on demand
127 ----------------------
129 Supports freeing consumed buffers on a Tx ring.
131 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
132 * **[related] API**: ``rte_eth_tx_done_cleanup()``.
135 .. _nic_features_queue_start_stop:
140 Supports starting/stopping a specific Rx/Tx queue of a port.
142 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
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()``.
148 .. _nic_features_mtu_update:
153 Supports updating port MTU.
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()``.
161 .. _nic_features_scattered_rx:
166 Supports receiving segmented mbufs.
168 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SCATTER``.
169 * **[implements] datapath**: ``Scattered Rx function``.
170 * **[implements] rte_eth_dev_data**: ``scattered_rx``.
171 * **[provides] eth_dev_ops**: ``rxq_info_get:scattered_rx``.
172 * **[related] eth_dev_ops**: ``rx_pkt_burst``.
175 .. _nic_features_buffer_split:
180 Scatters the packets being received on specified boundaries to segmented mbufs.
182 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
183 * **[uses] rte_eth_rxconf**: ``rx_conf.rx_seg, rx_conf.rx_nseg``.
184 * **[implements] datapath**: ``Buffer Split functionality``.
185 * **[provides] rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
186 * **[related] API**: ``rte_eth_rx_queue_setup()``.
189 .. _nic_features_lro:
194 Supports Large Receive Offload.
196 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TCP_LRO``.
197 ``dev_conf.rxmode.max_lro_pkt_size``.
198 * **[implements] datapath**: ``LRO functionality``.
199 * **[implements] rte_eth_dev_data**: ``lro``.
200 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_LRO``, ``mbuf.tso_segsz``.
201 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_TCP_LRO``.
202 * **[provides] rte_eth_dev_info**: ``max_lro_pkt_size``.
205 .. _nic_features_tso:
210 Supports TCP Segmentation Offloading.
212 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_TCP_TSO``.
213 * **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
214 * **[uses] mbuf**: ``mbuf.ol_flags:`` ``RTE_MBUF_F_TX_TCP_SEG``, ``RTE_MBUF_F_TX_IPV4``, ``RTE_MBUF_F_TX_IPV6``, ``RTE_MBUF_F_TX_IP_CKSUM``.
215 * **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
216 * **[implements] datapath**: ``TSO functionality``.
217 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_TCP_TSO,RTE_ETH_TX_OFFLOAD_UDP_TSO``.
220 .. _nic_features_promiscuous_mode:
225 Supports enabling/disabling promiscuous mode for a port.
227 * **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
228 * **[implements] rte_eth_dev_data**: ``promiscuous``.
229 * **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
230 ``rte_eth_promiscuous_get()``.
233 .. _nic_features_allmulticast_mode:
238 Supports enabling/disabling receiving multicast frames.
240 * **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
241 * **[implements] rte_eth_dev_data**: ``all_multicast``.
242 * **[related] API**: ``rte_eth_allmulticast_enable()``,
243 ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
246 .. _nic_features_unicast_mac_filter:
251 Supports adding MAC addresses to enable incoming filtering of packets.
253 * **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
254 * **[implements] rte_eth_dev_data**: ``mac_addrs``.
255 * **[related] API**: ``rte_eth_dev_default_mac_addr_set()``,
256 ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
257 ``rte_eth_macaddr_get()``.
260 .. _nic_features_multicast_mac_filter:
265 Supports setting multicast addresses to filter.
267 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
268 * **[related] API**: ``rte_eth_dev_set_mc_addr_list()``.
271 .. _nic_features_rss_hash:
276 Supports RSS hashing on RX.
278 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_RSS_FLAG``.
279 * **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
280 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``.
281 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
282 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_RSS_HASH``, ``mbuf.rss``.
285 .. _nic_features_inner_rss:
290 Supports RX RSS hashing on Inner headers.
292 * **[uses] rte_flow_action_rss**: ``level``.
293 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``.
294 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_RSS_HASH``, ``mbuf.rss``.
297 .. _nic_features_rss_key_update:
302 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
303 Receive Side Scaling (RSS) hash key.
305 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
306 * **[provides] rte_eth_dev_info**: ``hash_key_size``.
307 * **[related] API**: ``rte_eth_dev_rss_hash_update()``,
308 ``rte_eth_dev_rss_hash_conf_get()``.
311 .. _nic_features_rss_reta_update:
316 Supports updating Redirection Table of the Receive Side Scaling (RSS).
318 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
319 * **[provides] rte_eth_dev_info**: ``reta_size``.
320 * **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
323 .. _nic_features_vmdq:
328 Supports Virtual Machine Device Queues (VMDq).
330 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_VMDQ_FLAG``.
331 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
332 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
333 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
334 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
337 .. _nic_features_sriov:
342 Driver supports creating Virtual Functions.
344 * **[implements] rte_eth_dev_data**: ``sriov``.
346 .. _nic_features_dcb:
351 Supports Data Center Bridging (DCB).
353 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_DCB_FLAG``.
354 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
355 * **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
356 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
357 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
358 * **[implements] eth_dev_ops**: ``get_dcb_info``.
359 * **[related] API**: ``rte_eth_dev_get_dcb_info()``.
362 .. _nic_features_vlan_filter:
367 Supports filtering of a VLAN Tag identifier.
369 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_VLAN_FILTER``.
370 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
371 * **[related] API**: ``rte_eth_dev_vlan_filter()``.
374 .. _nic_features_flow_control:
379 Supports configuring link flow control.
381 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
382 ``priority_flow_ctrl_set``, ``priority_flow_ctrl_queue_info_get``,
383 ``priority_flow_ctrl_queue_configure``
384 * **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
385 ``rte_eth_dev_priority_flow_ctrl_set()``,
386 ``rte_eth_dev_priority_flow_ctrl_queue_info_get()``,
387 ``rte_eth_dev_priority_flow_ctrl_queue_configure()``.
390 .. _nic_features_rate_limitation:
395 Supports Tx rate limitation for a queue.
397 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
398 * **[related] API**: ``rte_eth_set_queue_rate_limit()``.
401 .. _nic_features_inline_crypto_doc:
406 Supports inline crypto processing defined by rte_security library to perform crypto
407 operations of security protocol while packet is received in NIC. NIC is not aware
408 of protocol operations. See Security library and PMD documentation for more details.
410 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SECURITY``,
411 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_SECURITY``.
412 * **[uses] mbuf**: ``mbuf.l2_len``.
413 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
414 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
415 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_SECURITY``,
416 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_SECURITY``.
417 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD``,
418 ``mbuf.ol_flags:RTE_MBUF_F_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED``.
419 * **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
422 .. _nic_features_inline_protocol_doc:
427 Supports inline protocol processing defined by rte_security library to perform
428 protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
429 packet is received at NIC. The NIC is capable of understanding the security
430 protocol operations. See security library and PMD documentation for more details.
432 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SECURITY``,
433 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_SECURITY``.
434 * **[uses] mbuf**: ``mbuf.l2_len``.
435 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
436 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
437 ``capabilities_get``.
438 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_SECURITY``,
439 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_SECURITY``.
440 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD``,
441 ``mbuf.ol_flags:RTE_MBUF_F_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED``.
442 * **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
445 .. _nic_features_crc_offload:
450 Supports CRC stripping by hardware.
451 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
453 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_KEEP_CRC``.
456 .. _nic_features_vlan_offload:
461 Supports VLAN offload to hardware.
463 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_VLAN_STRIP,RTE_ETH_RX_OFFLOAD_VLAN_FILTER,RTE_ETH_RX_OFFLOAD_VLAN_EXTEND``.
464 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_VLAN_INSERT``.
465 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_VLAN``, ``mbuf.vlan_tci``.
466 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
467 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN`` ``mbuf.vlan_tci``.
468 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_VLAN_STRIP``,
469 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_VLAN_INSERT``.
470 * **[related] API**: ``rte_eth_dev_set_vlan_offload()``,
471 ``rte_eth_dev_get_vlan_offload()``.
474 .. _nic_features_qinq_offload:
479 Supports QinQ (queue in queue) offload.
481 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_QINQ_STRIP``.
482 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_QINQ_INSERT``.
483 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_QINQ``, ``mbuf.vlan_tci_outer``.
484 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_QINQ``,
485 ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN``
486 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
487 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_QINQ_STRIP``,
488 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_QINQ_INSERT``.
491 .. _nic_features_fec:
496 Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode.
497 It adds error correction information to data packets at the transmit end, and uses the error correction
498 information to correct the bit errors generated during data packet transmission at the receive end. This
499 improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required.
501 * **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``.
502 * **[provides] rte_eth_fec_capa**: ``speed:RTE_ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``.
503 * **[related] API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``.
506 .. _nic_features_l3_checksum_offload:
511 Supports L3 checksum offload.
513 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``.
514 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``.
515 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``,
516 ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``.
517 * **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
518 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN`` |
519 ``RTE_MBUF_F_RX_IP_CKSUM_BAD`` | ``RTE_MBUF_F_RX_IP_CKSUM_GOOD`` |
520 ``RTE_MBUF_F_RX_IP_CKSUM_NONE``.
521 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``,
522 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``.
525 .. _nic_features_l4_checksum_offload:
530 Supports L4 checksum offload.
532 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_UDP_CKSUM,RTE_ETH_RX_OFFLOAD_TCP_CKSUM,RTE_ETH_RX_OFFLOAD_SCTP_CKSUM``.
533 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_UDP_CKSUM,RTE_ETH_TX_OFFLOAD_TCP_CKSUM,RTE_ETH_TX_OFFLOAD_SCTP_CKSUM``.
534 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``,
535 ``mbuf.ol_flags:RTE_MBUF_F_TX_L4_NO_CKSUM`` | ``RTE_MBUF_F_TX_TCP_CKSUM`` |
536 ``RTE_MBUF_F_TX_SCTP_CKSUM`` | ``RTE_MBUF_F_TX_UDP_CKSUM``.
537 * **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
538 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN`` |
539 ``RTE_MBUF_F_RX_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_L4_CKSUM_GOOD`` |
540 ``RTE_MBUF_F_RX_L4_CKSUM_NONE``.
541 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_UDP_CKSUM,RTE_ETH_RX_OFFLOAD_TCP_CKSUM,RTE_ETH_RX_OFFLOAD_SCTP_CKSUM``,
542 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_UDP_CKSUM,RTE_ETH_TX_OFFLOAD_TCP_CKSUM,RTE_ETH_TX_OFFLOAD_SCTP_CKSUM``.
544 .. _nic_features_hw_timestamp:
551 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TIMESTAMP``.
552 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_TIMESTAMP``.
553 * **[provides] mbuf**: ``mbuf.timestamp``.
554 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: RTE_ETH_RX_OFFLOAD_TIMESTAMP``.
555 * **[related] eth_dev_ops**: ``read_clock``.
557 .. _nic_features_macsec_offload:
564 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``.
565 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``.
566 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_MACSEC``.
567 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``,
568 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``.
571 .. _nic_features_inner_l3_checksum:
576 Supports inner packet L3 checksum.
578 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
579 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
580 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``,
581 ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``,
582 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IP_CKSUM``,
583 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``.
584 * **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
585 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD``.
586 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
587 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
590 .. _nic_features_inner_l4_checksum:
595 Supports inner packet L4 checksum.
597 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``.
598 * **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN`` |
599 ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_INVALID``.
600 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``.
601 * **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``.
602 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_UDP_CKSUM``.
603 * **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
604 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``,
605 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``.
608 .. _nic_features_shared_rx_queue:
613 Supports shared Rx queue for ports in same Rx domain of a switch domain.
615 * **[uses] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RXQ_SHARE``.
616 * **[uses] rte_eth_dev_info,rte_eth_switch_info**: ``rx_domain``, ``domain_id``.
617 * **[uses] rte_eth_rxconf**: ``share_group``, ``share_qid``.
618 * **[provides] mbuf**: ``mbuf.port``.
621 .. _nic_features_packet_type_parsing:
626 Supports packet type parsing and returns a list of supported types.
627 Allows application to set ptypes it is interested in.
629 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
630 * **[related] API**: ``rte_eth_dev_get_supported_ptypes()``,
631 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
632 * **[provides] mbuf**: ``mbuf.packet_type``.
635 .. _nic_features_timesync:
640 Supports IEEE1588/802.1AS timestamping.
642 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
643 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
644 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
645 * **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
646 ``rte_eth_timesync_read_rx_timestamp()``,
647 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
648 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
651 .. _nic_features_rx_descriptor_status:
656 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
657 used, status can be "Available", "Done" or "Unavailable".
659 * **[implements] rte_eth_dev**: ``rx_descriptor_status``.
660 * **[related] API**: ``rte_eth_rx_descriptor_status()``.
663 .. _nic_features_tx_descriptor_status:
668 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
671 * **[implements] rte_eth_dev**: ``tx_descriptor_status``.
672 * **[related] API**: ``rte_eth_tx_descriptor_status()``.
675 .. _nic_features_basic_stats:
680 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
681 imissed, ierrors, oerrors, rx_nombuf.
683 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
685 These apply to all drivers.
687 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
688 * **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
691 .. _nic_features_extended_stats:
696 Supports Extended Statistics, changes from driver to driver.
698 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
699 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
700 * **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
701 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
702 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
705 .. _nic_features_stats_per_queue:
710 Supports configuring per-queue stat counter mapping.
712 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
713 * **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
714 ``rte_eth_dev_set_tx_queue_stats_mapping()``.
717 .. _nic_features_fw_version:
722 Supports getting device hardware firmware information.
724 * **[implements] eth_dev_ops**: ``fw_version_get``.
725 * **[related] API**: ``rte_eth_dev_fw_version_get()``.
728 .. _nic_features_eeprom_dump:
733 Supports getting/setting device eeprom data.
735 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
736 * **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
737 ``rte_eth_dev_set_eeprom()``.
740 .. _nic_features_module_eeprom_dump:
745 Supports getting information and data of plugin module eeprom.
747 * **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
748 * **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
751 .. _nic_features_register_dump:
756 Supports retrieving device registers and registering attributes (number of
757 registers and register size).
759 * **[implements] eth_dev_ops**: ``get_reg``.
760 * **[related] API**: ``rte_eth_dev_get_reg_info()``.
763 .. _nic_features_led:
768 Supports turning on/off a software controllable LED on a device.
770 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
771 * **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
774 .. _nic_features_multiprocess_aware:
779 Driver can be used for primary-secondary process model.
782 .. _nic_features_freebsd:
787 Supports running on FreeBSD.
790 .. _nic_features_linux:
795 Supports running on Linux.
798 .. _nic_features_windows:
803 Supports running on Windows.
806 .. _nic_features_armv7:
811 Support armv7 architecture.
814 .. _nic_features_armv8:
819 Support armv8a (64bit) architecture.
822 .. _nic_features_power8:
827 Support PowerPC architecture.
830 .. _nic_features_x86-32:
835 Support 32bits x86 architecture.
838 .. _nic_features_x86-64:
843 Support 64bits x86 architecture.
846 .. _nic_features_usage_doc:
851 Documentation describes usage.
853 See ``doc/guides/nics/*.rst``
856 .. _nic_features_design_doc:
861 Documentation describes design.
863 See ``doc/guides/nics/*.rst``.
866 .. _nic_features_perf_doc:
871 Documentation describes performance values.
873 See ``dpdk.org/doc/perf/*``.
875 .. _nic_features_runtime_rx_queue_setup:
877 Runtime Rx queue setup
878 ----------------------
880 Supports Rx queue setup after device started.
882 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
883 * **[related] API**: ``rte_eth_dev_info_get()``.
885 .. _nic_features_runtime_tx_queue_setup:
887 Runtime Tx queue setup
888 ----------------------
890 Supports Tx queue setup after device started.
892 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
893 * **[related] API**: ``rte_eth_dev_info_get()``.
895 .. _nic_features_burst_mode_info:
900 Supports to get Rx/Tx packet burst mode information.
902 * **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
903 * **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
905 .. _nic_features_get_monitor_addr:
907 PMD power management using monitor addresses
908 --------------------------------------------
910 Supports getting a monitoring condition to use together with Ethernet PMD power
911 management (see :doc:`../prog_guide/power_man` for more details).
913 * **[implements] eth_dev_ops**: ``get_monitor_addr``
915 .. _nic_features_other:
917 Other dev ops not represented by a Feature
918 ------------------------------------------
923 * ``vlan_strip_queue_set``
926 * ``uc_hash_table_set``
927 * ``uc_all_hash_table_set``
928 * ``udp_tunnel_port_add``
929 * ``udp_tunnel_port_del``