X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Ftestpmd_app_ug%2Ftestpmd_funcs.rst;h=44cb9658537b7ac9cfc06464afdf6ba32c6b86e9;hb=79bec05b32b75ce38a916f0d7605f6cd448ea72b;hp=975929ee4af63e3342943c9ecb07a07202e1e816;hpb=186e55864e0f98fe58033876ce6c8607d7e2d879;p=dpdk.git diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 975929ee4a..44cb965853 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1,5 +1,5 @@ .. BSD LICENSE - Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + Copyright(c) 2010-2015 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -28,33 +28,43 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.. _testpmd_runtime: + Testpmd Runtime Functions ========================= -Where the testpmd application is started in interactive mode, (-i|--interactive), +Where the testpmd application is started in interactive mode, (``-i|--interactive``), it displays a prompt that can be used to start and stop forwarding, -configure the application, display statistics, set the Flow Director and other tasks. - -.. code-block:: console +configure the application, display statistics, set the Flow Director and other tasks:: - testpmd> + testpmd> The testpmd prompt has some, limited, readline support. -Common bash command- line functions such as Ctrl+a and Ctrl+e to go to the start and end of the prompt line are supported +Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported as well as access to the command history via the up-arrow. There is also support for tab completion. -If you type a partial command and hit you get a list of the available completions: +If you type a partial command and hit ```` you get a list of the available completions: .. code-block:: console - testpmd> show port + testpmd> show port + + info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc X + info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc all + stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc X + stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc all + ... + + +.. note:: + + Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes:: + + testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ + (pause_time) (send_xon) (port_id) - info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap X - info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap all - stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap X - stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap all - ... +In the real ``testpmd>`` prompt these commands should be on a single line. Help Functions -------------- @@ -64,17 +74,16 @@ These are divided into sections and can be accessed using help, help section or .. code-block:: console - testpmd> help + testpmd> help + + help control : Start and stop forwarding. + help display : Displaying port, stats and config information. + help config : Configuration information. + help ports : Configuring ports. + help registers : Reading and setting port registers. + help filters : Filters configuration help. + help all : All of the above sections. - Help is available for the following sections: - help control : Start and stop forwarding. - help display : Displaying port, stats and config information. - help config : Configuration information. - help ports : Configuring ports. - help flowdir : Flow Director filter help. - help registers : Reading and setting port registers. - help filters : Filters configuration help. - help all : All of the above sections. Control Functions ----------------- @@ -82,30 +91,31 @@ Control Functions start ~~~~~ -Start packet forwarding with current configuration: +Start packet forwarding with current configuration:: -start + testpmd> start start tx_first ~~~~~~~~~~~~~~ -Start packet forwarding with current configuration after sending one burst of packets: +Start packet forwarding with current configuration after sending one burst of packets:: -start tx_first + testpmd> start tx_first stop ~~~~ -Stop packet forwarding, and display accumulated statistics: +Stop packet forwarding, and display accumulated statistics:: -stop + testpmd> stop quit ~~~~ -Quit to prompt: +Quit to prompt:: + + testpmd> quit -quit Display Functions ----------------- @@ -116,125 +126,185 @@ testpmd configuration or the NIC status. show port ~~~~~~~~~ -Display information for a given port or all ports: +Display information for a given port or all ports:: -show port (info|stats|fdir|stat_qmap) (port_id|all) + testpmd> show port (info|stats|fdir|stat_qmap|dcb_tc) (port_id|all) The available information categories are: -info : General port information such as MAC address. +* ``info``: General port information such as MAC address. + +* ``stats``: RX/TX statistics. -stats : RX/TX statistics. +* ``fdir``: Flow Director information and statistics. -fdir : Flow Director information and statistics. +* ``stat_qmap``: Queue statistics mapping. -stat_qmap : Queue statistics mapping. +* ``dcb_tc``: DCB information such as TC mapping. For example: .. code-block:: console - testpmd> show port info 0 - - ********************* Infos for port 0 ********************* - - MAC address: XX:XX:XX:XX:XX:XX - Link status: up - Link speed: 10000 Mbps - Link duplex: full-duplex - Promiscuous mode: enabled - Allmulticast mode: disabled - Maximum number of MAC addresses: 127 - VLAN offload: - strip on - filter on - qinq(extend) off + testpmd> show port info 0 + + ********************* Infos for port 0 ********************* + + MAC address: XX:XX:XX:XX:XX:XX + Connect to socket: 0 + memory allocation on the socket: 0 + Link status: up + Link speed: 40000 Mbps + Link duplex: full-duplex + Promiscuous mode: enabled + Allmulticast mode: disabled + Maximum number of MAC addresses: 64 + Maximum number of MAC addresses of hash filtering: 0 + VLAN offload: + strip on + filter on + qinq(extend) off + Redirection table size: 512 + Supported flow types: + ipv4-frag + ipv4-tcp + ipv4-udp + ipv4-sctp + ipv4-other + ipv6-frag + ipv6-tcp + ipv6-udp + ipv6-sctp + ipv6-other + l2_payload show port rss reta ~~~~~~~~~~~~~~~~~~ -Display the rss redirection table entry indicated by masks on port X: +Display the rss redirection table entry indicated by masks on port X:: -show port (port_id) rss reta (size) (mask0, mask1...) + testpmd> show port (port_id) rss reta (size) (mask0, mask1...) size is used to indicate the hardware supported reta size show port rss-hash ~~~~~~~~~~~~~~~~~~ -Display the RSS hash functions and RSS hash key of port (port_id). +Display the RSS hash functions and RSS hash key of a port:: -show port (port_id) rss-hash [key] clear port -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + testpmd> show port (port_id) rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex [key] -Clear the port statistics for a given port or for all ports: +clear port +~~~~~~~~~~ -clear port (info|stats|fdir|stat_qmap) (port_id|all) +Clear the port statistics for a given port or for all ports:: -For example: + testpmd> clear port (info|stats|fdir|stat_qmap) (port_id|all) -.. code-block:: console +For example:: - testpmd> clear port stats all + testpmd> clear port stats all show config ~~~~~~~~~~~ Displays the configuration of the application. -The configuration comes from the command-line, the runtime or the application defaults: +The configuration comes from the command-line, the runtime or the application defaults:: -show config (rxtx|cores|fwd) + testpmd> show config (rxtx|cores|fwd|txpkts) The available information categories are: -rxtx : RX/TX configuration items. +* ``rxtx``: RX/TX configuration items. -cores : List of forwarding cores. +* ``cores``: List of forwarding cores. -fwd : Packet forwarding configuration. +* ``fwd``: Packet forwarding configuration. + +* ``txpkts``: Packets to TX configuration. For example: .. code-block:: console - testpmd> show config rxtx + testpmd> show config rxtx + + io packet forwarding - CRC stripping disabled - packets/burst=16 + nb forwarding cores=2 - nb forwarding ports=1 + RX queues=1 - RX desc=128 - RX free threshold=0 + RX threshold registers: pthresh=8 hthresh=8 wthresh=4 + TX queues=1 - TX desc=512 - TX free threshold=0 + TX threshold registers: pthresh=36 hthresh=0 wthresh=0 + TX RS bit threshold=0 - TXQ flags=0x0 + +set fwd +~~~~~~~ + +Set the packet forwarding mode:: + + testpmd> set fwd (io|mac|mac_retry|macswap|flowgen| \ + rxonly|txonly|csum|icmpecho) + +The available information categories are: + +* ``io``: Forwards packets "as-is" in I/O mode. + This is the fastest possible forwarding operation as it does not access packets data. + This is the default mode. + +* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them. + +* ``mac_retry``: Same as "mac" forwarding mode, but includes retries if the destination queue is full. + +* ``macswap``: MAC swap forwarding mode. + Swaps the source and the destination Ethernet addresses of packets before forwarding them. + +* ``flowgen``: Multi-flow generation mode. + Originates a number of flows (with varying destination IP addresses), and terminate receive traffic. + +* ``rxonly``: Receives packets but doesn't transmit them. + +* ``txonly``: Generates and transmits packets without receiving any. + +* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet. + +* ``icmpecho``: Receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies. + +* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``. + +Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``. + +Example:: + + testpmd> set fwd rxonly + + Set rxonly packet forwarding mode - io packet forwarding - CRC stripping disabled - packets/burst=16 - nb forwarding cores=2 - nb forwarding ports=1 - RX queues=1 - RX desc=128 - RX free threshold=0 - RX threshold registers: pthresh=8 hthresh=8 wthresh=4 - TX queues=1 - TX desc=512 - TX free threshold=0 - TX threshold registers: pthresh=36 hthresh=0 wthresh=0 - TX RS bit threshold=0 - TXQ flags=0x0 read rxd ~~~~~~~~ -Display an RX descriptor for a port RX queue: +Display an RX descriptor for a port RX queue:: -read rxd (port_id) (queue_id) (rxd_id) + testpmd> read rxd (port_id) (queue_id) (rxd_id) -For example: - -.. code-block:: console +For example:: - testpmd> read rxd 0 0 4 + testpmd> read rxd 0 0 4 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180 read txd ~~~~~~~~ -Display a TX descriptor for a port TX queue: +Display a TX descriptor for a port TX queue:: -read txd (port_id) (queue_id) (txd_id) + testpmd> read txd (port_id) (queue_id) (txd_id) -For example: - -.. code-block:: console +For example:: - testpmd> read txd 0 0 4 + testpmd> read txd 0 0 4 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C + Configuration Functions ----------------------- @@ -244,21 +314,21 @@ This section details the available configuration functions that are available. .. note:: - Configuration changes only become active when forwarding is started/restarted. + Configuration changes only become active when forwarding is started/restarted. set default ~~~~~~~~~~~ -Reset forwarding to the default configuration: +Reset forwarding to the default configuration:: -set default + testpmd> set default set verbose ~~~~~~~~~~~ -Set the debug verbosity level: +Set the debug verbosity level:: -set verbose (level) + testpmd> set verbose (level) Currently the only available levels are 0 (silent except for error) and 1 (fully verbose). @@ -269,1417 +339,1536 @@ Set the number of ports used by the application: set nbport (num) -This is equivalent to the --nb-ports command-line option. +This is equivalent to the ``--nb-ports`` command-line option. set nbcore ~~~~~~~~~~ -Set the number of cores used by the application: +Set the number of cores used by the application:: -set nbcore (num) + testpmd> set nbcore (num) -This is equivalent to the --nb-cores command-line option. +This is equivalent to the ``--nb-cores`` command-line option. .. note:: - The number of cores used must not be greater than number of ports used multiplied by the number of queues per port. + The number of cores used must not be greater than number of ports used multiplied by the number of queues per port. set coremask ~~~~~~~~~~~~ -Set the forwarding cores hexadecimal mask: +Set the forwarding cores hexadecimal mask:: -set coremask (mask) + testpmd> set coremask (mask) -This is equivalent to the --coremask command-line option. +This is equivalent to the ``--coremask`` command-line option. .. note:: - The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. + The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. set portmask ~~~~~~~~~~~~ -Set the forwarding ports hexadecimal mask: +Set the forwarding ports hexadecimal mask:: -set portmask (mask) + testpmd> set portmask (mask) -This is equivalent to the --portmask command-line option. +This is equivalent to the ``--portmask`` command-line option. set burst ~~~~~~~~~ -Set number of packets per burst: +Set number of packets per burst:: -set burst (num) + testpmd> set burst (num) -This is equivalent to the --burst command-line option. +This is equivalent to the ``--burst command-line`` option. -In mac_retry forwarding mode, the transmit delay time and number of retries can also be set. +In ``mac_retry`` forwarding mode, the transmit delay time and number of retries can also be set:: -set burst tx delay (micrseconds) retry (num) + testpmd> set burst tx delay (micrseconds) retry (num) set txpkts ~~~~~~~~~~ -Set the length of each segment of the TX-ONLY packets: +Set the length of each segment of the TX-ONLY packets:: -set txpkts (x[,y]*) + testpmd> set txpkts (x[,y]*) Where x[,y]* represents a CSV list of values, without white space. +set txsplit +~~~~~~~~~~~ + +Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes:: + + testpmd> set txsplit (off|on|rand) + +Where: + +* ``off`` disable packet copy & split for CSUM mode. + +* ``on`` split outgoing packet into multiple segments. Size of each segment + and number of segments per packet is determined by ``set txpkts`` command + (see above). + +* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments. + set corelist ~~~~~~~~~~~~ -Set the list of forwarding cores: +Set the list of forwarding cores:: -set corelist (x[,y]*) + testpmd> set corelist (x[,y]*) For example, to change the forwarding cores: .. code-block:: console - testpmd> set corelist 3,1 - testpmd> show config fwd + testpmd> set corelist 3,1 + testpmd> show config fwd - io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled - Logical Core 3 (socket 0) forwards packets on 1 streams: - RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 - Logical Core 1 (socket 0) forwards packets on 1 streams: - RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 + io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled + Logical Core 3 (socket 0) forwards packets on 1 streams: + RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 + Logical Core 1 (socket 0) forwards packets on 1 streams: + RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 .. note:: - The cores are used in the same order as specified on the command line. + The cores are used in the same order as specified on the command line. set portlist ~~~~~~~~~~~~ -Set the list of forwarding ports: +Set the list of forwarding ports:: -set portlist (x[,y]*) + testpmd> set portlist (x[,y]*) For example, to change the port forwarding: .. code-block:: console - testpmd> set portlist 0,2,1,3 - testpmd> show config fwd + testpmd> set portlist 0,2,1,3 + testpmd> show config fwd - io packet forwarding - ports=4 - cores=1 - streams=4 - Logical Core 3 (socket 0) forwards packets on 4 streams: - RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01 - RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 - RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03 - RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02 + io packet forwarding - ports=4 - cores=1 - streams=4 + Logical Core 3 (socket 0) forwards packets on 4 streams: + RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01 + RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 + RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03 + RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02 vlan set strip ~~~~~~~~~~~~~~ -Set the VLAN strip on a port: +Set the VLAN strip on a port:: -vlan set strip (on|off) (port_id) + testpmd> vlan set strip (on|off) (port_id) vlan set stripq ~~~~~~~~~~~~~~~ -Set the VLAN strip for a queue on a port: +Set the VLAN strip for a queue on a port:: -vlan set stripq (on|off) (port_id,queue_id) + testpmd> vlan set stripq (on|off) (port_id,queue_id) vlan set filter ~~~~~~~~~~~~~~~ -Set the VLAN filter on a port: +Set the VLAN filter on a port:: -vlan set filter (on|off) (port_id) + testpmd> vlan set filter (on|off) (port_id) vlan set qinq ~~~~~~~~~~~~~ -Set the VLAN QinQ (extended queue in queue) on for a port: +Set the VLAN QinQ (extended queue in queue) on for a port:: -vlan set qinq (on|off) (port_id) + testpmd> vlan set qinq (on|off) (port_id) vlan set tpid ~~~~~~~~~~~~~ -Set the outer VLAN TPID for packet filtering on a port: +Set the outer VLAN TPID for packet filtering on a port:: -vlan set tpid (value) (port_id) + testpmd> vlan set tpid (value) (port_id) .. note:: - TPID value must be a 16-bit number (value <= 65536). + TPID value must be a 16-bit number (value <= 65536). rx_vlan add ~~~~~~~~~~~ -Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID: +Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID:: -rx_vlan add (vlan_id|all) (port_id) + testpmd> rx_vlan add (vlan_id|all) (port_id) .. note:: - VLAN filter must be set on that port. VLAN ID < 4096. + VLAN filter must be set on that port. VLAN ID < 4096. + Depending on the NIC used, number of vlan_ids may be limited to the maximum entries + in VFTA table. This is important if enabling all vlan_ids. rx_vlan rm ~~~~~~~~~~ -Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID: - -rx_vlan rm (vlan_id|all) (port_id) - -rx_vlan add(for VF) -~~~~~~~~~~~~~~~~~~~ - -Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID: +Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID:: -rx_vlan add (vlan_id) port (port_id) vf (vf_mask) + testpmd> rx_vlan rm (vlan_id|all) (port_id) -rx_vlan rm(for VF) -~~~~~~~~~~~~~~~~~~ +rx_vlan add (for VF) +~~~~~~~~~~~~~~~~~~~~ -Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID: +Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID:: -rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) + testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask) -tx_rate (for Queue) +rx_vlan rm (for VF) ~~~~~~~~~~~~~~~~~~~ -Set TX rate limitation for queue of a port ID: - -set port (port_id) queue (queue_id) rate (rate_value) - -tx_rate (for VF) -~~~~~~~~~~~~~~~~ +Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID:: -Set TX rate limitation for queues in VF of a port ID: - -set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) + testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) rx_vlan set tpid ~~~~~~~~~~~~~~~~ -Set the outer VLAN TPID for packet filtering on a port: +Set the outer VLAN TPID for packet filtering on a port:: -rx_vlan set tpid (value) (port_id) + testpmd> rx_vlan set tpid (value) (port_id) tunnel_filter add ~~~~~~~~~~~~~~~~~ -Add a tunnel filter on a port: +Add a tunnel filter on a port:: -tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan) - (tunnel_type) (filter_type) (tenant_id) (queue_id) + testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \ + (inner_vlan) (tunnel_type) (filter_type) (tenant_id) (queue_id) tunnel_filter remove ~~~~~~~~~~~~~~~~~~~~ -Remove a tunnel filter on a port: +Remove a tunnel filter on a port:: -tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan) - (tunnel_type) (filter_type) (tenant_id) (queue_id) + testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \ + (inner_vlan) (tunnel_type) (filter_type) (tenant_id) (queue_id) rx_vxlan_port add ~~~~~~~~~~~~~~~~~ -Add an UDP port for VXLAN packet filter on a port: +Add an UDP port for VXLAN packet filter on a port:: -rx_vxlan_port add (udp_port) (port_id) + testpmd> rx_vxlan_port add (udp_port) (port_id) rx_vxlan_port remove ~~~~~~~~~~~~~~~~~~~~ -Remove an UDP port for VXLAN packet filter on a port: +Remove an UDP port for VXLAN packet filter on a port:: -rx_vxlan_port rm (udp_port) (port_id) + testpmd> rx_vxlan_port rm (udp_port) (port_id) tx_vlan set ~~~~~~~~~~~ -Set hardware insertion of VLAN ID in packets sent on a port: +Set hardware insertion of VLAN IDs in packets sent on a port:: + + testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer] + +For example, set a single VLAN ID (5) insertion on port 0:: + + tx_vlan set 0 5 + +Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1:: + + tx_vlan set 1 2 3 -tx_vlan set (vlan_id) (port_id) tx_vlan set pvid ~~~~~~~~~~~~~~~~ -Set port based hardware insertion of VLAN ID in pacekts sent on a port: +Set port based hardware insertion of VLAN ID in packets sent on a port:: -tx_vlan set pvid (port_id) (vlan_id) (on|off) + testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off) tx_vlan reset ~~~~~~~~~~~~~ -Disable hardware insertion of a VLAN header in packets sent on a port: +Disable hardware insertion of a VLAN header in packets sent on a port:: -tx_vlan reset (port_id) + testpmd> tx_vlan reset (port_id) -tx_checksum set -~~~~~~~~~~~~~~~ +csum set +~~~~~~~~ Select hardware or software calculation of the checksum when -transmitting a packet using the csum forward engine: - -tx_cksum set (ip|udp|tcp|sctp|vxlan) +transmitting a packet using the ``csum`` forwarding engine:: -ip|udp|tcp|sctp always concern the inner layer. -vxlan concerns the outer IP and UDP layer (in case the packet -is recognized as a vxlan packet by the forward engine) + testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id) -.. note:: - - Check the NIC Datasheet for hardware limits. - -tx_checksum show -~~~~~~~~~~~~~~~~ +Where: -Display tx checksum offload configuration: +* ``ip|udp|tcp|sctp`` always relate to the inner layer. -tx_checksum show (port_id) +* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized + as a tunnel packet by the forwarding engine (vxlan, gre and ipip are + supported). See also the ``csum parse-tunnel`` command. -tso set -~~~~~~~ +.. note:: -Enable TCP Segmentation Offload in csum forward engine: + Check the NIC Datasheet for hardware limits. -tso set (segsize) (port_id) +csum parse-tunnel +~~~~~~~~~~~~~~~~~ -.. note:: - Please check the NIC datasheet for HW limits +Define how tunneled packets should be handled by the csum forward +engine:: -tso show -~~~~~~~~ + testpmd> csum parse-tunnel (on|off) (tx_port_id) -Display the status of TCP Segmentation Offload: +If enabled, the csum forward engine will try to recognize supported +tunnel headers (vxlan, gre, ipip). -tso show (port_id) +If disabled, treat tunnel packets as non-tunneled packets (a inner +header is handled as a packet payload). -set fwd -~~~~~~~ +.. note:: -Set the packet forwarding mode: + The port argument is the TX port like in the ``csum set`` command. -set fwd (io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho) +Example: -The available information categories are: +Consider a packet in packet like the following:: -* io: forwards packets "as-is" in I/O mode. - This is the fastest possible forwarding operation as it does not access packets data. - This is the default mode. + eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in -* mac: changes the source and the destination Ethernet addresses of packets before forwarding them. +* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` + command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the + ``outer-ip parameter`` relates to the outer headers (here ``ipv4_out``). -* mac_retry: same as "mac" forwarding mode, but includes retries if the destination queue is full. +* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` + command relate to the outer headers, here ``ipv4_out`` and ``udp_out``. -* macswap: MAC swap forwarding mode. - Swaps the source and the destination Ethernet addresses of packets before forwarding them. +csum show +~~~~~~~~~ -* flowgen: multi-flow generation mode. - Originates a bunch of flows (varying destination IP addresses), and terminate receive traffic. +Display tx checksum offload configuration:: -* rxonly: receives packets but doesn't transmit them. + testpmd> csum show (port_id) -* txonly: generates and transmits packets without receiving any. +tso set +~~~~~~~ -* csum: changes the checksum field with HW or SW methods depending on the offload flags on the packet. +Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine:: -* icmpecho: receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies. + testpmd> tso set (segsize) (port_id) +.. note:: -Example: + Check the NIC datasheet for hardware limits. -.. code-block:: console +tso show +~~~~~~~~ - testpmd> set fwd rxonly +Display the status of TCP Segmentation Offload:: - Set rxonly packet forwarding mode + testpmd> tso show (port_id) mac_addr add ~~~~~~~~~~~~ -Add an alternative MAC address to a port: +Add an alternative MAC address to a port:: -mac_addr add (port_id) (XX:XX:XX:XX:XX:XX) + testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX) mac_addr remove ~~~~~~~~~~~~~~~ -Remove a MAC address from a port: +Remove a MAC address from a port:: -mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX) + testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX) mac_addr add(for VF) ~~~~~~~~~~~~~~~~~~~~ -Add an alternative MAC address for a VF to a port: +Add an alternative MAC address for a VF to a port:: -mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX) + testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX) set port-uta ~~~~~~~~~~~~ -Set the unicast hash filter(s) on/off for a port X: +Set the unicast hash filter(s) on/off for a port:: -set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off) + testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off) set promisc ~~~~~~~~~~~ Set the promiscuous mode on for a port or for all ports. -In promiscuous mode packets are not dropped if they aren't for the specified MAC address: +In promiscuous mode packets are not dropped if they aren't for the specified MAC address:: -set promisc (port_id|all) (on|off) + testpmd> set promisc (port_id|all) (on|off) set allmulti ~~~~~~~~~~~~ -Set the allmulti mode for a port or for all ports: +Set the allmulti mode for a port or for all ports:: -set allmulti (port_id|all) (on|off) + testpmd> set allmulti (port_id|all) (on|off) Same as the ifconfig (8) option. Controls how multicast packets are handled. set flow_ctrl rx ~~~~~~~~~~~~~~~~ -Set the link flow control parameter on a port: +Set the link flow control parameter on a port:: -set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ -(pause_time) (send_xon) (port_id) + testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ + (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \ + autoneg (on|off) (port_id) Where: -high_water (integer): High threshold value to trigger XOFF. +* ``high_water`` (integer): High threshold value to trigger XOFF. + +* ``low_water`` (integer): Low threshold value to trigger XON. -low_water (integer) : Low threshold value to trigger XON. +* ``pause_time`` (integer): Pause quota in the Pause frame. -pause_time (integer): Pause quota in the Pause frame. +* ``send_xon`` (0/1): Send XON frame. -send_xon (0/1) : Send XON frame. +* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames. -mac_ctrl_frame_fwd : Enable receiving MAC control frames +* ``autoneg``: Change the auto-negotiation para mete. set pfc_ctrl rx ~~~~~~~~~~~~~~~ -Set the priority flow control parameter on a port: +Set the priority flow control parameter on a port:: -set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ (pause_time) (priority) (port_id) + testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ + (pause_time) (priority) (port_id) Where: -priority (0-7): VLAN User Priority. +* ``high_water`` (integer): High threshold value. + +* ``low_water`` (integer): Low threshold value. + +* ``pause_time`` (integer): Pause quota in the Pause frame. + +* ``priority`` (0-7): VLAN User Priority. set stat_qmap ~~~~~~~~~~~~~ -Set statistics mapping (qmapping 0..15) for RX/TX queue on port: +Set statistics mapping (qmapping 0..15) for RX/TX queue on port:: -set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping) + testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping) -For example, to set rx queue 2 on port 0 to mapping 5: +For example, to set rx queue 2 on port 0 to mapping 5:: -.. code-block:: console + testpmd>set stat_qmap rx 0 2 5 - testpmd>set stat_qmap rx 0 2 5 - -set port - rx/tx(for VF) -~~~~~~~~~~~~~~~~~~~~~~~~ +set port - rx/tx (for VF) +~~~~~~~~~~~~~~~~~~~~~~~~~ -Set VF receive/transmit from a port: +Set VF receive/transmit from a port:: -set port (port_id) vf (vf_id) (rx|tx) (on|off) + testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off) set port - mac address filter (for VF) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Add/Remove unicast or multicast MAC addr filter for a VF: +Add/Remove unicast or multicast MAC addr filter for a VF:: -set port (port_id) vf (vf_id) (mac_addr) - (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) + testpmd> set port (port_id) vf (vf_id) (mac_addr) \ + (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) set port - rx mode(for VF) ~~~~~~~~~~~~~~~~~~~~~~~~~~ -Set the VF receive mode of a port: +Set the VF receive mode of a port:: -set port (port_id) vf (vf_id) rxmode (AUPE|ROPE|BAM|MPE) (on|off) + testpmd> set port (port_id) vf (vf_id) \ + rxmode (AUPE|ROPE|BAM|MPE) (on|off) The available receive modes are: -* AUPE: accepts untagged VLAN. +* ``AUPE``: Accepts untagged VLAN. + +* ``ROPE``: Accepts unicast hash. + +* ``BAM``: Accepts broadcast packets. + +* ``MPE``: Accepts all multicast packets. + +set port - tx_rate (for Queue) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set TX rate limitation for a queue on a port:: + + testpmd> set port (port_id) queue (queue_id) rate (rate_value) -* ROPE: accepts unicast hash. +set port - tx_rate (for VF) +~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* BAM: accepts broadcast packets +Set TX rate limitation for queues in VF on a port:: -* MPE: accepts all multicast packets + testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) set port - mirror rule ~~~~~~~~~~~~~~~~~~~~~~ -Set port or vlan type mirror rule for a port. +Set pool or vlan type mirror rule for a port:: -set port (port_id) mirror-rule (rule_id) (pool-mirror|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) + testpmd> set port (port_id) mirror-rule (rule_id) \ + (pool-mirror-up|pool-mirror-down|vlan-mirror) \ + (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) -For example to enable mirror traffic with vlan 0,1 to pool 0: +Set link mirror rule for a port:: -.. code-block:: console + testpmd> set port (port_id) mirror-rule (rule_id) \ + (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off) + +For example to enable mirror traffic with vlan 0,1 to pool 0:: - set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on + set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on reset port - mirror rule ~~~~~~~~~~~~~~~~~~~~~~~~ -Reset a mirror rule for a port. +Reset a mirror rule for a port:: -reset port (port_id) mirror-rule (rule_id) + testpmd> reset port (port_id) mirror-rule (rule_id) set flush_rx ~~~~~~~~~~~~ -Flush (default) or don't flush RX streams before forwarding. -Mainly used with PCAP drivers to avoid the default behavior of flushing the first 512 packets on RX streams. +Set the flush on RX streams before forwarding. +The default is flush ``on``. +Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams:: -set flush_rx off + testpmd> set flush_rx off set bypass mode ~~~~~~~~~~~~~~~ -Set the bypass mode for the lowest port on bypass enabled NIC. +Set the bypass mode for the lowest port on bypass enabled NIC:: -set bypass mode (normal|bypass|isolate) (port_id) + testpmd> set bypass mode (normal|bypass|isolate) (port_id) set bypass event ~~~~~~~~~~~~~~~~ -Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled NIC where: +Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled:: -* timeout: enable bypass after watchdog timeout. + testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \ + mode (normal|bypass|isolate) (port_id) + +Where: -* os_on: enable bypass when OS/board is powered on. +* ``timeout``: Enable bypass after watchdog timeout. -* os_off: enable bypass when OS/board is powered off. +* ``os_on``: Enable bypass when OS/board is powered on. -* power_on: enable bypass when power supply is turned on. +* ``os_off``: Enable bypass when OS/board is powered off. -* power_off: enable bypass when power supply is turned off. +* ``power_on``: Enable bypass when power supply is turned on. + +* ``power_off``: Enable bypass when power supply is turned off. -set bypass event (timeout|os_on|os_off|power_on|power_off) mode (normal|bypass|isolate) (port_id) set bypass timeout ~~~~~~~~~~~~~~~~~~ -Set the bypass watchdog timeout to 'n' seconds where 0 = instant. +Set the bypass watchdog timeout to ``n`` seconds where 0 = instant:: -set bypass timeout (0|1.5|2|3|4|8|16|32) + testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32) show bypass config ~~~~~~~~~~~~~~~~~~ -Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC. - -show bypass config (port_id) +Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC:: -add_ethertype_filter -~~~~~~~~~~~~~~~~~~~~ + testpmd> show bypass config (port_id) -Add a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue. +set link up +~~~~~~~~~~~ -add_ethertype_filter (port_id) ethertype (eth_value) priority (enable|disable) (pri_value) queue (queue_id) index (idx) +Set link up for a port:: -The available information parameters are: + testpmd> set link-up port (port id) -* port_id: the port which the Ethertype filter assigned on. +set link down +~~~~~~~~~~~~~ -* eth_value: the EtherType value want to match, - for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. +Set link down for a port:: -* enable: user priority participates in the match. + testpmd> set link-down port (port id) -* disable: user priority doesn't participate in the match. -* pri_value: user priority value that want to match. +Port Functions +-------------- -* queue_id : The receive queue associated with this EtherType filter +The following sections show functions for configuring ports. -* index: the index of this EtherType filter +.. note:: -Example: + Port configuration changes only become active when forwarding is started/restarted. -.. code-block:: console +port attach +~~~~~~~~~~~ - testpmd> add_ethertype_filter 0 ethertype 0x0806 priority disable 0 queue 3 index 0 - Assign ARP packet to receive queue 3 +Attach a port specified by pci address or virtual device args. -remove_ethertype_filter -~~~~~~~~~~~~~~~~~~~~~~~ +To attach a new pci device, the device should be recognized by kernel first. +Then it should be moved under DPDK management. +Finally the port can be attached to testpmd. -Remove a L2 Ethertype filter +For example, to move a pci device using ixgbe under DPDK management: -remove_ethertype_filter (port_id) index (idx) +.. code-block:: console -get_ethertype_filter -~~~~~~~~~~~~~~~~~~~~ + # Check the status of the available devices. + ./tools/dpdk_nic_bind.py --status -Get and display a L2 Ethertype filter + Network devices using DPDK-compatible driver + ============================================ + -get_ethertype_filter (port_id) index (idx) + Network devices using kernel driver + =================================== + 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused= -Example: -.. code-block:: console + # Bind the device to igb_uio. + sudo ./tools/dpdk_nic_bind.py -b igb_uio 0000:0a:00.0 - testpmd> get_ethertype_filter 0 index 0 - filter[0]: - ethertype: 0x0806 - priority: disable, 0 - queue: 3 + # Recheck the status of the devices. + ./tools/dpdk_nic_bind.py --status + Network devices using DPDK-compatible driver + ============================================ + 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused= -add_2tuple_filter -~~~~~~~~~~~~~~~~~ +To attach a port created by virtual device, above steps are not needed. -Add a 2-tuple filter, -which identify packets by specific protocol and destination TCP/UDP port -and forwards packets into one of the receive queues. +port attach (identifier) -add_2tuple_filter (port_id) protocol (pro_value) (pro_mask) dst_port (port_value) (port_mask) -flags (flg_value) priority (prio_value) queue (queue_id) index (idx) +For example, to attach a port whose pci address is 0000:0a:00.0. -The available information parameters are: +.. code-block:: console -* port_id: the port which the 2-tuple filter assigned on. + testpmd> port attach 0000:0a:00.0 + Attaching a new port... + EAL: PCI device 0000:0a:00.0 on NUMA socket -1 + EAL: probe driver: 8086:10fb rte_ixgbe_pmd + EAL: PCI memory mapped at 0x7f83bfa00000 + EAL: PCI memory mapped at 0x7f83bfa80000 + PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5 + PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb + Port 0 is attached. Now total ports is 1 + Done -* pro_value: IP L4 protocol +For example, to attach a port created by pcap PMD. -* pro_mask: protocol participates in the match or not, 1 means participate +.. code-block:: console -* port_value: destination port in L4. + testpmd> port attach eth_pcap0 + Attaching a new port... + PMD: Initializing pmd_pcap for eth_pcap0 + PMD: Creating pcap-backed ethdev on numa socket 0 + Port 0 is attached. Now total ports is 1 + Done -* port_mask: destination port participates in the match or not, 1 means participate. +In this case, identifier is ``eth_pcap0``. +This identifier format is the same as ``--vdev`` format of DPDK applications. -* flg_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). +For example, to re-attach a bonded port which has been previously detached, +the mode and slave parameters must be given. -* prio_value: the priority of this filter. +.. code-block:: console -* queue_id: The receive queue associated with this 2-tuple filter + testpmd> port attach eth_bond_0,mode=0,slave=1 + Attaching a new port... + EAL: Initializing pmd_bond for eth_bond_0 + EAL: Create bonded device eth_bond_0 on port 0 in mode 0 on socket 0. + Port 0 is attached. Now total ports is 1 + Done -* index: the index of this 2-tuple filter -Example: +port detach +~~~~~~~~~~~ -.. code-block:: console +Detach a specific port. - testpmd> add_2tuple_filter 0 protocol 0x06 1 dst_port 32 1 flags 0x02 priority 3 queue 3 index 0 +Before detaching a port, the port should be closed:: -remove_2tuple_filter -~~~~~~~~~~~~~~~~~~~~ + testpmd> port detach (port_id) -Remove a 2-tuple filter +For example, to detach a pci device port 0. -remove_2tuple_filter (port_id) index (idx) +.. code-block:: console -get_2tuple_filter -~~~~~~~~~~~~~~~~~ + testpmd> port close 0 + Closing ports... + Done -Get and display a 2-tuple filter + testpmd> port detach 0 + Detaching a port... + EAL: PCI device 0000:0a:00.0 on NUMA socket -1 + EAL: remove driver: 8086:10fb rte_ixgbe_pmd + EAL: PCI memory unmapped at 0x7f83bfa00000 + EAL: PCI memory unmapped at 0x7f83bfa80000 + Done -get_2tuple_filter (port_id) index (idx) -Example: +For example, to detach a virtual device port 0. .. code-block:: console - testpmd> get_2tuple_filter 0 index 0 + testpmd> port close 0 + Closing ports... + Done - filter[0]: - Destination Port: 0x0020 mask: 1 - protocol: 0x06 mask:1 tcp_flags: 0x02 - priority: 3 queue: 3 + testpmd> port detach 0 + Detaching a port... + PMD: Closing pcap ethdev on numa socket 0 + Port 'eth_pcap0' is detached. Now total ports is 0 + Done -add_5tuple_filter -~~~~~~~~~~~~~~~~~ +To remove a pci device completely from the system, first detach the port from testpmd. +Then the device should be moved under kernel management. +Finally the device can be removed using kernel pci hotplug functionality. -Add a 5-tuple filter, -which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) -and routes packets into one of the receive queues. +For example, to move a pci device under kernel management: -add_5tuple_filter (port_id) dst_ip (dst_address) src_ip (src_address) dst_port (dst_port_value) src_port (src_port_value) -protocol (protocol_value) mask (mask_value) flags (flags_value) priority (prio_value) queue (queue_id) index (idx) +.. code-block:: console -The available information parameters are: + sudo ./tools/dpdk_nic_bind.py -b ixgbe 0000:0a:00.0 -* port_id: the port which the 5-tuple filter assigned on. + ./tools/dpdk_nic_bind.py --status -* dst_address: destination IP address. + Network devices using DPDK-compatible driver + ============================================ + -* src_address: source IP address. + Network devices using kernel driver + =================================== + 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio -* dst_port_value: TCP/UDP destination port. +To remove a port created by a virtual device, above steps are not needed. -* src_port_value: TCP/UDP source port. +port start +~~~~~~~~~~ -* protocol_value: L4 protocol. +Start all ports or a specific port:: -* mask_value: participates in the match or not by bit for field above, 1b means participate + testpmd> port start (port_id|all) -* flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). +port stop +~~~~~~~~~ -* prio_value: the priority of this filter. +Stop all ports or a specific port:: -* queue_id: The receive queue associated with this 5-tuple filter. + testpmd> port stop (port_id|all) -* index: the index of this 5-tuple filter +port close +~~~~~~~~~~ -Example: +Close all ports or a specific port:: -.. code-block:: console + testpmd> port close (port_id|all) - testpmd> add_5tuple_filter 1 dst_ip 2.2.2.5 src_ip 2.2.2.4 dst_port 64 src_port 32 protocol 0x06 mask 0x1F flags 0x0 priority 3 queue 3 index 0 +port start/stop queue +~~~~~~~~~~~~~~~~~~~~~ -remove_5tuple_filter -~~~~~~~~~~~~~~~~~~~~ +Start/stop a rx/tx queue on a specific port:: -Remove a 5-tuple filter + testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop) -remove_5tuple_filter (port_id) index (idx) +Only take effect when port is started. -get_5tuple_filter -~~~~~~~~~~~~~~~~~ +port config - speed +~~~~~~~~~~~~~~~~~~~ -Get and display a 5-tuple filter +Set the speed and duplex mode for all ports or a specific port:: -get_5tuple_filter (port_id) index (idx) + testpmd> port config (port_id|all) speed (10|100|1000|10000|auto) \ + duplex (half|full|auto) -Example: +port config - queues/descriptors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. code-block:: console +Set number of queues/descriptors for rxq, txq, rxd and txd:: - testpmd> get_5tuple_filter 1 index 0 + testpmd> port config all (rxq|txq|rxd|txd) (value) - filter[0]: - Destination IP: 0x02020205 mask: 1 - Source IP: 0x02020204 mask: 1 - Destination Port: 0x0040 mask: 1 - Source Port: 0x0020 mask: 1 - protocol: 0x06 mask: 1 - priority: 3 flags: 0x00 queue: 3 +This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options. -add_syn_filter -~~~~~~~~~~~~~~ +port config - max-pkt-len +~~~~~~~~~~~~~~~~~~~~~~~~~ -Add SYN filter, which can forward TCP packets whose *SYN* flag is set into a separate queue. +Set the maximum packet length:: -add_syn_filter (port_id) priority (high|low) queue (queue_id) + testpmd> port config all max-pkt-len (value) -The available information parameters are: +This is equivalent to the ``--max-pkt-len`` command-line option. -* port_id: the port which the SYN filter assigned on. +port config - CRC Strip +~~~~~~~~~~~~~~~~~~~~~~~ -* high: this SYN filter has higher priority than other filters. +Set hardware CRC stripping on or off for all ports:: -* low: this SYN filter has lower priority than other filters. + testpmd> port config all crc-strip (on|off) -* queue_id: The receive queue associated with this SYN filter +CRC stripping is off by default. -Example: +The ``on`` option is equivalent to the ``--crc-strip`` command-line option. -.. code-block:: console +port config - RX Checksum +~~~~~~~~~~~~~~~~~~~~~~~~~ - testpmd> add_syn_filter 0 priority high queue 3, +Set hardware RX checksum offload to on or off for all ports:: -remove_syn_filter -~~~~~~~~~~~~~~~~~ + testpmd> port config all rx-cksum (on|off) -Remove SYN filter +Checksum offload is off by default. -remove_syn_filter (port_id) +The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option. -get_syn_filter -~~~~~~~~~~~~~~ +port config - VLAN +~~~~~~~~~~~~~~~~~~ -Get and display SYN filter +Set hardware VLAN on or off for all ports:: -get_syn_filter (port_id) + testpmd> port config all hw-vlan (on|off) -Example: +Hardware VLAN is on by default. -.. code-block:: console +The ``off`` option is equivalent to the ``--disable-hw-vlan`` command-line option. - testpmd> get_syn_filter 0 +port config - VLAN filter +~~~~~~~~~~~~~~~~~~~~~~~~~ - syn filter: on, priority: high, queue: 3 +Set hardware VLAN filter on or off for all ports:: -add_flex_filter -~~~~~~~~~~~~~~~ + testpmd> port config all hw-vlan-filter (on|off) -Add a Flex filter, -which recognizes any arbitrary pattern within the first 128 bytes of the packet -and routes packets into one of the receive queues. +Hardware VLAN filter is on by default. -add_flex_filter (port_id) len (len_value) bytes (bytes_string) mask (mask_value) -priority (prio_value) queue (queue_id) index (idx) +The ``off`` option is equivalent to the ``--disable-hw-vlan-filter`` command-line option. -The available information parameters are: +port config - VLAN strip +~~~~~~~~~~~~~~~~~~~~~~~~ -* port_id: the port which the Flex filter assigned on. +Set hardware VLAN strip on or off for all ports:: -* len_value: filter length in byte, no greater than 128. + testpmd> port config all hw-vlan-strip (on|off) -* bytes_string: a sting in format of octal, means the value the flex filter need to match. +Hardware VLAN strip is on by default. -* mask_value: a sting in format of octal, bit 1 means corresponding byte in DWORD participates in the match. +The ``off`` option is equivalent to the ``--disable-hw-vlan-strip`` command-line option. -* prio_value: the priority of this filter. +port config - VLAN extend +~~~~~~~~~~~~~~~~~~~~~~~~~ -* queue_id: The receive queue associated with this Flex filter. +Set hardware VLAN extend on or off for all ports:: -* index: the index of this Flex filter + testpmd> port config all hw-vlan-extend (on|off) -Example: +Hardware VLAN extend is off by default. -.. code-block:: console +The ``off`` option is equivalent to the ``--disable-hw-vlan-extend`` command-line option. - testpmd> add_flex_filter 0 len 16 bytes 0x00000000000000000000000008060000 mask 000C priority 3 queue 3 index 0 +port config - Drop Packets +~~~~~~~~~~~~~~~~~~~~~~~~~~ -Assign a packet whose 13th and 14th bytes are 0x0806 to queue 3. +Set packet drop for packets with no descriptors on or off for all ports:: -remove_flex_filter -~~~~~~~~~~~~~~~~~~ + testpmd> port config all drop-en (on|off) -Remove a Flex filter +Packet dropping for packets with no descriptors is off by default. -remove_flex_filter (port_id) index (idx) +The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option. -get_flex_filter -~~~~~~~~~~~~~~~ +port config - RSS +~~~~~~~~~~~~~~~~~ -Get and display a Flex filter +Set the RSS (Receive Side Scaling) mode on or off:: -get_flex_filter (port_id) index (idx) + testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|none) -Example: +RSS is on by default. -.. code-block:: console +The ``none`` option is equivalent to the ``--disable-rss`` command-line option. - testpmd> get_flex_filter 0 index 0 +port config - RSS Reta +~~~~~~~~~~~~~~~~~~~~~~ - filter[0]: +Set the RSS (Receive Side Scaling) redirection table:: - length: 16 + testpmd> port config all rss reta (hash,queue)[,(hash,queue)] - dword[]: 0x00000000 00000000 00000000 08060000 00000000 00000000 00000000 - 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - 00000000 00000000 00000000 00000000 00000000 00000000 00000000 +port config - DCB +~~~~~~~~~~~~~~~~~ - mask[]: - 0b0000000000001100000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000 +Set the DCB mode for an individual port:: - priority: 3 queue: 3 + testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) -set link up -~~~~~~~~~~~ +The traffic class should be 4 or 8. -Set link up for a port. +port config - Burst +~~~~~~~~~~~~~~~~~~~ -set link-up port (port id) +Set the number of packets per burst:: -set link down -~~~~~~~~~~~~~ + testpmd> port config all burst (value) -Set link down for a port. +This is equivalent to the ``--burst`` command-line option. -set link-down port (port id) +port config - Threshold +~~~~~~~~~~~~~~~~~~~~~~~ -Port Functions --------------- +Set thresholds for TX/RX queues:: -The following sections show functions for configuring ports. + testpmd> port config all (threshold) (value) -.. note:: +Where the threshold type can be: - Port configuration changes only become active when forwarding is started/restarted. +* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255. -port start -~~~~~~~~~~ +* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255. -Start all ports or a specific port: +* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255. -port start (port_id|all) +* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255. -port stop -~~~~~~~~~ +* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255. -Stop all ports or a specific port: +* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255. -port stop (port_id|all) +* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd. -port close -~~~~~~~~~~ +* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd. -Close all ports or a specific port: +* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. -port close (port_id|all) +These threshold options are also available from the command-line. -port start/stop queue -~~~~~~~~~~~~~~~~~~~~~ -Start/stop a rx/tx queue on a specific port: +Link Bonding Functions +---------------------- -port (port_id) (rxq|txq) (queue_id) (start|stop) +The Link Bonding functions make it possible to dynamically create and +manage link bonding devices from within testpmd interactive prompt. -Only take effect when port is started. +create bonded device +~~~~~~~~~~~~~~~~~~~~ -port config - speed -~~~~~~~~~~~~~~~~~~~ +Create a new bonding device:: -Set the speed and duplex mode for all ports or a specific port: + testpmd> create bonded device (mode) (socket) -port config (port_id|all) speed (10|100|1000|10000|auto) duplex (half|full|auto) +For example, to create a bonded device in mode 1 on socket 0:: -port config - queues/descriptors -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + testpmd> create bonded 1 0 + created new bonded device (port X) -Set number of queues/descriptors for rxq, txq, rxd and txd: +add bonding slave +~~~~~~~~~~~~~~~~~ -port config all (rxq|txq|rxd|txd) (value) +Adds Ethernet device to a Link Bonding device:: -This is equivalent to the --rxq, --txq, --rxd and --txd command-line options. + testpmd> add bonding slave (slave id) (port id) -port config - max-pkt-len -~~~~~~~~~~~~~~~~~~~~~~~~~ +For example, to add Ethernet device (port 6) to a Link Bonding device (port 10):: -Set the maximum packet length: + testpmd> add bonding slave 6 10 -port config all max-pkt-len (value) -This is equivalent to the --max-pkt-len command-line option. +remove bonding slave +~~~~~~~~~~~~~~~~~~~~ -port config - CRC Strip -~~~~~~~~~~~~~~~~~~~~~~~ +Removes an Ethernet slave device from a Link Bonding device:: -Set hardware CRC stripping on or off for all ports: + testpmd> remove bonding slave (slave id) (port id) -port config all crc-strip (on|off) +For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10):: -CRC stripping is off by default. + testpmd> remove bonding slave 6 10 -The on option is equivalent to the --crc-strip command-line option. +set bonding mode +~~~~~~~~~~~~~~~~ -port config - RX Checksum -~~~~~~~~~~~~~~~~~~~~~~~~~ +Set the Link Bonding mode of a Link Bonding device:: -Set hardware RX checksum offload to on or off for all ports: + testpmd> set bonding mode (value) (port id) -port config all rx-cksum (on|off) +For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3):: -Checksum offload is off by default. + testpmd> set bonding mode 3 10 -The on option is equivalent to the --enable-rx-cksum command-line option. +set bonding primary +~~~~~~~~~~~~~~~~~~~ -port config - VLAN -~~~~~~~~~~~~~~~~~~ +Set an Ethernet slave device as the primary device on a Link Bonding device:: -Set hardware VLAN on or off for all ports: + testpmd> set bonding primary (slave id) (port id) -port config all hw-vlan (on|off) +For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10):: -Hardware VLAN is on by default. + testpmd> set bonding primary 6 10 -The off option is equivalent to the --disable-hw-vlan command-line option. +set bonding mac +~~~~~~~~~~~~~~~ -port config - Drop Packets -~~~~~~~~~~~~~~~~~~~~~~~~~~ +Set the MAC address of a Link Bonding device:: -Set packet drop for packets with no descriptors on or off for all ports: + testpmd> set bonding mac (port id) (mac) -port config all drop-en (on|off) +For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01:: -Packet dropping for packets with no descriptors is off by default. + testpmd> set bonding mac 10 00:00:00:00:00:01 -The on option is equivalent to the --enable-drop-en command-line option. +set bonding xmit_balance_policy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -port config - RSS -~~~~~~~~~~~~~~~~~ +Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:: -Set the RSS (Receive Side Scaling) mode on or off: + testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34) -port config all rss (ip|udp|none) +For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports):: -RSS is on by default. + testpmd> set bonding xmit_balance_policy 10 l34 -The off option is equivalent to the --disable-rss command-line option. -port config - RSS Reta +set bonding mon_period ~~~~~~~~~~~~~~~~~~~~~~ -Set the RSS (Receive Side Scaling) redirection table: +Set the link status monitoring polling period in milliseconds for a bonding device. -port config all rss reta (hash,queue)[,(hash,queue)] +This adds support for PMD slave devices which do not support link status interrupts. +When the mon_period is set to a value greater than 0 then all PMD's which do not support +link status ISR will be queried every polling interval to check if their link status has changed:: -port config - DCB -~~~~~~~~~~~~~~~~~ + testpmd> set bonding mon_period (port_id) (value) -Set the DCB mode for an individual port: +For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms:: -port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) + testpmd> set bonding mon_period 5 150 -The traffic class should be 4 or 8. -port config - Burst +show bonding config ~~~~~~~~~~~~~~~~~~~ -Set the number of packets per burst: +Show the current configuration of a Link Bonding device:: -port config all burst (value) + testpmd> show bonding config (port id) -This is equivalent to the --burst command-line option. - -port config - Threshold -~~~~~~~~~~~~~~~~~~~~~~~ - -Set thresholds for TX/RX queues: - -port config all (threshold) (value) - -Where the threshold type can be: - -* txpt: Set the prefetch threshold register of the TX rings, 0 <= value <= 255. - -* txht: Set the host threshold register of the TX rings, 0 <= value <= 255. +For example, +to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) +in balance mode with a transmission policy of layer 2+3:: -* txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255. + testpmd> show bonding config 9 + Bonding mode: 2 + Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 + Slaves (3): [1 3 4] + Active Slaves (3): [1 3 4] + Primary: [3] -* rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255. -* rxht: Set the host threshold register of the RX rings, 0 <= value <= 255. +Register Functions +------------------ -* rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255. +The Register Functions can be used to read from and write to registers on the network card referenced by a port number. +This is mainly useful for debugging purposes. +Reference should be made to the appropriate datasheet for the network card for details on the register addresses +and fields that can be accessed. -* txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd. +read reg +~~~~~~~~ -* rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd. +Display the value of a port register:: -* txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. - These threshold options are also available from the command-line. + testpmd> read reg (port_id) (address) -Flow Director Functions ------------------------ +For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller:: -The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. + testpmd> read reg 0 0xEE00 + port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) -Two types of filtering are supported which are referred to as Perfect Match and Signature filters: +read regfield +~~~~~~~~~~~~~ -* Perfect match filters. - The hardware checks a match between the masked fields of the received packets and the programmed filters. +Display a port register bit field:: -* Signature filters. - The hardware checks a match between a hash-based signature of the masked fields of the received packet. + testpmd> read regfield (port_id) (address) (bit_x) (bit_y) -The Flow Director filters can match the following fields in a packet: +For example, reading the lowest two bits from the register in the example above:: -* Source IP and destination IP addresses. + testpmd> read regfield 0 0xEE00 0 1 + port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) -* Source port and destination port numbers (for UDP and TCP packets). +read regbit +~~~~~~~~~~~ -* IPv4/IPv6 and UDP/ TCP/SCTP protocol match. +Display a single port register bit:: -* VLAN header. + testpmd> read regbit (port_id) (address) (bit_x) -* Flexible 2-byte tuple match anywhere in the first 64 bytes of the packet. +For example, reading the lowest bit from the register in the example above:: -The Flow Director can also mask out parts of all of these fields so that filters are only applied to certain fields -or parts of the fields. -For example it is possible to mask out sub-nets of IP addresses or to ignore VLAN headers. + testpmd> read regbit 0 0xEE00 0 + port 0 PCI register at offset 0xEE00: bit 0=1 -In the following sections, several common parameters are used in the Flow Director filters. -These are explained below: +write reg +~~~~~~~~~ -* src: A pair of source address values. The source IP, in IPv4 or IPv6 format, and the source port: +Set the value of a port register:: - src 192.168.0.1 1024 + testpmd> write reg (port_id) (address) (value) - src 2001:DB8:85A3:0:0:8A2E:370:7000 1024 +For example, to clear a register:: -* dst: A pair of destination address values. The destination IP, in IPv4 or IPv6 format, and the destination port. + testpmd> write reg 0 0xEE00 0x0 + port 0 PCI register at offset 0xEE00: 0x00000000 (0) -* flexbytes: A 2-byte tuple to be matched within the first 64 bytes of a packet. +write regfield +~~~~~~~~~~~~~~ -The offset where the match occurs is set by the --pkt-filter-flexbytes-offset command-line parameter -and is counted from the first byte of the destination Ethernet MAC address. -The default offset is 0xC bytes, which is the "Type" word in the MAC header. -Typically, the flexbyte value is set to 0x0800 to match the IPv4 MAC type or 0x86DD to match IPv6. -These values change when a VLAN tag is added. +Set bit field of a port register:: -* vlan: The VLAN header to match in the packet. + testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value) -* queue: The index of the RX queue to route matched packets to. +For example, writing to the register cleared in the example above:: -* soft: The 16-bit value in the MBUF flow director ID field for RX packets matching the filter. + testpmd> write regfield 0 0xEE00 0 1 2 + port 0 PCI register at offset 0xEE00: 0x00000002 (2) -add_signature_filter -~~~~~~~~~~~~~~~~~~~~ +write regbit +~~~~~~~~~~~~ -Add a signature filter: +Set single bit value of a port register:: -# Command is displayed on several lines for clarity. + testpmd> write regbit (port_id) (address) (bit_x) (value) -add_signature_filter (port_id) (ip|udp|tcp|sctp) +For example, to set the high bit in the register from the example above:: - src (src_ip_address) (src_port) + testpmd> write regbit 0 0xEE00 31 1 + port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) - dst (dst_ip_address) (dst_port) - flexbytes (flexbytes_values) +Filter Functions +---------------- - vlan (vlan_id) queue (queue_id) +This section details the available filter functions that are available. -upd_signature_filter +ethertype_filter ~~~~~~~~~~~~~~~~~~~~ -Update a signature filter: +Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue:: -# Command is displayed on several lines for clarity. + ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \ + ethertype (ether_type) (drop|fwd) queue (queue_id) -upd_signature_filter (port_id) (ip|udp|tcp|sctp) +The available information parameters are: - src (src_ip_address) (src_port) +* ``port_id``: The port which the Ethertype filter assigned on. - dst (dst_ip_address) (dst_port) +* ``mac_addr``: Compare destination mac address. - flexbytes (flexbytes_values) +* ``mac_ignr``: Ignore destination mac address match. - vlan (vlan_id) queue (queue_id) +* ``mac_address``: Destination mac address to match. -rm_signature_filter -~~~~~~~~~~~~~~~~~~~ +* ``ether_type``: The EtherType value want to match, + for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. -Remove a signature filter: +* ``queue_id``: The receive queue associated with this EtherType filter. + It is meaningless when deleting or dropping. -# Command is displayed on several lines for clarity. +Example, to add/remove an ethertype filter rule:: -rm_signature_filter (port_id) (ip|udp|tcp|sctp) + testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \ + ethertype 0x0806 fwd queue 3 - src (src_ip_address) (src_port) + testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \ + ethertype 0x0806 fwd queue 3 - dst (dst_ip_address) (dst_port) +2tuple_filter +~~~~~~~~~~~~~~~~~ - flexbytes (flexbytes_values) +Add or delete a 2-tuple filter, +which identifies packets by specific protocol and destination TCP/UDP port +and forwards packets into one of the receive queues:: - vlan (vlan_id) + 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \ + protocol (protocol_value) mask (mask_value) \ + tcp_flags (tcp_flags_value) priority (prio_value) \ + queue (queue_id) -add_perfect_filter -~~~~~~~~~~~~~~~~~~ +The available information parameters are: -Add a perfect filter: +* ``port_id``: The port which the 2-tuple filter assigned on. -# Command is displayed on several lines for clarity. +* ``dst_port_value``: Destination port in L4. -add_perfect_filter (port_id) (ip|udp|tcp|sctp) +* ``protocol_value``: IP L4 protocol. - src (src_ip_address) (src_port) +* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate. - dst (dst_ip_address) (dst_port) +* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). - flexbytes (flexbytes_values) +* ``prio_value``: Priority of this filter. - vlan (vlan_id) queue (queue_id) soft (soft_id) +* ``queue_id``: The receive queue associated with this 2-tuple filter. -upd_perfect_filter -~~~~~~~~~~~~~~~~~~ +Example, to add/remove an 2tuple filter rule:: -Update a perfect filter: + testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \ + tcp_flags 0x02 priority 3 queue 3 -# Command is displayed on several lines for clarity. + testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \ + tcp_flags 0x02 priority 3 queue 3 -upd_perfect_filter (port_id) (ip|udp|tcp|sctp) +5tuple_filter +~~~~~~~~~~~~~~~~~ - src (src_ip_address) (src_port) +Add or delete a 5-tuple filter, +which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) +and routes packets into one of the receive queues:: - dst (dst_ip_address) (dst_port) + 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \ + (src_address) dst_port (dst_port_value) \ + src_port (src_port_value) protocol (protocol_value) \ + mask (mask_value) tcp_flags (tcp_flags_value) \ + priority (prio_value) queue (queue_id) - flexbytes (flexbytes_values) +The available information parameters are: - vlan (vlan_id) queue (queue_id) +* ``port_id``: The port which the 5-tuple filter assigned on. -rm_perfect_filter -~~~~~~~~~~~~~~~~~ +* ``dst_address``: Destination IP address. -Remove a perfect filter: +* ``src_address``: Source IP address. -rm_perfect_filter (port_id) (ip|udp|tcp|sctp) +* ``dst_port_value``: TCP/UDP destination port. - src (src_ip_address) (src_port) +* ``src_port_value``: TCP/UDP source port. - dst (dst_ip_address) (dst_port) +* ``protocol_value``: L4 protocol. - flexbytes (flexbytes_values) +* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate - vlan (vlan_id) soft (soft_id) +* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). -set_masks_filter -~~~~~~~~~~~~~~~~ +* ``prio_value``: The priority of this filter. -Set IPv4 filter masks: +* ``queue_id``: The receive queue associated with this 5-tuple filter. -# Command is displayed on several lines for clarity. +Example, to add/remove an 5tuple filter rule:: -set_masks_filter (port_id) only_ip_flow (0|1) + testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \ + dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ + flags 0x0 priority 3 queue 3 - src_mask (ip_src_mask) (src_port_mask) + testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \ + dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ + flags 0x0 priority 3 queue 3 - dst_mask (ip_dst_mask) (dst_port_mask) +syn_filter +~~~~~~~~~~ - flexbytes (0|1) vlan_id (0|1) vlan_prio (0|1) +Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue:: -set_ipv6_masks_filter -~~~~~~~~~~~~~~~~~~~~~ + syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) -Set IPv6 filter masks: +The available information parameters are: -# Command is displayed on several lines for clarity. +* ``port_id``: The port which the SYN filter assigned on. -set_ipv6_masks_filter (port_id) only_ip_flow (0|1) +* ``high``: This SYN filter has higher priority than other filters. - src_mask (ip_src_mask) (src_port_mask) +* ``low``: This SYN filter has lower priority than other filters. - dst_mask (ip_dst_mask) (dst_port_mask) +* ``queue_id``: The receive queue associated with this SYN filter - flexbytes (0|1) vlan_id (0|1) vlan_prio (0|1) +Example:: - compare_dst (0|1) + testpmd> syn_filter 0 add priority high queue 3 -Link Bonding Functions ----------------------- +flex_filter +~~~~~~~~~~~ -The Link Bonding functions make it possible to dynamically create and -manage link bonding devices from within testpmd interactive prompt. +With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet +and routed into one of the receive queues:: -create bonded device -~~~~~~~~~~~~~~~~~~~~ + flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \ + mask (mask_value) priority (prio_value) queue (queue_id) -Create a new bonding device: +The available information parameters are: -create bonded device (mode) (socket) +* ``port_id``: The port which the Flex filter is assigned on. -For example, to create a bonded device in mode 1 on socket 0. +* ``len_value``: Filter length in bytes, no greater than 128. -.. code-block:: console +* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match. - testpmd> create bonded 1 0 - created new bonded device (port X) +* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match. -add bonding slave -~~~~~~~~~~~~~~~~~ +* ``prio_value``: The priority of this filter. -Adds Ethernet device to a Link Bonding device: +* ``queue_id``: The receive queue associated with this Flex filter. -add bonding slave (slave id) (port id) +Example:: -For example, to add Ethernet device (port 6) to a Link Bonding device (port 10). + testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \ + mask 000C priority 3 queue 3 -.. code-block:: console + testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \ + mask 000C priority 3 queue 3 - testpmd> add bonding slave 6 10 +.. _testpmd_flow_director: -remove bonding slave +flow_director_filter ~~~~~~~~~~~~~~~~~~~~ -Removes an Ethernet slave device from a Link Bonding device: - -remove bonding slave (slave id) (port id) - -For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10). +The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. -.. code-block:: console +Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and +Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter: - testpmd> remove bonding slave 6 10 +* Perfect match filters. + The hardware checks a match between the masked fields of the received packets and the programmed filters. + The masked fields are for IP flow. -set bonding mode -~~~~~~~~~~~~~~~~ +* Signature filters. + The hardware checks a match between a hash-based signature of the masked fields of the received packet. -Set the Link Bonding mode of a Link Bonding device: +* Perfect-mac-vlan match filters. + The hardware checks a match between the masked fields of the received packets and the programmed filters. + The masked fields are for MAC VLAN flow. -set bonding mode (value) (port id) +* Perfect-tunnel match filters. + The hardware checks a match between the masked fields of the received packets and the programmed filters. + The masked fields are for tunnel flow. -For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3). +The Flow Director filters can match the different fields for different type of packet: flow type, specific input set +per flow type and the flexible payload. -.. code-block:: console +The Flow Director can also mask out parts of all of these fields so that filters +are only applied to certain fields or parts of the fields. - testpmd> set bonding mode 3 10 +Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. -set bonding primary -~~~~~~~~~~~~~~~~~~~ +# Commands to add flow director filters of different flow types:: -Set an Ethernet slave device as the primary device on a Link Bonding device: + flow_director_filter (port_id) mode IP (add|del|update) \ + flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) + src (src_ip_address) dst (dst_ip_address) \ + vlan (vlan_value) flexbytes (flexbytes_value) \ + (drop|fwd) pf|vf(vf_id) queue (queue_id) \ + fd_id (fd_id_value) -set bonding primary (slave id) (port id) + flow_director_filter (port_id) mode IP (add|del|update) \ + flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \ + src (src_ip_address) (src_port) \ + dst (dst_ip_address) (dst_port) \ + vlan (vlan_value) flexbytes (flexbytes_value) \ + (drop|fwd) queue pf|vf(vf_id) (queue_id) \ + fd_id (fd_id_value) -For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10). + flow_director_filter (port_id) mode IP (add|del|update) \ + flow (ipv4-sctp|ipv6-sctp) \ + src (src_ip_address) (src_port) \ + dst (dst_ip_address) (dst_port) + tag (verification_tag) vlan (vlan_value) \ + flexbytes (flexbytes_value) (drop|fwd) \ + pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) -.. code-block:: console - - testpmd> set bonding primary 6 10 - -set bonding mac -~~~~~~~~~~~~~~~ + flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \ + ether (ethertype) flexbytes (flexbytes_value) \ + (drop|fwd) pf|vf(vf_id) queue (queue_id) + fd_id (fd_id_value) -Set the MAC address of a Link Bonding device: + flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \ + mac (mac_address) vlan (vlan_value) \ + flexbytes (flexbytes_value) (drop|fwd) \ + queue (queue_id) fd_id (fd_id_value) -set bonding mac (port id) (mac) + flow_director_filter (port_id) mode Tunnel (add|del|update) \ + mac (mac_address) vlan (vlan_value) \ + tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \ + flexbytes (flexbytes_value) (drop|fwd) \ + queue (queue_id) fd_id (fd_id_value) -For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01 +For example, to add an ipv4-udp flow type filter:: -.. code-block:: console + testpmd> flow_director_filter 0 add flow ipv4-udp src 2.2.2.3 32 \ + dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 - testpmd> set bonding mac 10 00:00:00:00:00:01 +For example, add an ipv4-other flow type filter:: -set bonding xmit_balance_policy -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + testpmd> flow_director_filter 0 add flow ipv4-other src 2.2.2.3 \ + dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 -Set the transmission policy for a Link Bonding device when it is in Balance XOR mode: +flush_flow_director +~~~~~~~~~~~~~~~~~~~ -set bonding xmit_balance_policy (port_id) (l2|l23|l34) +Flush all flow director filters on a device:: -For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports ) + testpmd> flush_flow_director (port_id) -.. code-block:: console +Example, to flush all flow director filter on port 0:: - testpmd> set bonding xmit_balance_policy 10 l34 + testpmd> flush_flow_director 0 +flow_director_mask +~~~~~~~~~~~~~~~~~~ -set bonding mon_period -~~~~~~~~~~~~~~~~~~~~~~ +Set flow director's input masks:: -Set the link status monitoring polling period in milliseconds for a bonding devicie. + flow_director_mask (port_id) mode IP vlan (vlan_value) \ + src_mask (ipv4_src) (ipv6_src) (src_port) \ + dst_mask (ipv4_dst) (ipv6_dst) (dst_port) -This adds support for PMD slave devices which do not support link status interrupts. -When the mon_period is set to a value greater than 0 then all PMD's which do not support -link status ISR will be queried every polling interval to check if their link status has changed. + flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) \ + mac (mac_value) -set bonding mon_period (port_id) (value) + flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \ + mac (mac_value) tunnel-type (tunnel_type_value) \ + tunnel-id (tunnel_id_value) -For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms +Example, to set flow director mask on port 0:: -.. code-block:: console + testpmd> flow_director_mask 0 vlan 0xefff \ + src_mask 255.255.255.255 \ + FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \ + dst_mask 255.255.255.255 \ + FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF - testpmd> set bonding mon_period 5 150 +flow_director_flex_mask +~~~~~~~~~~~~~~~~~~~~~~~ +set masks of flow director's flexible payload based on certain flow type:: -show bonding config -~~~~~~~~~~~~~~~~~~~ + testpmd> flow_director_flex_mask (port_id) \ + flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ + ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \ + l2_payload|all) (mask) -Show the current configuration of a Link Bonding device: +Example, to set flow director's flex mask for all flow type on port 0:: -show bonding config (port id) + testpmd> flow_director_flex_mask 0 flow all \ + (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -For example, -to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) -in balance mode with a transmission policy of layer 2+3. -.. code-block:: console +flow_director_flex_payload +~~~~~~~~~~~~~~~~~~~~~~~~~~ - testpmd> show bonding config 9 - Bonding mode: 2 - Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 - Slaves (3): [1 3 4] - Active Slaves (3): [1 3 4] - Primary: [3] +Configure flexible payload selection:: -Register Functions ------------------- + flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) -The Register functions can be used to read from and write to registers on the network card referenced by a port number. -This is mainly useful for debugging purposes. -Reference should be made to the appropriate datasheet for the network card for details on the register addresses -and fields that can be accessed. +For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload:: -read reg -~~~~~~~~ + testpmd> flow_director_flex_payload 0 l4 \ + (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) -Display the value of a port register: +get_sym_hash_ena_per_port +~~~~~~~~~~~~~~~~~~~~~~~~~ -read reg (port_id) (address) +Get symmetric hash enable configuration per port:: -For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel® 82599 10 GbE Controller: + get_sym_hash_ena_per_port (port_id) -.. code-block:: console +For example, to get symmetric hash enable configuration of port 1:: - testpmd> read reg 0 0xEE00 - port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) + testpmd> get_sym_hash_ena_per_port 1 -read regfield -~~~~~~~~~~~~~ +set_sym_hash_ena_per_port +~~~~~~~~~~~~~~~~~~~~~~~~~ -Display a port register bit field: +Set symmetric hash enable configuration per port to enable or disable:: -read regfield (port_id) (address) (bit_x) (bit_y) + set_sym_hash_ena_per_port (port_id) (enable|disable) -For example, reading the lowest two bits from the register in the example above: +For example, to set symmetric hash enable configuration of port 1 to enable:: -.. code-block:: console + testpmd> set_sym_hash_ena_per_port 1 enable - testpmd> read regfield 0 0xEE00 0 1 - port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) +get_hash_global_config +~~~~~~~~~~~~~~~~~~~~~~ -read regbit -~~~~~~~~~~~ +Get the global configurations of hash filters:: -Display a single port register bit: + get_hash_global_config (port_id) -read regbit (port_id) (address) (bit_x) +For example, to get the global configurations of hash filters of port 1:: -For example, reading the lowest bit from the register in the example above: + testpmd> get_hash_global_config 1 -.. code-block:: console +set_hash_global_config +~~~~~~~~~~~~~~~~~~~~~~ - testpmd> read regbit 0 0xEE00 0 - port 0 PCI register at offset 0xEE00: bit 0=1 +Set the global configurations of hash filters:: -write reg -~~~~~~~~~ + set_hash_global_config (port_id) (toeplitz|simple_xor|default) \ + (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \ + ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \ + (enable|disable) -Set the value of a port register: +For example, to enable simple_xor for flow type of ipv6 on port 2:: -write reg (port_id) (address) (value) + testpmd> set_hash_global_config 2 simple_xor ipv6 enable -For example, to clear a register: +set_hash_input_set +~~~~~~~~~~~~~~~~~~ -.. code-block:: console +Set the input set for hash:: - testpmd> write reg 0 0xEE00 0x0 - port 0 PCI register at offset 0xEE00: 0x00000000 (0) + set_hash_input_set (port_id) (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ + ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ + l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \ + ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \ + tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \ + udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \ + fld-8th|none) (select|add) -write regfield -~~~~~~~~~~~~~~ +For example, to add source IP to hash input set for flow type of ipv4 on port 0:: -Set bit field of a port register: + testpmd> set_hash_input_set 0 ipv4 src-ipv4 add -write regfield (port_id) (address) (bit_x) (bit_y) (value) +set_fdir_input_set +~~~~~~~~~~~~~~~~~~ -For example, writing to the register cleared in the example above: +Set the input set for Fdir:: -.. code-block:: console + set_fdir_input_set (port_id) (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ + ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) + (src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|udp-src-port|udp-dst-port| \ + tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \ + fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th|fld-8th|none) \ + (select|add) - testpmd> write regfield 0 0xEE00 0 1 2 - port 0 PCI register at offset 0xEE00: 0x00000002 (2) +For example to add source IP to FD input set for flow type of ipv4 on port 0:: -write regbit -~~~~~~~~~~~~ + testpmd> set_fdir_input_set 0 ipv4 src-ipv4 add -Set single bit value of a port register: +global_config +~~~~~~~~~~~~~ -write regbit (port_id) (address) (bit_x) (value) +Set different GRE key length for input set:: -For example, to set the high bit in the register from the example above: + global_config (port_id) gre-key-len (number in bytes) -.. code-block:: console +For example to set GRE key length for input set to 4 bytes on port 0:: - testpmd> write regbit 0 0xEE00 31 1 - port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) + testpmd> global_config 0 gre-key-len 4