X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Ftestpmd_app_ug%2Ftestpmd_funcs.rst;h=72667dedb12b59ec42dd65d8a828d3713cee1571;hb=bf085dcba16c350df7ac411ca63af72b880e1188;hp=7d9a00f6e6ea709438bbac9652f9cec42cc7a608;hpb=ea0e711b8ae02a7bc95de732f6e64781df74b2ca;p=dpdk.git diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 7d9a00f6e6..72667dedb1 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -24,10 +24,10 @@ If you type a partial command and hit ```` you get a list of the available testpmd> show port - info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X - info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all - stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X - stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all + info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc X + info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc all + stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc X + stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc all ... @@ -71,7 +71,7 @@ practical or possible testpmd supports alternative methods for executing command .. code-block:: console - ./testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt + ./dpdk-testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt Interactive-mode selected CLI commands to be read from /home/ubuntu/flow-create-commands.txt Configuring Port 0 (socket 0) @@ -159,7 +159,7 @@ show port Display information for a given port or all ports:: - testpmd> show port (info|summary|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all) + testpmd> show port (info|summary|stats|xstats|fdir|stat_qmap|dcb_tc) (port_id|all) The available information categories are: @@ -177,8 +177,6 @@ The available information categories are: * ``dcb_tc``: DCB information such as TC mapping. -* ``cap``: Supported offload capabilities. - For example: .. code-block:: console @@ -266,6 +264,13 @@ Display information for a given port's RX/TX descriptor status:: testpmd> show port (port_id) (rxq|txq) (queue_id) desc (desc_id) status +show rxq desc used count +~~~~~~~~~~~~~~~~~~~~~~~~ + +Display the number of receive packet descriptors currently filled by hardware +and ready to be processed by the driver on a given RX queue:: + + testpmd> show port (port_id) rxq (queue_id) desc used count show config ~~~~~~~~~~~ @@ -273,7 +278,7 @@ show config Displays the configuration of the application. The configuration comes from the command-line, the runtime or the application defaults:: - testpmd> show config (rxtx|cores|fwd|txpkts|txtimes) + testpmd> show config (rxtx|cores|fwd|rxoffs|rxpkts|txpkts|txtimes) The available information categories are: @@ -283,6 +288,10 @@ The available information categories are: * ``fwd``: Packet forwarding configuration. +* ``rxoffs``: Packet offsets for RX split. + +* ``rxpkts``: Packets to RX split configuration. + * ``txpkts``: Packets to TX configuration. * ``txtimes``: Burst time pattern for Tx only mode. @@ -336,7 +345,7 @@ The available information categories are: * ``icmpecho``: Receives a burst of packets, lookup for ICMP 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``. +* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. * ``noisy``: Noisy neighbor simulation. Simulate more realistic behavior of a guest machine engaged in receiving @@ -386,11 +395,6 @@ Example for the io forwarding engine, with some packet drops on the tx side:: TX-packets: 548595568 TX-dropped: 128 TX-total: 548595696 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -.. note:: - - Enabling CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES appends "CPU cycles/packet" stats, like: - - CPU cycles/packet=xx.dd (total cycles=xxxx / total RX packets=xxxx) at xxx MHz clock clear fwd ~~~~~~~~~ @@ -720,7 +724,7 @@ This is equivalent to the ``--coremask`` command-line option. .. note:: - The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. + The main lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. set portmask ~~~~~~~~~~~~ @@ -774,6 +778,36 @@ When retry is enabled, the transmit delay time and number of retries can also be testpmd> set burst tx delay (microseconds) retry (num) +set rxoffs +~~~~~~~~~~ + +Set the offsets of segments relating to the data buffer beginning on receiving +if split feature is engaged. Affects only the queues configured with split +offloads (currently BUFFER_SPLIT is supported only). + + testpmd> set rxoffs (x[,y]*) + +Where x[,y]* represents a CSV list of values, without white space. If the list +of offsets is shorter than the list of segments the zero offsets will be used +for the remaining segments. + +set rxpkts +~~~~~~~~~~ + +Set the length of segments to scatter packets on receiving if split +feature is engaged. Affects only the queues configured with split offloads +(currently BUFFER_SPLIT is supported only). Optionally the multiple memory +pools can be specified with --mbuf-size command line parameter and the mbufs +to receive will be allocated sequentially from these extra memory pools (the +mbuf for the first segment is allocated from the first pool, the second one +from the second pool, and so on, if segment number is greater then pool's the +mbuf for remaining segments will be allocated from the last valid pool). + + testpmd> set rxpkts (x[,y]*) + +Where x[,y]* represents a CSV list of values, without white space. Zero value +means to use the corresponding memory pool data buffer size. + set txpkts ~~~~~~~~~~ @@ -1043,55 +1077,6 @@ Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port I testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) -tunnel_filter add -~~~~~~~~~~~~~~~~~ - -Add a tunnel filter on a port:: - - testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \ - (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\ - imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id) - -The available information categories are: - -* ``vxlan``: Set tunnel type as VXLAN. - -* ``nvgre``: Set tunnel type as NVGRE. - -* ``ipingre``: Set tunnel type as IP-in-GRE. - -* ``vxlan-gpe``: Set tunnel type as VXLAN-GPE - -* ``imac-ivlan``: Set filter type as Inner MAC and VLAN. - -* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID. - -* ``imac-tenid``: Set filter type as Inner MAC and tenant ID. - -* ``imac``: Set filter type as Inner MAC. - -* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID. - -* ``oip``: Set filter type as Outer IP. - -* ``iip``: Set filter type as Inner IP. - -Example:: - - testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \ - 192.168.2.2 0 ipingre oip 1 1 - - Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP. - -tunnel_filter remove -~~~~~~~~~~~~~~~~~~~~ - -Remove a tunnel filter on a port:: - - testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \ - (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\ - imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id) - rx_vxlan_port add ~~~~~~~~~~~~~~~~~ @@ -1149,11 +1134,11 @@ Where: * ``ip|udp|tcp|sctp`` always relate to the inner layer. * ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized - as a tunnel packet by the forwarding engine (vxlan, gre, ipip and geneve are + as a tunnel packet by the forwarding engine (geneve, gre, gtp, ipip, vxlan and vxlan-gpe are supported). See also the ``csum parse-tunnel`` command. * ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized - as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe, geneve are + as a tunnel packet by the forwarding engine (geneve, gtp, vxlan and vxlan-gpe are supported). See also the ``csum parse-tunnel`` command. .. note:: @@ -1213,7 +1198,7 @@ engine:: testpmd> csum parse-tunnel (on|off) (tx_port_id) If enabled, the csum forward engine will try to recognize supported -tunnel headers (vxlan, gre, ipip, geneve). +tunnel headers (geneve, gtp, gre, ipip, vxlan, vxlan-gpe). If disabled, treat tunnel packets as non-tunneled packets (a inner header is handled as a packet payload). @@ -1588,14 +1573,6 @@ Set VF receive/transmit from a port:: testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off) -set port - mac address filter (for VF) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Add/Remove unicast or multicast MAC addr filter for a VF:: - - testpmd> set port (port_id) vf (vf_id) (mac_addr) \ - (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) - set port - rx mode(for VF) ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1737,13 +1714,6 @@ Enable/disable E-tag based forwarding on a port:: testpmd> E-tag set forwarding (on|off) port (port_id) -Add an E-tag forwarding filter on a port:: - - testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id) - -Delete an E-tag forwarding filter on a port:: - testpmd> E-tag set filter del e-tag-id (value) port (port_id) - ddp add ~~~~~~~ @@ -2033,6 +2003,24 @@ Set fec mode for a specific port:: testpmd> set port (port_id) fec_mode auto|off|rs|baser +Config Sample actions list +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Configure the sample actions list to be used when sampling a packet by +rte_flow_action_sample:: + + set sample_actions {index} {action} [/ {action} [...]] / end + +There are multiple global buffers for ``sample_actions``, this command will set +one internal buffer index by ``{index}``. + +In order to use different sample actions list, ``index`` must be specified +during the flow rule creation:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / end actions + sample ratio 2 index 2 / end + +Otherwise the default index ``0`` is used. Port Functions -------------- @@ -2305,7 +2293,7 @@ port config - RSS Set the RSS (Receive Side Scaling) mode on or off:: - testpmd> port config all rss (all|default|eth|vlan|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|vxlan-gpe|l2tpv3|esp|ah|pfcp|none) + testpmd> port config all rss (all|default|eth|vlan|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|vxlan-gpe|l2tpv3|esp|ah|pfcp|ecpri|mpls|none) RSS is on by default. @@ -2369,17 +2357,6 @@ Where the threshold type can be: These threshold options are also available from the command-line. -port config - E-tag -~~~~~~~~~~~~~~~~~~~ - -Set the value of ether-type for E-tag:: - - testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value) - -Enable/disable the E-tag support:: - - testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable) - port config pctype mapping ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2421,7 +2398,7 @@ port config udp_tunnel_port Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols:: - testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe (udp_port) + testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe|ecpri (udp_port) port config tx_metadata ~~~~~~~~~~~~~~~~~~~~~~~ @@ -2576,16 +2553,16 @@ For example, to set the MAC address of a Link Bonding device (port 10) to 00:00: testpmd> set bonding mac 10 00:00:00:00:00:01 -set bonding xmit_balance_policy +set bonding balance_xmit_policy ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:: - testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34) + testpmd> set bonding balance_xmit_policy (port_id) (l2|l23|l34) For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports):: - testpmd> set bonding xmit_balance_policy 10 l34 + testpmd> set bonding balance_xmit_policy 10 l34 set bonding mon_period @@ -2739,14 +2716,15 @@ add port meter profile (srTCM rfc2967) Add meter profile (srTCM rfc2697) to the ethernet device:: testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \ - (cir) (cbs) (ebs) + (cir) (cbs) (ebs) (packet_mode) where: * ``profile_id``: ID for the meter profile. -* ``cir``: Committed Information Rate (CIR) (bytes/second). -* ``cbs``: Committed Burst Size (CBS) (bytes). -* ``ebs``: Excess Burst Size (EBS) (bytes). +* ``cir``: Committed Information Rate (CIR) (bytes per second or packets per second). +* ``cbs``: Committed Burst Size (CBS) (bytes or packets). +* ``ebs``: Excess Burst Size (EBS) (bytes or packets). +* ``packet_mode``: Packets mode for meter profile. add port meter profile (trTCM rfc2968) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2754,15 +2732,16 @@ add port meter profile (trTCM rfc2968) Add meter profile (srTCM rfc2698) to the ethernet device:: testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \ - (cir) (pir) (cbs) (pbs) + (cir) (pir) (cbs) (pbs) (packet_mode) where: * ``profile_id``: ID for the meter profile. -* ``cir``: Committed information rate (bytes/second). -* ``pir``: Peak information rate (bytes/second). -* ``cbs``: Committed burst size (bytes). -* ``pbs``: Peak burst size (bytes). +* ``cir``: Committed information rate (bytes per second or packets per second). +* ``pir``: Peak information rate (bytes per second or packets per second). +* ``cbs``: Committed burst size (bytes or packets). +* ``pbs``: Peak burst size (bytes or packets). +* ``packet_mode``: Packets mode for meter profile. add port meter profile (trTCM rfc4115) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2770,15 +2749,16 @@ add port meter profile (trTCM rfc4115) Add meter profile (trTCM rfc4115) to the ethernet device:: testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \ - (cir) (eir) (cbs) (ebs) + (cir) (eir) (cbs) (ebs) (packet_mode) where: * ``profile_id``: ID for the meter profile. -* ``cir``: Committed information rate (bytes/second). -* ``eir``: Excess information rate (bytes/second). -* ``cbs``: Committed burst size (bytes). -* ``ebs``: Excess burst size (bytes). +* ``cir``: Committed information rate (bytes per second or packets per second). +* ``eir``: Excess information rate (bytes per second or packets per second). +* ``cbs``: Committed burst size (bytes or packets). +* ``ebs``: Excess burst size (bytes or packets). +* ``packet_mode``: Packets mode for meter profile. delete port meter profile ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -3250,286 +3230,8 @@ This section details the available filter functions that are available. Note these functions interface the deprecated legacy filtering framework, superseded by *rte_flow*. See `Flow rules management`_. -ethertype_filter -~~~~~~~~~~~~~~~~~~~~ - -Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue:: - - 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. - -* ``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. - -* ``queue_id``: The receive queue associated with this EtherType filter. - It is meaningless when deleting or dropping. - -Example, to add/remove an ethertype filter rule:: - - testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \ - ethertype 0x0806 fwd queue 3 - - testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \ - ethertype 0x0806 fwd queue 3 - -2tuple_filter -~~~~~~~~~~~~~~~~~ - -Add or delete a 2-tuple filter, -which identifies packets by specific protocol and destination TCP/UDP port -and forwards packets into one of the receive queues:: - - 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. - -* ``dst_port_value``: Destination port in L4. - -* ``protocol_value``: IP L4 protocol. - -* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate. - -* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). - -* ``prio_value``: Priority of this filter. - -* ``queue_id``: The receive queue associated with this 2-tuple filter. - -Example, to add/remove an 2tuple filter rule:: - - 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 - -5tuple_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:: - - 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 5-tuple filter assigned on. - -* ``dst_address``: Destination IP address. - -* ``src_address``: Source IP address. - -* ``dst_port_value``: TCP/UDP destination port. - -* ``src_port_value``: TCP/UDP source port. - -* ``protocol_value``: L4 protocol. - -* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate - -* ``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. - -Example, to add/remove an 5tuple filter rule:: - - 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 - -syn_filter -~~~~~~~~~~ - -Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue:: - - syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) - -The available information parameters are: - -* ``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. - -* ``queue_id``: The receive queue associated with this SYN filter - -Example:: - - testpmd> syn_filter 0 add priority high queue 3 - -flex_filter -~~~~~~~~~~~ - -With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet -and routed into one of the receive queues:: - - 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 Flex filter is assigned on. - -* ``len_value``: Filter length in bytes, no greater than 128. - -* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match. - -* ``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:: - - 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 - - .. _testpmd_flow_director: -flow_director_filter -~~~~~~~~~~~~~~~~~~~~ - -The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. - -Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and -Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter: - -* Perfect match filters. - The hardware checks a match between the masked fields of the received packets and the programmed filters. - The masked fields are for IP flow. - -* Signature filters. - The hardware checks a match between a hash-based signature of the masked fields of the received packet. - -* Perfect-mac-vlan match filters. - The hardware checks a match between the masked fields of the received packets and the programmed filters. - The masked fields are for MAC VLAN flow. - -* Perfect-tunnel match filters. - The hardware checks a match between the masked fields of the received packets and the programmed filters. - The masked fields are for tunnel flow. - -* Perfect-raw-flow-type match filters. - The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet. - The masked fields are specified by input sets. - -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. - -Note that for raw flow type mode the source and destination fields in the -raw packet buffer need to be presented in a reversed order with respect -to the expected received packets. -For example: IP source and destination addresses or TCP/UDP/SCTP -source and destination ports - -Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. - -# Commands to add flow director filters of different flow types:: - - flow_director_filter (port_id) mode IP (add|del|update) \ - flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \ - src (src_ip_address) dst (dst_ip_address) \ - tos (tos_value) proto (proto_value) ttl (ttl_value) \ - vlan (vlan_value) flexbytes (flexbytes_value) \ - (drop|fwd) pf|vf(vf_id) queue (queue_id) \ - fd_id (fd_id_value) - - flow_director_filter (port_id) mode IP (add|del|update) \ - flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \ - src (src_ip_address) (src_port) \ - dst (dst_ip_address) (dst_port) \ - tos (tos_value) ttl (ttl_value) \ - vlan (vlan_value) flexbytes (flexbytes_value) \ - (drop|fwd) queue pf|vf(vf_id) (queue_id) \ - fd_id (fd_id_value) - - flow_director_filter (port_id) mode IP (add|del|update) \ - flow (ipv4-sctp|ipv6-sctp) \ - src (src_ip_address) (src_port) \ - dst (dst_ip_address) (dst_port) \ - tos (tos_value) ttl (ttl_value) \ - tag (verification_tag) vlan (vlan_value) \ - flexbytes (flexbytes_value) (drop|fwd) \ - pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) - - flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \ - ether (ethertype) flexbytes (flexbytes_value) \ - (drop|fwd) pf|vf(vf_id) queue (queue_id) - fd_id (fd_id_value) - - flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \ - mac (mac_address) vlan (vlan_value) \ - flexbytes (flexbytes_value) (drop|fwd) \ - queue (queue_id) fd_id (fd_id_value) - - flow_director_filter (port_id) mode Tunnel (add|del|update) \ - mac (mac_address) vlan (vlan_value) \ - tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \ - flexbytes (flexbytes_value) (drop|fwd) \ - queue (queue_id) fd_id (fd_id_value) - - flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \ - (drop|fwd) queue (queue_id) fd_id (fd_id_value) \ - packet (packet file name) - -For example, to add an ipv4-udp flow type filter:: - - testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \ - dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \ - fwd pf queue 1 fd_id 1 - -For example, add an ipv4-other flow type filter:: - - testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \ - dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \ - flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 - -flush_flow_director -~~~~~~~~~~~~~~~~~~~ - -Flush all flow director filters on a device:: - - testpmd> flush_flow_director (port_id) - -Example, to flush all flow director filter on port 0:: - - testpmd> flush_flow_director 0 - flow_director_mask ~~~~~~~~~~~~~~~~~~ @@ -3553,22 +3255,6 @@ Example, to set flow director mask on port 0:: dst_mask 255.255.255.255 \ FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF -flow_director_flex_mask -~~~~~~~~~~~~~~~~~~~~~~~ - -set masks of flow director's flexible payload based on certain flow type:: - - testpmd> flow_director_flex_mask (port_id) \ - flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ - ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \ - l2_payload|all) (mask) - -Example, to set flow director's flex mask for all flow type on port 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) - - flow_director_flex_payload ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -3581,100 +3267,6 @@ For example, to select the first 16 bytes from the offset 4 (bytes) of packet's testpmd> flow_director_flex_payload 0 l4 \ (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) -get_sym_hash_ena_per_port -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Get symmetric hash enable configuration per port:: - - get_sym_hash_ena_per_port (port_id) - -For example, to get symmetric hash enable configuration of port 1:: - - testpmd> get_sym_hash_ena_per_port 1 - -set_sym_hash_ena_per_port -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Set symmetric hash enable configuration per port to enable or disable:: - - set_sym_hash_ena_per_port (port_id) (enable|disable) - -For example, to set symmetric hash enable configuration of port 1 to enable:: - - testpmd> set_sym_hash_ena_per_port 1 enable - -get_hash_global_config -~~~~~~~~~~~~~~~~~~~~~~ - -Get the global configurations of hash filters:: - - get_hash_global_config (port_id) - -For example, to get the global configurations of hash filters of port 1:: - - testpmd> get_hash_global_config 1 - -set_hash_global_config -~~~~~~~~~~~~~~~~~~~~~~ - -Set the global configurations of hash filters:: - - set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|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 enable simple_xor for flow type of ipv6 on port 2:: - - testpmd> set_hash_global_config 2 simple_xor ipv6 enable - -set_hash_input_set -~~~~~~~~~~~~~~~~~~ - -Set the input set for hash:: - - set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ - ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ - l2_payload|) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \ - ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \ - tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \ - udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \ - fld-8th|none) (select|add) - -For example, to add source IP to hash input set for flow type of ipv4-udp on port 0:: - - testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add - -set_fdir_input_set -~~~~~~~~~~~~~~~~~~ - -The Flow Director filters can match the different fields for different type of packet, i.e. specific input set -on per flow type and the flexible payload. This command can be used to change input set for each flow type. - -Set the input set for flow director:: - - set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ - ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ - l2_payload|) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \ - ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \ - tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \ - sctp-dst-port|sctp-veri-tag|none) (select|add) - -For example to add source IP to FD input set for flow type of ipv4-udp on port 0:: - - testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add - -global_config -~~~~~~~~~~~~~ - -Set different GRE key length for input set:: - - global_config (port_id) gre-key-len (number in bytes) - -For example to set GRE key length for input set to 4 bytes on port 0:: - - testpmd> global_config 0 gre-key-len 4 - .. _testpmd_rte_flow: @@ -3743,12 +3335,55 @@ following sections. - Dump internal representation information of all flows in hardware:: - flow dump {port_id} {output_file} + flow dump {port_id} all {output_file} + + for one flow:: + + flow dump {port_id} rule {rule_id} {output_file} - List and destroy aged flow rules:: flow aged {port_id} [destroy] +- Tunnel offload - create a tunnel stub:: + + flow tunnel create {port_id} type {tunnel_type} + +- Tunnel offload - destroy a tunnel stub:: + + flow tunnel destroy {port_id} id {tunnel_id} + +- Tunnel offload - list port tunnel stubs:: + + flow tunnel list {port_id} + +Creating a tunnel stub for offload +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``flow tunnel create`` setup a tunnel stub for tunnel offload flow rules:: + + flow tunnel create {port_id} type {tunnel_type} + +If successful, it will return a tunnel stub ID usable with other commands:: + + port [...]: flow tunnel #[...] type [...] + +Tunnel stub ID is relative to a port. + +Destroying tunnel offload stub +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``flow tunnel destroy`` destroy port tunnel stub:: + + flow tunnel destroy {port_id} id {tunnel_id} + +Listing tunnel offload stubs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``flow tunnel list`` list port tunnel offload stubs:: + + flow tunnel list {port_id} + Validating flow rules ~~~~~~~~~~~~~~~~~~~~~ @@ -3795,6 +3430,7 @@ to ``rte_flow_create()``:: flow create {port_id} [group {group_id}] [priority {level}] [ingress] [egress] [transfer] + [tunnel_set {tunnel_id}] [tunnel_match {tunnel_id}] pattern {item} [/ {item} [...]] / end actions {action} [/ {action} [...]] / end @@ -3809,6 +3445,7 @@ Otherwise it will show an error message of the form:: Parameters describe in the following order: - Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens). +- Tunnel offload specification (tunnel_set, tunnel_match) - A matching pattern, starting with the *pattern* token and terminated by an *end* pattern item. - Actions, starting with the *actions* token and terminated by an *end* @@ -3852,6 +3489,14 @@ Most rules affect RX therefore contain the ``ingress`` token:: testpmd> flow create 0 ingress pattern [...] +Tunnel offload +^^^^^^^^^^^^^^ + +Indicate tunnel offload rule type + +- ``tunnel_set {tunnel_id}``: mark rule as tunnel offload decap_set type. +- ``tunnel_match {tunnel_id}``: mark rule as tunel offload match type. + Matching pattern ^^^^^^^^^^^^^^^^ @@ -4065,6 +3710,14 @@ This section lists supported pattern items and their attributes, if any. - ``vni {unsigned}``: virtual network identifier. - ``protocol {unsigned}``: protocol type. +- ``geneve-opt``: match GENEVE header option. + + - ``class {unsigned}``: GENEVE option class. + - ``type {unsigned}``: GENEVE option type. + - ``length {unsigned}``: GENEVE option length in 32-bit words. + - ``data {hex string}``: GENEVE option data, the length is defined by + ``length`` field. + - ``vxlan-gpe``: match VXLAN-GPE header. - ``vni {unsigned}``: VXLAN-GPE identifier. @@ -4235,14 +3888,13 @@ This section lists supported actions and their attributes, if any. - ``rss``: spread packets among several queues. - ``func {hash function}``: RSS hash function to apply, allowed tokens are - the same as `set_hash_global_config`_. + ``toeplitz``, ``simple_xor``, ``symmetric_toeplitz`` and ``default``. - ``level {unsigned}``: encapsulation level for ``types``. - - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed - tokens are the same as `set_hash_input_set`_, except that an empty list - does not disable RSS but instead requests unspecified "best-effort" - settings. + - ``types [{RSS hash type} [...]] end``: specific RSS hash types. + Note that an empty list does not disable RSS but instead requests + unspecified "best-effort" settings. - ``key {string}``: RSS hash key, overrides ``key_len``. @@ -4404,6 +4056,11 @@ This section lists supported actions and their attributes, if any. - ``dscp_value {unsigned}``: The new DSCP value to be set +- ``shared``: Use shared action created via + ``flow shared_action {port_id} create`` + + - ``shared_action_id {unsigned}``: Shared action ID to use + Destroying flow rules ~~~~~~~~~~~~~~~~~~~~~ @@ -4693,6 +4350,113 @@ If attach ``destroy`` parameter, the command will destroy all the list aged flow testpmd> flow aged 0 Port 0 total aged flows: 0 +Creating shared actions +~~~~~~~~~~~~~~~~~~~~~~~ +``flow shared_action {port_id} create`` creates shared action with optional +shared action ID. It is bound to ``rte_flow_shared_action_create()``:: + + flow shared_action {port_id} create [action_id {shared_action_id}] + [ingress] [egress] [transfer] action {action} / end + +If successful, it will show:: + + Shared action #[...] created + +Otherwise, it will complain either that shared action already exists or that +some error occurred:: + + Shared action #[...] is already assigned, delete it first + +:: + + Caught error type [...] ([...]): [...] + +Create shared rss action with id 100 to queues 1 and 2 on port 0:: + + testpmd> flow shared_action 0 create action_id 100 \ + ingress action rss queues 1 2 end / end + +Create shared rss action with id assigned by testpmd to queues 1 and 2 on +port 0:: + + testpmd> flow shared_action 0 create action_id \ + ingress action rss queues 0 1 end / end + +Updating shared actions +~~~~~~~~~~~~~~~~~~~~~~~ +``flow shared_action {port_id} update`` updates configuration of the shared +action from its shared action ID (as returned by +``flow shared_action {port_id} create``). It is bound to +``rte_flow_shared_action_update()``:: + + flow shared_action {port_id} update {shared_action_id} + action {action} / end + +If successful, it will show:: + + Shared action #[...] updated + +Otherwise, it will complain either that shared action not found or that some +error occurred:: + + Failed to find shared action #[...] on port [...] + +:: + + Caught error type [...] ([...]): [...] + +Update shared rss action having id 100 on port 0 with rss to queues 0 and 3 +(in create example above rss queues were 1 and 2):: + + testpmd> flow shared_action 0 update 100 action rss queues 0 3 end / end + +Destroying shared actions +~~~~~~~~~~~~~~~~~~~~~~~~~ +``flow shared_action {port_id} update`` destroys one or more shared actions +from their shared action IDs (as returned by +``flow shared_action {port_id} create``). It is bound to +``rte_flow_shared_action_destroy()``:: + + flow shared_action {port_id} destroy action_id {shared_action_id} [...] + +If successful, it will show:: + + Shared action #[...] destroyed + +It does not report anything for shared action IDs that do not exist. +The usual error message is shown when a shared action cannot be destroyed:: + + Caught error type [...] ([...]): [...] + +Destroy shared actions having id 100 & 101:: + + testpmd> flow shared_action 0 destroy action_id 100 action_id 101 + +Query shared actions +~~~~~~~~~~~~~~~~~~~~ +``flow shared_action {port_id} query`` queries the shared action from its +shared action ID (as returned by ``flow shared_action {port_id} create``). +It is bound to ``rte_flow_shared_action_query()``:: + + flow shared_action {port_id} query {shared_action_id} + +Currently only rss shared action supported. If successful, it will show:: + + Shared RSS action: + refs:[...] + +Otherwise, it will complain either that shared action not found or that some +error occurred:: + + Failed to find shared action #[...] on port [...] + +:: + + Caught error type [...] ([...]): [...] + +Query shared action having id 100:: + + testpmd> flow shared_action 0 query 100 Sample QinQ flow rules ~~~~~~~~~~~~~~~~~~~~~~ @@ -4700,14 +4464,14 @@ Sample QinQ flow rules Before creating QinQ rule(s) the following commands should be issued to enable QinQ:: testpmd> port stop 0 - testpmd> vlan set qinq_strip on 0 + testpmd> vlan set extend on 0 The above command sets the inner and outer TPID's to 0x8100. To change the TPID's the following commands should be used:: - testpmd> vlan set outer tpid 0xa100 0 - testpmd> vlan set inner tpid 0x9100 0 + testpmd> vlan set outer tpid 0x88A8 0 + testpmd> vlan set inner tpid 0x8100 0 testpmd> port start 0 Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM. @@ -4743,6 +4507,49 @@ Validate and create a QinQ rule on port 0 to steer traffic to a queue on the hos 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 1 0 0 i- ETH VLAN VLAN=>PF QUEUE +Sample VXLAN flow rules +~~~~~~~~~~~~~~~~~~~~~~~ + +Before creating VXLAN rule(s), the UDP port should be added for VXLAN packet +filter on a port:: + + testpmd> rx_vxlan_port add 4789 0 + +Create VXLAN rules on port 0 to steer traffic to PF queues. + +:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / + eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end + Flow rule #0 created + + testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 3 / + eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end + Flow rule #1 created + + testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / + eth dst is 00:11:22:33:44:55 / vlan tci is 10 / end actions pf / + queue index 3 / end + Flow rule #2 created + + testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 5 / + eth dst is 00:11:22:33:44:55 / vlan tci is 20 / end actions pf / + queue index 4 / end + Flow rule #3 created + + testpmd> flow create 0 ingress pattern eth dst is 00:00:00:00:01:00 / ipv4 / + udp / vxlan vni is 6 / eth dst is 00:11:22:33:44:55 / end actions pf / + queue index 5 / end + Flow rule #4 created + + testpmd> flow list 0 + ID Group Prio Attr Rule + 0 0 0 i- ETH IPV4 UDP VXLAN ETH => QUEUE + 1 0 0 i- ETH IPV4 UDP VXLAN ETH => QUEUE + 2 0 0 i- ETH IPV4 UDP VXLAN ETH VLAN => QUEUE + 3 0 0 i- ETH IPV4 UDP VXLAN ETH VLAN => QUEUE + 4 0 0 i- ETH IPV4 UDP VXLAN ETH => QUEUE + Sample VXLAN encapsulation rule ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -5059,6 +4866,64 @@ if seid is set):: testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 1 seid is 1 / end actions queue index 3 / end +Sample Sampling/Mirroring rules +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Sample/Mirroring rules can be set by the following commands + +NIC-RX Sampling rule, the matched ingress packets and sent to the queue 1, +and 50% packets are duplicated and marked with 0x1234 and sent to queue 0. + +:: + + testpmd> set sample_actions 0 mark id 0x1234 / queue index 0 / end + testpmd> flow create 0 ingress group 1 pattern eth / end actions + sample ratio 2 index 0 / queue index 1 / end + +Mirroring rule with port representors (with "transfer" attribute), the matched +ingress packets with encapsulation header are sent to port id 0, and also +mirrored the packets and sent to port id 2. + +:: + + testpmd> set sample_actions 0 port_id id 2 / end + testpmd> flow create 1 ingress transfer pattern eth / end actions + sample ratio 1 index 0 / raw_encap / port_id id 0 / end + +Mirroring rule with port representors (with "transfer" attribute), the matched +ingress packets are sent to port id 2, and also mirrored the packets with +encapsulation header and sent to port id 0. + +:: + + testpmd> set sample_actions 0 raw_encap / port_id id 0 / end + testpmd> flow create 0 ingress transfer pattern eth / end actions + sample ratio 1 index 0 / port_id id 2 / end + +Mirroring rule with port representors (with "transfer" attribute), the matched +ingress packets are sent to port id 2, and also mirrored the packets with +VXLAN encapsulation header and sent to port id 0. + +:: + + testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1 + ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 + testpmd> set sample_actions 0 vxlan_encap / port_id id 0 / end + testpmd> flow create 0 ingress transfer pattern eth / end actions + sample ratio 1 index 0 / port_id id 2 / end + +Mirroring rule with port representors (with "transfer" attribute), the matched +ingress packets are sent to port id 2, and also mirrored the packets with +NVGRE encapsulation header and sent to port id 0. + +:: + + testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1 + eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 + testpmd> set sample_actions 0 nvgre_encap / port_id id 0 / end + testpmd> flow create 0 ingress transfer pattern eth / end actions + sample ratio 1 index 0 / port_id id 2 / end + BPF Functions --------------