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 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
201 strip on, filter on, extend off, qinq strip off
202 Redirection table size: 512
203 Supported flow types:
224 Display the rss redirection table entry indicated by masks on port X::
226 testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
228 size is used to indicate the hardware supported reta size
233 Display the RSS hash functions and RSS hash key of a port::
235 testpmd> show port (port_id) rss-hash [key]
240 Clear the port statistics and forward engine statistics for a given port or for all ports::
242 testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
246 testpmd> clear port stats all
251 Display information for a given port's RX/TX queue::
253 testpmd> show (rxq|txq) info (port_id) (queue_id)
255 show desc status(rxq|txq)
256 ~~~~~~~~~~~~~~~~~~~~~~~~~
258 Display information for a given port's RX/TX descriptor status::
260 testpmd> show port (port_id) (rxq|txq) (queue_id) desc (desc_id) status
266 Displays the configuration of the application.
267 The configuration comes from the command-line, the runtime or the application defaults::
269 testpmd> show config (rxtx|cores|fwd|txpkts)
271 The available information categories are:
273 * ``rxtx``: RX/TX configuration items.
275 * ``cores``: List of forwarding cores.
277 * ``fwd``: Packet forwarding configuration.
279 * ``txpkts``: Packets to TX configuration.
283 .. code-block:: console
285 testpmd> show config rxtx
287 io packet forwarding - CRC stripping disabled - packets/burst=16
288 nb forwarding cores=2 - nb forwarding ports=1
289 RX queues=1 - RX desc=128 - RX free threshold=0
290 RX threshold registers: pthresh=8 hthresh=8 wthresh=4
291 TX queues=1 - TX desc=512 - TX free threshold=0
292 TX threshold registers: pthresh=36 hthresh=0 wthresh=0
293 TX RS bit threshold=0 - TXQ flags=0x0
298 Set the packet forwarding mode::
300 testpmd> set fwd (io|mac|macswap|flowgen| \
301 rxonly|txonly|csum|icmpecho|noisy) (""|retry)
303 ``retry`` can be specified for forwarding engines except ``rx_only``.
305 The available information categories are:
307 * ``io``: Forwards packets "as-is" in I/O mode.
308 This is the fastest possible forwarding operation as it does not access packets data.
309 This is the default mode.
311 * ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
312 Default application behavior is to set source Ethernet address to that of the transmitting interface, and destination
313 address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
314 'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
316 * ``macswap``: MAC swap forwarding mode.
317 Swaps the source and the destination Ethernet addresses of packets before forwarding them.
319 * ``flowgen``: Multi-flow generation mode.
320 Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
322 * ``rxonly``: Receives packets but doesn't transmit them.
324 * ``txonly``: Generates and transmits packets without receiving any.
326 * ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
328 * ``icmpecho``: Receives a burst of packets, lookup for ICMP echo requests and, if any, send back ICMP echo replies.
330 * ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
332 * ``noisy``: Noisy neighbor simulation.
333 Simulate more realistic behavior of a guest machine engaged in receiving
334 and sending packets performing Virtual Network Function (VNF).
338 testpmd> set fwd rxonly
340 Set rxonly packet forwarding mode
346 When running, forwarding engines maintain statistics from the time they have been started.
347 Example for the io forwarding engine, with some packet drops on the tx side::
349 testpmd> show fwd stats all
351 ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 1/Queue= 0 -------
352 RX-packets: 274293770 TX-packets: 274293642 TX-dropped: 128
354 ------- Forward Stats for RX Port= 1/Queue= 0 -> TX Port= 0/Queue= 0 -------
355 RX-packets: 274301850 TX-packets: 274301850 TX-dropped: 0
357 ---------------------- Forward statistics for port 0 ----------------------
358 RX-packets: 274293802 RX-dropped: 0 RX-total: 274293802
359 TX-packets: 274301862 TX-dropped: 0 TX-total: 274301862
360 ----------------------------------------------------------------------------
362 ---------------------- Forward statistics for port 1 ----------------------
363 RX-packets: 274301894 RX-dropped: 0 RX-total: 274301894
364 TX-packets: 274293706 TX-dropped: 128 TX-total: 274293834
365 ----------------------------------------------------------------------------
367 +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
368 RX-packets: 548595696 RX-dropped: 0 RX-total: 548595696
369 TX-packets: 548595568 TX-dropped: 128 TX-total: 548595696
370 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
374 Enabling CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES appends "CPU cycles/packet" stats, like:
376 CPU cycles/packet=xx.dd (total cycles=xxxx / total RX packets=xxxx) at xxx MHz clock
381 Clear the forwarding engines statistics::
383 testpmd> clear fwd stats all
388 Display an RX descriptor for a port RX queue::
390 testpmd> read rxd (port_id) (queue_id) (rxd_id)
394 testpmd> read rxd 0 0 4
395 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
400 Display a TX descriptor for a port TX queue::
402 testpmd> read txd (port_id) (queue_id) (txd_id)
406 testpmd> read txd 0 0 4
407 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
412 Get loaded dynamic device personalization (DDP) package info list::
414 testpmd> ddp get list (port_id)
419 Display information about dynamic device personalization (DDP) profile::
421 testpmd> ddp get info (profile_path)
426 Display VF statistics::
428 testpmd> show vf stats (port_id) (vf_id)
433 Reset VF statistics::
435 testpmd> clear vf stats (port_id) (vf_id)
437 show port pctype mapping
438 ~~~~~~~~~~~~~~~~~~~~~~~~
440 List all items from the pctype mapping table::
442 testpmd> show port (port_id) pctype mapping
444 show rx offloading capabilities
445 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
447 List all per queue and per port Rx offloading capabilities of a port::
449 testpmd> show port (port_id) rx_offload capabilities
451 show rx offloading configuration
452 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
454 List port level and all queue level Rx offloading configuration::
456 testpmd> show port (port_id) rx_offload configuration
458 show tx offloading capabilities
459 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
461 List all per queue and per port Tx offloading capabilities of a port::
463 testpmd> show port (port_id) tx_offload capabilities
465 show tx offloading configuration
466 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
468 List port level and all queue level Tx offloading configuration::
470 testpmd> show port (port_id) tx_offload configuration
472 show tx metadata setting
473 ~~~~~~~~~~~~~~~~~~~~~~~~
475 Show Tx metadata value set for a specific port::
477 testpmd> show port (port_id) tx_metadata
479 show port supported ptypes
480 ~~~~~~~~~~~~~~~~~~~~~~~~~~
482 Show ptypes supported for a specific port::
484 testpmd> show port (port_id) ptypes
486 set port supported ptypes
487 ~~~~~~~~~~~~~~~~~~~~~~~~~
489 set packet types classification for a specific port::
491 testpmd> set port (port_id) ptypes_mask (mask)
493 show port mac addresses info
494 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
496 Show mac addresses added for a specific port::
498 testpmd> show port (port_id) macs
501 show port multicast mac addresses info
502 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
504 Show multicast mac addresses added for a specific port::
506 testpmd> show port (port_id) mcast_macs
511 Show general information about devices probed::
513 testpmd> show device info (<identifier>|all)
517 .. code-block:: console
519 testpmd> show device info net_pcap0
521 ********************* Infos for device net_pcap0 *********************
523 Driver name: net_pcap
524 Devargs: iface=enP2p6s0,phy_mac=1
525 Connect to socket: -1
528 MAC address: 1E:37:93:28:04:B8
529 Device name: net_pcap0
534 Dumps all physical memory segment layouts::
536 testpmd> dump_physmem
541 Dumps the layout of all memory zones::
543 testpmd> dump_memzone
548 Dumps the memory usage of all sockets::
550 testpmd> dump_socket_mem
555 Dumps the size of all memory structures::
557 testpmd> dump_struct_sizes
562 Dumps the status of all or specific element in DPDK rings::
564 testpmd> dump_ring [ring_name]
569 Dumps the statistics of all or specific memory pool::
571 testpmd> dump_mempool [mempool_name]
576 Dumps the user device list::
578 testpmd> dump_devargs
583 Dumps the log level for all the dpdk modules::
585 testpmd> dump_log_types
587 show (raw_encap|raw_decap)
588 ~~~~~~~~~~~~~~~~~~~~~~~~~~
590 Display content of raw_encap/raw_decap buffers in hex::
592 testpmd> show <raw_encap|raw_decap> <index>
593 testpmd> show <raw_encap|raw_decap> all
597 testpmd> show raw_encap 6
599 index: 6 at [0x1c565b0], len=50
600 00000000: 00 00 00 00 00 00 16 26 36 46 56 66 08 00 45 00 | .......&6FVf..E.
601 00000010: 00 00 00 00 00 00 00 11 00 00 C0 A8 01 06 C0 A8 | ................
602 00000020: 03 06 00 00 00 FA 00 00 00 00 08 00 00 00 00 00 | ................
606 Configuration Functions
607 -----------------------
609 The testpmd application can be configured from the runtime as well as from the command-line.
611 This section details the available configuration functions that are available.
615 Configuration changes only become active when forwarding is started/restarted.
620 Reset forwarding to the default configuration::
627 Set the debug verbosity level::
629 testpmd> set verbose (level)
631 Available levels are as following:
633 * ``0`` silent except for error.
634 * ``1`` fully verbose except for Tx packets.
635 * ``2`` fully verbose except for Rx packets.
636 * ``> 2`` fully verbose.
641 Set the log level for a log type::
643 testpmd> set log global|(type) (level)
647 * ``type`` is the log name.
649 * ``level`` is the log level.
651 For example, to change the global log level::
653 testpmd> set log global (level)
655 Regexes can also be used for type. To change log level of user1, user2 and user3::
657 testpmd> set log user[1-3] (level)
662 Set the number of ports used by the application:
666 This is equivalent to the ``--nb-ports`` command-line option.
671 Set the number of cores used by the application::
673 testpmd> set nbcore (num)
675 This is equivalent to the ``--nb-cores`` command-line option.
679 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
684 Set the forwarding cores hexadecimal mask::
686 testpmd> set coremask (mask)
688 This is equivalent to the ``--coremask`` command-line option.
692 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
697 Set the forwarding ports hexadecimal mask::
699 testpmd> set portmask (mask)
701 This is equivalent to the ``--portmask`` command-line option.
706 Set number of packets per burst::
708 testpmd> set burst (num)
710 This is equivalent to the ``--burst command-line`` option.
712 When retry is enabled, the transmit delay time and number of retries can also be set::
714 testpmd> set burst tx delay (microseconds) retry (num)
719 Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
721 testpmd> set txpkts (x[,y]*)
723 Where x[,y]* represents a CSV list of values, without white space.
728 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
730 testpmd> set txsplit (off|on|rand)
734 * ``off`` disable packet copy & split for CSUM mode.
736 * ``on`` split outgoing packet into multiple segments. Size of each segment
737 and number of segments per packet is determined by ``set txpkts`` command
740 * ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
745 Set the list of forwarding cores::
747 testpmd> set corelist (x[,y]*)
749 For example, to change the forwarding cores:
751 .. code-block:: console
753 testpmd> set corelist 3,1
754 testpmd> show config fwd
756 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
757 Logical Core 3 (socket 0) forwards packets on 1 streams:
758 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
759 Logical Core 1 (socket 0) forwards packets on 1 streams:
760 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
764 The cores are used in the same order as specified on the command line.
769 Set the list of forwarding ports::
771 testpmd> set portlist (x[,y]*)
773 For example, to change the port forwarding:
775 .. code-block:: console
777 testpmd> set portlist 0,2,1,3
778 testpmd> show config fwd
780 io packet forwarding - ports=4 - cores=1 - streams=4
781 Logical Core 3 (socket 0) forwards packets on 4 streams:
782 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
783 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
784 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
785 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
790 Select how to retrieve new ports created after "port attach" command::
792 testpmd> set port setup on (iterator|event)
794 For each new port, a setup is done.
795 It will find the probed ports via RTE_ETH_FOREACH_MATCHING_DEV loop
796 in iterator mode, or via RTE_ETH_EVENT_NEW in event mode.
801 Enable/disable tx loopback::
803 testpmd> set tx loopback (port_id) (on|off)
808 set drop enable bit for all queues::
810 testpmd> set all queues drop (port_id) (on|off)
812 set split drop enable (for VF)
813 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
815 set split drop enable bit for VF from PF::
817 testpmd> set vf split drop (port_id) (vf_id) (on|off)
819 set mac antispoof (for VF)
820 ~~~~~~~~~~~~~~~~~~~~~~~~~~
822 Set mac antispoof for a VF from the PF::
824 testpmd> set vf mac antispoof (port_id) (vf_id) (on|off)
829 Enable/disable MACsec offload::
831 testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
832 testpmd> set macsec offload (port_id) off
837 Configure MACsec secure connection (SC)::
839 testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
843 The pi argument is ignored for tx.
844 Check the NIC Datasheet for hardware limits.
849 Configure MACsec secure association (SA)::
851 testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
855 The IDX value must be 0 or 1.
856 Check the NIC Datasheet for hardware limits.
858 set broadcast mode (for VF)
859 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
861 Set broadcast mode for a VF from the PF::
863 testpmd> set vf broadcast (port_id) (vf_id) (on|off)
868 Set the VLAN strip for a queue on a port::
870 testpmd> vlan set stripq (on|off) (port_id,queue_id)
872 vlan set stripq (for VF)
873 ~~~~~~~~~~~~~~~~~~~~~~~~
875 Set VLAN strip for all queues in a pool for a VF from the PF::
877 testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
879 vlan set insert (for VF)
880 ~~~~~~~~~~~~~~~~~~~~~~~~
882 Set VLAN insert for a VF from the PF::
884 testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
886 vlan set tag (for VF)
887 ~~~~~~~~~~~~~~~~~~~~~
889 Set VLAN tag for a VF from the PF::
891 testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
893 vlan set antispoof (for VF)
894 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
896 Set VLAN antispoof for a VF from the PF::
898 testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
900 vlan set (strip|filter|qinq_strip|extend)
901 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
902 Set the VLAN strip/filter/QinQ strip/extend on for a port::
904 testpmd> vlan set (strip|filter|qinq_strip|extend) (on|off) (port_id)
909 Set the inner or outer VLAN TPID for packet filtering on a port::
911 testpmd> vlan set (inner|outer) tpid (value) (port_id)
915 TPID value must be a 16-bit number (value <= 65536).
920 Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
922 testpmd> rx_vlan add (vlan_id|all) (port_id)
926 VLAN filter must be set on that port. VLAN ID < 4096.
927 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
928 in VFTA table. This is important if enabling all vlan_ids.
933 Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
935 testpmd> rx_vlan rm (vlan_id|all) (port_id)
940 Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
942 testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
947 Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
949 testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
954 Add a tunnel filter on a port::
956 testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
957 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\
958 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
960 The available information categories are:
962 * ``vxlan``: Set tunnel type as VXLAN.
964 * ``nvgre``: Set tunnel type as NVGRE.
966 * ``ipingre``: Set tunnel type as IP-in-GRE.
968 * ``vxlan-gpe``: Set tunnel type as VXLAN-GPE
970 * ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
972 * ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
974 * ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
976 * ``imac``: Set filter type as Inner MAC.
978 * ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
980 * ``oip``: Set filter type as Outer IP.
982 * ``iip``: Set filter type as Inner IP.
986 testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
987 192.168.2.2 0 ipingre oip 1 1
989 Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
994 Remove a tunnel filter on a port::
996 testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
997 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\
998 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
1003 Add an UDP port for VXLAN packet filter on a port::
1005 testpmd> rx_vxlan_port add (udp_port) (port_id)
1007 rx_vxlan_port remove
1008 ~~~~~~~~~~~~~~~~~~~~
1010 Remove an UDP port for VXLAN packet filter on a port::
1012 testpmd> rx_vxlan_port rm (udp_port) (port_id)
1017 Set hardware insertion of VLAN IDs in packets sent on a port::
1019 testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
1021 For example, set a single VLAN ID (5) insertion on port 0::
1025 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
1033 Set port based hardware insertion of VLAN ID in packets sent on a port::
1035 testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
1040 Disable hardware insertion of a VLAN header in packets sent on a port::
1042 testpmd> tx_vlan reset (port_id)
1047 Select hardware or software calculation of the checksum when
1048 transmitting a packet using the ``csum`` forwarding engine::
1050 testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)
1054 * ``ip|udp|tcp|sctp`` always relate to the inner layer.
1056 * ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
1057 as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
1058 supported). See also the ``csum parse-tunnel`` command.
1060 * ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized
1061 as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are
1062 supported). See also the ``csum parse-tunnel`` command.
1066 Check the NIC Datasheet for hardware limits.
1071 Set RSS queue region span on a port::
1073 testpmd> set port (port_id) queue-region region_id (value) \
1074 queue_start_index (value) queue_num (value)
1076 Set flowtype mapping on a RSS queue region on a port::
1078 testpmd> set port (port_id) queue-region region_id (value) flowtype (value)
1082 * For the flowtype(pctype) of packet,the specific index for each type has
1083 been defined in file i40e_type.h as enum i40e_filter_pctype.
1085 Set user priority mapping on a RSS queue region on a port::
1087 testpmd> set port (port_id) queue-region UP (value) region_id (value)
1089 Flush all queue region related configuration on a port::
1091 testpmd> set port (port_id) queue-region flush (on|off)
1095 * ``on``: is just an enable function which server for other configuration,
1096 it is for all configuration about queue region from up layer,
1097 at first will only keep in DPDK software stored in driver,
1098 only after "flush on", it commit all configuration to HW.
1100 * ``"off``: is just clean all configuration about queue region just now,
1101 and restore all to DPDK i40e driver default config when start up.
1103 Show all queue region related configuration info on a port::
1105 testpmd> show port (port_id) queue-region
1109 Queue region only support on PF by now, so these command is
1110 only for configuration of queue region on PF port.
1115 Define how tunneled packets should be handled by the csum forward
1118 testpmd> csum parse-tunnel (on|off) (tx_port_id)
1120 If enabled, the csum forward engine will try to recognize supported
1121 tunnel headers (vxlan, gre, ipip).
1123 If disabled, treat tunnel packets as non-tunneled packets (a inner
1124 header is handled as a packet payload).
1128 The port argument is the TX port like in the ``csum set`` command.
1132 Consider a packet in packet like the following::
1134 eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
1136 * If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1137 command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
1138 ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``).
1140 * If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1141 command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
1146 Display tx checksum offload configuration::
1148 testpmd> csum show (port_id)
1153 Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
1155 testpmd> tso set (segsize) (port_id)
1159 Check the NIC datasheet for hardware limits.
1164 Display the status of TCP Segmentation Offload::
1166 testpmd> tso show (port_id)
1171 Set tso segment size of tunneled packets for a port in csum engine::
1173 testpmd> tunnel_tso set (tso_segsz) (port_id)
1178 Display the status of tunneled TCP Segmentation Offload for a port::
1180 testpmd> tunnel_tso show (port_id)
1185 Enable or disable GRO in ``csum`` forwarding engine::
1187 testpmd> set port <port_id> gro on|off
1189 If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
1190 packets received from the given port.
1192 If disabled, packets received from the given port won't be performed
1193 GRO. By default, GRO is disabled for all ports.
1197 When enable GRO for a port, TCP/IPv4 packets received from the port
1198 will be performed GRO. After GRO, all merged packets have bad
1199 checksums, since the GRO library doesn't re-calculate checksums for
1200 the merged packets. Therefore, if users want the merged packets to
1201 have correct checksums, please select HW IP checksum calculation and
1202 HW TCP checksum calculation for the port which the merged packets are
1208 Display GRO configuration for a given port::
1210 testpmd> show port <port_id> gro
1215 Set the cycle to flush the GROed packets from reassembly tables::
1217 testpmd> set gro flush <cycles>
1219 When enable GRO, the csum forwarding engine performs GRO on received
1220 packets, and the GROed packets are stored in reassembly tables. Users
1221 can use this command to determine when the GROed packets are flushed
1222 from the reassembly tables.
1224 The ``cycles`` is measured in GRO operation times. The csum forwarding
1225 engine flushes the GROed packets from the tables every ``cycles`` GRO
1228 By default, the value of ``cycles`` is 1, which means flush GROed packets
1229 from the reassembly tables as soon as one GRO operation finishes. The value
1230 of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1232 Please note that the large value of ``cycles`` may cause the poor TCP/IP
1233 stack performance. Because the GROed packets are delayed to arrive the
1234 stack, thus causing more duplicated ACKs and TCP retransmissions.
1239 Toggle per-port GSO support in ``csum`` forwarding engine::
1241 testpmd> set port <port_id> gso on|off
1243 If enabled, the csum forwarding engine will perform GSO on supported IPv4
1244 packets, transmitted on the given port.
1246 If disabled, packets transmitted on the given port will not undergo GSO.
1247 By default, GSO is disabled for all ports.
1251 When GSO is enabled on a port, supported IPv4 packets transmitted on that
1252 port undergo GSO. Afterwards, the segmented packets are represented by
1253 multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1254 of checksums for GSO'd segments in SW. As a result, if users want correct
1255 checksums in GSO segments, they should enable HW checksum calculation for
1258 For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1259 by setting the following options in the csum forwarding engine:
1261 testpmd> csum set outer_ip hw <port_id>
1263 testpmd> csum set ip hw <port_id>
1265 testpmd> csum set tcp hw <port_id>
1267 UDP GSO is the same as IP fragmentation, which treats the UDP header
1268 as the payload and does not modify it during segmentation. That is,
1269 after UDP GSO, only the first output fragment has the original UDP
1270 header. Therefore, users need to enable HW IP checksum calculation
1271 and SW UDP checksum calculation for GSO-enabled ports, if they want
1272 correct checksums for UDP/IPv4 packets.
1277 Set the maximum GSO segment size (measured in bytes), which includes the
1278 packet header and the packet payload for GSO-enabled ports (global)::
1280 testpmd> set gso segsz <length>
1285 Display the status of Generic Segmentation Offload for a given port::
1287 testpmd> show port <port_id> gso
1292 Add an alternative MAC address to a port::
1294 testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1299 Remove a MAC address from a port::
1301 testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1306 To add the multicast MAC address to/from the set of multicast addresses
1309 testpmd> mcast_addr add (port_id) (mcast_addr)
1314 To remove the multicast MAC address to/from the set of multicast addresses
1317 testpmd> mcast_addr remove (port_id) (mcast_addr)
1319 mac_addr add (for VF)
1320 ~~~~~~~~~~~~~~~~~~~~~
1322 Add an alternative MAC address for a VF to a port::
1324 testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1329 Set the default MAC address for a port::
1331 testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1333 mac_addr set (for VF)
1334 ~~~~~~~~~~~~~~~~~~~~~
1336 Set the MAC address for a VF from the PF::
1338 testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1343 Set the forwarding peer address for certain port::
1345 testpmd> set eth-peer (port_id) (peer_addr)
1347 This is equivalent to the ``--eth-peer`` command-line option.
1352 Set the unicast hash filter(s) on/off for a port::
1354 testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1359 Set the promiscuous mode on for a port or for all ports.
1360 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1362 testpmd> set promisc (port_id|all) (on|off)
1367 Set the allmulti mode for a port or for all ports::
1369 testpmd> set allmulti (port_id|all) (on|off)
1371 Same as the ifconfig (8) option. Controls how multicast packets are handled.
1373 set promisc (for VF)
1374 ~~~~~~~~~~~~~~~~~~~~
1376 Set the unicast promiscuous mode for a VF from PF.
1377 It's supported by Intel i40e NICs now.
1378 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1380 testpmd> set vf promisc (port_id) (vf_id) (on|off)
1382 set allmulticast (for VF)
1383 ~~~~~~~~~~~~~~~~~~~~~~~~~
1385 Set the multicast promiscuous mode for a VF from PF.
1386 It's supported by Intel i40e NICs now.
1387 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1389 testpmd> set vf allmulti (port_id) (vf_id) (on|off)
1391 set tx max bandwidth (for VF)
1392 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1394 Set TX max absolute bandwidth (Mbps) for a VF from PF::
1396 testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
1398 set tc tx min bandwidth (for VF)
1399 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1401 Set all TCs' TX min relative bandwidth (%) for a VF from PF::
1403 testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
1405 set tc tx max bandwidth (for VF)
1406 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1408 Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
1410 testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
1412 set tc strict link priority mode
1413 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1415 Set some TCs' strict link priority mode on a physical port::
1417 testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1419 set tc tx min bandwidth
1420 ~~~~~~~~~~~~~~~~~~~~~~~
1422 Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
1424 testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
1429 Set the link flow control parameter on a port::
1431 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1432 (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1433 autoneg (on|off) (port_id)
1437 * ``high_water`` (integer): High threshold value to trigger XOFF.
1439 * ``low_water`` (integer): Low threshold value to trigger XON.
1441 * ``pause_time`` (integer): Pause quota in the Pause frame.
1443 * ``send_xon`` (0/1): Send XON frame.
1445 * ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1447 * ``autoneg``: Change the auto-negotiation parameter.
1452 Set the priority flow control parameter on a port::
1454 testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1455 (pause_time) (priority) (port_id)
1459 * ``high_water`` (integer): High threshold value.
1461 * ``low_water`` (integer): Low threshold value.
1463 * ``pause_time`` (integer): Pause quota in the Pause frame.
1465 * ``priority`` (0-7): VLAN User Priority.
1470 Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1472 testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1474 For example, to set rx queue 2 on port 0 to mapping 5::
1476 testpmd>set stat_qmap rx 0 2 5
1478 set xstats-hide-zero
1479 ~~~~~~~~~~~~~~~~~~~~
1481 Set the option to hide zero values for xstats display::
1483 testpmd> set xstats-hide-zero on|off
1487 By default, the zero values are displayed for xstats.
1489 set port - rx/tx (for VF)
1490 ~~~~~~~~~~~~~~~~~~~~~~~~~
1492 Set VF receive/transmit from a port::
1494 testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1496 set port - mac address filter (for VF)
1497 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1499 Add/Remove unicast or multicast MAC addr filter for a VF::
1501 testpmd> set port (port_id) vf (vf_id) (mac_addr) \
1502 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
1504 set port - rx mode(for VF)
1505 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1507 Set the VF receive mode of a port::
1509 testpmd> set port (port_id) vf (vf_id) \
1510 rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1512 The available receive modes are:
1514 * ``AUPE``: Accepts untagged VLAN.
1516 * ``ROPE``: Accepts unicast hash.
1518 * ``BAM``: Accepts broadcast packets.
1520 * ``MPE``: Accepts all multicast packets.
1522 set port - tx_rate (for Queue)
1523 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1525 Set TX rate limitation for a queue on a port::
1527 testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1529 set port - tx_rate (for VF)
1530 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1532 Set TX rate limitation for queues in VF on a port::
1534 testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1536 set port - mirror rule
1537 ~~~~~~~~~~~~~~~~~~~~~~
1539 Set pool or vlan type mirror rule for a port::
1541 testpmd> set port (port_id) mirror-rule (rule_id) \
1542 (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1543 (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1545 Set link mirror rule for a port::
1547 testpmd> set port (port_id) mirror-rule (rule_id) \
1548 (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1550 For example to enable mirror traffic with vlan 0,1 to pool 0::
1552 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1554 reset port - mirror rule
1555 ~~~~~~~~~~~~~~~~~~~~~~~~
1557 Reset a mirror rule for a port::
1559 testpmd> reset port (port_id) mirror-rule (rule_id)
1564 Set the flush on RX streams before forwarding.
1565 The default is flush ``on``.
1566 Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1568 testpmd> set flush_rx off
1573 Set the bypass mode for the lowest port on bypass enabled NIC::
1575 testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1580 Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1582 testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1583 mode (normal|bypass|isolate) (port_id)
1587 * ``timeout``: Enable bypass after watchdog timeout.
1589 * ``os_on``: Enable bypass when OS/board is powered on.
1591 * ``os_off``: Enable bypass when OS/board is powered off.
1593 * ``power_on``: Enable bypass when power supply is turned on.
1595 * ``power_off``: Enable bypass when power supply is turned off.
1601 Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1603 testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1608 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1610 testpmd> show bypass config (port_id)
1615 Set link up for a port::
1617 testpmd> set link-up port (port id)
1622 Set link down for a port::
1624 testpmd> set link-down port (port id)
1629 Enable E-tag insertion for a VF on a port::
1631 testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1633 Disable E-tag insertion for a VF on a port::
1635 testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1637 Enable/disable E-tag stripping on a port::
1639 testpmd> E-tag set stripping (on|off) port (port_id)
1641 Enable/disable E-tag based forwarding on a port::
1643 testpmd> E-tag set forwarding (on|off) port (port_id)
1645 Add an E-tag forwarding filter on a port::
1647 testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1649 Delete an E-tag forwarding filter on a port::
1650 testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1655 Load a dynamic device personalization (DDP) profile and store backup profile::
1657 testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1662 Delete a dynamic device personalization profile and restore backup profile::
1664 testpmd> ddp del (port_id) (backup_profile_path)
1669 List all items from the ptype mapping table::
1671 testpmd> ptype mapping get (port_id) (valid_only)
1675 * ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1677 Replace a specific or a group of software defined ptype with a new one::
1679 testpmd> ptype mapping replace (port_id) (target) (mask) (pkt_type)
1683 * ``target``: A specific software ptype or a mask to represent a group of software ptypes.
1685 * ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1).
1687 * ``pkt_type``: The new software ptype to replace the old ones.
1689 Update hardware defined ptype to software defined packet type mapping table::
1691 testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1695 * ``hw_ptype``: hardware ptype as the index of the ptype mapping table.
1697 * ``sw_ptype``: software ptype as the value of the ptype mapping table.
1699 Reset ptype mapping table::
1701 testpmd> ptype mapping reset (port_id)
1703 config per port Rx offloading
1704 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1706 Enable or disable a per port Rx offloading on all Rx queues of a port::
1708 testpmd> port config (port_id) rx_offload (offloading) on|off
1710 * ``offloading``: can be any of these offloading capability:
1711 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1712 qinq_strip, outer_ipv4_cksum, macsec_strip,
1713 header_split, vlan_filter, vlan_extend, jumbo_frame,
1714 scatter, timestamp, security, keep_crc, rss_hash
1716 This command should be run when the port is stopped, or else it will fail.
1718 config per queue Rx offloading
1719 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1721 Enable or disable a per queue Rx offloading only on a specific Rx queue::
1723 testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
1725 * ``offloading``: can be any of these offloading capability:
1726 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1727 qinq_strip, outer_ipv4_cksum, macsec_strip,
1728 header_split, vlan_filter, vlan_extend, jumbo_frame,
1729 scatter, timestamp, security, keep_crc
1731 This command should be run when the port is stopped, or else it will fail.
1733 config per port Tx offloading
1734 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1736 Enable or disable a per port Tx offloading on all Tx queues of a port::
1738 testpmd> port config (port_id) tx_offload (offloading) on|off
1740 * ``offloading``: can be any of these offloading capability:
1741 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1742 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1743 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1744 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1745 mt_lockfree, multi_segs, mbuf_fast_free, security
1747 This command should be run when the port is stopped, or else it will fail.
1749 config per queue Tx offloading
1750 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1752 Enable or disable a per queue Tx offloading only on a specific Tx queue::
1754 testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
1756 * ``offloading``: can be any of these offloading capability:
1757 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1758 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1759 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1760 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1761 mt_lockfree, multi_segs, mbuf_fast_free, security
1763 This command should be run when the port is stopped, or else it will fail.
1765 Config VXLAN Encap outer layers
1766 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1768 Configure the outer layer to encapsulate a packet inside a VXLAN tunnel::
1770 set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1771 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \
1774 set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1775 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1776 eth-src (eth-src) eth-dst (eth-dst)
1778 set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1779 udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) \
1780 ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1782 These commands will set an internal configuration inside testpmd, any following
1783 flow rule using the action vxlan_encap will use the last configuration set.
1784 To have a different encapsulation header, one of those commands must be called
1785 before the flow rule creation.
1787 Config NVGRE Encap outer layers
1788 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1790 Configure the outer layer to encapsulate a packet inside a NVGRE tunnel::
1792 set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \
1793 eth-src (eth-src) eth-dst (eth-dst)
1794 set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \
1795 ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1797 These commands will set an internal configuration inside testpmd, any following
1798 flow rule using the action nvgre_encap will use the last configuration set.
1799 To have a different encapsulation header, one of those commands must be called
1800 before the flow rule creation.
1805 Configure the l2 to be used when encapsulating a packet with L2::
1807 set l2_encap ip-version (ipv4|ipv6) eth-src (eth-src) eth-dst (eth-dst)
1808 set l2_encap-with-vlan ip-version (ipv4|ipv6) vlan-tci (vlan-tci) \
1809 eth-src (eth-src) eth-dst (eth-dst)
1811 Those commands will set an internal configuration inside testpmd, any following
1812 flow rule using the action l2_encap will use the last configuration set.
1813 To have a different encapsulation header, one of those commands must be called
1814 before the flow rule creation.
1819 Configure the l2 to be removed when decapsulating a packet with L2::
1821 set l2_decap ip-version (ipv4|ipv6)
1822 set l2_decap-with-vlan ip-version (ipv4|ipv6)
1824 Those commands will set an internal configuration inside testpmd, any following
1825 flow rule using the action l2_decap will use the last configuration set.
1826 To have a different encapsulation header, one of those commands must be called
1827 before the flow rule creation.
1829 Config MPLSoGRE Encap outer layers
1830 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1832 Configure the outer layer to encapsulate a packet inside a MPLSoGRE tunnel::
1834 set mplsogre_encap ip-version (ipv4|ipv6) label (label) \
1835 ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1836 set mplsogre_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1837 ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1838 eth-src (eth-src) eth-dst (eth-dst)
1840 These commands will set an internal configuration inside testpmd, any following
1841 flow rule using the action mplsogre_encap will use the last configuration set.
1842 To have a different encapsulation header, one of those commands must be called
1843 before the flow rule creation.
1845 Config MPLSoGRE Decap outer layers
1846 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1848 Configure the outer layer to decapsulate MPLSoGRE packet::
1850 set mplsogre_decap ip-version (ipv4|ipv6)
1851 set mplsogre_decap-with-vlan ip-version (ipv4|ipv6)
1853 These commands will set an internal configuration inside testpmd, any following
1854 flow rule using the action mplsogre_decap will use the last configuration set.
1855 To have a different decapsulation header, one of those commands must be called
1856 before the flow rule creation.
1858 Config MPLSoUDP Encap outer layers
1859 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1861 Configure the outer layer to encapsulate a packet inside a MPLSoUDP tunnel::
1863 set mplsoudp_encap ip-version (ipv4|ipv6) label (label) udp-src (udp-src) \
1864 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1865 eth-src (eth-src) eth-dst (eth-dst)
1866 set mplsoudp_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1867 udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1868 vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1870 These commands will set an internal configuration inside testpmd, any following
1871 flow rule using the action mplsoudp_encap will use the last configuration set.
1872 To have a different encapsulation header, one of those commands must be called
1873 before the flow rule creation.
1875 Config MPLSoUDP Decap outer layers
1876 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1878 Configure the outer layer to decapsulate MPLSoUDP packet::
1880 set mplsoudp_decap ip-version (ipv4|ipv6)
1881 set mplsoudp_decap-with-vlan ip-version (ipv4|ipv6)
1883 These commands will set an internal configuration inside testpmd, any following
1884 flow rule using the action mplsoudp_decap will use the last configuration set.
1885 To have a different decapsulation header, one of those commands must be called
1886 before the flow rule creation.
1888 Config Raw Encapsulation
1889 ~~~~~~~~~~~~~~~~~~~~~~~~~
1891 Configure the raw data to be used when encapsulating a packet by
1892 rte_flow_action_raw_encap::
1894 set raw_encap {index} {item} [/ {item} [...]] / end_set
1896 There are multiple global buffers for ``raw_encap``, this command will set one
1897 internal buffer index by ``{index}``.
1898 If there is no ``{index}`` specified::
1900 set raw_encap {item} [/ {item} [...]] / end_set
1902 the default index ``0`` is used.
1903 In order to use different encapsulating header, ``index`` must be specified
1904 during the flow rule creation::
1906 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
1907 raw_encap index 2 / end
1909 Otherwise the default index ``0`` is used.
1911 Config Raw Decapsulation
1912 ~~~~~~~~~~~~~~~~~~~~~~~~
1914 Configure the raw data to be used when decapsulating a packet by
1915 rte_flow_action_raw_decap::
1917 set raw_decap {index} {item} [/ {item} [...]] / end_set
1919 There are multiple global buffers for ``raw_decap``, this command will set
1920 one internal buffer index by ``{index}``.
1921 If there is no ``{index}`` specified::
1923 set raw_decap {item} [/ {item} [...]] / end_set
1925 the default index ``0`` is used.
1926 In order to use different decapsulating header, ``index`` must be specified
1927 during the flow rule creation::
1929 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
1930 raw_encap index 3 / end
1932 Otherwise the default index ``0`` is used.
1937 The following sections show functions for configuring ports.
1941 Port configuration changes only become active when forwarding is started/restarted.
1946 Attach a port specified by pci address or virtual device args::
1948 testpmd> port attach (identifier)
1950 To attach a new pci device, the device should be recognized by kernel first.
1951 Then it should be moved under DPDK management.
1952 Finally the port can be attached to testpmd.
1954 For example, to move a pci device using ixgbe under DPDK management:
1956 .. code-block:: console
1958 # Check the status of the available devices.
1959 ./usertools/dpdk-devbind.py --status
1961 Network devices using DPDK-compatible driver
1962 ============================================
1965 Network devices using kernel driver
1966 ===================================
1967 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1970 # Bind the device to igb_uio.
1971 sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1974 # Recheck the status of the devices.
1975 ./usertools/dpdk-devbind.py --status
1976 Network devices using DPDK-compatible driver
1977 ============================================
1978 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1980 To attach a port created by virtual device, above steps are not needed.
1982 For example, to attach a port whose pci address is 0000:0a:00.0.
1984 .. code-block:: console
1986 testpmd> port attach 0000:0a:00.0
1987 Attaching a new port...
1988 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1989 EAL: probe driver: 8086:10fb rte_ixgbe_pmd
1990 EAL: PCI memory mapped at 0x7f83bfa00000
1991 EAL: PCI memory mapped at 0x7f83bfa80000
1992 PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1993 PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1994 Port 0 is attached. Now total ports is 1
1997 For example, to attach a port created by pcap PMD.
1999 .. code-block:: console
2001 testpmd> port attach net_pcap0
2002 Attaching a new port...
2003 PMD: Initializing pmd_pcap for net_pcap0
2004 PMD: Creating pcap-backed ethdev on numa socket 0
2005 Port 0 is attached. Now total ports is 1
2008 In this case, identifier is ``net_pcap0``.
2009 This identifier format is the same as ``--vdev`` format of DPDK applications.
2011 For example, to re-attach a bonded port which has been previously detached,
2012 the mode and slave parameters must be given.
2014 .. code-block:: console
2016 testpmd> port attach net_bond_0,mode=0,slave=1
2017 Attaching a new port...
2018 EAL: Initializing pmd_bond for net_bond_0
2019 EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
2020 Port 0 is attached. Now total ports is 1
2027 Detach a specific port::
2029 testpmd> port detach (port_id)
2031 Before detaching a port, the port should be stopped and closed.
2033 For example, to detach a pci device port 0.
2035 .. code-block:: console
2037 testpmd> port stop 0
2040 testpmd> port close 0
2044 testpmd> port detach 0
2046 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
2047 EAL: remove driver: 8086:10fb rte_ixgbe_pmd
2048 EAL: PCI memory unmapped at 0x7f83bfa00000
2049 EAL: PCI memory unmapped at 0x7f83bfa80000
2053 For example, to detach a virtual device port 0.
2055 .. code-block:: console
2057 testpmd> port stop 0
2060 testpmd> port close 0
2064 testpmd> port detach 0
2066 PMD: Closing pcap ethdev on numa socket 0
2067 Port 'net_pcap0' is detached. Now total ports is 0
2070 To remove a pci device completely from the system, first detach the port from testpmd.
2071 Then the device should be moved under kernel management.
2072 Finally the device can be removed using kernel pci hotplug functionality.
2074 For example, to move a pci device under kernel management:
2076 .. code-block:: console
2078 sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
2080 ./usertools/dpdk-devbind.py --status
2082 Network devices using DPDK-compatible driver
2083 ============================================
2086 Network devices using kernel driver
2087 ===================================
2088 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
2090 To remove a port created by a virtual device, above steps are not needed.
2095 Start all ports or a specific port::
2097 testpmd> port start (port_id|all)
2102 Stop all ports or a specific port::
2104 testpmd> port stop (port_id|all)
2109 Close all ports or a specific port::
2111 testpmd> port close (port_id|all)
2116 Reset all ports or a specific port::
2118 testpmd> port reset (port_id|all)
2120 User should stop port(s) before resetting and (re-)start after reset.
2122 port config - queue ring size
2123 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2125 Configure a rx/tx queue ring size::
2127 testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
2129 Only take effect after command that (re-)start the port or command that setup specific queue.
2131 port start/stop queue
2132 ~~~~~~~~~~~~~~~~~~~~~
2134 Start/stop a rx/tx queue on a specific port::
2136 testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
2138 port config - queue deferred start
2139 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2141 Switch on/off deferred start of a specific port queue::
2143 testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
2146 ~~~~~~~~~~~~~~~~~~~~~
2148 Setup a rx/tx queue on a specific port::
2150 testpmd> port (port_id) (rxq|txq) (queue_id) setup
2152 Only take effect when port is started.
2157 Set the speed and duplex mode for all ports or a specific port::
2159 testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|200000|auto) \
2160 duplex (half|full|auto)
2162 port config - queues/descriptors
2163 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2165 Set number of queues/descriptors for rxq, txq, rxd and txd::
2167 testpmd> port config all (rxq|txq|rxd|txd) (value)
2169 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
2171 port config - max-pkt-len
2172 ~~~~~~~~~~~~~~~~~~~~~~~~~
2174 Set the maximum packet length::
2176 testpmd> port config all max-pkt-len (value)
2178 This is equivalent to the ``--max-pkt-len`` command-line option.
2180 port config - max-lro-pkt-size
2181 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2183 Set the maximum LRO aggregated packet size::
2185 testpmd> port config all max-lro-pkt-size (value)
2187 This is equivalent to the ``--max-lro-pkt-size`` command-line option.
2189 port config - Drop Packets
2190 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2192 Enable or disable packet drop on all RX queues of all ports when no receive buffers available::
2194 testpmd> port config all drop-en (on|off)
2196 Packet dropping when no receive buffers available is off by default.
2198 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
2203 Set the RSS (Receive Side Scaling) mode on or off::
2205 testpmd> port config all rss (all|default|eth|vlan|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|vxlan-gpe|l2tpv3|esp|ah|pfcp|none)
2207 RSS is on by default.
2209 The ``all`` option is equivalent to eth|vlan|ip|tcp|udp|sctp|ether|l2tpv3|esp|ah|pfcp.
2211 The ``default`` option enables all supported RSS types reported by device info.
2213 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
2215 port config - RSS Reta
2216 ~~~~~~~~~~~~~~~~~~~~~~
2218 Set the RSS (Receive Side Scaling) redirection table::
2220 testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
2225 Set the DCB mode for an individual port::
2227 testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
2229 The traffic class should be 4 or 8.
2234 Set the number of packets per burst::
2236 testpmd> port config all burst (value)
2238 This is equivalent to the ``--burst`` command-line option.
2240 port config - Threshold
2241 ~~~~~~~~~~~~~~~~~~~~~~~
2243 Set thresholds for TX/RX queues::
2245 testpmd> port config all (threshold) (value)
2247 Where the threshold type can be:
2249 * ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
2251 * ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
2253 * ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
2255 * ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
2257 * ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
2259 * ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
2261 * ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
2263 * ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
2265 * ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
2267 These threshold options are also available from the command-line.
2272 Set the value of ether-type for E-tag::
2274 testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
2276 Enable/disable the E-tag support::
2278 testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
2280 port config pctype mapping
2281 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2283 Reset pctype mapping table::
2285 testpmd> port config (port_id) pctype mapping reset
2287 Update hardware defined pctype to software defined flow type mapping table::
2289 testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
2293 * ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
2295 * ``flow_type_id``: software flow type id as the index of the pctype mapping table.
2297 port config input set
2298 ~~~~~~~~~~~~~~~~~~~~~
2300 Config RSS/FDIR/FDIR flexible payload input set for some pctype::
2302 testpmd> port config (port_id) pctype (pctype_id) \
2303 (hash_inset|fdir_inset|fdir_flx_inset) \
2304 (get|set|clear) field (field_idx)
2306 Clear RSS/FDIR/FDIR flexible payload input set for some pctype::
2308 testpmd> port config (port_id) pctype (pctype_id) \
2309 (hash_inset|fdir_inset|fdir_flx_inset) clear all
2313 * ``pctype_id``: hardware packet classification types.
2314 * ``field_idx``: hardware field index.
2316 port config udp_tunnel_port
2317 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2319 Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols::
2321 testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe (udp_port)
2323 port config tx_metadata
2324 ~~~~~~~~~~~~~~~~~~~~~~~
2326 Set Tx metadata value per port.
2327 testpmd will add this value to any Tx packet sent from this port::
2329 testpmd> port config (port_id) tx_metadata (value)
2334 Set/clear dynamic flag per port.
2335 testpmd will register this flag in the mbuf (same registration
2336 for both Tx and Rx). Then set/clear this flag for each Tx
2337 packet sent from this port. The set bit only works for Tx packet::
2339 testpmd> port config (port_id) dynf (name) (set|clear)
2344 To configure MTU(Maximum Transmission Unit) on devices using testpmd::
2346 testpmd> port config mtu (port_id) (value)
2348 port config rss hash key
2349 ~~~~~~~~~~~~~~~~~~~~~~~~
2351 To configure the RSS hash key used to compute the RSS
2352 hash of input [IP] packets received on port::
2354 testpmd> port config <port_id> rss-hash-key (ipv4|ipv4-frag|\
2355 ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\
2356 ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|\
2357 ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|\
2358 ipv6-udp-ex <string of hex digits \
2359 (variable length, NIC dependent)>)
2364 The following sections show functions for device operations.
2369 Detach a device specified by pci address or virtual device args::
2371 testpmd> device detach (identifier)
2373 Before detaching a device associated with ports, the ports should be stopped and closed.
2375 For example, to detach a pci device whose address is 0002:03:00.0.
2377 .. code-block:: console
2379 testpmd> device detach 0002:03:00.0
2380 Removing a device...
2381 Port 1 is now closed
2382 EAL: Releasing pci mapped resource for 0002:03:00.0
2383 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218a050000
2384 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218c050000
2385 Device 0002:03:00.0 is detached
2386 Now total ports is 1
2388 For example, to detach a port created by pcap PMD.
2390 .. code-block:: console
2392 testpmd> device detach net_pcap0
2393 Removing a device...
2394 Port 0 is now closed
2395 Device net_pcap0 is detached
2396 Now total ports is 0
2399 In this case, identifier is ``net_pcap0``.
2400 This identifier format is the same as ``--vdev`` format of DPDK applications.
2402 Link Bonding Functions
2403 ----------------------
2405 The Link Bonding functions make it possible to dynamically create and
2406 manage link bonding devices from within testpmd interactive prompt.
2408 create bonded device
2409 ~~~~~~~~~~~~~~~~~~~~
2411 Create a new bonding device::
2413 testpmd> create bonded device (mode) (socket)
2415 For example, to create a bonded device in mode 1 on socket 0::
2417 testpmd> create bonded device 1 0
2418 created new bonded device (port X)
2423 Adds Ethernet device to a Link Bonding device::
2425 testpmd> add bonding slave (slave id) (port id)
2427 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2429 testpmd> add bonding slave 6 10
2432 remove bonding slave
2433 ~~~~~~~~~~~~~~~~~~~~
2435 Removes an Ethernet slave device from a Link Bonding device::
2437 testpmd> remove bonding slave (slave id) (port id)
2439 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2441 testpmd> remove bonding slave 6 10
2446 Set the Link Bonding mode of a Link Bonding device::
2448 testpmd> set bonding mode (value) (port id)
2450 For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
2452 testpmd> set bonding mode 3 10
2457 Set an Ethernet slave device as the primary device on a Link Bonding device::
2459 testpmd> set bonding primary (slave id) (port id)
2461 For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
2463 testpmd> set bonding primary 6 10
2468 Set the MAC address of a Link Bonding device::
2470 testpmd> set bonding mac (port id) (mac)
2472 For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
2474 testpmd> set bonding mac 10 00:00:00:00:00:01
2476 set bonding xmit_balance_policy
2477 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2479 Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
2481 testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
2483 For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
2485 testpmd> set bonding xmit_balance_policy 10 l34
2488 set bonding mon_period
2489 ~~~~~~~~~~~~~~~~~~~~~~
2491 Set the link status monitoring polling period in milliseconds for a bonding device.
2493 This adds support for PMD slave devices which do not support link status interrupts.
2494 When the mon_period is set to a value greater than 0 then all PMD's which do not support
2495 link status ISR will be queried every polling interval to check if their link status has changed::
2497 testpmd> set bonding mon_period (port_id) (value)
2499 For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
2501 testpmd> set bonding mon_period 5 150
2504 set bonding lacp dedicated_queue
2505 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2507 Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2508 when in mode 4 (link-aggregation-802.3ad)::
2510 testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2513 set bonding agg_mode
2514 ~~~~~~~~~~~~~~~~~~~~
2516 Enable one of the specific aggregators mode when in mode 4 (link-aggregation-802.3ad)::
2518 testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable)
2524 Show the current configuration of a Link Bonding device::
2526 testpmd> show bonding config (port id)
2529 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2530 in balance mode with a transmission policy of layer 2+3::
2532 testpmd> show bonding config 9
2534 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
2536 Active Slaves (3): [1 3 4]
2543 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2544 This is mainly useful for debugging purposes.
2545 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2546 and fields that can be accessed.
2551 Display the value of a port register::
2553 testpmd> read reg (port_id) (address)
2555 For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
2557 testpmd> read reg 0 0xEE00
2558 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
2563 Display a port register bit field::
2565 testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2567 For example, reading the lowest two bits from the register in the example above::
2569 testpmd> read regfield 0 0xEE00 0 1
2570 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
2575 Display a single port register bit::
2577 testpmd> read regbit (port_id) (address) (bit_x)
2579 For example, reading the lowest bit from the register in the example above::
2581 testpmd> read regbit 0 0xEE00 0
2582 port 0 PCI register at offset 0xEE00: bit 0=1
2587 Set the value of a port register::
2589 testpmd> write reg (port_id) (address) (value)
2591 For example, to clear a register::
2593 testpmd> write reg 0 0xEE00 0x0
2594 port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2599 Set bit field of a port register::
2601 testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2603 For example, writing to the register cleared in the example above::
2605 testpmd> write regfield 0 0xEE00 0 1 2
2606 port 0 PCI register at offset 0xEE00: 0x00000002 (2)
2611 Set single bit value of a port register::
2613 testpmd> write regbit (port_id) (address) (bit_x) (value)
2615 For example, to set the high bit in the register from the example above::
2617 testpmd> write regbit 0 0xEE00 31 1
2618 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
2620 Traffic Metering and Policing
2621 -----------------------------
2623 The following section shows functions for configuring traffic metering and
2624 policing on the ethernet device through the use of generic ethdev API.
2626 show port traffic management capability
2627 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2629 Show traffic metering and policing capability of the port::
2631 testpmd> show port meter cap (port_id)
2633 add port meter profile (srTCM rfc2967)
2634 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2636 Add meter profile (srTCM rfc2697) to the ethernet device::
2638 testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2643 * ``profile_id``: ID for the meter profile.
2644 * ``cir``: Committed Information Rate (CIR) (bytes/second).
2645 * ``cbs``: Committed Burst Size (CBS) (bytes).
2646 * ``ebs``: Excess Burst Size (EBS) (bytes).
2648 add port meter profile (trTCM rfc2968)
2649 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2651 Add meter profile (srTCM rfc2698) to the ethernet device::
2653 testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2654 (cir) (pir) (cbs) (pbs)
2658 * ``profile_id``: ID for the meter profile.
2659 * ``cir``: Committed information rate (bytes/second).
2660 * ``pir``: Peak information rate (bytes/second).
2661 * ``cbs``: Committed burst size (bytes).
2662 * ``pbs``: Peak burst size (bytes).
2664 add port meter profile (trTCM rfc4115)
2665 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2667 Add meter profile (trTCM rfc4115) to the ethernet device::
2669 testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2670 (cir) (eir) (cbs) (ebs)
2674 * ``profile_id``: ID for the meter profile.
2675 * ``cir``: Committed information rate (bytes/second).
2676 * ``eir``: Excess information rate (bytes/second).
2677 * ``cbs``: Committed burst size (bytes).
2678 * ``ebs``: Excess burst size (bytes).
2680 delete port meter profile
2681 ~~~~~~~~~~~~~~~~~~~~~~~~~
2683 Delete meter profile from the ethernet device::
2685 testpmd> del port meter profile (port_id) (profile_id)
2690 Create new meter object for the ethernet device::
2692 testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2693 (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \
2694 (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2699 * ``mtr_id``: meter object ID.
2700 * ``profile_id``: ID for the meter profile.
2701 * ``meter_enable``: When this parameter has a non-zero value, the meter object
2702 gets enabled at the time of creation, otherwise remains disabled.
2703 * ``g_action``: Policer action for the packet with green color.
2704 * ``y_action``: Policer action for the packet with yellow color.
2705 * ``r_action``: Policer action for the packet with red color.
2706 * ``stats_mask``: Mask of statistics counter types to be enabled for the
2708 * ``shared``: When this parameter has a non-zero value, the meter object is
2709 shared by multiple flows. Otherwise, meter object is used by single flow.
2710 * ``use_pre_meter_color``: When this parameter has a non-zero value, the
2711 input color for the current meter object is determined by the latest meter
2712 object in the same flow. Otherwise, the current meter object uses the
2713 *dscp_table* to determine the input color.
2714 * ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2715 color, 0 <= x <= 63.
2720 Enable meter for the ethernet device::
2722 testpmd> enable port meter (port_id) (mtr_id)
2727 Disable meter for the ethernet device::
2729 testpmd> disable port meter (port_id) (mtr_id)
2734 Delete meter for the ethernet device::
2736 testpmd> del port meter (port_id) (mtr_id)
2738 Set port meter profile
2739 ~~~~~~~~~~~~~~~~~~~~~~
2741 Set meter profile for the ethernet device::
2743 testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2745 set port meter dscp table
2746 ~~~~~~~~~~~~~~~~~~~~~~~~~
2748 Set meter dscp table for the ethernet device::
2750 testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \
2751 (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2753 set port meter policer action
2754 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2756 Set meter policer action for the ethernet device::
2758 testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \
2759 (action0) [(action1) (action1)]
2763 * ``action_mask``: Bit mask indicating which policer actions need to be
2764 updated. One or more policer actions can be updated in a single function
2765 invocation. To update the policer action associated with color C, bit
2766 (1 << C) needs to be set in *action_mask* and element at position C
2767 in the *actions* array needs to be valid.
2768 * ``actionx``: Policer action for the color x,
2769 RTE_MTR_GREEN <= x < RTE_MTR_COLORS
2771 set port meter stats mask
2772 ~~~~~~~~~~~~~~~~~~~~~~~~~
2774 Set meter stats mask for the ethernet device::
2776 testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2780 * ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2782 show port meter stats
2783 ~~~~~~~~~~~~~~~~~~~~~
2785 Show meter stats of the ethernet device::
2787 testpmd> show port meter stats (port_id) (mtr_id) (clear)
2791 * ``clear``: Flag that indicates whether the statistics counters should
2792 be cleared (i.e. set to zero) immediately after they have been read or not.
2797 The following section shows functions for configuring traffic management on
2798 the ethernet device through the use of generic TM API.
2800 show port traffic management capability
2801 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2803 Show traffic management capability of the port::
2805 testpmd> show port tm cap (port_id)
2807 show port traffic management capability (hierarchy level)
2808 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2810 Show traffic management hierarchy level capability of the port::
2812 testpmd> show port tm level cap (port_id) (level_id)
2814 show port traffic management capability (hierarchy node level)
2815 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2817 Show the traffic management hierarchy node capability of the port::
2819 testpmd> show port tm node cap (port_id) (node_id)
2821 show port traffic management hierarchy node type
2822 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2824 Show the port traffic management hierarchy node type::
2826 testpmd> show port tm node type (port_id) (node_id)
2828 show port traffic management hierarchy node stats
2829 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2831 Show the port traffic management hierarchy node statistics::
2833 testpmd> show port tm node stats (port_id) (node_id) (clear)
2837 * ``clear``: When this parameter has a non-zero value, the statistics counters
2838 are cleared (i.e. set to zero) immediately after they have been read,
2839 otherwise the statistics counters are left untouched.
2841 Add port traffic management private shaper profile
2842 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2844 Add the port traffic management private shaper profile::
2846 testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2847 (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size) \
2848 (packet_length_adjust)
2852 * ``shaper_profile id``: Shaper profile ID for the new profile.
2853 * ``cmit_tb_rate``: Committed token bucket rate (bytes per second).
2854 * ``cmit_tb_size``: Committed token bucket size (bytes).
2855 * ``peak_tb_rate``: Peak token bucket rate (bytes per second).
2856 * ``peak_tb_size``: Peak token bucket size (bytes).
2857 * ``packet_length_adjust``: The value (bytes) to be added to the length of
2858 each packet for the purpose of shaping. This parameter value can be used to
2859 correct the packet length with the framing overhead bytes that are consumed
2862 Delete port traffic management private shaper profile
2863 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2865 Delete the port traffic management private shaper::
2867 testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2871 * ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2873 Add port traffic management shared shaper
2874 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2876 Create the port traffic management shared shaper::
2878 testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2883 * ``shared_shaper_id``: Shared shaper ID to be created.
2884 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2886 Set port traffic management shared shaper
2887 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2889 Update the port traffic management shared shaper::
2891 testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2896 * ``shared_shaper_id``: Shared shaper ID to be update.
2897 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2899 Delete port traffic management shared shaper
2900 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2902 Delete the port traffic management shared shaper::
2904 testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2908 * ``shared_shaper_id``: Shared shaper ID to be deleted.
2910 Set port traffic management hierarchy node private shaper
2911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2913 set the port traffic management hierarchy node private shaper::
2915 testpmd> set port tm node shaper profile (port_id) (node_id) \
2920 * ``shaper_profile id``: Private shaper profile ID to be enabled on the
2923 Add port traffic management WRED profile
2924 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2926 Create a new WRED profile::
2928 testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2929 (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2930 (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2931 (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2935 * ``wred_profile id``: Identifier for the newly create WRED profile
2936 * ``color_g``: Packet color (green)
2937 * ``min_th_g``: Minimum queue threshold for packet with green color
2938 * ``max_th_g``: Minimum queue threshold for packet with green color
2939 * ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2940 * ``wq_log2_g``: Negated log2 of queue weight (wq)
2941 * ``color_y``: Packet color (yellow)
2942 * ``min_th_y``: Minimum queue threshold for packet with yellow color
2943 * ``max_th_y``: Minimum queue threshold for packet with yellow color
2944 * ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2945 * ``wq_log2_y``: Negated log2 of queue weight (wq)
2946 * ``color_r``: Packet color (red)
2947 * ``min_th_r``: Minimum queue threshold for packet with yellow color
2948 * ``max_th_r``: Minimum queue threshold for packet with yellow color
2949 * ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2950 * ``wq_log2_r``: Negated log2 of queue weight (wq)
2952 Delete port traffic management WRED profile
2953 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2955 Delete the WRED profile::
2957 testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2959 Add port traffic management hierarchy nonleaf node
2960 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2962 Add nonleaf node to port traffic management hierarchy::
2964 testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2965 (priority) (weight) (level_id) (shaper_profile_id) \
2966 (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2967 [(shared_shaper_0) (shared_shaper_1) ...] \
2971 * ``parent_node_id``: Node ID of the parent.
2972 * ``priority``: Node priority (highest node priority is zero). This is used by
2973 the SP algorithm running on the parent node for scheduling this node.
2974 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2975 to the weight sum of all siblings that have the same priority. It is used by
2976 the WFQ algorithm running on the parent node for scheduling this node.
2977 * ``level_id``: Hierarchy level of the node.
2978 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2980 * ``n_sp_priorities``: Number of strict priorities.
2981 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2982 * ``n_shared_shapers``: Number of shared shapers.
2983 * ``shared_shaper_id``: Shared shaper id.
2985 Add port traffic management hierarchy leaf node
2986 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2988 Add leaf node to port traffic management hierarchy::
2990 testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2991 (priority) (weight) (level_id) (shaper_profile_id) \
2992 (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2993 [(shared_shaper_id) (shared_shaper_id) ...] \
2997 * ``parent_node_id``: Node ID of the parent.
2998 * ``priority``: Node priority (highest node priority is zero). This is used by
2999 the SP algorithm running on the parent node for scheduling this node.
3000 * ``weight``: Node weight (lowest weight is one). The node weight is relative
3001 to the weight sum of all siblings that have the same priority. It is used by
3002 the WFQ algorithm running on the parent node for scheduling this node.
3003 * ``level_id``: Hierarchy level of the node.
3004 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
3006 * ``cman_mode``: Congestion management mode to be enabled for this node.
3007 * ``wred_profile_id``: WRED profile id to be enabled for this node.
3008 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
3009 * ``n_shared_shapers``: Number of shared shapers.
3010 * ``shared_shaper_id``: Shared shaper id.
3012 Delete port traffic management hierarchy node
3013 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3015 Delete node from port traffic management hierarchy::
3017 testpmd> del port tm node (port_id) (node_id)
3019 Update port traffic management hierarchy parent node
3020 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3022 Update port traffic management hierarchy parent node::
3024 testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
3027 This function can only be called after the hierarchy commit invocation. Its
3028 success depends on the port support for this operation, as advertised through
3029 the port capability set. This function is valid for all nodes of the traffic
3030 management hierarchy except root node.
3032 Suspend port traffic management hierarchy node
3033 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3035 testpmd> suspend port tm node (port_id) (node_id)
3037 Resume port traffic management hierarchy node
3038 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3040 testpmd> resume port tm node (port_id) (node_id)
3042 Commit port traffic management hierarchy
3043 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3045 Commit the traffic management hierarchy on the port::
3047 testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
3051 * ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
3052 call failure. On the other hand, hierarchy is preserved when this parameter
3055 Set port traffic management mark VLAN dei
3056 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3058 Enables/Disables the traffic management marking on the port for VLAN packets::
3060 testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red>
3064 * ``port_id``: The port which on which VLAN packets marked as ``green`` or
3065 ``yellow`` or ``red`` will have dei bit enabled
3067 * ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green
3069 * ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow
3071 * ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red
3073 Set port traffic management mark IP dscp
3074 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3076 Enables/Disables the traffic management marking on the port for IP dscp packets::
3078 testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red>
3082 * ``port_id``: The port which on which IP packets marked as ``green`` or
3083 ``yellow`` or ``red`` will have IP dscp bits updated
3085 * ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets
3087 * ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets
3089 * ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets
3091 Set port traffic management mark IP ecn
3092 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3094 Enables/Disables the traffic management marking on the port for IP ecn packets::
3096 testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red>
3100 * ``port_id``: The port which on which IP packets marked as ``green`` or
3101 ``yellow`` or ``red`` will have IP ecn bits updated
3103 * ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01 or 2'b10
3104 to ecn of 2'b11 when IP is caring TCP or SCTP
3106 * ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
3107 to ecn of 2'b11 when IP is caring TCP or SCTP
3109 * ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
3110 to ecn of 2'b11 when IP is caring TCP or SCTP
3115 This section details the available filter functions that are available.
3117 Note these functions interface the deprecated legacy filtering framework,
3118 superseded by *rte_flow*. See `Flow rules management`_.
3121 ~~~~~~~~~~~~~~~~~~~~
3123 Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
3125 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
3126 ethertype (ether_type) (drop|fwd) queue (queue_id)
3128 The available information parameters are:
3130 * ``port_id``: The port which the Ethertype filter assigned on.
3132 * ``mac_addr``: Compare destination mac address.
3134 * ``mac_ignr``: Ignore destination mac address match.
3136 * ``mac_address``: Destination mac address to match.
3138 * ``ether_type``: The EtherType value want to match,
3139 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
3141 * ``queue_id``: The receive queue associated with this EtherType filter.
3142 It is meaningless when deleting or dropping.
3144 Example, to add/remove an ethertype filter rule::
3146 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
3147 ethertype 0x0806 fwd queue 3
3149 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
3150 ethertype 0x0806 fwd queue 3
3155 Add or delete a 2-tuple filter,
3156 which identifies packets by specific protocol and destination TCP/UDP port
3157 and forwards packets into one of the receive queues::
3159 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
3160 protocol (protocol_value) mask (mask_value) \
3161 tcp_flags (tcp_flags_value) priority (prio_value) \
3164 The available information parameters are:
3166 * ``port_id``: The port which the 2-tuple filter assigned on.
3168 * ``dst_port_value``: Destination port in L4.
3170 * ``protocol_value``: IP L4 protocol.
3172 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
3174 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
3176 * ``prio_value``: Priority of this filter.
3178 * ``queue_id``: The receive queue associated with this 2-tuple filter.
3180 Example, to add/remove an 2tuple filter rule::
3182 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
3183 tcp_flags 0x02 priority 3 queue 3
3185 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
3186 tcp_flags 0x02 priority 3 queue 3
3191 Add or delete a 5-tuple filter,
3192 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
3193 and routes packets into one of the receive queues::
3195 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
3196 (src_address) dst_port (dst_port_value) \
3197 src_port (src_port_value) protocol (protocol_value) \
3198 mask (mask_value) tcp_flags (tcp_flags_value) \
3199 priority (prio_value) queue (queue_id)
3201 The available information parameters are:
3203 * ``port_id``: The port which the 5-tuple filter assigned on.
3205 * ``dst_address``: Destination IP address.
3207 * ``src_address``: Source IP address.
3209 * ``dst_port_value``: TCP/UDP destination port.
3211 * ``src_port_value``: TCP/UDP source port.
3213 * ``protocol_value``: L4 protocol.
3215 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
3217 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
3219 * ``prio_value``: The priority of this filter.
3221 * ``queue_id``: The receive queue associated with this 5-tuple filter.
3223 Example, to add/remove an 5tuple filter rule::
3225 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3226 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3227 flags 0x0 priority 3 queue 3
3229 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3230 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3231 flags 0x0 priority 3 queue 3
3236 Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
3238 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
3240 The available information parameters are:
3242 * ``port_id``: The port which the SYN filter assigned on.
3244 * ``high``: This SYN filter has higher priority than other filters.
3246 * ``low``: This SYN filter has lower priority than other filters.
3248 * ``queue_id``: The receive queue associated with this SYN filter
3252 testpmd> syn_filter 0 add priority high queue 3
3257 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
3258 and routed into one of the receive queues::
3260 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
3261 mask (mask_value) priority (prio_value) queue (queue_id)
3263 The available information parameters are:
3265 * ``port_id``: The port which the Flex filter is assigned on.
3267 * ``len_value``: Filter length in bytes, no greater than 128.
3269 * ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
3271 * ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
3273 * ``prio_value``: The priority of this filter.
3275 * ``queue_id``: The receive queue associated with this Flex filter.
3279 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
3280 mask 000C priority 3 queue 3
3282 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
3283 mask 000C priority 3 queue 3
3286 .. _testpmd_flow_director:
3288 flow_director_filter
3289 ~~~~~~~~~~~~~~~~~~~~
3291 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
3293 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
3294 Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
3296 * Perfect match filters.
3297 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3298 The masked fields are for IP flow.
3300 * Signature filters.
3301 The hardware checks a match between a hash-based signature of the masked fields of the received packet.
3303 * Perfect-mac-vlan match filters.
3304 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3305 The masked fields are for MAC VLAN flow.
3307 * Perfect-tunnel match filters.
3308 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3309 The masked fields are for tunnel flow.
3311 * Perfect-raw-flow-type match filters.
3312 The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet.
3313 The masked fields are specified by input sets.
3315 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
3316 per flow type and the flexible payload.
3318 The Flow Director can also mask out parts of all of these fields so that filters
3319 are only applied to certain fields or parts of the fields.
3321 Note that for raw flow type mode the source and destination fields in the
3322 raw packet buffer need to be presented in a reversed order with respect
3323 to the expected received packets.
3324 For example: IP source and destination addresses or TCP/UDP/SCTP
3325 source and destination ports
3327 Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
3329 # Commands to add flow director filters of different flow types::
3331 flow_director_filter (port_id) mode IP (add|del|update) \
3332 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
3333 src (src_ip_address) dst (dst_ip_address) \
3334 tos (tos_value) proto (proto_value) ttl (ttl_value) \
3335 vlan (vlan_value) flexbytes (flexbytes_value) \
3336 (drop|fwd) pf|vf(vf_id) queue (queue_id) \
3339 flow_director_filter (port_id) mode IP (add|del|update) \
3340 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
3341 src (src_ip_address) (src_port) \
3342 dst (dst_ip_address) (dst_port) \
3343 tos (tos_value) ttl (ttl_value) \
3344 vlan (vlan_value) flexbytes (flexbytes_value) \
3345 (drop|fwd) queue pf|vf(vf_id) (queue_id) \
3348 flow_director_filter (port_id) mode IP (add|del|update) \
3349 flow (ipv4-sctp|ipv6-sctp) \
3350 src (src_ip_address) (src_port) \
3351 dst (dst_ip_address) (dst_port) \
3352 tos (tos_value) ttl (ttl_value) \
3353 tag (verification_tag) vlan (vlan_value) \
3354 flexbytes (flexbytes_value) (drop|fwd) \
3355 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
3357 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
3358 ether (ethertype) flexbytes (flexbytes_value) \
3359 (drop|fwd) pf|vf(vf_id) queue (queue_id)
3362 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
3363 mac (mac_address) vlan (vlan_value) \
3364 flexbytes (flexbytes_value) (drop|fwd) \
3365 queue (queue_id) fd_id (fd_id_value)
3367 flow_director_filter (port_id) mode Tunnel (add|del|update) \
3368 mac (mac_address) vlan (vlan_value) \
3369 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
3370 flexbytes (flexbytes_value) (drop|fwd) \
3371 queue (queue_id) fd_id (fd_id_value)
3373 flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \
3374 (drop|fwd) queue (queue_id) fd_id (fd_id_value) \
3375 packet (packet file name)
3377 For example, to add an ipv4-udp flow type filter::
3379 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
3380 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
3381 fwd pf queue 1 fd_id 1
3383 For example, add an ipv4-other flow type filter::
3385 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
3386 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
3387 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
3392 Flush all flow director filters on a device::
3394 testpmd> flush_flow_director (port_id)
3396 Example, to flush all flow director filter on port 0::
3398 testpmd> flush_flow_director 0
3403 Set flow director's input masks::
3405 flow_director_mask (port_id) mode IP vlan (vlan_value) \
3406 src_mask (ipv4_src) (ipv6_src) (src_port) \
3407 dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
3409 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
3411 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
3412 mac (mac_value) tunnel-type (tunnel_type_value) \
3413 tunnel-id (tunnel_id_value)
3415 Example, to set flow director mask on port 0::
3417 testpmd> flow_director_mask 0 mode IP vlan 0xefff \
3418 src_mask 255.255.255.255 \
3419 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
3420 dst_mask 255.255.255.255 \
3421 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
3423 flow_director_flex_mask
3424 ~~~~~~~~~~~~~~~~~~~~~~~
3426 set masks of flow director's flexible payload based on certain flow type::
3428 testpmd> flow_director_flex_mask (port_id) \
3429 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3430 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
3431 l2_payload|all) (mask)
3433 Example, to set flow director's flex mask for all flow type on port 0::
3435 testpmd> flow_director_flex_mask 0 flow all \
3436 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
3439 flow_director_flex_payload
3440 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3442 Configure flexible payload selection::
3444 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3446 For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
3448 testpmd> flow_director_flex_payload 0 l4 \
3449 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
3451 get_sym_hash_ena_per_port
3452 ~~~~~~~~~~~~~~~~~~~~~~~~~
3454 Get symmetric hash enable configuration per port::
3456 get_sym_hash_ena_per_port (port_id)
3458 For example, to get symmetric hash enable configuration of port 1::
3460 testpmd> get_sym_hash_ena_per_port 1
3462 set_sym_hash_ena_per_port
3463 ~~~~~~~~~~~~~~~~~~~~~~~~~
3465 Set symmetric hash enable configuration per port to enable or disable::
3467 set_sym_hash_ena_per_port (port_id) (enable|disable)
3469 For example, to set symmetric hash enable configuration of port 1 to enable::
3471 testpmd> set_sym_hash_ena_per_port 1 enable
3473 get_hash_global_config
3474 ~~~~~~~~~~~~~~~~~~~~~~
3476 Get the global configurations of hash filters::
3478 get_hash_global_config (port_id)
3480 For example, to get the global configurations of hash filters of port 1::
3482 testpmd> get_hash_global_config 1
3484 set_hash_global_config
3485 ~~~~~~~~~~~~~~~~~~~~~~
3487 Set the global configurations of hash filters::
3489 set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default) \
3490 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
3491 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flow_id>) \
3494 For example, to enable simple_xor for flow type of ipv6 on port 2::
3496 testpmd> set_hash_global_config 2 simple_xor ipv6 enable
3501 Set the input set for hash::
3503 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3504 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3505 l2_payload|<flow_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3506 ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
3507 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
3508 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
3509 fld-8th|none) (select|add)
3511 For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
3513 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
3518 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3519 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3521 Set the input set for flow director::
3523 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3524 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3525 l2_payload|<flow_id>) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3526 ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
3527 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
3528 sctp-dst-port|sctp-veri-tag|none) (select|add)
3530 For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
3532 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
3537 Set different GRE key length for input set::
3539 global_config (port_id) gre-key-len (number in bytes)
3541 For example to set GRE key length for input set to 4 bytes on port 0::
3543 testpmd> global_config 0 gre-key-len 4
3546 .. _testpmd_rte_flow:
3548 Flow rules management
3549 ---------------------
3551 Control of the generic flow API (*rte_flow*) is fully exposed through the
3552 ``flow`` command (validation, creation, destruction, queries and operation
3555 Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3556 features simultaneously may cause undefined side-effects and is therefore
3562 Because the ``flow`` command uses dynamic tokens to handle the large number
3563 of possible flow rules combinations, its behavior differs slightly from
3564 other commands, in particular:
3566 - Pressing *?* or the *<tab>* key displays contextual help for the current
3567 token, not that of the entire command.
3569 - Optional and repeated parameters are supported (provided they are listed
3570 in the contextual help).
3572 The first parameter stands for the operation mode. Possible operations and
3573 their general syntax are described below. They are covered in detail in the
3576 - Check whether a flow rule can be created::
3578 flow validate {port_id}
3579 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3580 pattern {item} [/ {item} [...]] / end
3581 actions {action} [/ {action} [...]] / end
3583 - Create a flow rule::
3585 flow create {port_id}
3586 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3587 pattern {item} [/ {item} [...]] / end
3588 actions {action} [/ {action} [...]] / end
3590 - Destroy specific flow rules::
3592 flow destroy {port_id} rule {rule_id} [...]
3594 - Destroy all flow rules::
3596 flow flush {port_id}
3598 - Query an existing flow rule::
3600 flow query {port_id} {rule_id} {action}
3602 - List existing flow rules sorted by priority, filtered by group
3605 flow list {port_id} [group {group_id}] [...]
3607 - Restrict ingress traffic to the defined flow rules::
3609 flow isolate {port_id} {boolean}
3611 - Dump internal representation information of all flows in hardware::
3613 flow dump {port_id} {output_file}
3615 - List and destroy aged flow rules::
3617 flow aged {port_id} [destroy]
3619 Validating flow rules
3620 ~~~~~~~~~~~~~~~~~~~~~
3622 ``flow validate`` reports whether a flow rule would be accepted by the
3623 underlying device in its current state but stops short of creating it. It is
3624 bound to ``rte_flow_validate()``::
3626 flow validate {port_id}
3627 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3628 pattern {item} [/ {item} [...]] / end
3629 actions {action} [/ {action} [...]] / end
3631 If successful, it will show::
3635 Otherwise it will show an error message of the form::
3637 Caught error type [...] ([...]): [...]
3639 This command uses the same parameters as ``flow create``, their format is
3640 described in `Creating flow rules`_.
3642 Check whether redirecting any Ethernet packet received on port 0 to RX queue
3643 index 6 is supported::
3645 testpmd> flow validate 0 ingress pattern eth / end
3646 actions queue index 6 / end
3650 Port 0 does not support TCPv6 rules::
3652 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3654 Caught error type 9 (specific pattern item): Invalid argument
3660 ``flow create`` validates and creates the specified flow rule. It is bound
3661 to ``rte_flow_create()``::
3663 flow create {port_id}
3664 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3665 pattern {item} [/ {item} [...]] / end
3666 actions {action} [/ {action} [...]] / end
3668 If successful, it will return a flow rule ID usable with other commands::
3670 Flow rule #[...] created
3672 Otherwise it will show an error message of the form::
3674 Caught error type [...] ([...]): [...]
3676 Parameters describe in the following order:
3678 - Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens).
3679 - A matching pattern, starting with the *pattern* token and terminated by an
3681 - Actions, starting with the *actions* token and terminated by an *end*
3684 These translate directly to *rte_flow* objects provided as-is to the
3685 underlying functions.
3687 The shortest valid definition only comprises mandatory tokens::
3689 testpmd> flow create 0 pattern end actions end
3691 Note that PMDs may refuse rules that essentially do nothing such as this
3694 **All unspecified object values are automatically initialized to 0.**
3699 These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3700 specified before the ``pattern`` token.
3702 - ``group {group id}``: priority group.
3703 - ``priority {level}``: priority level within group.
3704 - ``ingress``: rule applies to ingress traffic.
3705 - ``egress``: rule applies to egress traffic.
3706 - ``transfer``: apply rule directly to endpoints found in pattern.
3708 Each instance of an attribute specified several times overrides the previous
3709 value as shown below (group 4 is used)::
3711 testpmd> flow create 0 group 42 group 24 group 4 [...]
3713 Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3715 While not specifying a direction is an error, some rules may allow both
3718 Most rules affect RX therefore contain the ``ingress`` token::
3720 testpmd> flow create 0 ingress pattern [...]
3725 A matching pattern starts after the ``pattern`` token. It is made of pattern
3726 items and is terminated by a mandatory ``end`` item.
3728 Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3729 rte_flow_item_type``).
3731 The ``/`` token is used as a separator between pattern items as shown
3734 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3736 Note that protocol items like these must be stacked from lowest to highest
3737 layer to make sense. For instance, the following rule is either invalid or
3738 unlikely to match any packet::
3740 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3742 More information on these restrictions can be found in the *rte_flow*
3745 Several items support additional specification structures, for example
3746 ``ipv4`` allows specifying source and destination addresses as follows::
3748 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3749 dst is 10.2.0.0 / end [...]
3751 This rule matches all IPv4 traffic with the specified properties.
3753 In this example, ``src`` and ``dst`` are field names of the underlying
3754 ``struct rte_flow_item_ipv4`` object. All item properties can be specified
3755 in a similar fashion.
3757 The ``is`` token means that the subsequent value must be matched exactly,
3758 and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3759 accordingly. Possible assignment tokens are:
3761 - ``is``: match value perfectly (with full bit-mask).
3762 - ``spec``: match value according to configured bit-mask.
3763 - ``last``: specify upper bound to establish a range.
3764 - ``mask``: specify bit-mask with relevant bits set to one.
3765 - ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one.
3767 These yield identical results::
3769 ipv4 src is 10.1.1.1
3773 ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3777 ipv4 src spec 10.1.1.1 src prefix 32
3781 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3785 ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3787 Inclusive ranges can be defined with ``last``::
3789 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3791 Note that ``mask`` affects both ``spec`` and ``last``::
3793 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3794 # matches 10.1.0.0 to 10.2.255.255
3796 Properties can be modified multiple times::
3798 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3802 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3807 This section lists supported pattern items and their attributes, if any.
3809 - ``end``: end list of pattern items.
3811 - ``void``: no-op pattern item.
3813 - ``invert``: perform actions when pattern does not match.
3815 - ``any``: match any protocol for the current layer.
3817 - ``num {unsigned}``: number of layers covered.
3819 - ``pf``: match traffic from/to the physical function.
3821 - ``vf``: match traffic from/to a virtual function ID.
3823 - ``id {unsigned}``: VF ID.
3825 - ``phy_port``: match traffic from/to a specific physical port.
3827 - ``index {unsigned}``: physical port index.
3829 - ``port_id``: match traffic from/to a given DPDK port ID.
3831 - ``id {unsigned}``: DPDK port ID.
3833 - ``mark``: match value set in previously matched flow rule using the mark action.
3835 - ``id {unsigned}``: arbitrary integer value.
3837 - ``raw``: match an arbitrary byte string.
3839 - ``relative {boolean}``: look for pattern after the previous item.
3840 - ``search {boolean}``: search pattern from offset (see also limit).
3841 - ``offset {integer}``: absolute or relative offset for pattern.
3842 - ``limit {unsigned}``: search area limit for start of pattern.
3843 - ``pattern {string}``: byte string to look for.
3845 - ``eth``: match Ethernet header.
3847 - ``dst {MAC-48}``: destination MAC.
3848 - ``src {MAC-48}``: source MAC.
3849 - ``type {unsigned}``: EtherType or TPID.
3851 - ``vlan``: match 802.1Q/ad VLAN tag.
3853 - ``tci {unsigned}``: tag control information.
3854 - ``pcp {unsigned}``: priority code point.
3855 - ``dei {unsigned}``: drop eligible indicator.
3856 - ``vid {unsigned}``: VLAN identifier.
3857 - ``inner_type {unsigned}``: inner EtherType or TPID.
3859 - ``ipv4``: match IPv4 header.
3861 - ``tos {unsigned}``: type of service.
3862 - ``ttl {unsigned}``: time to live.
3863 - ``proto {unsigned}``: next protocol ID.
3864 - ``src {ipv4 address}``: source address.
3865 - ``dst {ipv4 address}``: destination address.
3867 - ``ipv6``: match IPv6 header.
3869 - ``tc {unsigned}``: traffic class.
3870 - ``flow {unsigned}``: flow label.
3871 - ``proto {unsigned}``: protocol (next header).
3872 - ``hop {unsigned}``: hop limit.
3873 - ``src {ipv6 address}``: source address.
3874 - ``dst {ipv6 address}``: destination address.
3876 - ``icmp``: match ICMP header.
3878 - ``type {unsigned}``: ICMP packet type.
3879 - ``code {unsigned}``: ICMP packet code.
3881 - ``udp``: match UDP header.
3883 - ``src {unsigned}``: UDP source port.
3884 - ``dst {unsigned}``: UDP destination port.
3886 - ``tcp``: match TCP header.
3888 - ``src {unsigned}``: TCP source port.
3889 - ``dst {unsigned}``: TCP destination port.
3891 - ``sctp``: match SCTP header.
3893 - ``src {unsigned}``: SCTP source port.
3894 - ``dst {unsigned}``: SCTP destination port.
3895 - ``tag {unsigned}``: validation tag.
3896 - ``cksum {unsigned}``: checksum.
3898 - ``vxlan``: match VXLAN header.
3900 - ``vni {unsigned}``: VXLAN identifier.
3902 - ``e_tag``: match IEEE 802.1BR E-Tag header.
3904 - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3906 - ``nvgre``: match NVGRE header.
3908 - ``tni {unsigned}``: virtual subnet ID.
3910 - ``mpls``: match MPLS header.
3912 - ``label {unsigned}``: MPLS label.
3914 - ``gre``: match GRE header.
3916 - ``protocol {unsigned}``: protocol type.
3918 - ``gre_key``: match GRE optional key field.
3920 - ``value {unsigned}``: key value.
3922 - ``fuzzy``: fuzzy pattern match, expect faster than default.
3924 - ``thresh {unsigned}``: accuracy threshold.
3926 - ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3928 - ``teid {unsigned}``: tunnel endpoint identifier.
3930 - ``geneve``: match GENEVE header.
3932 - ``vni {unsigned}``: virtual network identifier.
3933 - ``protocol {unsigned}``: protocol type.
3935 - ``vxlan-gpe``: match VXLAN-GPE header.
3937 - ``vni {unsigned}``: VXLAN-GPE identifier.
3939 - ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.
3941 - ``sha {MAC-48}``: sender hardware address.
3942 - ``spa {ipv4 address}``: sender IPv4 address.
3943 - ``tha {MAC-48}``: target hardware address.
3944 - ``tpa {ipv4 address}``: target IPv4 address.
3946 - ``ipv6_ext``: match presence of any IPv6 extension header.
3948 - ``next_hdr {unsigned}``: next header.
3950 - ``icmp6``: match any ICMPv6 header.
3952 - ``type {unsigned}``: ICMPv6 type.
3953 - ``code {unsigned}``: ICMPv6 code.
3955 - ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.
3957 - ``target_addr {ipv6 address}``: target address.
3959 - ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.
3961 - ``target_addr {ipv6 address}``: target address.
3963 - ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.
3965 - ``type {unsigned}``: ND option type.
3967 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet
3968 link-layer address option.
3970 - ``sla {MAC-48}``: source Ethernet LLA.
3972 - ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet
3973 link-layer address option.
3975 - ``tla {MAC-48}``: target Ethernet LLA.
3977 - ``meta``: match application specific metadata.
3979 - ``data {unsigned}``: metadata value.
3981 - ``gtp_psc``: match GTP PDU extension header with type 0x85.
3983 - ``pdu_type {unsigned}``: PDU type.
3984 - ``qfi {unsigned}``: QoS flow identifier.
3986 - ``pppoes``, ``pppoed``: match PPPoE header.
3988 - ``session_id {unsigned}``: session identifier.
3990 - ``pppoe_proto_id``: match PPPoE session protocol identifier.
3992 - ``proto_id {unsigned}``: PPP protocol identifier.
3994 - ``l2tpv3oip``: match L2TPv3 over IP header.
3996 - ``session_id {unsigned}``: L2TPv3 over IP session identifier.
3998 - ``ah``: match AH header.
4000 - ``spi {unsigned}``: security parameters index.
4002 - ``pfcp``: match PFCP header.
4004 - ``s_field {unsigned}``: S field.
4005 - ``seid {unsigned}``: session endpoint identifier.
4010 A list of actions starts after the ``actions`` token in the same fashion as
4011 `Matching pattern`_; actions are separated by ``/`` tokens and the list is
4012 terminated by a mandatory ``end`` action.
4014 Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
4015 rte_flow_action_type``).
4017 Dropping all incoming UDPv4 packets can be expressed as follows::
4019 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
4022 Several actions have configurable properties which must be specified when
4023 there is no valid default value. For example, ``queue`` requires a target
4026 This rule redirects incoming UDPv4 traffic to queue index 6::
4028 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
4029 actions queue index 6 / end
4031 While this one could be rejected by PMDs (unspecified queue index)::
4033 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
4036 As defined by *rte_flow*, the list is not ordered, all actions of a given
4037 rule are performed simultaneously. These are equivalent::
4039 queue index 6 / void / mark id 42 / end
4043 void / mark id 42 / queue index 6 / end
4045 All actions in a list should have different types, otherwise only the last
4046 action of a given type is taken into account::
4048 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
4052 drop / drop / drop / end # drop is performed only once
4056 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
4058 Considering they are performed simultaneously, opposite and overlapping
4059 actions can sometimes be combined when the end result is unambiguous::
4061 drop / queue index 6 / end # drop has no effect
4065 queue index 6 / rss queues 6 7 8 / end # queue has no effect
4069 drop / passthru / end # drop has no effect
4071 Note that PMDs may still refuse such combinations.
4076 This section lists supported actions and their attributes, if any.
4078 - ``end``: end list of actions.
4080 - ``void``: no-op action.
4082 - ``passthru``: let subsequent rule process matched packets.
4084 - ``jump``: redirect traffic to group on device.
4086 - ``group {unsigned}``: group to redirect to.
4088 - ``mark``: attach 32 bit value to packets.
4090 - ``id {unsigned}``: 32 bit value to return with packets.
4092 - ``flag``: flag packets.
4094 - ``queue``: assign packets to a given queue index.
4096 - ``index {unsigned}``: queue index to use.
4098 - ``drop``: drop packets (note: passthru has priority).
4100 - ``count``: enable counters for this rule.
4102 - ``rss``: spread packets among several queues.
4104 - ``func {hash function}``: RSS hash function to apply, allowed tokens are
4105 the same as `set_hash_global_config`_.
4107 - ``level {unsigned}``: encapsulation level for ``types``.
4109 - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed
4110 tokens are the same as `set_hash_input_set`_, except that an empty list
4111 does not disable RSS but instead requests unspecified "best-effort"
4114 - ``key {string}``: RSS hash key, overrides ``key_len``.
4116 - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in
4117 conjunction with ``key`` to pad or truncate it.
4119 - ``queues [{unsigned} [...]] end``: queue indices to use.
4121 - ``pf``: direct traffic to physical function.
4123 - ``vf``: direct traffic to a virtual function ID.
4125 - ``original {boolean}``: use original VF ID if possible.
4126 - ``id {unsigned}``: VF ID.
4128 - ``phy_port``: direct packets to physical port index.
4130 - ``original {boolean}``: use original port index if possible.
4131 - ``index {unsigned}``: physical port index.
4133 - ``port_id``: direct matching traffic to a given DPDK port ID.
4135 - ``original {boolean}``: use original DPDK port ID if possible.
4136 - ``id {unsigned}``: DPDK port ID.
4138 - ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``.
4140 - ``mpls_ttl``: MPLS TTL.
4142 - ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``.
4144 - ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``.
4146 - ``nw_ttl``: IP TTL.
4148 - ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``.
4150 - ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``.
4152 - ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``.
4154 - ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``.
4156 - ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``.
4158 - ``ethertype``: Ethertype.
4160 - ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``.
4162 - ``vlan_vid``: VLAN id.
4164 - ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``.
4166 - ``vlan_pcp``: VLAN priority.
4168 - ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``.
4170 - ``ethertype``: Ethertype.
4172 - ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``.
4174 - ``ethertype``: Ethertype.
4176 - ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration
4177 is done through `Config VXLAN Encap outer layers`_.
4179 - ``vxlan_decap``: Performs a decapsulation action by stripping all headers of
4180 the VXLAN tunnel network overlay from the matched flow.
4182 - ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration
4183 is done through `Config NVGRE Encap outer layers`_.
4185 - ``nvgre_decap``: Performs a decapsulation action by stripping all headers of
4186 the NVGRE tunnel network overlay from the matched flow.
4188 - ``l2_encap``: Performs a L2 encapsulation, L2 configuration
4189 is done through `Config L2 Encap`_.
4191 - ``l2_decap``: Performs a L2 decapsulation, L2 configuration
4192 is done through `Config L2 Decap`_.
4194 - ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer
4195 configuration is done through `Config MPLSoGRE Encap outer layers`_.
4197 - ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer
4198 configuration is done through `Config MPLSoGRE Decap outer layers`_.
4200 - ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer
4201 configuration is done through `Config MPLSoUDP Encap outer layers`_.
4203 - ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer
4204 configuration is done through `Config MPLSoUDP Decap outer layers`_.
4206 - ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header.
4208 - ``ipv4_addr``: New IPv4 source address.
4210 - ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4
4213 - ``ipv4_addr``: New IPv4 destination address.
4215 - ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header.
4217 - ``ipv6_addr``: New IPv6 source address.
4219 - ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6
4222 - ``ipv6_addr``: New IPv6 destination address.
4224 - ``set_tp_src``: Set a new source port number in the outermost TCP/UDP
4227 - ``port``: New TCP/UDP source port number.
4229 - ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
4232 - ``port``: New TCP/UDP destination port number.
4234 - ``mac_swap``: Swap the source and destination MAC addresses in the outermost
4237 - ``dec_ttl``: Performs a decrease TTL value action
4239 - ``set_ttl``: Set TTL value with specified value
4240 - ``ttl_value {unsigned}``: The new TTL value to be set
4242 - ``set_mac_src``: set source MAC address
4244 - ``mac_addr {MAC-48}``: new source MAC address
4246 - ``set_mac_dst``: set destination MAC address
4248 - ``mac_addr {MAC-48}``: new destination MAC address
4250 - ``inc_tcp_seq``: Increase sequence number in the outermost TCP header.
4252 - ``value {unsigned}``: Value to increase TCP sequence number by.
4254 - ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header.
4256 - ``value {unsigned}``: Value to decrease TCP sequence number by.
4258 - ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP header.
4260 - ``value {unsigned}``: Value to increase TCP acknowledgment number by.
4262 - ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP header.
4264 - ``value {unsigned}``: Value to decrease TCP acknowledgment number by.
4266 - ``set_ipv4_dscp``: Set IPv4 DSCP value with specified value
4268 - ``dscp_value {unsigned}``: The new DSCP value to be set
4270 - ``set_ipv6_dscp``: Set IPv6 DSCP value with specified value
4272 - ``dscp_value {unsigned}``: The new DSCP value to be set
4274 Destroying flow rules
4275 ~~~~~~~~~~~~~~~~~~~~~
4277 ``flow destroy`` destroys one or more rules from their rule ID (as returned
4278 by ``flow create``), this command calls ``rte_flow_destroy()`` as many
4279 times as necessary::
4281 flow destroy {port_id} rule {rule_id} [...]
4283 If successful, it will show::
4285 Flow rule #[...] destroyed
4287 It does not report anything for rule IDs that do not exist. The usual error
4288 message is shown when a rule cannot be destroyed::
4290 Caught error type [...] ([...]): [...]
4292 ``flow flush`` destroys all rules on a device and does not take extra
4293 arguments. It is bound to ``rte_flow_flush()``::
4295 flow flush {port_id}
4297 Any errors are reported as above.
4299 Creating several rules and destroying them::
4301 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4302 actions queue index 2 / end
4303 Flow rule #0 created
4304 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4305 actions queue index 3 / end
4306 Flow rule #1 created
4307 testpmd> flow destroy 0 rule 0 rule 1
4308 Flow rule #1 destroyed
4309 Flow rule #0 destroyed
4312 The same result can be achieved using ``flow flush``::
4314 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4315 actions queue index 2 / end
4316 Flow rule #0 created
4317 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4318 actions queue index 3 / end
4319 Flow rule #1 created
4320 testpmd> flow flush 0
4323 Non-existent rule IDs are ignored::
4325 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4326 actions queue index 2 / end
4327 Flow rule #0 created
4328 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4329 actions queue index 3 / end
4330 Flow rule #1 created
4331 testpmd> flow destroy 0 rule 42 rule 10 rule 2
4333 testpmd> flow destroy 0 rule 0
4334 Flow rule #0 destroyed
4340 ``flow query`` queries a specific action of a flow rule having that
4341 ability. Such actions collect information that can be reported using this
4342 command. It is bound to ``rte_flow_query()``::
4344 flow query {port_id} {rule_id} {action}
4346 If successful, it will display either the retrieved data for known actions
4347 or the following message::
4349 Cannot display result for action type [...] ([...])
4351 Otherwise, it will complain either that the rule does not exist or that some
4354 Flow rule #[...] not found
4358 Caught error type [...] ([...]): [...]
4360 Currently only the ``count`` action is supported. This action reports the
4361 number of packets that hit the flow rule and the total number of bytes. Its
4362 output has the following format::
4365 hits_set: [...] # whether "hits" contains a valid value
4366 bytes_set: [...] # whether "bytes" contains a valid value
4367 hits: [...] # number of packets
4368 bytes: [...] # number of bytes
4370 Querying counters for TCPv6 packets redirected to queue 6::
4372 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
4373 actions queue index 6 / count / end
4374 Flow rule #4 created
4375 testpmd> flow query 0 4 count
4386 ``flow list`` lists existing flow rules sorted by priority and optionally
4387 filtered by group identifiers::
4389 flow list {port_id} [group {group_id}] [...]
4391 This command only fails with the following message if the device does not
4396 Output consists of a header line followed by a short description of each
4397 flow rule, one per line. There is no output at all when no flow rules are
4398 configured on the device::
4400 ID Group Prio Attr Rule
4401 [...] [...] [...] [...] [...]
4403 ``Attr`` column flags:
4405 - ``i`` for ``ingress``.
4406 - ``e`` for ``egress``.
4408 Creating several flow rules and listing them::
4410 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4411 actions queue index 6 / end
4412 Flow rule #0 created
4413 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4414 actions queue index 2 / end
4415 Flow rule #1 created
4416 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
4417 actions rss queues 6 7 8 end / end
4418 Flow rule #2 created
4419 testpmd> flow list 0
4420 ID Group Prio Attr Rule
4421 0 0 0 i- ETH IPV4 => QUEUE
4422 1 0 0 i- ETH IPV6 => QUEUE
4423 2 0 5 i- ETH IPV4 UDP => RSS
4426 Rules are sorted by priority (i.e. group ID first, then priority level)::
4428 testpmd> flow list 1
4429 ID Group Prio Attr Rule
4430 0 0 0 i- ETH => COUNT
4431 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4432 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4433 1 24 0 i- ETH IPV4 UDP => QUEUE
4434 4 24 10 i- ETH IPV4 TCP => DROP
4435 3 24 20 i- ETH IPV4 => DROP
4436 2 24 42 i- ETH IPV4 UDP => QUEUE
4437 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4440 Output can be limited to specific groups::
4442 testpmd> flow list 1 group 0 group 63
4443 ID Group Prio Attr Rule
4444 0 0 0 i- ETH => COUNT
4445 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4446 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4447 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4450 Toggling isolated mode
4451 ~~~~~~~~~~~~~~~~~~~~~~
4453 ``flow isolate`` can be used to tell the underlying PMD that ingress traffic
4454 must only be injected from the defined flow rules; that no default traffic
4455 is expected outside those rules and the driver is free to assign more
4456 resources to handle them. It is bound to ``rte_flow_isolate()``::
4458 flow isolate {port_id} {boolean}
4460 If successful, enabling or disabling isolated mode shows either::
4462 Ingress traffic on port [...]
4463 is now restricted to the defined flow rules
4467 Ingress traffic on port [...]
4468 is not restricted anymore to the defined flow rules
4470 Otherwise, in case of error::
4472 Caught error type [...] ([...]): [...]
4474 Mainly due to its side effects, PMDs supporting this mode may not have the
4475 ability to toggle it more than once without reinitializing affected ports
4476 first (e.g. by exiting testpmd).
4478 Enabling isolated mode::
4480 testpmd> flow isolate 0 true
4481 Ingress traffic on port 0 is now restricted to the defined flow rules
4484 Disabling isolated mode::
4486 testpmd> flow isolate 0 false
4487 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
4490 Dumping HW internal information
4491 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4493 ``flow dump`` dumps the hardware's internal representation information of
4494 all flows. It is bound to ``rte_flow_dev_dump()``::
4496 flow dump {port_id} {output_file}
4498 If successful, it will show::
4502 Otherwise, it will complain error occurred::
4504 Caught error type [...] ([...]): [...]
4506 Listing and destroying aged flow rules
4507 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4509 ``flow aged`` simply lists aged flow rules be get from api ``rte_flow_get_aged_flows``,
4510 and ``destroy`` parameter can be used to destroy those flow rules in PMD.
4512 flow aged {port_id} [destroy]
4514 Listing current aged flow rules::
4516 testpmd> flow aged 0
4517 Port 0 total aged flows: 0
4518 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.14 / end
4519 actions age timeout 5 / queue index 0 / end
4520 Flow rule #0 created
4521 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.15 / end
4522 actions age timeout 4 / queue index 0 / end
4523 Flow rule #1 created
4524 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.16 / end
4525 actions age timeout 2 / queue index 0 / end
4526 Flow rule #2 created
4527 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.17 / end
4528 actions age timeout 3 / queue index 0 / end
4529 Flow rule #3 created
4532 Aged Rules are simply list as command ``flow list {port_id}``, but strip the detail rule
4533 information, all the aged flows are sorted by the longest timeout time. For example, if
4534 those rules be configured in the same time, ID 2 will be the first aged out rule, the next
4535 will be ID 3, ID 1, ID 0::
4537 testpmd> flow aged 0
4538 Port 0 total aged flows: 4
4545 If attach ``destroy`` parameter, the command will destroy all the list aged flow rules.
4547 testpmd> flow aged 0 destroy
4548 Port 0 total aged flows: 4
4555 Flow rule #2 destroyed
4556 Flow rule #3 destroyed
4557 Flow rule #1 destroyed
4558 Flow rule #0 destroyed
4559 4 flows be destroyed
4560 testpmd> flow aged 0
4561 Port 0 total aged flows: 0
4564 Sample QinQ flow rules
4565 ~~~~~~~~~~~~~~~~~~~~~~
4567 Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
4569 testpmd> port stop 0
4570 testpmd> vlan set qinq_strip on 0
4572 The above command sets the inner and outer TPID's to 0x8100.
4574 To change the TPID's the following commands should be used::
4576 testpmd> vlan set outer tpid 0xa100 0
4577 testpmd> vlan set inner tpid 0x9100 0
4578 testpmd> port start 0
4580 Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
4584 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
4585 vlan tci is 456 / end actions vf id 1 / queue index 0 / end
4586 Flow rule #0 validated
4588 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
4589 vlan tci is 456 / end actions vf id 123 / queue index 0 / end
4590 Flow rule #0 created
4592 testpmd> flow list 0
4593 ID Group Prio Attr Rule
4594 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4596 Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
4600 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
4601 vlan tci is 654 / end actions pf / queue index 0 / end
4602 Flow rule #1 validated
4604 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
4605 vlan tci is 654 / end actions pf / queue index 1 / end
4606 Flow rule #1 created
4608 testpmd> flow list 0
4609 ID Group Prio Attr Rule
4610 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4611 1 0 0 i- ETH VLAN VLAN=>PF QUEUE
4613 Sample VXLAN encapsulation rule
4614 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4616 VXLAN encapsulation outer layer has default value pre-configured in testpmd
4617 source code, those can be changed by using the following commands
4619 IPv4 VXLAN outer header::
4621 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1
4622 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4623 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4626 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src
4627 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4628 eth-dst 22:22:22:22:22:22
4629 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4632 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0
4633 ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4634 eth-dst 22:22:22:22:22:22
4635 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4638 IPv6 VXLAN outer header::
4640 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1
4641 ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4642 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4645 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4646 ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11
4647 eth-dst 22:22:22:22:22:22
4648 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4651 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4652 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4653 eth-dst 22:22:22:22:22:22
4654 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4657 Sample NVGRE encapsulation rule
4658 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4660 NVGRE encapsulation outer layer has default value pre-configured in testpmd
4661 source code, those can be changed by using the following commands
4663 IPv4 NVGRE outer header::
4665 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1
4666 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4667 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4670 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1
4671 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4672 eth-dst 22:22:22:22:22:22
4673 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4676 IPv6 NVGRE outer header::
4678 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4679 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4680 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4683 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4684 vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4685 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4688 Sample L2 encapsulation rule
4689 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4691 L2 encapsulation has default value pre-configured in testpmd
4692 source code, those can be changed by using the following commands
4696 testpmd> set l2_encap ip-version ipv4
4697 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4698 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4699 mplsoudp_decap / l2_encap / end
4701 L2 with VXLAN header::
4703 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34
4704 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4705 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4706 mplsoudp_decap / l2_encap / end
4708 Sample L2 decapsulation rule
4709 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4711 L2 decapsulation has default value pre-configured in testpmd
4712 source code, those can be changed by using the following commands
4716 testpmd> set l2_decap
4717 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap /
4720 L2 with VXLAN header::
4722 testpmd> set l2_encap-with-vlan
4723 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap /
4726 Sample MPLSoGRE encapsulation rule
4727 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4729 MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd
4730 source code, those can be changed by using the following commands
4732 IPv4 MPLSoGRE outer header::
4734 testpmd> set mplsogre_encap ip-version ipv4 label 4
4735 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4736 eth-dst 22:22:22:22:22:22
4737 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4738 mplsogre_encap / end
4740 IPv4 MPLSoGRE with VLAN outer header::
4742 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4
4743 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4744 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4745 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4746 mplsogre_encap / end
4748 IPv6 MPLSoGRE outer header::
4750 testpmd> set mplsogre_encap ip-version ipv6 mask 4
4751 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4752 eth-dst 22:22:22:22:22:22
4753 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4754 mplsogre_encap / end
4756 IPv6 MPLSoGRE with VLAN outer header::
4758 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4
4759 ip-src ::1 ip-dst ::2222 vlan-tci 34
4760 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4761 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4762 mplsogre_encap / end
4764 Sample MPLSoGRE decapsulation rule
4765 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4767 MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd
4768 source code, those can be changed by using the following commands
4770 IPv4 MPLSoGRE outer header::
4772 testpmd> set mplsogre_decap ip-version ipv4
4773 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions
4774 mplsogre_decap / l2_encap / end
4776 IPv4 MPLSoGRE with VLAN outer header::
4778 testpmd> set mplsogre_decap-with-vlan ip-version ipv4
4779 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end
4780 actions mplsogre_decap / l2_encap / end
4782 IPv6 MPLSoGRE outer header::
4784 testpmd> set mplsogre_decap ip-version ipv6
4785 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end
4786 actions mplsogre_decap / l2_encap / end
4788 IPv6 MPLSoGRE with VLAN outer header::
4790 testpmd> set mplsogre_decap-with-vlan ip-version ipv6
4791 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end
4792 actions mplsogre_decap / l2_encap / end
4794 Sample MPLSoUDP encapsulation rule
4795 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4797 MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd
4798 source code, those can be changed by using the following commands
4800 IPv4 MPLSoUDP outer header::
4802 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10
4803 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4804 eth-dst 22:22:22:22:22:22
4805 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4806 mplsoudp_encap / end
4808 IPv4 MPLSoUDP with VLAN outer header::
4810 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5
4811 udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4812 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4813 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4814 mplsoudp_encap / end
4816 IPv6 MPLSoUDP outer header::
4818 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10
4819 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4820 eth-dst 22:22:22:22:22:22
4821 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4822 mplsoudp_encap / end
4824 IPv6 MPLSoUDP with VLAN outer header::
4826 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5
4827 udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34
4828 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4829 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4830 mplsoudp_encap / end
4832 Sample MPLSoUDP decapsulation rule
4833 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4835 MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd
4836 source code, those can be changed by using the following commands
4838 IPv4 MPLSoUDP outer header::
4840 testpmd> set mplsoudp_decap ip-version ipv4
4841 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4842 mplsoudp_decap / l2_encap / end
4844 IPv4 MPLSoUDP with VLAN outer header::
4846 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4
4847 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end
4848 actions mplsoudp_decap / l2_encap / end
4850 IPv6 MPLSoUDP outer header::
4852 testpmd> set mplsoudp_decap ip-version ipv6
4853 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end
4854 actions mplsoudp_decap / l2_encap / end
4856 IPv6 MPLSoUDP with VLAN outer header::
4858 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6
4859 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end
4860 actions mplsoudp_decap / l2_encap / end
4862 Sample Raw encapsulation rule
4863 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4865 Raw encapsulation configuration can be set by the following commands
4867 Eecapsulating VxLAN::
4869 testpmd> set raw_encap 4 eth src is 10:11:22:33:44:55 / vlan tci is 1
4870 inner_type is 0x0800 / ipv4 / udp dst is 4789 / vxlan vni
4872 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
4873 raw_encap index 4 / end
4875 Sample Raw decapsulation rule
4876 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4878 Raw decapsulation configuration can be set by the following commands
4880 Decapsulating VxLAN::
4882 testpmd> set raw_decap eth / ipv4 / udp / vxlan / end_set
4883 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 /
4884 end actions raw_decap / queue index 0 / end
4889 ESP rules can be created by the following commands::
4891 testpmd> flow create 0 ingress pattern eth / ipv4 / esp spi is 1 / end actions
4893 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp spi is 1 / end
4894 actions queue index 3 / end
4895 testpmd> flow create 0 ingress pattern eth / ipv6 / esp spi is 1 / end actions
4897 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp spi is 1 / end
4898 actions queue index 3 / end
4903 AH rules can be created by the following commands::
4905 testpmd> flow create 0 ingress pattern eth / ipv4 / ah spi is 1 / end actions
4907 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / ah spi is 1 / end
4908 actions queue index 3 / end
4909 testpmd> flow create 0 ingress pattern eth / ipv6 / ah spi is 1 / end actions
4911 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / ah spi is 1 / end
4912 actions queue index 3 / end
4917 PFCP rules can be created by the following commands(s_field need to be 1
4920 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 0 / end
4921 actions queue index 3 / end
4922 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 1
4923 seid is 1 / end actions queue index 3 / end
4924 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 0 / end
4925 actions queue index 3 / end
4926 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 1
4927 seid is 1 / end actions queue index 3 / end
4932 The following sections show functions to load/unload eBPF based filters.
4937 Load an eBPF program as a callback for particular RX/TX queue::
4939 testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename)
4941 The available load-flags are:
4943 * ``J``: use JIT generated native code, otherwise BPF interpreter will be used.
4945 * ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data.
4951 You'll need clang v3.7 or above to build bpf program you'd like to load
4955 .. code-block:: console
4958 clang -O2 -target bpf -c t1.c
4960 Then to load (and JIT compile) t1.o at RX queue 0, port 1:
4962 .. code-block:: console
4964 testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o
4966 To load (not JITed) t1.o at TX queue 0, port 0:
4968 .. code-block:: console
4970 testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o
4975 Unload previously loaded eBPF program for particular RX/TX queue::
4977 testpmd> bpf-unload rx|tx (portid) (queueid)
4979 For example to unload BPF filter from TX queue 0, port 0:
4981 .. code-block:: console
4983 testpmd> bpf-unload tx 0 0