X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Ftestpmd_app_ug%2Ftestpmd_funcs.rst;h=3f076c848395107225bdc5dbc63606ef486b7913;hb=1b20b07d86872475ecca28af1a00ad9ad45c4c07;hp=65d316850ca187ac4704945de152c001aab65d03;hpb=aa49f36628df975dd266f0ab0ab355a2e17f5a2b;p=dpdk.git diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 65d316850c..3f076c8483 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 @@ -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. @@ -139,16 +138,32 @@ 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 ~~~~~~~~~~~~~~~~~~ @@ -162,10 +177,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: @@ -422,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 ~~~~~~~~~~ @@ -484,14 +503,24 @@ 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) @@ -502,28 +531,60 @@ Disable hardware insertion of a VLAN header in packets sent on a port: 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) +csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id) -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) +- ip|udp|tcp|sctp always concern the inner layer. + +- outer-ip concerns the outer IP layer (only for IPv4) 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. .. note:: Check the NIC Datasheet for hardware limits. -tx_checksum show -~~~~~~~~~~~~~~~~ +csum parse-tunnel +~~~~~~~~~~~~~~~~~ + +Define how tunneled packets should be handled by the csum forward +engine. + +csum parse-tunnel (on|off) (tx_port_id) + +If enabled, the csum forward engine will try to recognize supported +tunnel headers (vxlan, gre, ipip). + +If disabled, treat tunnel packets as non-tunneled packets (a inner +header is handled as a packet payload). + +.. note:: + + 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: -tx_checksum show (port_id) +csum show (port_id) tso set ~~~~~~~ @@ -533,7 +594,8 @@ Enable TCP Segmentation Offload in csum forward engine: tso set (segsize) (port_id) .. note:: - Please check the NIC datasheet for HW limits + + Check the NIC datasheet for hardware limits tso show ~~~~~~~~ @@ -573,6 +635,8 @@ The available information categories are: * 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: @@ -720,9 +784,13 @@ 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: @@ -806,6 +874,144 @@ The following sections show functions for configuring ports. Port configuration changes only become active when forwarding is started/restarted. +port attach +~~~~~~~~~~~ + +Attach a port specified by pci address or virtual device args. + +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. + +For example, to move a pci device using ixgbe under DPDK management: + +.. code-block:: console + + ./tools/dpdk_nic_bind.py --status + + Network devices using DPDK-compatible driver + ============================================ + + + Network devices using kernel driver + =================================== + 0000:0a:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=eth2 drv=ixgbe unused= + + ./tools/dpdk_nic_bind.py -b igb_uio 0000:0a:00.0 + ./tools/dpdk_nic_bind.py --status + + Network devices using DPDK-compatible driver + ============================================ + 0000:0a:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused= + +To attach a port created by virtual device, above steps are not needed. + +port attach (identifier) + +For example, to attach a port whose pci address is 0000:0a:00.0. + +.. code-block:: console + + 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 + testpmd> + +For example, to attach a port created by pcap PMD. + +.. code-block:: console + + 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 + testpmd> + +In this case, identifier is "eth_pcap0". +This identifier format is the same as "--vdev" format of DPDK applications. + +For example, to re-attach a bonded port which has been previously detached, +the mode and slave parameters must be given. + +.. code-block:: console + + testpmd> port attach eth_bond_testpmd_0,mode=0,slave=1 + Attaching a new port... + EAL: Initializing pmd_bond for eth_bond_testpmd_0 + EAL: Create bonded device eth_bond_testpmd_0 on port 0 in mode 0 on socket 0. + Port 0 is attached. Now total ports is 1 + Done + + +port detach +~~~~~~~~~~~ + +Detach a specific port. + +Before detaching a port, the port should be closed. + +port detach (port_id) + +For example, to detach a pci device port 0. + +.. code-block:: console + + testpmd> port close 0 + Closing ports... + Done + 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 + testpmd> + +For example, to detach a virtual device port 0. + +.. code-block:: console + + testpmd> port close 0 + Closing ports... + Done + 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 + testpmd> + +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. + +For example, to move a pci device under kernel management: + +.. code-block:: console + + ./tools/dpdk_nic_bind.py -b ixgbe 0000:0a:00.0 + ./tools/dpdk_nic_bind.py --status + + Network devices using DPDK-compatible driver + ============================================ + + + Network devices using kernel driver + =================================== + 0000:0a:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=eth2 drv=ixgbe unused=igb_uio + +To remove a port created by a virtual device, above steps are not needed. + port start ~~~~~~~~~~ @@ -894,6 +1100,39 @@ Hardware VLAN is on by default. The off option is equivalent to the --disable-hw-vlan command-line option. +port config - VLAN filter +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set hardware VLAN filter on or off for all ports: + +port config all hw-vlan-filter (on|off) + +Hardware VLAN filter is on by default. + +The off option is equivalent to the --disable-hw-vlan-filter command-line option. + +port config - VLAN strip +~~~~~~~~~~~~~~~~~~~~~~~~ + +Set hardware VLAN strip on or off for all ports: + +port config all hw-vlan-strip (on|off) + +Hardware VLAN strip is on by default. + +The off option is equivalent to the --disable-hw-vlan-strip command-line option. + +port config - VLAN extend +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set hardware VLAN extend on or off for all ports: + +port config all hw-vlan-extend (on|off) + +Hardware VLAN extend is off by default. + +The off option is equivalent to the --disable-hw-vlan-extend command-line option. + port config - Drop Packets ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -910,7 +1149,7 @@ port config - RSS Set the RSS (Receive Side Scaling) mode on or off: -port config all rss (ip|udp|none) +port config all rss (all|ip|tcp|udp|sctp|ether|none) RSS is on by default. @@ -969,192 +1208,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 ---------------------- @@ -1258,7 +1311,7 @@ For example, set a Link Bonding device (port 10) to use a balance policy of laye set bonding mon_period ~~~~~~~~~~~~~~~~~~~~~~ -Set the link status monitoring polling period in milliseconds for a bonding devicie. +Set the link status monitoring polling period in milliseconds for a bonding device. 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 @@ -1390,301 +1443,317 @@ 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, +* mac_addr: compare destination mac address. + +* mac_ignr: ignore destination mac address match. + +* mac_address: destination mac address to match. + +* ether_type: 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. +* queue_id : The receive queue associated with this EtherType filter. It is meaningless when deleting or dropping. -* disable: user priority doesn't participate in the match. +Example, to add/remove an ethertype filter rule: -* pri_value: user priority value that want to match. +.. code-block:: console -* queue_id : The receive queue associated with this EtherType filter + testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3 + testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3 -* index: the index of this EtherType filter +2tuple_filter +~~~~~~~~~~~~~~~~~ -Example: +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. -.. code-block:: console +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) - testpmd> add_ethertype_filter 0 ethertype 0x0806 priority disable 0 queue 3 index 0 - Assign ARP packet to receive queue 3 +The available information parameters are: -remove_ethertype_filter -~~~~~~~~~~~~~~~~~~~~~~~ +* port_id: the port which the 2-tuple filter assigned on. -Remove a L2 Ethertype filter +* dst_port_value: destination port in L4. -remove_ethertype_filter (port_id) index (idx) +* protocol_value: IP L4 protocol. -get_ethertype_filter -~~~~~~~~~~~~~~~~~~~~ +* mask_value: participates in the match or not by bit for field above, 1b means participate. -Get and display a L2 Ethertype filter +* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). -get_ethertype_filter (port_id) index (idx) +* prio_value: priority of this filter. -Example: +* queue_id: The receive queue associated with this 2-tuple filter. -.. code-block:: console +Example, to add/remove an 2tuple filter rule: - testpmd> get_ethertype_filter 0 index 0 +.. code-block:: console - filter[0]: - ethertype: 0x0806 - priority: disable, 0 - 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_2tuple_filter +5tuple_filter ~~~~~~~~~~~~~~~~~ -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. +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_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) +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: -* port_id: the port which the 2-tuple filter assigned on. +* port_id: the port which the 5-tuple filter assigned on. -* pro_value: IP L4 protocol +* dst_address: destination IP address. -* pro_mask: protocol participates in the match or not, 1 means participate +* src_address: source IP address. -* port_value: destination port in L4. +* dst_port_value: TCP/UDP destination port. -* port_mask: destination port participates in the match or not, 1 means participate. +* src_port_value: TCP/UDP source port. -* flg_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). +* protocol_value: L4 protocol. -* prio_value: the priority of this filter. +* mask_value: participates in the match or not by bit for field above, 1b means participate -* queue_id: The receive queue associated with this 2-tuple filter +* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). -* index: the index of this 2-tuple filter +* prio_value: the priority of this filter. -Example: +* queue_id: The receive queue associated with this 5-tuple filter. + +Example, to add/remove an 5tuple filter rule: .. code-block:: console - testpmd> add_2tuple_filter 0 protocol 0x06 1 dst_port 32 1 flags 0x02 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_2tuple_filter -~~~~~~~~~~~~~~~~~~~~ +syn_filter +~~~~~~~~~~~~~~ -Remove a 2-tuple filter +By SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue. -remove_2tuple_filter (port_id) index (idx) +syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) -get_2tuple_filter -~~~~~~~~~~~~~~~~~ +The available information parameters are: -Get and display a 2-tuple filter +* port_id: the port which the SYN filter assigned on. + +* high: this SYN filter has higher priority than other filters. + +* low: this SYN filter has lower priority than other filters. -get_2tuple_filter (port_id) index (idx) +* queue_id: The receive queue associated with this SYN filter Example: .. 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> syn_filter 0 add priority high queue 3 -add_5tuple_filter -~~~~~~~~~~~~~~~~~ +flex_filter +~~~~~~~~~~~ -Add a 5-tuple filter, -which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) +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_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) +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 5-tuple filter assigned on. +* port_id: the port which the Flex filter is assigned on. -* dst_address: destination IP address. +* len_value: filter length in bytes, no greater than 128. -* src_address: source IP address. +* bytes_value: a string in hexadecimal, means the value the flex filter needs to match. -* dst_port_value: TCP/UDP destination port. +* mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match. -* src_port_value: TCP/UDP source port. +* prio_value: the priority of this filter. -* protocol_value: L4 protocol. +* queue_id: the receive queue associated with this Flex filter. -* mask_value: participates in the match or not by bit for field above, 1b means participate +Example: -* flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). +.. code-block:: console -* prio_value: the priority of this filter. + testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 + mask 000C priority 3 queue 3 -* queue_id: The receive queue associated with this 5-tuple filter. + testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 + mask 000C priority 3 queue 3 -* index: the index of this 5-tuple filter +flow_director_filter +~~~~~~~~~~~~~~~~~~~~ -Example: +The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. -.. code-block:: console +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: - 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 +* Perfect match filters. + The hardware checks a match between the masked fields of the received packets and the programmed filters. -remove_5tuple_filter -~~~~~~~~~~~~~~~~~~~~ +* Signature filters. + The hardware checks a match between a hash-based signature of the masked fields of the received packet. -Remove a 5-tuple filter +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. -remove_5tuple_filter (port_id) index (idx) +Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. -get_5tuple_filter -~~~~~~~~~~~~~~~~~ +# Commands to add flow director filters of different flow types. -Get and display a 5-tuple filter +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) -get_5tuple_filter (port_id) index (idx) +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) -Example: +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) + +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 add an ipv4-udp flow type filter: .. code-block:: console - testpmd> get_5tuple_filter 1 index 0 + 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 - 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 +For example, add an ipv4-other flow type filter: -add_syn_filter -~~~~~~~~~~~~~~ +.. code-block:: console -Add SYN filter, which can forward TCP packets whose *SYN* flag is set into a separate queue. + 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 -add_syn_filter (port_id) priority (high|low) queue (queue_id) +flush_flow_director +~~~~~~~~~~~~~~~~~~~ -The available information parameters are: +flush all flow director filters on a device: -* port_id: the port which the SYN filter assigned on. +flush_flow_director (port_id) -* high: this SYN filter has higher priority than other filters. +Example, to flush all flow director filter on port 0: -* low: this SYN filter has lower priority than other filters. +.. code-block:: console -* queue_id: The receive queue associated with this SYN filter + testpmd> flush_flow_director 0 -Example: +flow_director_mask +~~~~~~~~~~~~~~~~~~ -.. code-block:: console +set flow director's masks on match input set - testpmd> add_syn_filter 0 priority high queue 3, +flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port) -remove_syn_filter -~~~~~~~~~~~~~~~~~ +Example, to set flow director mask on port 0: -Remove SYN filter +.. code-block:: console -remove_syn_filter (port_id) + 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 -get_syn_filter -~~~~~~~~~~~~~~ -Get and display SYN filter +flow_director_flex_mask +~~~~~~~~~~~~~~~~~~~~~~~ + +set masks of flow director's flexible payload based on certain flow type: -get_syn_filter (port_id) +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) -Example: +Example, to set flow director's flex mask for all flow type on port 0: .. code-block:: console - testpmd> get_syn_filter 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) - syn filter: on, priority: high, queue: 3 -add_flex_filter -~~~~~~~~~~~~~~~ +flow_director_flex_payload +~~~~~~~~~~~~~~~~~~~~~~~~~~ -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. +Configure flexible payload selection. -add_flex_filter (port_id) len (len_value) bytes (bytes_string) mask (mask_value) -priority (prio_value) queue (queue_id) index (idx) +flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) -The available information parameters are: +For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload. -* port_id: the port which the Flex filter assigned on. +.. code-block:: console -* len_value: filter length in byte, no greater than 128. + testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) -* bytes_string: a sting in format of octal, means the value the flex filter need to match. +get_sym_hash_ena_per_port +~~~~~~~~~~~~~~~~~~~~~~~~~ -* mask_value: a sting in format of octal, bit 1 means corresponding byte in DWORD participates in the match. +Get symmetric hash enable configuration per port. -* prio_value: the priority of this filter. +get_sym_hash_ena_per_port (port_id) -* queue_id: The receive queue associated with this Flex filter. +For example, to get symmetric hash enable configuration of port 1. -* index: the index of this Flex filter +.. code-block:: console -Example: + testpmd> get_sym_hash_ena_per_port 1 -.. code-block:: console +set_sym_hash_ena_per_port +~~~~~~~~~~~~~~~~~~~~~~~~~ - testpmd> add_flex_filter 0 len 16 bytes 0x00000000000000000000000008060000 mask 000C priority 3 queue 3 index 0 +Set symmetric hash enable configuration per port to enable or disable. -Assign a packet whose 13th and 14th bytes are 0x0806 to queue 3. +set_sym_hash_ena_per_port (port_id) (enable|disable) -remove_flex_filter -~~~~~~~~~~~~~~~~~~ +For example, to set symmetric hash enable configuration of port 1 to enable. -Remove a Flex filter +.. code-block:: console -remove_flex_filter (port_id) index (idx) + testpmd> set_sym_hash_ena_per_port 1 enable -get_flex_filter -~~~~~~~~~~~~~~~ +get_hash_global_config +~~~~~~~~~~~~~~~~~~~~~~ -Get and display a Flex filter +Get the global configurations of hash filters. -get_flex_filter (port_id) index (idx) +get_hash_global_config (port_id) -Example: +For example, to get the global configurations of hash filters of port 1. .. code-block:: console - testpmd> get_flex_filter 0 index 0 + testpmd> get_hash_global_config 1 + +set_hash_global_config +~~~~~~~~~~~~~~~~~~~~~~ - filter[0]: +Set the global configurations of hash filters. - length: 16 +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) - 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 enable simple_xor for flow type of ipv6 on port 2. - mask[]: - 0b0000000000001100000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000 +.. code-block:: console - priority: 3 queue: 3 + testpmd> set_hash_global_config 2 simple_xor ipv6 enable