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 the DPDK Flow API for generic filtering. 406 407* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``. 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_l3_checksum_offload: 522 523L3 checksum offload 524------------------- 525 526Supports L3 checksum offload. 527 528* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``. 529* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``. 530* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 531 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``. 532* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 533* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` | 534 ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` | 535 ``PKT_RX_IP_CKSUM_NONE``. 536* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``, 537 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``. 538 539 540.. _nic_features_l4_checksum_offload: 541 542L4 checksum offload 543------------------- 544 545Supports L4 checksum offload. 546 547* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``. 548* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 549* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 550 ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` | 551 ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``. 552* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 553* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` | 554 ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` | 555 ``PKT_RX_L4_CKSUM_NONE``. 556* **[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``, 557 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 558 559.. _nic_features_hw_timestamp: 560 561Timestamp offload 562----------------- 563 564Supports Timestamp. 565 566* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``. 567* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``. 568* **[provides] mbuf**: ``mbuf.timestamp``. 569* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``. 570* **[related] eth_dev_ops**: ``read_clock``. 571 572.. _nic_features_macsec_offload: 573 574MACsec offload 575-------------- 576 577Supports MACsec. 578 579* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``. 580* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``. 581* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``. 582* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``, 583 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``. 584 585 586.. _nic_features_inner_l3_checksum: 587 588Inner L3 checksum 589----------------- 590 591Supports inner packet L3 checksum. 592 593* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``. 594* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 595* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 596 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 597 ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``, 598 ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 599* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 600* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``. 601* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``, 602 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 603 604 605.. _nic_features_inner_l4_checksum: 606 607Inner L4 checksum 608----------------- 609 610Supports inner packet L4 checksum. 611 612* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``. 613* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` | 614 ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``. 615* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 616* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 617 ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``. 618* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 619* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``, 620 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 621 622 623.. _nic_features_packet_type_parsing: 624 625Packet type parsing 626------------------- 627 628Supports packet type parsing and returns a list of supported types. 629Allows application to set ptypes it is interested in. 630 631* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``, 632* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``, 633 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``. 634* **[provides] mbuf**: ``mbuf.packet_type``. 635 636 637.. _nic_features_timesync: 638 639Timesync 640-------- 641 642Supports IEEE1588/802.1AS timestamping. 643 644* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable`` 645 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``, 646 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``. 647* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``, 648 ``rte_eth_timesync_read_rx_timestamp()``, 649 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``, 650 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``. 651 652 653.. _nic_features_rx_descriptor_status: 654 655Rx descriptor status 656-------------------- 657 658Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is 659used, status can be "Available", "Done" or "Unavailable". When 660``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is 661not set". 662 663* **[implements] rte_eth_dev**: ``rx_descriptor_status``. 664* **[related] API**: ``rte_eth_rx_descriptor_status()``. 665* **[implements] rte_eth_dev**: ``rx_descriptor_done``. 666* **[related] API**: ``rte_eth_rx_descriptor_done()``. 667 668 669.. _nic_features_tx_descriptor_status: 670 671Tx descriptor status 672-------------------- 673 674Supports checking the status of a Tx descriptor. Status can be "Full", "Done" 675or "Unavailable." 676 677* **[implements] rte_eth_dev**: ``tx_descriptor_status``. 678* **[related] API**: ``rte_eth_tx_descriptor_status()``. 679 680 681.. _nic_features_basic_stats: 682 683Basic stats 684----------- 685 686Support basic statistics such as: ipackets, opackets, ibytes, obytes, 687imissed, ierrors, oerrors, rx_nombuf. 688 689And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors. 690 691These apply to all drivers. 692 693* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``. 694* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``. 695 696 697.. _nic_features_extended_stats: 698 699Extended stats 700-------------- 701 702Supports Extended Statistics, changes from driver to driver. 703 704* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``. 705* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``. 706* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``, 707 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``, 708 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``. 709 710 711.. _nic_features_stats_per_queue: 712 713Stats per queue 714--------------- 715 716Supports configuring per-queue stat counter mapping. 717 718* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``. 719* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``, 720 ``rte_eth_dev_set_tx_queue_stats_mapping()``. 721 722 723.. _nic_features_fw_version: 724 725FW version 726---------- 727 728Supports getting device hardware firmware information. 729 730* **[implements] eth_dev_ops**: ``fw_version_get``. 731* **[related] API**: ``rte_eth_dev_fw_version_get()``. 732 733 734.. _nic_features_eeprom_dump: 735 736EEPROM dump 737----------- 738 739Supports getting/setting device eeprom data. 740 741* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``. 742* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``, 743 ``rte_eth_dev_set_eeprom()``. 744 745 746.. _nic_features_module_eeprom_dump: 747 748Module EEPROM dump 749------------------ 750 751Supports getting information and data of plugin module eeprom. 752 753* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. 754* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. 755 756 757.. _nic_features_register_dump: 758 759Registers dump 760-------------- 761 762Supports retrieving device registers and registering attributes (number of 763registers and register size). 764 765* **[implements] eth_dev_ops**: ``get_reg``. 766* **[related] API**: ``rte_eth_dev_get_reg_info()``. 767 768 769.. _nic_features_led: 770 771LED 772--- 773 774Supports turning on/off a software controllable LED on a device. 775 776* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``. 777* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``. 778 779 780.. _nic_features_multiprocess_aware: 781 782Multiprocess aware 783------------------ 784 785Driver can be used for primary-secondary process model. 786 787 788.. _nic_features_bsd_nic_uio: 789 790BSD nic_uio 791----------- 792 793BSD ``nic_uio`` module supported. 794 795 796.. _nic_features_linux_uio: 797 798Linux UIO 799--------- 800 801Works with ``igb_uio`` kernel module. 802 803* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``. 804 805.. _nic_features_linux_vfio: 806 807Linux VFIO 808---------- 809 810Works with ``vfio-pci`` kernel module. 811 812* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``. 813 814.. _nic_features_other_kdrv: 815 816Other kdrv 817---------- 818 819Kernel module other than above ones supported. 820 821 822.. _nic_features_armv7: 823 824ARMv7 825----- 826 827Support armv7 architecture. 828 829 830.. _nic_features_armv8: 831 832ARMv8 833----- 834 835Support armv8a (64bit) architecture. 836 837 838.. _nic_features_power8: 839 840Power8 841------ 842 843Support PowerPC architecture. 844 845 846.. _nic_features_x86-32: 847 848x86-32 849------ 850 851Support 32bits x86 architecture. 852 853 854.. _nic_features_x86-64: 855 856x86-64 857------ 858 859Support 64bits x86 architecture. 860 861 862.. _nic_features_usage_doc: 863 864Usage doc 865--------- 866 867Documentation describes usage. 868 869See ``doc/guides/nics/*.rst`` 870 871 872.. _nic_features_design_doc: 873 874Design doc 875---------- 876 877Documentation describes design. 878 879See ``doc/guides/nics/*.rst``. 880 881 882.. _nic_features_perf_doc: 883 884Perf doc 885-------- 886 887Documentation describes performance values. 888 889See ``dpdk.org/doc/perf/*``. 890 891.. _nic_features_runtime_rx_queue_setup: 892 893Runtime Rx queue setup 894---------------------- 895 896Supports Rx queue setup after device started. 897 898* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``. 899* **[related] API**: ``rte_eth_dev_info_get()``. 900 901.. _nic_features_runtime_tx_queue_setup: 902 903Runtime Tx queue setup 904---------------------- 905 906Supports Tx queue setup after device started. 907 908* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``. 909* **[related] API**: ``rte_eth_dev_info_get()``. 910 911.. _nic_features_burst_mode_info: 912 913Burst mode info 914--------------- 915 916Supports to get Rx/Tx packet burst mode information. 917 918* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``. 919* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``. 920 921.. _nic_features_other: 922 923Other dev ops not represented by a Feature 924------------------------------------------ 925 926* ``rxq_info_get`` 927* ``txq_info_get`` 928* ``vlan_tpid_set`` 929* ``vlan_strip_queue_set`` 930* ``vlan_pvid_set`` 931* ``rx_queue_count`` 932* ``uc_hash_table_set`` 933* ``uc_all_hash_table_set`` 934* ``udp_tunnel_port_add`` 935* ``udp_tunnel_port_del`` 936* ``tx_pkt_prepare`` 937