xref: /dpdk/doc/guides/nics/bnxt.rst (revision dd0191d5e70d0e65a7f041a88af480fc673160e1)
1fd710bb1SScott Branden.. SPDX-License-Identifier: BSD-3-Clause
21adaf0e0SAjit Khaparde   Copyright 2020 Broadcom Inc.
335226814SAjit Khaparde
4b845c295SAjit Khaparde.. include:: <isonum.txt>
5b845c295SAjit Khaparde
693b7c9d8SAjit KhapardeBNXT Poll Mode Driver
793b7c9d8SAjit Khaparde=====================
835226814SAjit Khaparde
98809f78cSBruce RichardsonThe Broadcom BNXT PMD (**librte_net_bnxt**) implements support for adapters
10b845c295SAjit Khapardebased on Ethernet controllers belonging to the Broadcom
11b845c295SAjit KhapardeBCM5741X/BCM575XX NetXtreme-E\ |reg| Family of Ethernet Network Controllers.
1293b7c9d8SAjit Khaparde
13b845c295SAjit KhapardeA complete list is in the Supported Network Adapters section.
1493b7c9d8SAjit Khaparde
151adaf0e0SAjit KhapardeCPU Support
161adaf0e0SAjit Khaparde-----------
171adaf0e0SAjit Khaparde
181adaf0e0SAjit KhapardeBNXT PMD supports multiple CPU architectures, including x86-32, x86-64, and ARMv8.
191adaf0e0SAjit Khaparde
201adaf0e0SAjit KhapardeKernel Dependency
21e7d49fcdSLance Richardson-----------------
2235226814SAjit Khaparde
231adaf0e0SAjit KhapardeBNXT PMD requires a kernel module (VFIO or UIO) for setting up a device, mapping
241adaf0e0SAjit Khapardedevice memory to userspace, registering interrupts, etc.
251adaf0e0SAjit KhapardeVFIO is more secure than UIO, relying on IOMMU protection.
261adaf0e0SAjit KhapardeUIO requires the IOMMU disabled or configured to pass-through mode.
27e7d49fcdSLance Richardson
281adaf0e0SAjit KhapardeThe BNXT PMD supports operating with:
29e7d49fcdSLance Richardson
301adaf0e0SAjit Khaparde* Linux vfio-pci
311adaf0e0SAjit Khaparde* Linux uio_pci_generic
321adaf0e0SAjit Khaparde* Linux igb_uio
331adaf0e0SAjit Khaparde* BSD nic_uio
34e7d49fcdSLance Richardson
35582e9d77SThomas MonjalonRunning BNXT PMD
36582e9d77SThomas Monjalon----------------
37e7d49fcdSLance Richardson
381adaf0e0SAjit KhapardeBind the device to one of the kernel modules listed above
39e7d49fcdSLance Richardson
401adaf0e0SAjit Khaparde.. code-block:: console
41e7d49fcdSLance Richardson
421adaf0e0SAjit Khaparde    ./dpdk-devbind.py -b vfio-pci|igb_uio|uio_pci_generic bus_id:device_id.function_id
43e7d49fcdSLance Richardson
441adaf0e0SAjit KhapardeThe BNXT PMD can run on PF or VF.
451adaf0e0SAjit Khaparde
461adaf0e0SAjit KhapardePCI-SIG Single Root I/O Virtualization (SR-IOV) involves the direct assignment
471adaf0e0SAjit Khapardeof part of the network port resources to guest operating systems using the
481adaf0e0SAjit KhapardeSR-IOV standard.
491adaf0e0SAjit KhapardeNIC is logically distributed among multiple virtual machines (VMs), while still
501adaf0e0SAjit Khapardehaving global data in common to share with the PF and other VFs.
511adaf0e0SAjit Khaparde
521adaf0e0SAjit KhapardeSysadmin can create and configure VFs:
531adaf0e0SAjit Khaparde
541adaf0e0SAjit Khaparde.. code-block:: console
551adaf0e0SAjit Khaparde
561adaf0e0SAjit Khaparde  echo num_vfs > /sys/bus/pci/devices/domain_id:bus_id:device_id:function_id/sriov_numvfs
571adaf0e0SAjit Khaparde  (ex) echo 4 > /sys/bus/pci/devices/0000:82:00:0/sriov_numvfs
581adaf0e0SAjit Khaparde
591adaf0e0SAjit KhapardeSysadmin also can change the VF property such as MAC address, transparent VLAN,
601adaf0e0SAjit KhapardeTX rate limit, and trusted VF:
611adaf0e0SAjit Khaparde
621adaf0e0SAjit Khaparde.. code-block:: console
631adaf0e0SAjit Khaparde
641adaf0e0SAjit Khaparde  ip link set pf_id vf vf_id mac (mac_address) vlan (vlan_id) txrate (rate_value) trust (enable|disable)
651adaf0e0SAjit Khaparde  (ex) ip link set 0 vf 0 mac 00:11:22:33:44:55 vlan 0x100 txrate 100 trust disable
661adaf0e0SAjit Khaparde
671adaf0e0SAjit KhapardeRunning on VF
681adaf0e0SAjit Khaparde~~~~~~~~~~~~~
691adaf0e0SAjit Khaparde
701adaf0e0SAjit KhapardeFlow Bifurcation
711adaf0e0SAjit Khaparde^^^^^^^^^^^^^^^^
721adaf0e0SAjit Khaparde
731adaf0e0SAjit KhapardeThe Flow Bifurcation splits the incoming data traffic to user space applications
741adaf0e0SAjit Khaparde(such as DPDK applications) and/or kernel space programs (such as the Linux
751adaf0e0SAjit Khapardekernel stack).
761adaf0e0SAjit KhapardeIt can direct some traffic, for example data plane traffic, to DPDK.
771adaf0e0SAjit KhapardeRest of the traffic, for example control plane traffic, would be redirected to
781adaf0e0SAjit Khapardethe traditional Linux networking stack.
791adaf0e0SAjit Khaparde
80684ba626SThomas MonjalonRefer to :doc:`../howto/flow_bifurcation`
811adaf0e0SAjit Khaparde
821adaf0e0SAjit KhapardeBenefits of the flow bifurcation include:
831adaf0e0SAjit Khaparde
841adaf0e0SAjit Khaparde* Better performance with less CPU overhead, as user application can directly
851adaf0e0SAjit Khaparde  access the NIC for data path
861adaf0e0SAjit Khaparde* NIC is still being controlled by the kernel, as control traffic is forwarded
871adaf0e0SAjit Khaparde  only to the kernel driver
881adaf0e0SAjit Khaparde* Control commands, e.g. ethtool, will work as usual
891adaf0e0SAjit Khaparde
901adaf0e0SAjit KhapardeRunning on a VF, the BXNT PMD supports the flow bifurcation with a combination
911adaf0e0SAjit Khapardeof SR-IOV and packet classification and/or forwarding capability.
921adaf0e0SAjit KhapardeIn the simplest case of flow bifurcation, a PF driver configures a NIC to
931adaf0e0SAjit Khapardeforward all user traffic directly to VFs with matching destination MAC address,
941adaf0e0SAjit Khapardewhile the rest of the traffic is forwarded to a PF.
951adaf0e0SAjit KhapardeNote that the broadcast packets will be forwarded to both PF and VF.
961adaf0e0SAjit Khaparde
971adaf0e0SAjit Khaparde.. code-block:: console
981adaf0e0SAjit Khaparde
991adaf0e0SAjit Khaparde    (ex) ethtool --config-ntuple ens2f0 flow-type ether dst 00:01:02:03:00:01 vlan 10 vlan-mask 0xf000 action 0x100000000
1001adaf0e0SAjit Khaparde
1011adaf0e0SAjit KhapardeTrusted VF
1021adaf0e0SAjit Khaparde^^^^^^^^^^
1031adaf0e0SAjit Khaparde
1041adaf0e0SAjit KhapardeBy default, VFs are *not* allowed to perform privileged operations, such as
1051adaf0e0SAjit Khapardemodifying the VF’s MAC address in the guest. These security measures are
1061adaf0e0SAjit Khapardedesigned to prevent possible attacks.
107b845c295SAjit KhapardeHowever, when a DPDK application can be trusted (e.g., OVS-DPDK,
108b845c295SAjit Khaparde`here <https://docs.openvswitch.org/en/latest/intro/install/dpdk/>`_),
109b845c295SAjit Khapardethese operations performed by a VF would be legitimate and better be allowed.
1101adaf0e0SAjit Khaparde
1111adaf0e0SAjit KhapardeTo enable VF to request "trusted mode," a new trusted VF concept was introduced
1121adaf0e0SAjit Khapardein Linux kernel 4.4 and allowed VFs to become “trusted” and perform some
1131adaf0e0SAjit Khapardeprivileged operations.
1141adaf0e0SAjit Khaparde
1151adaf0e0SAjit KhapardeThe BNXT PMD supports the trusted VF mode of operation. Only a PF can enable the
1161adaf0e0SAjit Khapardetrusted attribute on the VF. It is preferable to enable the Trusted setting on a
1171adaf0e0SAjit KhapardeVF before starting applications.
1181adaf0e0SAjit KhapardeHowever, the BNXT PMD handles dynamic changes in trusted settings as well.
1191adaf0e0SAjit Khaparde
1201adaf0e0SAjit KhapardeNote that control commands, e.g., ethtool, will work via the kernel PF driver,
1211adaf0e0SAjit Khaparde*not* via the trusted VF driver.
1221adaf0e0SAjit Khaparde
1231adaf0e0SAjit KhapardeOperations supported by trusted VF:
1241adaf0e0SAjit Khaparde
1251adaf0e0SAjit Khaparde* MAC address configuration
126b845c295SAjit Khaparde* Promiscuous mode setting
1271adaf0e0SAjit Khaparde* Flow rule creation
1281adaf0e0SAjit Khaparde
1291adaf0e0SAjit KhapardeOperations *not* supported by trusted VF:
1301adaf0e0SAjit Khaparde
1311adaf0e0SAjit Khaparde* Firmware upgrade
1321adaf0e0SAjit Khaparde
1331adaf0e0SAjit KhapardeRunning on PF
1341adaf0e0SAjit Khaparde~~~~~~~~~~~~~
1351adaf0e0SAjit Khaparde
1361adaf0e0SAjit KhapardeUnlike the VF when BNXT PMD runs on a PF there are no restrictions placed on the
1371adaf0e0SAjit Khapardefeatures which the PF can enable or request. In a multiport NIC, each port will
1381adaf0e0SAjit Khapardehave a corresponding PF. Also depending on the configuration of the NIC there
1391adaf0e0SAjit Khapardecan be more than one PF associated per port.
1401adaf0e0SAjit KhapardeA sysadmin can load the kernel driver on one PF, and run BNXT PMD on the other
1411adaf0e0SAjit KhapardePF or run the PMD on both the PFs. In such cases, the firmware picks one of the
1421adaf0e0SAjit KhapardePFs as a master PF.
1431adaf0e0SAjit Khaparde
1441adaf0e0SAjit KhapardeMuch like in the trusted VF, the DPDK application must be *trusted* and expected
1451adaf0e0SAjit Khapardeto be *well-behaved*.
1461adaf0e0SAjit Khaparde
1471adaf0e0SAjit KhapardeFeatures
1481adaf0e0SAjit Khaparde--------
1491adaf0e0SAjit Khaparde
1501adaf0e0SAjit KhapardeThe BNXT PMD supports the following features:
1511adaf0e0SAjit Khaparde
1521adaf0e0SAjit Khaparde* Port Control
1531adaf0e0SAjit Khaparde    * Port MTU
1541adaf0e0SAjit Khaparde    * LED
1551adaf0e0SAjit Khaparde    * Flow Control and Autoneg
1561adaf0e0SAjit Khaparde* Packet Filtering
1571adaf0e0SAjit Khaparde    * Unicast MAC Filter
1581adaf0e0SAjit Khaparde    * Multicast MAC Filter
1591adaf0e0SAjit Khaparde    * VLAN Filtering
1601adaf0e0SAjit Khaparde    * Allmulticast Mode
1611adaf0e0SAjit Khaparde    * Promiscuous Mode
1621adaf0e0SAjit Khaparde* Stateless Offloads
1631adaf0e0SAjit Khaparde    * CRC Offload
1641adaf0e0SAjit Khaparde    * Checksum Offload (IPv4, TCP, and UDP)
1651adaf0e0SAjit Khaparde    * Multi-Queue (TSS and RSS)
1661adaf0e0SAjit Khaparde    * Segmentation and Reassembly (TSO and LRO)
1671adaf0e0SAjit Khaparde* VLAN insert strip
1681adaf0e0SAjit Khaparde* Stats Collection
1691adaf0e0SAjit Khaparde* Generic Flow Offload
1701adaf0e0SAjit Khaparde
1711adaf0e0SAjit KhapardePort Control
1721adaf0e0SAjit Khaparde~~~~~~~~~~~~
1731adaf0e0SAjit Khaparde
1741adaf0e0SAjit Khaparde**Port MTU**: BNXT PMD supports the MTU (Maximum Transmission Unit) up to 9,574
1751adaf0e0SAjit Khapardebytes:
1761adaf0e0SAjit Khaparde
1771adaf0e0SAjit Khaparde.. code-block:: console
1781adaf0e0SAjit Khaparde
1791adaf0e0SAjit Khaparde    testpmd> port config mtu (port_id) mtu_value
1801adaf0e0SAjit Khaparde    testpmd> show port info (port_id)
1811adaf0e0SAjit Khaparde
1821adaf0e0SAjit Khaparde**LED**: Application tunes on (or off) a port LED, typically for a port
1831adaf0e0SAjit Khapardeidentification:
1841adaf0e0SAjit Khaparde
1851adaf0e0SAjit Khaparde.. code-block:: console
1861adaf0e0SAjit Khaparde
1871adaf0e0SAjit Khaparde    int rte_eth_led_on (uint16_t port_id)
1881adaf0e0SAjit Khaparde    int rte_eth_led_off (uint16_t port_id)
1891adaf0e0SAjit Khaparde
1901adaf0e0SAjit Khaparde**Flow Control and Autoneg**: Application tunes on (or off) flow control and/or
1911adaf0e0SAjit Khapardeauto-negotiation on a port:
1921adaf0e0SAjit Khaparde
1931adaf0e0SAjit Khaparde.. code-block:: console
1941adaf0e0SAjit Khaparde
1951adaf0e0SAjit Khaparde    testpmd> set flow_ctrl rx (on|off) (port_id)
1961adaf0e0SAjit Khaparde    testpmd> set flow_ctrl tx (on|off) (port_id)
1971adaf0e0SAjit Khaparde    testpmd> set flow_ctrl autoneg (on|off) (port_id)
1981adaf0e0SAjit Khaparde
1991adaf0e0SAjit KhapardeNote that the BNXT PMD does *not* support some options and ignores them when
2001adaf0e0SAjit Khaparderequested:
2011adaf0e0SAjit Khaparde
2021adaf0e0SAjit Khaparde* high_water
2031adaf0e0SAjit Khaparde* low_water
2041adaf0e0SAjit Khaparde* pause_time
2051adaf0e0SAjit Khaparde* mac_ctrl_frame_fwd
2061adaf0e0SAjit Khaparde* send_xon
2071adaf0e0SAjit Khaparde
2081adaf0e0SAjit KhapardePacket Filtering
2091adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~
2101adaf0e0SAjit Khaparde
2111adaf0e0SAjit KhapardeApplications control the packet-forwarding behaviors with packet filters.
2121adaf0e0SAjit Khaparde
2131adaf0e0SAjit KhapardeThe BNXT PMD supports hardware-based packet filtering:
2141adaf0e0SAjit Khaparde
2151adaf0e0SAjit Khaparde* UC (Unicast) MAC Filters
2161adaf0e0SAjit Khaparde    * No unicast packets are forwarded to an application except the one with
2171adaf0e0SAjit Khaparde      DMAC address added to the port
2181adaf0e0SAjit Khaparde    * At initialization, the station MAC address is added to the port
2191adaf0e0SAjit Khaparde* MC (Multicast) MAC Filters
2201adaf0e0SAjit Khaparde    * No multicast packets are forwarded to an application except the one with
2211adaf0e0SAjit Khaparde      MC address added to the port
2221adaf0e0SAjit Khaparde    * When the application listens to a multicast group, it adds the MC address
2231adaf0e0SAjit Khaparde      to the port
2241adaf0e0SAjit Khaparde* VLAN Filtering Mode
2251adaf0e0SAjit Khaparde    * When enabled, no packets are forwarded to an application except the ones
2261adaf0e0SAjit Khaparde      with the VLAN tag assigned to the port
2271adaf0e0SAjit Khaparde* Allmulticast Mode
2281adaf0e0SAjit Khaparde    * When enabled, every multicast packet received on the port is forwarded to
2291adaf0e0SAjit Khaparde      the application
2301adaf0e0SAjit Khaparde    * Typical usage is routing applications
2311adaf0e0SAjit Khaparde* Promiscuous Mode
2321adaf0e0SAjit Khaparde    * When enabled, every packet received on the port is forwarded to the
2331adaf0e0SAjit Khaparde      application
2341adaf0e0SAjit Khaparde
2351adaf0e0SAjit KhapardeUnicast MAC Filter
2361adaf0e0SAjit Khaparde^^^^^^^^^^^^^^^^^^
2371adaf0e0SAjit Khaparde
2381509e07fSStephen HemmingerThe application can add (or remove) MAC addresses to enable (or disable)
2391509e07fSStephen Hemmingerfiltering on MAC address used to accept packets.
2401adaf0e0SAjit Khaparde
2411adaf0e0SAjit Khaparde.. code-block:: console
2421adaf0e0SAjit Khaparde
2431adaf0e0SAjit Khaparde    testpmd> show port (port_id) macs
244b845c295SAjit Khaparde    testpmd> mac_addr add port_id XX:XX:XX:XX:XX:XX
245b845c295SAjit Khaparde    testpmd> mac_addr remove port_id XX:XX:XX:XX:XX:XX
2461adaf0e0SAjit Khaparde
2471adaf0e0SAjit KhapardeMulticast MAC Filter
2481adaf0e0SAjit Khaparde^^^^^^^^^^^^^^^^^^^^
2491adaf0e0SAjit Khaparde
2501509e07fSStephen HemmingerThe application can add (or remove) Multicast addresses that enable (or disable)
2511509e07fSStephen Hemmingerfiltering on multicast MAC address used to accept packets.
2521adaf0e0SAjit Khaparde
2531adaf0e0SAjit Khaparde.. code-block:: console
2541adaf0e0SAjit Khaparde
2551adaf0e0SAjit Khaparde    testpmd> show port (port_id) mcast_macs
256b845c295SAjit Khaparde    testpmd> mcast_addr add port_id XX:XX:XX:XX:XX:XX
257b845c295SAjit Khaparde    testpmd> mcast_addr remove port_id XX:XX:XX:XX:XX:XX
2581adaf0e0SAjit Khaparde
2591adaf0e0SAjit KhapardeApplication adds (or removes) Multicast addresses to enable (or disable)
2601509e07fSStephen Hemmingerallowlist filtering to accept packets.
2611adaf0e0SAjit Khaparde
2621adaf0e0SAjit KhapardeNote that the BNXT PMD supports up to 16 MC MAC filters. if the user adds more
2631adaf0e0SAjit Khapardethan 16 MC MACs, the BNXT PMD puts the port into the Allmulticast mode.
2641adaf0e0SAjit Khaparde
2651adaf0e0SAjit KhapardeVLAN Filtering
2661adaf0e0SAjit Khaparde^^^^^^^^^^^^^^
2671adaf0e0SAjit Khaparde
2681adaf0e0SAjit KhapardeThe application enables (or disables) VLAN filtering mode. When the mode is
2691adaf0e0SAjit Khapardeenabled, no packets are forwarded to an application except ones with VLAN tag
2701adaf0e0SAjit Khapardeassigned for the application.
2711adaf0e0SAjit Khaparde
2721adaf0e0SAjit Khaparde.. code-block:: console
2731adaf0e0SAjit Khaparde
2741adaf0e0SAjit Khaparde    testpmd> vlan set filter (on|off) (port_id)
2751adaf0e0SAjit Khaparde    testpmd> rx_vlan (add|rm) (vlan_id) (port_id)
2761adaf0e0SAjit Khaparde
2771adaf0e0SAjit KhapardeAllmulticast Mode
2781adaf0e0SAjit Khaparde^^^^^^^^^^^^^^^^^
2791adaf0e0SAjit Khaparde
2801adaf0e0SAjit KhapardeThe application enables (or disables) the allmulticast mode. When the mode is
2811adaf0e0SAjit Khapardeenabled, every multicast packet received is forwarded to the application.
2821adaf0e0SAjit Khaparde
2831adaf0e0SAjit Khaparde.. code-block:: console
2841adaf0e0SAjit Khaparde
2851adaf0e0SAjit Khaparde    testpmd> show port info (port_id)
2861adaf0e0SAjit Khaparde    testpmd> set allmulti (port_id) (on|off)
2871adaf0e0SAjit Khaparde
2881adaf0e0SAjit KhapardePromiscuous Mode
2891adaf0e0SAjit Khaparde^^^^^^^^^^^^^^^^
2901adaf0e0SAjit Khaparde
2911adaf0e0SAjit KhapardeThe application enables (or disables) the promiscuous mode. When the mode is
2921adaf0e0SAjit Khapardeenabled on a port, every packet received on the port is forwarded to the
2931adaf0e0SAjit Khapardeapplication.
2941adaf0e0SAjit Khaparde
2951adaf0e0SAjit Khaparde.. code-block:: console
2961adaf0e0SAjit Khaparde
2971adaf0e0SAjit Khaparde    testpmd> show port info (port_id)
2981adaf0e0SAjit Khaparde    testpmd> set promisc port_id (on|off)
2991adaf0e0SAjit Khaparde
3001adaf0e0SAjit KhapardeStateless Offloads
3011adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~~
3021adaf0e0SAjit Khaparde
3031adaf0e0SAjit KhapardeLike Linux, DPDK provides enabling hardware offload of some stateless processing
3041adaf0e0SAjit Khaparde(such as checksum calculation) of the stack, alleviating the CPU from having to
3051adaf0e0SAjit Khapardeburn cycles on every packet.
3061adaf0e0SAjit Khaparde
3071adaf0e0SAjit KhapardeListed below are the stateless offloads supported by the BNXT PMD:
3081adaf0e0SAjit Khaparde
3091adaf0e0SAjit Khaparde* CRC offload (for both TX and RX packets)
3101adaf0e0SAjit Khaparde* Checksum Offload (for both TX and RX packets)
3111adaf0e0SAjit Khaparde    * IPv4 Checksum Offload
3121adaf0e0SAjit Khaparde    * TCP Checksum Offload
3131adaf0e0SAjit Khaparde    * UDP Checksum Offload
3141adaf0e0SAjit Khaparde* Segmentation/Reassembly Offloads
3151adaf0e0SAjit Khaparde    * TCP Segmentation Offload (TSO)
3161adaf0e0SAjit Khaparde    * Large Receive Offload (LRO)
3171adaf0e0SAjit Khaparde* Multi-Queue
3181adaf0e0SAjit Khaparde    * Transmit Side Scaling (TSS)
3191adaf0e0SAjit Khaparde    * Receive Side Scaling (RSS)
3201adaf0e0SAjit Khaparde
3211adaf0e0SAjit KhapardeAlso, the BNXT PMD supports stateless offloads on inner frames for tunneled
3221adaf0e0SAjit Khapardepackets. Listed below are the tunneling protocols supported by the BNXT PMD:
3231adaf0e0SAjit Khaparde
3241adaf0e0SAjit Khaparde* VXLAN
3251adaf0e0SAjit Khaparde* GRE
3261adaf0e0SAjit Khaparde* NVGRE
3271adaf0e0SAjit Khaparde
3281adaf0e0SAjit KhapardeNote that enabling (or disabling) stateless offloads requires applications to
3291adaf0e0SAjit Khapardestop DPDK before changing configuration.
3301adaf0e0SAjit Khaparde
3311adaf0e0SAjit KhapardeCRC Offload
3321adaf0e0SAjit Khaparde^^^^^^^^^^^
3331adaf0e0SAjit Khaparde
3341adaf0e0SAjit KhapardeThe FCS (Frame Check Sequence) in the Ethernet frame is a four-octet CRC (Cyclic
3351adaf0e0SAjit KhapardeRedundancy Check) that allows detection of corrupted data within the entire
3361adaf0e0SAjit Khapardeframe as received on the receiver side.
3371adaf0e0SAjit Khaparde
3381adaf0e0SAjit KhapardeThe BNXT PMD supports hardware-based CRC offload:
3391adaf0e0SAjit Khaparde
3401adaf0e0SAjit Khaparde* TX: calculate and insert CRC
3411adaf0e0SAjit Khaparde* RX: check and remove CRC, notify the application on CRC error
3421adaf0e0SAjit Khaparde
3431adaf0e0SAjit KhapardeNote that the CRC offload is always turned on.
3441adaf0e0SAjit Khaparde
3451adaf0e0SAjit KhapardeChecksum Offload
3461adaf0e0SAjit Khaparde^^^^^^^^^^^^^^^^
3471adaf0e0SAjit Khaparde
3481adaf0e0SAjit KhapardeThe application enables hardware checksum calculation for IPv4, TCP, and UDP.
3491adaf0e0SAjit Khaparde
3501adaf0e0SAjit Khaparde.. code-block:: console
3511adaf0e0SAjit Khaparde
3521adaf0e0SAjit Khaparde    testpmd> port stop (port_id)
3531adaf0e0SAjit Khaparde    testpmd> csum set (ip|tcp|udp|outer-ip|outer-udp) (sw|hw) (port_id)
3541adaf0e0SAjit Khaparde    testpmd> set fwd csum
3551adaf0e0SAjit Khaparde
3561adaf0e0SAjit KhapardeMulti-Queue
3571adaf0e0SAjit Khaparde^^^^^^^^^^^
3581adaf0e0SAjit Khaparde
3591adaf0e0SAjit KhapardeMulti-Queue, also known as TSS (Transmit Side Scaling) or RSS (Receive Side
3601adaf0e0SAjit KhapardeScaling), is a common networking technique that allows for more efficient load
3611adaf0e0SAjit Khapardebalancing across multiple CPU cores.
3621adaf0e0SAjit Khaparde
3631adaf0e0SAjit KhapardeThe application enables multiple TX and RX queues when it is started.
3641adaf0e0SAjit Khaparde
3651adaf0e0SAjit Khaparde.. code-block:: console
3661adaf0e0SAjit Khaparde
367e3f15be4SSarosh Arif    dpdk-testpmd -l 1,3,5 --main-lcore 1 --txq=2 –rxq=2 --nb-cores=2
3681adaf0e0SAjit Khaparde
3691adaf0e0SAjit Khaparde**TSS**
3701adaf0e0SAjit Khaparde
3711adaf0e0SAjit KhapardeTSS distributes network transmit processing across several hardware-based
3721adaf0e0SAjit Khapardetransmit queues, allowing outbound network traffic to be processed by multiple
3731adaf0e0SAjit KhapardeCPU cores.
3741adaf0e0SAjit Khaparde
3751adaf0e0SAjit Khaparde**RSS**
3761adaf0e0SAjit Khaparde
3771adaf0e0SAjit KhapardeRSS distributes network receive processing across several hardware-based receive
3781adaf0e0SAjit Khapardequeues, allowing inbound network traffic to be processed by multiple CPU cores.
3791adaf0e0SAjit Khaparde
3801adaf0e0SAjit KhapardeThe application can select the RSS mode, i.e. select the header fields that are
3811adaf0e0SAjit Khapardeincluded for hash calculation. The BNXT PMD supports the RSS mode of
3821adaf0e0SAjit Khaparde``default|ip|tcp|udp|none``, where default mode is L3 and L4.
3831adaf0e0SAjit Khaparde
3841adaf0e0SAjit KhapardeFor tunneled packets, RSS hash is calculated over inner frame header fields.
3851adaf0e0SAjit KhapardeApplications may want to select the tunnel header fields for hash calculation,
3861adaf0e0SAjit Khapardeand it will be supported in 20.08 using RSS level.
3871adaf0e0SAjit Khaparde
3881adaf0e0SAjit Khaparde.. code-block:: console
3891adaf0e0SAjit Khaparde
3901adaf0e0SAjit Khaparde    testpmd> port config (port_id) rss (all|default|ip|tcp|udp|none)
3911adaf0e0SAjit Khaparde
3921adaf0e0SAjit Khaparde    // note that the testpmd defaults the RSS mode to ip
3931adaf0e0SAjit Khaparde    // ensure to issue the command below to enable L4 header (TCP or UDP) along with IPv4 header
3941adaf0e0SAjit Khaparde    testpmd> port config (port_id) rss default
3951adaf0e0SAjit Khaparde
3961adaf0e0SAjit Khaparde    // to check the current RSS configuration, such as RSS function and RSS key
3971adaf0e0SAjit Khaparde    testpmd> show port (port_id) rss-hash key
3981adaf0e0SAjit Khaparde
3991adaf0e0SAjit Khaparde    // RSS is enabled by default. However, application can disable RSS as follows
4001adaf0e0SAjit Khaparde    testpmd> port config (port_id) rss none
4011adaf0e0SAjit Khaparde
4021adaf0e0SAjit KhapardeApplication can change the flow distribution, i.e. remap the received traffic to
4031adaf0e0SAjit KhapardeCPU cores, using RSS RETA (Redirection Table).
4041adaf0e0SAjit Khaparde
4051adaf0e0SAjit Khaparde.. code-block:: console
4061adaf0e0SAjit Khaparde
4071adaf0e0SAjit Khaparde    // application queries the current RSS RETA configuration
4081adaf0e0SAjit Khaparde    testpmd> show port (port_id) rss reta size (mask0, mask1)
4091adaf0e0SAjit Khaparde
4101adaf0e0SAjit Khaparde    // application changes the RSS RETA configuration
4111adaf0e0SAjit Khaparde    testpmd> port config (port_id) rss reta (hash, queue) [, (hash, queue)]
4121adaf0e0SAjit Khaparde
4131adaf0e0SAjit KhapardeTSO
4141adaf0e0SAjit Khaparde^^^
4151adaf0e0SAjit Khaparde
4161adaf0e0SAjit KhapardeTSO (TCP Segmentation Offload), also known as LSO (Large Send Offload), enables
4171adaf0e0SAjit Khapardethe TCP/IP stack to pass to the NIC a larger datagram than the MTU (Maximum
4181adaf0e0SAjit KhapardeTransmit Unit). NIC breaks it into multiple segments before sending it to the
4191adaf0e0SAjit Khapardenetwork.
4201adaf0e0SAjit Khaparde
4211adaf0e0SAjit KhapardeThe BNXT PMD supports hardware-based TSO.
4221adaf0e0SAjit Khaparde
4231adaf0e0SAjit Khaparde.. code-block:: console
4241adaf0e0SAjit Khaparde
4251adaf0e0SAjit Khaparde    // display the status of TSO
4261adaf0e0SAjit Khaparde    testpmd> tso show (port_id)
4271adaf0e0SAjit Khaparde
4281adaf0e0SAjit Khaparde    // enable/disable TSO
4291adaf0e0SAjit Khaparde    testpmd> port config (port_id) tx_offload tcp_tso (on|off)
4301adaf0e0SAjit Khaparde
4311adaf0e0SAjit Khaparde    // set TSO segment size
4321adaf0e0SAjit Khaparde    testpmd> tso set segment_size (port_id)
4331adaf0e0SAjit Khaparde
4341adaf0e0SAjit KhapardeThe BNXT PMD also supports hardware-based tunneled TSO.
4351adaf0e0SAjit Khaparde
4361adaf0e0SAjit Khaparde.. code-block:: console
4371adaf0e0SAjit Khaparde
4381adaf0e0SAjit Khaparde    // display the status of tunneled TSO
4391adaf0e0SAjit Khaparde    testpmd> tunnel_tso show (port_id)
4401adaf0e0SAjit Khaparde
4411adaf0e0SAjit Khaparde    // enable/disable tunneled TSO
4421adaf0e0SAjit Khaparde    testpmd> port config (port_id) tx_offload vxlan_tnl_tso|gre_tnl_tso (on|off)
4431adaf0e0SAjit Khaparde
4441adaf0e0SAjit Khaparde    // set tunneled TSO segment size
4451adaf0e0SAjit Khaparde    testpmd> tunnel_tso set segment_size (port_id)
4461adaf0e0SAjit Khaparde
4471adaf0e0SAjit KhapardeNote that the checksum offload is always assumed to be enabled for TSO.
4481adaf0e0SAjit Khaparde
4491adaf0e0SAjit KhapardeLRO
4501adaf0e0SAjit Khaparde^^^
4511adaf0e0SAjit Khaparde
4521adaf0e0SAjit KhapardeLRO (Large Receive Offload) enables NIC to aggregate multiple incoming TCP/IP
4531adaf0e0SAjit Khapardepackets from a single stream into a larger buffer, before passing to the
4541adaf0e0SAjit Khapardenetworking stack.
4551adaf0e0SAjit Khaparde
4561adaf0e0SAjit KhapardeThe BNXT PMD supports hardware-based LRO.
4571adaf0e0SAjit Khaparde
4581adaf0e0SAjit Khaparde.. code-block:: console
4591adaf0e0SAjit Khaparde
4601adaf0e0SAjit Khaparde    // display the status of LRO
4611adaf0e0SAjit Khaparde    testpmd> show port (port_id) rx_offload capabilities
4621adaf0e0SAjit Khaparde    testpmd> show port (port_id) rx_offload configuration
4631adaf0e0SAjit Khaparde
4641adaf0e0SAjit Khaparde    // enable/disable LRO
4651adaf0e0SAjit Khaparde    testpmd> port config (port_id) rx_offload tcp_lro (on|off)
4661adaf0e0SAjit Khaparde
4671adaf0e0SAjit Khaparde    // set max LRO packet (datagram) size
4681adaf0e0SAjit Khaparde    testpmd> port config (port_id) max-lro-pkt-size (max_size)
4691adaf0e0SAjit Khaparde
4701adaf0e0SAjit KhapardeThe BNXT PMD also supports tunneled LRO.
4711adaf0e0SAjit Khaparde
4721adaf0e0SAjit KhapardeSome applications, such as routing, should *not* change the packet headers as
4731adaf0e0SAjit Khapardethey pass through (i.e. received from and sent back to the network). In such a
4741adaf0e0SAjit Khapardecase, GRO (Generic Receive Offload) should be used instead of LRO.
4751adaf0e0SAjit Khaparde
4761adaf0e0SAjit KhapardeVLAN Insert/Strip
4771adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~
4781adaf0e0SAjit Khaparde
4791adaf0e0SAjit KhapardeDPDK application offloads VLAN insert/strip to improve performance. The BNXT PMD
4801adaf0e0SAjit Khapardesupports hardware-based VLAN insert/strip offload for both single and double
4811adaf0e0SAjit KhapardeVLAN packets.
4821adaf0e0SAjit Khaparde
4831adaf0e0SAjit Khaparde
4841adaf0e0SAjit KhapardeVLAN Insert
4851adaf0e0SAjit Khaparde^^^^^^^^^^^
4861adaf0e0SAjit Khaparde
4871adaf0e0SAjit KhapardeApplication configures the VLAN TPID (Tag Protocol ID). By default, the TPID is
4881adaf0e0SAjit Khaparde0x8100.
4891adaf0e0SAjit Khaparde
4901adaf0e0SAjit Khaparde.. code-block:: console
4911adaf0e0SAjit Khaparde
4921adaf0e0SAjit Khaparde    // configure outer TPID value for a port
4931adaf0e0SAjit Khaparde    testpmd> vlan set outer tpid (tpid_value) (port_id)
4941adaf0e0SAjit Khaparde
4951adaf0e0SAjit KhapardeThe inner TPID set will be rejected as the BNXT PMD supports inserting only an
4961adaf0e0SAjit Khapardeouter VLAN. Note that when a packet has a single VLAN, the tag is considered as
4971adaf0e0SAjit Khapardeouter, i.e. the inner VLAN is relevant only when a packet is double-tagged.
4981adaf0e0SAjit Khaparde
4991adaf0e0SAjit KhapardeThe BNXT PMD supports various TPID values shown below. Any other values will be
5001adaf0e0SAjit Khaparderejected.
5011adaf0e0SAjit Khaparde
5021adaf0e0SAjit Khaparde* ``0x8100``
5031adaf0e0SAjit Khaparde* ``0x88a8``
5041adaf0e0SAjit Khaparde* ``0x9100``
5051adaf0e0SAjit Khaparde* ``0x9200``
5061adaf0e0SAjit Khaparde* ``0x9300``
5071adaf0e0SAjit Khaparde
5081adaf0e0SAjit KhapardeThe BNXT PMD supports the VLAN insert offload per-packet basis. The application
5091adaf0e0SAjit Khapardeprovides the TCI (Tag Control Info) for a packet via mbuf. In turn, the BNXT PMD
5101adaf0e0SAjit Khapardeinserts the VLAN tag (via hardware) using the provided TCI along with the
5111adaf0e0SAjit Khapardeconfigured TPID.
5121adaf0e0SAjit Khaparde
5131adaf0e0SAjit Khaparde.. code-block:: console
5141adaf0e0SAjit Khaparde
5151adaf0e0SAjit Khaparde    // enable VLAN insert offload
5161adaf0e0SAjit Khaparde    testpmd> port config (port_id) rx_offload vlan_insert|qinq_insert (on|off)
5171adaf0e0SAjit Khaparde
518daa02b5cSOlivier Matz    if (mbuf->ol_flags && RTE_MBUF_F_TX_QINQ)       // case-1: insert VLAN to single-tagged packet
5191adaf0e0SAjit Khaparde        tci_value = mbuf->vlan_tci_outer
520daa02b5cSOlivier Matz    else if (mbuf->ol_flags && RTE_MBUF_F_TX_VLAN)  // case-2: insert VLAN to untagged packet
5211adaf0e0SAjit Khaparde        tci_value = mbuf->vlan_tci
5221adaf0e0SAjit Khaparde
5231adaf0e0SAjit KhapardeVLAN Strip
5241adaf0e0SAjit Khaparde^^^^^^^^^^
5251adaf0e0SAjit Khaparde
5261adaf0e0SAjit KhapardeThe application configures the per-port VLAN strip offload.
5271adaf0e0SAjit Khaparde
5281adaf0e0SAjit Khaparde.. code-block:: console
5291adaf0e0SAjit Khaparde
5301adaf0e0SAjit Khaparde    // enable VLAN strip on a port
5311adaf0e0SAjit Khaparde    testpmd> port config (port_id) tx_offload vlan_strip (on|off)
5321adaf0e0SAjit Khaparde
5331adaf0e0SAjit Khaparde    // notify application VLAN strip via mbuf
534daa02b5cSOlivier Matz    mbuf->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_STRIPPED // outer VLAN is found and stripped
5351adaf0e0SAjit Khaparde    mbuf->vlan_tci = tci_value                      // TCI of the stripped VLAN
5361adaf0e0SAjit Khaparde
5371adaf0e0SAjit KhapardeTime Synchronization
5381adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~~~~
5391adaf0e0SAjit Khaparde
5401adaf0e0SAjit KhapardeSystem operators may run a PTP (Precision Time Protocol) client application to
541b8d1d60fSStephen Hemmingersynchronize the time on the NIC (and optionally, on the system) to a PTP time transmitter.
5421adaf0e0SAjit Khaparde
543b8d1d60fSStephen HemmingerThe BNXT PMD supports a PTP client application to communicate with a PTP time transmitter
544b8d1d60fSStephen Hemmingerusing DPDK IEEE1588 APIs.
545b8d1d60fSStephen HemmingerNote that the PTP client application needs to
5461adaf0e0SAjit Khaparderun on PF and vector mode needs to be disabled.
5471adaf0e0SAjit Khaparde
5481adaf0e0SAjit Khaparde.. code-block:: console
5491adaf0e0SAjit Khaparde
5501adaf0e0SAjit Khaparde    testpmd> set fwd ieee1588 // enable IEEE 1588 mode
5511adaf0e0SAjit Khaparde
5521adaf0e0SAjit KhapardeWhen enabled, the BNXT PMD configures hardware to insert IEEE 1588 timestamps to
5531adaf0e0SAjit Khapardethe outgoing PTP packets and reports IEEE 1588 timestamps from the incoming PTP
5541adaf0e0SAjit Khapardepackets to application via mbuf.
5551adaf0e0SAjit Khaparde
5561adaf0e0SAjit Khaparde.. code-block:: console
5571adaf0e0SAjit Khaparde
5581adaf0e0SAjit Khaparde    // RX packet completion will indicate whether the packet is PTP
559daa02b5cSOlivier Matz    mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP
5601adaf0e0SAjit Khaparde
5611adaf0e0SAjit KhapardeStatistics Collection
5621adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~~~~~
5631adaf0e0SAjit Khaparde
5641adaf0e0SAjit KhapardeIn Linux, the *ethtool -S* enables us to query the NIC stats. DPDK provides the
5651adaf0e0SAjit Khapardesimilar functionalities via rte_eth_stats and rte_eth_xstats.
5661adaf0e0SAjit Khaparde
5671adaf0e0SAjit KhapardeThe BNXT PMD supports both basic and extended stats collection:
5681adaf0e0SAjit Khaparde
5691adaf0e0SAjit Khaparde* Basic stats
5701adaf0e0SAjit Khaparde* Extended stats
5711adaf0e0SAjit Khaparde
5721adaf0e0SAjit KhapardeBasic Stats
5731adaf0e0SAjit Khaparde^^^^^^^^^^^
5741adaf0e0SAjit Khaparde
5751adaf0e0SAjit KhapardeThe application collects per-port and per-queue stats using rte_eth_stats APIs.
5761adaf0e0SAjit Khaparde
5771adaf0e0SAjit Khaparde.. code-block:: console
5781adaf0e0SAjit Khaparde
5791adaf0e0SAjit Khaparde    testpmd> show port stats (port_id)
5801adaf0e0SAjit Khaparde
5811adaf0e0SAjit KhapardeBasic stats include:
5821adaf0e0SAjit Khaparde
5831adaf0e0SAjit Khaparde* ipackets
5841adaf0e0SAjit Khaparde* ibytes
5851adaf0e0SAjit Khaparde* opackets
5861adaf0e0SAjit Khaparde* obytes
5871adaf0e0SAjit Khaparde* imissed
5881adaf0e0SAjit Khaparde* ierrors
5891adaf0e0SAjit Khaparde* oerrors
5901adaf0e0SAjit Khaparde
5911adaf0e0SAjit KhapardeBy default, per-queue stats for 16 queues are supported. For more than 16
59268d99d00SCiara Powerqueues, BNXT PMD should be compiled with ``RTE_ETHDEV_QUEUE_STAT_CNTRS``
5931adaf0e0SAjit Khapardeset to the desired number of queues.
5941adaf0e0SAjit Khaparde
5951adaf0e0SAjit KhapardeExtended Stats
5961adaf0e0SAjit Khaparde^^^^^^^^^^^^^^
5971adaf0e0SAjit Khaparde
5981adaf0e0SAjit KhapardeUnlike basic stats, the extended stats are vendor-specific, i.e. each vendor
5991adaf0e0SAjit Khapardeprovides its own set of counters.
6001adaf0e0SAjit Khaparde
6011adaf0e0SAjit KhapardeThe BNXT PMD provides a rich set of counters, including per-flow counters,
6021adaf0e0SAjit Khapardeper-cos counters, per-priority counters, etc.
6031adaf0e0SAjit Khaparde
6041adaf0e0SAjit Khaparde.. code-block:: console
6051adaf0e0SAjit Khaparde
6061adaf0e0SAjit Khaparde    testpmd> show port xstats (port_id)
6071adaf0e0SAjit Khaparde
6081adaf0e0SAjit KhapardeShown below is the elaborated sequence to retrieve extended stats:
6091adaf0e0SAjit Khaparde
6101adaf0e0SAjit Khaparde.. code-block:: console
6111adaf0e0SAjit Khaparde
6121adaf0e0SAjit Khaparde    // application queries the number of xstats
6131adaf0e0SAjit Khaparde    len = rte_eth_xstats_get(port_id, NULL, 0);
6141adaf0e0SAjit Khaparde    // BNXT PMD returns the size of xstats array (i.e. the number of entries)
6151adaf0e0SAjit Khaparde    // BNXT PMD returns 0, if the feature is compiled out or disabled
6161adaf0e0SAjit Khaparde
6171adaf0e0SAjit Khaparde    // application allocates memory for xstats
6181adaf0e0SAjit Khaparde    struct rte_eth_xstats_name *names; // name is 64 character or less
6191adaf0e0SAjit Khaparde    struct rte_eth_xstats *xstats;
6201adaf0e0SAjit Khaparde    names = calloc(len, sizeof(*names));
6211adaf0e0SAjit Khaparde    xstats = calloc(len, sizeof(*xstats));
6221adaf0e0SAjit Khaparde
6231adaf0e0SAjit Khaparde    // application retrieves xstats // names and values
6241adaf0e0SAjit Khaparde    ret = rte_eth_xstats_get_names(port_id, *names, len);
6251adaf0e0SAjit Khaparde    ret = rte_eth_xstats_get(port_id, *xstats, len);
6261adaf0e0SAjit Khaparde
6271adaf0e0SAjit Khaparde    // application checks the xstats
6281adaf0e0SAjit Khaparde    // application may repeat the below:
6291adaf0e0SAjit Khaparde    len = rte_eth_xstats_reset(port_id); // reset the xstats
6301adaf0e0SAjit Khaparde
6311adaf0e0SAjit Khaparde    // reset can be skipped, if application wants to see accumulated stats
6321adaf0e0SAjit Khaparde    // run traffic
6331adaf0e0SAjit Khaparde    // probably stop the traffic
6341adaf0e0SAjit Khaparde    // retrieve xstats // no need to retrieve xstats names again
6351adaf0e0SAjit Khaparde    // check xstats
6361adaf0e0SAjit Khaparde
6371adaf0e0SAjit KhapardeGeneric Flow Offload
6381adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~~~~
6391adaf0e0SAjit Khaparde
6401adaf0e0SAjit KhapardeApplications can get benefit by offloading all or part of flow processing to
6411adaf0e0SAjit Khapardehardware. For example, applications can offload packet classification only
6421adaf0e0SAjit Khaparde(partial offload) or whole match-action (full offload).
6431adaf0e0SAjit Khaparde
6441adaf0e0SAjit KhapardeDPDK offers the Generic Flow API (rte_flow API) to configure hardware to
6451adaf0e0SAjit Khapardeperform flow processing.
6461adaf0e0SAjit Khaparde
647b845c295SAjit KhapardeTruFlow\ |reg|
648b845c295SAjit Khaparde^^^^^^^^^^^^^^
6491adaf0e0SAjit Khaparde
650b845c295SAjit KhapardeTo fully support the generic flow offload, TruFlow was introduced in BNXT PMD.
651b845c295SAjit KhapardeBefore TruFlow, hardware flow processing resources were
652b845c295SAjit Khapardemapped to and handled by firmware.
653b845c295SAjit KhapardeWith TruFlow, hardware flow processing resources are
654b845c295SAjit Khapardemapped to and handled by driver.
6551adaf0e0SAjit Khaparde
656b845c295SAjit KhapardeAlleviating the limitations of firmware-based feature development,
657b845c295SAjit KhapardeTruFlow not only increases the flow offload feature velocity
658b845c295SAjit Khapardebut also improves the control plane performance (i.e., higher flow update rate).
6591adaf0e0SAjit Khaparde
660b845c295SAjit KhapardeFlow APIs, Items, and Actions
661b845c295SAjit Khaparde-----------------------------
6621adaf0e0SAjit Khaparde
663b845c295SAjit KhapardeBNXT PMD supports thread-safe rte_flow operations for rte_flow APIs
664b845c295SAjit Khapardeand rich set of flow items (i.e., matching patterns) and actions.
665b845c295SAjit KhapardeRefer to the "Supported APIs" section for the list of rte_flow APIs
666b845c295SAjit Khapardeas well as flow items and actions.
6671adaf0e0SAjit Khaparde
668b845c295SAjit KhapardeFlow Persistency
669b845c295SAjit Khaparde----------------
670c6f03974SAjit Khaparde
671b845c295SAjit KhapardeOn stopping a device port, all the flows created on a port
672b845c295SAjit Khapardeby the application will be flushed from the hardware
673b845c295SAjit Khapardeand any tables maintained by the PMD.
674b845c295SAjit KhapardeAfter stopping the device port, all flows on the port become invalid
675b845c295SAjit Khapardeand are not represented in the system anymore.
67682c4fb85SSomnath KoturInstead of destroying or flushing such flows an application should discard
677b845c295SAjit Khapardeall references to these flows and re-create the flows as required
678b845c295SAjit Khapardeafter the port is restarted.
679e24a5d3fSAjit Khaparde
68082c4fb85SSomnath KoturNote: A VNIC represents a virtual interface in the hardware. It is a resource
68182c4fb85SSomnath Koturin the RX path of the chip and is used to setup various target actions such as
68282c4fb85SSomnath KoturRSS, MAC filtering etc. for the physical function in use.
68382c4fb85SSomnath Kotur
68482c4fb85SSomnath KoturVirtual Function Port Representors
68582c4fb85SSomnath Kotur----------------------------------
686b845c295SAjit Khaparde
68782c4fb85SSomnath KoturThe BNXT PMD supports the creation of VF port representors for the control
68882c4fb85SSomnath Koturand monitoring of BNXT virtual function devices. Each port representor
68982c4fb85SSomnath Koturcorresponds to a single virtual function of that device that is connected to a
69082c4fb85SSomnath KoturVF. When there is no hardware flow offload, each packet transmitted by the VF
69182c4fb85SSomnath Koturwill be received by the corresponding representor. Similarly each packet that is
69282c4fb85SSomnath Kotursent to a representor will be received by the VF. Applications can take
69382c4fb85SSomnath Koturadvantage of this feature when SRIOV is enabled. The representor will allow the
69482c4fb85SSomnath Koturfirst packet that is transmitted by the VF to be received by the DPDK
69582c4fb85SSomnath Koturapplication which can then decide if the flow should be offloaded to the
69682c4fb85SSomnath Koturhardware. Once the flow is offloaded in the hardware, any packet matching the
69782c4fb85SSomnath Koturflow will be received by the VF while the DPDK application will not receive it
69882c4fb85SSomnath Koturany more. The BNXT PMD supports creation and handling of the port representors
69982c4fb85SSomnath Koturwhen the PMD is initialized on a PF or trusted-VF. The user can specify the list
70082c4fb85SSomnath Koturof VF IDs of the VFs for which the representors are needed by using the
70182c4fb85SSomnath Kotur``devargs`` option ``representor``.::
70282c4fb85SSomnath Kotur
703db27370bSStephen Hemminger  -a DBDF,representor=[0,1,4]
70482c4fb85SSomnath Kotur
70582c4fb85SSomnath KoturNote that currently hot-plugging of representor ports is not supported so all
70682c4fb85SSomnath Koturthe required representors must be specified on the creation of the PF or the
70782c4fb85SSomnath Koturtrusted VF.
70882c4fb85SSomnath Kotur
7091adaf0e0SAjit KhapardeApplication Support
7101adaf0e0SAjit Khaparde-------------------
7111adaf0e0SAjit Khaparde
7121adaf0e0SAjit KhapardeFirmware
7131adaf0e0SAjit Khaparde~~~~~~~~
7141adaf0e0SAjit Khaparde
7151adaf0e0SAjit KhapardeThe BNXT PMD supports the application to retrieve the firmware version.
7161adaf0e0SAjit Khaparde
7171adaf0e0SAjit Khaparde.. code-block:: console
7181adaf0e0SAjit Khaparde
7191adaf0e0SAjit Khaparde    testpmd> show port info (port_id)
7201adaf0e0SAjit Khaparde
7211adaf0e0SAjit KhapardeNote that the applications cannot update the firmware using BNXT PMD.
7221adaf0e0SAjit Khaparde
7231adaf0e0SAjit KhapardeMultiple Processes
7241adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~~
7251adaf0e0SAjit Khaparde
7261adaf0e0SAjit KhapardeWhen two or more DPDK applications (e.g., testpmd and dpdk-pdump) share a single
7271adaf0e0SAjit Khapardeinstance of DPDK, the BNXT PMD supports a single primary application and one or
7281adaf0e0SAjit Khapardemore secondary applications. Note that the DPDK-layer (not the PMD) ensures
7291adaf0e0SAjit Khapardethere is only one primary application.
7301adaf0e0SAjit Khaparde
7311adaf0e0SAjit KhapardeThere are two modes:
7321adaf0e0SAjit Khaparde
7331adaf0e0SAjit KhapardeManual mode
7341adaf0e0SAjit Khaparde
7351adaf0e0SAjit Khaparde* Application notifies whether it is primary or secondary using *proc-type* flag
7361adaf0e0SAjit Khaparde* 1st process should be spawned with ``--proc-type=primary``
7371adaf0e0SAjit Khaparde* All subsequent processes should be spawned with ``--proc-type=secondary``
7381adaf0e0SAjit Khaparde
7391adaf0e0SAjit KhapardeAuto detection mode
7401adaf0e0SAjit Khaparde
7411adaf0e0SAjit Khaparde* Application is using ``proc-type=auto`` flag
7421adaf0e0SAjit Khaparde* A process is spawned as a secondary if a primary is already running
7431adaf0e0SAjit Khaparde
7441adaf0e0SAjit KhapardeThe BNXT PMD uses the info to skip a device initialization, i.e. performs a
7451adaf0e0SAjit Khapardedevice initialization only when being brought up by a primary application.
7461adaf0e0SAjit Khaparde
7471adaf0e0SAjit KhapardeRuntime Queue Setup
7481adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~~~
7491adaf0e0SAjit Khaparde
7501adaf0e0SAjit KhapardeTypically, a DPDK application allocates TX and RX queues statically: i.e. queues
7511adaf0e0SAjit Khapardeare allocated at start. However, an application may want to increase (or
7521adaf0e0SAjit Khapardedecrease) the number of queues dynamically for various reasons, e.g. power
7531adaf0e0SAjit Khapardesavings.
7541adaf0e0SAjit Khaparde
7551adaf0e0SAjit KhapardeThe BNXT PMD supports applications to increase or decrease queues at runtime.
7561adaf0e0SAjit Khaparde
7571adaf0e0SAjit Khaparde.. code-block:: console
7581adaf0e0SAjit Khaparde
7591adaf0e0SAjit Khaparde    testpmd> port config all (rxq|txq) (num_queues)
7601adaf0e0SAjit Khaparde
7611adaf0e0SAjit KhapardeNote that a DPDK application must allocate default queues (one for TX and one
7621adaf0e0SAjit Khapardefor RX at minimum) at initialization.
7631adaf0e0SAjit Khaparde
7641adaf0e0SAjit KhapardeDescriptor Status
7651adaf0e0SAjit Khaparde~~~~~~~~~~~~~~~~~
7661adaf0e0SAjit Khaparde
7671adaf0e0SAjit KhapardeApplications may use the descriptor status for various reasons, e.g. for power
7681adaf0e0SAjit Khapardesavings. For example, an application may stop polling and change to interrupt
7691adaf0e0SAjit Khapardemode when the descriptor status shows no packets to service for a while.
7701adaf0e0SAjit Khaparde
7711adaf0e0SAjit KhapardeThe BNXT PMD supports the application to retrieve both TX and RX descriptor
7721adaf0e0SAjit Khapardestatus.
7731adaf0e0SAjit Khaparde
7741adaf0e0SAjit Khaparde.. code-block:: console
7751adaf0e0SAjit Khaparde
7761adaf0e0SAjit Khaparde    testpmd> show port (port_id) (rxq|txq) (queue_id) desc (desc_id) status
7771adaf0e0SAjit Khaparde
7781adaf0e0SAjit KhapardeBonding
7791adaf0e0SAjit Khaparde~~~~~~~
7801adaf0e0SAjit Khaparde
7811adaf0e0SAjit KhapardeDPDK implements a light-weight library to allow PMDs to be bonded together and provide a single logical PMD to the application.
7821adaf0e0SAjit Khaparde
7831adaf0e0SAjit Khaparde.. code-block:: console
7841adaf0e0SAjit Khaparde
78515e34522SLong Wu    dpdk-testpmd -l 0-3 -n4 --vdev 'net_bonding0,mode=0,member=<PCI B:D.F device 1>,member=<PCI B:D.F device 2>,mac=XX:XX:XX:XX:XX:XX’ – --socket_num=1 – -i --port-topology=chained
78615e34522SLong Wu    (ex) dpdk-testpmd -l 1,3,5,7,9 -n4 --vdev 'net_bonding0,mode=0,member=0000:82:00.0,member=0000:82:00.1,mac=00:1e:67:1d:fd:1d' – --socket-num=1 – -i --port-topology=chained
7871adaf0e0SAjit Khaparde
7881adaf0e0SAjit KhapardeVector Processing
7891adaf0e0SAjit Khaparde-----------------
7901adaf0e0SAjit Khaparde
791b845c295SAjit KhapardeVector mode provides significantly improved performance over scalar mode,
792b845c295SAjit Khapardeusing SIMD (Single Instruction Multiple Data) instructions
793b845c295SAjit Khapardeto operate on multiple packets in parallel.
794b845c295SAjit Khaparde
795c4e4c189SLance RichardsonThe BNXT PMD provides vectorized burst transmit/receive function implementations
796b845c295SAjit Khapardeon x86-based platforms and ARM-based platforms.
797b845c295SAjit KhapardeThe BNXT PMD supports SSE (Streaming SIMD Extensions)
798b845c295SAjit Khapardeand AVX2 (Advanced Vector Extensions 2) instructions for x86-based platforms,
799b845c295SAjit Khapardeand NEON instructions for ARM-based platforms.
800c4e4c189SLance Richardson
801b845c295SAjit KhapardeThe BNXT Vector PMD is enabled in DPDK builds by default.
802b845c295SAjit KhapardeHowever, the vector mode is disabled when applying SIMD instructions
803b845c295SAjit Khapardedoes not improve the performance due to non-uniform packet handling.
804b845c295SAjit KhapardeTX and RX vector mode can be enabled independently from each other,
805b845c295SAjit Khapardeand the decision to disable vector mode is made at run-time
806b845c295SAjit Khapardewhen the port is started.
8071adaf0e0SAjit Khaparde
808b845c295SAjit KhapardeThe vector mode is disabled with TX and RX offloads.
809b845c295SAjit KhapardeHowever, a limited set of offloads can be enabled in a vector mode.
810b845c295SAjit KhapardeListed below are the TX and RX offloads with which the vector mode can be enabled:
811c4e4c189SLance Richardson
812b845c295SAjit Khaparde    * TX offloads supported in vector mode
813c4e4c189SLance Richardson
814295968d1SFerruh Yigit       RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE
815c4e4c189SLance Richardson
816b845c295SAjit Khaparde    * RX offloads supported in vector mode
8171adaf0e0SAjit Khaparde
818295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_VLAN_STRIP
819295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_KEEP_CRC
820295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_IPV4_CKSUM
821295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_UDP_CKSUM
822295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_TCP_CKSUM
823295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM
824295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM
825295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_RSS_HASH
826295968d1SFerruh Yigit       RTE_ETH_RX_OFFLOAD_VLAN_FILTER
8271adaf0e0SAjit Khaparde
828b845c295SAjit KhapardeNote that the offload configuration changes impacting the vector mode enablement
829b845c295SAjit Khapardeare allowed only when the port is stopped.
8301adaf0e0SAjit Khaparde
831b845c295SAjit KhapardePerformance Report
832b845c295SAjit Khaparde------------------
8331adaf0e0SAjit Khaparde
834b845c295SAjit KhapardeBroadcom DPDK performance has been reported since 19.08 release.
835b845c295SAjit KhapardeThe reports provide not only the performance results
836b845c295SAjit Khapardebut also test scenarios including test topology and detailed configurations.
837b845c295SAjit KhapardeSee the reports at `DPDK performance link <https://core.dpdk.org/perf-reports/>`.
8381adaf0e0SAjit Khaparde
839b845c295SAjit KhapardeSupported Network Adapters
840b845c295SAjit Khaparde--------------------------
8411adaf0e0SAjit Khaparde
842b845c295SAjit KhapardeListed below are BCM57400 and BCM57500 NetXtreme-E\ |reg| family
843b845c295SAjit Khapardeof Ethernet network adapters.
844b845c295SAjit KhapardeMore information can be found in the `NetXtreme\ |reg| Brand section
845b845c295SAjit Khaparde<https://www.broadcom.com/products/ethernet-connectivity/network-adapters/>`_
846b845c295SAjit Khapardeof the `Broadcom website <http://www.broadcom.com/>`_.
8471adaf0e0SAjit Khaparde
848b845c295SAjit KhapardeBCM57400 NetXtreme-E\ |reg| Family of Ethernet Network Controllers
849b845c295SAjit Khaparde~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8501adaf0e0SAjit Khaparde
851b845c295SAjit KhapardePCIe NICs
852b845c295SAjit Khaparde^^^^^^^^^
8531adaf0e0SAjit Khaparde
8541adaf0e0SAjit Khaparde* ``P210P .... Dual-port 10 Gigabit Ethernet Adapter``
855b845c295SAjit Khaparde* ``P210TP ... Dual-port 10 Gigabit Ethernet Adapter``
856b845c295SAjit Khaparde* ``P225P .... Dual-port 25 Gigabit Ethernet Adapter``
857b845c295SAjit Khaparde* ``P150P .... Single-port 50 Gigabit Ethernet Adapter``
858b845c295SAjit Khaparde
859b845c295SAjit KhapardeOCP 2.0 NICs
860b845c295SAjit Khaparde^^^^^^^^^^^^
861b845c295SAjit Khaparde
862b845c295SAjit Khaparde* ``M210P .... Dual-port 10 Gigabit Ethernet Adapter``
863b845c295SAjit Khaparde* ``M210TP ... Dual-port 10 Gigabit Ethernet Adapter``
864b845c295SAjit Khaparde* ``M125P .... Single-port 25 Gigabit Ethernet Adapter``
865b845c295SAjit Khaparde* ``M225P .... Dual-port 25 Gigabit Ethernet Adapter``
866b845c295SAjit Khaparde* ``M150P .... Single-port 50 Gigabit Ethernet Adapter``
867b845c295SAjit Khaparde* ``M150PM ... Single-port Multi-Host 50 Gigabit Ethernet Adapter``
868b845c295SAjit Khaparde
869b845c295SAjit KhapardeOCP 3.0 NICs
870b845c295SAjit Khaparde^^^^^^^^^^^^
871b845c295SAjit Khaparde
872b845c295SAjit Khaparde* ``N210P .... Dual-port 10 Gigabit Ethernet Adapter``
873b845c295SAjit Khaparde* ``N210TP ... Dual-port 10 Gigabit Ethernet Adapter``
874b845c295SAjit Khaparde* ``N225P  ... Dual-port 10 Gigabit Ethernet Adapter``
875b845c295SAjit Khaparde
876b845c295SAjit KhapardeBCM57500 NetXtreme-E\ |reg| Family of Ethernet Network Controllers
877b845c295SAjit Khaparde~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
878b845c295SAjit Khaparde
879b845c295SAjit KhapardePCIe NICs
880b845c295SAjit Khaparde^^^^^^^^^
881b845c295SAjit Khaparde
8821adaf0e0SAjit Khaparde* ``P410SG ... Quad-port 10 Gigabit Ethernet Adapter``
8831adaf0e0SAjit Khaparde* ``P410SGBT . Quad-port 10 Gigabit Ethernet Adapter``
884b845c295SAjit Khaparde* ``P425G .... Quad-port 25 Gigabit Ethernet Adapter``
885b845c295SAjit Khaparde* ``P1100G ... Single-port 100 Gigabit Ethernet Adapter``
886b845c295SAjit Khaparde* ``P2100G ... Dual-port 100 Gigabit Ethernet Adapter``
887b845c295SAjit Khaparde* ``P2200G ... Dual-port 200 Gigabit Ethernet Adapter``
8881adaf0e0SAjit Khaparde
889b845c295SAjit KhapardeOCP 2.0 NICs
890b845c295SAjit Khaparde^^^^^^^^^^^^
891e7d49fcdSLance Richardson
892b845c295SAjit Khaparde* ``M1100G ... Single-port OCP 2.0 10/25/50/100 Gigabit Ethernet Adapter``
89335226814SAjit Khaparde
894b845c295SAjit KhapardeOCP 3.0 NICs
895b845c295SAjit Khaparde^^^^^^^^^^^^
89693b7c9d8SAjit Khaparde
897b845c295SAjit Khaparde* ``N410SG ... Quad-port 10 Gigabit Ethernet Adapter``
898b845c295SAjit Khaparde* ``N410SGBT . Quad-port 10 Gigabit Ethernet Adapter``
899b845c295SAjit Khaparde* ``N425G .... Quad-port 25 Gigabit Ethernet Adapter``
900b845c295SAjit Khaparde* ``N150G .... Single-port 50 Gigabit Ethernet Adapter``
901b845c295SAjit Khaparde* ``N250G .... Dual-port 50 Gigabit Ethernet Adapter``
902b845c295SAjit Khaparde* ``N1100G ... Single-port 100 Gigabit Ethernet Adapter``
903b845c295SAjit Khaparde* ``N2100G ... Dual-port 100 Gigabit Ethernet Adapter``
904b845c295SAjit Khaparde* ``N2200G ... Dual-port 200 Gigabit Ethernet Adapter``
9051adaf0e0SAjit Khaparde
906b845c295SAjit KhapardeSupported Firmware Versions
907b845c295SAjit Khaparde---------------------------
90893b7c9d8SAjit Khaparde
909b845c295SAjit KhapardeShown below are Ethernet Network Adapters and their supported firmware versions
910b845c295SAjit Khaparde(refer to section “Supported Network Adapters” for the list of adapters):
911b845c295SAjit Khaparde
912b845c295SAjit Khaparde* ``BCM57400 NetXtreme-E\ |reg| Family`` ... Firmware 219.0.0 or later
913b845c295SAjit Khaparde* ``BCM57500 NetXtreme-E\ |reg| Family`` ... Firmware 219.0.0 or later
914b845c295SAjit Khaparde
915b845c295SAjit KhapardeShown below are DPDK LTS releases and their supported firmware versions:
91624cb38d1SAjit Khaparde
917b845c295SAjit Khaparde* ``DPDK Release 19.11`` ... Firmware 219.0.103 or later
918b845c295SAjit Khaparde* ``DPDK Release 20.11`` ... Firmware 219.0.103 or later
919b845c295SAjit Khaparde* ``DPDK Release 21.11`` ... Firmware 221.0.101 or later
920238f67caSAjit Khaparde* ``DPDK Release 22.11`` ... Firmware 226.0.131 or later
921b845c295SAjit Khaparde
922b845c295SAjit KhapardeSupported APIs
923b845c295SAjit Khaparde--------------
924b845c295SAjit Khaparde
925b845c295SAjit Khaparderte_eth APIs
926b845c295SAjit Khaparde~~~~~~~~~~~~
927b845c295SAjit Khaparde
928b845c295SAjit KhapardeListed below are the rte_eth functions supported:
929b845c295SAjit Khaparde* ``rte_eth_allmulticast_disable``
930b845c295SAjit Khaparde* ``rte_eth_allmulticast_enable``
931b845c295SAjit Khaparde* ``rte_eth_allmulticast_get``
932b845c295SAjit Khaparde* ``rte_eth_dev_close``
933b845c295SAjit Khaparde* ``rte_eth_dev_conf_get``
934b845c295SAjit Khaparde* ``rte_eth_dev_configure``
935b845c295SAjit Khaparde* ``rte_eth_dev_default_mac_addr_set``
936b845c295SAjit Khaparde* ``rte_eth_dev_flow_ctrl_get``
937b845c295SAjit Khaparde* ``rte_eth_dev_flow_ctrl_set``
938b845c295SAjit Khaparde* ``rte_eth_dev_fw_version_get``
939b845c295SAjit Khaparde* ``rte_eth_dev_get_eeprom``
940b845c295SAjit Khaparde* ``rte_eth_dev_get_eeprom``
941b845c295SAjit Khaparde* ``rte_eth_dev_get_eeprom_length``
942b845c295SAjit Khaparde* ``rte_eth_dev_get_eeprom_length``
943b845c295SAjit Khaparde* ``rte_eth_dev_get_module_eeprom``
944b845c295SAjit Khaparde* ``rte_eth_dev_get_module_info``
945b845c295SAjit Khaparde* ``rte_eth_dev_get_mtu``
946b845c295SAjit Khaparde* ``rte_eth_dev_get_name_by_port rte_eth_dev_get_port_by_name``
947b845c295SAjit Khaparde* ``rte_eth_dev_get_supported_ptypes``
948b845c295SAjit Khaparde* ``rte_eth_dev_get_vlan_offload``
949b845c295SAjit Khaparde* ``rte_eth_dev_info_get``
950b845c295SAjit Khaparde* ``rte_eth_dev_infos_get``
951b845c295SAjit Khaparde* ``rte_eth_dev_mac_addr_add``
952b845c295SAjit Khaparde* ``rte_eth_dev_mac_addr_remove``
953b845c295SAjit Khaparde* ``rte_eth_dev_macaddr_get``
954b845c295SAjit Khaparde* ``rte_eth_dev_macaddrs_get``
955b845c295SAjit Khaparde* ``rte_eth_dev_owner_get``
956b845c295SAjit Khaparde* ``rte_eth_dev_rss_hash_conf_get``
957b845c295SAjit Khaparde* ``rte_eth_dev_rss_hash_update``
958b845c295SAjit Khaparde* ``rte_eth_dev_rss_reta_query``
959b845c295SAjit Khaparde* ``rte_eth_dev_rss_reta_update``
960b845c295SAjit Khaparde* ``rte_eth_dev_rx_intr_disable``
961b845c295SAjit Khaparde* ``rte_eth_dev_rx_intr_enable``
962b845c295SAjit Khaparde* ``rte_eth_dev_rx_queue_start``
963b845c295SAjit Khaparde* ``rte_eth_dev_rx_queue_stop``
964b845c295SAjit Khaparde* ``rte_eth_dev_set_eeprom``
965b845c295SAjit Khaparde* ``rte_eth_dev_set_link_down``
966b845c295SAjit Khaparde* ``rte_eth_dev_set_link_up``
967b845c295SAjit Khaparde* ``rte_eth_dev_set_mc_addr_list``
968b845c295SAjit Khaparde* ``rte_eth_dev_set_mtu``
969b845c295SAjit Khaparde* ``rte_eth_dev_set_vlan_ether_type``
970b845c295SAjit Khaparde* ``rte_eth_dev_set_vlan_offload``
971b845c295SAjit Khaparde* ``rte_eth_dev_set_vlan_pvid``
972b845c295SAjit Khaparde* ``rte_eth_dev_start``
973b845c295SAjit Khaparde* ``rte_eth_dev_stop``
974b845c295SAjit Khaparde* ``rte_eth_dev_supported_ptypes_get``
975b845c295SAjit Khaparde* ``rte_eth_dev_tx_queue_start``
976b845c295SAjit Khaparde* ``rte_eth_dev_tx_queue_stop``
977b845c295SAjit Khaparde* ``rte_eth_dev_udp_tunnel_port_add``
978b845c295SAjit Khaparde* ``rte_eth_dev_udp_tunnel_port_delete``
979b845c295SAjit Khaparde* ``rte_eth_dev_vlan_filter``
980b845c295SAjit Khaparde* ``rte_eth_led_off``
981b845c295SAjit Khaparde* ``rte_eth_led_on``
982b845c295SAjit Khaparde* ``rte_eth_link_get``
983b845c295SAjit Khaparde* ``rte_eth_link_get_nowait``
984b845c295SAjit Khaparde* ``rte_eth_macaddr_get``
985b845c295SAjit Khaparde* ``rte_eth_macaddrs_get``
986b845c295SAjit Khaparde* ``rte_eth_promiscuous_disable``
987b845c295SAjit Khaparde* ``rte_eth_promiscuous_enable``
988b845c295SAjit Khaparde* ``rte_eth_promiscuous_get``
989b845c295SAjit Khaparde* ``rte_eth_rx_burst_mode_get``
990b845c295SAjit Khaparde* ``rte_eth_rx_queue_info_get``
991b845c295SAjit Khaparde* ``rte_eth_rx_queue_setup``
992b845c295SAjit Khaparde* ``rte_eth_stats_get``
993b845c295SAjit Khaparde* ``rte_eth_stats_reset``
994b845c295SAjit Khaparde* ``rte_eth_timesync_adjust_time``
995b845c295SAjit Khaparde* ``rte_eth_timesync_disable``
996b845c295SAjit Khaparde* ``rte_eth_timesync_enable``
997b845c295SAjit Khaparde* ``rte_eth_timesync_read_rx_timestamp``
998b845c295SAjit Khaparde* ``rte_eth_timesync_read_time``
999b845c295SAjit Khaparde* ``rte_eth_timesync_read_tx_timestamp``
1000b845c295SAjit Khaparde* ``rte_eth_timesync_write_time``
1001b845c295SAjit Khaparde* ``rte_eth_tx_burst_mode_get``
1002b845c295SAjit Khaparde* ``rte_eth_tx_queue_info_get``
1003b845c295SAjit Khaparde* ``rte_eth_tx_queue_setup``
1004b845c295SAjit Khaparde* ``rte_eth_xstats_get``
1005b845c295SAjit Khaparde* ``rte_eth_xstats_get_names``
1006b845c295SAjit Khaparde
1007b845c295SAjit Khaparderte_flow APIs
1008b845c295SAjit Khaparde~~~~~~~~~~~~~
1009b845c295SAjit Khaparde
1010b845c295SAjit KhapardeListed below are the rte_flow functions supported:
1011b845c295SAjit Khaparde* ``rte_flow_ops_get``
1012b845c295SAjit Khaparde* ``rte_flow_validate``
1013b845c295SAjit Khaparde* ``rte_flow_create``
1014b845c295SAjit Khaparde* ``rte_flow_destroy``
1015b845c295SAjit Khaparde* ``rte_flow_flush``
1016b845c295SAjit Khaparde* ``rte_flow_tunnel_action_decap_release``
1017b845c295SAjit Khaparde* ``rte_flow_tunnel_decap_set``
1018b845c295SAjit Khaparde* ``rte_flow_tunnel_item_release``
1019b845c295SAjit Khaparde* ``rte_flow_tunnel_match``
1020b845c295SAjit Khaparde
1021b845c295SAjit Khaparderte_flow Items
1022b845c295SAjit Khaparde~~~~~~~~~~~~~~
1023b845c295SAjit Khaparde
1024c1af2905SDavid MarchandRefer to :ref:`rte_flow items availability in networking drivers`.
1025b845c295SAjit Khaparde
1026b845c295SAjit KhapardeListed below are the rte_flow items supported:
1027b845c295SAjit Khaparde
1028b845c295SAjit Khaparde* ``any``
102974cab005SRandy Schacher* ``ecpri``
1030b845c295SAjit Khaparde* ``eth``
1031*dd0191d5SShuanglin Wang* ``geneve``
1032b845c295SAjit Khaparde* ``gre``
1033b845c295SAjit Khaparde* ``icmp``
1034b845c295SAjit Khaparde* ``icmp6``
1035b845c295SAjit Khaparde* ``ipv4``
1036b845c295SAjit Khaparde* ``ipv6``
1037b845c295SAjit Khaparde* ``port_id``
1038b845c295SAjit Khaparde* ``port_representor``
1039b845c295SAjit Khaparde* ``represented_port``
1040b845c295SAjit Khaparde* ``tcp``
1041b845c295SAjit Khaparde* ``udp``
1042b845c295SAjit Khaparde* ``vlan``
1043b845c295SAjit Khaparde* ``vxlan``
104474cab005SRandy Schacher* ``vxlan_gpe``
1045b845c295SAjit Khaparde
1046b845c295SAjit Khaparderte_flow Actions
1047b845c295SAjit Khaparde~~~~~~~~~~~~~~~~
1048b845c295SAjit Khaparde
1049c1af2905SDavid MarchandRefer to :ref:`rte_flow actions availability in networking drivers`.
1050b845c295SAjit Khaparde
1051b845c295SAjit KhapardeListed below are the rte_flow actions supported:
1052b845c295SAjit Khaparde
1053b845c295SAjit Khaparde* ``count``
1054b845c295SAjit Khaparde* ``dec_ttl``
1055b845c295SAjit Khaparde* ``drop``
105674cab005SRandy Schacher* ``jump``
105774cab005SRandy Schacher* ``mark``
105874cab005SRandy Schacher* ``meter``
1059b845c295SAjit Khaparde* ``of_pop_vlan``
1060b845c295SAjit Khaparde* ``of_push_vlan``
1061b845c295SAjit Khaparde* ``of_set_vlan_pcp``
1062b845c295SAjit Khaparde* ``of_set_vlan_vid``
1063b845c295SAjit Khaparde* ``pf``
1064b845c295SAjit Khaparde* ``phy_port``
1065b845c295SAjit Khaparde* ``port_id``
1066b845c295SAjit Khaparde* ``port_representor``
1067b845c295SAjit Khaparde* ``represented_port``
1068b845c295SAjit Khaparde* ``rss``
106974cab005SRandy Schacher* ``sample``
1070b845c295SAjit Khaparde* ``set_ipv4_dst``
1071b845c295SAjit Khaparde* ``set_ipv4_src``
1072*dd0191d5SShuanglin Wang* ``set_ipv6_dst``
1073*dd0191d5SShuanglin Wang* ``set_ipv6_src``
1074b845c295SAjit Khaparde* ``set_tp_dst``
1075b845c295SAjit Khaparde* ``set_tp_src``
1076*dd0191d5SShuanglin Wang* ``set_ttl``
1077b845c295SAjit Khaparde* ``vf``
1078b845c295SAjit Khaparde* ``vxlan_decap``
1079b845c295SAjit Khaparde* ``vxlan_encap``
1080