app/testpmd: new commands for ntuple filter
[dpdk.git] / doc / guides / testpmd_app_ug / testpmd_funcs.rst
index 65d3168..afe1970 100644 (file)
@@ -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.
@@ -162,10 +161,12 @@ 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:
 
@@ -969,192 +970,6 @@ Where the threshold type can be:
 *   txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
     These threshold options are also available from the command-line.
 
-Flow Director Functions
------------------------
-
-The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
-
-Two types of filtering are supported which are referred to as Perfect Match and Signature filters:
-
-*   Perfect match filters.
-    The hardware checks a match between the masked fields of the received packets and the programmed filters.
-
-*   Signature filters.
-    The hardware checks a match between a hash-based signature of the masked fields of the received packet.
-
-The Flow Director filters can match the following fields in a packet:
-
-*   Source IP and destination IP addresses.
-
-*   Source port and destination port numbers (for UDP and TCP packets).
-
-*   IPv4/IPv6 and UDP/ TCP/SCTP protocol match.
-
-*   VLAN header.
-
-*   Flexible 2-byte tuple match anywhere in the first 64 bytes of the packet.
-
-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.
-
-In the following sections, several common parameters are used in the Flow Director filters.
-These are explained below:
-
-*   src: A pair of source address values. The source IP, in IPv4 or IPv6 format, and the source port:
-
-    src 192.168.0.1 1024
-
-    src 2001:DB8:85A3:0:0:8A2E:370:7000 1024
-
-*   dst: A pair of destination address values. The destination IP, in IPv4 or IPv6 format, and the destination port.
-
-*   flexbytes: A 2-byte tuple to be matched within the first 64 bytes of a packet.
-
-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.
-
-*   vlan: The VLAN header to match in the packet.
-
-*   queue: The index of the RX queue to route matched packets to.
-
-*   soft: The 16-bit value in the MBUF flow director ID field for RX packets matching the filter.
-
-add_signature_filter
-~~~~~~~~~~~~~~~~~~~~
-
-Add a signature filter:
-
-# Command is displayed on several lines for clarity.
-
-add_signature_filter (port_id) (ip|udp|tcp|sctp)
-
-    src (src_ip_address) (src_port)
-
-    dst (dst_ip_address) (dst_port)
-
-    flexbytes (flexbytes_values)
-
-    vlan (vlan_id) queue (queue_id)
-
-upd_signature_filter
-~~~~~~~~~~~~~~~~~~~~
-
-Update a signature filter:
-
-# Command is displayed on several lines for clarity.
-
-upd_signature_filter (port_id) (ip|udp|tcp|sctp)
-
-    src (src_ip_address) (src_port)
-
-    dst (dst_ip_address) (dst_port)
-
-    flexbytes (flexbytes_values)
-
-    vlan (vlan_id) queue (queue_id)
-
-rm_signature_filter
-~~~~~~~~~~~~~~~~~~~
-
-Remove a signature filter:
-
-# Command is displayed on several lines for clarity.
-
-rm_signature_filter (port_id) (ip|udp|tcp|sctp)
-
-    src (src_ip_address) (src_port)
-
-    dst (dst_ip_address) (dst_port)
-
-    flexbytes (flexbytes_values)
-
-    vlan (vlan_id)
-
-add_perfect_filter
-~~~~~~~~~~~~~~~~~~
-
-Add a perfect filter:
-
-# Command is displayed on several lines for clarity.
-
-add_perfect_filter (port_id) (ip|udp|tcp|sctp)
-
-    src (src_ip_address) (src_port)
-
-    dst (dst_ip_address) (dst_port)
-
-    flexbytes (flexbytes_values)
-
-    vlan (vlan_id) queue (queue_id) soft (soft_id)
-
-upd_perfect_filter
-~~~~~~~~~~~~~~~~~~
-
-Update a perfect filter:
-
-# Command is displayed on several lines for clarity.
-
-upd_perfect_filter (port_id) (ip|udp|tcp|sctp)
-
-    src (src_ip_address) (src_port)
-
-    dst (dst_ip_address) (dst_port)
-
-    flexbytes (flexbytes_values)
-
-    vlan (vlan_id) queue (queue_id)
-
-rm_perfect_filter
-~~~~~~~~~~~~~~~~~
-
-Remove a perfect filter:
-
-rm_perfect_filter (port_id) (ip|udp|tcp|sctp)
-
-    src (src_ip_address) (src_port)
-
-    dst (dst_ip_address) (dst_port)
-
-    flexbytes (flexbytes_values)
-
-    vlan (vlan_id) soft (soft_id)
-
-set_masks_filter
-~~~~~~~~~~~~~~~~
-
-Set IPv4 filter masks:
-
-# Command is displayed on several lines for clarity.
-
-set_masks_filter (port_id) only_ip_flow (0|1)
-
-    src_mask (ip_src_mask) (src_port_mask)
-
-    dst_mask (ip_dst_mask) (dst_port_mask)
-
-    flexbytes (0|1) vlan_id (0|1) vlan_prio (0|1)
-
-set_ipv6_masks_filter
-~~~~~~~~~~~~~~~~~~~~~
-
-Set IPv6 filter masks:
-
-# Command is displayed on several lines for clarity.
-
-set_ipv6_masks_filter (port_id) only_ip_flow (0|1)
-
-    src_mask (ip_src_mask) (src_port_mask)
-
-    dst_mask (ip_dst_mask) (dst_port_mask)
-
-    flexbytes (0|1) vlan_id (0|1) vlan_prio (0|1)
-
-    compare_dst (0|1)
-
 Link Bonding Functions
 ----------------------
 
@@ -1390,132 +1205,77 @@ Filter Functions
 
 This section details the available filter functions that are available.
 
-add_ethertype_filter
+ethertype_filter
 ~~~~~~~~~~~~~~~~~~~~
 
-Add a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue.
+Add or delete 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)
+ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) ethertype (ether_type) (drop|fwd) queue (queue_id)
 
 The available information parameters are:
 
 *   port_id:  the port which the Ethertype filter assigned on.
 
-*   eth_value: the EtherType value want to match,
-    for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
-
-*   enable: user priority participates in the match.
-
-*   disable: user priority doesn't participate in the match.
-
-*   pri_value: user priority value that want to match.
-
-*   queue_id : The receive queue associated with this EtherType filter
-
-*   index: the index of this EtherType filter
-
-Example:
-
-.. code-block:: console
-
-    testpmd> add_ethertype_filter 0 ethertype 0x0806 priority disable 0 queue 3 index 0
-    Assign ARP packet to receive queue 3
-
-remove_ethertype_filter
-~~~~~~~~~~~~~~~~~~~~~~~
+*   mac_addr: compare destination mac address.
 
-Remove a L2 Ethertype filter
+*   mac_ignr: ignore destination mac address match.
 
-remove_ethertype_filter (port_id) index (idx)
+*   mac_address: destination mac address to match.
 
-get_ethertype_filter
-~~~~~~~~~~~~~~~~~~~~
-
-Get and display a L2 Ethertype filter
+*   ether_type: the EtherType value want to match,
+    for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
 
-get_ethertype_filter (port_id) index (idx)
+*   queue_id : The receive queue associated with this EtherType filter. It is meaningless when deleting or dropping.
 
-Example:
+Example, to add/remove an ethertype filter rule:
 
 .. code-block:: console
 
-    testpmd> get_ethertype_filter 0 index 0
-
-    filter[0]:
-        ethertype: 0x0806
-        priority: disable, 0
-        queue: 3
+    testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3
+    testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3
 
-add_2tuple_filter
+2tuple_filter
 ~~~~~~~~~~~~~~~~~
 
-Add a 2-tuple filter,
+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.
 
-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)
+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)
 
 The available information parameters are:
 
 *   port_id: the port which the 2-tuple filter assigned on.
 
-*   pro_value: IP L4 protocol
-
-*   pro_mask: protocol participates in the match or not, 1 means participate
+*   dst_port_value: destination port in L4.
 
-*   port_value: destination port in L4.
+*   protocol_value: IP L4 protocol.
 
-*   port_mask: destination port participates in the match or not, 1 means participate.
+*   mask_value: participates in the match or not by bit for field above, 1b means participate.
 
-*   flg_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
+*   tcp_flags_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
 
-*   prio_value: the priority of this filter.
-
-*   queue_id: The receive queue associated with this 2-tuple filter
-
-*   index: the index of this 2-tuple filter
-
-Example:
-
-.. code-block:: console
-
-    testpmd> add_2tuple_filter 0 protocol 0x06 1 dst_port 32 1 flags 0x02 priority 3 queue 3 index 0
-
-remove_2tuple_filter
-~~~~~~~~~~~~~~~~~~~~
-
-Remove a 2-tuple filter
-
-remove_2tuple_filter (port_id) index (idx)
+*   prio_value: priority of this filter.
 
-get_2tuple_filter
-~~~~~~~~~~~~~~~~~
-
-Get and display a 2-tuple filter
-
-get_2tuple_filter (port_id) index (idx)
+*   queue_id: The receive queue associated with this 2-tuple filter.
 
-Example:
+Example, to add/remove an 2tuple filter rule:
 
 .. code-block:: console
 
-    testpmd> get_2tuple_filter 0 index 0
-
-    filter[0]:
-        Destination Port: 0x0020 mask: 1
-        protocol: 0x06 mask:1 tcp_flags: 0x02
-        priority: 3   queue: 3
+    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
 
-add_5tuple_filter
+5tuple_filter
 ~~~~~~~~~~~~~~~~~
 
-Add a 5-tuple filter,
+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.
 
-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)
+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)
 
 The available information parameters are:
 
@@ -1533,158 +1293,171 @@ The available information parameters are:
 
 *   mask_value: participates in the match or not by bit for field above, 1b means participate
 
-*   flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
+*   tcp_flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
 
 *   prio_value: the priority of this filter.
 
 *   queue_id: The receive queue associated with this 5-tuple filter.
 
-*   index: the index of this 5-tuple filter
-
-Example:
+Example, to add/remove an 5tuple filter rule:
 
 .. code-block:: console
 
-    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
+    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
 
-remove_5tuple_filter
-~~~~~~~~~~~~~~~~~~~~
+syn_filter
+~~~~~~~~~~~~~~
 
-Remove a 5-tuple filter
+By SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue.
 
-remove_5tuple_filter (port_id) index (idx)
+syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
 
-get_5tuple_filter
-~~~~~~~~~~~~~~~~~
+The available information parameters are:
 
-Get and display a 5-tuple filter
+*   port_id: the port which the SYN filter assigned on.
 
-get_5tuple_filter (port_id) index (idx)
+*   high: this SYN filter has higher priority than other filters.
+
+*   low: this SYN filter has lower priority than other filters.
+
+*   queue_id: The receive queue associated with this SYN filter
 
 Example:
 
 .. code-block:: console
 
-    testpmd> get_5tuple_filter 1 index 0
-
-    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
+    testpmd> syn_filter 0 add priority high queue 3
 
-add_syn_filter
-~~~~~~~~~~~~~~
+flex_filter
+~~~~~~~~~~~
 
-Add SYN filter, which can forward TCP packets whose *SYN* flag is set into a separate queue.
+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.
 
-add_syn_filter (port_id) priority (high|low) queue (queue_id)
+flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value)
+mask (mask_value) priority (prio_value) queue (queue_id)
 
 The available information parameters are:
 
-*   port_id: the port which the SYN filter assigned on.
+*   port_id: the port which the Flex filter is assigned on.
 
-*   high: this SYN filter has higher priority than other filters.
+*   len_value: filter length in bytes, no greater than 128.
 
-*   low: this SYN filter has lower priority than other filters.
+*   bytes_value: a string in hexadecimal, means the value the flex filter needs to match.
 
-*   queue_id: The receive queue associated with this SYN filter
+*   mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match.
+
+*   prio_value: the priority of this filter.
+
+*   queue_id: the receive queue associated with this Flex filter.
 
 Example:
 
 .. code-block:: console
 
-    testpmd> add_syn_filter 0 priority high queue 3,
+   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000
+        mask 000C priority 3 queue 3
 
-remove_syn_filter
-~~~~~~~~~~~~~~~~~
+   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000
+        mask 000C priority 3 queue 3
 
-Remove SYN filter
+flow_director_filter
+~~~~~~~~~~~~~~~~~~~~
 
-remove_syn_filter (port_id)
+The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
 
-get_syn_filter
-~~~~~~~~~~~~~~
+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:
 
-Get and display SYN filter
+*   Perfect match filters.
+    The hardware checks a match between the masked fields of the received packets and the programmed filters.
 
-get_syn_filter (port_id)
+*   Signature filters.
+    The hardware checks a match between a hash-based signature of the masked fields of the received packet.
 
-Example:
+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.
 
-.. code-block:: console
+Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
 
-    testpmd> get_syn_filter 0
+# Commands to add flow director filters of different flow types.
 
-    syn filter: on, priority: high, queue: 3
+flow_director_filter (port_id) (add|del|update) flow (ip4|ip4-frag|ip6|ip6-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)
 
-add_flex_filter
-~~~~~~~~~~~~~~~
+flow_director_filter (port_id) (add|del|update) flow (udp4|tcp4|udp6|tcp6)
+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)
 
-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.
+flow_director_filter (port_id) (add|del|update) flow (sctp4|sctp6)
+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)
 
-add_flex_filter (port_id) len (len_value) bytes (bytes_string) mask (mask_value)
-priority (prio_value) queue (queue_id) index (idx)
+For example, to add an udp flow type filter:
 
-The available information parameters are:
+.. code-block:: console
 
-*   port_id: the port which the Flex filter assigned on.
+    testpmd> flow_director_filter 0 add flow udp4 src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1
 
-*   len_value: filter length in byte, no greater than 128.
+For example, add an ip4 flow type filter:
 
-*   bytes_string: a sting in format of octal, means the value the flex filter need to match.
+.. code-block:: console
 
-*   mask_value: a sting in format of octal, bit 1 means corresponding byte in DWORD participates in the match.
+    testpmd> flow_director_filter 0 add flow ip4 src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1
 
-*   prio_value: the priority of this filter.
+flush_flow_director
+~~~~~~~~~~~~~~~~~~~
 
-*   queue_id: The receive queue associated with this Flex filter.
+flush all flow director filters on a device:
 
-*   index: the index of this Flex filter
+flush_flow_director (port_id)
 
-Example:
+Example, to flush all flow director filter on port 0:
 
 .. code-block:: console
 
-   testpmd> add_flex_filter 0 len 16 bytes 0x00000000000000000000000008060000 mask 000C priority 3 queue 3 index 0
-
-Assign a packet whose 13th and 14th bytes are 0x0806 to queue 3.
+   testpmd> flush_flow_director 0
 
-remove_flex_filter
+flow_director_mask
 ~~~~~~~~~~~~~~~~~~
 
-Remove a Flex filter
+set flow director's masks on match input set
 
-remove_flex_filter (port_id) index (idx)
+flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
 
-get_flex_filter
-~~~~~~~~~~~~~~~
+Example, to set flow director mask on port 0:
 
-Get and display a Flex filter
+.. code-block:: console
 
-get_flex_filter (port_id) index (idx)
+   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
 
-Example:
+
+flow_director_flex_mask
+~~~~~~~~~~~~~~~~~~~~~~~
+
+set masks of flow director's flexible payload based on certain flow type:
+
+flow_director_flex_mask (port_id) flow (raw|ip4|ip4-frag|tcp4|udp4|sctp4|ip6|ip6-frag|tcp6|udp6|sctp6|all) (mask)
+
+Example, to set flow director's udpv4 flex mask on port 0:
 
 .. code-block:: console
 
-    testpmd> get_flex_filter 0 index 0
+   testpmd> flow_director_flex_mask 0 flow all (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
+
 
-    filter[0]:
+flow_director_flex_payload
+~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-        length: 16
+Configure flexible payload selection.
 
-        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
+flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
 
-        mask[]:
-    0b0000000000001100000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000
+For example, to select the first 16 bytes from the offset 4 (bytes) of packet’s payload as flexible payload.
+
+.. code-block:: console
 
-        priority: 3   queue: 3
+   testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)