app/testpmd: add flow director for L2 payload
[dpdk.git] / doc / guides / testpmd_app_ug / testpmd_funcs.rst
old mode 100755 (executable)
new mode 100644 (file)
index c0d0033..1d040cb
@@ -71,7 +71,6 @@ These are divided into sections and can be accessed using help, help section or
         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.
@@ -103,7 +102,7 @@ stop
 quit
 ~~~~
 
-Quit to prompt in Linux or reboot on Baremetal:
+Quit to prompt:
 
 quit
 
@@ -139,24 +138,51 @@ For example:
     ********************* 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: 10000 Mbps
+    Link speed: 40000 Mbps
     Link duplex: full-duplex
     Promiscuous mode: enabled
     Allmulticast mode: disabled
-    Maximum number of MAC addresses: 127
+    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:
+
+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
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+show port (port_id) rss-hash [key]
+
+clear port
+~~~~~~~~~~
 
 Clear the port statistics for a given port or for all ports:
 
@@ -413,6 +439,8 @@ rx_vlan add (vlan_id|all) (port_id)
 .. note::
 
     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
 ~~~~~~~~~~
@@ -435,38 +463,64 @@ Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port I
 
 rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
 
-tx_rate (for Queue)
-~~~~~~~~~~~~~~~~~~~
+rx_vlan set tpid
+~~~~~~~~~~~~~~~~
 
-Set TX rate limitation for queue of a port ID:
+Set the outer VLAN TPID for packet filtering on a port:
 
-set port (port_id) queue (queue_id) rate (rate_value)
+rx_vlan set tpid (value) (port_id)
 
-tx_rate (for VF)
-~~~~~~~~~~~~~~~~
+tunnel_filter add
+~~~~~~~~~~~~~~~~~
 
-Set TX rate limitation for queues in VF of a port ID:
+Add a tunnel filter on a port:
 
-set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
+tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan)
+ (tunnel_type) (filter_type) (tenant_id) (queue_id)
 
-rx_vlan set tpid
-~~~~~~~~~~~~~~~~
+tunnel_filter remove
+~~~~~~~~~~~~~~~~~~~~
 
-Set the outer VLAN TPID for packet filtering on a port:
+Remove a tunnel filter on a port:
 
-rx_vlan set tpid (value) (port_id)
+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:
+
+rx_vxlan_port add (udp_port) (port_id)
+
+rx_vxlan_port remove
+~~~~~~~~~~~~~~~~~~~~
+
+Remove an UDP port for VXLAN packet filter on a port:
+
+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:
+
+tx_vlan set (port_id) vlan_id[, vlan_id_outer]
+
+.. code-block:: console
+
+    Set a single VLAN ID (5) insertion on port 0.
+
+    tx_vlan set 0 5
+
+    Set double VLAN ID (inner: 2, outer: 3) insertion on port 1.
 
-tx_vlan set (vlan_id) (port_id)
+    tx_vlan set 1 2 3
 
 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)
 
@@ -477,27 +531,78 @@ Disable hardware insertion of a VLAN header in packets sent on a port:
 
 tx_vlan reset (port_id)
 
-tx_checksum set mask
-~~~~~~~~~~~~~~~~~~~~
+csum set
+~~~~~~~~
+
+Select hardware or software calculation of the checksum when
+transmitting a packet using the csum forward engine:
+
+csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)
 
-Enable hardware insertion of checksum offload with a 4-bit mask, 0x0 - 0xF, in packets sent on a port:
+- ip|udp|tcp|sctp always concern the inner layer.
 
-tx_checksum set (mask) (port_id)
+- outer-ip concerns the outer IP layer in case the packet is recognized
+  as a tunnel packet by the forward engine (vxlan, gre and ipip are
+  supported). See "csum parse-tunnel" command.
 
-The bits in the mask are:
+.. note::
+
+    Check the NIC Datasheet for hardware limits.
+
+csum parse-tunnel
+~~~~~~~~~~~~~~~~~
 
-bit 0 - if set insert ip checksum offload
+Define how tunneled packets should be handled by the csum forward
+engine.
 
-bit 1 - if set insert udp checksum offload
+csum parse-tunnel (on|off) (tx_port_id)
 
-bit 2 - if set insert tcp checksum offload
+If enabled, the csum forward engine will try to recognize supported
+tunnel headers (vxlan, gre, ipip).
 
-bit 3 - if set insert sctp checksum offload
+If disabled, treat tunnel packets as non-tunneled packets (a inner
+header is handled as a packet payload).
 
 .. note::
 
-    Check the NIC Datasheet for hardware limits.
+   The port argument is the TX port like in the "csum set" command.
+
+Example:
+
+Consider a packet as following:
+"eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in"
+
+- If parse-tunnel is enabled, the ip|udp|tcp|sctp parameters of "csum
+  set" command are about inner headers (here ipv4_in and tcp_in), and the
+  outer-ip parameter is about outer headers (here ipv4_out).
+
+- If parse-tunnel is disabled, the ip|udp|tcp|sctp parameters of "csum
+  set" command are about outer headers, here ipv4_out and udp_out.
+
+csum show
+~~~~~~~~~
+
+Display tx checksum offload configuration:
+
+csum show (port_id)
+
+tso set
+~~~~~~~
+
+Enable TCP Segmentation Offload in csum forward engine:
+
+tso set (segsize) (port_id)
+
+.. note::
+
+   Check the NIC datasheet for hardware limits
+
+tso show
+~~~~~~~~
 
+Display the status of TCP Segmentation Offload:
+
+tso show (port_id)
 
 set fwd
 ~~~~~~~
@@ -635,6 +740,14 @@ Set VF receive/transmit from a port:
 
 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:
+
+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)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -652,12 +765,30 @@ The available receive modes are:
 
 *  MPE: accepts all multicast packets
 
+set port - tx_rate (for Queue)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Set TX rate limitation for queue of a port ID:
+
+set port (port_id) queue (queue_id) rate (rate_value)
+
+set port - tx_rate (for VF)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+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)
+
 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-up|pool-mirror-down|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
+
+Set link 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)
+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:
 
@@ -718,875 +849,828 @@ Show the bypass configuration for a bypass enabled NIC using the lowest port on
 
 show bypass config (port_id)
 
-add_ethertype_filter
-~~~~~~~~~~~~~~~~~~~~
-
-Add a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue.
-
-add_ethertype_filter (port_id) ethertype (eth_value) priority (enable|disable) (pri_value) queue (queue_id) index (idx)
-
-The available information parameters are:
+set link up
+~~~~~~~~~~~
 
-*   port_id:  the port which the Ethertype filter assigned on.
+Set link up for a port.
 
-*   eth_value: the EtherType value want to match,
-    for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
+set link-up port (port id)
 
-*   enable: user priority participates in the match.
+set link down
+~~~~~~~~~~~~~
 
-*   disable: user priority doesn't participate in the match.
+Set link down for a port.
 
-*   pri_value: user priority value that want to match.
+set link-down port (port id)
 
-*   queue_id : The receive queue associated with this EtherType filter
+Port Functions
+--------------
 
-*   index: the index of this EtherType filter
+The following sections show functions for configuring ports.
 
-Example:
+.. note::
 
-.. code-block:: console
+    Port configuration changes only become active when forwarding is started/restarted.
 
-    testpmd> add_ethertype_filter 0 ethertype 0x0806 priority disable 0 queue 3 index 0
-    Assign ARP packet to receive queue 3
+port attach
+~~~~~~~~~~~
 
-remove_ethertype_filter
-~~~~~~~~~~~~~~~~~~~~~~~
+Attach a port specified by pci address or virtual device args.
 
-Remove a L2 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.
+On the other hand, to attach a port created by virtual device, above steps are not needed.
 
-remove_ethertype_filter (port_id) index (idx)
+port attach (identifier)
 
-get_ethertype_filter
-~~~~~~~~~~~~~~~~~~~~
+For example, to attach a port whose pci address is 0000:02:00.0.
 
-Get and display a L2 Ethertype filter
+.. code-block:: console
 
-get_ethertype_filter (port_id) index (idx)
+    testpmd> port attach 0000:02:00.0
+    Attaching a new port...
+    ... snip ...
+    Port 0 is attached. Now total ports is 1
+    Done
 
-Example:
+For example, to attach a port created by pcap PMD.
 
 .. code-block:: console
 
-    testpmd> get_ethertype_filter 0 index 0
+    testpmd> port attach eth_pcap0,iface=eth0
+    Attaching a new port...
+    ... snip ...
+    Port 0 is attached. Now total ports is 1
+    Done
 
-    filter[0]:
-        ethertype: 0x0806
-        priority: disable, 0
-        queue: 3
+In this case, identifier is "eth_pcap0,iface=eth0".
+This identifier format is the same as "--vdev" format of DPDK applications.
 
-add_2tuple_filter
-~~~~~~~~~~~~~~~~~
+port detach
+~~~~~~~~~~~
 
-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.
+Detach a specific port.
 
-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)
+Before detaching a port, the port should be closed.
+Also 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.
+On the other hand, to remove a port created by a virtual device, above steps are not needed.
 
-The available information parameters are:
+port detach (port_id)
 
-*   port_id: the port which the 2-tuple filter assigned on.
+For example, to detach a port 0.
 
-*   pro_value: IP L4 protocol
+.. code-block:: console
 
-*   pro_mask: protocol participates in the match or not, 1 means participate
+    testpmd> port detach 0
+    Detaching a port...
+    ... snip ...
+    Done
 
-*   port_value: destination port in L4.
+port start
+~~~~~~~~~~
 
-*   port_mask: destination port participates in the match or not, 1 means participate.
+Start all ports or a specific port:
 
-*   flg_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
+port start (port_id|all)
 
-*   prio_value: the priority of this filter.
+port stop
+~~~~~~~~~
 
-*   queue_id: The receive queue associated with this 2-tuple filter
+Stop all ports or a specific port:
 
-*   index: the index of this 2-tuple filter
+port stop (port_id|all)
 
-Example:
+port close
+~~~~~~~~~~
 
-.. code-block:: console
+Close all ports or a specific port:
 
-    testpmd> add_2tuple_filter 0 protocol 0x06 1 dst_port 32 1 flags 0x02 priority 3 queue 3 index 0
+port close (port_id|all)
 
-remove_2tuple_filter
-~~~~~~~~~~~~~~~~~~~~
+port start/stop queue
+~~~~~~~~~~~~~~~~~~~~~
 
-Remove a 2-tuple filter
+Start/stop a rx/tx queue on a specific port:
 
-remove_2tuple_filter (port_id) index (idx)
+port (port_id) (rxq|txq) (queue_id) (start|stop)
 
-get_2tuple_filter
-~~~~~~~~~~~~~~~~~
+Only take effect when port is started.
 
-Get and display a 2-tuple filter
+port config - speed
+~~~~~~~~~~~~~~~~~~~
 
-get_2tuple_filter (port_id) index (idx)
+Set the speed and duplex mode for all ports or a specific port:
 
-Example:
+port config (port_id|all) speed (10|100|1000|10000|auto) duplex (half|full|auto)
 
-.. code-block:: console
+port config - queues/descriptors
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    testpmd> get_2tuple_filter 0 index 0
+Set number of queues/descriptors for rxq, txq, rxd and txd:
 
-    filter[0]:
-        Destination Port: 0x0020 mask: 1
-        protocol: 0x06 mask:1 tcp_flags: 0x02
-        priority: 3   queue: 3
+port config all (rxq|txq|rxd|txd) (value)
 
-add_5tuple_filter
-~~~~~~~~~~~~~~~~~
+This is equivalent to the --rxq, --txq, --rxd and --txd command-line options.
 
-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.
+port config - max-pkt-len
+~~~~~~~~~~~~~~~~~~~~~~~~~
 
-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)
+Set the maximum packet length:
 
-The available information parameters are:
+port config all max-pkt-len (value)
 
-*   port_id: the port which the 5-tuple filter assigned on.
+This is equivalent to the --max-pkt-len command-line option.
 
-*   dst_address: destination IP address.
+port config - CRC Strip
+~~~~~~~~~~~~~~~~~~~~~~~
 
-*   src_address: source IP address.
+Set hardware CRC stripping on or off for all ports:
 
-*   dst_port_value: TCP/UDP destination port.
+port config all crc-strip (on|off)
 
-*   src_port_value: TCP/UDP source port.
+CRC stripping is off by default.
 
-*   protocol_value: L4 protocol.
+The on option is equivalent to the --crc-strip command-line option.
 
-*   mask_value: participates in the match or not by bit for field above, 1b means participate
+port config - RX Checksum
+~~~~~~~~~~~~~~~~~~~~~~~~~
 
-*   flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
+Set hardware RX checksum offload to on or off for all ports:
 
-*   prio_value: the priority of this filter.
+port config all rx-cksum (on|off)
 
-*   queue_id: The receive queue associated with this 5-tuple filter.
+Checksum offload is off by default.
 
-*   index: the index of this 5-tuple filter
+The on option is equivalent to the --enable-rx-cksum command-line option.
 
-Example:
+port config - VLAN
+~~~~~~~~~~~~~~~~~~
 
-.. code-block:: console
+Set hardware VLAN on or off for all ports:
 
-    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 config all hw-vlan (on|off)
 
-remove_5tuple_filter
-~~~~~~~~~~~~~~~~~~~~
+Hardware VLAN is on by default.
 
-Remove a 5-tuple filter
+The off option is equivalent to the --disable-hw-vlan command-line option.
 
-remove_5tuple_filter (port_id) index (idx)
+port config - VLAN filter
+~~~~~~~~~~~~~~~~~~~~~~~~~
 
-get_5tuple_filter
-~~~~~~~~~~~~~~~~~
+Set hardware VLAN filter on or off for all ports:
 
-Get and display a 5-tuple filter
+port config all hw-vlan-filter (on|off)
 
-get_5tuple_filter (port_id) index (idx)
+Hardware VLAN filter is on by default.
 
-Example:
+The off option is equivalent to the --disable-hw-vlan-filter command-line option.
 
-.. code-block:: console
+port config - VLAN strip
+~~~~~~~~~~~~~~~~~~~~~~~~
 
-    testpmd> get_5tuple_filter 1 index 0
+Set hardware VLAN strip on or off for all ports:
 
-    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
+port config all hw-vlan-strip (on|off)
 
-add_syn_filter
-~~~~~~~~~~~~~~
+Hardware VLAN strip is on by default.
 
-Add SYN filter, which can forward TCP packets whose *SYN* flag is set into a separate queue.
+The off option is equivalent to the --disable-hw-vlan-strip command-line option.
 
-add_syn_filter (port_id) priority (high|low) queue (queue_id)
+port config - VLAN extend
+~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The available information parameters are:
+Set hardware VLAN extend on or off for all ports:
 
-*   port_id: the port which the SYN filter assigned on.
+port config all hw-vlan-extend (on|off)
 
-*   high: this SYN filter has higher priority than other filters.
+Hardware VLAN extend is off by default.
 
-*   low: this SYN filter has lower priority than other filters.
+The off option is equivalent to the --disable-hw-vlan-extend command-line option.
 
-*   queue_id: The receive queue associated with this SYN filter
+port config - Drop Packets
+~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Example:
+Set packet drop for packets with no descriptors on or off for all ports:
 
-.. code-block:: console
+port config all drop-en (on|off)
 
-    testpmd> add_syn_filter 0 priority high queue 3,
+Packet dropping for packets with no descriptors is off by default.
+
+The on option is equivalent to the --enable-drop-en command-line option.
 
-remove_syn_filter
+port config - RSS
 ~~~~~~~~~~~~~~~~~
 
-Remove SYN filter
+Set the RSS (Receive Side Scaling) mode on or off:
 
-remove_syn_filter (port_id)
+port config all rss (all|ip|tcp|udp|sctp|ether|none)
 
-get_syn_filter
-~~~~~~~~~~~~~~
+RSS is on by default.
 
-Get and display SYN filter
+The off option is equivalent to the --disable-rss command-line option.
 
-get_syn_filter (port_id)
+port config - RSS Reta
+~~~~~~~~~~~~~~~~~~~~~~
 
-Example:
+Set the RSS (Receive Side Scaling) redirection table:
 
-.. code-block:: console
+port config all rss reta (hash,queue)[,(hash,queue)]
 
-    testpmd> get_syn_filter 0
+port config - DCB
+~~~~~~~~~~~~~~~~~
 
-    syn filter: on, priority: high, queue: 3
+Set the DCB mode for an individual port:
 
-add_flex_filter
-~~~~~~~~~~~~~~~
+port config (port_id) dcb vt (on|off) (traffic_class) pfc (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.
+The traffic class should be 4 or 8.
 
-add_flex_filter (port_id) len (len_value) bytes (bytes_string) mask (mask_value)
-priority (prio_value) queue (queue_id) index (idx)
+port config - Burst
+~~~~~~~~~~~~~~~~~~~
 
-The available information parameters are:
+Set the number of packets per burst:
 
-*   port_id: the port which the Flex filter assigned on.
+port config all burst (value)
 
-*   len_value: filter length in byte, no greater than 128.
+This is equivalent to the --burst command-line option.
 
-*   bytes_string: a sting in format of octal, means the value the flex filter need to match.
+port config - Threshold
+~~~~~~~~~~~~~~~~~~~~~~~
 
-*   mask_value: a sting in format of octal, bit 1 means corresponding byte in DWORD participates in the match.
+Set thresholds for TX/RX queues:
 
-*   prio_value: the priority of this filter.
+port config all (threshold) (value)
 
-*   queue_id: The receive queue associated with this Flex filter.
+Where the threshold type can be:
 
-*   index: the index of this Flex filter
+*   txpt: Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
 
-Example:
+*   txht: Set the host threshold register of the TX rings, 0 <= value <= 255.
 
-.. code-block:: console
+*   txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255.
 
-   testpmd> add_flex_filter 0 len 16 bytes 0x00000000000000000000000008060000 mask 000C priority 3 queue 3 index 0
+*   rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
 
-Assign a packet whose 13th and 14th bytes are 0x0806 to queue 3.
+*   rxht: Set the host threshold register of the RX rings, 0 <= value <= 255.
 
-remove_flex_filter
-~~~~~~~~~~~~~~~~~~
+*   rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255.
 
-Remove a Flex filter
+*   txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd.
 
-remove_flex_filter (port_id) index (idx)
+*   rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
 
-get_flex_filter
-~~~~~~~~~~~~~~~
+*   txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
+    These threshold options are also available from the command-line.
 
-Get and display a Flex filter
+Link Bonding Functions
+----------------------
 
-get_flex_filter (port_id) index (idx)
+The Link Bonding functions make it possible to dynamically create and
+manage link bonding devices from within testpmd interactive prompt.
 
-Example:
+create bonded device
+~~~~~~~~~~~~~~~~~~~~
 
-.. code-block:: console
+Create a new bonding device:
 
-    testpmd> get_flex_filter 0 index 0
-
-    filter[0]:
-
-        length: 16
+create bonded device (mode) (socket)
 
-        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
+For example, to create a bonded device in mode 1 on socket 0.
 
-        mask[]:
-    0b0000000000001100000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000
+.. code-block:: console
 
-        priority: 3   queue: 3
+    testpmd> create bonded 1 0
+    created new bonded device (port X)
 
-set link up
-~~~~~~~~~~~
+add bonding slave
+~~~~~~~~~~~~~~~~~
 
-Set link up for a port.
+Adds Ethernet device to a Link Bonding device:
 
-set link-up port (port id)
+add bonding slave (slave id) (port id)
 
-set link down
-~~~~~~~~~~~~~
+For example, to add Ethernet device (port 6) to a Link Bonding device (port 10).
 
-Set link down for a port.
+.. code-block:: console
 
-set link-down port (port id)
+    testpmd> add bonding slave 6 10
 
-Port Functions
---------------
 
-The following sections show functions for configuring ports.
+remove bonding slave
+~~~~~~~~~~~~~~~~~~~~
 
-.. note::
+Removes an Ethernet slave device from a Link Bonding device:
 
-    Port configuration changes only become active when forwarding is started/restarted.
+remove bonding slave (slave id) (port id)
 
-port start
-~~~~~~~~~~
+For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10).
 
-Start all ports or a specific port:
+.. code-block:: console
 
-port start (port_id|all)
+    testpmd> remove bonding slave 6 10
 
-port stop
-~~~~~~~~~
+set bonding mode
+~~~~~~~~~~~~~~~~
 
-Stop all ports or a specific port:
+Set the Link Bonding mode of a Link Bonding device:
 
-port stop (port_id|all)
+set bonding mode (value) (port id)
 
-port close
-~~~~~~~~~~
+For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3).
 
-Close all ports or a specific port:
+.. code-block:: console
 
-port close (port_id|all)
+    testpmd> set bonding mode 3 10
 
-port config - speed
+set bonding primary
 ~~~~~~~~~~~~~~~~~~~
 
-Set the speed and duplex mode for all ports or a specific port:
-
-port config (port_id|all) speed (10|100|1000|10000|auto) duplex (half|full|auto)
-
-port config - queues/descriptors
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Set number of queues/descriptors for rxq, txq, rxd and txd:
-
-port config all (rxq|txq|rxd|txd) (value)
-
-This is equivalent to the --rxq, --txq, --rxd and --txd command-line options.
-
-port config - max-pkt-len
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Set the maximum packet length:
-
-port config all max-pkt-len (value)
-
-This is equivalent to the --max-pkt-len command-line option.
-
-port config - CRC Strip
-~~~~~~~~~~~~~~~~~~~~~~~
-
-Set hardware CRC stripping on or off for all ports:
-
-port config all crc-strip (on|off)
-
-CRC stripping is off by default.
-
-The on option is equivalent to the --crc-strip command-line option.
-
-port config - RX Checksum
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Set hardware RX checksum offload to on or off for all ports:
-
-port config all rx-cksum (on|off)
+Set an Ethernet slave device as the primary device on a Link Bonding device:
 
-Checksum offload is off by default.
+set bonding primary (slave id) (port id)
 
-The on option is equivalent to the --enable-rx-cksum command-line option.
+For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10).
 
-port config - VLAN
-~~~~~~~~~~~~~~~~~~
+.. code-block:: console
 
-Set hardware VLAN on or off for all ports:
+    testpmd> set bonding primary 6 10
 
-port config all hw-vlan (on|off)
+set bonding mac
+~~~~~~~~~~~~~~~
 
-Hardware VLAN is on by default.
+Set the MAC address of a Link Bonding device:
 
-The off option is equivalent to the --disable-hw-vlan command-line option.
+set bonding mac (port id) (mac)
 
-port config - Drop Packets
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01
 
-Set packet drop for packets with no descriptors on or off for all ports:
+.. code-block:: console
 
-port config all drop-en (on|off)
+    testpmd> set bonding mac 10 00:00:00:00:00:01
 
-Packet dropping for packets with no descriptors is off by default.
+set bonding xmit_balance_policy
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The on option is equivalent to the --enable-drop-en command-line option.
+Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:
 
-port config - RSS
-~~~~~~~~~~~~~~~~~
+set bonding xmit_balance_policy (port_id) (l2|l23|l34)
 
-Set the RSS (Receive Side Scaling) mode on or off:
+For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports )
 
-port config all rss (ip|udp|none)
+.. code-block:: console
 
-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
-~~~~~~~~~~~~~~~~~
+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)
+.. code-block:: console
 
-The traffic class should be 4 or 8.
+    testpmd> set bonding mon_period 5 150
 
-port config - Burst
-~~~~~~~~~~~~~~~~~~~
 
-Set the number of packets per burst:
+show bonding config
+~~~~~~~~~~~~~~~~~~~
 
-port config all burst (value)
+Show the current configuration of a Link Bonding device:
 
-This is equivalent to the --burst command-line option.
+show bonding config (port id)
 
-port config - Threshold
-~~~~~~~~~~~~~~~~~~~~~~~
+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.
 
-Set thresholds for TX/RX queues:
+.. code-block:: console
 
-port config all (threshold) (value)
+    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]
 
-Where the threshold type can be:
+Register Functions
+------------------
 
-*   txpt: Set the prefetch threshold register of the TX 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.
 
-*   txht: Set the host threshold register of the TX rings, 0 <= value <= 255.
+read reg
+~~~~~~~~
 
-*   txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255.
+Display the value of a port register:
 
-*   rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
+read reg (port_id) (address)
 
-*   rxht: Set the host threshold register of the RX rings, 0 <= value <= 255.
+For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an IntelĀ® 82599 10 GbE Controller:
 
-*   rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255.
+.. code-block:: console
 
-*   txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd.
+    testpmd> read reg 0 0xEE00
+    port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
 
-*   rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
+read regfield
+~~~~~~~~~~~~~
 
-*   txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
-    These threshold options are also available from the command-line.
+Display a port register bit field:
 
-Flow Director Functions
------------------------
+read regfield (port_id) (address) (bit_x) (bit_y)
 
-The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
+For example, reading the lowest two bits from the register in the example above:
 
-Two types of filtering are supported which are referred to as Perfect Match and Signature filters:
+.. code-block:: console
 
-*   Perfect match filters.
-    The hardware checks a match between the masked fields of the received packets and the programmed filters.
+    testpmd> read regfield 0 0xEE00 0 1
+    port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
 
-*   Signature filters.
-    The hardware checks a match between a hash-based signature of the masked fields of the received packet.
+read regbit
+~~~~~~~~~~~
 
-The Flow Director filters can match the following fields in a packet:
+Display a single port register bit:
 
-*   Source IP and destination IP addresses.
+read regbit (port_id) (address) (bit_x)
 
-*   Source port and destination port numbers (for UDP and TCP packets).
+For example, reading the lowest bit from the register in the example above:
 
-*   IPv4/IPv6 and UDP/ TCP/SCTP protocol match.
+.. code-block:: console
 
-*   VLAN header.
+    testpmd> read regbit 0 0xEE00 0
+    port 0 PCI register at offset 0xEE00: bit 0=1
 
-*   Flexible 2-byte tuple match anywhere in the first 64 bytes of the packet.
+write reg
+~~~~~~~~~
 
-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.
+Set the value of a port register:
 
-In the following sections, several common parameters are used in the Flow Director filters.
-These are explained below:
+write reg (port_id) (address) (value)
 
-*   src: A pair of source address values. The source IP, in IPv4 or IPv6 format, and the source port:
+For example, to clear a register:
 
-    src 192.168.0.1 1024
+.. code-block:: console
 
-    src 2001:DB8:85A3:0:0:8A2E:370:7000 1024
+    testpmd> write reg 0 0xEE00 0x0
+    port 0 PCI register at offset 0xEE00: 0x00000000 (0)
 
-*   dst: A pair of destination address values. The destination IP, in IPv4 or IPv6 format, and the destination port.
+write regfield
+~~~~~~~~~~~~~~
 
-*   flexbytes: A 2-byte tuple to be matched within the first 64 bytes of a packet.
+Set bit field of a port register:
 
-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.
+write regfield (port_id) (address) (bit_x) (bit_y) (value)
 
-*   vlan: The VLAN header to match in the packet.
+For example, writing to the register cleared in the example above:
 
-*   queue: The index of the RX queue to route matched packets to.
+.. code-block:: console
 
-*   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.
+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)
+.. code-block:: console
 
-    dst (dst_ip_address) (dst_port)
+    testpmd> write regbit 0 0xEE00 31 1
+    port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
 
-    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)
+.. code-block:: console
 
-    src (src_ip_address) (src_port)
+    testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3
+    testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3
 
-    dst (dst_ip_address) (dst_port)
+2tuple_filter
+~~~~~~~~~~~~~~~~~
 
-    flexbytes (flexbytes_values)
+Add or delete a 2-tuple filter,
+which identify 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:
+.. code-block:: console
 
-# Command is displayed on several lines for clarity.
+    testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3
+    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)
+.. code-block:: console
 
-    src_mask (ip_src_mask) (src_port_mask)
+    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
+    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)
+By 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)
+.. code-block:: console
 
-Link Bonding Functions
-----------------------
+    testpmd> syn_filter 0 add priority high queue 3
 
-The Link Bonding functions make it possible to dynamically create and
-manage link bonding devices from within testpmd interactive prompt.
+flex_filter
+~~~~~~~~~~~
 
-create bonded device
-~~~~~~~~~~~~~~~~~~~~
+With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
+and routes packets into one of the receive queues.
 
-Create a new bonding device:
+flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value)
+mask (mask_value) priority (prio_value) queue (queue_id)
 
-create bonded device (mode) (socket)
+The available information parameters are:
 
-For example, to create a bonded device in mode 1 on socket 0.
+*   port_id: the port which the Flex filter is assigned on.
 
-.. code-block:: console
+*   len_value: filter length in bytes, no greater than 128.
 
-    testpmd> create bonded 1 0
-    created new bonded device (port X)
+*   bytes_value: a string in hexadecimal, means the value the flex filter needs to match.
 
-add bonding slave
-~~~~~~~~~~~~~~~~~
+*   mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match.
 
-Adds Ethernet device to a Link Bonding device:
+*   prio_value: the priority of this filter.
 
-add bonding slave (slave id) (port id)
+*   queue_id: the receive queue associated with this Flex filter.
 
-For example, to add Ethernet device (port 6) to a Link Bonding device (port 10).
+Example:
 
 .. code-block:: console
 
-    testpmd> add bonding slave 6 10
+   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000
+        mask 000C priority 3 queue 3
 
+   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000
+        mask 000C priority 3 queue 3
 
-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).
-
-.. code-block:: console
+The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
 
-    testpmd> remove bonding slave 6 10
+Two types of filtering are supported which are referred to as Perfect Match and Signature filters, the match mode
+is set by the --pkt-filter-mode command-line parameter:
 
-set bonding mode
-~~~~~~~~~~~~~~~~
+*   Perfect match filters.
+    The hardware checks a match between the masked fields of the received packets and the programmed filters.
 
-Set the Link Bonding mode of a Link Bonding device:
+*   Signature filters.
+    The hardware checks a match between a hash-based signature of the masked fields of the received packet.
 
-set bonding mode (value) (port id)
+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. 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, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3).
+Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
 
-.. code-block:: console
+# Commands to add flow director filters of different flow types.
 
-    testpmd> set bonding mode 3 10
+flow_director_filter (port_id) (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) queue (queue_id) fd_id (fd_id_value)
 
-set bonding primary
-~~~~~~~~~~~~~~~~~~~
+flow_director_filter (port_id) (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 (queue_id) fd_id (fd_id_value)
 
-Set an Ethernet slave device as the primary device on a Link Bonding device:
+flow_director_filter (port_id) (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) queue (queue_id) fd_id (fd_id_value)
 
-set bonding primary (slave id) (port id)
+flow_director_filter (port_id) (add|del|update) flow l2_payload
+ether (ethertype) flexbytes (flexbytes_value) (drop|fwd) queue (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).
+For example, to add an ipv4-udp flow type filter:
 
 .. code-block:: console
 
-    testpmd> set bonding primary 6 10
+    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 queue 1 fd_id 1
 
-set bonding mac
-~~~~~~~~~~~~~~~
-
-Set the MAC address of a Link Bonding device:
-
-set bonding mac (port id) (mac)
-
-For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01
+For example, add an ipv4-other flow type filter:
 
 .. code-block:: console
 
-    testpmd> set bonding mac 10 00:00:00:00:00:01
+    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 queue 1 fd_id 1
 
-set bonding xmit_balance_policy
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+flush_flow_director
+~~~~~~~~~~~~~~~~~~~
 
-Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:
+flush all flow director filters on a device:
 
-set bonding xmit_balance_policy (port_id) (l2|l23|l34)
+flush_flow_director (port_id)
 
-For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports )
+Example, to flush all flow director filter on port 0:
 
 .. code-block:: console
 
-    testpmd> set bonding xmit_balance_policy 10 l34
+   testpmd> flush_flow_director 0
 
-show bonding config
-~~~~~~~~~~~~~~~~~~~
+flow_director_mask
+~~~~~~~~~~~~~~~~~~
 
-Show the current configuration of a Link Bonding device:
+set flow director's masks on match input set
 
-show bonding config (port id)
+flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
 
-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.
+Example, to set flow director mask on port 0:
 
 .. code-block:: console
 
-    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]
-
-Register Functions
-------------------
+   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
 
-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.
 
-read reg
-~~~~~~~~
+flow_director_flex_mask
+~~~~~~~~~~~~~~~~~~~~~~~
 
-Display the value of a port register:
+set masks of flow director's flexible payload based on certain flow type:
 
-read reg (port_id) (address)
+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)
 
-For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an IntelĀ® 82599 10 GbE Controller:
+Example, to set flow director's flex mask for all flow type on port 0:
 
 .. code-block:: console
 
-    testpmd> read reg 0 0xEE00
-    port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
+   testpmd> flow_director_flex_mask 0 flow all (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
 
-read regfield
-~~~~~~~~~~~~~
 
-Display a port register bit field:
+flow_director_flex_payload
+~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-read regfield (port_id) (address) (bit_x) (bit_y)
+Configure flexible payload selection.
 
-For example, reading the lowest two bits from the register in the example above:
+flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
+
+For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload.
 
 .. code-block:: console
 
-    testpmd> read regfield 0 0xEE00 0 1
-    port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
+   testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
 
-read regbit
-~~~~~~~~~~~
+get_sym_hash_ena_per_port
+~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Display a single port register bit:
+Get symmetric hash enable configuration per port.
 
-read regbit (port_id) (address) (bit_x)
+get_sym_hash_ena_per_port (port_id)
 
-For example, reading the lowest bit from the register in the example above:
+For example, to get symmetric hash enable configuration of port 1.
 
 .. code-block:: console
 
-    testpmd> read regbit 0 0xEE00 0
-    port 0 PCI register at offset 0xEE00: bit 0=1
+    testpmd> get_sym_hash_ena_per_port 1
 
-write reg
-~~~~~~~~~
+set_sym_hash_ena_per_port
+~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Set the value of a port register:
+Set symmetric hash enable configuration per port to enable or disable.
 
-write reg (port_id) (address) (value)
+set_sym_hash_ena_per_port (port_id) (enable|disable)
 
-For example, to clear a register:
+For example, to set symmetric hash enable configuration of port 1 to enable.
 
 .. code-block:: console
 
-    testpmd> write reg 0 0xEE00 0x0
-    port 0 PCI register at offset 0xEE00: 0x00000000 (0)
+    testpmd> set_sym_hash_ena_per_port 1 enable
 
-write regfield
-~~~~~~~~~~~~~~
+get_hash_global_config
+~~~~~~~~~~~~~~~~~~~~~~
 
-Set bit field of a port register:
+Get the global configurations of hash filters.
 
-write regfield (port_id) (address) (bit_x) (bit_y) (value)
+get_hash_global_config (port_id)
 
-For example, writing to the register cleared in the example above:
+For example, to get the global configurations of hash filters of port 1.
 
 .. code-block:: console
 
-    testpmd> write regfield 0 0xEE00 0 1 2
-    port 0 PCI register at offset 0xEE00: 0x00000002 (2)
+    testpmd> get_hash_global_config 1
 
-write regbit
-~~~~~~~~~~~~
+set_hash_global_config
+~~~~~~~~~~~~~~~~~~~~~~
 
-Set single bit value of a port register:
+Set the global configurations of hash filters.
 
-write regbit (port_id) (address) (bit_x) (value)
+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)
 
-For example, to set the high bit in the register from the example above:
+For example, to enable simple_xor for flow type of ipv6 on port 2.
 
 .. code-block:: console
 
-    testpmd> write regbit 0 0xEE00 31 1
-    port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
+    testpmd> set_hash_global_config 2 simple_xor ipv6 enable