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