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