doc: document NIC features
Document NIC features, add more information about them and add more implementation related support. Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> Signed-off-by: John McNamara <john.mcnamara@intel.com> Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com> Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
This commit is contained in:
parent
f82fd96ae0
commit
dad1ec72a3
890
doc/guides/nics/features.rst
Normal file
890
doc/guides/nics/features.rst
Normal file
@ -0,0 +1,890 @@
|
||||
.. BSD LICENSE
|
||||
Copyright(c) 2017 Intel Corporation. All rights reserved.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Intel Corporation nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Features Overview
|
||||
=================
|
||||
|
||||
This section explains the supported features that are listed in the
|
||||
:doc:`overview`.
|
||||
|
||||
As a guide to implementers it also shows the structs where the features are
|
||||
defined and the APIs that can be use to get/set the values.
|
||||
|
||||
Following tags used for feature details, these are from driver point of view:
|
||||
|
||||
``[uses]`` : Driver uses some kind of input from the application.
|
||||
|
||||
``[implements]`` : Driver implements a functionality.
|
||||
|
||||
``[provides]`` : Driver provides some kind of data to the application. It is possible
|
||||
to provide data by implementing some function, but "provides" is used
|
||||
for cases where provided data can't be represented simply by a function.
|
||||
|
||||
``[related]`` : Related API with that feature.
|
||||
|
||||
|
||||
.. _nic_features_speed_capabilities:
|
||||
|
||||
Speed capabilities
|
||||
------------------
|
||||
|
||||
Supports getting the speed capabilities that the current device is capable of.
|
||||
|
||||
* **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
|
||||
* **[related] API**: ``rte_eth_dev_info_get()``.
|
||||
|
||||
|
||||
.. _nic_features_link_status:
|
||||
|
||||
Link status
|
||||
-----------
|
||||
|
||||
Supports getting the link speed, duplex mode and link state (up/down).
|
||||
|
||||
* **[implements] eth_dev_ops**: ``link_update``.
|
||||
* **[implements] rte_eth_dev_data**: ``dev_link``.
|
||||
* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
|
||||
|
||||
|
||||
.. _nic_features_link_status_event:
|
||||
|
||||
Link status event
|
||||
-----------------
|
||||
|
||||
Supports Link Status Change interrupts.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.intr_conf.lsc``.
|
||||
* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
|
||||
* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
|
||||
* **[implements] rte_eth_dev_data**: ``dev_link``.
|
||||
* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
|
||||
* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
|
||||
|
||||
|
||||
.. _nic_features_removal_event:
|
||||
|
||||
Removal event
|
||||
-------------
|
||||
|
||||
Supports device removal interrupts.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.intr_conf.rmv``.
|
||||
* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
|
||||
* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
|
||||
* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
|
||||
|
||||
|
||||
.. _nic_features_queue_status_event:
|
||||
|
||||
Queue status event
|
||||
------------------
|
||||
|
||||
Supports queue enable/disable events.
|
||||
|
||||
* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
|
||||
|
||||
|
||||
.. _nic_features_rx_interrupt:
|
||||
|
||||
Rx interrupt
|
||||
------------
|
||||
|
||||
Supports Rx interrupts.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.intr_conf.rxq``.
|
||||
* **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
|
||||
* **[related] API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
|
||||
|
||||
|
||||
.. _nic_features_lock-free_tx_queue:
|
||||
|
||||
Lock-free Tx queue
|
||||
------------------
|
||||
|
||||
If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
|
||||
invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
|
||||
|
||||
* **[provides] rte_eth_dev_info**: ``tx_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
|
||||
* **[related] API**: ``rte_eth_tx_burst()``.
|
||||
|
||||
|
||||
.. _nic_features_free_tx_mbuf_on_demand:
|
||||
|
||||
Free Tx mbuf on demand
|
||||
----------------------
|
||||
|
||||
Supports freeing consumed buffers on a Tx ring.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``tx_done_cleanup``.
|
||||
* **[related] API**: ``rte_eth_tx_done_cleanup()``.
|
||||
|
||||
|
||||
.. _nic_features_queue_start_stop:
|
||||
|
||||
Queue start/stop
|
||||
----------------
|
||||
|
||||
Supports starting/stopping a specific Rx/Tx queue of a port.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
|
||||
``tx_queue_stop``.
|
||||
* **[related] API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
|
||||
``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
|
||||
|
||||
|
||||
.. _nic_features_mtu_update:
|
||||
|
||||
MTU update
|
||||
----------
|
||||
|
||||
Supports updating port MTU.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``mtu_set``.
|
||||
* **[implements] rte_eth_dev_data**: ``mtu``.
|
||||
* **[provides] rte_eth_dev_info**: ``max_rx_pktlen``.
|
||||
* **[related] API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
|
||||
|
||||
|
||||
.. _nic_features_jumbo_frame:
|
||||
|
||||
Jumbo frame
|
||||
-----------
|
||||
|
||||
Supports Rx jumbo frames.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.jumbo_frame``,
|
||||
``dev_conf.rxmode.max_rx_pkt_len``.
|
||||
* **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
|
||||
* **[related] API**: ``rte_eth_dev_set_mtu()``.
|
||||
|
||||
|
||||
.. _nic_features_scattered_rx:
|
||||
|
||||
Scattered Rx
|
||||
------------
|
||||
|
||||
Supports receiving segmented mbufs.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.enable_scatter``.
|
||||
* **[implements] datapath**: ``Scattered Rx function``.
|
||||
* **[implements] rte_eth_dev_data**: ``scattered_rx``.
|
||||
* **[provides] eth_dev_ops**: ``rxq_info_get:scattered_rx``.
|
||||
* **[related] eth_dev_ops**: ``rx_pkt_burst``.
|
||||
|
||||
|
||||
.. _nic_features_lro:
|
||||
|
||||
LRO
|
||||
---
|
||||
|
||||
Supports Large Receive Offload.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.enable_lro``.
|
||||
* **[implements] datapath**: ``LRO functionality``.
|
||||
* **[implements] rte_eth_dev_data**: ``lro``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
|
||||
|
||||
|
||||
.. _nic_features_tso:
|
||||
|
||||
TSO
|
||||
---
|
||||
|
||||
Supports TCP Segmentation Offloading.
|
||||
|
||||
* **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
|
||||
* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_TCP_SEG``.
|
||||
* **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
|
||||
* **[implements] datapath**: ``TSO functionality``.
|
||||
* **[provides] rte_eth_dev_info**: ``tx_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
|
||||
|
||||
|
||||
.. _nic_features_promiscuous_mode:
|
||||
|
||||
Promiscuous mode
|
||||
----------------
|
||||
|
||||
Supports enabling/disabling promiscuous mode for a port.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
|
||||
* **[implements] rte_eth_dev_data**: ``promiscuous``.
|
||||
* **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
|
||||
``rte_eth_promiscuous_get()``.
|
||||
|
||||
|
||||
.. _nic_features_allmulticast_mode:
|
||||
|
||||
Allmulticast mode
|
||||
-----------------
|
||||
|
||||
Supports enabling/disabling receiving multicast frames.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
|
||||
* **[implements] rte_eth_dev_data**: ``all_multicast``.
|
||||
* **[related] API**: ``rte_eth_allmulticast_enable()``,
|
||||
``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
|
||||
|
||||
|
||||
.. _nic_features_unicast_mac_filter:
|
||||
|
||||
Unicast MAC filter
|
||||
------------------
|
||||
|
||||
Supports adding MAC addresses to enable whitelist filtering to accept packets.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
|
||||
* **[implements] rte_eth_dev_data**: ``mac_addrs``.
|
||||
* **[related] API**: ``rte_eth_dev_default_mac_addr_set()``,
|
||||
``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
|
||||
``rte_eth_macaddr_get()``.
|
||||
|
||||
|
||||
.. _nic_features_multicast_mac_filter:
|
||||
|
||||
Multicast MAC filter
|
||||
--------------------
|
||||
|
||||
Supports setting multicast addresses to filter.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``set_mc_addr_list``.
|
||||
* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``.
|
||||
|
||||
|
||||
.. _nic_features_rss_hash:
|
||||
|
||||
RSS hash
|
||||
--------
|
||||
|
||||
Supports RSS hashing on RX.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
|
||||
* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
|
||||
* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
|
||||
|
||||
|
||||
.. _nic_features_rss_key_update:
|
||||
|
||||
RSS key update
|
||||
--------------
|
||||
|
||||
Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
|
||||
Receive Side Scaling (RSS) hash key.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
|
||||
* **[provides] rte_eth_dev_info**: ``hash_key_size``.
|
||||
* **[related] API**: ``rte_eth_dev_rss_hash_update()``,
|
||||
``rte_eth_dev_rss_hash_conf_get()``.
|
||||
|
||||
|
||||
.. _nic_features_rss_reta_update:
|
||||
|
||||
RSS reta update
|
||||
---------------
|
||||
|
||||
Supports updating Redirection Table of the Receive Side Scaling (RSS).
|
||||
|
||||
* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
|
||||
* **[provides] rte_eth_dev_info**: ``reta_size``.
|
||||
* **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
|
||||
|
||||
|
||||
.. _nic_features_vmdq:
|
||||
|
||||
VMDq
|
||||
----
|
||||
|
||||
Supports Virtual Machine Device Queues (VMDq).
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
|
||||
* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
|
||||
* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
|
||||
* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
|
||||
* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
|
||||
|
||||
|
||||
.. _nic_features_sriov:
|
||||
|
||||
SR-IOV
|
||||
------
|
||||
|
||||
Driver supports creating Virtual Functions.
|
||||
|
||||
* **[implements] rte_eth_dev_data**: ``sriov``.
|
||||
|
||||
.. _nic_features_dcb:
|
||||
|
||||
DCB
|
||||
---
|
||||
|
||||
Supports Data Center Bridging (DCB).
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
|
||||
* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
|
||||
* **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
|
||||
* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
|
||||
* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
|
||||
* **[implements] eth_dev_ops**: ``get_dcb_info``.
|
||||
* **[related] API**: ``rte_eth_dev_get_dcb_info()``.
|
||||
|
||||
|
||||
.. _nic_features_vlan_filter:
|
||||
|
||||
VLAN filter
|
||||
-----------
|
||||
|
||||
Supports filtering of a VLAN Tag identifier.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.hw_vlan_filter``.
|
||||
* **[implements] eth_dev_ops**: ``vlan_filter_set``.
|
||||
* **[related] API**: ``rte_eth_dev_vlan_filter()``.
|
||||
|
||||
|
||||
.. _nic_features_ethertype_filter:
|
||||
|
||||
Ethertype filter
|
||||
----------------
|
||||
|
||||
Supports filtering on Ethernet type.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
.. _nic_features_ntuple_filter:
|
||||
|
||||
N-tuple filter
|
||||
--------------
|
||||
|
||||
Supports filtering on N-tuple values.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
|
||||
.. _nic_features_syn_filter:
|
||||
|
||||
SYN filter
|
||||
----------
|
||||
|
||||
Supports TCP syn filtering.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
|
||||
.. _nic_features_tunnel_filter:
|
||||
|
||||
Tunnel filter
|
||||
-------------
|
||||
|
||||
Supports tunnel filtering.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
|
||||
.. _nic_features_flexible_filter:
|
||||
|
||||
Flexible filter
|
||||
---------------
|
||||
|
||||
Supports a flexible (non-tuple or Ethertype) filter.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
|
||||
.. _nic_features_hash_filter:
|
||||
|
||||
Hash filter
|
||||
-----------
|
||||
|
||||
Supports Hash filtering.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
|
||||
.. _nic_features_flow_director:
|
||||
|
||||
Flow director
|
||||
-------------
|
||||
|
||||
Supports Flow Director style filtering to queues.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
|
||||
``PKT_RX_FDIR_FLX``.
|
||||
* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
|
||||
|
||||
|
||||
.. _nic_features_flow_control:
|
||||
|
||||
Flow control
|
||||
------------
|
||||
|
||||
Supports configuring link flow control.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
|
||||
``priority_flow_ctrl_set``.
|
||||
* **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
|
||||
``rte_eth_dev_priority_flow_ctrl_set()``.
|
||||
|
||||
|
||||
.. _nic_features_flow_api:
|
||||
|
||||
Flow API
|
||||
--------
|
||||
|
||||
Supports the DPDK Flow API for generic filtering.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
|
||||
* **[implements] rte_flow_ops**: ``All``.
|
||||
|
||||
|
||||
.. _nic_features_rate_limitation:
|
||||
|
||||
Rate limitation
|
||||
---------------
|
||||
|
||||
Supports Tx rate limitation for a queue.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
|
||||
* **[related] API**: ``rte_eth_set_queue_rate_limit()``.
|
||||
|
||||
|
||||
.. _nic_features_traffic_mirroring:
|
||||
|
||||
Traffic mirroring
|
||||
-----------------
|
||||
|
||||
Supports adding traffic mirroring rules.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
|
||||
* **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
|
||||
|
||||
|
||||
.. _nic_features_crc_offload:
|
||||
|
||||
CRC offload
|
||||
-----------
|
||||
|
||||
Supports CRC stripping by hardware.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.hw_strip_crc``.
|
||||
|
||||
|
||||
.. _nic_features_vlan_offload:
|
||||
|
||||
VLAN offload
|
||||
------------
|
||||
|
||||
Supports VLAN offload to hardware.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.hw_vlan_strip``,
|
||||
``dev_conf.rxmode.hw_vlan_filter``, ``dev_conf.rxmode.hw_vlan_extend``.
|
||||
* **[implements] eth_dev_ops**: ``vlan_offload_set``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
|
||||
``tx_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
|
||||
* **[related] API**: ``rte_eth_dev_set_vlan_offload()``,
|
||||
``rte_eth_dev_get_vlan_offload()``.
|
||||
|
||||
|
||||
.. _nic_features_qinq_offload:
|
||||
|
||||
QinQ offload
|
||||
------------
|
||||
|
||||
Supports QinQ (queue in queue) offload.
|
||||
|
||||
* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
|
||||
``mbuf.vlan_tci_outer``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
|
||||
``tx_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
|
||||
|
||||
|
||||
.. _nic_features_l3_checksum_offload:
|
||||
|
||||
L3 checksum offload
|
||||
-------------------
|
||||
|
||||
Supports L3 checksum offload.
|
||||
|
||||
* **[uses] user config**: ``dev_conf.rxmode.hw_ip_checksum``.
|
||||
* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
|
||||
``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
|
||||
``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
|
||||
``PKT_RX_IP_CKSUM_NONE``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
|
||||
``tx_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
|
||||
|
||||
|
||||
.. _nic_features_l4_checksum_offload:
|
||||
|
||||
L4 checksum offload
|
||||
-------------------
|
||||
|
||||
Supports L4 checksum offload.
|
||||
|
||||
* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
|
||||
``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
|
||||
``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
|
||||
``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
|
||||
``PKT_RX_L4_CKSUM_NONE``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
|
||||
``tx_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
|
||||
|
||||
|
||||
.. _nic_features_macsec_offload:
|
||||
|
||||
MACsec offload
|
||||
--------------
|
||||
|
||||
Supports MACsec.
|
||||
|
||||
* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
|
||||
``tx_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
|
||||
|
||||
|
||||
.. _nic_features_inner_l3_checksum:
|
||||
|
||||
Inner L3 checksum
|
||||
-----------------
|
||||
|
||||
Supports inner packet L3 checksum.
|
||||
|
||||
* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
|
||||
``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
|
||||
``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
|
||||
``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
|
||||
* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
|
||||
* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
|
||||
* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
|
||||
``tx_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
|
||||
|
||||
|
||||
.. _nic_features_inner_l4_checksum:
|
||||
|
||||
Inner L4 checksum
|
||||
-----------------
|
||||
|
||||
Supports inner packet L4 checksum.
|
||||
|
||||
|
||||
.. _nic_features_packet_type_parsing:
|
||||
|
||||
Packet type parsing
|
||||
-------------------
|
||||
|
||||
Supports packet type parsing and returns a list of supported types.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
|
||||
* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``.
|
||||
|
||||
|
||||
.. _nic_features_timesync:
|
||||
|
||||
Timesync
|
||||
--------
|
||||
|
||||
Supports IEEE1588/802.1AS timestamping.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
|
||||
``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
|
||||
``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
|
||||
* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
|
||||
``rte_eth_timesync_read_rx_timestamp()``,
|
||||
``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
|
||||
``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
|
||||
|
||||
|
||||
.. _nic_features_rx_descriptor_status:
|
||||
|
||||
Rx descriptor status
|
||||
--------------------
|
||||
|
||||
Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
|
||||
used, status can be "Available", "Done" or "Unavailable". When
|
||||
``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
|
||||
not set".
|
||||
|
||||
* **[implements] eth_dev_ops**: ``rx_descriptor_status``.
|
||||
* **[related] API**: ``rte_eth_rx_descriptor_status()``.
|
||||
* **[implements] eth_dev_ops**: ``rx_descriptor_done``.
|
||||
* **[related] API**: ``rte_eth_rx_descriptor_done()``.
|
||||
|
||||
|
||||
.. _nic_features_tx_descriptor_status:
|
||||
|
||||
Tx descriptor status
|
||||
--------------------
|
||||
|
||||
Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
|
||||
or "Unavailable."
|
||||
|
||||
* **[implements] eth_dev_ops**: ``tx_descriptor_status``.
|
||||
* **[related] API**: ``rte_eth_tx_descriptor_status()``.
|
||||
|
||||
|
||||
.. _nic_features_basic_stats:
|
||||
|
||||
Basic stats
|
||||
-----------
|
||||
|
||||
Support basic statistics such as: ipackets, opackets, ibytes, obytes,
|
||||
imissed, ierrors, oerrors, rx_nombuf.
|
||||
|
||||
And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
|
||||
|
||||
These apply to all drivers.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
|
||||
* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
|
||||
|
||||
|
||||
.. _nic_features_extended_stats:
|
||||
|
||||
Extended stats
|
||||
--------------
|
||||
|
||||
Supports Extended Statistics, changes from driver to driver.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
|
||||
* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
|
||||
* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
|
||||
``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
|
||||
``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
|
||||
|
||||
|
||||
.. _nic_features_stats_per_queue:
|
||||
|
||||
Stats per queue
|
||||
---------------
|
||||
|
||||
Supports configuring per-queue stat counter mapping.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
|
||||
* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
|
||||
``rte_eth_dev_set_tx_queue_stats_mapping()``.
|
||||
|
||||
|
||||
.. _nic_features_fw_version:
|
||||
|
||||
FW version
|
||||
----------
|
||||
|
||||
Supports getting device hardware firmware information.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``fw_version_get``.
|
||||
* **[related] API**: ``rte_eth_dev_fw_version_get()``.
|
||||
|
||||
|
||||
.. _nic_features_eeprom_dump:
|
||||
|
||||
EEPROM dump
|
||||
-----------
|
||||
|
||||
Supports getting/setting device eeprom data.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
|
||||
* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
|
||||
``rte_eth_dev_set_eeprom()``.
|
||||
|
||||
|
||||
.. _nic_features_register_dump:
|
||||
|
||||
Registers dump
|
||||
--------------
|
||||
|
||||
Supports retrieving device registers and registering attributes (number of
|
||||
registers and register size).
|
||||
|
||||
* **[implements] eth_dev_ops**: ``get_reg``.
|
||||
* **[related] API**: ``rte_eth_dev_get_reg_info()``.
|
||||
|
||||
|
||||
.. _nic_features_led:
|
||||
|
||||
LED
|
||||
---
|
||||
|
||||
Supports turning on/off a software controllable LED on a device.
|
||||
|
||||
* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
|
||||
* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
|
||||
|
||||
|
||||
.. _nic_features_multiprocess_aware:
|
||||
|
||||
Multiprocess aware
|
||||
------------------
|
||||
|
||||
Driver can be used for primary-secondary process model.
|
||||
|
||||
|
||||
.. _nic_features_bsd_nic_uio:
|
||||
|
||||
BSD nic_uio
|
||||
-----------
|
||||
|
||||
BSD ``nic_uio`` module supported.
|
||||
|
||||
|
||||
.. _nic_features_linux_uio:
|
||||
|
||||
Linux UIO
|
||||
---------
|
||||
|
||||
Works with ``igb_uio`` kernel module.
|
||||
|
||||
* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
|
||||
|
||||
.. _nic_features_linux_vfio:
|
||||
|
||||
Linux VFIO
|
||||
----------
|
||||
|
||||
Works with ``vfio-pci`` kernel module.
|
||||
|
||||
* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
|
||||
|
||||
.. _nic_features_other_kdrv:
|
||||
|
||||
Other kdrv
|
||||
----------
|
||||
|
||||
Kernel module other than above ones supported.
|
||||
|
||||
|
||||
.. _nic_features_armv7:
|
||||
|
||||
ARMv7
|
||||
-----
|
||||
|
||||
Support armv7 architecture.
|
||||
|
||||
Use ``defconfig_arm-armv7a-*-*``.
|
||||
|
||||
|
||||
.. _nic_features_armv8:
|
||||
|
||||
ARMv8
|
||||
-----
|
||||
|
||||
Support armv8a (64bit) architecture.
|
||||
|
||||
Use ``defconfig_arm64-armv8a-*-*``
|
||||
|
||||
|
||||
.. _nic_features_power8:
|
||||
|
||||
Power8
|
||||
------
|
||||
|
||||
Support PowerPC architecture.
|
||||
|
||||
Use ``defconfig_ppc_64-power8-*-*``
|
||||
|
||||
.. _nic_features_x86-32:
|
||||
|
||||
x86-32
|
||||
------
|
||||
|
||||
Support 32bits x86 architecture.
|
||||
|
||||
Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
|
||||
|
||||
|
||||
.. _nic_features_x86-64:
|
||||
|
||||
x86-64
|
||||
------
|
||||
|
||||
Support 64bits x86 architecture.
|
||||
|
||||
Use ``defconfig_x86_64-native-*-*``.
|
||||
|
||||
|
||||
.. _nic_features_usage_doc:
|
||||
|
||||
Usage doc
|
||||
---------
|
||||
|
||||
Documentation describes usage.
|
||||
|
||||
See ``doc/guides/nics/*.rst``
|
||||
|
||||
|
||||
.. _nic_features_design_doc:
|
||||
|
||||
Design doc
|
||||
----------
|
||||
|
||||
Documentation describes design.
|
||||
|
||||
See ``doc/guides/nics/*.rst``.
|
||||
|
||||
|
||||
.. _nic_features_perf_doc:
|
||||
|
||||
Perf doc
|
||||
--------
|
||||
|
||||
Documentation describes performance values.
|
||||
|
||||
See ``dpdk.org/doc/perf/*``.
|
||||
|
||||
|
||||
|
||||
.. _nic_features_other:
|
||||
|
||||
Other dev ops not represented by a Feature
|
||||
------------------------------------------
|
||||
|
||||
* ``rxq_info_get``
|
||||
* ``txq_info_get``
|
||||
* ``vlan_tpid_set``
|
||||
* ``vlan_strip_queue_set``
|
||||
* ``vlan_pvid_set``
|
||||
* ``rx_queue_count``
|
||||
* ``l2_tunnel_offload_set``
|
||||
* ``uc_hash_table_set``
|
||||
* ``uc_all_hash_table_set``
|
||||
* ``udp_tunnel_port_add``
|
||||
* ``udp_tunnel_port_del``
|
||||
* ``l2_tunnel_eth_type_conf``
|
||||
* ``l2_tunnel_offload_set``
|
||||
* ``tx_pkt_prepare``
|
@ -36,6 +36,7 @@ Network Interface Controller Drivers
|
||||
:numbered:
|
||||
|
||||
overview
|
||||
features
|
||||
build_and_test
|
||||
ark
|
||||
avp
|
||||
|
@ -48,6 +48,8 @@ There are more differences between drivers regarding some internal properties,
|
||||
portability or even documentation availability.
|
||||
Most of these differences are summarized below.
|
||||
|
||||
More details about features can be found in :doc:`features`.
|
||||
|
||||
.. _table_net_pmd_features:
|
||||
|
||||
.. include:: overview_table.txt
|
||||
|
Loading…
Reference in New Issue
Block a user