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