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_flow_api: 401 402Flow API 403-------- 404 405Supports flow API family. 406 407* **[implements] eth_dev_ops**: ``flow_ops_get``. 408* **[implements] rte_flow_ops**: ``All``. 409 410 411.. _nic_features_rate_limitation: 412 413Rate limitation 414--------------- 415 416Supports Tx rate limitation for a queue. 417 418* **[implements] eth_dev_ops**: ``set_queue_rate_limit``. 419* **[related] API**: ``rte_eth_set_queue_rate_limit()``. 420 421 422.. _nic_features_traffic_mirroring: 423 424Traffic mirroring 425----------------- 426 427Supports adding traffic mirroring rules. 428 429* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``. 430* **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``. 431 432 433.. _nic_features_inline_crypto_doc: 434 435Inline crypto 436------------- 437 438Supports inline crypto processing defined by rte_security library to perform crypto 439operations of security protocol while packet is received in NIC. NIC is not aware 440of protocol 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* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 445 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``. 446* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``, 447 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``. 448* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``, 449 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``. 450* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO`` 451 452 453.. _nic_features_inline_protocol_doc: 454 455Inline protocol 456--------------- 457 458Supports inline protocol processing defined by rte_security library to perform 459protocol processing for the security protocol (e.g. IPsec, MACSEC) while the 460packet is received at NIC. The NIC is capable of understanding the security 461protocol operations. See security library and PMD documentation for more details. 462 463* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``, 464* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``. 465* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 466 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``, 467 ``capabilities_get``. 468* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``, 469 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``. 470* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``, 471 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``. 472* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL`` 473 474 475.. _nic_features_crc_offload: 476 477CRC offload 478----------- 479 480Supports CRC stripping by hardware. 481A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC. 482 483* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``. 484 485 486.. _nic_features_vlan_offload: 487 488VLAN offload 489------------ 490 491Supports VLAN offload to hardware. 492 493* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``. 494* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``. 495* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``. 496* **[implements] eth_dev_ops**: ``vlan_offload_set``. 497* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``. 498* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``, 499 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``. 500* **[related] API**: ``rte_eth_dev_set_vlan_offload()``, 501 ``rte_eth_dev_get_vlan_offload()``. 502 503 504.. _nic_features_qinq_offload: 505 506QinQ offload 507------------ 508 509Supports QinQ (queue in queue) offload. 510 511* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``. 512* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``. 513* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``. 514* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``, 515 ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` 516 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``. 517* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``, 518 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``. 519 520 521.. _nic_features_fec: 522 523FEC 524--- 525 526Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode. 527It adds error correction information to data packets at the transmit end, and uses the error correction 528information to correct the bit errors generated during data packet transmission at the receive end. This 529improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required. 530 531* **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``. 532* **[provides] rte_eth_fec_capa**: ``speed:ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``. 533* **[related] API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``. 534 535 536.. _nic_features_l3_checksum_offload: 537 538L3 checksum offload 539------------------- 540 541Supports L3 checksum offload. 542 543* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``. 544* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``. 545* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 546 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``. 547* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 548* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` | 549 ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` | 550 ``PKT_RX_IP_CKSUM_NONE``. 551* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``, 552 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``. 553 554 555.. _nic_features_l4_checksum_offload: 556 557L4 checksum offload 558------------------- 559 560Supports L4 checksum offload. 561 562* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``. 563* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 564* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 565 ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` | 566 ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``. 567* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 568* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` | 569 ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` | 570 ``PKT_RX_L4_CKSUM_NONE``. 571* **[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``, 572 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 573 574.. _nic_features_hw_timestamp: 575 576Timestamp offload 577----------------- 578 579Supports Timestamp. 580 581* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``. 582* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``. 583* **[provides] mbuf**: ``mbuf.timestamp``. 584* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``. 585* **[related] eth_dev_ops**: ``read_clock``. 586 587.. _nic_features_macsec_offload: 588 589MACsec offload 590-------------- 591 592Supports MACsec. 593 594* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``. 595* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``. 596* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``. 597* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``, 598 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``. 599 600 601.. _nic_features_inner_l3_checksum: 602 603Inner L3 checksum 604----------------- 605 606Supports inner packet L3 checksum. 607 608* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``. 609* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 610* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 611 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 612 ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``, 613 ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 614* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 615* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_IP_CKSUM_BAD``. 616* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``, 617 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 618 619 620.. _nic_features_inner_l4_checksum: 621 622Inner L4 checksum 623----------------- 624 625Supports inner packet L4 checksum. 626 627* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``. 628* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` | 629 ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``. 630* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 631* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 632 ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``. 633* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 634* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``, 635 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 636 637 638.. _nic_features_packet_type_parsing: 639 640Packet type parsing 641------------------- 642 643Supports packet type parsing and returns a list of supported types. 644Allows application to set ptypes it is interested in. 645 646* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``, 647* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``, 648 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``. 649* **[provides] mbuf**: ``mbuf.packet_type``. 650 651 652.. _nic_features_timesync: 653 654Timesync 655-------- 656 657Supports IEEE1588/802.1AS timestamping. 658 659* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable`` 660 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``, 661 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``. 662* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``, 663 ``rte_eth_timesync_read_rx_timestamp()``, 664 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``, 665 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``. 666 667 668.. _nic_features_rx_descriptor_status: 669 670Rx descriptor status 671-------------------- 672 673Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is 674used, status can be "Available", "Done" or "Unavailable". When 675``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is 676not set". 677 678* **[implements] rte_eth_dev**: ``rx_descriptor_status``. 679* **[related] API**: ``rte_eth_rx_descriptor_status()``. 680* **[implements] rte_eth_dev**: ``rx_descriptor_done``. 681* **[related] API**: ``rte_eth_rx_descriptor_done()``. 682 683 684.. _nic_features_tx_descriptor_status: 685 686Tx descriptor status 687-------------------- 688 689Supports checking the status of a Tx descriptor. Status can be "Full", "Done" 690or "Unavailable." 691 692* **[implements] rte_eth_dev**: ``tx_descriptor_status``. 693* **[related] API**: ``rte_eth_tx_descriptor_status()``. 694 695 696.. _nic_features_basic_stats: 697 698Basic stats 699----------- 700 701Support basic statistics such as: ipackets, opackets, ibytes, obytes, 702imissed, ierrors, oerrors, rx_nombuf. 703 704And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors. 705 706These apply to all drivers. 707 708* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``. 709* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``. 710 711 712.. _nic_features_extended_stats: 713 714Extended stats 715-------------- 716 717Supports Extended Statistics, changes from driver to driver. 718 719* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``. 720* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``. 721* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``, 722 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``, 723 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``. 724 725 726.. _nic_features_stats_per_queue: 727 728Stats per queue 729--------------- 730 731Supports configuring per-queue stat counter mapping. 732 733* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``. 734* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``, 735 ``rte_eth_dev_set_tx_queue_stats_mapping()``. 736 737 738.. _nic_features_fw_version: 739 740FW version 741---------- 742 743Supports getting device hardware firmware information. 744 745* **[implements] eth_dev_ops**: ``fw_version_get``. 746* **[related] API**: ``rte_eth_dev_fw_version_get()``. 747 748 749.. _nic_features_eeprom_dump: 750 751EEPROM dump 752----------- 753 754Supports getting/setting device eeprom data. 755 756* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``. 757* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``, 758 ``rte_eth_dev_set_eeprom()``. 759 760 761.. _nic_features_module_eeprom_dump: 762 763Module EEPROM dump 764------------------ 765 766Supports getting information and data of plugin module eeprom. 767 768* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. 769* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. 770 771 772.. _nic_features_register_dump: 773 774Registers dump 775-------------- 776 777Supports retrieving device registers and registering attributes (number of 778registers and register size). 779 780* **[implements] eth_dev_ops**: ``get_reg``. 781* **[related] API**: ``rte_eth_dev_get_reg_info()``. 782 783 784.. _nic_features_led: 785 786LED 787--- 788 789Supports turning on/off a software controllable LED on a device. 790 791* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``. 792* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``. 793 794 795.. _nic_features_multiprocess_aware: 796 797Multiprocess aware 798------------------ 799 800Driver can be used for primary-secondary process model. 801 802 803.. _nic_features_freebsd: 804 805FreeBSD 806------- 807 808Supports running on FreeBSD. 809 810 811.. _nic_features_linux: 812 813Linux 814----- 815 816Supports running on Linux. 817 818 819.. _nic_features_windows: 820 821Windows 822------- 823 824Supports running on Windows. 825 826 827.. _nic_features_armv7: 828 829ARMv7 830----- 831 832Support armv7 architecture. 833 834 835.. _nic_features_armv8: 836 837ARMv8 838----- 839 840Support armv8a (64bit) architecture. 841 842 843.. _nic_features_power8: 844 845Power8 846------ 847 848Support PowerPC architecture. 849 850 851.. _nic_features_x86-32: 852 853x86-32 854------ 855 856Support 32bits x86 architecture. 857 858 859.. _nic_features_x86-64: 860 861x86-64 862------ 863 864Support 64bits x86 architecture. 865 866 867.. _nic_features_usage_doc: 868 869Usage doc 870--------- 871 872Documentation describes usage. 873 874See ``doc/guides/nics/*.rst`` 875 876 877.. _nic_features_design_doc: 878 879Design doc 880---------- 881 882Documentation describes design. 883 884See ``doc/guides/nics/*.rst``. 885 886 887.. _nic_features_perf_doc: 888 889Perf doc 890-------- 891 892Documentation describes performance values. 893 894See ``dpdk.org/doc/perf/*``. 895 896.. _nic_features_runtime_rx_queue_setup: 897 898Runtime Rx queue setup 899---------------------- 900 901Supports Rx queue setup after device started. 902 903* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``. 904* **[related] API**: ``rte_eth_dev_info_get()``. 905 906.. _nic_features_runtime_tx_queue_setup: 907 908Runtime Tx queue setup 909---------------------- 910 911Supports Tx queue setup after device started. 912 913* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``. 914* **[related] API**: ``rte_eth_dev_info_get()``. 915 916.. _nic_features_burst_mode_info: 917 918Burst mode info 919--------------- 920 921Supports to get Rx/Tx packet burst mode information. 922 923* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``. 924* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``. 925 926.. _nic_features_other: 927 928Other dev ops not represented by a Feature 929------------------------------------------ 930 931* ``rxq_info_get`` 932* ``txq_info_get`` 933* ``vlan_tpid_set`` 934* ``vlan_strip_queue_set`` 935* ``vlan_pvid_set`` 936* ``rx_queue_count`` 937* ``uc_hash_table_set`` 938* ``uc_all_hash_table_set`` 939* ``udp_tunnel_port_add`` 940* ``udp_tunnel_port_del`` 941* ``tx_pkt_prepare`` 942