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:
226 Display the rss redirection table entry indicated by masks on port X::
228 testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
230 size is used to indicate the hardware supported reta size
235 Display the RSS hash functions and RSS hash key of a port::
237 testpmd> show port (port_id) rss-hash [key]
242 Clear the port statistics for a given port or for all ports::
244 testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
248 testpmd> clear port stats all
253 Display information for a given port's RX/TX queue::
255 testpmd> show (rxq|txq) info (port_id) (queue_id)
260 Displays the configuration of the application.
261 The configuration comes from the command-line, the runtime or the application defaults::
263 testpmd> show config (rxtx|cores|fwd|txpkts)
265 The available information categories are:
267 * ``rxtx``: RX/TX configuration items.
269 * ``cores``: List of forwarding cores.
271 * ``fwd``: Packet forwarding configuration.
273 * ``txpkts``: Packets to TX configuration.
277 .. code-block:: console
279 testpmd> show config rxtx
281 io packet forwarding - CRC stripping disabled - packets/burst=16
282 nb forwarding cores=2 - nb forwarding ports=1
283 RX queues=1 - RX desc=128 - RX free threshold=0
284 RX threshold registers: pthresh=8 hthresh=8 wthresh=4
285 TX queues=1 - TX desc=512 - TX free threshold=0
286 TX threshold registers: pthresh=36 hthresh=0 wthresh=0
287 TX RS bit threshold=0 - TXQ flags=0x0
292 Set the packet forwarding mode::
294 testpmd> set fwd (io|mac|macswap|flowgen| \
295 rxonly|txonly|csum|icmpecho|noisy) (""|retry)
297 ``retry`` can be specified for forwarding engines except ``rx_only``.
299 The available information categories are:
301 * ``io``: Forwards packets "as-is" in I/O mode.
302 This is the fastest possible forwarding operation as it does not access packets data.
303 This is the default mode.
305 * ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
306 Default application behavior is to set source Ethernet address to that of the transmitting interface, and destination
307 address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
308 'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
310 * ``macswap``: MAC swap forwarding mode.
311 Swaps the source and the destination Ethernet addresses of packets before forwarding them.
313 * ``flowgen``: Multi-flow generation mode.
314 Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
316 * ``rxonly``: Receives packets but doesn't transmit them.
318 * ``txonly``: Generates and transmits packets without receiving any.
320 * ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
322 * ``icmpecho``: Receives a burst of packets, lookup for ICMP echo requests and, if any, send back ICMP echo replies.
324 * ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
326 * ``softnic``: Demonstrates the softnic forwarding operation. In this mode, packet forwarding is
327 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``.
329 * ``noisy``: Noisy neighbor simulation.
330 Simulate more realistic behavior of a guest machine engaged in receiving
331 and sending packets performing Virtual Network Function (VNF).
335 testpmd> set fwd rxonly
337 Set rxonly packet forwarding mode
343 When running, forwarding engines maintain statistics from the time they have been started.
344 Example for the io forwarding engine, with some packet drops on the tx side::
346 testpmd> show fwd stats all
348 ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 1/Queue= 0 -------
349 RX-packets: 274293770 TX-packets: 274293642 TX-dropped: 128
351 ------- Forward Stats for RX Port= 1/Queue= 0 -> TX Port= 0/Queue= 0 -------
352 RX-packets: 274301850 TX-packets: 274301850 TX-dropped: 0
354 ---------------------- Forward statistics for port 0 ----------------------
355 RX-packets: 274293802 RX-dropped: 0 RX-total: 274293802
356 TX-packets: 274301862 TX-dropped: 0 TX-total: 274301862
357 ----------------------------------------------------------------------------
359 ---------------------- Forward statistics for port 1 ----------------------
360 RX-packets: 274301894 RX-dropped: 0 RX-total: 274301894
361 TX-packets: 274293706 TX-dropped: 128 TX-total: 274293834
362 ----------------------------------------------------------------------------
364 +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
365 RX-packets: 548595696 RX-dropped: 0 RX-total: 548595696
366 TX-packets: 548595568 TX-dropped: 128 TX-total: 548595696
367 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
372 Clear the forwarding engines statistics::
374 testpmd> clear fwd stats all
379 Display an RX descriptor for a port RX queue::
381 testpmd> read rxd (port_id) (queue_id) (rxd_id)
385 testpmd> read rxd 0 0 4
386 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
391 Display a TX descriptor for a port TX queue::
393 testpmd> read txd (port_id) (queue_id) (txd_id)
397 testpmd> read txd 0 0 4
398 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
403 Get loaded dynamic device personalization (DDP) package info list::
405 testpmd> ddp get list (port_id)
410 Display information about dynamic device personalization (DDP) profile::
412 testpmd> ddp get info (profile_path)
417 Display VF statistics::
419 testpmd> show vf stats (port_id) (vf_id)
424 Reset VF statistics::
426 testpmd> clear vf stats (port_id) (vf_id)
428 show port pctype mapping
429 ~~~~~~~~~~~~~~~~~~~~~~~~
431 List all items from the pctype mapping table::
433 testpmd> show port (port_id) pctype mapping
435 show rx offloading capabilities
436 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
438 List all per queue and per port Rx offloading capabilities of a port::
440 testpmd> show port (port_id) rx_offload capabilities
442 show rx offloading configuration
443 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
445 List port level and all queue level Rx offloading configuration::
447 testpmd> show port (port_id) rx_offload configuration
449 show tx offloading capabilities
450 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
452 List all per queue and per port Tx offloading capabilities of a port::
454 testpmd> show port (port_id) tx_offload capabilities
456 show tx offloading configuration
457 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
459 List port level and all queue level Tx offloading configuration::
461 testpmd> show port (port_id) tx_offload configuration
463 show tx metadata setting
464 ~~~~~~~~~~~~~~~~~~~~~~~~
466 Show Tx metadata value set for a specific port::
468 testpmd> show port (port_id) tx_metadata
470 show port supported ptypes
471 ~~~~~~~~~~~~~~~~~~~~~~~~~~
473 Show ptypes supported for a specific port::
475 testpmd> show port (port_id) ptypes
480 Show general information about devices probed::
482 testpmd> show device info (<identifier>|all)
486 .. code-block:: console
488 testpmd> show device info net_pcap0
490 ********************* Infos for device net_pcap0 *********************
492 Driver name: net_pcap
493 Devargs: iface=enP2p6s0,phy_mac=1
494 Connect to socket: -1
497 MAC address: 1E:37:93:28:04:B8
498 Device name: net_pcap0
503 Dumps all physical memory segment layouts::
505 testpmd> dump_physmem
510 Dumps the layout of all memory zones::
512 testpmd> dump_memzone
518 Dumps the size of all memory structures::
520 testpmd> dump_struct_sizes
525 Dumps the status of all or specific element in DPDK rings::
527 testpmd> dump_ring [ring_name]
532 Dumps the statistics of all or specific memory pool::
534 testpmd> dump_mempool [mempool_name]
539 Dumps the user device list::
541 testpmd> dump_devargs
546 Dumps the log level for all the dpdk modules::
548 testpmd> dump_log_types
550 Configuration Functions
551 -----------------------
553 The testpmd application can be configured from the runtime as well as from the command-line.
555 This section details the available configuration functions that are available.
559 Configuration changes only become active when forwarding is started/restarted.
564 Reset forwarding to the default configuration::
571 Set the debug verbosity level::
573 testpmd> set verbose (level)
575 Available levels are as following:
577 * ``0`` silent except for error.
578 * ``1`` fully verbose except for Tx packets.
579 * ``2`` fully verbose except for Rx packets.
580 * ``> 2`` fully verbose.
585 Set the log level for a log type::
587 testpmd> set log global|(type) (level)
591 * ``type`` is the log name.
593 * ``level`` is the log level.
595 For example, to change the global log level::
597 testpmd> set log global (level)
599 Regexes can also be used for type. To change log level of user1, user2 and user3::
601 testpmd> set log user[1-3] (level)
606 Set the number of ports used by the application:
610 This is equivalent to the ``--nb-ports`` command-line option.
615 Set the number of cores used by the application::
617 testpmd> set nbcore (num)
619 This is equivalent to the ``--nb-cores`` command-line option.
623 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
628 Set the forwarding cores hexadecimal mask::
630 testpmd> set coremask (mask)
632 This is equivalent to the ``--coremask`` command-line option.
636 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
641 Set the forwarding ports hexadecimal mask::
643 testpmd> set portmask (mask)
645 This is equivalent to the ``--portmask`` command-line option.
650 Set number of packets per burst::
652 testpmd> set burst (num)
654 This is equivalent to the ``--burst command-line`` option.
656 When retry is enabled, the transmit delay time and number of retries can also be set::
658 testpmd> set burst tx delay (microseconds) retry (num)
663 Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
665 testpmd> set txpkts (x[,y]*)
667 Where x[,y]* represents a CSV list of values, without white space.
672 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
674 testpmd> set txsplit (off|on|rand)
678 * ``off`` disable packet copy & split for CSUM mode.
680 * ``on`` split outgoing packet into multiple segments. Size of each segment
681 and number of segments per packet is determined by ``set txpkts`` command
684 * ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
689 Set the list of forwarding cores::
691 testpmd> set corelist (x[,y]*)
693 For example, to change the forwarding cores:
695 .. code-block:: console
697 testpmd> set corelist 3,1
698 testpmd> show config fwd
700 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
701 Logical Core 3 (socket 0) forwards packets on 1 streams:
702 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
703 Logical Core 1 (socket 0) forwards packets on 1 streams:
704 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
708 The cores are used in the same order as specified on the command line.
713 Set the list of forwarding ports::
715 testpmd> set portlist (x[,y]*)
717 For example, to change the port forwarding:
719 .. code-block:: console
721 testpmd> set portlist 0,2,1,3
722 testpmd> show config fwd
724 io packet forwarding - ports=4 - cores=1 - streams=4
725 Logical Core 3 (socket 0) forwards packets on 4 streams:
726 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
727 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
728 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
729 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
734 Select how to retrieve new ports created after "port attach" command::
736 testpmd> set port setup on (iterator|event)
738 For each new port, a setup is done.
739 It will find the probed ports via RTE_ETH_FOREACH_MATCHING_DEV loop
740 in iterator mode, or via RTE_ETH_EVENT_NEW in event mode.
745 Enable/disable tx loopback::
747 testpmd> set tx loopback (port_id) (on|off)
752 set drop enable bit for all queues::
754 testpmd> set all queues drop (port_id) (on|off)
756 set split drop enable (for VF)
757 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
759 set split drop enable bit for VF from PF::
761 testpmd> set vf split drop (port_id) (vf_id) (on|off)
763 set mac antispoof (for VF)
764 ~~~~~~~~~~~~~~~~~~~~~~~~~~
766 Set mac antispoof for a VF from the PF::
768 testpmd> set vf mac antispoof (port_id) (vf_id) (on|off)
773 Enable/disable MACsec offload::
775 testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
776 testpmd> set macsec offload (port_id) off
781 Configure MACsec secure connection (SC)::
783 testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
787 The pi argument is ignored for tx.
788 Check the NIC Datasheet for hardware limits.
793 Configure MACsec secure association (SA)::
795 testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
799 The IDX value must be 0 or 1.
800 Check the NIC Datasheet for hardware limits.
802 set broadcast mode (for VF)
803 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
805 Set broadcast mode for a VF from the PF::
807 testpmd> set vf broadcast (port_id) (vf_id) (on|off)
812 Set the VLAN strip on a port::
814 testpmd> vlan set strip (on|off) (port_id)
819 Set the VLAN strip for a queue on a port::
821 testpmd> vlan set stripq (on|off) (port_id,queue_id)
823 vlan set stripq (for VF)
824 ~~~~~~~~~~~~~~~~~~~~~~~~
826 Set VLAN strip for all queues in a pool for a VF from the PF::
828 testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
830 vlan set insert (for VF)
831 ~~~~~~~~~~~~~~~~~~~~~~~~
833 Set VLAN insert for a VF from the PF::
835 testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
837 vlan set tag (for VF)
838 ~~~~~~~~~~~~~~~~~~~~~
840 Set VLAN tag for a VF from the PF::
842 testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
844 vlan set antispoof (for VF)
845 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
847 Set VLAN antispoof for a VF from the PF::
849 testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
854 Set the VLAN filter on a port::
856 testpmd> vlan set filter (on|off) (port_id)
861 Set the VLAN QinQ (extended queue in queue) on for a port::
863 testpmd> vlan set qinq (on|off) (port_id)
868 Set the inner or outer VLAN TPID for packet filtering on a port::
870 testpmd> vlan set (inner|outer) tpid (value) (port_id)
874 TPID value must be a 16-bit number (value <= 65536).
879 Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
881 testpmd> rx_vlan add (vlan_id|all) (port_id)
885 VLAN filter must be set on that port. VLAN ID < 4096.
886 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
887 in VFTA table. This is important if enabling all vlan_ids.
892 Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
894 testpmd> rx_vlan rm (vlan_id|all) (port_id)
899 Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
901 testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
906 Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
908 testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
913 Add a tunnel filter on a port::
915 testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
916 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\
917 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
919 The available information categories are:
921 * ``vxlan``: Set tunnel type as VXLAN.
923 * ``nvgre``: Set tunnel type as NVGRE.
925 * ``ipingre``: Set tunnel type as IP-in-GRE.
927 * ``vxlan-gpe``: Set tunnel type as VXLAN-GPE
929 * ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
931 * ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
933 * ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
935 * ``imac``: Set filter type as Inner MAC.
937 * ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
939 * ``oip``: Set filter type as Outer IP.
941 * ``iip``: Set filter type as Inner IP.
945 testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
946 192.168.2.2 0 ipingre oip 1 1
948 Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
953 Remove a tunnel filter on a port::
955 testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
956 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\
957 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
962 Add an UDP port for VXLAN packet filter on a port::
964 testpmd> rx_vxlan_port add (udp_port) (port_id)
969 Remove an UDP port for VXLAN packet filter on a port::
971 testpmd> rx_vxlan_port rm (udp_port) (port_id)
976 Set hardware insertion of VLAN IDs in packets sent on a port::
978 testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
980 For example, set a single VLAN ID (5) insertion on port 0::
984 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
992 Set port based hardware insertion of VLAN ID in packets sent on a port::
994 testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
999 Disable hardware insertion of a VLAN header in packets sent on a port::
1001 testpmd> tx_vlan reset (port_id)
1006 Select hardware or software calculation of the checksum when
1007 transmitting a packet using the ``csum`` forwarding engine::
1009 testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)
1013 * ``ip|udp|tcp|sctp`` always relate to the inner layer.
1015 * ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
1016 as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
1017 supported). See also the ``csum parse-tunnel`` command.
1019 * ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized
1020 as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are
1021 supported). See also the ``csum parse-tunnel`` command.
1025 Check the NIC Datasheet for hardware limits.
1030 Set RSS queue region span on a port::
1032 testpmd> set port (port_id) queue-region region_id (value) \
1033 queue_start_index (value) queue_num (value)
1035 Set flowtype mapping on a RSS queue region on a port::
1037 testpmd> set port (port_id) queue-region region_id (value) flowtype (value)
1041 * For the flowtype(pctype) of packet,the specific index for each type has
1042 been defined in file i40e_type.h as enum i40e_filter_pctype.
1044 Set user priority mapping on a RSS queue region on a port::
1046 testpmd> set port (port_id) queue-region UP (value) region_id (value)
1048 Flush all queue region related configuration on a port::
1050 testpmd> set port (port_id) queue-region flush (on|off)
1054 * ``on``: is just an enable function which server for other configuration,
1055 it is for all configuration about queue region from up layer,
1056 at first will only keep in DPDK software stored in driver,
1057 only after "flush on", it commit all configuration to HW.
1059 * ``"off``: is just clean all configuration about queue region just now,
1060 and restore all to DPDK i40e driver default config when start up.
1062 Show all queue region related configuration info on a port::
1064 testpmd> show port (port_id) queue-region
1068 Queue region only support on PF by now, so these command is
1069 only for configuration of queue region on PF port.
1074 Define how tunneled packets should be handled by the csum forward
1077 testpmd> csum parse-tunnel (on|off) (tx_port_id)
1079 If enabled, the csum forward engine will try to recognize supported
1080 tunnel headers (vxlan, gre, ipip).
1082 If disabled, treat tunnel packets as non-tunneled packets (a inner
1083 header is handled as a packet payload).
1087 The port argument is the TX port like in the ``csum set`` command.
1091 Consider a packet in packet like the following::
1093 eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
1095 * If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1096 command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
1097 ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``).
1099 * If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1100 command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
1105 Display tx checksum offload configuration::
1107 testpmd> csum show (port_id)
1112 Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
1114 testpmd> tso set (segsize) (port_id)
1118 Check the NIC datasheet for hardware limits.
1123 Display the status of TCP Segmentation Offload::
1125 testpmd> tso show (port_id)
1130 Set tso segment size of tunneled packets for a port in csum engine::
1132 testpmd> tunnel_tso set (tso_segsz) (port_id)
1137 Display the status of tunneled TCP Segmentation Offload for a port::
1139 testpmd> tunnel_tso show (port_id)
1144 Enable or disable GRO in ``csum`` forwarding engine::
1146 testpmd> set port <port_id> gro on|off
1148 If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
1149 packets received from the given port.
1151 If disabled, packets received from the given port won't be performed
1152 GRO. By default, GRO is disabled for all ports.
1156 When enable GRO for a port, TCP/IPv4 packets received from the port
1157 will be performed GRO. After GRO, all merged packets have bad
1158 checksums, since the GRO library doesn't re-calculate checksums for
1159 the merged packets. Therefore, if users want the merged packets to
1160 have correct checksums, please select HW IP checksum calculation and
1161 HW TCP checksum calculation for the port which the merged packets are
1167 Display GRO configuration for a given port::
1169 testpmd> show port <port_id> gro
1174 Set the cycle to flush the GROed packets from reassembly tables::
1176 testpmd> set gro flush <cycles>
1178 When enable GRO, the csum forwarding engine performs GRO on received
1179 packets, and the GROed packets are stored in reassembly tables. Users
1180 can use this command to determine when the GROed packets are flushed
1181 from the reassembly tables.
1183 The ``cycles`` is measured in GRO operation times. The csum forwarding
1184 engine flushes the GROed packets from the tables every ``cycles`` GRO
1187 By default, the value of ``cycles`` is 1, which means flush GROed packets
1188 from the reassembly tables as soon as one GRO operation finishes. The value
1189 of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1191 Please note that the large value of ``cycles`` may cause the poor TCP/IP
1192 stack performance. Because the GROed packets are delayed to arrive the
1193 stack, thus causing more duplicated ACKs and TCP retransmissions.
1198 Toggle per-port GSO support in ``csum`` forwarding engine::
1200 testpmd> set port <port_id> gso on|off
1202 If enabled, the csum forwarding engine will perform GSO on supported IPv4
1203 packets, transmitted on the given port.
1205 If disabled, packets transmitted on the given port will not undergo GSO.
1206 By default, GSO is disabled for all ports.
1210 When GSO is enabled on a port, supported IPv4 packets transmitted on that
1211 port undergo GSO. Afterwards, the segmented packets are represented by
1212 multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1213 of checksums for GSO'd segments in SW. As a result, if users want correct
1214 checksums in GSO segments, they should enable HW checksum calculation for
1217 For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1218 by setting the following options in the csum forwarding engine:
1220 testpmd> csum set outer_ip hw <port_id>
1222 testpmd> csum set ip hw <port_id>
1224 testpmd> csum set tcp hw <port_id>
1226 UDP GSO is the same as IP fragmentation, which treats the UDP header
1227 as the payload and does not modify it during segmentation. That is,
1228 after UDP GSO, only the first output fragment has the original UDP
1229 header. Therefore, users need to enable HW IP checksum calculation
1230 and SW UDP checksum calculation for GSO-enabled ports, if they want
1231 correct checksums for UDP/IPv4 packets.
1236 Set the maximum GSO segment size (measured in bytes), which includes the
1237 packet header and the packet payload for GSO-enabled ports (global)::
1239 testpmd> set gso segsz <length>
1244 Display the status of Generic Segmentation Offload for a given port::
1246 testpmd> show port <port_id> gso
1251 Add an alternative MAC address to a port::
1253 testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1258 Remove a MAC address from a port::
1260 testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1265 To add the multicast MAC address to/from the set of multicast addresses
1268 testpmd> mcast_addr add (port_id) (mcast_addr)
1273 To remove the multicast MAC address to/from the set of multicast addresses
1276 testpmd> mcast_addr remove (port_id) (mcast_addr)
1278 mac_addr add (for VF)
1279 ~~~~~~~~~~~~~~~~~~~~~
1281 Add an alternative MAC address for a VF to a port::
1283 testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1288 Set the default MAC address for a port::
1290 testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1292 mac_addr set (for VF)
1293 ~~~~~~~~~~~~~~~~~~~~~
1295 Set the MAC address for a VF from the PF::
1297 testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1302 Set the forwarding peer address for certain port::
1304 testpmd> set eth-peer (port_id) (peer_addr)
1306 This is equivalent to the ``--eth-peer`` command-line option.
1311 Set the unicast hash filter(s) on/off for a port::
1313 testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1318 Set the promiscuous mode on for a port or for all ports.
1319 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1321 testpmd> set promisc (port_id|all) (on|off)
1326 Set the allmulti mode for a port or for all ports::
1328 testpmd> set allmulti (port_id|all) (on|off)
1330 Same as the ifconfig (8) option. Controls how multicast packets are handled.
1332 set promisc (for VF)
1333 ~~~~~~~~~~~~~~~~~~~~
1335 Set the unicast promiscuous mode for a VF from PF.
1336 It's supported by Intel i40e NICs now.
1337 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1339 testpmd> set vf promisc (port_id) (vf_id) (on|off)
1341 set allmulticast (for VF)
1342 ~~~~~~~~~~~~~~~~~~~~~~~~~
1344 Set the multicast promiscuous mode for a VF from PF.
1345 It's supported by Intel i40e NICs now.
1346 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1348 testpmd> set vf allmulti (port_id) (vf_id) (on|off)
1350 set tx max bandwidth (for VF)
1351 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1353 Set TX max absolute bandwidth (Mbps) for a VF from PF::
1355 testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
1357 set tc tx min bandwidth (for VF)
1358 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1360 Set all TCs' TX min relative bandwidth (%) for a VF from PF::
1362 testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
1364 set tc tx max bandwidth (for VF)
1365 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1367 Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
1369 testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
1371 set tc strict link priority mode
1372 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1374 Set some TCs' strict link priority mode on a physical port::
1376 testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1378 set tc tx min bandwidth
1379 ~~~~~~~~~~~~~~~~~~~~~~~
1381 Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
1383 testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
1388 Set the link flow control parameter on a port::
1390 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1391 (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1392 autoneg (on|off) (port_id)
1396 * ``high_water`` (integer): High threshold value to trigger XOFF.
1398 * ``low_water`` (integer): Low threshold value to trigger XON.
1400 * ``pause_time`` (integer): Pause quota in the Pause frame.
1402 * ``send_xon`` (0/1): Send XON frame.
1404 * ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1406 * ``autoneg``: Change the auto-negotiation parameter.
1411 Set the priority flow control parameter on a port::
1413 testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1414 (pause_time) (priority) (port_id)
1418 * ``high_water`` (integer): High threshold value.
1420 * ``low_water`` (integer): Low threshold value.
1422 * ``pause_time`` (integer): Pause quota in the Pause frame.
1424 * ``priority`` (0-7): VLAN User Priority.
1429 Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1431 testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1433 For example, to set rx queue 2 on port 0 to mapping 5::
1435 testpmd>set stat_qmap rx 0 2 5
1437 set xstats-hide-zero
1438 ~~~~~~~~~~~~~~~~~~~~
1440 Set the option to hide zero values for xstats display::
1442 testpmd> set xstats-hide-zero on|off
1446 By default, the zero values are displayed for xstats.
1448 set port - rx/tx (for VF)
1449 ~~~~~~~~~~~~~~~~~~~~~~~~~
1451 Set VF receive/transmit from a port::
1453 testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1455 set port - mac address filter (for VF)
1456 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1458 Add/Remove unicast or multicast MAC addr filter for a VF::
1460 testpmd> set port (port_id) vf (vf_id) (mac_addr) \
1461 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
1463 set port - rx mode(for VF)
1464 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1466 Set the VF receive mode of a port::
1468 testpmd> set port (port_id) vf (vf_id) \
1469 rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1471 The available receive modes are:
1473 * ``AUPE``: Accepts untagged VLAN.
1475 * ``ROPE``: Accepts unicast hash.
1477 * ``BAM``: Accepts broadcast packets.
1479 * ``MPE``: Accepts all multicast packets.
1481 set port - tx_rate (for Queue)
1482 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1484 Set TX rate limitation for a queue on a port::
1486 testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1488 set port - tx_rate (for VF)
1489 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1491 Set TX rate limitation for queues in VF on a port::
1493 testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1495 set port - mirror rule
1496 ~~~~~~~~~~~~~~~~~~~~~~
1498 Set pool or vlan type mirror rule for a port::
1500 testpmd> set port (port_id) mirror-rule (rule_id) \
1501 (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1502 (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1504 Set link mirror rule for a port::
1506 testpmd> set port (port_id) mirror-rule (rule_id) \
1507 (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1509 For example to enable mirror traffic with vlan 0,1 to pool 0::
1511 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1513 reset port - mirror rule
1514 ~~~~~~~~~~~~~~~~~~~~~~~~
1516 Reset a mirror rule for a port::
1518 testpmd> reset port (port_id) mirror-rule (rule_id)
1523 Set the flush on RX streams before forwarding.
1524 The default is flush ``on``.
1525 Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1527 testpmd> set flush_rx off
1532 Set the bypass mode for the lowest port on bypass enabled NIC::
1534 testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1539 Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1541 testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1542 mode (normal|bypass|isolate) (port_id)
1546 * ``timeout``: Enable bypass after watchdog timeout.
1548 * ``os_on``: Enable bypass when OS/board is powered on.
1550 * ``os_off``: Enable bypass when OS/board is powered off.
1552 * ``power_on``: Enable bypass when power supply is turned on.
1554 * ``power_off``: Enable bypass when power supply is turned off.
1560 Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1562 testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1567 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1569 testpmd> show bypass config (port_id)
1574 Set link up for a port::
1576 testpmd> set link-up port (port id)
1581 Set link down for a port::
1583 testpmd> set link-down port (port id)
1588 Enable E-tag insertion for a VF on a port::
1590 testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1592 Disable E-tag insertion for a VF on a port::
1594 testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1596 Enable/disable E-tag stripping on a port::
1598 testpmd> E-tag set stripping (on|off) port (port_id)
1600 Enable/disable E-tag based forwarding on a port::
1602 testpmd> E-tag set forwarding (on|off) port (port_id)
1604 Add an E-tag forwarding filter on a port::
1606 testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1608 Delete an E-tag forwarding filter on a port::
1609 testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1614 Load a dynamic device personalization (DDP) profile and store backup profile::
1616 testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1621 Delete a dynamic device personalization profile and restore backup profile::
1623 testpmd> ddp del (port_id) (backup_profile_path)
1628 List all items from the ptype mapping table::
1630 testpmd> ptype mapping get (port_id) (valid_only)
1634 * ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1636 Replace a specific or a group of software defined ptype with a new one::
1638 testpmd> ptype mapping replace (port_id) (target) (mask) (pkt_type)
1642 * ``target``: A specific software ptype or a mask to represent a group of software ptypes.
1644 * ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1).
1646 * ``pkt_type``: The new software ptype to replace the old ones.
1648 Update hardware defined ptype to software defined packet type mapping table::
1650 testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1654 * ``hw_ptype``: hardware ptype as the index of the ptype mapping table.
1656 * ``sw_ptype``: software ptype as the value of the ptype mapping table.
1658 Reset ptype mapping table::
1660 testpmd> ptype mapping reset (port_id)
1662 config per port Rx offloading
1663 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1665 Enable or disable a per port Rx offloading on all Rx queues of a port::
1667 testpmd> port config (port_id) rx_offload (offloading) on|off
1669 * ``offloading``: can be any of these offloading capability:
1670 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1671 qinq_strip, outer_ipv4_cksum, macsec_strip,
1672 header_split, vlan_filter, vlan_extend, jumbo_frame,
1673 crc_strip, scatter, timestamp, security, keep_crc
1675 This command should be run when the port is stopped, or else it will fail.
1677 config per queue Rx offloading
1678 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1680 Enable or disable a per queue Rx offloading only on a specific Rx queue::
1682 testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
1684 * ``offloading``: can be any of these offloading capability:
1685 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1686 qinq_strip, outer_ipv4_cksum, macsec_strip,
1687 header_split, vlan_filter, vlan_extend, jumbo_frame,
1688 crc_strip, scatter, timestamp, security, keep_crc
1690 This command should be run when the port is stopped, or else it will fail.
1692 config per port Tx offloading
1693 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1695 Enable or disable a per port Tx offloading on all Tx queues of a port::
1697 testpmd> port config (port_id) tx_offload (offloading) on|off
1699 * ``offloading``: can be any of these offloading capability:
1700 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1701 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1702 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1703 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1704 mt_lockfree, multi_segs, mbuf_fast_free, security,
1707 This command should be run when the port is stopped, or else it will fail.
1709 config per queue Tx offloading
1710 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1712 Enable or disable a per queue Tx offloading only on a specific Tx queue::
1714 testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
1716 * ``offloading``: can be any of these offloading capability:
1717 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1718 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1719 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1720 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1721 mt_lockfree, multi_segs, mbuf_fast_free, security
1723 This command should be run when the port is stopped, or else it will fail.
1725 Config VXLAN Encap outer layers
1726 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1728 Configure the outer layer to encapsulate a packet inside a VXLAN tunnel::
1730 set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1731 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \
1734 set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1735 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1736 eth-src (eth-src) eth-dst (eth-dst)
1738 set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1739 udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) \
1740 ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1742 These commands will set an internal configuration inside testpmd, any following
1743 flow rule using the action vxlan_encap will use the last configuration set.
1744 To have a different encapsulation header, one of those commands must be called
1745 before the flow rule creation.
1747 Config NVGRE Encap outer layers
1748 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1750 Configure the outer layer to encapsulate a packet inside a NVGRE tunnel::
1752 set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \
1753 eth-src (eth-src) eth-dst (eth-dst)
1754 set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \
1755 ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1757 These commands will set an internal configuration inside testpmd, any following
1758 flow rule using the action nvgre_encap will use the last configuration set.
1759 To have a different encapsulation header, one of those commands must be called
1760 before the flow rule creation.
1765 Configure the l2 to be used when encapsulating a packet with L2::
1767 set l2_encap ip-version (ipv4|ipv6) eth-src (eth-src) eth-dst (eth-dst)
1768 set l2_encap-with-vlan ip-version (ipv4|ipv6) vlan-tci (vlan-tci) \
1769 eth-src (eth-src) eth-dst (eth-dst)
1771 Those commands will set an internal configuration inside testpmd, any following
1772 flow rule using the action l2_encap will use the last configuration set.
1773 To have a different encapsulation header, one of those commands must be called
1774 before the flow rule creation.
1779 Configure the l2 to be removed when decapsulating a packet with L2::
1781 set l2_decap ip-version (ipv4|ipv6)
1782 set l2_decap-with-vlan ip-version (ipv4|ipv6)
1784 Those commands will set an internal configuration inside testpmd, any following
1785 flow rule using the action l2_decap will use the last configuration set.
1786 To have a different encapsulation header, one of those commands must be called
1787 before the flow rule creation.
1789 Config MPLSoGRE Encap outer layers
1790 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1792 Configure the outer layer to encapsulate a packet inside a MPLSoGRE tunnel::
1794 set mplsogre_encap ip-version (ipv4|ipv6) label (label) \
1795 ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1796 set mplsogre_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1797 ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1798 eth-src (eth-src) eth-dst (eth-dst)
1800 These commands will set an internal configuration inside testpmd, any following
1801 flow rule using the action mplsogre_encap will use the last configuration set.
1802 To have a different encapsulation header, one of those commands must be called
1803 before the flow rule creation.
1805 Config MPLSoGRE Decap outer layers
1806 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1808 Configure the outer layer to decapsulate MPLSoGRE packet::
1810 set mplsogre_decap ip-version (ipv4|ipv6)
1811 set mplsogre_decap-with-vlan ip-version (ipv4|ipv6)
1813 These commands will set an internal configuration inside testpmd, any following
1814 flow rule using the action mplsogre_decap will use the last configuration set.
1815 To have a different decapsulation header, one of those commands must be called
1816 before the flow rule creation.
1818 Config MPLSoUDP Encap outer layers
1819 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1821 Configure the outer layer to encapsulate a packet inside a MPLSoUDP tunnel::
1823 set mplsoudp_encap ip-version (ipv4|ipv6) label (label) udp-src (udp-src) \
1824 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1825 eth-src (eth-src) eth-dst (eth-dst)
1826 set mplsoudp_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1827 udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1828 vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1830 These commands will set an internal configuration inside testpmd, any following
1831 flow rule using the action mplsoudp_encap will use the last configuration set.
1832 To have a different encapsulation header, one of those commands must be called
1833 before the flow rule creation.
1835 Config MPLSoUDP Decap outer layers
1836 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1838 Configure the outer layer to decapsulate MPLSoUDP packet::
1840 set mplsoudp_decap ip-version (ipv4|ipv6)
1841 set mplsoudp_decap-with-vlan ip-version (ipv4|ipv6)
1843 These commands will set an internal configuration inside testpmd, any following
1844 flow rule using the action mplsoudp_decap will use the last configuration set.
1845 To have a different decapsulation header, one of those commands must be called
1846 before the flow rule creation.
1848 Config Raw Encapsulation
1849 ~~~~~~~~~~~~~~~~~~~~~~~~~
1851 Configure the raw data to be used when encapsulating a packet by
1852 rte_flow_action_raw_encap::
1854 set raw_encap {item} [/ {item} [...]] / end_set
1856 This command will set an internal buffer inside testpmd, any following flow rule
1857 using the action raw_encap will use the last configuration set.
1858 To have a different encapsulation header, this command must be called before the
1861 Config Raw Decapsulation
1862 ~~~~~~~~~~~~~~~~~~~~~~~~
1864 Configure the raw data to be used when decapsulating a packet by
1865 rte_flow_action_raw_decap::
1867 set raw_decap {item} [/ {item} [...]] / end_set
1869 This command will set an internal buffer inside testpmd, any following flow rule
1870 using the action raw_decap will use the last configuration set.
1875 The following sections show functions for configuring ports.
1879 Port configuration changes only become active when forwarding is started/restarted.
1884 Attach a port specified by pci address or virtual device args::
1886 testpmd> port attach (identifier)
1888 To attach a new pci device, the device should be recognized by kernel first.
1889 Then it should be moved under DPDK management.
1890 Finally the port can be attached to testpmd.
1892 For example, to move a pci device using ixgbe under DPDK management:
1894 .. code-block:: console
1896 # Check the status of the available devices.
1897 ./usertools/dpdk-devbind.py --status
1899 Network devices using DPDK-compatible driver
1900 ============================================
1903 Network devices using kernel driver
1904 ===================================
1905 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1908 # Bind the device to igb_uio.
1909 sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1912 # Recheck the status of the devices.
1913 ./usertools/dpdk-devbind.py --status
1914 Network devices using DPDK-compatible driver
1915 ============================================
1916 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1918 To attach a port created by virtual device, above steps are not needed.
1920 For example, to attach a port whose pci address is 0000:0a:00.0.
1922 .. code-block:: console
1924 testpmd> port attach 0000:0a:00.0
1925 Attaching a new port...
1926 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1927 EAL: probe driver: 8086:10fb rte_ixgbe_pmd
1928 EAL: PCI memory mapped at 0x7f83bfa00000
1929 EAL: PCI memory mapped at 0x7f83bfa80000
1930 PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1931 PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1932 Port 0 is attached. Now total ports is 1
1935 For example, to attach a port created by pcap PMD.
1937 .. code-block:: console
1939 testpmd> port attach net_pcap0
1940 Attaching a new port...
1941 PMD: Initializing pmd_pcap for net_pcap0
1942 PMD: Creating pcap-backed ethdev on numa socket 0
1943 Port 0 is attached. Now total ports is 1
1946 In this case, identifier is ``net_pcap0``.
1947 This identifier format is the same as ``--vdev`` format of DPDK applications.
1949 For example, to re-attach a bonded port which has been previously detached,
1950 the mode and slave parameters must be given.
1952 .. code-block:: console
1954 testpmd> port attach net_bond_0,mode=0,slave=1
1955 Attaching a new port...
1956 EAL: Initializing pmd_bond for net_bond_0
1957 EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
1958 Port 0 is attached. Now total ports is 1
1965 Detach a specific port::
1967 testpmd> port detach (port_id)
1969 Before detaching a port, the port should be stopped and closed.
1971 For example, to detach a pci device port 0.
1973 .. code-block:: console
1975 testpmd> port stop 0
1978 testpmd> port close 0
1982 testpmd> port detach 0
1984 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1985 EAL: remove driver: 8086:10fb rte_ixgbe_pmd
1986 EAL: PCI memory unmapped at 0x7f83bfa00000
1987 EAL: PCI memory unmapped at 0x7f83bfa80000
1991 For example, to detach a virtual device port 0.
1993 .. code-block:: console
1995 testpmd> port stop 0
1998 testpmd> port close 0
2002 testpmd> port detach 0
2004 PMD: Closing pcap ethdev on numa socket 0
2005 Port 'net_pcap0' is detached. Now total ports is 0
2008 To remove a pci device completely from the system, first detach the port from testpmd.
2009 Then the device should be moved under kernel management.
2010 Finally the device can be removed using kernel pci hotplug functionality.
2012 For example, to move a pci device under kernel management:
2014 .. code-block:: console
2016 sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
2018 ./usertools/dpdk-devbind.py --status
2020 Network devices using DPDK-compatible driver
2021 ============================================
2024 Network devices using kernel driver
2025 ===================================
2026 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
2028 To remove a port created by a virtual device, above steps are not needed.
2033 Start all ports or a specific port::
2035 testpmd> port start (port_id|all)
2040 Stop all ports or a specific port::
2042 testpmd> port stop (port_id|all)
2047 Close all ports or a specific port::
2049 testpmd> port close (port_id|all)
2054 Reset all ports or a specific port::
2056 testpmd> port reset (port_id|all)
2058 User should stop port(s) before resetting and (re-)start after reset.
2060 port config - queue ring size
2061 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2063 Configure a rx/tx queue ring size::
2065 testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
2067 Only take effect after command that (re-)start the port or command that setup specific queue.
2069 port start/stop queue
2070 ~~~~~~~~~~~~~~~~~~~~~
2072 Start/stop a rx/tx queue on a specific port::
2074 testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
2076 port config - queue deferred start
2077 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2079 Switch on/off deferred start of a specific port queue::
2081 testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
2084 ~~~~~~~~~~~~~~~~~~~~~
2086 Setup a rx/tx queue on a specific port::
2088 testpmd> port (port_id) (rxq|txq) (queue_id) setup
2090 Only take effect when port is started.
2095 Set the speed and duplex mode for all ports or a specific port::
2097 testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|auto) \
2098 duplex (half|full|auto)
2100 port config - queues/descriptors
2101 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2103 Set number of queues/descriptors for rxq, txq, rxd and txd::
2105 testpmd> port config all (rxq|txq|rxd|txd) (value)
2107 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
2109 port config - max-pkt-len
2110 ~~~~~~~~~~~~~~~~~~~~~~~~~
2112 Set the maximum packet length::
2114 testpmd> port config all max-pkt-len (value)
2116 This is equivalent to the ``--max-pkt-len`` command-line option.
2118 port config - Drop Packets
2119 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2121 Enable or disable packet drop on all RX queues of all ports when no receive buffers available::
2123 testpmd> port config all drop-en (on|off)
2125 Packet dropping when no receive buffers available is off by default.
2127 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
2132 Set the RSS (Receive Side Scaling) mode on or off::
2134 testpmd> port config all rss (all|default|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|vxlan-gpe|none)
2136 RSS is on by default.
2138 The ``all`` option is equivalent to ip|tcp|udp|sctp|ether.
2139 The ``default`` option enables all supported RSS types reported by device info.
2140 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
2142 port config - RSS Reta
2143 ~~~~~~~~~~~~~~~~~~~~~~
2145 Set the RSS (Receive Side Scaling) redirection table::
2147 testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
2152 Set the DCB mode for an individual port::
2154 testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
2156 The traffic class should be 4 or 8.
2161 Set the number of packets per burst::
2163 testpmd> port config all burst (value)
2165 This is equivalent to the ``--burst`` command-line option.
2167 port config - Threshold
2168 ~~~~~~~~~~~~~~~~~~~~~~~
2170 Set thresholds for TX/RX queues::
2172 testpmd> port config all (threshold) (value)
2174 Where the threshold type can be:
2176 * ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
2178 * ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
2180 * ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
2182 * ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
2184 * ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
2186 * ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
2188 * ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
2190 * ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
2192 * ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
2194 These threshold options are also available from the command-line.
2199 Set the value of ether-type for E-tag::
2201 testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
2203 Enable/disable the E-tag support::
2205 testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
2207 port config pctype mapping
2208 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2210 Reset pctype mapping table::
2212 testpmd> port config (port_id) pctype mapping reset
2214 Update hardware defined pctype to software defined flow type mapping table::
2216 testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
2220 * ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
2222 * ``flow_type_id``: software flow type id as the index of the pctype mapping table.
2224 port config input set
2225 ~~~~~~~~~~~~~~~~~~~~~
2227 Config RSS/FDIR/FDIR flexible payload input set for some pctype::
2229 testpmd> port config (port_id) pctype (pctype_id) \
2230 (hash_inset|fdir_inset|fdir_flx_inset) \
2231 (get|set|clear) field (field_idx)
2233 Clear RSS/FDIR/FDIR flexible payload input set for some pctype::
2235 testpmd> port config (port_id) pctype (pctype_id) \
2236 (hash_inset|fdir_inset|fdir_flx_inset) clear all
2240 * ``pctype_id``: hardware packet classification types.
2241 * ``field_idx``: hardware field index.
2243 port config udp_tunnel_port
2244 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2246 Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols::
2248 testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe (udp_port)
2250 port config tx_metadata
2251 ~~~~~~~~~~~~~~~~~~~~~~~
2253 Set Tx metadata value per port.
2254 testpmd will add this value to any Tx packet sent from this port::
2256 testpmd> port config (port_id) tx_metadata (value)
2261 To configure MTU(Maximum Transmission Unit) on devices using testpmd::
2263 testpmd> port config mtu (port_id) (value)
2265 port config rss hash key
2266 ~~~~~~~~~~~~~~~~~~~~~~~~
2268 To configure the RSS hash key used to compute the RSS
2269 hash of input [IP] packets received on port::
2271 testpmd> port config <port_id> rss-hash-key (ipv4|ipv4-frag|\
2272 ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\
2273 ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|\
2274 ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|\
2275 ipv6-udp-ex <string of hex digits \
2276 (variable length, NIC dependent)>)
2281 The following sections show functions for device operations.
2286 Detach a device specified by pci address or virtual device args::
2288 testpmd> device detach (identifier)
2290 Before detaching a device associated with ports, the ports should be stopped and closed.
2292 For example, to detach a pci device whose address is 0002:03:00.0.
2294 .. code-block:: console
2296 testpmd> device detach 0002:03:00.0
2297 Removing a device...
2298 Port 1 is now closed
2299 EAL: Releasing pci mapped resource for 0002:03:00.0
2300 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218a050000
2301 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218c050000
2302 Device 0002:03:00.0 is detached
2303 Now total ports is 1
2305 For example, to detach a port created by pcap PMD.
2307 .. code-block:: console
2309 testpmd> device detach net_pcap0
2310 Removing a device...
2311 Port 0 is now closed
2312 Device net_pcap0 is detached
2313 Now total ports is 0
2316 In this case, identifier is ``net_pcap0``.
2317 This identifier format is the same as ``--vdev`` format of DPDK applications.
2319 Link Bonding Functions
2320 ----------------------
2322 The Link Bonding functions make it possible to dynamically create and
2323 manage link bonding devices from within testpmd interactive prompt.
2325 create bonded device
2326 ~~~~~~~~~~~~~~~~~~~~
2328 Create a new bonding device::
2330 testpmd> create bonded device (mode) (socket)
2332 For example, to create a bonded device in mode 1 on socket 0::
2334 testpmd> create bonded device 1 0
2335 created new bonded device (port X)
2340 Adds Ethernet device to a Link Bonding device::
2342 testpmd> add bonding slave (slave id) (port id)
2344 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2346 testpmd> add bonding slave 6 10
2349 remove bonding slave
2350 ~~~~~~~~~~~~~~~~~~~~
2352 Removes an Ethernet slave device from a Link Bonding device::
2354 testpmd> remove bonding slave (slave id) (port id)
2356 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2358 testpmd> remove bonding slave 6 10
2363 Set the Link Bonding mode of a Link Bonding device::
2365 testpmd> set bonding mode (value) (port id)
2367 For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
2369 testpmd> set bonding mode 3 10
2374 Set an Ethernet slave device as the primary device on a Link Bonding device::
2376 testpmd> set bonding primary (slave id) (port id)
2378 For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
2380 testpmd> set bonding primary 6 10
2385 Set the MAC address of a Link Bonding device::
2387 testpmd> set bonding mac (port id) (mac)
2389 For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
2391 testpmd> set bonding mac 10 00:00:00:00:00:01
2393 set bonding xmit_balance_policy
2394 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2396 Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
2398 testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
2400 For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
2402 testpmd> set bonding xmit_balance_policy 10 l34
2405 set bonding mon_period
2406 ~~~~~~~~~~~~~~~~~~~~~~
2408 Set the link status monitoring polling period in milliseconds for a bonding device.
2410 This adds support for PMD slave devices which do not support link status interrupts.
2411 When the mon_period is set to a value greater than 0 then all PMD's which do not support
2412 link status ISR will be queried every polling interval to check if their link status has changed::
2414 testpmd> set bonding mon_period (port_id) (value)
2416 For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
2418 testpmd> set bonding mon_period 5 150
2421 set bonding lacp dedicated_queue
2422 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2424 Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2425 when in mode 4 (link-aggregation-802.3ad)::
2427 testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2430 set bonding agg_mode
2431 ~~~~~~~~~~~~~~~~~~~~
2433 Enable one of the specific aggregators mode when in mode 4 (link-aggregation-802.3ad)::
2435 testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable)
2441 Show the current configuration of a Link Bonding device::
2443 testpmd> show bonding config (port id)
2446 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2447 in balance mode with a transmission policy of layer 2+3::
2449 testpmd> show bonding config 9
2451 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
2453 Active Slaves (3): [1 3 4]
2460 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2461 This is mainly useful for debugging purposes.
2462 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2463 and fields that can be accessed.
2468 Display the value of a port register::
2470 testpmd> read reg (port_id) (address)
2472 For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
2474 testpmd> read reg 0 0xEE00
2475 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
2480 Display a port register bit field::
2482 testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2484 For example, reading the lowest two bits from the register in the example above::
2486 testpmd> read regfield 0 0xEE00 0 1
2487 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
2492 Display a single port register bit::
2494 testpmd> read regbit (port_id) (address) (bit_x)
2496 For example, reading the lowest bit from the register in the example above::
2498 testpmd> read regbit 0 0xEE00 0
2499 port 0 PCI register at offset 0xEE00: bit 0=1
2504 Set the value of a port register::
2506 testpmd> write reg (port_id) (address) (value)
2508 For example, to clear a register::
2510 testpmd> write reg 0 0xEE00 0x0
2511 port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2516 Set bit field of a port register::
2518 testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2520 For example, writing to the register cleared in the example above::
2522 testpmd> write regfield 0 0xEE00 0 1 2
2523 port 0 PCI register at offset 0xEE00: 0x00000002 (2)
2528 Set single bit value of a port register::
2530 testpmd> write regbit (port_id) (address) (bit_x) (value)
2532 For example, to set the high bit in the register from the example above::
2534 testpmd> write regbit 0 0xEE00 31 1
2535 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
2537 Traffic Metering and Policing
2538 -----------------------------
2540 The following section shows functions for configuring traffic metering and
2541 policing on the ethernet device through the use of generic ethdev API.
2543 show port traffic management capability
2544 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2546 Show traffic metering and policing capability of the port::
2548 testpmd> show port meter cap (port_id)
2550 add port meter profile (srTCM rfc2967)
2551 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2553 Add meter profile (srTCM rfc2697) to the ethernet device::
2555 testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2560 * ``profile_id``: ID for the meter profile.
2561 * ``cir``: Committed Information Rate (CIR) (bytes/second).
2562 * ``cbs``: Committed Burst Size (CBS) (bytes).
2563 * ``ebs``: Excess Burst Size (EBS) (bytes).
2565 add port meter profile (trTCM rfc2968)
2566 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2568 Add meter profile (srTCM rfc2698) to the ethernet device::
2570 testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2571 (cir) (pir) (cbs) (pbs)
2575 * ``profile_id``: ID for the meter profile.
2576 * ``cir``: Committed information rate (bytes/second).
2577 * ``pir``: Peak information rate (bytes/second).
2578 * ``cbs``: Committed burst size (bytes).
2579 * ``pbs``: Peak burst size (bytes).
2581 add port meter profile (trTCM rfc4115)
2582 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2584 Add meter profile (trTCM rfc4115) to the ethernet device::
2586 testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2587 (cir) (eir) (cbs) (ebs)
2591 * ``profile_id``: ID for the meter profile.
2592 * ``cir``: Committed information rate (bytes/second).
2593 * ``eir``: Excess information rate (bytes/second).
2594 * ``cbs``: Committed burst size (bytes).
2595 * ``ebs``: Excess burst size (bytes).
2597 delete port meter profile
2598 ~~~~~~~~~~~~~~~~~~~~~~~~~
2600 Delete meter profile from the ethernet device::
2602 testpmd> del port meter profile (port_id) (profile_id)
2607 Create new meter object for the ethernet device::
2609 testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2610 (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \
2611 (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2616 * ``mtr_id``: meter object ID.
2617 * ``profile_id``: ID for the meter profile.
2618 * ``meter_enable``: When this parameter has a non-zero value, the meter object
2619 gets enabled at the time of creation, otherwise remains disabled.
2620 * ``g_action``: Policer action for the packet with green color.
2621 * ``y_action``: Policer action for the packet with yellow color.
2622 * ``r_action``: Policer action for the packet with red color.
2623 * ``stats_mask``: Mask of statistics counter types to be enabled for the
2625 * ``shared``: When this parameter has a non-zero value, the meter object is
2626 shared by multiple flows. Otherwise, meter object is used by single flow.
2627 * ``use_pre_meter_color``: When this parameter has a non-zero value, the
2628 input color for the current meter object is determined by the latest meter
2629 object in the same flow. Otherwise, the current meter object uses the
2630 *dscp_table* to determine the input color.
2631 * ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2632 color, 0 <= x <= 63.
2637 Enable meter for the ethernet device::
2639 testpmd> enable port meter (port_id) (mtr_id)
2644 Disable meter for the ethernet device::
2646 testpmd> disable port meter (port_id) (mtr_id)
2651 Delete meter for the ethernet device::
2653 testpmd> del port meter (port_id) (mtr_id)
2655 Set port meter profile
2656 ~~~~~~~~~~~~~~~~~~~~~~
2658 Set meter profile for the ethernet device::
2660 testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2662 set port meter dscp table
2663 ~~~~~~~~~~~~~~~~~~~~~~~~~
2665 Set meter dscp table for the ethernet device::
2667 testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \
2668 (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2670 set port meter policer action
2671 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2673 Set meter policer action for the ethernet device::
2675 testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \
2676 (action0) [(action1) (action1)]
2680 * ``action_mask``: Bit mask indicating which policer actions need to be
2681 updated. One or more policer actions can be updated in a single function
2682 invocation. To update the policer action associated with color C, bit
2683 (1 << C) needs to be set in *action_mask* and element at position C
2684 in the *actions* array needs to be valid.
2685 * ``actionx``: Policer action for the color x,
2686 RTE_MTR_GREEN <= x < RTE_MTR_COLORS
2688 set port meter stats mask
2689 ~~~~~~~~~~~~~~~~~~~~~~~~~
2691 Set meter stats mask for the ethernet device::
2693 testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2697 * ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2699 show port meter stats
2700 ~~~~~~~~~~~~~~~~~~~~~
2702 Show meter stats of the ethernet device::
2704 testpmd> show port meter stats (port_id) (mtr_id) (clear)
2708 * ``clear``: Flag that indicates whether the statistics counters should
2709 be cleared (i.e. set to zero) immediately after they have been read or not.
2714 The following section shows functions for configuring traffic management on
2715 on the ethernet device through the use of generic TM API.
2717 show port traffic management capability
2718 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2720 Show traffic management capability of the port::
2722 testpmd> show port tm cap (port_id)
2724 show port traffic management capability (hierarchy level)
2725 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2727 Show traffic management hierarchy level capability of the port::
2729 testpmd> show port tm level cap (port_id) (level_id)
2731 show port traffic management capability (hierarchy node level)
2732 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2734 Show the traffic management hierarchy node capability of the port::
2736 testpmd> show port tm node cap (port_id) (node_id)
2738 show port traffic management hierarchy node type
2739 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2741 Show the port traffic management hierarchy node type::
2743 testpmd> show port tm node type (port_id) (node_id)
2745 show port traffic management hierarchy node stats
2746 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2748 Show the port traffic management hierarchy node statistics::
2750 testpmd> show port tm node stats (port_id) (node_id) (clear)
2754 * ``clear``: When this parameter has a non-zero value, the statistics counters
2755 are cleared (i.e. set to zero) immediately after they have been read,
2756 otherwise the statistics counters are left untouched.
2758 Add port traffic management private shaper profile
2759 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2761 Add the port traffic management private shaper profile::
2763 testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2764 (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size) \
2765 (packet_length_adjust)
2769 * ``shaper_profile id``: Shaper profile ID for the new profile.
2770 * ``cmit_tb_rate``: Committed token bucket rate (bytes per second).
2771 * ``cmit_tb_size``: Committed token bucket size (bytes).
2772 * ``peak_tb_rate``: Peak token bucket rate (bytes per second).
2773 * ``peak_tb_size``: Peak token bucket size (bytes).
2774 * ``packet_length_adjust``: The value (bytes) to be added to the length of
2775 each packet for the purpose of shaping. This parameter value can be used to
2776 correct the packet length with the framing overhead bytes that are consumed
2779 Delete port traffic management private shaper profile
2780 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2782 Delete the port traffic management private shaper::
2784 testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2788 * ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2790 Add port traffic management shared shaper
2791 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2793 Create the port traffic management shared shaper::
2795 testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2800 * ``shared_shaper_id``: Shared shaper ID to be created.
2801 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2803 Set port traffic management shared shaper
2804 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2806 Update the port traffic management shared shaper::
2808 testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2813 * ``shared_shaper_id``: Shared shaper ID to be update.
2814 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2816 Delete port traffic management shared shaper
2817 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2819 Delete the port traffic management shared shaper::
2821 testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2825 * ``shared_shaper_id``: Shared shaper ID to be deleted.
2827 Set port traffic management hierarchy node private shaper
2828 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2830 set the port traffic management hierarchy node private shaper::
2832 testpmd> set port tm node shaper profile (port_id) (node_id) \
2837 * ``shaper_profile id``: Private shaper profile ID to be enabled on the
2840 Add port traffic management WRED profile
2841 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2843 Create a new WRED profile::
2845 testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2846 (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2847 (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2848 (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2852 * ``wred_profile id``: Identifier for the newly create WRED profile
2853 * ``color_g``: Packet color (green)
2854 * ``min_th_g``: Minimum queue threshold for packet with green color
2855 * ``max_th_g``: Minimum queue threshold for packet with green color
2856 * ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2857 * ``wq_log2_g``: Negated log2 of queue weight (wq)
2858 * ``color_y``: Packet color (yellow)
2859 * ``min_th_y``: Minimum queue threshold for packet with yellow color
2860 * ``max_th_y``: Minimum queue threshold for packet with yellow color
2861 * ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2862 * ``wq_log2_y``: Negated log2 of queue weight (wq)
2863 * ``color_r``: Packet color (red)
2864 * ``min_th_r``: Minimum queue threshold for packet with yellow color
2865 * ``max_th_r``: Minimum queue threshold for packet with yellow color
2866 * ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2867 * ``wq_log2_r``: Negated log2 of queue weight (wq)
2869 Delete port traffic management WRED profile
2870 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2872 Delete the WRED profile::
2874 testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2876 Add port traffic management hierarchy nonleaf node
2877 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2879 Add nonleaf node to port traffic management hierarchy::
2881 testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2882 (priority) (weight) (level_id) (shaper_profile_id) \
2883 (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2884 [(shared_shaper_0) (shared_shaper_1) ...] \
2888 * ``parent_node_id``: Node ID of the parent.
2889 * ``priority``: Node priority (highest node priority is zero). This is used by
2890 the SP algorithm running on the parent node for scheduling this node.
2891 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2892 to the weight sum of all siblings that have the same priority. It is used by
2893 the WFQ algorithm running on the parent node for scheduling this node.
2894 * ``level_id``: Hierarchy level of the node.
2895 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2897 * ``n_sp_priorities``: Number of strict priorities.
2898 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2899 * ``n_shared_shapers``: Number of shared shapers.
2900 * ``shared_shaper_id``: Shared shaper id.
2902 Add port traffic management hierarchy leaf node
2903 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2905 Add leaf node to port traffic management hierarchy::
2907 testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2908 (priority) (weight) (level_id) (shaper_profile_id) \
2909 (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2910 [(shared_shaper_id) (shared_shaper_id) ...] \
2914 * ``parent_node_id``: Node ID of the parent.
2915 * ``priority``: Node priority (highest node priority is zero). This is used by
2916 the SP algorithm running on the parent node for scheduling this node.
2917 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2918 to the weight sum of all siblings that have the same priority. It is used by
2919 the WFQ algorithm running on the parent node for scheduling this node.
2920 * ``level_id``: Hierarchy level of the node.
2921 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2923 * ``cman_mode``: Congestion management mode to be enabled for this node.
2924 * ``wred_profile_id``: WRED profile id to be enabled for this node.
2925 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2926 * ``n_shared_shapers``: Number of shared shapers.
2927 * ``shared_shaper_id``: Shared shaper id.
2929 Delete port traffic management hierarchy node
2930 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2932 Delete node from port traffic management hierarchy::
2934 testpmd> del port tm node (port_id) (node_id)
2936 Update port traffic management hierarchy parent node
2937 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2939 Update port traffic management hierarchy parent node::
2941 testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
2944 This function can only be called after the hierarchy commit invocation. Its
2945 success depends on the port support for this operation, as advertised through
2946 the port capability set. This function is valid for all nodes of the traffic
2947 management hierarchy except root node.
2949 Suspend port traffic management hierarchy node
2950 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2952 testpmd> suspend port tm node (port_id) (node_id)
2954 Resume port traffic management hierarchy node
2955 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2957 testpmd> resume port tm node (port_id) (node_id)
2959 Commit port traffic management hierarchy
2960 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2962 Commit the traffic management hierarchy on the port::
2964 testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2968 * ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
2969 call failure. On the other hand, hierarchy is preserved when this parameter
2972 Set port traffic management mark VLAN dei
2973 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2975 Enables/Disables the traffic management marking on the port for VLAN packets::
2977 testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red>
2981 * ``port_id``: The port which on which VLAN packets marked as ``green`` or
2982 ``yellow`` or ``red`` will have dei bit enabled
2984 * ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green
2986 * ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow
2988 * ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red
2990 Set port traffic management mark IP dscp
2991 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2993 Enables/Disables the traffic management marking on the port for IP dscp packets::
2995 testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red>
2999 * ``port_id``: The port which on which IP packets marked as ``green`` or
3000 ``yellow`` or ``red`` will have IP dscp bits updated
3002 * ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets
3004 * ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets
3006 * ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets
3008 Set port traffic management mark IP ecn
3009 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3011 Enables/Disables the traffic management marking on the port for IP ecn packets::
3013 testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red>
3017 * ``port_id``: The port which on which IP packets marked as ``green`` or
3018 ``yellow`` or ``red`` will have IP ecn bits updated
3020 * ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01 or 2'b10
3021 to ecn of 2'b11 when IP is caring TCP or SCTP
3023 * ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
3024 to ecn of 2'b11 when IP is caring TCP or SCTP
3026 * ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
3027 to ecn of 2'b11 when IP is caring TCP or SCTP
3029 Set port traffic management default hierarchy (softnic forwarding mode)
3030 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3032 set the traffic management default hierarchy on the port::
3034 testpmd> set port tm hierarchy default (port_id)
3039 This section details the available filter functions that are available.
3041 Note these functions interface the deprecated legacy filtering framework,
3042 superseded by *rte_flow*. See `Flow rules management`_.
3045 ~~~~~~~~~~~~~~~~~~~~
3047 Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
3049 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
3050 ethertype (ether_type) (drop|fwd) queue (queue_id)
3052 The available information parameters are:
3054 * ``port_id``: The port which the Ethertype filter assigned on.
3056 * ``mac_addr``: Compare destination mac address.
3058 * ``mac_ignr``: Ignore destination mac address match.
3060 * ``mac_address``: Destination mac address to match.
3062 * ``ether_type``: The EtherType value want to match,
3063 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
3065 * ``queue_id``: The receive queue associated with this EtherType filter.
3066 It is meaningless when deleting or dropping.
3068 Example, to add/remove an ethertype filter rule::
3070 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
3071 ethertype 0x0806 fwd queue 3
3073 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
3074 ethertype 0x0806 fwd queue 3
3079 Add or delete a 2-tuple filter,
3080 which identifies packets by specific protocol and destination TCP/UDP port
3081 and forwards packets into one of the receive queues::
3083 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
3084 protocol (protocol_value) mask (mask_value) \
3085 tcp_flags (tcp_flags_value) priority (prio_value) \
3088 The available information parameters are:
3090 * ``port_id``: The port which the 2-tuple filter assigned on.
3092 * ``dst_port_value``: Destination port in L4.
3094 * ``protocol_value``: IP L4 protocol.
3096 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
3098 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
3100 * ``prio_value``: Priority of this filter.
3102 * ``queue_id``: The receive queue associated with this 2-tuple filter.
3104 Example, to add/remove an 2tuple filter rule::
3106 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
3107 tcp_flags 0x02 priority 3 queue 3
3109 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
3110 tcp_flags 0x02 priority 3 queue 3
3115 Add or delete a 5-tuple filter,
3116 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
3117 and routes packets into one of the receive queues::
3119 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
3120 (src_address) dst_port (dst_port_value) \
3121 src_port (src_port_value) protocol (protocol_value) \
3122 mask (mask_value) tcp_flags (tcp_flags_value) \
3123 priority (prio_value) queue (queue_id)
3125 The available information parameters are:
3127 * ``port_id``: The port which the 5-tuple filter assigned on.
3129 * ``dst_address``: Destination IP address.
3131 * ``src_address``: Source IP address.
3133 * ``dst_port_value``: TCP/UDP destination port.
3135 * ``src_port_value``: TCP/UDP source port.
3137 * ``protocol_value``: L4 protocol.
3139 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
3141 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
3143 * ``prio_value``: The priority of this filter.
3145 * ``queue_id``: The receive queue associated with this 5-tuple filter.
3147 Example, to add/remove an 5tuple filter rule::
3149 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3150 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3151 flags 0x0 priority 3 queue 3
3153 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3154 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3155 flags 0x0 priority 3 queue 3
3160 Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
3162 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
3164 The available information parameters are:
3166 * ``port_id``: The port which the SYN filter assigned on.
3168 * ``high``: This SYN filter has higher priority than other filters.
3170 * ``low``: This SYN filter has lower priority than other filters.
3172 * ``queue_id``: The receive queue associated with this SYN filter
3176 testpmd> syn_filter 0 add priority high queue 3
3181 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
3182 and routed into one of the receive queues::
3184 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
3185 mask (mask_value) priority (prio_value) queue (queue_id)
3187 The available information parameters are:
3189 * ``port_id``: The port which the Flex filter is assigned on.
3191 * ``len_value``: Filter length in bytes, no greater than 128.
3193 * ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
3195 * ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
3197 * ``prio_value``: The priority of this filter.
3199 * ``queue_id``: The receive queue associated with this Flex filter.
3203 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
3204 mask 000C priority 3 queue 3
3206 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
3207 mask 000C priority 3 queue 3
3210 .. _testpmd_flow_director:
3212 flow_director_filter
3213 ~~~~~~~~~~~~~~~~~~~~
3215 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
3217 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
3218 Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
3220 * Perfect match filters.
3221 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3222 The masked fields are for IP flow.
3224 * Signature filters.
3225 The hardware checks a match between a hash-based signature of the masked fields of the received packet.
3227 * Perfect-mac-vlan match filters.
3228 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3229 The masked fields are for MAC VLAN flow.
3231 * Perfect-tunnel match filters.
3232 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3233 The masked fields are for tunnel flow.
3235 * Perfect-raw-flow-type match filters.
3236 The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet.
3237 The masked fields are specified by input sets.
3239 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
3240 per flow type and the flexible payload.
3242 The Flow Director can also mask out parts of all of these fields so that filters
3243 are only applied to certain fields or parts of the fields.
3245 Note that for raw flow type mode the source and destination fields in the
3246 raw packet buffer need to be presented in a reversed order with respect
3247 to the expected received packets.
3248 For example: IP source and destination addresses or TCP/UDP/SCTP
3249 source and destination ports
3251 Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
3253 # Commands to add flow director filters of different flow types::
3255 flow_director_filter (port_id) mode IP (add|del|update) \
3256 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
3257 src (src_ip_address) dst (dst_ip_address) \
3258 tos (tos_value) proto (proto_value) ttl (ttl_value) \
3259 vlan (vlan_value) flexbytes (flexbytes_value) \
3260 (drop|fwd) pf|vf(vf_id) queue (queue_id) \
3263 flow_director_filter (port_id) mode IP (add|del|update) \
3264 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
3265 src (src_ip_address) (src_port) \
3266 dst (dst_ip_address) (dst_port) \
3267 tos (tos_value) ttl (ttl_value) \
3268 vlan (vlan_value) flexbytes (flexbytes_value) \
3269 (drop|fwd) queue pf|vf(vf_id) (queue_id) \
3272 flow_director_filter (port_id) mode IP (add|del|update) \
3273 flow (ipv4-sctp|ipv6-sctp) \
3274 src (src_ip_address) (src_port) \
3275 dst (dst_ip_address) (dst_port) \
3276 tos (tos_value) ttl (ttl_value) \
3277 tag (verification_tag) vlan (vlan_value) \
3278 flexbytes (flexbytes_value) (drop|fwd) \
3279 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
3281 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
3282 ether (ethertype) flexbytes (flexbytes_value) \
3283 (drop|fwd) pf|vf(vf_id) queue (queue_id)
3286 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
3287 mac (mac_address) vlan (vlan_value) \
3288 flexbytes (flexbytes_value) (drop|fwd) \
3289 queue (queue_id) fd_id (fd_id_value)
3291 flow_director_filter (port_id) mode Tunnel (add|del|update) \
3292 mac (mac_address) vlan (vlan_value) \
3293 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
3294 flexbytes (flexbytes_value) (drop|fwd) \
3295 queue (queue_id) fd_id (fd_id_value)
3297 flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \
3298 (drop|fwd) queue (queue_id) fd_id (fd_id_value) \
3299 packet (packet file name)
3301 For example, to add an ipv4-udp flow type filter::
3303 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
3304 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
3305 fwd pf queue 1 fd_id 1
3307 For example, add an ipv4-other flow type filter::
3309 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
3310 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
3311 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
3316 Flush all flow director filters on a device::
3318 testpmd> flush_flow_director (port_id)
3320 Example, to flush all flow director filter on port 0::
3322 testpmd> flush_flow_director 0
3327 Set flow director's input masks::
3329 flow_director_mask (port_id) mode IP vlan (vlan_value) \
3330 src_mask (ipv4_src) (ipv6_src) (src_port) \
3331 dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
3333 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
3335 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
3336 mac (mac_value) tunnel-type (tunnel_type_value) \
3337 tunnel-id (tunnel_id_value)
3339 Example, to set flow director mask on port 0::
3341 testpmd> flow_director_mask 0 mode IP vlan 0xefff \
3342 src_mask 255.255.255.255 \
3343 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
3344 dst_mask 255.255.255.255 \
3345 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
3347 flow_director_flex_mask
3348 ~~~~~~~~~~~~~~~~~~~~~~~
3350 set masks of flow director's flexible payload based on certain flow type::
3352 testpmd> flow_director_flex_mask (port_id) \
3353 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3354 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
3355 l2_payload|all) (mask)
3357 Example, to set flow director's flex mask for all flow type on port 0::
3359 testpmd> flow_director_flex_mask 0 flow all \
3360 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
3363 flow_director_flex_payload
3364 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3366 Configure flexible payload selection::
3368 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3370 For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
3372 testpmd> flow_director_flex_payload 0 l4 \
3373 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
3375 get_sym_hash_ena_per_port
3376 ~~~~~~~~~~~~~~~~~~~~~~~~~
3378 Get symmetric hash enable configuration per port::
3380 get_sym_hash_ena_per_port (port_id)
3382 For example, to get symmetric hash enable configuration of port 1::
3384 testpmd> get_sym_hash_ena_per_port 1
3386 set_sym_hash_ena_per_port
3387 ~~~~~~~~~~~~~~~~~~~~~~~~~
3389 Set symmetric hash enable configuration per port to enable or disable::
3391 set_sym_hash_ena_per_port (port_id) (enable|disable)
3393 For example, to set symmetric hash enable configuration of port 1 to enable::
3395 testpmd> set_sym_hash_ena_per_port 1 enable
3397 get_hash_global_config
3398 ~~~~~~~~~~~~~~~~~~~~~~
3400 Get the global configurations of hash filters::
3402 get_hash_global_config (port_id)
3404 For example, to get the global configurations of hash filters of port 1::
3406 testpmd> get_hash_global_config 1
3408 set_hash_global_config
3409 ~~~~~~~~~~~~~~~~~~~~~~
3411 Set the global configurations of hash filters::
3413 set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default) \
3414 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
3415 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flow_id>) \
3418 For example, to enable simple_xor for flow type of ipv6 on port 2::
3420 testpmd> set_hash_global_config 2 simple_xor ipv6 enable
3425 Set the input set for hash::
3427 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3428 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3429 l2_payload|<flow_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3430 ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
3431 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
3432 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
3433 fld-8th|none) (select|add)
3435 For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
3437 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
3442 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3443 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3445 Set the input set for flow director::
3447 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3448 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3449 l2_payload|<flow_id>) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3450 ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
3451 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
3452 sctp-dst-port|sctp-veri-tag|none) (select|add)
3454 For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
3456 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
3461 Set different GRE key length for input set::
3463 global_config (port_id) gre-key-len (number in bytes)
3465 For example to set GRE key length for input set to 4 bytes on port 0::
3467 testpmd> global_config 0 gre-key-len 4
3470 .. _testpmd_rte_flow:
3472 Flow rules management
3473 ---------------------
3475 Control of the generic flow API (*rte_flow*) is fully exposed through the
3476 ``flow`` command (validation, creation, destruction, queries and operation
3479 Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3480 features simultaneously may cause undefined side-effects and is therefore
3486 Because the ``flow`` command uses dynamic tokens to handle the large number
3487 of possible flow rules combinations, its behavior differs slightly from
3488 other commands, in particular:
3490 - Pressing *?* or the *<tab>* key displays contextual help for the current
3491 token, not that of the entire command.
3493 - Optional and repeated parameters are supported (provided they are listed
3494 in the contextual help).
3496 The first parameter stands for the operation mode. Possible operations and
3497 their general syntax are described below. They are covered in detail in the
3500 - Check whether a flow rule can be created::
3502 flow validate {port_id}
3503 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3504 pattern {item} [/ {item} [...]] / end
3505 actions {action} [/ {action} [...]] / end
3507 - Create a flow rule::
3509 flow create {port_id}
3510 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3511 pattern {item} [/ {item} [...]] / end
3512 actions {action} [/ {action} [...]] / end
3514 - Destroy specific flow rules::
3516 flow destroy {port_id} rule {rule_id} [...]
3518 - Destroy all flow rules::
3520 flow flush {port_id}
3522 - Query an existing flow rule::
3524 flow query {port_id} {rule_id} {action}
3526 - List existing flow rules sorted by priority, filtered by group
3529 flow list {port_id} [group {group_id}] [...]
3531 - Restrict ingress traffic to the defined flow rules::
3533 flow isolate {port_id} {boolean}
3535 Validating flow rules
3536 ~~~~~~~~~~~~~~~~~~~~~
3538 ``flow validate`` reports whether a flow rule would be accepted by the
3539 underlying device in its current state but stops short of creating it. It is
3540 bound to ``rte_flow_validate()``::
3542 flow validate {port_id}
3543 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3544 pattern {item} [/ {item} [...]] / end
3545 actions {action} [/ {action} [...]] / end
3547 If successful, it will show::
3551 Otherwise it will show an error message of the form::
3553 Caught error type [...] ([...]): [...]
3555 This command uses the same parameters as ``flow create``, their format is
3556 described in `Creating flow rules`_.
3558 Check whether redirecting any Ethernet packet received on port 0 to RX queue
3559 index 6 is supported::
3561 testpmd> flow validate 0 ingress pattern eth / end
3562 actions queue index 6 / end
3566 Port 0 does not support TCPv6 rules::
3568 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3570 Caught error type 9 (specific pattern item): Invalid argument
3576 ``flow create`` validates and creates the specified flow rule. It is bound
3577 to ``rte_flow_create()``::
3579 flow create {port_id}
3580 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3581 pattern {item} [/ {item} [...]] / end
3582 actions {action} [/ {action} [...]] / end
3584 If successful, it will return a flow rule ID usable with other commands::
3586 Flow rule #[...] created
3588 Otherwise it will show an error message of the form::
3590 Caught error type [...] ([...]): [...]
3592 Parameters describe in the following order:
3594 - Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens).
3595 - A matching pattern, starting with the *pattern* token and terminated by an
3597 - Actions, starting with the *actions* token and terminated by an *end*
3600 These translate directly to *rte_flow* objects provided as-is to the
3601 underlying functions.
3603 The shortest valid definition only comprises mandatory tokens::
3605 testpmd> flow create 0 pattern end actions end
3607 Note that PMDs may refuse rules that essentially do nothing such as this
3610 **All unspecified object values are automatically initialized to 0.**
3615 These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3616 specified before the ``pattern`` token.
3618 - ``group {group id}``: priority group.
3619 - ``priority {level}``: priority level within group.
3620 - ``ingress``: rule applies to ingress traffic.
3621 - ``egress``: rule applies to egress traffic.
3622 - ``transfer``: apply rule directly to endpoints found in pattern.
3624 Each instance of an attribute specified several times overrides the previous
3625 value as shown below (group 4 is used)::
3627 testpmd> flow create 0 group 42 group 24 group 4 [...]
3629 Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3631 While not specifying a direction is an error, some rules may allow both
3634 Most rules affect RX therefore contain the ``ingress`` token::
3636 testpmd> flow create 0 ingress pattern [...]
3641 A matching pattern starts after the ``pattern`` token. It is made of pattern
3642 items and is terminated by a mandatory ``end`` item.
3644 Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3645 rte_flow_item_type``).
3647 The ``/`` token is used as a separator between pattern items as shown
3650 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3652 Note that protocol items like these must be stacked from lowest to highest
3653 layer to make sense. For instance, the following rule is either invalid or
3654 unlikely to match any packet::
3656 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3658 More information on these restrictions can be found in the *rte_flow*
3661 Several items support additional specification structures, for example
3662 ``ipv4`` allows specifying source and destination addresses as follows::
3664 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3665 dst is 10.2.0.0 / end [...]
3667 This rule matches all IPv4 traffic with the specified properties.
3669 In this example, ``src`` and ``dst`` are field names of the underlying
3670 ``struct rte_flow_item_ipv4`` object. All item properties can be specified
3671 in a similar fashion.
3673 The ``is`` token means that the subsequent value must be matched exactly,
3674 and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3675 accordingly. Possible assignment tokens are:
3677 - ``is``: match value perfectly (with full bit-mask).
3678 - ``spec``: match value according to configured bit-mask.
3679 - ``last``: specify upper bound to establish a range.
3680 - ``mask``: specify bit-mask with relevant bits set to one.
3681 - ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one.
3683 These yield identical results::
3685 ipv4 src is 10.1.1.1
3689 ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3693 ipv4 src spec 10.1.1.1 src prefix 32
3697 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3701 ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3703 Inclusive ranges can be defined with ``last``::
3705 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3707 Note that ``mask`` affects both ``spec`` and ``last``::
3709 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3710 # matches 10.1.0.0 to 10.2.255.255
3712 Properties can be modified multiple times::
3714 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3718 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3723 This section lists supported pattern items and their attributes, if any.
3725 - ``end``: end list of pattern items.
3727 - ``void``: no-op pattern item.
3729 - ``invert``: perform actions when pattern does not match.
3731 - ``any``: match any protocol for the current layer.
3733 - ``num {unsigned}``: number of layers covered.
3735 - ``pf``: match traffic from/to the physical function.
3737 - ``vf``: match traffic from/to a virtual function ID.
3739 - ``id {unsigned}``: VF ID.
3741 - ``phy_port``: match traffic from/to a specific physical port.
3743 - ``index {unsigned}``: physical port index.
3745 - ``port_id``: match traffic from/to a given DPDK port ID.
3747 - ``id {unsigned}``: DPDK port ID.
3749 - ``mark``: match value set in previously matched flow rule using the mark action.
3751 - ``id {unsigned}``: arbitrary integer value.
3753 - ``raw``: match an arbitrary byte string.
3755 - ``relative {boolean}``: look for pattern after the previous item.
3756 - ``search {boolean}``: search pattern from offset (see also limit).
3757 - ``offset {integer}``: absolute or relative offset for pattern.
3758 - ``limit {unsigned}``: search area limit for start of pattern.
3759 - ``pattern {string}``: byte string to look for.
3761 - ``eth``: match Ethernet header.
3763 - ``dst {MAC-48}``: destination MAC.
3764 - ``src {MAC-48}``: source MAC.
3765 - ``type {unsigned}``: EtherType or TPID.
3767 - ``vlan``: match 802.1Q/ad VLAN tag.
3769 - ``tci {unsigned}``: tag control information.
3770 - ``pcp {unsigned}``: priority code point.
3771 - ``dei {unsigned}``: drop eligible indicator.
3772 - ``vid {unsigned}``: VLAN identifier.
3773 - ``inner_type {unsigned}``: inner EtherType or TPID.
3775 - ``ipv4``: match IPv4 header.
3777 - ``tos {unsigned}``: type of service.
3778 - ``ttl {unsigned}``: time to live.
3779 - ``proto {unsigned}``: next protocol ID.
3780 - ``src {ipv4 address}``: source address.
3781 - ``dst {ipv4 address}``: destination address.
3783 - ``ipv6``: match IPv6 header.
3785 - ``tc {unsigned}``: traffic class.
3786 - ``flow {unsigned}``: flow label.
3787 - ``proto {unsigned}``: protocol (next header).
3788 - ``hop {unsigned}``: hop limit.
3789 - ``src {ipv6 address}``: source address.
3790 - ``dst {ipv6 address}``: destination address.
3792 - ``icmp``: match ICMP header.
3794 - ``type {unsigned}``: ICMP packet type.
3795 - ``code {unsigned}``: ICMP packet code.
3797 - ``udp``: match UDP header.
3799 - ``src {unsigned}``: UDP source port.
3800 - ``dst {unsigned}``: UDP destination port.
3802 - ``tcp``: match TCP header.
3804 - ``src {unsigned}``: TCP source port.
3805 - ``dst {unsigned}``: TCP destination port.
3807 - ``sctp``: match SCTP header.
3809 - ``src {unsigned}``: SCTP source port.
3810 - ``dst {unsigned}``: SCTP destination port.
3811 - ``tag {unsigned}``: validation tag.
3812 - ``cksum {unsigned}``: checksum.
3814 - ``vxlan``: match VXLAN header.
3816 - ``vni {unsigned}``: VXLAN identifier.
3818 - ``e_tag``: match IEEE 802.1BR E-Tag header.
3820 - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3822 - ``nvgre``: match NVGRE header.
3824 - ``tni {unsigned}``: virtual subnet ID.
3826 - ``mpls``: match MPLS header.
3828 - ``label {unsigned}``: MPLS label.
3830 - ``gre``: match GRE header.
3832 - ``protocol {unsigned}``: protocol type.
3834 - ``gre_key``: match GRE optional key field.
3836 - ``value {unsigned}``: key value.
3838 - ``fuzzy``: fuzzy pattern match, expect faster than default.
3840 - ``thresh {unsigned}``: accuracy threshold.
3842 - ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3844 - ``teid {unsigned}``: tunnel endpoint identifier.
3846 - ``geneve``: match GENEVE header.
3848 - ``vni {unsigned}``: virtual network identifier.
3849 - ``protocol {unsigned}``: protocol type.
3851 - ``vxlan-gpe``: match VXLAN-GPE header.
3853 - ``vni {unsigned}``: VXLAN-GPE identifier.
3855 - ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.
3857 - ``sha {MAC-48}``: sender hardware address.
3858 - ``spa {ipv4 address}``: sender IPv4 address.
3859 - ``tha {MAC-48}``: target hardware address.
3860 - ``tpa {ipv4 address}``: target IPv4 address.
3862 - ``ipv6_ext``: match presence of any IPv6 extension header.
3864 - ``next_hdr {unsigned}``: next header.
3866 - ``icmp6``: match any ICMPv6 header.
3868 - ``type {unsigned}``: ICMPv6 type.
3869 - ``code {unsigned}``: ICMPv6 code.
3871 - ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.
3873 - ``target_addr {ipv6 address}``: target address.
3875 - ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.
3877 - ``target_addr {ipv6 address}``: target address.
3879 - ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.
3881 - ``type {unsigned}``: ND option type.
3883 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet
3884 link-layer address option.
3886 - ``sla {MAC-48}``: source Ethernet LLA.
3888 - ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet
3889 link-layer address option.
3891 - ``tla {MAC-48}``: target Ethernet LLA.
3893 - ``meta``: match application specific metadata.
3895 - ``data {unsigned}``: metadata value.
3897 - ``gtp_psc``: match GTP PDU extension header with type 0x85.
3899 - ``pdu_type {unsigned}``: PDU type.
3900 - ``qfi {unsigned}``: QoS flow identifier.
3902 - ``pppoes``, ``pppoed``: match PPPoE header.
3904 - ``session_id {unsigned}``: session identifier.
3906 - ``pppoe_proto_id``: match PPPoE session protocol identifier.
3908 - ``proto_id {unsigned}``: PPP protocol identifier.
3913 A list of actions starts after the ``actions`` token in the same fashion as
3914 `Matching pattern`_; actions are separated by ``/`` tokens and the list is
3915 terminated by a mandatory ``end`` action.
3917 Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3918 rte_flow_action_type``).
3920 Dropping all incoming UDPv4 packets can be expressed as follows::
3922 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3925 Several actions have configurable properties which must be specified when
3926 there is no valid default value. For example, ``queue`` requires a target
3929 This rule redirects incoming UDPv4 traffic to queue index 6::
3931 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3932 actions queue index 6 / end
3934 While this one could be rejected by PMDs (unspecified queue index)::
3936 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3939 As defined by *rte_flow*, the list is not ordered, all actions of a given
3940 rule are performed simultaneously. These are equivalent::
3942 queue index 6 / void / mark id 42 / end
3946 void / mark id 42 / queue index 6 / end
3948 All actions in a list should have different types, otherwise only the last
3949 action of a given type is taken into account::
3951 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
3955 drop / drop / drop / end # drop is performed only once
3959 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
3961 Considering they are performed simultaneously, opposite and overlapping
3962 actions can sometimes be combined when the end result is unambiguous::
3964 drop / queue index 6 / end # drop has no effect
3968 queue index 6 / rss queues 6 7 8 / end # queue has no effect
3972 drop / passthru / end # drop has no effect
3974 Note that PMDs may still refuse such combinations.
3979 This section lists supported actions and their attributes, if any.
3981 - ``end``: end list of actions.
3983 - ``void``: no-op action.
3985 - ``passthru``: let subsequent rule process matched packets.
3987 - ``jump``: redirect traffic to group on device.
3989 - ``group {unsigned}``: group to redirect to.
3991 - ``mark``: attach 32 bit value to packets.
3993 - ``id {unsigned}``: 32 bit value to return with packets.
3995 - ``flag``: flag packets.
3997 - ``queue``: assign packets to a given queue index.
3999 - ``index {unsigned}``: queue index to use.
4001 - ``drop``: drop packets (note: passthru has priority).
4003 - ``count``: enable counters for this rule.
4005 - ``rss``: spread packets among several queues.
4007 - ``func {hash function}``: RSS hash function to apply, allowed tokens are
4008 the same as `set_hash_global_config`_.
4010 - ``level {unsigned}``: encapsulation level for ``types``.
4012 - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed
4013 tokens are the same as `set_hash_input_set`_, except that an empty list
4014 does not disable RSS but instead requests unspecified "best-effort"
4017 - ``key {string}``: RSS hash key, overrides ``key_len``.
4019 - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in
4020 conjunction with ``key`` to pad or truncate it.
4022 - ``queues [{unsigned} [...]] end``: queue indices to use.
4024 - ``pf``: direct traffic to physical function.
4026 - ``vf``: direct traffic to a virtual function ID.
4028 - ``original {boolean}``: use original VF ID if possible.
4029 - ``id {unsigned}``: VF ID.
4031 - ``phy_port``: direct packets to physical port index.
4033 - ``original {boolean}``: use original port index if possible.
4034 - ``index {unsigned}``: physical port index.
4036 - ``port_id``: direct matching traffic to a given DPDK port ID.
4038 - ``original {boolean}``: use original DPDK port ID if possible.
4039 - ``id {unsigned}``: DPDK port ID.
4041 - ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``.
4043 - ``mpls_ttl``: MPLS TTL.
4045 - ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``.
4047 - ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``.
4049 - ``nw_ttl``: IP TTL.
4051 - ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``.
4053 - ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``.
4055 - ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``.
4057 - ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``.
4059 - ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``.
4061 - ``ethertype``: Ethertype.
4063 - ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``.
4065 - ``vlan_vid``: VLAN id.
4067 - ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``.
4069 - ``vlan_pcp``: VLAN priority.
4071 - ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``.
4073 - ``ethertype``: Ethertype.
4075 - ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``.
4077 - ``ethertype``: Ethertype.
4079 - ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration
4080 is done through `Config VXLAN Encap outer layers`_.
4082 - ``vxlan_decap``: Performs a decapsulation action by stripping all headers of
4083 the VXLAN tunnel network overlay from the matched flow.
4085 - ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration
4086 is done through `Config NVGRE Encap outer layers`_.
4088 - ``nvgre_decap``: Performs a decapsulation action by stripping all headers of
4089 the NVGRE tunnel network overlay from the matched flow.
4091 - ``l2_encap``: Performs a L2 encapsulation, L2 configuration
4092 is done through `Config L2 Encap`_.
4094 - ``l2_decap``: Performs a L2 decapsulation, L2 configuration
4095 is done through `Config L2 Decap`_.
4097 - ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer
4098 configuration is done through `Config MPLSoGRE Encap outer layers`_.
4100 - ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer
4101 configuration is done through `Config MPLSoGRE Decap outer layers`_.
4103 - ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer
4104 configuration is done through `Config MPLSoUDP Encap outer layers`_.
4106 - ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer
4107 configuration is done through `Config MPLSoUDP Decap outer layers`_.
4109 - ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header.
4111 - ``ipv4_addr``: New IPv4 source address.
4113 - ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4
4116 - ``ipv4_addr``: New IPv4 destination address.
4118 - ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header.
4120 - ``ipv6_addr``: New IPv6 source address.
4122 - ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6
4125 - ``ipv6_addr``: New IPv6 destination address.
4127 - ``set_tp_src``: Set a new source port number in the outermost TCP/UDP
4130 - ``port``: New TCP/UDP source port number.
4132 - ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
4135 - ``port``: New TCP/UDP destination port number.
4137 - ``mac_swap``: Swap the source and destination MAC addresses in the outermost
4140 - ``dec_ttl``: Performs a decrease TTL value action
4142 - ``set_ttl``: Set TTL value with specified value
4143 - ``ttl_value {unsigned}``: The new TTL value to be set
4145 - ``set_mac_src``: set source MAC address
4147 - ``mac_addr {MAC-48}``: new source MAC address
4149 - ``set_mac_dst``: set destination MAC address
4151 - ``mac_addr {MAC-48}``: new destination MAC address
4153 - ``inc_tcp_seq``: Increase sequence number in the outermost TCP header.
4155 - ``value {unsigned}``: Value to increase TCP sequence number by.
4157 - ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header.
4159 - ``value {unsigned}``: Value to decrease TCP sequence number by.
4161 - ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP header.
4163 - ``value {unsigned}``: Value to increase TCP acknowledgment number by.
4165 - ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP header.
4167 - ``value {unsigned}``: Value to decrease TCP acknowledgment number by.
4169 Destroying flow rules
4170 ~~~~~~~~~~~~~~~~~~~~~
4172 ``flow destroy`` destroys one or more rules from their rule ID (as returned
4173 by ``flow create``), this command calls ``rte_flow_destroy()`` as many
4174 times as necessary::
4176 flow destroy {port_id} rule {rule_id} [...]
4178 If successful, it will show::
4180 Flow rule #[...] destroyed
4182 It does not report anything for rule IDs that do not exist. The usual error
4183 message is shown when a rule cannot be destroyed::
4185 Caught error type [...] ([...]): [...]
4187 ``flow flush`` destroys all rules on a device and does not take extra
4188 arguments. It is bound to ``rte_flow_flush()``::
4190 flow flush {port_id}
4192 Any errors are reported as above.
4194 Creating several rules and destroying them::
4196 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4197 actions queue index 2 / end
4198 Flow rule #0 created
4199 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4200 actions queue index 3 / end
4201 Flow rule #1 created
4202 testpmd> flow destroy 0 rule 0 rule 1
4203 Flow rule #1 destroyed
4204 Flow rule #0 destroyed
4207 The same result can be achieved using ``flow flush``::
4209 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4210 actions queue index 2 / end
4211 Flow rule #0 created
4212 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4213 actions queue index 3 / end
4214 Flow rule #1 created
4215 testpmd> flow flush 0
4218 Non-existent rule IDs are ignored::
4220 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4221 actions queue index 2 / end
4222 Flow rule #0 created
4223 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4224 actions queue index 3 / end
4225 Flow rule #1 created
4226 testpmd> flow destroy 0 rule 42 rule 10 rule 2
4228 testpmd> flow destroy 0 rule 0
4229 Flow rule #0 destroyed
4235 ``flow query`` queries a specific action of a flow rule having that
4236 ability. Such actions collect information that can be reported using this
4237 command. It is bound to ``rte_flow_query()``::
4239 flow query {port_id} {rule_id} {action}
4241 If successful, it will display either the retrieved data for known actions
4242 or the following message::
4244 Cannot display result for action type [...] ([...])
4246 Otherwise, it will complain either that the rule does not exist or that some
4249 Flow rule #[...] not found
4253 Caught error type [...] ([...]): [...]
4255 Currently only the ``count`` action is supported. This action reports the
4256 number of packets that hit the flow rule and the total number of bytes. Its
4257 output has the following format::
4260 hits_set: [...] # whether "hits" contains a valid value
4261 bytes_set: [...] # whether "bytes" contains a valid value
4262 hits: [...] # number of packets
4263 bytes: [...] # number of bytes
4265 Querying counters for TCPv6 packets redirected to queue 6::
4267 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
4268 actions queue index 6 / count / end
4269 Flow rule #4 created
4270 testpmd> flow query 0 4 count
4281 ``flow list`` lists existing flow rules sorted by priority and optionally
4282 filtered by group identifiers::
4284 flow list {port_id} [group {group_id}] [...]
4286 This command only fails with the following message if the device does not
4291 Output consists of a header line followed by a short description of each
4292 flow rule, one per line. There is no output at all when no flow rules are
4293 configured on the device::
4295 ID Group Prio Attr Rule
4296 [...] [...] [...] [...] [...]
4298 ``Attr`` column flags:
4300 - ``i`` for ``ingress``.
4301 - ``e`` for ``egress``.
4303 Creating several flow rules and listing them::
4305 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4306 actions queue index 6 / end
4307 Flow rule #0 created
4308 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4309 actions queue index 2 / end
4310 Flow rule #1 created
4311 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
4312 actions rss queues 6 7 8 end / end
4313 Flow rule #2 created
4314 testpmd> flow list 0
4315 ID Group Prio Attr Rule
4316 0 0 0 i- ETH IPV4 => QUEUE
4317 1 0 0 i- ETH IPV6 => QUEUE
4318 2 0 5 i- ETH IPV4 UDP => RSS
4321 Rules are sorted by priority (i.e. group ID first, then priority level)::
4323 testpmd> flow list 1
4324 ID Group Prio Attr Rule
4325 0 0 0 i- ETH => COUNT
4326 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4327 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4328 1 24 0 i- ETH IPV4 UDP => QUEUE
4329 4 24 10 i- ETH IPV4 TCP => DROP
4330 3 24 20 i- ETH IPV4 => DROP
4331 2 24 42 i- ETH IPV4 UDP => QUEUE
4332 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4335 Output can be limited to specific groups::
4337 testpmd> flow list 1 group 0 group 63
4338 ID Group Prio Attr Rule
4339 0 0 0 i- ETH => COUNT
4340 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4341 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4342 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4345 Toggling isolated mode
4346 ~~~~~~~~~~~~~~~~~~~~~~
4348 ``flow isolate`` can be used to tell the underlying PMD that ingress traffic
4349 must only be injected from the defined flow rules; that no default traffic
4350 is expected outside those rules and the driver is free to assign more
4351 resources to handle them. It is bound to ``rte_flow_isolate()``::
4353 flow isolate {port_id} {boolean}
4355 If successful, enabling or disabling isolated mode shows either::
4357 Ingress traffic on port [...]
4358 is now restricted to the defined flow rules
4362 Ingress traffic on port [...]
4363 is not restricted anymore to the defined flow rules
4365 Otherwise, in case of error::
4367 Caught error type [...] ([...]): [...]
4369 Mainly due to its side effects, PMDs supporting this mode may not have the
4370 ability to toggle it more than once without reinitializing affected ports
4371 first (e.g. by exiting testpmd).
4373 Enabling isolated mode::
4375 testpmd> flow isolate 0 true
4376 Ingress traffic on port 0 is now restricted to the defined flow rules
4379 Disabling isolated mode::
4381 testpmd> flow isolate 0 false
4382 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
4385 Sample QinQ flow rules
4386 ~~~~~~~~~~~~~~~~~~~~~~
4388 Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
4390 testpmd> port stop 0
4391 testpmd> vlan set qinq on 0
4393 The above command sets the inner and outer TPID's to 0x8100.
4395 To change the TPID's the following commands should be used::
4397 testpmd> vlan set outer tpid 0xa100 0
4398 testpmd> vlan set inner tpid 0x9100 0
4399 testpmd> port start 0
4401 Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
4405 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
4406 vlan tci is 456 / end actions vf id 1 / queue index 0 / end
4407 Flow rule #0 validated
4409 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
4410 vlan tci is 456 / end actions vf id 123 / queue index 0 / end
4411 Flow rule #0 created
4413 testpmd> flow list 0
4414 ID Group Prio Attr Rule
4415 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4417 Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
4421 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
4422 vlan tci is 654 / end actions pf / queue index 0 / end
4423 Flow rule #1 validated
4425 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
4426 vlan tci is 654 / end actions pf / queue index 1 / end
4427 Flow rule #1 created
4429 testpmd> flow list 0
4430 ID Group Prio Attr Rule
4431 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4432 1 0 0 i- ETH VLAN VLAN=>PF QUEUE
4434 Sample VXLAN encapsulation rule
4435 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4437 VXLAN encapsulation outer layer has default value pre-configured in testpmd
4438 source code, those can be changed by using the following commands
4440 IPv4 VXLAN outer header::
4442 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1
4443 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4444 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4447 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src
4448 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4449 eth-dst 22:22:22:22:22:22
4450 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4453 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0
4454 ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4455 eth-dst 22:22:22:22:22:22
4456 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4459 IPv6 VXLAN outer header::
4461 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1
4462 ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4463 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4466 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4467 ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11
4468 eth-dst 22:22:22:22:22:22
4469 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4472 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4473 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4474 eth-dst 22:22:22:22:22:22
4475 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4478 Sample NVGRE encapsulation rule
4479 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4481 NVGRE encapsulation outer layer has default value pre-configured in testpmd
4482 source code, those can be changed by using the following commands
4484 IPv4 NVGRE outer header::
4486 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1
4487 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4488 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4491 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1
4492 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4493 eth-dst 22:22:22:22:22:22
4494 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4497 IPv6 NVGRE outer header::
4499 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4500 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4501 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4504 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4505 vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4506 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4509 Sample L2 encapsulation rule
4510 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4512 L2 encapsulation has default value pre-configured in testpmd
4513 source code, those can be changed by using the following commands
4517 testpmd> set l2_encap ip-version ipv4
4518 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4519 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4520 mplsoudp_decap / l2_encap / end
4522 L2 with VXLAN header::
4524 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34
4525 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4526 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4527 mplsoudp_decap / l2_encap / end
4529 Sample L2 decapsulation rule
4530 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4532 L2 decapsulation has default value pre-configured in testpmd
4533 source code, those can be changed by using the following commands
4537 testpmd> set l2_decap
4538 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap /
4541 L2 with VXLAN header::
4543 testpmd> set l2_encap-with-vlan
4544 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap /
4547 Sample MPLSoGRE encapsulation rule
4548 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4550 MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd
4551 source code, those can be changed by using the following commands
4553 IPv4 MPLSoGRE outer header::
4555 testpmd> set mplsogre_encap ip-version ipv4 label 4
4556 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4557 eth-dst 22:22:22:22:22:22
4558 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4559 mplsogre_encap / end
4561 IPv4 MPLSoGRE with VLAN outer header::
4563 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4
4564 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4565 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4566 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4567 mplsogre_encap / end
4569 IPv6 MPLSoGRE outer header::
4571 testpmd> set mplsogre_encap ip-version ipv6 mask 4
4572 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4573 eth-dst 22:22:22:22:22:22
4574 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4575 mplsogre_encap / end
4577 IPv6 MPLSoGRE with VLAN outer header::
4579 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4
4580 ip-src ::1 ip-dst ::2222 vlan-tci 34
4581 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4582 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4583 mplsogre_encap / end
4585 Sample MPLSoGRE decapsulation rule
4586 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4588 MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd
4589 source code, those can be changed by using the following commands
4591 IPv4 MPLSoGRE outer header::
4593 testpmd> set mplsogre_decap ip-version ipv4
4594 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions
4595 mplsogre_decap / l2_encap / end
4597 IPv4 MPLSoGRE with VLAN outer header::
4599 testpmd> set mplsogre_decap-with-vlan ip-version ipv4
4600 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end
4601 actions mplsogre_decap / l2_encap / end
4603 IPv6 MPLSoGRE outer header::
4605 testpmd> set mplsogre_decap ip-version ipv6
4606 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end
4607 actions mplsogre_decap / l2_encap / end
4609 IPv6 MPLSoGRE with VLAN outer header::
4611 testpmd> set mplsogre_decap-with-vlan ip-version ipv6
4612 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end
4613 actions mplsogre_decap / l2_encap / end
4615 Sample MPLSoUDP encapsulation rule
4616 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4618 MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd
4619 source code, those can be changed by using the following commands
4621 IPv4 MPLSoUDP outer header::
4623 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10
4624 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4625 eth-dst 22:22:22:22:22:22
4626 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4627 mplsoudp_encap / end
4629 IPv4 MPLSoUDP with VLAN outer header::
4631 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5
4632 udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4633 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4634 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4635 mplsoudp_encap / end
4637 IPv6 MPLSoUDP outer header::
4639 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10
4640 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4641 eth-dst 22:22:22:22:22:22
4642 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4643 mplsoudp_encap / end
4645 IPv6 MPLSoUDP with VLAN outer header::
4647 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5
4648 udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34
4649 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4650 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4651 mplsoudp_encap / end
4653 Sample MPLSoUDP decapsulation rule
4654 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4656 MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd
4657 source code, those can be changed by using the following commands
4659 IPv4 MPLSoUDP outer header::
4661 testpmd> set mplsoudp_decap ip-version ipv4
4662 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4663 mplsoudp_decap / l2_encap / end
4665 IPv4 MPLSoUDP with VLAN outer header::
4667 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4
4668 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end
4669 actions mplsoudp_decap / l2_encap / end
4671 IPv6 MPLSoUDP outer header::
4673 testpmd> set mplsoudp_decap ip-version ipv6
4674 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end
4675 actions mplsoudp_decap / l2_encap / end
4677 IPv6 MPLSoUDP with VLAN outer header::
4679 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6
4680 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end
4681 actions mplsoudp_decap / l2_encap / end
4683 Sample Raw encapsulation rule
4684 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4686 Raw encapsulation configuration can be set by the following commands
4688 Eecapsulating VxLAN::
4690 testpmd> set raw_encap eth src is 10:11:22:33:44:55 / vlan tci is 1
4691 inner_type is 0x0800 / ipv4 / udp dst is 4789 / vxlan vni
4693 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
4696 Sample Raw decapsulation rule
4697 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4699 Raw decapsulation configuration can be set by the following commands
4701 Decapsulating VxLAN::
4703 testpmd> set raw_decap eth / ipv4 / udp / vxlan / end_set
4704 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 /
4705 end actions raw_decap / queue index 0 / end
4710 The following sections show functions to load/unload eBPF based filters.
4715 Load an eBPF program as a callback for particular RX/TX queue::
4717 testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename)
4719 The available load-flags are:
4721 * ``J``: use JIT generated native code, otherwise BPF interpreter will be used.
4723 * ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data.
4729 You'll need clang v3.7 or above to build bpf program you'd like to load
4733 .. code-block:: console
4736 clang -O2 -target bpf -c t1.c
4738 Then to load (and JIT compile) t1.o at RX queue 0, port 1:
4740 .. code-block:: console
4742 testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o
4744 To load (not JITed) t1.o at TX queue 0, port 0:
4746 .. code-block:: console
4748 testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o
4753 Unload previously loaded eBPF program for particular RX/TX queue::
4755 testpmd> bpf-unload rx|tx (portid) (queueid)
4757 For example to unload BPF filter from TX queue 0, port 0:
4759 .. code-block:: console
4761 testpmd> bpf-unload tx 0 0