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: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 DEV_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:DEV_TX_OFFLOAD_MT_LOCKFREE``. 108* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``. 109* **[related] API**: ``rte_eth_tx_burst()``. 110 111 112.. _nic_features_fast_mbuf_free: 113 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:DEV_TX_OFFLOAD_MBUF_FAST_FREE``. 121* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``. 122 123 124.. _nic_features_free_tx_mbuf_on_demand: 125 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_jumbo_frame: 162 163Jumbo frame 164----------- 165 166Supports Rx jumbo frames. 167 168* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``. 169 ``dev_conf.rxmode.max_rx_pkt_len``. 170* **[related] rte_eth_dev_info**: ``max_rx_pktlen``. 171* **[related] API**: ``rte_eth_dev_set_mtu()``. 172 173 174.. _nic_features_scattered_rx: 175 176Scattered Rx 177------------ 178 179Supports receiving segmented mbufs. 180 181* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``. 182* **[implements] datapath**: ``Scattered Rx function``. 183* **[implements] rte_eth_dev_data**: ``scattered_rx``. 184* **[provides] eth_dev_ops**: ``rxq_info_get:scattered_rx``. 185* **[related] eth_dev_ops**: ``rx_pkt_burst``. 186 187 188.. _nic_features_buffer_split: 189 190Buffer Split on Rx 191------------------ 192 193Scatters the packets being received on specified boundaries to segmented mbufs. 194 195* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``. 196* **[uses] rte_eth_rxconf**: ``rx_conf.rx_seg, rx_conf.rx_nseg``. 197* **[implements] datapath**: ``Buffer Split functionality``. 198* **[provides] rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``. 199* **[related] API**: ``rte_eth_rx_queue_setup()``. 200 201 202.. _nic_features_lro: 203 204LRO 205--- 206 207Supports Large Receive Offload. 208 209* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``. 210 ``dev_conf.rxmode.max_lro_pkt_size``. 211* **[implements] datapath**: ``LRO functionality``. 212* **[implements] rte_eth_dev_data**: ``lro``. 213* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``. 214* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``. 215* **[provides] rte_eth_dev_info**: ``max_lro_pkt_size``. 216 217 218.. _nic_features_tso: 219 220TSO 221--- 222 223Supports TCP Segmentation Offloading. 224 225* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``. 226* **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``. 227* **[uses] mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``. 228* **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``. 229* **[implements] datapath**: ``TSO functionality``. 230* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``. 231 232 233.. _nic_features_promiscuous_mode: 234 235Promiscuous mode 236---------------- 237 238Supports enabling/disabling promiscuous mode for a port. 239 240* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``. 241* **[implements] rte_eth_dev_data**: ``promiscuous``. 242* **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``, 243 ``rte_eth_promiscuous_get()``. 244 245 246.. _nic_features_allmulticast_mode: 247 248Allmulticast mode 249----------------- 250 251Supports enabling/disabling receiving multicast frames. 252 253* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``. 254* **[implements] rte_eth_dev_data**: ``all_multicast``. 255* **[related] API**: ``rte_eth_allmulticast_enable()``, 256 ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``. 257 258 259.. _nic_features_unicast_mac_filter: 260 261Unicast MAC filter 262------------------ 263 264Supports adding MAC addresses to enable incoming filtering of packets. 265 266* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``. 267* **[implements] rte_eth_dev_data**: ``mac_addrs``. 268* **[related] API**: ``rte_eth_dev_default_mac_addr_set()``, 269 ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``, 270 ``rte_eth_macaddr_get()``. 271 272 273.. _nic_features_multicast_mac_filter: 274 275Multicast MAC filter 276-------------------- 277 278Supports setting multicast addresses to filter. 279 280* **[implements] eth_dev_ops**: ``set_mc_addr_list``. 281* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``. 282 283 284.. _nic_features_rss_hash: 285 286RSS hash 287-------- 288 289Supports RSS hashing on RX. 290 291* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``. 292* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``. 293* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``. 294* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``. 295* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``. 296 297 298.. _nic_features_inner_rss: 299 300Inner RSS 301--------- 302 303Supports RX RSS hashing on Inner headers. 304 305* **[uses] rte_flow_action_rss**: ``level``. 306* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``. 307* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``. 308 309 310.. _nic_features_rss_key_update: 311 312RSS key update 313-------------- 314 315Supports configuration of Receive Side Scaling (RSS) hash computation. Updating 316Receive Side Scaling (RSS) hash key. 317 318* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``. 319* **[provides] rte_eth_dev_info**: ``hash_key_size``. 320* **[related] API**: ``rte_eth_dev_rss_hash_update()``, 321 ``rte_eth_dev_rss_hash_conf_get()``. 322 323 324.. _nic_features_rss_reta_update: 325 326RSS reta update 327--------------- 328 329Supports updating Redirection Table of the Receive Side Scaling (RSS). 330 331* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``. 332* **[provides] rte_eth_dev_info**: ``reta_size``. 333* **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``. 334 335 336.. _nic_features_vmdq: 337 338VMDq 339---- 340 341Supports Virtual Machine Device Queues (VMDq). 342 343* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``. 344* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``. 345* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``. 346* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``. 347* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``. 348 349 350.. _nic_features_sriov: 351 352SR-IOV 353------ 354 355Driver supports creating Virtual Functions. 356 357* **[implements] rte_eth_dev_data**: ``sriov``. 358 359.. _nic_features_dcb: 360 361DCB 362--- 363 364Supports Data Center Bridging (DCB). 365 366* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``. 367* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``. 368* **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``. 369* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``. 370* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``. 371* **[implements] eth_dev_ops**: ``get_dcb_info``. 372* **[related] API**: ``rte_eth_dev_get_dcb_info()``. 373 374 375.. _nic_features_vlan_filter: 376 377VLAN filter 378----------- 379 380Supports filtering of a VLAN Tag identifier. 381 382* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``. 383* **[implements] eth_dev_ops**: ``vlan_filter_set``. 384* **[related] API**: ``rte_eth_dev_vlan_filter()``. 385 386 387.. _nic_features_flow_control: 388 389Flow control 390------------ 391 392Supports configuring link flow control. 393 394* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``, 395 ``priority_flow_ctrl_set``. 396* **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``, 397 ``rte_eth_dev_priority_flow_ctrl_set()``. 398 399 400.. _nic_features_rate_limitation: 401 402Rate limitation 403--------------- 404 405Supports Tx rate limitation for a queue. 406 407* **[implements] eth_dev_ops**: ``set_queue_rate_limit``. 408* **[related] API**: ``rte_eth_set_queue_rate_limit()``. 409 410 411.. _nic_features_inline_crypto_doc: 412 413Inline crypto 414------------- 415 416Supports inline crypto processing defined by rte_security library to perform crypto 417operations of security protocol while packet is received in NIC. NIC is not aware 418of protocol operations. See Security library and PMD documentation for more details. 419 420* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``, 421* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``. 422* **[uses] mbuf**: ``mbuf.l2_len``. 423* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 424 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``. 425* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``, 426 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``. 427* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``, 428 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``. 429* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO`` 430 431 432.. _nic_features_inline_protocol_doc: 433 434Inline protocol 435--------------- 436 437Supports inline protocol processing defined by rte_security library to perform 438protocol processing for the security protocol (e.g. IPsec, MACSEC) while the 439packet is received at NIC. The NIC is capable of understanding the security 440protocol operations. See security library and PMD documentation for more details. 441 442* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``, 443* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``. 444* **[uses] mbuf**: ``mbuf.l2_len``. 445* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 446 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``, 447 ``capabilities_get``. 448* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``, 449 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``. 450* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``, 451 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``. 452* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL`` 453 454 455.. _nic_features_crc_offload: 456 457CRC offload 458----------- 459 460Supports CRC stripping by hardware. 461A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC. 462 463* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``. 464 465 466.. _nic_features_vlan_offload: 467 468VLAN offload 469------------ 470 471Supports VLAN offload to hardware. 472 473* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``. 474* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``. 475* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``. 476* **[implements] eth_dev_ops**: ``vlan_offload_set``. 477* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``. 478* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``, 479 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``. 480* **[related] API**: ``rte_eth_dev_set_vlan_offload()``, 481 ``rte_eth_dev_get_vlan_offload()``. 482 483 484.. _nic_features_qinq_offload: 485 486QinQ offload 487------------ 488 489Supports QinQ (queue in queue) offload. 490 491* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``. 492* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``. 493* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``. 494* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``, 495 ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` 496 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``. 497* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``, 498 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``. 499 500 501.. _nic_features_fec: 502 503FEC 504--- 505 506Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode. 507It adds error correction information to data packets at the transmit end, and uses the error correction 508information to correct the bit errors generated during data packet transmission at the receive end. This 509improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required. 510 511* **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``. 512* **[provides] rte_eth_fec_capa**: ``speed:ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``. 513* **[related] API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``. 514 515 516.. _nic_features_l3_checksum_offload: 517 518L3 checksum offload 519------------------- 520 521Supports L3 checksum offload. 522 523* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``. 524* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``. 525* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 526 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``. 527* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 528* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` | 529 ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` | 530 ``PKT_RX_IP_CKSUM_NONE``. 531* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``, 532 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``. 533 534 535.. _nic_features_l4_checksum_offload: 536 537L4 checksum offload 538------------------- 539 540Supports L4 checksum offload. 541 542* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``. 543* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 544* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 545 ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` | 546 ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``. 547* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 548* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` | 549 ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` | 550 ``PKT_RX_L4_CKSUM_NONE``. 551* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``, 552 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 553 554.. _nic_features_hw_timestamp: 555 556Timestamp offload 557----------------- 558 559Supports Timestamp. 560 561* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``. 562* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``. 563* **[provides] mbuf**: ``mbuf.timestamp``. 564* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``. 565* **[related] eth_dev_ops**: ``read_clock``. 566 567.. _nic_features_macsec_offload: 568 569MACsec offload 570-------------- 571 572Supports MACsec. 573 574* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``. 575* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``. 576* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``. 577* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``, 578 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``. 579 580 581.. _nic_features_inner_l3_checksum: 582 583Inner L3 checksum 584----------------- 585 586Supports inner packet L3 checksum. 587 588* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``. 589* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 590* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 591 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 592 ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``, 593 ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 594* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 595* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_IP_CKSUM_BAD``. 596* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``, 597 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 598 599 600.. _nic_features_inner_l4_checksum: 601 602Inner L4 checksum 603----------------- 604 605Supports inner packet L4 checksum. 606 607* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``. 608* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` | 609 ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``. 610* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 611* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 612 ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``. 613* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 614* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``, 615 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 616 617 618.. _nic_features_packet_type_parsing: 619 620Packet type parsing 621------------------- 622 623Supports packet type parsing and returns a list of supported types. 624Allows application to set ptypes it is interested in. 625 626* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``, 627* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``, 628 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``. 629* **[provides] mbuf**: ``mbuf.packet_type``. 630 631 632.. _nic_features_timesync: 633 634Timesync 635-------- 636 637Supports IEEE1588/802.1AS timestamping. 638 639* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable`` 640 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``, 641 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``. 642* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``, 643 ``rte_eth_timesync_read_rx_timestamp()``, 644 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``, 645 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``. 646 647 648.. _nic_features_rx_descriptor_status: 649 650Rx descriptor status 651-------------------- 652 653Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is 654used, status can be "Available", "Done" or "Unavailable". 655 656* **[implements] rte_eth_dev**: ``rx_descriptor_status``. 657* **[related] API**: ``rte_eth_rx_descriptor_status()``. 658 659 660.. _nic_features_tx_descriptor_status: 661 662Tx descriptor status 663-------------------- 664 665Supports checking the status of a Tx descriptor. Status can be "Full", "Done" 666or "Unavailable." 667 668* **[implements] rte_eth_dev**: ``tx_descriptor_status``. 669* **[related] API**: ``rte_eth_tx_descriptor_status()``. 670 671 672.. _nic_features_basic_stats: 673 674Basic stats 675----------- 676 677Support basic statistics such as: ipackets, opackets, ibytes, obytes, 678imissed, ierrors, oerrors, rx_nombuf. 679 680And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors. 681 682These apply to all drivers. 683 684* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``. 685* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``. 686 687 688.. _nic_features_extended_stats: 689 690Extended stats 691-------------- 692 693Supports Extended Statistics, changes from driver to driver. 694 695* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``. 696* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``. 697* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``, 698 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``, 699 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``. 700 701 702.. _nic_features_stats_per_queue: 703 704Stats per queue 705--------------- 706 707Supports configuring per-queue stat counter mapping. 708 709* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``. 710* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``, 711 ``rte_eth_dev_set_tx_queue_stats_mapping()``. 712 713 714.. _nic_features_fw_version: 715 716FW version 717---------- 718 719Supports getting device hardware firmware information. 720 721* **[implements] eth_dev_ops**: ``fw_version_get``. 722* **[related] API**: ``rte_eth_dev_fw_version_get()``. 723 724 725.. _nic_features_eeprom_dump: 726 727EEPROM dump 728----------- 729 730Supports getting/setting device eeprom data. 731 732* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``. 733* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``, 734 ``rte_eth_dev_set_eeprom()``. 735 736 737.. _nic_features_module_eeprom_dump: 738 739Module EEPROM dump 740------------------ 741 742Supports getting information and data of plugin module eeprom. 743 744* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. 745* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. 746 747 748.. _nic_features_register_dump: 749 750Registers dump 751-------------- 752 753Supports retrieving device registers and registering attributes (number of 754registers and register size). 755 756* **[implements] eth_dev_ops**: ``get_reg``. 757* **[related] API**: ``rte_eth_dev_get_reg_info()``. 758 759 760.. _nic_features_led: 761 762LED 763--- 764 765Supports turning on/off a software controllable LED on a device. 766 767* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``. 768* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``. 769 770 771.. _nic_features_multiprocess_aware: 772 773Multiprocess aware 774------------------ 775 776Driver can be used for primary-secondary process model. 777 778 779.. _nic_features_freebsd: 780 781FreeBSD 782------- 783 784Supports running on FreeBSD. 785 786 787.. _nic_features_linux: 788 789Linux 790----- 791 792Supports running on Linux. 793 794 795.. _nic_features_windows: 796 797Windows 798------- 799 800Supports running on Windows. 801 802 803.. _nic_features_armv7: 804 805ARMv7 806----- 807 808Support armv7 architecture. 809 810 811.. _nic_features_armv8: 812 813ARMv8 814----- 815 816Support armv8a (64bit) architecture. 817 818 819.. _nic_features_power8: 820 821Power8 822------ 823 824Support PowerPC architecture. 825 826 827.. _nic_features_x86-32: 828 829x86-32 830------ 831 832Support 32bits x86 architecture. 833 834 835.. _nic_features_x86-64: 836 837x86-64 838------ 839 840Support 64bits x86 architecture. 841 842 843.. _nic_features_usage_doc: 844 845Usage doc 846--------- 847 848Documentation describes usage. 849 850See ``doc/guides/nics/*.rst`` 851 852 853.. _nic_features_design_doc: 854 855Design doc 856---------- 857 858Documentation describes design. 859 860See ``doc/guides/nics/*.rst``. 861 862 863.. _nic_features_perf_doc: 864 865Perf doc 866-------- 867 868Documentation describes performance values. 869 870See ``dpdk.org/doc/perf/*``. 871 872.. _nic_features_runtime_rx_queue_setup: 873 874Runtime Rx queue setup 875---------------------- 876 877Supports Rx queue setup after device started. 878 879* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``. 880* **[related] API**: ``rte_eth_dev_info_get()``. 881 882.. _nic_features_runtime_tx_queue_setup: 883 884Runtime Tx queue setup 885---------------------- 886 887Supports Tx queue setup after device started. 888 889* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``. 890* **[related] API**: ``rte_eth_dev_info_get()``. 891 892.. _nic_features_burst_mode_info: 893 894Burst mode info 895--------------- 896 897Supports to get Rx/Tx packet burst mode information. 898 899* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``. 900* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``. 901 902.. _nic_features_get_monitor_addr: 903 904PMD power management using monitor addresses 905-------------------------------------------- 906 907Supports getting a monitoring condition to use together with Ethernet PMD power 908management (see :doc:`../prog_guide/power_man` for more details). 909 910* **[implements] eth_dev_ops**: ``get_monitor_addr`` 911 912.. _nic_features_other: 913 914Other dev ops not represented by a Feature 915------------------------------------------ 916 917* ``rxq_info_get`` 918* ``txq_info_get`` 919* ``vlan_tpid_set`` 920* ``vlan_strip_queue_set`` 921* ``vlan_pvid_set`` 922* ``rx_queue_count`` 923* ``uc_hash_table_set`` 924* ``uc_all_hash_table_set`` 925* ``udp_tunnel_port_add`` 926* ``udp_tunnel_port_del`` 927* ``tx_pkt_prepare`` 928