1 .. SPDX-License-Identifier: BSD-3-Clause
2 Copyright(c) 2010-2016 Intel Corporation.
6 Testpmd Runtime Functions
7 =========================
9 Where the testpmd application is started in interactive mode, (``-i|--interactive``),
10 it displays a prompt that can be used to start and stop forwarding,
11 configure the application, display statistics (including the extended NIC
12 statistics aka xstats) , set the Flow Director and other tasks::
16 The testpmd prompt has some, limited, readline support.
17 Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
18 as well as access to the command history via the up-arrow.
20 There is also support for tab completion.
21 If you type a partial command and hit ``<TAB>`` you get a list of the available completions:
23 .. code-block:: console
25 testpmd> show port <TAB>
27 info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
28 info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
29 stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
30 stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
36 Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes::
38 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
39 (pause_time) (send_xon) (port_id)
41 In the real ``testpmd>`` prompt these commands should be on a single line.
46 The testpmd has on-line help for the functions that are available at runtime.
47 These are divided into sections and can be accessed using help, help section or help all:
49 .. code-block:: console
53 help control : Start and stop forwarding.
54 help display : Displaying port, stats and config information.
55 help config : Configuration information.
56 help ports : Configuring ports.
57 help registers : Reading and setting port registers.
58 help filters : Filters configuration help.
59 help all : All of the above sections.
62 Command File Functions
63 ----------------------
65 To facilitate loading large number of commands or to avoid cutting and pasting where not
66 practical or possible testpmd supports alternative methods for executing commands.
68 * If started with the ``--cmdline-file=FILENAME`` command line argument testpmd
69 will execute all CLI commands contained within the file immediately before
70 starting packet forwarding or entering interactive mode.
72 .. code-block:: console
74 ./testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt
75 Interactive-mode selected
76 CLI commands to be read from /home/ubuntu/flow-create-commands.txt
77 Configuring Port 0 (socket 0)
78 Port 0: 7C:FE:90:CB:74:CE
79 Configuring Port 1 (socket 0)
80 Port 1: 7C:FE:90:CB:74:CA
81 Checking link statuses...
82 Port 0 Link Up - speed 10000 Mbps - full-duplex
83 Port 1 Link Up - speed 10000 Mbps - full-duplex
89 Flow rule #498 created
90 Flow rule #499 created
91 Read all CLI commands from /home/ubuntu/flow-create-commands.txt
95 * At run-time additional commands can be loaded in bulk by invoking the ``load FILENAME``
98 .. code-block:: console
100 testpmd> load /home/ubuntu/flow-create-commands.txt
105 Flow rule #498 created
106 Flow rule #499 created
107 Read all CLI commands from /home/ubuntu/flow-create-commands.txt
111 In all cases output from any included command will be displayed as standard output.
112 Execution will continue until the end of the file is reached regardless of
113 whether any errors occur. The end user must examine the output to determine if
114 any failures occurred.
123 Start packet forwarding with current configuration::
130 Start packet forwarding with current configuration after sending specified number of bursts of packets::
132 testpmd> start tx_first (""|burst_num)
134 The default burst number is 1 when ``burst_num`` not presented.
139 Stop packet forwarding, and display accumulated statistics::
154 The functions in the following sections are used to display information about the
155 testpmd configuration or the NIC status.
160 Display information for a given port or all ports::
162 testpmd> show port (info|summary|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)
164 The available information categories are:
166 * ``info``: General port information such as MAC address.
168 * ``summary``: Brief port summary such as Device Name, Driver Name etc.
170 * ``stats``: RX/TX statistics.
172 * ``xstats``: RX/TX extended NIC statistics.
174 * ``fdir``: Flow Director information and statistics.
176 * ``stat_qmap``: Queue statistics mapping.
178 * ``dcb_tc``: DCB information such as TC mapping.
180 * ``cap``: Supported offload capabilities.
184 .. code-block:: console
186 testpmd> show port info 0
188 ********************* Infos for port 0 *********************
190 MAC address: XX:XX:XX:XX:XX:XX
192 memory allocation on the socket: 0
194 Link speed: 40000 Mbps
195 Link duplex: full-duplex
196 Promiscuous mode: enabled
197 Allmulticast mode: disabled
198 Maximum number of MAC addresses: 64
199 Maximum number of MAC addresses of hash filtering: 0
204 Redirection table size: 512
205 Supported flow types:
225 Display the rss redirection table entry indicated by masks on port X::
227 testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
229 size is used to indicate the hardware supported reta size
234 Display the RSS hash functions and RSS hash key of a port::
236 testpmd> show port (port_id) rss-hash [key]
241 Clear the port statistics for a given port or for all ports::
243 testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
247 testpmd> clear port stats all
252 Display information for a given port's RX/TX queue::
254 testpmd> show (rxq|txq) info (port_id) (queue_id)
259 Displays the configuration of the application.
260 The configuration comes from the command-line, the runtime or the application defaults::
262 testpmd> show config (rxtx|cores|fwd|txpkts)
264 The available information categories are:
266 * ``rxtx``: RX/TX configuration items.
268 * ``cores``: List of forwarding cores.
270 * ``fwd``: Packet forwarding configuration.
272 * ``txpkts``: Packets to TX configuration.
276 .. code-block:: console
278 testpmd> show config rxtx
280 io packet forwarding - CRC stripping disabled - packets/burst=16
281 nb forwarding cores=2 - nb forwarding ports=1
282 RX queues=1 - RX desc=128 - RX free threshold=0
283 RX threshold registers: pthresh=8 hthresh=8 wthresh=4
284 TX queues=1 - TX desc=512 - TX free threshold=0
285 TX threshold registers: pthresh=36 hthresh=0 wthresh=0
286 TX RS bit threshold=0 - TXQ flags=0x0
291 Set the packet forwarding mode::
293 testpmd> set fwd (io|mac|macswap|flowgen| \
294 rxonly|txonly|csum|icmpecho|noisy) (""|retry)
296 ``retry`` can be specified for forwarding engines except ``rx_only``.
298 The available information categories are:
300 * ``io``: Forwards packets "as-is" in I/O mode.
301 This is the fastest possible forwarding operation as it does not access packets data.
302 This is the default mode.
304 * ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
305 Default application behaviour is to set source Ethernet address to that of the transmitting interface, and destination
306 address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
307 'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
309 * ``macswap``: MAC swap forwarding mode.
310 Swaps the source and the destination Ethernet addresses of packets before forwarding them.
312 * ``flowgen``: Multi-flow generation mode.
313 Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
315 * ``rxonly``: Receives packets but doesn't transmit them.
317 * ``txonly``: Generates and transmits packets without receiving any.
319 * ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
321 * ``icmpecho``: Receives a burst of packets, lookup for ICMP echo requests and, if any, send back ICMP echo replies.
323 * ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
325 * ``softnic``: Demonstrates the softnic forwarding operation. In this mode, packet forwarding is
326 similar to I/O mode except for the fact that packets are loopback to the softnic ports only. Therefore, portmask parameter should be set to softnic port only. The various software based custom NIC pipelines specified through the softnic firmware (DPDK packet framework script) can be tested in this mode. Furthermore, it allows to build 5-level hierarchical QoS scheduler as a default option that can be enabled through CLI once testpmd application is initialised. The user can modify the default scheduler hierarchy or can specify the new QoS Scheduler hierarchy through CLI. Requires ``CONFIG_RTE_LIBRTE_PMD_SOFTNIC=y``.
328 * ``noisy``: Noisy neighbour simulation.
329 Simulate more realistic behavior of a guest machine engaged in receiving
330 and sending packets performing Virtual Network Function (VNF).
334 testpmd> set fwd rxonly
336 Set rxonly packet forwarding mode
342 When running, forwarding engines maintain statistics from the time they have been started.
343 Example for the io forwarding engine, with some packet drops on the tx side::
345 testpmd> show fwd stats all
347 ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 1/Queue= 0 -------
348 RX-packets: 274293770 TX-packets: 274293642 TX-dropped: 128
350 ------- Forward Stats for RX Port= 1/Queue= 0 -> TX Port= 0/Queue= 0 -------
351 RX-packets: 274301850 TX-packets: 274301850 TX-dropped: 0
353 ---------------------- Forward statistics for port 0 ----------------------
354 RX-packets: 274293802 RX-dropped: 0 RX-total: 274293802
355 TX-packets: 274301862 TX-dropped: 0 TX-total: 274301862
356 ----------------------------------------------------------------------------
358 ---------------------- Forward statistics for port 1 ----------------------
359 RX-packets: 274301894 RX-dropped: 0 RX-total: 274301894
360 TX-packets: 274293706 TX-dropped: 128 TX-total: 274293834
361 ----------------------------------------------------------------------------
363 +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
364 RX-packets: 548595696 RX-dropped: 0 RX-total: 548595696
365 TX-packets: 548595568 TX-dropped: 128 TX-total: 548595696
366 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
371 Clear the forwarding engines statistics::
373 testpmd> clear fwd stats all
378 Display an RX descriptor for a port RX queue::
380 testpmd> read rxd (port_id) (queue_id) (rxd_id)
384 testpmd> read rxd 0 0 4
385 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
390 Display a TX descriptor for a port TX queue::
392 testpmd> read txd (port_id) (queue_id) (txd_id)
396 testpmd> read txd 0 0 4
397 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
402 Get loaded dynamic device personalization (DDP) package info list::
404 testpmd> ddp get list (port_id)
409 Display information about dynamic device personalization (DDP) profile::
411 testpmd> ddp get info (profile_path)
416 Display VF statistics::
418 testpmd> show vf stats (port_id) (vf_id)
423 Reset VF statistics::
425 testpmd> clear vf stats (port_id) (vf_id)
427 show port pctype mapping
428 ~~~~~~~~~~~~~~~~~~~~~~~~
430 List all items from the pctype mapping table::
432 testpmd> show port (port_id) pctype mapping
434 show rx offloading capabilities
435 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
437 List all per queue and per port Rx offloading capabilities of a port::
439 testpmd> show port (port_id) rx_offload capabilities
441 show rx offloading configuration
442 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
444 List port level and all queue level Rx offloading configuration::
446 testpmd> show port (port_id) rx_offload configuration
448 show tx offloading capabilities
449 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
451 List all per queue and per port Tx offloading capabilities of a port::
453 testpmd> show port (port_id) tx_offload capabilities
455 show tx offloading configuration
456 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
458 List port level and all queue level Tx offloading configuration::
460 testpmd> show port (port_id) tx_offload configuration
462 show tx metadata setting
463 ~~~~~~~~~~~~~~~~~~~~~~~~
465 Show Tx metadata value set for a specific port::
467 testpmd> show port (port_id) tx_metadata
469 Configuration Functions
470 -----------------------
472 The testpmd application can be configured from the runtime as well as from the command-line.
474 This section details the available configuration functions that are available.
478 Configuration changes only become active when forwarding is started/restarted.
483 Reset forwarding to the default configuration::
490 Set the debug verbosity level::
492 testpmd> set verbose (level)
494 Available levels are as following:
496 * ``0`` silent except for error.
497 * ``1`` fully verbose except for Tx packets.
498 * ``2`` fully verbose except for Rx packets.
499 * ``> 2`` fully verbose.
504 Set the log level for a log type::
506 testpmd> set log global|(type) (level)
510 * ``type`` is the log name.
512 * ``level`` is the log level.
514 For example, to change the global log level::
515 testpmd> set log global (level)
517 Regexes can also be used for type. To change log level of user1, user2 and user3::
518 testpmd> set log user[1-3] (level)
523 Set the number of ports used by the application:
527 This is equivalent to the ``--nb-ports`` command-line option.
532 Set the number of cores used by the application::
534 testpmd> set nbcore (num)
536 This is equivalent to the ``--nb-cores`` command-line option.
540 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
545 Set the forwarding cores hexadecimal mask::
547 testpmd> set coremask (mask)
549 This is equivalent to the ``--coremask`` command-line option.
553 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
558 Set the forwarding ports hexadecimal mask::
560 testpmd> set portmask (mask)
562 This is equivalent to the ``--portmask`` command-line option.
567 Set number of packets per burst::
569 testpmd> set burst (num)
571 This is equivalent to the ``--burst command-line`` option.
573 When retry is enabled, the transmit delay time and number of retries can also be set::
575 testpmd> set burst tx delay (microseconds) retry (num)
580 Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
582 testpmd> set txpkts (x[,y]*)
584 Where x[,y]* represents a CSV list of values, without white space.
589 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
591 testpmd> set txsplit (off|on|rand)
595 * ``off`` disable packet copy & split for CSUM mode.
597 * ``on`` split outgoing packet into multiple segments. Size of each segment
598 and number of segments per packet is determined by ``set txpkts`` command
601 * ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
606 Set the list of forwarding cores::
608 testpmd> set corelist (x[,y]*)
610 For example, to change the forwarding cores:
612 .. code-block:: console
614 testpmd> set corelist 3,1
615 testpmd> show config fwd
617 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
618 Logical Core 3 (socket 0) forwards packets on 1 streams:
619 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
620 Logical Core 1 (socket 0) forwards packets on 1 streams:
621 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
625 The cores are used in the same order as specified on the command line.
630 Set the list of forwarding ports::
632 testpmd> set portlist (x[,y]*)
634 For example, to change the port forwarding:
636 .. code-block:: console
638 testpmd> set portlist 0,2,1,3
639 testpmd> show config fwd
641 io packet forwarding - ports=4 - cores=1 - streams=4
642 Logical Core 3 (socket 0) forwards packets on 4 streams:
643 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
644 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
645 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
646 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
651 Select how to retrieve new ports created after "port attach" command::
653 testpmd> set port setup on (iterator|event)
655 For each new port, a setup is done.
656 It will find the probed ports via RTE_ETH_FOREACH_MATCHING_DEV loop
657 in iterator mode, or via RTE_ETH_EVENT_NEW in event mode.
662 Enable/disable tx loopback::
664 testpmd> set tx loopback (port_id) (on|off)
669 set drop enable bit for all queues::
671 testpmd> set all queues drop (port_id) (on|off)
673 set split drop enable (for VF)
674 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
676 set split drop enable bit for VF from PF::
678 testpmd> set vf split drop (port_id) (vf_id) (on|off)
680 set mac antispoof (for VF)
681 ~~~~~~~~~~~~~~~~~~~~~~~~~~
683 Set mac antispoof for a VF from the PF::
685 testpmd> set vf mac antispoof (port_id) (vf_id) (on|off)
690 Enable/disable MACsec offload::
692 testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
693 testpmd> set macsec offload (port_id) off
698 Configure MACsec secure connection (SC)::
700 testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
704 The pi argument is ignored for tx.
705 Check the NIC Datasheet for hardware limits.
710 Configure MACsec secure association (SA)::
712 testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
716 The IDX value must be 0 or 1.
717 Check the NIC Datasheet for hardware limits.
719 set broadcast mode (for VF)
720 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
722 Set broadcast mode for a VF from the PF::
724 testpmd> set vf broadcast (port_id) (vf_id) (on|off)
729 Set the VLAN strip on a port::
731 testpmd> vlan set strip (on|off) (port_id)
736 Set the VLAN strip for a queue on a port::
738 testpmd> vlan set stripq (on|off) (port_id,queue_id)
740 vlan set stripq (for VF)
741 ~~~~~~~~~~~~~~~~~~~~~~~~
743 Set VLAN strip for all queues in a pool for a VF from the PF::
745 testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
747 vlan set insert (for VF)
748 ~~~~~~~~~~~~~~~~~~~~~~~~
750 Set VLAN insert for a VF from the PF::
752 testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
754 vlan set tag (for VF)
755 ~~~~~~~~~~~~~~~~~~~~~
757 Set VLAN tag for a VF from the PF::
759 testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
761 vlan set antispoof (for VF)
762 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
764 Set VLAN antispoof for a VF from the PF::
766 testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
771 Set the VLAN filter on a port::
773 testpmd> vlan set filter (on|off) (port_id)
778 Set the VLAN QinQ (extended queue in queue) on for a port::
780 testpmd> vlan set qinq (on|off) (port_id)
785 Set the inner or outer VLAN TPID for packet filtering on a port::
787 testpmd> vlan set (inner|outer) tpid (value) (port_id)
791 TPID value must be a 16-bit number (value <= 65536).
796 Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
798 testpmd> rx_vlan add (vlan_id|all) (port_id)
802 VLAN filter must be set on that port. VLAN ID < 4096.
803 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
804 in VFTA table. This is important if enabling all vlan_ids.
809 Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
811 testpmd> rx_vlan rm (vlan_id|all) (port_id)
816 Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
818 testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
823 Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
825 testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
830 Add a tunnel filter on a port::
832 testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
833 (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
834 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
836 The available information categories are:
838 * ``vxlan``: Set tunnel type as VXLAN.
840 * ``nvgre``: Set tunnel type as NVGRE.
842 * ``ipingre``: Set tunnel type as IP-in-GRE.
844 * ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
846 * ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
848 * ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
850 * ``imac``: Set filter type as Inner MAC.
852 * ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
854 * ``oip``: Set filter type as Outer IP.
856 * ``iip``: Set filter type as Inner IP.
860 testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
861 192.168.2.2 0 ipingre oip 1 1
863 Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
868 Remove a tunnel filter on a port::
870 testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
871 (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
872 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
877 Add an UDP port for VXLAN packet filter on a port::
879 testpmd> rx_vxlan_port add (udp_port) (port_id)
884 Remove an UDP port for VXLAN packet filter on a port::
886 testpmd> rx_vxlan_port rm (udp_port) (port_id)
891 Set hardware insertion of VLAN IDs in packets sent on a port::
893 testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
895 For example, set a single VLAN ID (5) insertion on port 0::
899 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
907 Set port based hardware insertion of VLAN ID in packets sent on a port::
909 testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
914 Disable hardware insertion of a VLAN header in packets sent on a port::
916 testpmd> tx_vlan reset (port_id)
921 Select hardware or software calculation of the checksum when
922 transmitting a packet using the ``csum`` forwarding engine::
924 testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)
928 * ``ip|udp|tcp|sctp`` always relate to the inner layer.
930 * ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
931 as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
932 supported). See also the ``csum parse-tunnel`` command.
934 * ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized
935 as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are
936 supported). See also the ``csum parse-tunnel`` command.
940 Check the NIC Datasheet for hardware limits.
945 Set RSS queue region span on a port::
947 testpmd> set port (port_id) queue-region region_id (value) \
948 queue_start_index (value) queue_num (value)
950 Set flowtype mapping on a RSS queue region on a port::
952 testpmd> set port (port_id) queue-region region_id (value) flowtype (value)
956 * For the flowtype(pctype) of packet,the specific index for each type has
957 been defined in file i40e_type.h as enum i40e_filter_pctype.
959 Set user priority mapping on a RSS queue region on a port::
961 testpmd> set port (port_id) queue-region UP (value) region_id (value)
963 Flush all queue region related configuration on a port::
965 testpmd> set port (port_id) queue-region flush (on|off)
969 * "on"is just an enable function which server for other configuration,
970 it is for all configuration about queue region from up layer,
971 at first will only keep in DPDK software stored in driver,
972 only after "flush on", it commit all configuration to HW.
973 "off" is just clean all configuration about queue region just now,
974 and restore all to DPDK i40e driver default config when start up.
976 Show all queue region related configuration info on a port::
978 testpmd> show port (port_id) queue-region
982 Queue region only support on PF by now, so these command is
983 only for configuration of queue region on PF port.
988 Define how tunneled packets should be handled by the csum forward
991 testpmd> csum parse-tunnel (on|off) (tx_port_id)
993 If enabled, the csum forward engine will try to recognize supported
994 tunnel headers (vxlan, gre, ipip).
996 If disabled, treat tunnel packets as non-tunneled packets (a inner
997 header is handled as a packet payload).
1001 The port argument is the TX port like in the ``csum set`` command.
1005 Consider a packet in packet like the following::
1007 eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
1009 * If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1010 command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
1011 ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``).
1013 * If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1014 command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
1019 Display tx checksum offload configuration::
1021 testpmd> csum show (port_id)
1026 Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
1028 testpmd> tso set (segsize) (port_id)
1032 Check the NIC datasheet for hardware limits.
1037 Display the status of TCP Segmentation Offload::
1039 testpmd> tso show (port_id)
1044 Enable or disable GRO in ``csum`` forwarding engine::
1046 testpmd> set port <port_id> gro on|off
1048 If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
1049 packets received from the given port.
1051 If disabled, packets received from the given port won't be performed
1052 GRO. By default, GRO is disabled for all ports.
1056 When enable GRO for a port, TCP/IPv4 packets received from the port
1057 will be performed GRO. After GRO, all merged packets have bad
1058 checksums, since the GRO library doesn't re-calculate checksums for
1059 the merged packets. Therefore, if users want the merged packets to
1060 have correct checksums, please select HW IP checksum calculation and
1061 HW TCP checksum calculation for the port which the merged packets are
1067 Display GRO configuration for a given port::
1069 testpmd> show port <port_id> gro
1074 Set the cycle to flush the GROed packets from reassembly tables::
1076 testpmd> set gro flush <cycles>
1078 When enable GRO, the csum forwarding engine performs GRO on received
1079 packets, and the GROed packets are stored in reassembly tables. Users
1080 can use this command to determine when the GROed packets are flushed
1081 from the reassembly tables.
1083 The ``cycles`` is measured in GRO operation times. The csum forwarding
1084 engine flushes the GROed packets from the tables every ``cycles`` GRO
1087 By default, the value of ``cycles`` is 1, which means flush GROed packets
1088 from the reassembly tables as soon as one GRO operation finishes. The value
1089 of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1091 Please note that the large value of ``cycles`` may cause the poor TCP/IP
1092 stack performance. Because the GROed packets are delayed to arrive the
1093 stack, thus causing more duplicated ACKs and TCP retransmissions.
1098 Toggle per-port GSO support in ``csum`` forwarding engine::
1100 testpmd> set port <port_id> gso on|off
1102 If enabled, the csum forwarding engine will perform GSO on supported IPv4
1103 packets, transmitted on the given port.
1105 If disabled, packets transmitted on the given port will not undergo GSO.
1106 By default, GSO is disabled for all ports.
1110 When GSO is enabled on a port, supported IPv4 packets transmitted on that
1111 port undergo GSO. Afterwards, the segmented packets are represented by
1112 multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1113 of checksums for GSO'd segments in SW. As a result, if users want correct
1114 checksums in GSO segments, they should enable HW checksum calculation for
1117 For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1118 by setting the following options in the csum forwarding engine:
1120 testpmd> csum set outer_ip hw <port_id>
1122 testpmd> csum set ip hw <port_id>
1124 testpmd> csum set tcp hw <port_id>
1126 UDP GSO is the same as IP fragmentation, which treats the UDP header
1127 as the payload and does not modify it during segmentation. That is,
1128 after UDP GSO, only the first output fragment has the original UDP
1129 header. Therefore, users need to enable HW IP checksum calculation
1130 and SW UDP checksum calculation for GSO-enabled ports, if they want
1131 correct checksums for UDP/IPv4 packets.
1136 Set the maximum GSO segment size (measured in bytes), which includes the
1137 packet header and the packet payload for GSO-enabled ports (global)::
1139 testpmd> set gso segsz <length>
1144 Display the status of Generic Segmentation Offload for a given port::
1146 testpmd> show port <port_id> gso
1151 Add an alternative MAC address to a port::
1153 testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1158 Remove a MAC address from a port::
1160 testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1162 mac_addr add (for VF)
1163 ~~~~~~~~~~~~~~~~~~~~~
1165 Add an alternative MAC address for a VF to a port::
1167 testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1172 Set the default MAC address for a port::
1174 testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1176 mac_addr set (for VF)
1177 ~~~~~~~~~~~~~~~~~~~~~
1179 Set the MAC address for a VF from the PF::
1181 testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1186 Set the forwarding peer address for certain port::
1188 testpmd> set eth-peer (port_id) (peer_addr)
1190 This is equivalent to the ``--eth-peer`` command-line option.
1195 Set the unicast hash filter(s) on/off for a port::
1197 testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1202 Set the promiscuous mode on for a port or for all ports.
1203 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1205 testpmd> set promisc (port_id|all) (on|off)
1210 Set the allmulti mode for a port or for all ports::
1212 testpmd> set allmulti (port_id|all) (on|off)
1214 Same as the ifconfig (8) option. Controls how multicast packets are handled.
1216 set promisc (for VF)
1217 ~~~~~~~~~~~~~~~~~~~~
1219 Set the unicast promiscuous mode for a VF from PF.
1220 It's supported by Intel i40e NICs now.
1221 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1223 testpmd> set vf promisc (port_id) (vf_id) (on|off)
1225 set allmulticast (for VF)
1226 ~~~~~~~~~~~~~~~~~~~~~~~~~
1228 Set the multicast promiscuous mode for a VF from PF.
1229 It's supported by Intel i40e NICs now.
1230 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1232 testpmd> set vf allmulti (port_id) (vf_id) (on|off)
1234 set tx max bandwidth (for VF)
1235 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1237 Set TX max absolute bandwidth (Mbps) for a VF from PF::
1239 testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
1241 set tc tx min bandwidth (for VF)
1242 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1244 Set all TCs' TX min relative bandwidth (%) for a VF from PF::
1246 testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
1248 set tc tx max bandwidth (for VF)
1249 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1251 Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
1253 testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
1255 set tc strict link priority mode
1256 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1258 Set some TCs' strict link priority mode on a physical port::
1260 testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1262 set tc tx min bandwidth
1263 ~~~~~~~~~~~~~~~~~~~~~~~
1265 Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
1267 testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
1272 Set the link flow control parameter on a port::
1274 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1275 (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1276 autoneg (on|off) (port_id)
1280 * ``high_water`` (integer): High threshold value to trigger XOFF.
1282 * ``low_water`` (integer): Low threshold value to trigger XON.
1284 * ``pause_time`` (integer): Pause quota in the Pause frame.
1286 * ``send_xon`` (0/1): Send XON frame.
1288 * ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1290 * ``autoneg``: Change the auto-negotiation parameter.
1295 Set the priority flow control parameter on a port::
1297 testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1298 (pause_time) (priority) (port_id)
1302 * ``high_water`` (integer): High threshold value.
1304 * ``low_water`` (integer): Low threshold value.
1306 * ``pause_time`` (integer): Pause quota in the Pause frame.
1308 * ``priority`` (0-7): VLAN User Priority.
1313 Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1315 testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1317 For example, to set rx queue 2 on port 0 to mapping 5::
1319 testpmd>set stat_qmap rx 0 2 5
1321 set xstats-hide-zero
1322 ~~~~~~~~~~~~~~~~~~~~
1324 Set the option to hide zero values for xstats display::
1326 testpmd> set xstats-hide-zero on|off
1330 By default, the zero values are displayed for xstats.
1332 set port - rx/tx (for VF)
1333 ~~~~~~~~~~~~~~~~~~~~~~~~~
1335 Set VF receive/transmit from a port::
1337 testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1339 set port - mac address filter (for VF)
1340 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1342 Add/Remove unicast or multicast MAC addr filter for a VF::
1344 testpmd> set port (port_id) vf (vf_id) (mac_addr) \
1345 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
1347 set port - rx mode(for VF)
1348 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1350 Set the VF receive mode of a port::
1352 testpmd> set port (port_id) vf (vf_id) \
1353 rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1355 The available receive modes are:
1357 * ``AUPE``: Accepts untagged VLAN.
1359 * ``ROPE``: Accepts unicast hash.
1361 * ``BAM``: Accepts broadcast packets.
1363 * ``MPE``: Accepts all multicast packets.
1365 set port - tx_rate (for Queue)
1366 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1368 Set TX rate limitation for a queue on a port::
1370 testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1372 set port - tx_rate (for VF)
1373 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1375 Set TX rate limitation for queues in VF on a port::
1377 testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1379 set port - mirror rule
1380 ~~~~~~~~~~~~~~~~~~~~~~
1382 Set pool or vlan type mirror rule for a port::
1384 testpmd> set port (port_id) mirror-rule (rule_id) \
1385 (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1386 (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1388 Set link mirror rule for a port::
1390 testpmd> set port (port_id) mirror-rule (rule_id) \
1391 (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1393 For example to enable mirror traffic with vlan 0,1 to pool 0::
1395 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1397 reset port - mirror rule
1398 ~~~~~~~~~~~~~~~~~~~~~~~~
1400 Reset a mirror rule for a port::
1402 testpmd> reset port (port_id) mirror-rule (rule_id)
1407 Set the flush on RX streams before forwarding.
1408 The default is flush ``on``.
1409 Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1411 testpmd> set flush_rx off
1416 Set the bypass mode for the lowest port on bypass enabled NIC::
1418 testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1423 Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1425 testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1426 mode (normal|bypass|isolate) (port_id)
1430 * ``timeout``: Enable bypass after watchdog timeout.
1432 * ``os_on``: Enable bypass when OS/board is powered on.
1434 * ``os_off``: Enable bypass when OS/board is powered off.
1436 * ``power_on``: Enable bypass when power supply is turned on.
1438 * ``power_off``: Enable bypass when power supply is turned off.
1444 Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1446 testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1451 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1453 testpmd> show bypass config (port_id)
1458 Set link up for a port::
1460 testpmd> set link-up port (port id)
1465 Set link down for a port::
1467 testpmd> set link-down port (port id)
1472 Enable E-tag insertion for a VF on a port::
1474 testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1476 Disable E-tag insertion for a VF on a port::
1478 testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1480 Enable/disable E-tag stripping on a port::
1482 testpmd> E-tag set stripping (on|off) port (port_id)
1484 Enable/disable E-tag based forwarding on a port::
1486 testpmd> E-tag set forwarding (on|off) port (port_id)
1488 Add an E-tag forwarding filter on a port::
1490 testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1492 Delete an E-tag forwarding filter on a port::
1493 testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1498 Load a dynamic device personalization (DDP) profile and store backup profile::
1500 testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1505 Delete a dynamic device personalization profile and restore backup profile::
1507 testpmd> ddp del (port_id) (backup_profile_path)
1512 List all items from the ptype mapping table::
1514 testpmd> ptype mapping get (port_id) (valid_only)
1518 * ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1520 Replace a specific or a group of software defined ptype with a new one::
1522 testpmd> ptype mapping replace (port_id) (target) (mask) (pkt_type)
1526 * ``target``: A specific software ptype or a mask to represent a group of software ptypes.
1528 * ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1).
1530 * ``pkt_type``: The new software ptype to replace the old ones.
1532 Update hardware defined ptype to software defined packet type mapping table::
1534 testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1538 * ``hw_ptype``: hardware ptype as the index of the ptype mapping table.
1540 * ``sw_ptype``: software ptype as the value of the ptype mapping table.
1542 Reset ptype mapping table::
1544 testpmd> ptype mapping reset (port_id)
1546 config per port Rx offloading
1547 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1549 Enable or disable a per port Rx offloading on all Rx queues of a port::
1551 testpmd> port config (port_id) rx_offload (offloading) on|off
1553 * ``offloading``: can be any of these offloading capability:
1554 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1555 qinq_strip, outer_ipv4_cksum, macsec_strip,
1556 header_split, vlan_filter, vlan_extend, jumbo_frame,
1557 crc_strip, scatter, timestamp, security, keep_crc
1559 This command should be run when the port is stopped, or else it will fail.
1561 config per queue Rx offloading
1562 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1564 Enable or disable a per queue Rx offloading only on a specific Rx queue::
1566 testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
1568 * ``offloading``: can be any of these offloading capability:
1569 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1570 qinq_strip, outer_ipv4_cksum, macsec_strip,
1571 header_split, vlan_filter, vlan_extend, jumbo_frame,
1572 crc_strip, scatter, timestamp, security, keep_crc
1574 This command should be run when the port is stopped, or else it will fail.
1576 config per port Tx offloading
1577 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1579 Enable or disable a per port Tx offloading on all Tx queues of a port::
1581 testpmd> port config (port_id) tx_offload (offloading) on|off
1583 * ``offloading``: can be any of these offloading capability:
1584 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1585 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1586 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1587 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1588 mt_lockfree, multi_segs, mbuf_fast_free, security,
1591 This command should be run when the port is stopped, or else it will fail.
1593 config per queue Tx offloading
1594 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1596 Enable or disable a per queue Tx offloading only on a specific Tx queue::
1598 testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
1600 * ``offloading``: can be any of these offloading capability:
1601 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1602 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1603 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1604 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1605 mt_lockfree, multi_segs, mbuf_fast_free, security
1607 This command should be run when the port is stopped, or else it will fail.
1609 Config VXLAN Encap outer layers
1610 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1612 Configure the outer layer to encapsulate a packet inside a VXLAN tunnel::
1614 set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1615 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \
1618 set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1619 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1620 eth-src (eth-src) eth-dst (eth-dst)
1622 set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1623 udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) \
1624 ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1626 Those command will set an internal configuration inside testpmd, any following
1627 flow rule using the action vxlan_encap will use the last configuration set.
1628 To have a different encapsulation header, one of those commands must be called
1629 before the flow rule creation.
1631 Config NVGRE Encap outer layers
1632 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1634 Configure the outer layer to encapsulate a packet inside a NVGRE tunnel::
1636 set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \
1637 eth-src (eth-src) eth-dst (eth-dst)
1638 set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \
1639 ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1641 Those command will set an internal configuration inside testpmd, any following
1642 flow rule using the action nvgre_encap will use the last configuration set.
1643 To have a different encapsulation header, one of those commands must be called
1644 before the flow rule creation.
1649 Configure the l2 to be used when encapsulating a packet with L2::
1651 set l2_encap ip-version (ipv4|ipv6) eth-src (eth-src) eth-dst (eth-dst)
1652 set l2_encap-with-vlan ip-version (ipv4|ipv6) vlan-tci (vlan-tci) \
1653 eth-src (eth-src) eth-dst (eth-dst)
1655 Those commands will set an internal configuration inside testpmd, any following
1656 flow rule using the action l2_encap will use the last configuration set.
1657 To have a different encapsulation header, one of those commands must be called
1658 before the flow rule creation.
1663 Configure the l2 to be removed when decapsulating a packet with L2::
1665 set l2_decap ip-version (ipv4|ipv6)
1666 set l2_decap-with-vlan ip-version (ipv4|ipv6)
1668 Those commands will set an internal configuration inside testpmd, any following
1669 flow rule using the action l2_decap will use the last configuration set.
1670 To have a different encapsulation header, one of those commands must be called
1671 before the flow rule creation.
1673 Config MPLSoGRE Encap outer layers
1674 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1676 Configure the outer layer to encapsulate a packet inside a MPLSoGRE tunnel::
1678 set mplsogre_encap ip-version (ipv4|ipv6) label (label) \
1679 ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1680 set mplsogre_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1681 ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1682 eth-src (eth-src) eth-dst (eth-dst)
1684 Those command will set an internal configuration inside testpmd, any following
1685 flow rule using the action mplsogre_encap will use the last configuration set.
1686 To have a different encapsulation header, one of those commands must be called
1687 before the flow rule creation.
1689 Config MPLSoGRE Decap outer layers
1690 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1692 Configure the outer layer to decapsulate MPLSoGRE packet::
1694 set mplsogre_decap ip-version (ipv4|ipv6)
1695 set mplsogre_decap-with-vlan ip-version (ipv4|ipv6)
1697 Those command will set an internal configuration inside testpmd, any following
1698 flow rule using the action mplsogre_decap will use the last configuration set.
1699 To have a different decapsulation header, one of those commands must be called
1700 before the flow rule creation.
1702 Config MPLSoUDP Encap outer layers
1703 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1705 Configure the outer layer to encapsulate a packet inside a MPLSoUDP tunnel::
1707 set mplsoudp_encap ip-version (ipv4|ipv6) label (label) udp-src (udp-src) \
1708 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1709 eth-src (eth-src) eth-dst (eth-dst)
1710 set mplsoudp_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1711 udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1712 vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1714 Those command will set an internal configuration inside testpmd, any following
1715 flow rule using the action mplsoudp_encap will use the last configuration set.
1716 To have a different encapsulation header, one of those commands must be called
1717 before the flow rule creation.
1719 Config MPLSoUDP Decap outer layers
1720 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1722 Configure the outer layer to decapsulate MPLSoUDP packet::
1724 set mplsoudp_decap ip-version (ipv4|ipv6)
1725 set mplsoudp_decap-with-vlan ip-version (ipv4|ipv6)
1727 Those command will set an internal configuration inside testpmd, any following
1728 flow rule using the action mplsoudp_decap will use the last configuration set.
1729 To have a different decapsulation header, one of those commands must be called
1730 before the flow rule creation.
1735 The following sections show functions for configuring ports.
1739 Port configuration changes only become active when forwarding is started/restarted.
1744 Attach a port specified by pci address or virtual device args::
1746 testpmd> port attach (identifier)
1748 To attach a new pci device, the device should be recognized by kernel first.
1749 Then it should be moved under DPDK management.
1750 Finally the port can be attached to testpmd.
1752 For example, to move a pci device using ixgbe under DPDK management:
1754 .. code-block:: console
1756 # Check the status of the available devices.
1757 ./usertools/dpdk-devbind.py --status
1759 Network devices using DPDK-compatible driver
1760 ============================================
1763 Network devices using kernel driver
1764 ===================================
1765 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1768 # Bind the device to igb_uio.
1769 sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1772 # Recheck the status of the devices.
1773 ./usertools/dpdk-devbind.py --status
1774 Network devices using DPDK-compatible driver
1775 ============================================
1776 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1778 To attach a port created by virtual device, above steps are not needed.
1780 For example, to attach a port whose pci address is 0000:0a:00.0.
1782 .. code-block:: console
1784 testpmd> port attach 0000:0a:00.0
1785 Attaching a new port...
1786 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1787 EAL: probe driver: 8086:10fb rte_ixgbe_pmd
1788 EAL: PCI memory mapped at 0x7f83bfa00000
1789 EAL: PCI memory mapped at 0x7f83bfa80000
1790 PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1791 PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1792 Port 0 is attached. Now total ports is 1
1795 For example, to attach a port created by pcap PMD.
1797 .. code-block:: console
1799 testpmd> port attach net_pcap0
1800 Attaching a new port...
1801 PMD: Initializing pmd_pcap for net_pcap0
1802 PMD: Creating pcap-backed ethdev on numa socket 0
1803 Port 0 is attached. Now total ports is 1
1806 In this case, identifier is ``net_pcap0``.
1807 This identifier format is the same as ``--vdev`` format of DPDK applications.
1809 For example, to re-attach a bonded port which has been previously detached,
1810 the mode and slave parameters must be given.
1812 .. code-block:: console
1814 testpmd> port attach net_bond_0,mode=0,slave=1
1815 Attaching a new port...
1816 EAL: Initializing pmd_bond for net_bond_0
1817 EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
1818 Port 0 is attached. Now total ports is 1
1825 Detach a specific port::
1827 testpmd> port detach (port_id)
1829 Before detaching a port, the port should be stopped and closed.
1831 For example, to detach a pci device port 0.
1833 .. code-block:: console
1835 testpmd> port stop 0
1838 testpmd> port close 0
1842 testpmd> port detach 0
1844 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1845 EAL: remove driver: 8086:10fb rte_ixgbe_pmd
1846 EAL: PCI memory unmapped at 0x7f83bfa00000
1847 EAL: PCI memory unmapped at 0x7f83bfa80000
1851 For example, to detach a virtual device port 0.
1853 .. code-block:: console
1855 testpmd> port stop 0
1858 testpmd> port close 0
1862 testpmd> port detach 0
1864 PMD: Closing pcap ethdev on numa socket 0
1865 Port 'net_pcap0' is detached. Now total ports is 0
1868 To remove a pci device completely from the system, first detach the port from testpmd.
1869 Then the device should be moved under kernel management.
1870 Finally the device can be removed using kernel pci hotplug functionality.
1872 For example, to move a pci device under kernel management:
1874 .. code-block:: console
1876 sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
1878 ./usertools/dpdk-devbind.py --status
1880 Network devices using DPDK-compatible driver
1881 ============================================
1884 Network devices using kernel driver
1885 ===================================
1886 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
1888 To remove a port created by a virtual device, above steps are not needed.
1893 Start all ports or a specific port::
1895 testpmd> port start (port_id|all)
1900 Stop all ports or a specific port::
1902 testpmd> port stop (port_id|all)
1907 Close all ports or a specific port::
1909 testpmd> port close (port_id|all)
1911 port config - queue ring size
1912 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1914 Configure a rx/tx queue ring size::
1916 testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
1918 Only take effect after command that (re-)start the port or command that setup specific queue.
1920 port start/stop queue
1921 ~~~~~~~~~~~~~~~~~~~~~
1923 Start/stop a rx/tx queue on a specific port::
1925 testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1927 port config - queue deferred start
1928 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1930 Switch on/off deferred start of a specific port queue::
1932 testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
1935 ~~~~~~~~~~~~~~~~~~~~~
1937 Setup a rx/tx queue on a specific port::
1939 testpmd> port (port_id) (rxq|txq) (queue_id) setup
1941 Only take effect when port is started.
1946 Set the speed and duplex mode for all ports or a specific port::
1948 testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|auto) \
1949 duplex (half|full|auto)
1951 port config - queues/descriptors
1952 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1954 Set number of queues/descriptors for rxq, txq, rxd and txd::
1956 testpmd> port config all (rxq|txq|rxd|txd) (value)
1958 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1960 port config - max-pkt-len
1961 ~~~~~~~~~~~~~~~~~~~~~~~~~
1963 Set the maximum packet length::
1965 testpmd> port config all max-pkt-len (value)
1967 This is equivalent to the ``--max-pkt-len`` command-line option.
1969 port config - CRC Strip
1970 ~~~~~~~~~~~~~~~~~~~~~~~
1972 Set hardware CRC stripping on or off for all ports::
1974 testpmd> port config all crc-strip (on|off)
1976 CRC stripping is on by default.
1978 The ``off`` option is equivalent to the ``--disable-crc-strip`` command-line option.
1980 port config - scatter
1981 ~~~~~~~~~~~~~~~~~~~~~~~
1983 Set RX scatter mode on or off for all ports::
1985 testpmd> port config all scatter (on|off)
1987 RX scatter mode is off by default.
1989 The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1991 port config - RX Checksum
1992 ~~~~~~~~~~~~~~~~~~~~~~~~~
1994 Set hardware RX checksum offload to on or off for all ports::
1996 testpmd> port config all rx-cksum (on|off)
1998 Checksum offload is off by default.
2000 The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
2005 Set hardware VLAN on or off for all ports::
2007 testpmd> port config all hw-vlan (on|off)
2009 Hardware VLAN is off by default.
2011 The ``on`` option is equivalent to the ``--enable-hw-vlan`` command-line option.
2013 port config - VLAN filter
2014 ~~~~~~~~~~~~~~~~~~~~~~~~~
2016 Set hardware VLAN filter on or off for all ports::
2018 testpmd> port config all hw-vlan-filter (on|off)
2020 Hardware VLAN filter is off by default.
2022 The ``on`` option is equivalent to the ``--enable-hw-vlan-filter`` command-line option.
2024 port config - VLAN strip
2025 ~~~~~~~~~~~~~~~~~~~~~~~~
2027 Set hardware VLAN strip on or off for all ports::
2029 testpmd> port config all hw-vlan-strip (on|off)
2031 Hardware VLAN strip is off by default.
2033 The ``on`` option is equivalent to the ``--enable-hw-vlan-strip`` command-line option.
2035 port config - VLAN extend
2036 ~~~~~~~~~~~~~~~~~~~~~~~~~
2038 Set hardware VLAN extend on or off for all ports::
2040 testpmd> port config all hw-vlan-extend (on|off)
2042 Hardware VLAN extend is off by default.
2044 The ``on`` option is equivalent to the ``--enable-hw-vlan-extend`` command-line option.
2046 port config - Drop Packets
2047 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2049 Set packet drop for packets with no descriptors on or off for all ports::
2051 testpmd> port config all drop-en (on|off)
2053 Packet dropping for packets with no descriptors is off by default.
2055 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
2060 Set the RSS (Receive Side Scaling) mode on or off::
2062 testpmd> port config all rss (all|default|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)
2064 RSS is on by default.
2066 The ``all`` option is equivalent to ip|tcp|udp|sctp|ether.
2067 The ``default`` option enables all supported RSS types reported by device info.
2068 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
2070 port config - RSS Reta
2071 ~~~~~~~~~~~~~~~~~~~~~~
2073 Set the RSS (Receive Side Scaling) redirection table::
2075 testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
2080 Set the DCB mode for an individual port::
2082 testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
2084 The traffic class should be 4 or 8.
2089 Set the number of packets per burst::
2091 testpmd> port config all burst (value)
2093 This is equivalent to the ``--burst`` command-line option.
2095 port config - Threshold
2096 ~~~~~~~~~~~~~~~~~~~~~~~
2098 Set thresholds for TX/RX queues::
2100 testpmd> port config all (threshold) (value)
2102 Where the threshold type can be:
2104 * ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
2106 * ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
2108 * ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
2110 * ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
2112 * ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
2114 * ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
2116 * ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
2118 * ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
2120 * ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
2122 These threshold options are also available from the command-line.
2127 Set the value of ether-type for E-tag::
2129 testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
2131 Enable/disable the E-tag support::
2133 testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
2135 port config pctype mapping
2136 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2138 Reset pctype mapping table::
2140 testpmd> port config (port_id) pctype mapping reset
2142 Update hardware defined pctype to software defined flow type mapping table::
2144 testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
2148 * ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
2150 * ``flow_type_id``: software flow type id as the index of the pctype mapping table.
2152 port config input set
2153 ~~~~~~~~~~~~~~~~~~~~~
2155 Config RSS/FDIR/FDIR flexible payload input set for some pctype::
2156 testpmd> port config (port_id) pctype (pctype_id) \
2157 (hash_inset|fdir_inset|fdir_flx_inset) \
2158 (get|set|clear) field (field_idx)
2160 Clear RSS/FDIR/FDIR flexible payload input set for some pctype::
2161 testpmd> port config (port_id) pctype (pctype_id) \
2162 (hash_inset|fdir_inset|fdir_flx_inset) clear all
2166 * ``pctype_id``: hardware packet classification types.
2167 * ``field_idx``: hardware field index.
2169 port config udp_tunnel_port
2170 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2172 Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols::
2173 testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve (udp_port)
2175 port config tx_metadata
2176 ~~~~~~~~~~~~~~~~~~~~~~~
2178 Set Tx metadata value per port.
2179 testpmd will add this value to any Tx packet sent from this port::
2181 testpmd> port config (port_id) tx_metadata (value)
2183 Link Bonding Functions
2184 ----------------------
2186 The Link Bonding functions make it possible to dynamically create and
2187 manage link bonding devices from within testpmd interactive prompt.
2189 create bonded device
2190 ~~~~~~~~~~~~~~~~~~~~
2192 Create a new bonding device::
2194 testpmd> create bonded device (mode) (socket)
2196 For example, to create a bonded device in mode 1 on socket 0::
2198 testpmd> create bonded device 1 0
2199 created new bonded device (port X)
2204 Adds Ethernet device to a Link Bonding device::
2206 testpmd> add bonding slave (slave id) (port id)
2208 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2210 testpmd> add bonding slave 6 10
2213 remove bonding slave
2214 ~~~~~~~~~~~~~~~~~~~~
2216 Removes an Ethernet slave device from a Link Bonding device::
2218 testpmd> remove bonding slave (slave id) (port id)
2220 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2222 testpmd> remove bonding slave 6 10
2227 Set the Link Bonding mode of a Link Bonding device::
2229 testpmd> set bonding mode (value) (port id)
2231 For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
2233 testpmd> set bonding mode 3 10
2238 Set an Ethernet slave device as the primary device on a Link Bonding device::
2240 testpmd> set bonding primary (slave id) (port id)
2242 For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
2244 testpmd> set bonding primary 6 10
2249 Set the MAC address of a Link Bonding device::
2251 testpmd> set bonding mac (port id) (mac)
2253 For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
2255 testpmd> set bonding mac 10 00:00:00:00:00:01
2257 set bonding xmit_balance_policy
2258 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2260 Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
2262 testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
2264 For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
2266 testpmd> set bonding xmit_balance_policy 10 l34
2269 set bonding mon_period
2270 ~~~~~~~~~~~~~~~~~~~~~~
2272 Set the link status monitoring polling period in milliseconds for a bonding device.
2274 This adds support for PMD slave devices which do not support link status interrupts.
2275 When the mon_period is set to a value greater than 0 then all PMD's which do not support
2276 link status ISR will be queried every polling interval to check if their link status has changed::
2278 testpmd> set bonding mon_period (port_id) (value)
2280 For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
2282 testpmd> set bonding mon_period 5 150
2285 set bonding lacp dedicated_queue
2286 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2288 Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2289 when in mode 4 (link-aggregration-802.3ad)::
2291 testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2294 set bonding agg_mode
2295 ~~~~~~~~~~~~~~~~~~~~
2297 Enable one of the specific aggregators mode when in mode 4 (link-aggregration-802.3ad)::
2299 testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable)
2305 Show the current configuration of a Link Bonding device::
2307 testpmd> show bonding config (port id)
2310 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2311 in balance mode with a transmission policy of layer 2+3::
2313 testpmd> show bonding config 9
2315 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
2317 Active Slaves (3): [1 3 4]
2324 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2325 This is mainly useful for debugging purposes.
2326 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2327 and fields that can be accessed.
2332 Display the value of a port register::
2334 testpmd> read reg (port_id) (address)
2336 For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
2338 testpmd> read reg 0 0xEE00
2339 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
2344 Display a port register bit field::
2346 testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2348 For example, reading the lowest two bits from the register in the example above::
2350 testpmd> read regfield 0 0xEE00 0 1
2351 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
2356 Display a single port register bit::
2358 testpmd> read regbit (port_id) (address) (bit_x)
2360 For example, reading the lowest bit from the register in the example above::
2362 testpmd> read regbit 0 0xEE00 0
2363 port 0 PCI register at offset 0xEE00: bit 0=1
2368 Set the value of a port register::
2370 testpmd> write reg (port_id) (address) (value)
2372 For example, to clear a register::
2374 testpmd> write reg 0 0xEE00 0x0
2375 port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2380 Set bit field of a port register::
2382 testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2384 For example, writing to the register cleared in the example above::
2386 testpmd> write regfield 0 0xEE00 0 1 2
2387 port 0 PCI register at offset 0xEE00: 0x00000002 (2)
2392 Set single bit value of a port register::
2394 testpmd> write regbit (port_id) (address) (bit_x) (value)
2396 For example, to set the high bit in the register from the example above::
2398 testpmd> write regbit 0 0xEE00 31 1
2399 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
2401 Traffic Metering and Policing
2402 -----------------------------
2404 The following section shows functions for configuring traffic metering and
2405 policing on the ethernet device through the use of generic ethdev API.
2407 show port traffic management capability
2408 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2410 Show traffic metering and policing capability of the port::
2412 testpmd> show port meter cap (port_id)
2414 add port meter profile (srTCM rfc2967)
2415 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2417 Add meter profile (srTCM rfc2697) to the ethernet device::
2419 testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2424 * ``profile_id``: ID for the meter profile.
2425 * ``cir``: Committed Information Rate (CIR) (bytes/second).
2426 * ``cbs``: Committed Burst Size (CBS) (bytes).
2427 * ``ebs``: Excess Burst Size (EBS) (bytes).
2429 add port meter profile (trTCM rfc2968)
2430 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2432 Add meter profile (srTCM rfc2698) to the ethernet device::
2434 testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2435 (cir) (pir) (cbs) (pbs)
2439 * ``profile_id``: ID for the meter profile.
2440 * ``cir``: Committed information rate (bytes/second).
2441 * ``pir``: Peak information rate (bytes/second).
2442 * ``cbs``: Committed burst size (bytes).
2443 * ``pbs``: Peak burst size (bytes).
2445 add port meter profile (trTCM rfc4115)
2446 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2448 Add meter profile (trTCM rfc4115) to the ethernet device::
2450 testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2451 (cir) (eir) (cbs) (ebs)
2455 * ``profile_id``: ID for the meter profile.
2456 * ``cir``: Committed information rate (bytes/second).
2457 * ``eir``: Excess information rate (bytes/second).
2458 * ``cbs``: Committed burst size (bytes).
2459 * ``ebs``: Excess burst size (bytes).
2461 delete port meter profile
2462 ~~~~~~~~~~~~~~~~~~~~~~~~~
2464 Delete meter profile from the ethernet device::
2466 testpmd> del port meter profile (port_id) (profile_id)
2471 Create new meter object for the ethernet device::
2473 testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2474 (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \
2475 (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2480 * ``mtr_id``: meter object ID.
2481 * ``profile_id``: ID for the meter profile.
2482 * ``meter_enable``: When this parameter has a non-zero value, the meter object
2483 gets enabled at the time of creation, otherwise remains disabled.
2484 * ``g_action``: Policer action for the packet with green color.
2485 * ``y_action``: Policer action for the packet with yellow color.
2486 * ``r_action``: Policer action for the packet with red color.
2487 * ``stats_mask``: Mask of statistics counter types to be enabled for the
2489 * ``shared``: When this parameter has a non-zero value, the meter object is
2490 shared by multiple flows. Otherwise, meter object is used by single flow.
2491 * ``use_pre_meter_color``: When this parameter has a non-zero value, the
2492 input color for the current meter object is determined by the latest meter
2493 object in the same flow. Otherwise, the current meter object uses the
2494 *dscp_table* to determine the input color.
2495 * ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2496 color, 0 <= x <= 63.
2501 Enable meter for the ethernet device::
2503 testpmd> enable port meter (port_id) (mtr_id)
2508 Disable meter for the ethernet device::
2510 testpmd> disable port meter (port_id) (mtr_id)
2515 Delete meter for the ethernet device::
2517 testpmd> del port meter (port_id) (mtr_id)
2519 Set port meter profile
2520 ~~~~~~~~~~~~~~~~~~~~~~
2522 Set meter profile for the ethernet device::
2524 testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2526 set port meter dscp table
2527 ~~~~~~~~~~~~~~~~~~~~~~~~~
2529 Set meter dscp table for the ethernet device::
2531 testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \
2532 (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2534 set port meter policer action
2535 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2537 Set meter policer action for the ethernet device::
2539 testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \
2540 (action0) [(action1) (action1)]
2544 * ``action_mask``: Bit mask indicating which policer actions need to be
2545 updated. One or more policer actions can be updated in a single function
2546 invocation. To update the policer action associated with color C, bit
2547 (1 << C) needs to be set in *action_mask* and element at position C
2548 in the *actions* array needs to be valid.
2549 * ``actionx``: Policer action for the color x,
2550 RTE_MTR_GREEN <= x < RTE_MTR_COLORS
2552 set port meter stats mask
2553 ~~~~~~~~~~~~~~~~~~~~~~~~~
2555 Set meter stats mask for the ethernet device::
2557 testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2561 * ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2563 show port meter stats
2564 ~~~~~~~~~~~~~~~~~~~~~
2566 Show meter stats of the ethernet device::
2568 testpmd> show port meter stats (port_id) (mtr_id) (clear)
2572 * ``clear``: Flag that indicates whether the statistics counters should
2573 be cleared (i.e. set to zero) immediately after they have been read or not.
2578 The following section shows functions for configuring traffic management on
2579 on the ethernet device through the use of generic TM API.
2581 show port traffic management capability
2582 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2584 Show traffic management capability of the port::
2586 testpmd> show port tm cap (port_id)
2588 show port traffic management capability (hierarchy level)
2589 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2591 Show traffic management hierarchy level capability of the port::
2593 testpmd> show port tm level cap (port_id) (level_id)
2595 show port traffic management capability (hierarchy node level)
2596 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2598 Show the traffic management hierarchy node capability of the port::
2600 testpmd> show port tm node cap (port_id) (node_id)
2602 show port traffic management hierarchy node type
2603 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2605 Show the port traffic management hierarchy node type::
2607 testpmd> show port tm node type (port_id) (node_id)
2609 show port traffic management hierarchy node stats
2610 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2612 Show the port traffic management hierarchy node statistics::
2614 testpmd> show port tm node stats (port_id) (node_id) (clear)
2618 * ``clear``: When this parameter has a non-zero value, the statistics counters
2619 are cleared (i.e. set to zero) immediately after they have been read,
2620 otherwise the statistics counters are left untouched.
2622 Add port traffic management private shaper profile
2623 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2625 Add the port traffic management private shaper profile::
2627 testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2628 (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size) \
2629 (packet_length_adjust)
2633 * ``shaper_profile id``: Shaper profile ID for the new profile.
2634 * ``cmit_tb_rate``: Committed token bucket rate (bytes per second).
2635 * ``cmit_tb_size``: Committed token bucket size (bytes).
2636 * ``peak_tb_rate``: Peak token bucket rate (bytes per second).
2637 * ``peak_tb_size``: Peak token bucket size (bytes).
2638 * ``packet_length_adjust``: The value (bytes) to be added to the length of
2639 each packet for the purpose of shaping. This parameter value can be used to
2640 correct the packet length with the framing overhead bytes that are consumed
2643 Delete port traffic management private shaper profile
2644 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2646 Delete the port traffic management private shaper::
2648 testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2652 * ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2654 Add port traffic management shared shaper
2655 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2657 Create the port traffic management shared shaper::
2659 testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2664 * ``shared_shaper_id``: Shared shaper ID to be created.
2665 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2667 Set port traffic management shared shaper
2668 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2670 Update the port traffic management shared shaper::
2672 testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2677 * ``shared_shaper_id``: Shared shaper ID to be update.
2678 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2680 Delete port traffic management shared shaper
2681 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2683 Delete the port traffic management shared shaper::
2685 testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2689 * ``shared_shaper_id``: Shared shaper ID to be deleted.
2691 Set port traffic management hiearchy node private shaper
2692 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2694 set the port traffic management hierarchy node private shaper::
2696 testpmd> set port tm node shaper profile (port_id) (node_id) \
2701 * ``shaper_profile id``: Private shaper profile ID to be enabled on the
2704 Add port traffic management WRED profile
2705 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2707 Create a new WRED profile::
2709 testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2710 (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2711 (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2712 (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2716 * ``wred_profile id``: Identifier for the newly create WRED profile
2717 * ``color_g``: Packet color (green)
2718 * ``min_th_g``: Minimum queue threshold for packet with green color
2719 * ``max_th_g``: Minimum queue threshold for packet with green color
2720 * ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2721 * ``wq_log2_g``: Negated log2 of queue weight (wq)
2722 * ``color_y``: Packet color (yellow)
2723 * ``min_th_y``: Minimum queue threshold for packet with yellow color
2724 * ``max_th_y``: Minimum queue threshold for packet with yellow color
2725 * ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2726 * ``wq_log2_y``: Negated log2 of queue weight (wq)
2727 * ``color_r``: Packet color (red)
2728 * ``min_th_r``: Minimum queue threshold for packet with yellow color
2729 * ``max_th_r``: Minimum queue threshold for packet with yellow color
2730 * ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2731 * ``wq_log2_r``: Negated log2 of queue weight (wq)
2733 Delete port traffic management WRED profile
2734 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2736 Delete the WRED profile::
2738 testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2740 Add port traffic management hierarchy nonleaf node
2741 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2743 Add nonleaf node to port traffic management hiearchy::
2745 testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2746 (priority) (weight) (level_id) (shaper_profile_id) \
2747 (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2748 [(shared_shaper_0) (shared_shaper_1) ...] \
2752 * ``parent_node_id``: Node ID of the parent.
2753 * ``priority``: Node priority (highest node priority is zero). This is used by
2754 the SP algorithm running on the parent node for scheduling this node.
2755 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2756 to the weight sum of all siblings that have the same priority. It is used by
2757 the WFQ algorithm running on the parent node for scheduling this node.
2758 * ``level_id``: Hiearchy level of the node.
2759 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2761 * ``n_sp_priorities``: Number of strict priorities.
2762 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2763 * ``n_shared_shapers``: Number of shared shapers.
2764 * ``shared_shaper_id``: Shared shaper id.
2766 Add port traffic management hierarchy leaf node
2767 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2769 Add leaf node to port traffic management hiearchy::
2771 testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2772 (priority) (weight) (level_id) (shaper_profile_id) \
2773 (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2774 [(shared_shaper_id) (shared_shaper_id) ...] \
2778 * ``parent_node_id``: Node ID of the parent.
2779 * ``priority``: Node priority (highest node priority is zero). This is used by
2780 the SP algorithm running on the parent node for scheduling this node.
2781 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2782 to the weight sum of all siblings that have the same priority. It is used by
2783 the WFQ algorithm running on the parent node for scheduling this node.
2784 * ``level_id``: Hiearchy level of the node.
2785 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2787 * ``cman_mode``: Congestion management mode to be enabled for this node.
2788 * ``wred_profile_id``: WRED profile id to be enabled for this node.
2789 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2790 * ``n_shared_shapers``: Number of shared shapers.
2791 * ``shared_shaper_id``: Shared shaper id.
2793 Delete port traffic management hierarchy node
2794 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2796 Delete node from port traffic management hiearchy::
2798 testpmd> del port tm node (port_id) (node_id)
2800 Update port traffic management hierarchy parent node
2801 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2803 Update port traffic management hierarchy parent node::
2805 testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
2808 This function can only be called after the hierarchy commit invocation. Its
2809 success depends on the port support for this operation, as advertised through
2810 the port capability set. This function is valid for all nodes of the traffic
2811 management hierarchy except root node.
2813 Suspend port traffic management hierarchy node
2814 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2816 testpmd> suspend port tm node (port_id) (node_id)
2818 Resume port traffic management hierarchy node
2819 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2821 testpmd> resume port tm node (port_id) (node_id)
2823 Commit port traffic management hierarchy
2824 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2826 Commit the traffic management hierarchy on the port::
2828 testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2832 * ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
2833 call failure. On the other hand, hierarchy is preserved when this parameter
2836 Set port traffic management mark VLAN dei
2837 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2839 Enables/Disables the traffic management marking on the port for VLAN packets::
2841 testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red>
2845 * ``port_id``: The port which on which VLAN packets marked as ``green`` or
2846 ``yellow`` or ``red`` will have dei bit enabled
2848 * ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green
2850 * ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow
2852 * ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red
2854 Set port traffic management mark IP dscp
2855 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2857 Enables/Disables the traffic management marking on the port for IP dscp packets::
2859 testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red>
2863 * ``port_id``: The port which on which IP packets marked as ``green`` or
2864 ``yellow`` or ``red`` will have IP dscp bits updated
2866 * ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets
2868 * ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets
2870 * ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets
2872 Set port traffic management mark IP ecn
2873 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2875 Enables/Disables the traffic management marking on the port for IP ecn packets::
2877 testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red>
2881 * ``port_id``: The port which on which IP packets marked as ``green`` or
2882 ``yellow`` or ``red`` will have IP ecn bits updated
2884 * ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01 or 2'b10
2885 to ecn of 2'b11 when IP is caring TCP or SCTP
2887 * ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
2888 to ecn of 2'b11 when IP is caring TCP or SCTP
2890 * ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
2891 to ecn of 2'b11 when IP is caring TCP or SCTP
2893 Set port traffic management default hierarchy (softnic forwarding mode)
2894 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2896 set the traffic management default hierarchy on the port::
2898 testpmd> set port tm hierarchy default (port_id)
2903 This section details the available filter functions that are available.
2905 Note these functions interface the deprecated legacy filtering framework,
2906 superseded by *rte_flow*. See `Flow rules management`_.
2909 ~~~~~~~~~~~~~~~~~~~~
2911 Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
2913 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
2914 ethertype (ether_type) (drop|fwd) queue (queue_id)
2916 The available information parameters are:
2918 * ``port_id``: The port which the Ethertype filter assigned on.
2920 * ``mac_addr``: Compare destination mac address.
2922 * ``mac_ignr``: Ignore destination mac address match.
2924 * ``mac_address``: Destination mac address to match.
2926 * ``ether_type``: The EtherType value want to match,
2927 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
2929 * ``queue_id``: The receive queue associated with this EtherType filter.
2930 It is meaningless when deleting or dropping.
2932 Example, to add/remove an ethertype filter rule::
2934 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
2935 ethertype 0x0806 fwd queue 3
2937 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
2938 ethertype 0x0806 fwd queue 3
2943 Add or delete a 2-tuple filter,
2944 which identifies packets by specific protocol and destination TCP/UDP port
2945 and forwards packets into one of the receive queues::
2947 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
2948 protocol (protocol_value) mask (mask_value) \
2949 tcp_flags (tcp_flags_value) priority (prio_value) \
2952 The available information parameters are:
2954 * ``port_id``: The port which the 2-tuple filter assigned on.
2956 * ``dst_port_value``: Destination port in L4.
2958 * ``protocol_value``: IP L4 protocol.
2960 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
2962 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
2964 * ``prio_value``: Priority of this filter.
2966 * ``queue_id``: The receive queue associated with this 2-tuple filter.
2968 Example, to add/remove an 2tuple filter rule::
2970 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
2971 tcp_flags 0x02 priority 3 queue 3
2973 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
2974 tcp_flags 0x02 priority 3 queue 3
2979 Add or delete a 5-tuple filter,
2980 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
2981 and routes packets into one of the receive queues::
2983 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
2984 (src_address) dst_port (dst_port_value) \
2985 src_port (src_port_value) protocol (protocol_value) \
2986 mask (mask_value) tcp_flags (tcp_flags_value) \
2987 priority (prio_value) queue (queue_id)
2989 The available information parameters are:
2991 * ``port_id``: The port which the 5-tuple filter assigned on.
2993 * ``dst_address``: Destination IP address.
2995 * ``src_address``: Source IP address.
2997 * ``dst_port_value``: TCP/UDP destination port.
2999 * ``src_port_value``: TCP/UDP source port.
3001 * ``protocol_value``: L4 protocol.
3003 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
3005 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
3007 * ``prio_value``: The priority of this filter.
3009 * ``queue_id``: The receive queue associated with this 5-tuple filter.
3011 Example, to add/remove an 5tuple filter rule::
3013 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3014 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3015 flags 0x0 priority 3 queue 3
3017 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3018 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3019 flags 0x0 priority 3 queue 3
3024 Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
3026 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
3028 The available information parameters are:
3030 * ``port_id``: The port which the SYN filter assigned on.
3032 * ``high``: This SYN filter has higher priority than other filters.
3034 * ``low``: This SYN filter has lower priority than other filters.
3036 * ``queue_id``: The receive queue associated with this SYN filter
3040 testpmd> syn_filter 0 add priority high queue 3
3045 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
3046 and routed into one of the receive queues::
3048 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
3049 mask (mask_value) priority (prio_value) queue (queue_id)
3051 The available information parameters are:
3053 * ``port_id``: The port which the Flex filter is assigned on.
3055 * ``len_value``: Filter length in bytes, no greater than 128.
3057 * ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
3059 * ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
3061 * ``prio_value``: The priority of this filter.
3063 * ``queue_id``: The receive queue associated with this Flex filter.
3067 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
3068 mask 000C priority 3 queue 3
3070 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
3071 mask 000C priority 3 queue 3
3074 .. _testpmd_flow_director:
3076 flow_director_filter
3077 ~~~~~~~~~~~~~~~~~~~~
3079 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
3081 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
3082 Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
3084 * Perfect match filters.
3085 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3086 The masked fields are for IP flow.
3088 * Signature filters.
3089 The hardware checks a match between a hash-based signature of the masked fields of the received packet.
3091 * Perfect-mac-vlan match filters.
3092 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3093 The masked fields are for MAC VLAN flow.
3095 * Perfect-tunnel match filters.
3096 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3097 The masked fields are for tunnel flow.
3099 * Perfect-raw-flow-type match filters.
3100 The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet.
3101 The masked fields are specified by input sets.
3103 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
3104 per flow type and the flexible payload.
3106 The Flow Director can also mask out parts of all of these fields so that filters
3107 are only applied to certain fields or parts of the fields.
3109 Note that for raw flow type mode the source and destination fields in the
3110 raw packet buffer need to be presented in a reversed order with respect
3111 to the expected received packets.
3112 For example: IP source and destination addresses or TCP/UDP/SCTP
3113 source and destination ports
3115 Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
3117 # Commands to add flow director filters of different flow types::
3119 flow_director_filter (port_id) mode IP (add|del|update) \
3120 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
3121 src (src_ip_address) dst (dst_ip_address) \
3122 tos (tos_value) proto (proto_value) ttl (ttl_value) \
3123 vlan (vlan_value) flexbytes (flexbytes_value) \
3124 (drop|fwd) pf|vf(vf_id) queue (queue_id) \
3127 flow_director_filter (port_id) mode IP (add|del|update) \
3128 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
3129 src (src_ip_address) (src_port) \
3130 dst (dst_ip_address) (dst_port) \
3131 tos (tos_value) ttl (ttl_value) \
3132 vlan (vlan_value) flexbytes (flexbytes_value) \
3133 (drop|fwd) queue pf|vf(vf_id) (queue_id) \
3136 flow_director_filter (port_id) mode IP (add|del|update) \
3137 flow (ipv4-sctp|ipv6-sctp) \
3138 src (src_ip_address) (src_port) \
3139 dst (dst_ip_address) (dst_port) \
3140 tos (tos_value) ttl (ttl_value) \
3141 tag (verification_tag) vlan (vlan_value) \
3142 flexbytes (flexbytes_value) (drop|fwd) \
3143 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
3145 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
3146 ether (ethertype) flexbytes (flexbytes_value) \
3147 (drop|fwd) pf|vf(vf_id) queue (queue_id)
3150 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
3151 mac (mac_address) vlan (vlan_value) \
3152 flexbytes (flexbytes_value) (drop|fwd) \
3153 queue (queue_id) fd_id (fd_id_value)
3155 flow_director_filter (port_id) mode Tunnel (add|del|update) \
3156 mac (mac_address) vlan (vlan_value) \
3157 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
3158 flexbytes (flexbytes_value) (drop|fwd) \
3159 queue (queue_id) fd_id (fd_id_value)
3161 flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \
3162 (drop|fwd) queue (queue_id) fd_id (fd_id_value) \
3163 packet (packet file name)
3165 For example, to add an ipv4-udp flow type filter::
3167 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
3168 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
3169 fwd pf queue 1 fd_id 1
3171 For example, add an ipv4-other flow type filter::
3173 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
3174 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
3175 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
3180 Flush all flow director filters on a device::
3182 testpmd> flush_flow_director (port_id)
3184 Example, to flush all flow director filter on port 0::
3186 testpmd> flush_flow_director 0
3191 Set flow director's input masks::
3193 flow_director_mask (port_id) mode IP vlan (vlan_value) \
3194 src_mask (ipv4_src) (ipv6_src) (src_port) \
3195 dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
3197 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
3199 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
3200 mac (mac_value) tunnel-type (tunnel_type_value) \
3201 tunnel-id (tunnel_id_value)
3203 Example, to set flow director mask on port 0::
3205 testpmd> flow_director_mask 0 mode IP vlan 0xefff \
3206 src_mask 255.255.255.255 \
3207 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
3208 dst_mask 255.255.255.255 \
3209 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
3211 flow_director_flex_mask
3212 ~~~~~~~~~~~~~~~~~~~~~~~
3214 set masks of flow director's flexible payload based on certain flow type::
3216 testpmd> flow_director_flex_mask (port_id) \
3217 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3218 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
3219 l2_payload|all) (mask)
3221 Example, to set flow director's flex mask for all flow type on port 0::
3223 testpmd> flow_director_flex_mask 0 flow all \
3224 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
3227 flow_director_flex_payload
3228 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3230 Configure flexible payload selection::
3232 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3234 For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
3236 testpmd> flow_director_flex_payload 0 l4 \
3237 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
3239 get_sym_hash_ena_per_port
3240 ~~~~~~~~~~~~~~~~~~~~~~~~~
3242 Get symmetric hash enable configuration per port::
3244 get_sym_hash_ena_per_port (port_id)
3246 For example, to get symmetric hash enable configuration of port 1::
3248 testpmd> get_sym_hash_ena_per_port 1
3250 set_sym_hash_ena_per_port
3251 ~~~~~~~~~~~~~~~~~~~~~~~~~
3253 Set symmetric hash enable configuration per port to enable or disable::
3255 set_sym_hash_ena_per_port (port_id) (enable|disable)
3257 For example, to set symmetric hash enable configuration of port 1 to enable::
3259 testpmd> set_sym_hash_ena_per_port 1 enable
3261 get_hash_global_config
3262 ~~~~~~~~~~~~~~~~~~~~~~
3264 Get the global configurations of hash filters::
3266 get_hash_global_config (port_id)
3268 For example, to get the global configurations of hash filters of port 1::
3270 testpmd> get_hash_global_config 1
3272 set_hash_global_config
3273 ~~~~~~~~~~~~~~~~~~~~~~
3275 Set the global configurations of hash filters::
3277 set_hash_global_config (port_id) (toeplitz|simple_xor|default) \
3278 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
3279 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flow_id>) \
3282 For example, to enable simple_xor for flow type of ipv6 on port 2::
3284 testpmd> set_hash_global_config 2 simple_xor ipv6 enable
3289 Set the input set for hash::
3291 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3292 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3293 l2_payload|<flow_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3294 ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
3295 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
3296 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
3297 fld-8th|none) (select|add)
3299 For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
3301 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
3306 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3307 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3309 Set the input set for flow director::
3311 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3312 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3313 l2_payload|<flow_id>) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3314 ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
3315 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
3316 sctp-dst-port|sctp-veri-tag|none) (select|add)
3318 For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
3320 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
3325 Set different GRE key length for input set::
3327 global_config (port_id) gre-key-len (number in bytes)
3329 For example to set GRE key length for input set to 4 bytes on port 0::
3331 testpmd> global_config 0 gre-key-len 4
3334 .. _testpmd_rte_flow:
3336 Flow rules management
3337 ---------------------
3339 Control of the generic flow API (*rte_flow*) is fully exposed through the
3340 ``flow`` command (validation, creation, destruction, queries and operation
3343 Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3344 features simultaneously may cause undefined side-effects and is therefore
3350 Because the ``flow`` command uses dynamic tokens to handle the large number
3351 of possible flow rules combinations, its behavior differs slightly from
3352 other commands, in particular:
3354 - Pressing *?* or the *<tab>* key displays contextual help for the current
3355 token, not that of the entire command.
3357 - Optional and repeated parameters are supported (provided they are listed
3358 in the contextual help).
3360 The first parameter stands for the operation mode. Possible operations and
3361 their general syntax are described below. They are covered in detail in the
3364 - Check whether a flow rule can be created::
3366 flow validate {port_id}
3367 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3368 pattern {item} [/ {item} [...]] / end
3369 actions {action} [/ {action} [...]] / end
3371 - Create a flow rule::
3373 flow create {port_id}
3374 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3375 pattern {item} [/ {item} [...]] / end
3376 actions {action} [/ {action} [...]] / end
3378 - Destroy specific flow rules::
3380 flow destroy {port_id} rule {rule_id} [...]
3382 - Destroy all flow rules::
3384 flow flush {port_id}
3386 - Query an existing flow rule::
3388 flow query {port_id} {rule_id} {action}
3390 - List existing flow rules sorted by priority, filtered by group
3393 flow list {port_id} [group {group_id}] [...]
3395 - Restrict ingress traffic to the defined flow rules::
3397 flow isolate {port_id} {boolean}
3399 Validating flow rules
3400 ~~~~~~~~~~~~~~~~~~~~~
3402 ``flow validate`` reports whether a flow rule would be accepted by the
3403 underlying device in its current state but stops short of creating it. It is
3404 bound to ``rte_flow_validate()``::
3406 flow validate {port_id}
3407 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3408 pattern {item} [/ {item} [...]] / end
3409 actions {action} [/ {action} [...]] / end
3411 If successful, it will show::
3415 Otherwise it will show an error message of the form::
3417 Caught error type [...] ([...]): [...]
3419 This command uses the same parameters as ``flow create``, their format is
3420 described in `Creating flow rules`_.
3422 Check whether redirecting any Ethernet packet received on port 0 to RX queue
3423 index 6 is supported::
3425 testpmd> flow validate 0 ingress pattern eth / end
3426 actions queue index 6 / end
3430 Port 0 does not support TCPv6 rules::
3432 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3434 Caught error type 9 (specific pattern item): Invalid argument
3440 ``flow create`` validates and creates the specified flow rule. It is bound
3441 to ``rte_flow_create()``::
3443 flow create {port_id}
3444 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3445 pattern {item} [/ {item} [...]] / end
3446 actions {action} [/ {action} [...]] / end
3448 If successful, it will return a flow rule ID usable with other commands::
3450 Flow rule #[...] created
3452 Otherwise it will show an error message of the form::
3454 Caught error type [...] ([...]): [...]
3456 Parameters describe in the following order:
3458 - Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens).
3459 - A matching pattern, starting with the *pattern* token and terminated by an
3461 - Actions, starting with the *actions* token and terminated by an *end*
3464 These translate directly to *rte_flow* objects provided as-is to the
3465 underlying functions.
3467 The shortest valid definition only comprises mandatory tokens::
3469 testpmd> flow create 0 pattern end actions end
3471 Note that PMDs may refuse rules that essentially do nothing such as this
3474 **All unspecified object values are automatically initialized to 0.**
3479 These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3480 specified before the ``pattern`` token.
3482 - ``group {group id}``: priority group.
3483 - ``priority {level}``: priority level within group.
3484 - ``ingress``: rule applies to ingress traffic.
3485 - ``egress``: rule applies to egress traffic.
3486 - ``transfer``: apply rule directly to endpoints found in pattern.
3488 Each instance of an attribute specified several times overrides the previous
3489 value as shown below (group 4 is used)::
3491 testpmd> flow create 0 group 42 group 24 group 4 [...]
3493 Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3495 While not specifying a direction is an error, some rules may allow both
3498 Most rules affect RX therefore contain the ``ingress`` token::
3500 testpmd> flow create 0 ingress pattern [...]
3505 A matching pattern starts after the ``pattern`` token. It is made of pattern
3506 items and is terminated by a mandatory ``end`` item.
3508 Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3509 rte_flow_item_type``).
3511 The ``/`` token is used as a separator between pattern items as shown
3514 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3516 Note that protocol items like these must be stacked from lowest to highest
3517 layer to make sense. For instance, the following rule is either invalid or
3518 unlikely to match any packet::
3520 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3522 More information on these restrictions can be found in the *rte_flow*
3525 Several items support additional specification structures, for example
3526 ``ipv4`` allows specifying source and destination addresses as follows::
3528 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3529 dst is 10.2.0.0 / end [...]
3531 This rule matches all IPv4 traffic with the specified properties.
3533 In this example, ``src`` and ``dst`` are field names of the underlying
3534 ``struct rte_flow_item_ipv4`` object. All item properties can be specified
3535 in a similar fashion.
3537 The ``is`` token means that the subsequent value must be matched exactly,
3538 and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3539 accordingly. Possible assignment tokens are:
3541 - ``is``: match value perfectly (with full bit-mask).
3542 - ``spec``: match value according to configured bit-mask.
3543 - ``last``: specify upper bound to establish a range.
3544 - ``mask``: specify bit-mask with relevant bits set to one.
3545 - ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one.
3547 These yield identical results::
3549 ipv4 src is 10.1.1.1
3553 ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3557 ipv4 src spec 10.1.1.1 src prefix 32
3561 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3565 ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3567 Inclusive ranges can be defined with ``last``::
3569 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3571 Note that ``mask`` affects both ``spec`` and ``last``::
3573 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3574 # matches 10.1.0.0 to 10.2.255.255
3576 Properties can be modified multiple times::
3578 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3582 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3587 This section lists supported pattern items and their attributes, if any.
3589 - ``end``: end list of pattern items.
3591 - ``void``: no-op pattern item.
3593 - ``invert``: perform actions when pattern does not match.
3595 - ``any``: match any protocol for the current layer.
3597 - ``num {unsigned}``: number of layers covered.
3599 - ``pf``: match traffic from/to the physical function.
3601 - ``vf``: match traffic from/to a virtual function ID.
3603 - ``id {unsigned}``: VF ID.
3605 - ``phy_port``: match traffic from/to a specific physical port.
3607 - ``index {unsigned}``: physical port index.
3609 - ``port_id``: match traffic from/to a given DPDK port ID.
3611 - ``id {unsigned}``: DPDK port ID.
3613 - ``mark``: match value set in previously matched flow rule using the mark action.
3615 - ``id {unsigned}``: arbitrary integer value.
3617 - ``raw``: match an arbitrary byte string.
3619 - ``relative {boolean}``: look for pattern after the previous item.
3620 - ``search {boolean}``: search pattern from offset (see also limit).
3621 - ``offset {integer}``: absolute or relative offset for pattern.
3622 - ``limit {unsigned}``: search area limit for start of pattern.
3623 - ``pattern {string}``: byte string to look for.
3625 - ``eth``: match Ethernet header.
3627 - ``dst {MAC-48}``: destination MAC.
3628 - ``src {MAC-48}``: source MAC.
3629 - ``type {unsigned}``: EtherType or TPID.
3631 - ``vlan``: match 802.1Q/ad VLAN tag.
3633 - ``tci {unsigned}``: tag control information.
3634 - ``pcp {unsigned}``: priority code point.
3635 - ``dei {unsigned}``: drop eligible indicator.
3636 - ``vid {unsigned}``: VLAN identifier.
3637 - ``inner_type {unsigned}``: inner EtherType or TPID.
3639 - ``ipv4``: match IPv4 header.
3641 - ``tos {unsigned}``: type of service.
3642 - ``ttl {unsigned}``: time to live.
3643 - ``proto {unsigned}``: next protocol ID.
3644 - ``src {ipv4 address}``: source address.
3645 - ``dst {ipv4 address}``: destination address.
3647 - ``ipv6``: match IPv6 header.
3649 - ``tc {unsigned}``: traffic class.
3650 - ``flow {unsigned}``: flow label.
3651 - ``proto {unsigned}``: protocol (next header).
3652 - ``hop {unsigned}``: hop limit.
3653 - ``src {ipv6 address}``: source address.
3654 - ``dst {ipv6 address}``: destination address.
3656 - ``icmp``: match ICMP header.
3658 - ``type {unsigned}``: ICMP packet type.
3659 - ``code {unsigned}``: ICMP packet code.
3661 - ``udp``: match UDP header.
3663 - ``src {unsigned}``: UDP source port.
3664 - ``dst {unsigned}``: UDP destination port.
3666 - ``tcp``: match TCP header.
3668 - ``src {unsigned}``: TCP source port.
3669 - ``dst {unsigned}``: TCP destination port.
3671 - ``sctp``: match SCTP header.
3673 - ``src {unsigned}``: SCTP source port.
3674 - ``dst {unsigned}``: SCTP destination port.
3675 - ``tag {unsigned}``: validation tag.
3676 - ``cksum {unsigned}``: checksum.
3678 - ``vxlan``: match VXLAN header.
3680 - ``vni {unsigned}``: VXLAN identifier.
3682 - ``e_tag``: match IEEE 802.1BR E-Tag header.
3684 - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3686 - ``nvgre``: match NVGRE header.
3688 - ``tni {unsigned}``: virtual subnet ID.
3690 - ``mpls``: match MPLS header.
3692 - ``label {unsigned}``: MPLS label.
3694 - ``gre``: match GRE header.
3696 - ``protocol {unsigned}``: protocol type.
3698 - ``fuzzy``: fuzzy pattern match, expect faster than default.
3700 - ``thresh {unsigned}``: accuracy threshold.
3702 - ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3704 - ``teid {unsigned}``: tunnel endpoint identifier.
3706 - ``geneve``: match GENEVE header.
3708 - ``vni {unsigned}``: virtual network identifier.
3709 - ``protocol {unsigned}``: protocol type.
3711 - ``vxlan-gpe``: match VXLAN-GPE header.
3713 - ``vni {unsigned}``: VXLAN-GPE identifier.
3715 - ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.
3717 - ``sha {MAC-48}``: sender hardware address.
3718 - ``spa {ipv4 address}``: sender IPv4 address.
3719 - ``tha {MAC-48}``: target hardware address.
3720 - ``tpa {ipv4 address}``: target IPv4 address.
3722 - ``ipv6_ext``: match presence of any IPv6 extension header.
3724 - ``next_hdr {unsigned}``: next header.
3726 - ``icmp6``: match any ICMPv6 header.
3728 - ``type {unsigned}``: ICMPv6 type.
3729 - ``code {unsigned}``: ICMPv6 code.
3731 - ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.
3733 - ``target_addr {ipv6 address}``: target address.
3735 - ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.
3737 - ``target_addr {ipv6 address}``: target address.
3739 - ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.
3741 - ``type {unsigned}``: ND option type.
3743 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet
3744 link-layer address option.
3746 - ``sla {MAC-48}``: source Ethernet LLA.
3748 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery target Ethernet
3749 link-layer address option.
3751 - ``tla {MAC-48}``: target Ethernet LLA.
3753 - ``meta``: match application specific metadata.
3755 - ``data {unsigned}``: metadata value.
3760 A list of actions starts after the ``actions`` token in the same fashion as
3761 `Matching pattern`_; actions are separated by ``/`` tokens and the list is
3762 terminated by a mandatory ``end`` action.
3764 Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3765 rte_flow_action_type``).
3767 Dropping all incoming UDPv4 packets can be expressed as follows::
3769 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3772 Several actions have configurable properties which must be specified when
3773 there is no valid default value. For example, ``queue`` requires a target
3776 This rule redirects incoming UDPv4 traffic to queue index 6::
3778 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3779 actions queue index 6 / end
3781 While this one could be rejected by PMDs (unspecified queue index)::
3783 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3786 As defined by *rte_flow*, the list is not ordered, all actions of a given
3787 rule are performed simultaneously. These are equivalent::
3789 queue index 6 / void / mark id 42 / end
3793 void / mark id 42 / queue index 6 / end
3795 All actions in a list should have different types, otherwise only the last
3796 action of a given type is taken into account::
3798 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
3802 drop / drop / drop / end # drop is performed only once
3806 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
3808 Considering they are performed simultaneously, opposite and overlapping
3809 actions can sometimes be combined when the end result is unambiguous::
3811 drop / queue index 6 / end # drop has no effect
3815 queue index 6 / rss queues 6 7 8 / end # queue has no effect
3819 drop / passthru / end # drop has no effect
3821 Note that PMDs may still refuse such combinations.
3826 This section lists supported actions and their attributes, if any.
3828 - ``end``: end list of actions.
3830 - ``void``: no-op action.
3832 - ``passthru``: let subsequent rule process matched packets.
3834 - ``jump``: redirect traffic to group on device.
3836 - ``group {unsigned}``: group to redirect to.
3838 - ``mark``: attach 32 bit value to packets.
3840 - ``id {unsigned}``: 32 bit value to return with packets.
3842 - ``flag``: flag packets.
3844 - ``queue``: assign packets to a given queue index.
3846 - ``index {unsigned}``: queue index to use.
3848 - ``drop``: drop packets (note: passthru has priority).
3850 - ``count``: enable counters for this rule.
3852 - ``rss``: spread packets among several queues.
3854 - ``func {hash function}``: RSS hash function to apply, allowed tokens are
3855 the same as `set_hash_global_config`_.
3857 - ``level {unsigned}``: encapsulation level for ``types``.
3859 - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed
3860 tokens are the same as `set_hash_input_set`_, except that an empty list
3861 does not disable RSS but instead requests unspecified "best-effort"
3864 - ``key {string}``: RSS hash key, overrides ``key_len``.
3866 - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in
3867 conjunction with ``key`` to pad or truncate it.
3869 - ``queues [{unsigned} [...]] end``: queue indices to use.
3871 - ``pf``: direct traffic to physical function.
3873 - ``vf``: direct traffic to a virtual function ID.
3875 - ``original {boolean}``: use original VF ID if possible.
3876 - ``id {unsigned}``: VF ID.
3878 - ``phy_port``: direct packets to physical port index.
3880 - ``original {boolean}``: use original port index if possible.
3881 - ``index {unsigned}``: physical port index.
3883 - ``port_id``: direct matching traffic to a given DPDK port ID.
3885 - ``original {boolean}``: use original DPDK port ID if possible.
3886 - ``id {unsigned}``: DPDK port ID.
3888 - ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``.
3890 - ``mpls_ttl``: MPLS TTL.
3892 - ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``.
3894 - ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``.
3896 - ``nw_ttl``: IP TTL.
3898 - ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``.
3900 - ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``.
3902 - ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``.
3904 - ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``.
3906 - ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``.
3908 - ``ethertype``: Ethertype.
3910 - ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``.
3912 - ``vlan_vid``: VLAN id.
3914 - ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``.
3916 - ``vlan_pcp``: VLAN priority.
3918 - ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``.
3920 - ``ethertype``: Ethertype.
3922 - ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``.
3924 - ``ethertype``: Ethertype.
3926 - ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration
3927 is done through `Config VXLAN Encap outer layers`_.
3929 - ``vxlan_decap``: Performs a decapsulation action by stripping all headers of
3930 the VXLAN tunnel network overlay from the matched flow.
3932 - ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration
3933 is done through `Config NVGRE Encap outer layers`_.
3935 - ``nvgre_decap``: Performs a decapsulation action by stripping all headers of
3936 the NVGRE tunnel network overlay from the matched flow.
3938 - ``l2_encap``: Performs a L2 encapsulation, L2 configuration
3939 is done through `Config L2 Encap`_.
3941 - ``l2_decap``: Performs a L2 decapsulation, L2 configuration
3942 is done through `Config L2 Decap`_.
3944 - ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer
3945 configuration is done through `Config MPLSoGRE Encap outer layers`_.
3947 - ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer
3948 configuration is done through `Config MPLSoGRE Decap outer layers`_.
3950 - ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer
3951 configuration is done through `Config MPLSoUDP Encap outer layers`_.
3953 - ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer
3954 configuration is done through `Config MPLSoUDP Decap outer layers`_.
3956 - ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header.
3958 - ``ipv4_addr``: New IPv4 source address.
3960 - ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4
3963 - ``ipv4_addr``: New IPv4 destination address.
3965 - ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header.
3967 - ``ipv6_addr``: New IPv6 source address.
3969 - ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6
3972 - ``ipv6_addr``: New IPv6 destination address.
3974 - ``set_tp_src``: Set a new source port number in the outermost TCP/UDP
3977 - ``port``: New TCP/UDP source port number.
3979 - ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
3982 - ``port``: New TCP/UDP destination port number.
3984 - ``mac_swap``: Swap the source and destination MAC addresses in the outermost
3987 - ``dec_ttl``: Performs a decrease TTL value action
3989 - ``set_ttl``: Set TTL value with specificed value
3990 - ``ttl_value {unsigned}``: The new TTL value to be set
3992 - ``set_mac_src``: set source MAC address
3994 - ``mac_addr {MAC-48}``: new source MAC address
3996 - ``set_mac_dst``: set destination MAC address
3998 - ``mac_addr {MAC-48}``: new destination MAC address
4000 Destroying flow rules
4001 ~~~~~~~~~~~~~~~~~~~~~
4003 ``flow destroy`` destroys one or more rules from their rule ID (as returned
4004 by ``flow create``), this command calls ``rte_flow_destroy()`` as many
4005 times as necessary::
4007 flow destroy {port_id} rule {rule_id} [...]
4009 If successful, it will show::
4011 Flow rule #[...] destroyed
4013 It does not report anything for rule IDs that do not exist. The usual error
4014 message is shown when a rule cannot be destroyed::
4016 Caught error type [...] ([...]): [...]
4018 ``flow flush`` destroys all rules on a device and does not take extra
4019 arguments. It is bound to ``rte_flow_flush()``::
4021 flow flush {port_id}
4023 Any errors are reported as above.
4025 Creating several rules and destroying them::
4027 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4028 actions queue index 2 / end
4029 Flow rule #0 created
4030 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4031 actions queue index 3 / end
4032 Flow rule #1 created
4033 testpmd> flow destroy 0 rule 0 rule 1
4034 Flow rule #1 destroyed
4035 Flow rule #0 destroyed
4038 The same result can be achieved using ``flow flush``::
4040 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4041 actions queue index 2 / end
4042 Flow rule #0 created
4043 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4044 actions queue index 3 / end
4045 Flow rule #1 created
4046 testpmd> flow flush 0
4049 Non-existent rule IDs are ignored::
4051 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4052 actions queue index 2 / end
4053 Flow rule #0 created
4054 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4055 actions queue index 3 / end
4056 Flow rule #1 created
4057 testpmd> flow destroy 0 rule 42 rule 10 rule 2
4059 testpmd> flow destroy 0 rule 0
4060 Flow rule #0 destroyed
4066 ``flow query`` queries a specific action of a flow rule having that
4067 ability. Such actions collect information that can be reported using this
4068 command. It is bound to ``rte_flow_query()``::
4070 flow query {port_id} {rule_id} {action}
4072 If successful, it will display either the retrieved data for known actions
4073 or the following message::
4075 Cannot display result for action type [...] ([...])
4077 Otherwise, it will complain either that the rule does not exist or that some
4080 Flow rule #[...] not found
4084 Caught error type [...] ([...]): [...]
4086 Currently only the ``count`` action is supported. This action reports the
4087 number of packets that hit the flow rule and the total number of bytes. Its
4088 output has the following format::
4091 hits_set: [...] # whether "hits" contains a valid value
4092 bytes_set: [...] # whether "bytes" contains a valid value
4093 hits: [...] # number of packets
4094 bytes: [...] # number of bytes
4096 Querying counters for TCPv6 packets redirected to queue 6::
4098 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
4099 actions queue index 6 / count / end
4100 Flow rule #4 created
4101 testpmd> flow query 0 4 count
4112 ``flow list`` lists existing flow rules sorted by priority and optionally
4113 filtered by group identifiers::
4115 flow list {port_id} [group {group_id}] [...]
4117 This command only fails with the following message if the device does not
4122 Output consists of a header line followed by a short description of each
4123 flow rule, one per line. There is no output at all when no flow rules are
4124 configured on the device::
4126 ID Group Prio Attr Rule
4127 [...] [...] [...] [...] [...]
4129 ``Attr`` column flags:
4131 - ``i`` for ``ingress``.
4132 - ``e`` for ``egress``.
4134 Creating several flow rules and listing them::
4136 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4137 actions queue index 6 / end
4138 Flow rule #0 created
4139 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4140 actions queue index 2 / end
4141 Flow rule #1 created
4142 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
4143 actions rss queues 6 7 8 end / end
4144 Flow rule #2 created
4145 testpmd> flow list 0
4146 ID Group Prio Attr Rule
4147 0 0 0 i- ETH IPV4 => QUEUE
4148 1 0 0 i- ETH IPV6 => QUEUE
4149 2 0 5 i- ETH IPV4 UDP => RSS
4152 Rules are sorted by priority (i.e. group ID first, then priority level)::
4154 testpmd> flow list 1
4155 ID Group Prio Attr Rule
4156 0 0 0 i- ETH => COUNT
4157 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4158 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4159 1 24 0 i- ETH IPV4 UDP => QUEUE
4160 4 24 10 i- ETH IPV4 TCP => DROP
4161 3 24 20 i- ETH IPV4 => DROP
4162 2 24 42 i- ETH IPV4 UDP => QUEUE
4163 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4166 Output can be limited to specific groups::
4168 testpmd> flow list 1 group 0 group 63
4169 ID Group Prio Attr Rule
4170 0 0 0 i- ETH => COUNT
4171 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4172 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4173 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4176 Toggling isolated mode
4177 ~~~~~~~~~~~~~~~~~~~~~~
4179 ``flow isolate`` can be used to tell the underlying PMD that ingress traffic
4180 must only be injected from the defined flow rules; that no default traffic
4181 is expected outside those rules and the driver is free to assign more
4182 resources to handle them. It is bound to ``rte_flow_isolate()``::
4184 flow isolate {port_id} {boolean}
4186 If successful, enabling or disabling isolated mode shows either::
4188 Ingress traffic on port [...]
4189 is now restricted to the defined flow rules
4193 Ingress traffic on port [...]
4194 is not restricted anymore to the defined flow rules
4196 Otherwise, in case of error::
4198 Caught error type [...] ([...]): [...]
4200 Mainly due to its side effects, PMDs supporting this mode may not have the
4201 ability to toggle it more than once without reinitializing affected ports
4202 first (e.g. by exiting testpmd).
4204 Enabling isolated mode::
4206 testpmd> flow isolate 0 true
4207 Ingress traffic on port 0 is now restricted to the defined flow rules
4210 Disabling isolated mode::
4212 testpmd> flow isolate 0 false
4213 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
4216 Sample QinQ flow rules
4217 ~~~~~~~~~~~~~~~~~~~~~~
4219 Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
4221 testpmd> port stop 0
4222 testpmd> vlan set qinq on 0
4224 The above command sets the inner and outer TPID's to 0x8100.
4226 To change the TPID's the following commands should be used::
4228 testpmd> vlan set outer tpid 0xa100 0
4229 testpmd> vlan set inner tpid 0x9100 0
4230 testpmd> port start 0
4232 Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
4236 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
4237 vlan tci is 456 / end actions vf id 1 / queue index 0 / end
4238 Flow rule #0 validated
4240 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
4241 vlan tci is 456 / end actions vf id 123 / queue index 0 / end
4242 Flow rule #0 created
4244 testpmd> flow list 0
4245 ID Group Prio Attr Rule
4246 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4248 Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
4252 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
4253 vlan tci is 654 / end actions pf / queue index 0 / end
4254 Flow rule #1 validated
4256 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
4257 vlan tci is 654 / end actions pf / queue index 1 / end
4258 Flow rule #1 created
4260 testpmd> flow list 0
4261 ID Group Prio Attr Rule
4262 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4263 1 0 0 i- ETH VLAN VLAN=>PF QUEUE
4265 Sample VXLAN encapsulation rule
4266 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4268 VXLAN encapsulation outer layer has default value pre-configured in testpmd
4269 source code, those can be changed by using the following commands
4271 IPv4 VXLAN outer header::
4273 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1
4274 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4275 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4278 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src
4279 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4280 eth-dst 22:22:22:22:22:22
4281 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4284 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0
4285 ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4286 eth-dst 22:22:22:22:22:22
4287 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4290 IPv6 VXLAN outer header::
4292 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1
4293 ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4294 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4297 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4298 ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11
4299 eth-dst 22:22:22:22:22:22
4300 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4303 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4304 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4305 eth-dst 22:22:22:22:22:22
4306 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4309 Sample NVGRE encapsulation rule
4310 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4312 NVGRE encapsulation outer layer has default value pre-configured in testpmd
4313 source code, those can be changed by using the following commands
4315 IPv4 NVGRE outer header::
4317 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1
4318 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4319 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4322 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1
4323 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4324 eth-dst 22:22:22:22:22:22
4325 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4328 IPv6 NVGRE outer header::
4330 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4331 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4332 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4335 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4336 vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4337 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4340 Sample L2 encapsulation rule
4341 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4343 L2 encapsulation has default value pre-configured in testpmd
4344 source code, those can be changed by using the following commands
4348 testpmd> set l2_encap ip-version ipv4
4349 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4350 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4351 mplsoudp_decap / l2_encap / end
4353 L2 with VXLAN header::
4355 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34
4356 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4357 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4358 mplsoudp_decap / l2_encap / end
4360 Sample L2 decapsulation rule
4361 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4363 L2 decapsulation has default value pre-configured in testpmd
4364 source code, those can be changed by using the following commands
4368 testpmd> set l2_decap
4369 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap /
4372 L2 with VXLAN header::
4374 testpmd> set l2_encap-with-vlan
4375 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap /
4378 Sample MPLSoGRE encapsulation rule
4379 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4381 MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd
4382 source code, those can be changed by using the following commands
4384 IPv4 MPLSoGRE outer header::
4386 testpmd> set mplsogre_encap ip-version ipv4 label 4
4387 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4388 eth-dst 22:22:22:22:22:22
4389 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4390 mplsogre_encap / end
4392 IPv4 MPLSoGRE with VLAN outer header::
4394 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4
4395 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4396 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4397 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4398 mplsogre_encap / end
4400 IPv6 MPLSoGRE outer header::
4402 testpmd> set mplsogre_encap ip-version ipv6 mask 4
4403 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4404 eth-dst 22:22:22:22:22:22
4405 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4406 mplsogre_encap / end
4408 IPv6 MPLSoGRE with VLAN outer header::
4410 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4
4411 ip-src ::1 ip-dst ::2222 vlan-tci 34
4412 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4413 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4414 mplsogre_encap / end
4416 Sample MPLSoGRE decapsulation rule
4417 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4419 MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd
4420 source code, those can be changed by using the following commands
4422 IPv4 MPLSoGRE outer header::
4424 testpmd> set mplsogre_decap ip-version ipv4
4425 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions
4426 mplsogre_decap / l2_encap / end
4428 IPv4 MPLSoGRE with VLAN outer header::
4430 testpmd> set mplsogre_decap-with-vlan ip-version ipv4
4431 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end
4432 actions mplsogre_decap / l2_encap / end
4434 IPv6 MPLSoGRE outer header::
4436 testpmd> set mplsogre_decap ip-version ipv6
4437 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end
4438 actions mplsogre_decap / l2_encap / end
4440 IPv6 MPLSoGRE with VLAN outer header::
4442 testpmd> set mplsogre_decap-with-vlan ip-version ipv6
4443 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end
4444 actions mplsogre_decap / l2_encap / end
4446 Sample MPLSoUDP encapsulation rule
4447 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4449 MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd
4450 source code, those can be changed by using the following commands
4452 IPv4 MPLSoUDP outer header::
4454 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10
4455 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4456 eth-dst 22:22:22:22:22:22
4457 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4458 mplsoudp_encap / end
4460 IPv4 MPLSoUDP with VLAN outer header::
4462 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5
4463 udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4464 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4465 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4466 mplsoudp_encap / end
4468 IPv6 MPLSoUDP outer header::
4470 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10
4471 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4472 eth-dst 22:22:22:22:22:22
4473 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4474 mplsoudp_encap / end
4476 IPv6 MPLSoUDP with VLAN outer header::
4478 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5
4479 udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34
4480 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4481 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4482 mplsoudp_encap / end
4484 Sample MPLSoUDP decapsulation rule
4485 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4487 MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd
4488 source code, those can be changed by using the following commands
4490 IPv4 MPLSoUDP outer header::
4492 testpmd> set mplsoudp_decap ip-version ipv4
4493 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4494 mplsoudp_decap / l2_encap / end
4496 IPv4 MPLSoUDP with VLAN outer header::
4498 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4
4499 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end
4500 actions mplsoudp_decap / l2_encap / end
4502 IPv6 MPLSoUDP outer header::
4504 testpmd> set mplsoudp_decap ip-version ipv6
4505 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end
4506 actions mplsoudp_decap / l2_encap / end
4508 IPv6 MPLSoUDP with VLAN outer header::
4510 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6
4511 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end
4512 actions mplsoudp_decap / l2_encap / end
4517 The following sections show functions to load/unload eBPF based filters.
4522 Load an eBPF program as a callback for partciular RX/TX queue::
4524 testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename)
4526 The available load-flags are:
4528 * ``J``: use JIT generated native code, otherwise BPF interpreter will be used.
4530 * ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data.
4536 You'll need clang v3.7 or above to build bpf program you'd like to load
4540 .. code-block:: console
4543 clang -O2 -target bpf -c t1.c
4545 Then to load (and JIT compile) t1.o at RX queue 0, port 1::
4547 .. code-block:: console
4549 testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o
4551 To load (not JITed) t1.o at TX queue 0, port 0::
4553 .. code-block:: console
4555 testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o
4560 Unload previously loaded eBPF program for partciular RX/TX queue::
4562 testpmd> bpf-unload rx|tx (portid) (queueid)
4564 For example to unload BPF filter from TX queue 0, port 0:
4566 .. code-block:: console
4568 testpmd> bpf-unload tx 0 0