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] 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()``. 187 188 189.. _nic_features_lro: 190 191LRO 192--- 193 194Supports Large Receive Offload. 195 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``. 203 204 205.. _nic_features_tso: 206 207TSO 208--- 209 210Supports TCP Segmentation Offloading. 211 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``. 218 219 220.. _nic_features_promiscuous_mode: 221 222Promiscuous mode 223---------------- 224 225Supports enabling/disabling promiscuous mode for a port. 226 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()``. 231 232 233.. _nic_features_allmulticast_mode: 234 235Allmulticast mode 236----------------- 237 238Supports enabling/disabling receiving multicast frames. 239 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()``. 244 245 246.. _nic_features_unicast_mac_filter: 247 248Unicast MAC filter 249------------------ 250 251Supports adding MAC addresses to enable incoming filtering of packets. 252 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()``. 258 259 260.. _nic_features_multicast_mac_filter: 261 262Multicast MAC filter 263-------------------- 264 265Supports setting multicast addresses to filter. 266 267* **[implements] eth_dev_ops**: ``set_mc_addr_list``. 268* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``. 269 270 271.. _nic_features_rss_hash: 272 273RSS hash 274-------- 275 276Supports RSS hashing on RX. 277 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``. 283 284 285.. _nic_features_inner_rss: 286 287Inner RSS 288--------- 289 290Supports RX RSS hashing on Inner headers. 291 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``. 295 296 297.. _nic_features_rss_key_update: 298 299RSS key update 300-------------- 301 302Supports configuration of Receive Side Scaling (RSS) hash computation. Updating 303Receive Side Scaling (RSS) hash key. 304 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()``. 309 310 311.. _nic_features_rss_reta_update: 312 313RSS reta update 314--------------- 315 316Supports updating Redirection Table of the Receive Side Scaling (RSS). 317 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()``. 321 322 323.. _nic_features_vmdq: 324 325VMDq 326---- 327 328Supports Virtual Machine Device Queues (VMDq). 329 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``. 335 336 337.. _nic_features_sriov: 338 339SR-IOV 340------ 341 342Driver supports creating Virtual Functions. 343 344* **[implements] rte_eth_dev_data**: ``sriov``. 345 346.. _nic_features_dcb: 347 348DCB 349--- 350 351Supports Data Center Bridging (DCB). 352 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()``. 360 361 362.. _nic_features_vlan_filter: 363 364VLAN filter 365----------- 366 367Supports filtering of a VLAN Tag identifier. 368 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()``. 372 373 374.. _nic_features_flow_control: 375 376Flow control 377------------ 378 379Supports configuring link flow control. 380 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()``. 388 389 390.. _nic_features_rate_limitation: 391 392Rate limitation 393--------------- 394 395Supports Tx rate limitation for a queue. 396 397* **[implements] eth_dev_ops**: ``set_queue_rate_limit``. 398* **[related] API**: ``rte_eth_set_queue_rate_limit()``. 399 400 401.. _nic_features_inline_crypto_doc: 402 403Inline crypto 404------------- 405 406Supports inline crypto processing defined by rte_security library to perform crypto 407operations of security protocol while packet is received in NIC. NIC is not aware 408of protocol operations. See Security library and PMD documentation for more details. 409 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`` 420 421 422.. _nic_features_inline_protocol_doc: 423 424Inline protocol 425--------------- 426 427Supports inline protocol processing defined by rte_security library to perform 428protocol processing for the security protocol (e.g. IPsec, MACSEC) while the 429packet is received at NIC. The NIC is capable of understanding the security 430protocol operations. See security library and PMD documentation for more details. 431 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`` 443 444 445.. _nic_features_crc_offload: 446 447CRC offload 448----------- 449 450Supports CRC stripping by hardware. 451A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC. 452 453* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_KEEP_CRC``. 454 455 456.. _nic_features_vlan_offload: 457 458VLAN offload 459------------ 460 461Supports VLAN offload to hardware. 462 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()``. 472 473 474.. _nic_features_qinq_offload: 475 476QinQ offload 477------------ 478 479Supports QinQ (queue in queue) offload. 480 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``. 489 490 491.. _nic_features_fec: 492 493FEC 494--- 495 496Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode. 497It adds error correction information to data packets at the transmit end, and uses the error correction 498information to correct the bit errors generated during data packet transmission at the receive end. This 499improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required. 500 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()``. 504 505 506.. _nic_features_ip_reassembly: 507 508IP reassembly 509------------- 510 511Supports IP reassembly in hardware. 512 513* **[provides] eth_dev_ops**: ``ip_reassembly_capability_get``, 514 ``ip_reassembly_conf_get``, ``ip_reassembly_conf_set``. 515* **[related] API**: ``rte_eth_ip_reassembly_capability_get()``, 516 ``rte_eth_ip_reassembly_conf_get()``, ``rte_eth_ip_reassembly_conf_set()``. 517 518 519.. _nic_features_l3_checksum_offload: 520 521L3 checksum offload 522------------------- 523 524Supports L3 checksum offload. 525 526* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``. 527* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``. 528* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``, 529 ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``. 530* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 531* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN`` | 532 ``RTE_MBUF_F_RX_IP_CKSUM_BAD`` | ``RTE_MBUF_F_RX_IP_CKSUM_GOOD`` | 533 ``RTE_MBUF_F_RX_IP_CKSUM_NONE``. 534* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_IPV4_CKSUM``, 535 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_IPV4_CKSUM``. 536 537 538.. _nic_features_l4_checksum_offload: 539 540L4 checksum offload 541------------------- 542 543Supports L4 checksum offload. 544 545* **[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``. 546* **[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``. 547* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``, 548 ``mbuf.ol_flags:RTE_MBUF_F_TX_L4_NO_CKSUM`` | ``RTE_MBUF_F_TX_TCP_CKSUM`` | 549 ``RTE_MBUF_F_TX_SCTP_CKSUM`` | ``RTE_MBUF_F_TX_UDP_CKSUM``. 550* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 551* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN`` | 552 ``RTE_MBUF_F_RX_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_L4_CKSUM_GOOD`` | 553 ``RTE_MBUF_F_RX_L4_CKSUM_NONE``. 554* **[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``, 555 ``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``. 556 557.. _nic_features_hw_timestamp: 558 559Timestamp offload 560----------------- 561 562Supports Timestamp. 563 564* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_TIMESTAMP``. 565* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_TIMESTAMP``. 566* **[provides] mbuf**: ``mbuf.timestamp``. 567* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: RTE_ETH_RX_OFFLOAD_TIMESTAMP``. 568* **[related] eth_dev_ops**: ``read_clock``. 569 570.. _nic_features_macsec_offload: 571 572MACsec offload 573-------------- 574 575Supports MACsec. 576 577* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``. 578* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``. 579* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_MACSEC``. 580* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_MACSEC_STRIP``, 581 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_MACSEC_INSERT``. 582 583 584.. _nic_features_inner_l3_checksum: 585 586Inner L3 checksum 587----------------- 588 589Supports inner packet L3 checksum. 590 591* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``. 592* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 593* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_IP_CKSUM``, 594 ``mbuf.ol_flags:RTE_MBUF_F_TX_IPV4`` | ``RTE_MBUF_F_TX_IPV6``, 595 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IP_CKSUM``, 596 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``. 597* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 598* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD``. 599* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM``, 600 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 601 602 603.. _nic_features_inner_l4_checksum: 604 605Inner L4 checksum 606----------------- 607 608Supports inner packet L4 checksum. 609 610* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``. 611* **[provides] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN`` | 612 ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD`` | ``RTE_MBUF_F_RX_OUTER_L4_CKSUM_INVALID``. 613* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``. 614* **[uses] mbuf**: ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_IPV4`` | ``RTE_MBUF_F_TX_OUTER_IPV6``. 615 ``mbuf.ol_flags:RTE_MBUF_F_TX_OUTER_UDP_CKSUM``. 616* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 617* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM``, 618 ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``. 619 620 621.. _nic_features_shared_rx_queue: 622 623Shared Rx queue 624--------------- 625 626Supports shared Rx queue for ports in same Rx domain of a switch domain. 627 628* **[uses] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RXQ_SHARE``. 629* **[uses] rte_eth_dev_info,rte_eth_switch_info**: ``rx_domain``, ``domain_id``. 630* **[uses] rte_eth_rxconf**: ``share_group``, ``share_qid``. 631* **[provides] mbuf**: ``mbuf.port``. 632 633 634.. _nic_features_packet_type_parsing: 635 636Packet type parsing 637------------------- 638 639Supports packet type parsing and returns a list of supported types. 640Allows application to set ptypes it is interested in. 641 642* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``, 643* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``, 644 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``. 645* **[provides] mbuf**: ``mbuf.packet_type``. 646 647 648.. _nic_features_timesync: 649 650Timesync 651-------- 652 653Supports IEEE1588/802.1AS timestamping. 654 655* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable`` 656 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``, 657 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``. 658* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``, 659 ``rte_eth_timesync_read_rx_timestamp()``, 660 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``, 661 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``. 662 663 664.. _nic_features_rx_descriptor_status: 665 666Rx descriptor status 667-------------------- 668 669Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is 670used, status can be "Available", "Done" or "Unavailable". 671 672* **[implements] rte_eth_dev**: ``rx_descriptor_status``. 673* **[related] API**: ``rte_eth_rx_descriptor_status()``. 674 675 676.. _nic_features_tx_descriptor_status: 677 678Tx descriptor status 679-------------------- 680 681Supports checking the status of a Tx descriptor. Status can be "Full", "Done" 682or "Unavailable." 683 684* **[implements] rte_eth_dev**: ``tx_descriptor_status``. 685* **[related] API**: ``rte_eth_tx_descriptor_status()``. 686 687 688.. _nic_features_basic_stats: 689 690Basic stats 691----------- 692 693Support basic statistics such as: ipackets, opackets, ibytes, obytes, 694imissed, ierrors, oerrors, rx_nombuf. 695 696And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors. 697 698These apply to all drivers. 699 700* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``. 701* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``. 702 703 704.. _nic_features_extended_stats: 705 706Extended stats 707-------------- 708 709Supports Extended Statistics, changes from driver to driver. 710 711* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``. 712* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``. 713* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``, 714 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``, 715 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``. 716 717 718.. _nic_features_stats_per_queue: 719 720Stats per queue 721--------------- 722 723Supports configuring per-queue stat counter mapping. 724 725* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``. 726* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``, 727 ``rte_eth_dev_set_tx_queue_stats_mapping()``. 728 729 730.. _nic_features_fw_version: 731 732FW version 733---------- 734 735Supports getting device hardware firmware information. 736 737* **[implements] eth_dev_ops**: ``fw_version_get``. 738* **[related] API**: ``rte_eth_dev_fw_version_get()``. 739 740 741.. _nic_features_eeprom_dump: 742 743EEPROM dump 744----------- 745 746Supports getting/setting device eeprom data. 747 748* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``. 749* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``, 750 ``rte_eth_dev_set_eeprom()``. 751 752 753.. _nic_features_module_eeprom_dump: 754 755Module EEPROM dump 756------------------ 757 758Supports getting information and data of plugin module eeprom. 759 760* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. 761* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. 762 763 764.. _nic_features_register_dump: 765 766Registers dump 767-------------- 768 769Supports retrieving device registers and registering attributes (number of 770registers and register size). 771 772* **[implements] eth_dev_ops**: ``get_reg``. 773* **[related] API**: ``rte_eth_dev_get_reg_info()``. 774 775 776.. _nic_features_led: 777 778LED 779--- 780 781Supports turning on/off a software controllable LED on a device. 782 783* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``. 784* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``. 785 786 787.. _nic_features_multiprocess_aware: 788 789Multiprocess aware 790------------------ 791 792Driver can be used for primary-secondary process model. 793 794 795.. _nic_features_freebsd: 796 797FreeBSD 798------- 799 800Supports running on FreeBSD. 801 802 803.. _nic_features_linux: 804 805Linux 806----- 807 808Supports running on Linux. 809 810 811.. _nic_features_windows: 812 813Windows 814------- 815 816Supports running on Windows. 817 818 819.. _nic_features_armv7: 820 821ARMv7 822----- 823 824Support armv7 architecture. 825 826 827.. _nic_features_armv8: 828 829ARMv8 830----- 831 832Support armv8a (64bit) architecture. 833 834 835.. _nic_features_power8: 836 837Power8 838------ 839 840Support PowerPC architecture. 841 842 843.. _nic_features_x86-32: 844 845x86-32 846------ 847 848Support 32bits x86 architecture. 849 850 851.. _nic_features_x86-64: 852 853x86-64 854------ 855 856Support 64bits x86 architecture. 857 858 859.. _nic_features_usage_doc: 860 861Usage doc 862--------- 863 864Documentation describes usage. 865 866See ``doc/guides/nics/*.rst`` 867 868 869.. _nic_features_design_doc: 870 871Design doc 872---------- 873 874Documentation describes design. 875 876See ``doc/guides/nics/*.rst``. 877 878 879.. _nic_features_perf_doc: 880 881Perf doc 882-------- 883 884Documentation describes performance values. 885 886See ``dpdk.org/doc/perf/*``. 887 888.. _nic_features_runtime_rx_queue_setup: 889 890Runtime Rx queue setup 891---------------------- 892 893Supports Rx queue setup after device started. 894 895* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``. 896* **[related] API**: ``rte_eth_dev_info_get()``. 897 898.. _nic_features_runtime_tx_queue_setup: 899 900Runtime Tx queue setup 901---------------------- 902 903Supports Tx queue setup after device started. 904 905* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``. 906* **[related] API**: ``rte_eth_dev_info_get()``. 907 908.. _nic_features_burst_mode_info: 909 910Burst mode info 911--------------- 912 913Supports to get Rx/Tx packet burst mode information. 914 915* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``. 916* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``. 917 918.. _nic_features_get_monitor_addr: 919 920PMD power management using monitor addresses 921-------------------------------------------- 922 923Supports getting a monitoring condition to use together with Ethernet PMD power 924management (see :doc:`../prog_guide/power_man` for more details). 925 926* **[implements] eth_dev_ops**: ``get_monitor_addr`` 927 928.. _nic_features_other: 929 930Other dev ops not represented by a Feature 931------------------------------------------ 932 933* ``rxq_info_get`` 934* ``txq_info_get`` 935* ``vlan_tpid_set`` 936* ``vlan_strip_queue_set`` 937* ``vlan_pvid_set`` 938* ``rx_queue_count`` 939* ``uc_hash_table_set`` 940* ``uc_all_hash_table_set`` 941* ``udp_tunnel_port_add`` 942* ``udp_tunnel_port_del`` 943* ``tx_pkt_prepare`` 944