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