1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2017 Intel Corporation. 3 4Features Overview 5================= 6 7This section explains the supported features that are listed in the 8:doc:`overview`. 9 10As a guide to implementers it also shows the structs where the features are 11defined and the APIs that can be use to get/set the values. 12 13Following tags used for feature details, these are from driver point of view: 14 15``[uses]`` : Driver uses some kind of input from the application. 16 17``[implements]`` : Driver implements a functionality. 18 19``[provides]`` : Driver provides some kind of data to the application. It is possible 20to provide data by implementing some function, but "provides" is used 21for cases where provided data can't be represented simply by a function. 22 23``[related]`` : Related API with that feature. 24 25 26.. _nic_features_speed_capabilities: 27 28Speed capabilities 29------------------ 30 31Supports getting the speed capabilities that the current device is capable of. 32 33* **[provides] rte_eth_dev_info**: ``speed_capa:RTE_ETH_LINK_SPEED_*``. 34* **[related] API**: ``rte_eth_dev_info_get()``. 35 36 37.. _nic_features_link_status: 38 39Link status 40----------- 41 42Supports getting the link speed, duplex mode and link state (up/down). 43 44* **[implements] eth_dev_ops**: ``link_update``. 45* **[implements] rte_eth_dev_data**: ``dev_link``. 46* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``. 47 48 49.. _nic_features_link_status_event: 50 51Link status event 52----------------- 53 54Supports Link Status Change interrupts. 55 56* **[uses] user config**: ``dev_conf.intr_conf.lsc``. 57* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``. 58* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``. 59* **[implements] rte_eth_dev_data**: ``dev_link``. 60* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``. 61* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``. 62 63 64.. _nic_features_removal_event: 65 66Removal event 67------------- 68 69Supports device removal interrupts. 70 71* **[uses] user config**: ``dev_conf.intr_conf.rmv``. 72* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``. 73* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``. 74* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``. 75 76 77.. _nic_features_queue_status_event: 78 79Queue status event 80------------------ 81 82Supports queue enable/disable events. 83 84* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``. 85 86 87.. _nic_features_rx_interrupt: 88 89Rx interrupt 90------------ 91 92Supports Rx interrupts. 93 94* **[uses] user config**: ``dev_conf.intr_conf.rxq``. 95* **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``. 96* **[related] API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``. 97 98 99.. _nic_features_lock-free_tx_queue: 100 101Lock-free Tx queue 102------------------ 103 104If a PMD advertises RTE_ETH_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can 105invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock. 106 107* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads: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()``. 110 111 112.. _nic_features_fast_mbuf_free: 113 114Fast mbuf free 115-------------- 116 117Supports optimization for fast release of mbufs following successful Tx. 118Requires that per queue, all mbufs come from the same mempool and has refcnt = 1. 119 120* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads: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``. 122 123 124.. _nic_features_free_tx_mbuf_on_demand: 125 126Free Tx mbuf on demand 127---------------------- 128 129Supports freeing consumed buffers on a Tx ring. 130 131* **[implements] eth_dev_ops**: ``tx_done_cleanup``. 132* **[related] API**: ``rte_eth_tx_done_cleanup()``. 133 134 135.. _nic_features_queue_start_stop: 136 137Queue start/stop 138---------------- 139 140Supports starting/stopping a specific Rx/Tx queue of a port. 141 142* **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``, 143 ``tx_queue_stop``. 144* **[related] API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``, 145 ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``. 146 147 148.. _nic_features_mtu_update: 149 150MTU update 151---------- 152 153Supports updating port MTU. 154 155* **[implements] eth_dev_ops**: ``mtu_set``. 156* **[implements] rte_eth_dev_data**: ``mtu``. 157* **[provides] rte_eth_dev_info**: ``max_rx_pktlen``. 158* **[related] API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``. 159 160 161.. _nic_features_scattered_rx: 162 163Scattered Rx 164------------ 165 166Supports receiving segmented mbufs. 167 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``. 173 174 175.. _nic_features_buffer_split: 176 177Buffer split on Rx 178------------------ 179 180Scatters the packets being received on specified boundaries to segmented mbufs. 181 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] eth_dev_ops**: ``buffer_split_supported_hdr_ptypes_get``, 185* **[implements] datapath**: ``Buffer Split functionality``. 186* **[provides] rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``. 187* **[related] API**: ``rte_eth_rx_queue_setup()``, ``rte_eth_buffer_split_get_supported_hdr_ptypes()``. 188 189 190.. _nic_features_lro: 191 192LRO 193--- 194 195Supports Large Receive Offload. 196 197* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TCP_LRO``. 198 ``dev_conf.rxmode.max_lro_pkt_size``. 199* **[implements] datapath**: ``LRO functionality``. 200* **[implements] rte_eth_dev_data**: ``lro``. 201* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_LRO``, ``mbuf.tso_segsz``. 202* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_TCP_LRO``. 203* **[provides] rte_eth_dev_info**: ``max_lro_pkt_size``. 204 205 206.. _nic_features_tso: 207 208TSO 209--- 210 211Supports TCP Segmentation Offloading. 212 213* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_TCP_TSO``. 214* **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``. 215* **[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``. 216* **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``. 217* **[implements] datapath**: ``TSO functionality``. 218* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_TCP_TSO,RTE_ETH_TX_OFFLOAD_UDP_TSO``. 219 220 221.. _nic_features_promiscuous_mode: 222 223Promiscuous mode 224---------------- 225 226Supports enabling/disabling promiscuous mode for a port. 227 228* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``. 229* **[implements] rte_eth_dev_data**: ``promiscuous``. 230* **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``, 231 ``rte_eth_promiscuous_get()``. 232 233 234.. _nic_features_allmulticast_mode: 235 236Allmulticast mode 237----------------- 238 239Supports enabling/disabling receiving multicast frames. 240 241* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``. 242* **[implements] rte_eth_dev_data**: ``all_multicast``. 243* **[related] API**: ``rte_eth_allmulticast_enable()``, 244 ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``. 245 246 247.. _nic_features_unicast_mac_filter: 248 249Unicast MAC filter 250------------------ 251 252Supports adding MAC addresses to enable incoming filtering of packets. 253 254* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``. 255* **[implements] rte_eth_dev_data**: ``mac_addrs``. 256* **[related] API**: ``rte_eth_dev_default_mac_addr_set()``, 257 ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``, 258 ``rte_eth_macaddr_get()``. 259 260 261.. _nic_features_multicast_mac_filter: 262 263Multicast MAC filter 264-------------------- 265 266Supports setting multicast addresses to filter. 267 268* **[implements] eth_dev_ops**: ``set_mc_addr_list``. 269* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``. 270 271 272.. _nic_features_rss_hash: 273 274RSS hash 275-------- 276 277Supports RSS hashing on RX. 278 279* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_RSS_FLAG``. 280* **[uses] user config**: ``rss_conf.rss_hf``. 281* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``. 282* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``. 283* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_RSS_HASH``, ``mbuf.rss``. 284* **[related] API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update`` 285 ``rte_eth_dev_rss_hash_conf_get()``. 286 287Supports RSS hash algorithm on Rx. 288 289* **[implements] eth_dev_ops**: ``dev_configure``, ``rss_hash_update``, ``rss_hash_conf_get``. 290* **[uses] user config**: ``rss_conf.algorithm`` 291* **[provides] rte_eth_dev_info**: ``rss_algo_capa``. 292* **[related] API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update()``, 293 ``rte_eth_dev_rss_hash_conf_get()``. 294 295 296.. _nic_features_inner_rss: 297 298Inner RSS 299--------- 300 301Supports RSS hashing on inner headers with flow API. 302 303* **[uses] rte_flow_action_rss**: ``level``. 304* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH``. 305* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_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**: ``dev_configure``, ``rss_hash_update``, ``rss_hash_conf_get``. 317* **[uses] user config**: ``rss_conf.rss_key``, ``rss_conf.rss_key_len``. 318* **[provides] rte_eth_dev_info**: ``hash_key_size``. 319* **[related] API**: ``rte_eth_dev_configure()``, ``rte_eth_dev_rss_hash_update()``, 320 ``rte_eth_dev_rss_hash_conf_get()``. 321 322 323.. _nic_features_rss_reta_update: 324 325RSS reta update 326--------------- 327 328Supports updating Redirection Table of the Receive Side Scaling (RSS). 329 330* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``. 331* **[provides] rte_eth_dev_info**: ``reta_size``. 332* **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``. 333 334 335.. _nic_features_vmdq: 336 337VMDq 338---- 339 340Supports Virtual Machine Device Queues (VMDq). 341 342* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_VMDQ_FLAG``. 343* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``. 344* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``. 345* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``. 346* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``. 347 348 349.. _nic_features_sriov: 350 351SR-IOV 352------ 353 354Driver supports creating Virtual Functions. 355 356* **[implements] rte_eth_dev_data**: ``sriov``. 357 358.. _nic_features_dcb: 359 360DCB 361--- 362 363Supports Data Center Bridging (DCB). 364 365* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``RTE_ETH_MQ_RX_DCB_FLAG``. 366* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``. 367* **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``. 368* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``. 369* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``. 370* **[implements] eth_dev_ops**: ``get_dcb_info``. 371* **[related] API**: ``rte_eth_dev_get_dcb_info()``. 372 373 374.. _nic_features_vlan_filter: 375 376VLAN filter 377----------- 378 379Supports filtering of a VLAN Tag identifier. 380 381* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_VLAN_FILTER``. 382* **[implements] eth_dev_ops**: ``vlan_filter_set``. 383* **[related] API**: ``rte_eth_dev_vlan_filter()``. 384 385 386.. _nic_features_flow_control: 387 388Flow control 389------------ 390 391Supports configuring link flow control. 392 393* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``, 394 ``priority_flow_ctrl_set``, ``priority_flow_ctrl_queue_info_get``, 395 ``priority_flow_ctrl_queue_configure`` 396* **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``, 397 ``rte_eth_dev_priority_flow_ctrl_set()``, 398 ``rte_eth_dev_priority_flow_ctrl_queue_info_get()``, 399 ``rte_eth_dev_priority_flow_ctrl_queue_configure()``. 400 401 402.. _nic_features_rate_limitation: 403 404Rate limitation 405--------------- 406 407Supports Tx rate limitation for a queue. 408 409* **[implements] eth_dev_ops**: ``set_queue_rate_limit``. 410* **[related] API**: ``rte_eth_set_queue_rate_limit()``. 411 412 413.. _nic_features_inline_crypto_doc: 414 415Inline crypto 416------------- 417 418Supports inline crypto processing defined by rte_security library to perform crypto 419operations of security protocol while packet is received in NIC. NIC is not aware 420of protocol operations. See Security library and PMD documentation for more details. 421 422* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SECURITY``, 423* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_SECURITY``. 424* **[uses] mbuf**: ``mbuf.l2_len``. 425* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 426 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``. 427* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_SECURITY``, 428 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_SECURITY``. 429* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD``, 430 ``mbuf.ol_flags:RTE_MBUF_F_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED``. 431* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO`` 432 433 434.. _nic_features_inline_protocol_doc: 435 436Inline protocol 437--------------- 438 439Supports inline protocol processing defined by rte_security library to perform 440protocol processing for the security protocol (e.g. IPsec, MACSEC) while the 441packet is received at NIC. The NIC is capable of understanding the security 442protocol operations. See security library and PMD documentation for more details. 443 444* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_SECURITY``, 445* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_SECURITY``. 446* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.ol_flags``. 447* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 448 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, 449 ``capabilities_get``. 450* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_SECURITY``, 451 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_SECURITY``. 452* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD``, 453 ``mbuf.ol_flags:RTE_MBUF_F_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED``. 454* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL`` 455 456 457.. _nic_features_crc_offload: 458 459CRC offload 460----------- 461 462Supports CRC stripping by hardware. 463A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC. 464 465* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_KEEP_CRC``. 466 467 468.. _nic_features_vlan_offload: 469 470VLAN offload 471------------ 472 473Supports VLAN offload to hardware. 474 475* **[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``. 476* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_VLAN_INSERT``. 477* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_VLAN``, ``mbuf.vlan_tci``. 478* **[implements] eth_dev_ops**: ``vlan_offload_set``. 479* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN`` ``mbuf.vlan_tci``. 480* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_VLAN_STRIP``, 481 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_VLAN_INSERT``. 482* **[related] API**: ``rte_eth_dev_set_vlan_offload()``, 483 ``rte_eth_dev_get_vlan_offload()``. 484 485 486.. _nic_features_qinq_offload: 487 488QinQ offload 489------------ 490 491Supports QinQ (queue in queue) offload. 492 493* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_QINQ_STRIP``. 494* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_QINQ_INSERT``. 495* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_QINQ``, ``mbuf.vlan_tci_outer``. 496* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_QINQ``, 497 ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:RTE_MBUF_F_RX_VLAN`` 498 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``. 499* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_QINQ_STRIP``, 500 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_QINQ_INSERT``. 501 502 503.. _nic_features_fec: 504 505FEC 506--- 507 508Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode. 509It adds error correction information to data packets at the transmit end, and uses the error correction 510information to correct the bit errors generated during data packet transmission at the receive end. This 511improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required. 512 513* **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``. 514* **[provides] rte_eth_fec_capa**: ``speed:RTE_ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``. 515* **[related] API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``. 516 517 518.. _nic_features_ip_reassembly: 519 520IP reassembly 521------------- 522 523Supports IP reassembly in hardware. 524 525* **[provides] eth_dev_ops**: ``ip_reassembly_capability_get``, 526 ``ip_reassembly_conf_get``, ``ip_reassembly_conf_set``. 527* **[related] API**: ``rte_eth_ip_reassembly_capability_get()``, 528 ``rte_eth_ip_reassembly_conf_get()``, ``rte_eth_ip_reassembly_conf_set()``. 529 530 531.. _nic_features_l3_checksum_offload: 532 533L3 checksum offload 534------------------- 535 536Supports L3 checksum offload. 537 538* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``. 539* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``. 540* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``, 541 ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``. 542* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 543* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN`` | 544 ``RTE_MBUF_F_RX_IP_CKSUM_BAD`` | ``RTE_MBUF_F_RX_IP_CKSUM_GOOD`` | 545 ``RTE_MBUF_F_RX_IP_CKSUM_NONE``. 546* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``, 547 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``. 548 549 550.. _nic_features_l4_checksum_offload: 551 552L4 checksum offload 553------------------- 554 555Supports L4 checksum offload. 556 557* **[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``. 558* **[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``. 559* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``, 560 ``mbuf.ol_flags:RTE_MBUF_F_TX_L4_NO_CKSUM`` | ``RTE_MBUF_F_TX_TCP_CKSUM`` | 561 ``RTE_MBUF_F_TX_SCTP_CKSUM`` | ``RTE_MBUF_F_TX_UDP_CKSUM``. 562* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 563* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN`` | 564 ``RTE_MBUF_F_RX_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_L4_CKSUM_GOOD`` | 565 ``RTE_MBUF_F_RX_L4_CKSUM_NONE``. 566* **[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``, 567 ``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``. 568 569.. _nic_features_hw_timestamp: 570 571Timestamp offload 572----------------- 573 574Supports Timestamp. 575 576* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TIMESTAMP``. 577* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_TIMESTAMP``. 578* **[provides] mbuf**: ``mbuf.timestamp``. 579* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: RTE_ETH_RX_OFFLOAD_TIMESTAMP``. 580* **[related] eth_dev_ops**: ``read_clock``. 581 582.. _nic_features_macsec_offload: 583 584MACsec offload 585-------------- 586 587Supports MACsec. 588 589* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``. 590* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``. 591* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_MACSEC``. 592* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``, 593 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``. 594 595 596.. _nic_features_inner_l3_checksum: 597 598Inner L3 checksum 599----------------- 600 601Supports inner packet L3 checksum. 602 603* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``. 604* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 605* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``, 606 ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``, 607 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IP_CKSUM``, 608 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``. 609* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 610* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD``. 611* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``, 612 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 613 614 615.. _nic_features_inner_l4_checksum: 616 617Inner L4 checksum 618----------------- 619 620Supports inner packet L4 checksum. 621 622* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``. 623* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN`` | 624 ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_INVALID``. 625* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``. 626* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``. 627 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_UDP_CKSUM``. 628* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 629* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``, 630 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``. 631 632 633.. _nic_features_shared_rx_queue: 634 635Shared Rx queue 636--------------- 637 638Supports shared Rx queue for ports in same Rx domain of a switch domain. 639 640* **[uses] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RXQ_SHARE``. 641* **[uses] rte_eth_dev_info,rte_eth_switch_info**: ``rx_domain``, ``domain_id``. 642* **[uses] rte_eth_rxconf**: ``share_group``, ``share_qid``. 643* **[provides] mbuf**: ``mbuf.port``. 644 645 646.. _nic_features_packet_type_parsing: 647 648Packet type parsing 649------------------- 650 651Supports packet type parsing and returns a list of supported types. 652Allows application to set ptypes it is interested in. 653 654* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``, 655* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``, 656 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``. 657* **[provides] mbuf**: ``mbuf.packet_type``. 658 659 660.. _nic_features_timesync: 661 662Timesync 663-------- 664 665Supports IEEE1588/802.1AS timestamping. 666 667* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable`` 668 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``, 669 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``. 670* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``, 671 ``rte_eth_timesync_read_rx_timestamp()``, 672 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``, 673 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``. 674 675 676.. _nic_features_rx_descriptor_status: 677 678Rx descriptor status 679-------------------- 680 681Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is 682used, status can be "Available", "Done" or "Unavailable". 683 684* **[implements] rte_eth_dev**: ``rx_descriptor_status``. 685* **[related] API**: ``rte_eth_rx_descriptor_status()``. 686 687 688.. _nic_features_tx_descriptor_status: 689 690Tx descriptor status 691-------------------- 692 693Supports checking the status of a Tx descriptor. Status can be "Full", "Done" 694or "Unavailable." 695 696* **[implements] rte_eth_dev**: ``tx_descriptor_status``. 697* **[related] API**: ``rte_eth_tx_descriptor_status()``. 698 699 700.. _nic_features_tx_queue_count: 701 702Tx queue count 703-------------- 704 705Supports getting the number of used descriptors of a Tx queue. 706 707* **[implements] eth_dev_ops**: ``tx_queue_count``. 708* **[related] API**: ``rte_eth_tx_queue_count()``. 709 710 711.. _nic_features_basic_stats: 712 713Basic stats 714----------- 715 716Support basic statistics such as: ipackets, opackets, ibytes, obytes, 717imissed, ierrors, oerrors, rx_nombuf. 718 719And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors. 720 721These apply to all drivers. 722 723* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``. 724* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``. 725 726 727.. _nic_features_extended_stats: 728 729Extended stats 730-------------- 731 732Supports Extended Statistics, changes from driver to driver. 733 734* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``. 735* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``. 736* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``, 737 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``, 738 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``. 739 740 741.. _nic_features_stats_per_queue: 742 743Stats per queue 744--------------- 745 746Supports configuring per-queue stat counter mapping. 747 748* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``. 749* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``, 750 ``rte_eth_dev_set_tx_queue_stats_mapping()``. 751 752 753.. _nic_features_congestion_management: 754 755Congestion management 756--------------------- 757 758Supports congestion management. 759 760* **[implements] eth_dev_ops**: ``cman_info_get``, ``cman_config_set``, ``cman_config_get``. 761* **[related] API**: ``rte_eth_cman_info_get()``, ``rte_eth_cman_config_init()``, 762 ``rte_eth_cman_config_set()``, ``rte_eth_cman_config_get()``. 763 764 765.. _nic_features_fw_version: 766 767FW version 768---------- 769 770Supports getting device hardware firmware information. 771 772* **[implements] eth_dev_ops**: ``fw_version_get``. 773* **[related] API**: ``rte_eth_dev_fw_version_get()``. 774 775 776.. _nic_features_eeprom_dump: 777 778EEPROM dump 779----------- 780 781Supports getting/setting device eeprom data. 782 783* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``. 784* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``, 785 ``rte_eth_dev_set_eeprom()``. 786 787 788.. _nic_features_module_eeprom_dump: 789 790Module EEPROM dump 791------------------ 792 793Supports getting information and data of plugin module eeprom. 794 795* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. 796* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. 797 798 799.. _nic_features_register_dump: 800 801Registers dump 802-------------- 803 804Supports retrieving device registers and registering attributes (number of 805registers and register size). 806 807* **[implements] eth_dev_ops**: ``get_reg``. 808* **[related] API**: ``rte_eth_dev_get_reg_info()``. 809 810 811.. _nic_features_led: 812 813LED 814--- 815 816Supports turning on/off a software controllable LED on a device. 817 818* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``. 819* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``. 820 821 822.. _nic_features_multiprocess_aware: 823 824Multiprocess aware 825------------------ 826 827Driver can be used for primary-secondary process model. 828 829 830.. _nic_features_freebsd: 831 832FreeBSD 833------- 834 835Supports running on FreeBSD. 836 837 838.. _nic_features_linux: 839 840Linux 841----- 842 843Supports running on Linux. 844 845 846.. _nic_features_windows: 847 848Windows 849------- 850 851Supports running on Windows. 852 853 854.. _nic_features_armv7: 855 856ARMv7 857----- 858 859Support armv7 architecture. 860 861 862.. _nic_features_armv8: 863 864ARMv8 865----- 866 867Support armv8a (64bit) architecture. 868 869 870.. _nic_features_loongarch64: 871 872LoongArch64 873----------- 874 875Support 64-bit LoongArch architecture. 876 877 878.. _nic_features_power8: 879 880Power8 881------ 882 883Support PowerPC architecture. 884 885 886.. _nic_features_x86-32: 887 888rv64 889---- 890 891Support 64-bit RISC-V architecture. 892 893 894x86-32 895------ 896 897Support 32bits x86 architecture. 898 899 900.. _nic_features_x86-64: 901 902x86-64 903------ 904 905Support 64bits x86 architecture. 906 907.. _nic_features_usage_doc: 908 909Usage doc 910--------- 911 912Documentation describes usage. 913 914See ``doc/guides/nics/*.rst`` 915 916 917.. _nic_features_design_doc: 918 919Design doc 920---------- 921 922Documentation describes design. 923 924See ``doc/guides/nics/*.rst``. 925 926 927.. _nic_features_perf_doc: 928 929Perf doc 930-------- 931 932Documentation describes performance values. 933 934See ``dpdk.org/doc/perf/*``. 935 936.. _nic_features_runtime_rx_queue_setup: 937 938Runtime Rx queue setup 939---------------------- 940 941Supports Rx queue setup after device started. 942 943* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``. 944* **[related] API**: ``rte_eth_dev_info_get()``. 945 946.. _nic_features_runtime_tx_queue_setup: 947 948Runtime Tx queue setup 949---------------------- 950 951Supports Tx queue setup after device started. 952 953* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``. 954* **[related] API**: ``rte_eth_dev_info_get()``. 955 956.. _nic_features_burst_mode_info: 957 958Burst mode info 959--------------- 960 961Supports to get Rx/Tx packet burst mode information. 962 963* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``. 964* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``. 965 966.. _nic_features_get_monitor_addr: 967 968PMD power management using monitor addresses 969-------------------------------------------- 970 971Supports getting a monitoring condition to use together with Ethernet PMD power 972management (see :doc:`../prog_guide/power_man` for more details). 973 974* **[implements] eth_dev_ops**: ``get_monitor_addr`` 975 976.. _nic_features_other: 977 978Other dev ops not represented by a Feature 979------------------------------------------ 980 981* ``rxq_info_get`` 982* ``txq_info_get`` 983* ``vlan_tpid_set`` 984* ``vlan_strip_queue_set`` 985* ``vlan_pvid_set`` 986* ``rx_queue_count`` 987* ``uc_hash_table_set`` 988* ``uc_all_hash_table_set`` 989* ``udp_tunnel_port_add`` 990* ``udp_tunnel_port_del`` 991* ``tx_pkt_prepare`` 992