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|txtimes)
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.
281 * ``txtimes``: Burst time pattern for Tx only mode.
285 .. code-block:: console
287 testpmd> show config rxtx
289 io packet forwarding - CRC stripping disabled - packets/burst=16
290 nb forwarding cores=2 - nb forwarding ports=1
291 RX queues=1 - RX desc=128 - RX free threshold=0
292 RX threshold registers: pthresh=8 hthresh=8 wthresh=4
293 TX queues=1 - TX desc=512 - TX free threshold=0
294 TX threshold registers: pthresh=36 hthresh=0 wthresh=0
295 TX RS bit threshold=0 - TXQ flags=0x0
300 Set the packet forwarding mode::
302 testpmd> set fwd (io|mac|macswap|flowgen| \
303 rxonly|txonly|csum|icmpecho|noisy) (""|retry)
305 ``retry`` can be specified for forwarding engines except ``rx_only``.
307 The available information categories are:
309 * ``io``: Forwards packets "as-is" in I/O mode.
310 This is the fastest possible forwarding operation as it does not access packets data.
311 This is the default mode.
313 * ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
314 Default application behavior is to set source Ethernet address to that of the transmitting interface, and destination
315 address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
316 'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
318 * ``macswap``: MAC swap forwarding mode.
319 Swaps the source and the destination Ethernet addresses of packets before forwarding them.
321 * ``flowgen``: Multi-flow generation mode.
322 Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
324 * ``rxonly``: Receives packets but doesn't transmit them.
326 * ``txonly``: Generates and transmits packets without receiving any.
328 * ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
330 * ``icmpecho``: Receives a burst of packets, lookup for ICMP echo requests and, if any, send back ICMP echo replies.
332 * ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
334 * ``noisy``: Noisy neighbor simulation.
335 Simulate more realistic behavior of a guest machine engaged in receiving
336 and sending packets performing Virtual Network Function (VNF).
340 testpmd> set fwd rxonly
342 Set rxonly packet forwarding mode
348 When running, forwarding engines maintain statistics from the time they have been started.
349 Example for the io forwarding engine, with some packet drops on the tx side::
351 testpmd> show fwd stats all
353 ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 1/Queue= 0 -------
354 RX-packets: 274293770 TX-packets: 274293642 TX-dropped: 128
356 ------- Forward Stats for RX Port= 1/Queue= 0 -> TX Port= 0/Queue= 0 -------
357 RX-packets: 274301850 TX-packets: 274301850 TX-dropped: 0
359 ---------------------- Forward statistics for port 0 ----------------------
360 RX-packets: 274293802 RX-dropped: 0 RX-total: 274293802
361 TX-packets: 274301862 TX-dropped: 0 TX-total: 274301862
362 ----------------------------------------------------------------------------
364 ---------------------- Forward statistics for port 1 ----------------------
365 RX-packets: 274301894 RX-dropped: 0 RX-total: 274301894
366 TX-packets: 274293706 TX-dropped: 128 TX-total: 274293834
367 ----------------------------------------------------------------------------
369 +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
370 RX-packets: 548595696 RX-dropped: 0 RX-total: 548595696
371 TX-packets: 548595568 TX-dropped: 128 TX-total: 548595696
372 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
376 Enabling CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES appends "CPU cycles/packet" stats, like:
378 CPU cycles/packet=xx.dd (total cycles=xxxx / total RX packets=xxxx) at xxx MHz clock
383 Clear the forwarding engines statistics::
385 testpmd> clear fwd stats all
390 Display an RX descriptor for a port RX queue::
392 testpmd> read rxd (port_id) (queue_id) (rxd_id)
396 testpmd> read rxd 0 0 4
397 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
402 Display a TX descriptor for a port TX queue::
404 testpmd> read txd (port_id) (queue_id) (txd_id)
408 testpmd> read txd 0 0 4
409 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
414 Get loaded dynamic device personalization (DDP) package info list::
416 testpmd> ddp get list (port_id)
421 Display information about dynamic device personalization (DDP) profile::
423 testpmd> ddp get info (profile_path)
428 Display VF statistics::
430 testpmd> show vf stats (port_id) (vf_id)
435 Reset VF statistics::
437 testpmd> clear vf stats (port_id) (vf_id)
439 show port pctype mapping
440 ~~~~~~~~~~~~~~~~~~~~~~~~
442 List all items from the pctype mapping table::
444 testpmd> show port (port_id) pctype mapping
446 show rx offloading capabilities
447 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
449 List all per queue and per port Rx offloading capabilities of a port::
451 testpmd> show port (port_id) rx_offload capabilities
453 show rx offloading configuration
454 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
456 List port level and all queue level Rx offloading configuration::
458 testpmd> show port (port_id) rx_offload configuration
460 show tx offloading capabilities
461 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
463 List all per queue and per port Tx offloading capabilities of a port::
465 testpmd> show port (port_id) tx_offload capabilities
467 show tx offloading configuration
468 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
470 List port level and all queue level Tx offloading configuration::
472 testpmd> show port (port_id) tx_offload configuration
474 show tx metadata setting
475 ~~~~~~~~~~~~~~~~~~~~~~~~
477 Show Tx metadata value set for a specific port::
479 testpmd> show port (port_id) tx_metadata
481 show port supported ptypes
482 ~~~~~~~~~~~~~~~~~~~~~~~~~~
484 Show ptypes supported for a specific port::
486 testpmd> show port (port_id) ptypes
488 set port supported ptypes
489 ~~~~~~~~~~~~~~~~~~~~~~~~~
491 set packet types classification for a specific port::
493 testpmd> set port (port_id) ptypes_mask (mask)
495 show port mac addresses info
496 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
498 Show mac addresses added for a specific port::
500 testpmd> show port (port_id) macs
503 show port multicast mac addresses info
504 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
506 Show multicast mac addresses added for a specific port::
508 testpmd> show port (port_id) mcast_macs
513 Show general information about devices probed::
515 testpmd> show device info (<identifier>|all)
519 .. code-block:: console
521 testpmd> show device info net_pcap0
523 ********************* Infos for device net_pcap0 *********************
525 Driver name: net_pcap
526 Devargs: iface=enP2p6s0,phy_mac=1
527 Connect to socket: -1
530 MAC address: 1E:37:93:28:04:B8
531 Device name: net_pcap0
536 Dumps all physical memory segment layouts::
538 testpmd> dump_physmem
543 Dumps the layout of all memory zones::
545 testpmd> dump_memzone
550 Dumps the memory usage of all sockets::
552 testpmd> dump_socket_mem
557 Dumps the size of all memory structures::
559 testpmd> dump_struct_sizes
564 Dumps the status of all or specific element in DPDK rings::
566 testpmd> dump_ring [ring_name]
571 Dumps the statistics of all or specific memory pool::
573 testpmd> dump_mempool [mempool_name]
578 Dumps the user device list::
580 testpmd> dump_devargs
585 Dumps the log level for all the dpdk modules::
587 testpmd> dump_log_types
589 show (raw_encap|raw_decap)
590 ~~~~~~~~~~~~~~~~~~~~~~~~~~
592 Display content of raw_encap/raw_decap buffers in hex::
594 testpmd> show <raw_encap|raw_decap> <index>
595 testpmd> show <raw_encap|raw_decap> all
599 testpmd> show raw_encap 6
601 index: 6 at [0x1c565b0], len=50
602 00000000: 00 00 00 00 00 00 16 26 36 46 56 66 08 00 45 00 | .......&6FVf..E.
603 00000010: 00 00 00 00 00 00 00 11 00 00 C0 A8 01 06 C0 A8 | ................
604 00000020: 03 06 00 00 00 FA 00 00 00 00 08 00 00 00 00 00 | ................
608 Configuration Functions
609 -----------------------
611 The testpmd application can be configured from the runtime as well as from the command-line.
613 This section details the available configuration functions that are available.
617 Configuration changes only become active when forwarding is started/restarted.
622 Reset forwarding to the default configuration::
629 Set the debug verbosity level::
631 testpmd> set verbose (level)
633 Available levels are as following:
635 * ``0`` silent except for error.
636 * ``1`` fully verbose except for Tx packets.
637 * ``2`` fully verbose except for Rx packets.
638 * ``> 2`` fully verbose.
643 Set the log level for a log type::
645 testpmd> set log global|(type) (level)
649 * ``type`` is the log name.
651 * ``level`` is the log level.
653 For example, to change the global log level::
655 testpmd> set log global (level)
657 Regexes can also be used for type. To change log level of user1, user2 and user3::
659 testpmd> set log user[1-3] (level)
664 Set the number of ports used by the application:
668 This is equivalent to the ``--nb-ports`` command-line option.
673 Set the number of cores used by the application::
675 testpmd> set nbcore (num)
677 This is equivalent to the ``--nb-cores`` command-line option.
681 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
686 Set the forwarding cores hexadecimal mask::
688 testpmd> set coremask (mask)
690 This is equivalent to the ``--coremask`` command-line option.
694 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
699 Set the forwarding ports hexadecimal mask::
701 testpmd> set portmask (mask)
703 This is equivalent to the ``--portmask`` command-line option.
708 Set number of packets per burst::
710 testpmd> set burst (num)
712 This is equivalent to the ``--burst command-line`` option.
714 When retry is enabled, the transmit delay time and number of retries can also be set::
716 testpmd> set burst tx delay (microseconds) retry (num)
721 Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
723 testpmd> set txpkts (x[,y]*)
725 Where x[,y]* represents a CSV list of values, without white space.
730 Configure the timing burst pattern for Tx only mode. This command enables
731 the packet send scheduling on dynamic timestamp mbuf field and configures
732 timing pattern in Tx only mode. In this mode, if scheduling is enabled
733 application provides timestamps in the packets being sent. It is possible
734 to configure delay (in unspecified device clock units) between bursts
735 and between the packets within the burst::
737 testpmd> set txtimes (inter),(intra)
741 * ``inter`` is the delay between the bursts in the device clock units.
742 If ``intra`` is zero, this is the time between the beginnings of the
743 first packets in the neighbour bursts, if ``intra`` is not zero,
744 ``inter`` specifies the time between the beginning of the first packet
745 of the current burst and the beginning of the last packet of the
746 previous burst. If ``inter`` parameter is zero the send scheduling
747 on timestamps is disabled (default).
749 * ``intra`` is the delay between the packets within the burst specified
750 in the device clock units. The number of packets in the burst is defined
751 by regular burst setting. If ``intra`` parameter is zero no timestamps
752 provided in the packets excepting the first one in the burst.
754 As the result the bursts of packet will be transmitted with specific
755 delays between the packets within the burst and specific delay between
756 the bursts. The rte_eth_read_clock() must be supported by the device(s)
757 and is supposed to be engaged to get the current device clock value
758 and provide the reference for the timestamps. If there is no supported
759 rte_eth_read_clock() there will be no send scheduling provided on the port.
764 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
766 testpmd> set txsplit (off|on|rand)
770 * ``off`` disable packet copy & split for CSUM mode.
772 * ``on`` split outgoing packet into multiple segments. Size of each segment
773 and number of segments per packet is determined by ``set txpkts`` command
776 * ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
781 Set the list of forwarding cores::
783 testpmd> set corelist (x[,y]*)
785 For example, to change the forwarding cores:
787 .. code-block:: console
789 testpmd> set corelist 3,1
790 testpmd> show config fwd
792 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
793 Logical Core 3 (socket 0) forwards packets on 1 streams:
794 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
795 Logical Core 1 (socket 0) forwards packets on 1 streams:
796 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
800 The cores are used in the same order as specified on the command line.
805 Set the list of forwarding ports::
807 testpmd> set portlist (x[,y]*)
809 For example, to change the port forwarding:
811 .. code-block:: console
813 testpmd> set portlist 0,2,1,3
814 testpmd> show config fwd
816 io packet forwarding - ports=4 - cores=1 - streams=4
817 Logical Core 3 (socket 0) forwards packets on 4 streams:
818 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
819 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
820 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
821 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
826 Select how to retrieve new ports created after "port attach" command::
828 testpmd> set port setup on (iterator|event)
830 For each new port, a setup is done.
831 It will find the probed ports via RTE_ETH_FOREACH_MATCHING_DEV loop
832 in iterator mode, or via RTE_ETH_EVENT_NEW in event mode.
837 Enable/disable tx loopback::
839 testpmd> set tx loopback (port_id) (on|off)
844 set drop enable bit for all queues::
846 testpmd> set all queues drop (port_id) (on|off)
848 set split drop enable (for VF)
849 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
851 set split drop enable bit for VF from PF::
853 testpmd> set vf split drop (port_id) (vf_id) (on|off)
855 set mac antispoof (for VF)
856 ~~~~~~~~~~~~~~~~~~~~~~~~~~
858 Set mac antispoof for a VF from the PF::
860 testpmd> set vf mac antispoof (port_id) (vf_id) (on|off)
865 Enable/disable MACsec offload::
867 testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
868 testpmd> set macsec offload (port_id) off
873 Configure MACsec secure connection (SC)::
875 testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
879 The pi argument is ignored for tx.
880 Check the NIC Datasheet for hardware limits.
885 Configure MACsec secure association (SA)::
887 testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
891 The IDX value must be 0 or 1.
892 Check the NIC Datasheet for hardware limits.
894 set broadcast mode (for VF)
895 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
897 Set broadcast mode for a VF from the PF::
899 testpmd> set vf broadcast (port_id) (vf_id) (on|off)
904 Set the VLAN strip for a queue on a port::
906 testpmd> vlan set stripq (on|off) (port_id,queue_id)
908 vlan set stripq (for VF)
909 ~~~~~~~~~~~~~~~~~~~~~~~~
911 Set VLAN strip for all queues in a pool for a VF from the PF::
913 testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
915 vlan set insert (for VF)
916 ~~~~~~~~~~~~~~~~~~~~~~~~
918 Set VLAN insert for a VF from the PF::
920 testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
922 vlan set tag (for VF)
923 ~~~~~~~~~~~~~~~~~~~~~
925 Set VLAN tag for a VF from the PF::
927 testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
929 vlan set antispoof (for VF)
930 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
932 Set VLAN antispoof for a VF from the PF::
934 testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
936 vlan set (strip|filter|qinq_strip|extend)
937 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
938 Set the VLAN strip/filter/QinQ strip/extend on for a port::
940 testpmd> vlan set (strip|filter|qinq_strip|extend) (on|off) (port_id)
945 Set the inner or outer VLAN TPID for packet filtering on a port::
947 testpmd> vlan set (inner|outer) tpid (value) (port_id)
951 TPID value must be a 16-bit number (value <= 65536).
956 Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
958 testpmd> rx_vlan add (vlan_id|all) (port_id)
962 VLAN filter must be set on that port. VLAN ID < 4096.
963 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
964 in VFTA table. This is important if enabling all vlan_ids.
969 Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
971 testpmd> rx_vlan rm (vlan_id|all) (port_id)
976 Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
978 testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
983 Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
985 testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
990 Add a tunnel filter on a port::
992 testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
993 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\
994 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
996 The available information categories are:
998 * ``vxlan``: Set tunnel type as VXLAN.
1000 * ``nvgre``: Set tunnel type as NVGRE.
1002 * ``ipingre``: Set tunnel type as IP-in-GRE.
1004 * ``vxlan-gpe``: Set tunnel type as VXLAN-GPE
1006 * ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
1008 * ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
1010 * ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
1012 * ``imac``: Set filter type as Inner MAC.
1014 * ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
1016 * ``oip``: Set filter type as Outer IP.
1018 * ``iip``: Set filter type as Inner IP.
1022 testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
1023 192.168.2.2 0 ipingre oip 1 1
1025 Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
1027 tunnel_filter remove
1028 ~~~~~~~~~~~~~~~~~~~~
1030 Remove a tunnel filter on a port::
1032 testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
1033 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\
1034 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
1039 Add an UDP port for VXLAN packet filter on a port::
1041 testpmd> rx_vxlan_port add (udp_port) (port_id)
1043 rx_vxlan_port remove
1044 ~~~~~~~~~~~~~~~~~~~~
1046 Remove an UDP port for VXLAN packet filter on a port::
1048 testpmd> rx_vxlan_port rm (udp_port) (port_id)
1053 Set hardware insertion of VLAN IDs in packets sent on a port::
1055 testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
1057 For example, set a single VLAN ID (5) insertion on port 0::
1061 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
1069 Set port based hardware insertion of VLAN ID in packets sent on a port::
1071 testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
1076 Disable hardware insertion of a VLAN header in packets sent on a port::
1078 testpmd> tx_vlan reset (port_id)
1083 Select hardware or software calculation of the checksum when
1084 transmitting a packet using the ``csum`` forwarding engine::
1086 testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)
1090 * ``ip|udp|tcp|sctp`` always relate to the inner layer.
1092 * ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
1093 as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
1094 supported). See also the ``csum parse-tunnel`` command.
1096 * ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized
1097 as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are
1098 supported). See also the ``csum parse-tunnel`` command.
1102 Check the NIC Datasheet for hardware limits.
1107 Set RSS queue region span on a port::
1109 testpmd> set port (port_id) queue-region region_id (value) \
1110 queue_start_index (value) queue_num (value)
1112 Set flowtype mapping on a RSS queue region on a port::
1114 testpmd> set port (port_id) queue-region region_id (value) flowtype (value)
1118 * For the flowtype(pctype) of packet,the specific index for each type has
1119 been defined in file i40e_type.h as enum i40e_filter_pctype.
1121 Set user priority mapping on a RSS queue region on a port::
1123 testpmd> set port (port_id) queue-region UP (value) region_id (value)
1125 Flush all queue region related configuration on a port::
1127 testpmd> set port (port_id) queue-region flush (on|off)
1131 * ``on``: is just an enable function which server for other configuration,
1132 it is for all configuration about queue region from up layer,
1133 at first will only keep in DPDK software stored in driver,
1134 only after "flush on", it commit all configuration to HW.
1136 * ``"off``: is just clean all configuration about queue region just now,
1137 and restore all to DPDK i40e driver default config when start up.
1139 Show all queue region related configuration info on a port::
1141 testpmd> show port (port_id) queue-region
1145 Queue region only support on PF by now, so these command is
1146 only for configuration of queue region on PF port.
1151 Define how tunneled packets should be handled by the csum forward
1154 testpmd> csum parse-tunnel (on|off) (tx_port_id)
1156 If enabled, the csum forward engine will try to recognize supported
1157 tunnel headers (vxlan, gre, ipip).
1159 If disabled, treat tunnel packets as non-tunneled packets (a inner
1160 header is handled as a packet payload).
1164 The port argument is the TX port like in the ``csum set`` command.
1168 Consider a packet in packet like the following::
1170 eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
1172 * If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1173 command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
1174 ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``).
1176 * If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1177 command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
1182 Display tx checksum offload configuration::
1184 testpmd> csum show (port_id)
1189 Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
1191 testpmd> tso set (segsize) (port_id)
1195 Check the NIC datasheet for hardware limits.
1200 Display the status of TCP Segmentation Offload::
1202 testpmd> tso show (port_id)
1207 Set tso segment size of tunneled packets for a port in csum engine::
1209 testpmd> tunnel_tso set (tso_segsz) (port_id)
1214 Display the status of tunneled TCP Segmentation Offload for a port::
1216 testpmd> tunnel_tso show (port_id)
1221 Enable or disable GRO in ``csum`` forwarding engine::
1223 testpmd> set port <port_id> gro on|off
1225 If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
1226 packets received from the given port.
1228 If disabled, packets received from the given port won't be performed
1229 GRO. By default, GRO is disabled for all ports.
1233 When enable GRO for a port, TCP/IPv4 packets received from the port
1234 will be performed GRO. After GRO, all merged packets have bad
1235 checksums, since the GRO library doesn't re-calculate checksums for
1236 the merged packets. Therefore, if users want the merged packets to
1237 have correct checksums, please select HW IP checksum calculation and
1238 HW TCP checksum calculation for the port which the merged packets are
1244 Display GRO configuration for a given port::
1246 testpmd> show port <port_id> gro
1251 Set the cycle to flush the GROed packets from reassembly tables::
1253 testpmd> set gro flush <cycles>
1255 When enable GRO, the csum forwarding engine performs GRO on received
1256 packets, and the GROed packets are stored in reassembly tables. Users
1257 can use this command to determine when the GROed packets are flushed
1258 from the reassembly tables.
1260 The ``cycles`` is measured in GRO operation times. The csum forwarding
1261 engine flushes the GROed packets from the tables every ``cycles`` GRO
1264 By default, the value of ``cycles`` is 1, which means flush GROed packets
1265 from the reassembly tables as soon as one GRO operation finishes. The value
1266 of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1268 Please note that the large value of ``cycles`` may cause the poor TCP/IP
1269 stack performance. Because the GROed packets are delayed to arrive the
1270 stack, thus causing more duplicated ACKs and TCP retransmissions.
1275 Toggle per-port GSO support in ``csum`` forwarding engine::
1277 testpmd> set port <port_id> gso on|off
1279 If enabled, the csum forwarding engine will perform GSO on supported IPv4
1280 packets, transmitted on the given port.
1282 If disabled, packets transmitted on the given port will not undergo GSO.
1283 By default, GSO is disabled for all ports.
1287 When GSO is enabled on a port, supported IPv4 packets transmitted on that
1288 port undergo GSO. Afterwards, the segmented packets are represented by
1289 multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1290 of checksums for GSO'd segments in SW. As a result, if users want correct
1291 checksums in GSO segments, they should enable HW checksum calculation for
1294 For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1295 by setting the following options in the csum forwarding engine:
1297 testpmd> csum set outer_ip hw <port_id>
1299 testpmd> csum set ip hw <port_id>
1301 testpmd> csum set tcp hw <port_id>
1303 UDP GSO is the same as IP fragmentation, which treats the UDP header
1304 as the payload and does not modify it during segmentation. That is,
1305 after UDP GSO, only the first output fragment has the original UDP
1306 header. Therefore, users need to enable HW IP checksum calculation
1307 and SW UDP checksum calculation for GSO-enabled ports, if they want
1308 correct checksums for UDP/IPv4 packets.
1313 Set the maximum GSO segment size (measured in bytes), which includes the
1314 packet header and the packet payload for GSO-enabled ports (global)::
1316 testpmd> set gso segsz <length>
1321 Display the status of Generic Segmentation Offload for a given port::
1323 testpmd> show port <port_id> gso
1328 Add an alternative MAC address to a port::
1330 testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1335 Remove a MAC address from a port::
1337 testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1342 To add the multicast MAC address to/from the set of multicast addresses
1345 testpmd> mcast_addr add (port_id) (mcast_addr)
1350 To remove the multicast MAC address to/from the set of multicast addresses
1353 testpmd> mcast_addr remove (port_id) (mcast_addr)
1355 mac_addr add (for VF)
1356 ~~~~~~~~~~~~~~~~~~~~~
1358 Add an alternative MAC address for a VF to a port::
1360 testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1365 Set the default MAC address for a port::
1367 testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1369 mac_addr set (for VF)
1370 ~~~~~~~~~~~~~~~~~~~~~
1372 Set the MAC address for a VF from the PF::
1374 testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1379 Set the forwarding peer address for certain port::
1381 testpmd> set eth-peer (port_id) (peer_addr)
1383 This is equivalent to the ``--eth-peer`` command-line option.
1388 Set the unicast hash filter(s) on/off for a port::
1390 testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1395 Set the promiscuous mode on for a port or for all ports.
1396 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1398 testpmd> set promisc (port_id|all) (on|off)
1403 Set the allmulti mode for a port or for all ports::
1405 testpmd> set allmulti (port_id|all) (on|off)
1407 Same as the ifconfig (8) option. Controls how multicast packets are handled.
1409 set promisc (for VF)
1410 ~~~~~~~~~~~~~~~~~~~~
1412 Set the unicast promiscuous mode for a VF from PF.
1413 It's supported by Intel i40e NICs now.
1414 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1416 testpmd> set vf promisc (port_id) (vf_id) (on|off)
1418 set allmulticast (for VF)
1419 ~~~~~~~~~~~~~~~~~~~~~~~~~
1421 Set the multicast promiscuous mode for a VF from PF.
1422 It's supported by Intel i40e NICs now.
1423 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1425 testpmd> set vf allmulti (port_id) (vf_id) (on|off)
1427 set tx max bandwidth (for VF)
1428 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1430 Set TX max absolute bandwidth (Mbps) for a VF from PF::
1432 testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
1434 set tc tx min bandwidth (for VF)
1435 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1437 Set all TCs' TX min relative bandwidth (%) for a VF from PF::
1439 testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
1441 set tc tx max bandwidth (for VF)
1442 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1444 Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
1446 testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
1448 set tc strict link priority mode
1449 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1451 Set some TCs' strict link priority mode on a physical port::
1453 testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1455 set tc tx min bandwidth
1456 ~~~~~~~~~~~~~~~~~~~~~~~
1458 Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
1460 testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
1465 Set the link flow control parameter on a port::
1467 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1468 (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1469 autoneg (on|off) (port_id)
1473 * ``high_water`` (integer): High threshold value to trigger XOFF.
1475 * ``low_water`` (integer): Low threshold value to trigger XON.
1477 * ``pause_time`` (integer): Pause quota in the Pause frame.
1479 * ``send_xon`` (0/1): Send XON frame.
1481 * ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1483 * ``autoneg``: Change the auto-negotiation parameter.
1488 Set the priority flow control parameter on a port::
1490 testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1491 (pause_time) (priority) (port_id)
1495 * ``high_water`` (integer): High threshold value.
1497 * ``low_water`` (integer): Low threshold value.
1499 * ``pause_time`` (integer): Pause quota in the Pause frame.
1501 * ``priority`` (0-7): VLAN User Priority.
1506 Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1508 testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1510 For example, to set rx queue 2 on port 0 to mapping 5::
1512 testpmd>set stat_qmap rx 0 2 5
1514 set xstats-hide-zero
1515 ~~~~~~~~~~~~~~~~~~~~
1517 Set the option to hide zero values for xstats display::
1519 testpmd> set xstats-hide-zero on|off
1523 By default, the zero values are displayed for xstats.
1525 set port - rx/tx (for VF)
1526 ~~~~~~~~~~~~~~~~~~~~~~~~~
1528 Set VF receive/transmit from a port::
1530 testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1532 set port - mac address filter (for VF)
1533 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1535 Add/Remove unicast or multicast MAC addr filter for a VF::
1537 testpmd> set port (port_id) vf (vf_id) (mac_addr) \
1538 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
1540 set port - rx mode(for VF)
1541 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1543 Set the VF receive mode of a port::
1545 testpmd> set port (port_id) vf (vf_id) \
1546 rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1548 The available receive modes are:
1550 * ``AUPE``: Accepts untagged VLAN.
1552 * ``ROPE``: Accepts unicast hash.
1554 * ``BAM``: Accepts broadcast packets.
1556 * ``MPE``: Accepts all multicast packets.
1558 set port - tx_rate (for Queue)
1559 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1561 Set TX rate limitation for a queue on a port::
1563 testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1565 set port - tx_rate (for VF)
1566 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1568 Set TX rate limitation for queues in VF on a port::
1570 testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1572 set port - mirror rule
1573 ~~~~~~~~~~~~~~~~~~~~~~
1575 Set pool or vlan type mirror rule for a port::
1577 testpmd> set port (port_id) mirror-rule (rule_id) \
1578 (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1579 (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1581 Set link mirror rule for a port::
1583 testpmd> set port (port_id) mirror-rule (rule_id) \
1584 (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1586 For example to enable mirror traffic with vlan 0,1 to pool 0::
1588 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1590 reset port - mirror rule
1591 ~~~~~~~~~~~~~~~~~~~~~~~~
1593 Reset a mirror rule for a port::
1595 testpmd> reset port (port_id) mirror-rule (rule_id)
1600 Set the flush on RX streams before forwarding.
1601 The default is flush ``on``.
1602 Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1604 testpmd> set flush_rx off
1609 Set the bypass mode for the lowest port on bypass enabled NIC::
1611 testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1616 Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1618 testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1619 mode (normal|bypass|isolate) (port_id)
1623 * ``timeout``: Enable bypass after watchdog timeout.
1625 * ``os_on``: Enable bypass when OS/board is powered on.
1627 * ``os_off``: Enable bypass when OS/board is powered off.
1629 * ``power_on``: Enable bypass when power supply is turned on.
1631 * ``power_off``: Enable bypass when power supply is turned off.
1637 Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1639 testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1644 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1646 testpmd> show bypass config (port_id)
1651 Set link up for a port::
1653 testpmd> set link-up port (port id)
1658 Set link down for a port::
1660 testpmd> set link-down port (port id)
1665 Enable E-tag insertion for a VF on a port::
1667 testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1669 Disable E-tag insertion for a VF on a port::
1671 testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1673 Enable/disable E-tag stripping on a port::
1675 testpmd> E-tag set stripping (on|off) port (port_id)
1677 Enable/disable E-tag based forwarding on a port::
1679 testpmd> E-tag set forwarding (on|off) port (port_id)
1681 Add an E-tag forwarding filter on a port::
1683 testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1685 Delete an E-tag forwarding filter on a port::
1686 testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1691 Load a dynamic device personalization (DDP) profile and store backup profile::
1693 testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1698 Delete a dynamic device personalization profile and restore backup profile::
1700 testpmd> ddp del (port_id) (backup_profile_path)
1705 List all items from the ptype mapping table::
1707 testpmd> ptype mapping get (port_id) (valid_only)
1711 * ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1713 Replace a specific or a group of software defined ptype with a new one::
1715 testpmd> ptype mapping replace (port_id) (target) (mask) (pkt_type)
1719 * ``target``: A specific software ptype or a mask to represent a group of software ptypes.
1721 * ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1).
1723 * ``pkt_type``: The new software ptype to replace the old ones.
1725 Update hardware defined ptype to software defined packet type mapping table::
1727 testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1731 * ``hw_ptype``: hardware ptype as the index of the ptype mapping table.
1733 * ``sw_ptype``: software ptype as the value of the ptype mapping table.
1735 Reset ptype mapping table::
1737 testpmd> ptype mapping reset (port_id)
1739 config per port Rx offloading
1740 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1742 Enable or disable a per port Rx offloading on all Rx queues of a port::
1744 testpmd> port config (port_id) rx_offload (offloading) on|off
1746 * ``offloading``: can be any of these offloading capability:
1747 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1748 qinq_strip, outer_ipv4_cksum, macsec_strip,
1749 header_split, vlan_filter, vlan_extend, jumbo_frame,
1750 scatter, timestamp, security, keep_crc, rss_hash
1752 This command should be run when the port is stopped, or else it will fail.
1754 config per queue Rx offloading
1755 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1757 Enable or disable a per queue Rx offloading only on a specific Rx queue::
1759 testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
1761 * ``offloading``: can be any of these offloading capability:
1762 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1763 qinq_strip, outer_ipv4_cksum, macsec_strip,
1764 header_split, vlan_filter, vlan_extend, jumbo_frame,
1765 scatter, timestamp, security, keep_crc
1767 This command should be run when the port is stopped, or else it will fail.
1769 config per port Tx offloading
1770 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1772 Enable or disable a per port Tx offloading on all Tx queues of a port::
1774 testpmd> port config (port_id) tx_offload (offloading) on|off
1776 * ``offloading``: can be any of these offloading capability:
1777 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1778 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1779 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1780 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1781 mt_lockfree, multi_segs, mbuf_fast_free, security
1783 This command should be run when the port is stopped, or else it will fail.
1785 config per queue Tx offloading
1786 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1788 Enable or disable a per queue Tx offloading only on a specific Tx queue::
1790 testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
1792 * ``offloading``: can be any of these offloading capability:
1793 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1794 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1795 qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1796 ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1797 mt_lockfree, multi_segs, mbuf_fast_free, security
1799 This command should be run when the port is stopped, or else it will fail.
1801 Config VXLAN Encap outer layers
1802 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1804 Configure the outer layer to encapsulate a packet inside a VXLAN tunnel::
1806 set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1807 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \
1810 set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1811 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1812 eth-src (eth-src) eth-dst (eth-dst)
1814 set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1815 udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) \
1816 ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1818 These commands will set an internal configuration inside testpmd, any following
1819 flow rule using the action vxlan_encap will use the last configuration set.
1820 To have a different encapsulation header, one of those commands must be called
1821 before the flow rule creation.
1823 Config NVGRE Encap outer layers
1824 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1826 Configure the outer layer to encapsulate a packet inside a NVGRE tunnel::
1828 set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \
1829 eth-src (eth-src) eth-dst (eth-dst)
1830 set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \
1831 ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1833 These commands will set an internal configuration inside testpmd, any following
1834 flow rule using the action nvgre_encap will use the last configuration set.
1835 To have a different encapsulation header, one of those commands must be called
1836 before the flow rule creation.
1841 Configure the l2 to be used when encapsulating a packet with L2::
1843 set l2_encap ip-version (ipv4|ipv6) eth-src (eth-src) eth-dst (eth-dst)
1844 set l2_encap-with-vlan ip-version (ipv4|ipv6) vlan-tci (vlan-tci) \
1845 eth-src (eth-src) eth-dst (eth-dst)
1847 Those commands will set an internal configuration inside testpmd, any following
1848 flow rule using the action l2_encap will use the last configuration set.
1849 To have a different encapsulation header, one of those commands must be called
1850 before the flow rule creation.
1855 Configure the l2 to be removed when decapsulating a packet with L2::
1857 set l2_decap ip-version (ipv4|ipv6)
1858 set l2_decap-with-vlan ip-version (ipv4|ipv6)
1860 Those commands will set an internal configuration inside testpmd, any following
1861 flow rule using the action l2_decap will use the last configuration set.
1862 To have a different encapsulation header, one of those commands must be called
1863 before the flow rule creation.
1865 Config MPLSoGRE Encap outer layers
1866 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1868 Configure the outer layer to encapsulate a packet inside a MPLSoGRE tunnel::
1870 set mplsogre_encap ip-version (ipv4|ipv6) label (label) \
1871 ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1872 set mplsogre_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1873 ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1874 eth-src (eth-src) eth-dst (eth-dst)
1876 These commands will set an internal configuration inside testpmd, any following
1877 flow rule using the action mplsogre_encap will use the last configuration set.
1878 To have a different encapsulation header, one of those commands must be called
1879 before the flow rule creation.
1881 Config MPLSoGRE Decap outer layers
1882 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1884 Configure the outer layer to decapsulate MPLSoGRE packet::
1886 set mplsogre_decap ip-version (ipv4|ipv6)
1887 set mplsogre_decap-with-vlan ip-version (ipv4|ipv6)
1889 These commands will set an internal configuration inside testpmd, any following
1890 flow rule using the action mplsogre_decap will use the last configuration set.
1891 To have a different decapsulation header, one of those commands must be called
1892 before the flow rule creation.
1894 Config MPLSoUDP Encap outer layers
1895 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1897 Configure the outer layer to encapsulate a packet inside a MPLSoUDP tunnel::
1899 set mplsoudp_encap ip-version (ipv4|ipv6) label (label) udp-src (udp-src) \
1900 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1901 eth-src (eth-src) eth-dst (eth-dst)
1902 set mplsoudp_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1903 udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1904 vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1906 These commands will set an internal configuration inside testpmd, any following
1907 flow rule using the action mplsoudp_encap will use the last configuration set.
1908 To have a different encapsulation header, one of those commands must be called
1909 before the flow rule creation.
1911 Config MPLSoUDP Decap outer layers
1912 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1914 Configure the outer layer to decapsulate MPLSoUDP packet::
1916 set mplsoudp_decap ip-version (ipv4|ipv6)
1917 set mplsoudp_decap-with-vlan ip-version (ipv4|ipv6)
1919 These commands will set an internal configuration inside testpmd, any following
1920 flow rule using the action mplsoudp_decap will use the last configuration set.
1921 To have a different decapsulation header, one of those commands must be called
1922 before the flow rule creation.
1924 Config Raw Encapsulation
1925 ~~~~~~~~~~~~~~~~~~~~~~~~~
1927 Configure the raw data to be used when encapsulating a packet by
1928 rte_flow_action_raw_encap::
1930 set raw_encap {index} {item} [/ {item} [...]] / end_set
1932 There are multiple global buffers for ``raw_encap``, this command will set one
1933 internal buffer index by ``{index}``.
1934 If there is no ``{index}`` specified::
1936 set raw_encap {item} [/ {item} [...]] / end_set
1938 the default index ``0`` is used.
1939 In order to use different encapsulating header, ``index`` must be specified
1940 during the flow rule creation::
1942 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
1943 raw_encap index 2 / end
1945 Otherwise the default index ``0`` is used.
1947 Config Raw Decapsulation
1948 ~~~~~~~~~~~~~~~~~~~~~~~~
1950 Configure the raw data to be used when decapsulating a packet by
1951 rte_flow_action_raw_decap::
1953 set raw_decap {index} {item} [/ {item} [...]] / end_set
1955 There are multiple global buffers for ``raw_decap``, this command will set
1956 one internal buffer index by ``{index}``.
1957 If there is no ``{index}`` specified::
1959 set raw_decap {item} [/ {item} [...]] / end_set
1961 the default index ``0`` is used.
1962 In order to use different decapsulating header, ``index`` must be specified
1963 during the flow rule creation::
1965 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
1966 raw_encap index 3 / end
1968 Otherwise the default index ``0`` is used.
1973 The following sections show functions for configuring ports.
1977 Port configuration changes only become active when forwarding is started/restarted.
1982 Attach a port specified by pci address or virtual device args::
1984 testpmd> port attach (identifier)
1986 To attach a new pci device, the device should be recognized by kernel first.
1987 Then it should be moved under DPDK management.
1988 Finally the port can be attached to testpmd.
1990 For example, to move a pci device using ixgbe under DPDK management:
1992 .. code-block:: console
1994 # Check the status of the available devices.
1995 ./usertools/dpdk-devbind.py --status
1997 Network devices using DPDK-compatible driver
1998 ============================================
2001 Network devices using kernel driver
2002 ===================================
2003 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
2006 # Bind the device to igb_uio.
2007 sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
2010 # Recheck the status of the devices.
2011 ./usertools/dpdk-devbind.py --status
2012 Network devices using DPDK-compatible driver
2013 ============================================
2014 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
2016 To attach a port created by virtual device, above steps are not needed.
2018 For example, to attach a port whose pci address is 0000:0a:00.0.
2020 .. code-block:: console
2022 testpmd> port attach 0000:0a:00.0
2023 Attaching a new port...
2024 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
2025 EAL: probe driver: 8086:10fb rte_ixgbe_pmd
2026 EAL: PCI memory mapped at 0x7f83bfa00000
2027 EAL: PCI memory mapped at 0x7f83bfa80000
2028 PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
2029 PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
2030 Port 0 is attached. Now total ports is 1
2033 For example, to attach a port created by pcap PMD.
2035 .. code-block:: console
2037 testpmd> port attach net_pcap0
2038 Attaching a new port...
2039 PMD: Initializing pmd_pcap for net_pcap0
2040 PMD: Creating pcap-backed ethdev on numa socket 0
2041 Port 0 is attached. Now total ports is 1
2044 In this case, identifier is ``net_pcap0``.
2045 This identifier format is the same as ``--vdev`` format of DPDK applications.
2047 For example, to re-attach a bonded port which has been previously detached,
2048 the mode and slave parameters must be given.
2050 .. code-block:: console
2052 testpmd> port attach net_bond_0,mode=0,slave=1
2053 Attaching a new port...
2054 EAL: Initializing pmd_bond for net_bond_0
2055 EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
2056 Port 0 is attached. Now total ports is 1
2063 Detach a specific port::
2065 testpmd> port detach (port_id)
2067 Before detaching a port, the port should be stopped and closed.
2069 For example, to detach a pci device port 0.
2071 .. code-block:: console
2073 testpmd> port stop 0
2076 testpmd> port close 0
2080 testpmd> port detach 0
2082 EAL: PCI device 0000:0a:00.0 on NUMA socket -1
2083 EAL: remove driver: 8086:10fb rte_ixgbe_pmd
2084 EAL: PCI memory unmapped at 0x7f83bfa00000
2085 EAL: PCI memory unmapped at 0x7f83bfa80000
2089 For example, to detach a virtual device port 0.
2091 .. code-block:: console
2093 testpmd> port stop 0
2096 testpmd> port close 0
2100 testpmd> port detach 0
2102 PMD: Closing pcap ethdev on numa socket 0
2103 Port 'net_pcap0' is detached. Now total ports is 0
2106 To remove a pci device completely from the system, first detach the port from testpmd.
2107 Then the device should be moved under kernel management.
2108 Finally the device can be removed using kernel pci hotplug functionality.
2110 For example, to move a pci device under kernel management:
2112 .. code-block:: console
2114 sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
2116 ./usertools/dpdk-devbind.py --status
2118 Network devices using DPDK-compatible driver
2119 ============================================
2122 Network devices using kernel driver
2123 ===================================
2124 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
2126 To remove a port created by a virtual device, above steps are not needed.
2131 Start all ports or a specific port::
2133 testpmd> port start (port_id|all)
2138 Stop all ports or a specific port::
2140 testpmd> port stop (port_id|all)
2145 Close all ports or a specific port::
2147 testpmd> port close (port_id|all)
2152 Reset all ports or a specific port::
2154 testpmd> port reset (port_id|all)
2156 User should stop port(s) before resetting and (re-)start after reset.
2158 port config - queue ring size
2159 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2161 Configure a rx/tx queue ring size::
2163 testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
2165 Only take effect after command that (re-)start the port or command that setup specific queue.
2167 port start/stop queue
2168 ~~~~~~~~~~~~~~~~~~~~~
2170 Start/stop a rx/tx queue on a specific port::
2172 testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
2174 port config - queue deferred start
2175 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2177 Switch on/off deferred start of a specific port queue::
2179 testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
2182 ~~~~~~~~~~~~~~~~~~~~~
2184 Setup a rx/tx queue on a specific port::
2186 testpmd> port (port_id) (rxq|txq) (queue_id) setup
2188 Only take effect when port is started.
2193 Set the speed and duplex mode for all ports or a specific port::
2195 testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|200000|auto) \
2196 duplex (half|full|auto)
2198 port config - queues/descriptors
2199 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2201 Set number of queues/descriptors for rxq, txq, rxd and txd::
2203 testpmd> port config all (rxq|txq|rxd|txd) (value)
2205 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
2207 port config - max-pkt-len
2208 ~~~~~~~~~~~~~~~~~~~~~~~~~
2210 Set the maximum packet length::
2212 testpmd> port config all max-pkt-len (value)
2214 This is equivalent to the ``--max-pkt-len`` command-line option.
2216 port config - max-lro-pkt-size
2217 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2219 Set the maximum LRO aggregated packet size::
2221 testpmd> port config all max-lro-pkt-size (value)
2223 This is equivalent to the ``--max-lro-pkt-size`` command-line option.
2225 port config - Drop Packets
2226 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2228 Enable or disable packet drop on all RX queues of all ports when no receive buffers available::
2230 testpmd> port config all drop-en (on|off)
2232 Packet dropping when no receive buffers available is off by default.
2234 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
2239 Set the RSS (Receive Side Scaling) mode on or off::
2241 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)
2243 RSS is on by default.
2245 The ``all`` option is equivalent to eth|vlan|ip|tcp|udp|sctp|ether|l2tpv3|esp|ah|pfcp.
2247 The ``default`` option enables all supported RSS types reported by device info.
2249 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
2251 port config - RSS Reta
2252 ~~~~~~~~~~~~~~~~~~~~~~
2254 Set the RSS (Receive Side Scaling) redirection table::
2256 testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
2261 Set the DCB mode for an individual port::
2263 testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
2265 The traffic class should be 4 or 8.
2270 Set the number of packets per burst::
2272 testpmd> port config all burst (value)
2274 This is equivalent to the ``--burst`` command-line option.
2276 port config - Threshold
2277 ~~~~~~~~~~~~~~~~~~~~~~~
2279 Set thresholds for TX/RX queues::
2281 testpmd> port config all (threshold) (value)
2283 Where the threshold type can be:
2285 * ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
2287 * ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
2289 * ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
2291 * ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
2293 * ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
2295 * ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
2297 * ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
2299 * ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
2301 * ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
2303 These threshold options are also available from the command-line.
2308 Set the value of ether-type for E-tag::
2310 testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
2312 Enable/disable the E-tag support::
2314 testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
2316 port config pctype mapping
2317 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2319 Reset pctype mapping table::
2321 testpmd> port config (port_id) pctype mapping reset
2323 Update hardware defined pctype to software defined flow type mapping table::
2325 testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
2329 * ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
2331 * ``flow_type_id``: software flow type id as the index of the pctype mapping table.
2333 port config input set
2334 ~~~~~~~~~~~~~~~~~~~~~
2336 Config RSS/FDIR/FDIR flexible payload input set for some pctype::
2338 testpmd> port config (port_id) pctype (pctype_id) \
2339 (hash_inset|fdir_inset|fdir_flx_inset) \
2340 (get|set|clear) field (field_idx)
2342 Clear RSS/FDIR/FDIR flexible payload input set for some pctype::
2344 testpmd> port config (port_id) pctype (pctype_id) \
2345 (hash_inset|fdir_inset|fdir_flx_inset) clear all
2349 * ``pctype_id``: hardware packet classification types.
2350 * ``field_idx``: hardware field index.
2352 port config udp_tunnel_port
2353 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2355 Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols::
2357 testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe (udp_port)
2359 port config tx_metadata
2360 ~~~~~~~~~~~~~~~~~~~~~~~
2362 Set Tx metadata value per port.
2363 testpmd will add this value to any Tx packet sent from this port::
2365 testpmd> port config (port_id) tx_metadata (value)
2370 Set/clear dynamic flag per port.
2371 testpmd will register this flag in the mbuf (same registration
2372 for both Tx and Rx). Then set/clear this flag for each Tx
2373 packet sent from this port. The set bit only works for Tx packet::
2375 testpmd> port config (port_id) dynf (name) (set|clear)
2380 To configure MTU(Maximum Transmission Unit) on devices using testpmd::
2382 testpmd> port config mtu (port_id) (value)
2384 port config rss hash key
2385 ~~~~~~~~~~~~~~~~~~~~~~~~
2387 To configure the RSS hash key used to compute the RSS
2388 hash of input [IP] packets received on port::
2390 testpmd> port config <port_id> rss-hash-key (ipv4|ipv4-frag|\
2391 ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\
2392 ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|\
2393 ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|\
2394 ipv6-udp-ex <string of hex digits \
2395 (variable length, NIC dependent)>)
2400 The following sections show functions for device operations.
2405 Detach a device specified by pci address or virtual device args::
2407 testpmd> device detach (identifier)
2409 Before detaching a device associated with ports, the ports should be stopped and closed.
2411 For example, to detach a pci device whose address is 0002:03:00.0.
2413 .. code-block:: console
2415 testpmd> device detach 0002:03:00.0
2416 Removing a device...
2417 Port 1 is now closed
2418 EAL: Releasing pci mapped resource for 0002:03:00.0
2419 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218a050000
2420 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218c050000
2421 Device 0002:03:00.0 is detached
2422 Now total ports is 1
2424 For example, to detach a port created by pcap PMD.
2426 .. code-block:: console
2428 testpmd> device detach net_pcap0
2429 Removing a device...
2430 Port 0 is now closed
2431 Device net_pcap0 is detached
2432 Now total ports is 0
2435 In this case, identifier is ``net_pcap0``.
2436 This identifier format is the same as ``--vdev`` format of DPDK applications.
2438 Link Bonding Functions
2439 ----------------------
2441 The Link Bonding functions make it possible to dynamically create and
2442 manage link bonding devices from within testpmd interactive prompt.
2444 create bonded device
2445 ~~~~~~~~~~~~~~~~~~~~
2447 Create a new bonding device::
2449 testpmd> create bonded device (mode) (socket)
2451 For example, to create a bonded device in mode 1 on socket 0::
2453 testpmd> create bonded device 1 0
2454 created new bonded device (port X)
2459 Adds Ethernet device to a Link Bonding device::
2461 testpmd> add bonding slave (slave id) (port id)
2463 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2465 testpmd> add bonding slave 6 10
2468 remove bonding slave
2469 ~~~~~~~~~~~~~~~~~~~~
2471 Removes an Ethernet slave device from a Link Bonding device::
2473 testpmd> remove bonding slave (slave id) (port id)
2475 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2477 testpmd> remove bonding slave 6 10
2482 Set the Link Bonding mode of a Link Bonding device::
2484 testpmd> set bonding mode (value) (port id)
2486 For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
2488 testpmd> set bonding mode 3 10
2493 Set an Ethernet slave device as the primary device on a Link Bonding device::
2495 testpmd> set bonding primary (slave id) (port id)
2497 For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
2499 testpmd> set bonding primary 6 10
2504 Set the MAC address of a Link Bonding device::
2506 testpmd> set bonding mac (port id) (mac)
2508 For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
2510 testpmd> set bonding mac 10 00:00:00:00:00:01
2512 set bonding xmit_balance_policy
2513 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2515 Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
2517 testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
2519 For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
2521 testpmd> set bonding xmit_balance_policy 10 l34
2524 set bonding mon_period
2525 ~~~~~~~~~~~~~~~~~~~~~~
2527 Set the link status monitoring polling period in milliseconds for a bonding device.
2529 This adds support for PMD slave devices which do not support link status interrupts.
2530 When the mon_period is set to a value greater than 0 then all PMD's which do not support
2531 link status ISR will be queried every polling interval to check if their link status has changed::
2533 testpmd> set bonding mon_period (port_id) (value)
2535 For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
2537 testpmd> set bonding mon_period 5 150
2540 set bonding lacp dedicated_queue
2541 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2543 Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2544 when in mode 4 (link-aggregation-802.3ad)::
2546 testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2549 set bonding agg_mode
2550 ~~~~~~~~~~~~~~~~~~~~
2552 Enable one of the specific aggregators mode when in mode 4 (link-aggregation-802.3ad)::
2554 testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable)
2560 Show the current configuration of a Link Bonding device::
2562 testpmd> show bonding config (port id)
2565 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2566 in balance mode with a transmission policy of layer 2+3::
2568 testpmd> show bonding config 9
2570 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
2572 Active Slaves (3): [1 3 4]
2579 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2580 This is mainly useful for debugging purposes.
2581 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2582 and fields that can be accessed.
2587 Display the value of a port register::
2589 testpmd> read reg (port_id) (address)
2591 For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
2593 testpmd> read reg 0 0xEE00
2594 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
2599 Display a port register bit field::
2601 testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2603 For example, reading the lowest two bits from the register in the example above::
2605 testpmd> read regfield 0 0xEE00 0 1
2606 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
2611 Display a single port register bit::
2613 testpmd> read regbit (port_id) (address) (bit_x)
2615 For example, reading the lowest bit from the register in the example above::
2617 testpmd> read regbit 0 0xEE00 0
2618 port 0 PCI register at offset 0xEE00: bit 0=1
2623 Set the value of a port register::
2625 testpmd> write reg (port_id) (address) (value)
2627 For example, to clear a register::
2629 testpmd> write reg 0 0xEE00 0x0
2630 port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2635 Set bit field of a port register::
2637 testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2639 For example, writing to the register cleared in the example above::
2641 testpmd> write regfield 0 0xEE00 0 1 2
2642 port 0 PCI register at offset 0xEE00: 0x00000002 (2)
2647 Set single bit value of a port register::
2649 testpmd> write regbit (port_id) (address) (bit_x) (value)
2651 For example, to set the high bit in the register from the example above::
2653 testpmd> write regbit 0 0xEE00 31 1
2654 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
2656 Traffic Metering and Policing
2657 -----------------------------
2659 The following section shows functions for configuring traffic metering and
2660 policing on the ethernet device through the use of generic ethdev API.
2662 show port traffic management capability
2663 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2665 Show traffic metering and policing capability of the port::
2667 testpmd> show port meter cap (port_id)
2669 add port meter profile (srTCM rfc2967)
2670 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2672 Add meter profile (srTCM rfc2697) to the ethernet device::
2674 testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2679 * ``profile_id``: ID for the meter profile.
2680 * ``cir``: Committed Information Rate (CIR) (bytes/second).
2681 * ``cbs``: Committed Burst Size (CBS) (bytes).
2682 * ``ebs``: Excess Burst Size (EBS) (bytes).
2684 add port meter profile (trTCM rfc2968)
2685 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2687 Add meter profile (srTCM rfc2698) to the ethernet device::
2689 testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2690 (cir) (pir) (cbs) (pbs)
2694 * ``profile_id``: ID for the meter profile.
2695 * ``cir``: Committed information rate (bytes/second).
2696 * ``pir``: Peak information rate (bytes/second).
2697 * ``cbs``: Committed burst size (bytes).
2698 * ``pbs``: Peak burst size (bytes).
2700 add port meter profile (trTCM rfc4115)
2701 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2703 Add meter profile (trTCM rfc4115) to the ethernet device::
2705 testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2706 (cir) (eir) (cbs) (ebs)
2710 * ``profile_id``: ID for the meter profile.
2711 * ``cir``: Committed information rate (bytes/second).
2712 * ``eir``: Excess information rate (bytes/second).
2713 * ``cbs``: Committed burst size (bytes).
2714 * ``ebs``: Excess burst size (bytes).
2716 delete port meter profile
2717 ~~~~~~~~~~~~~~~~~~~~~~~~~
2719 Delete meter profile from the ethernet device::
2721 testpmd> del port meter profile (port_id) (profile_id)
2726 Create new meter object for the ethernet device::
2728 testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2729 (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \
2730 (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2735 * ``mtr_id``: meter object ID.
2736 * ``profile_id``: ID for the meter profile.
2737 * ``meter_enable``: When this parameter has a non-zero value, the meter object
2738 gets enabled at the time of creation, otherwise remains disabled.
2739 * ``g_action``: Policer action for the packet with green color.
2740 * ``y_action``: Policer action for the packet with yellow color.
2741 * ``r_action``: Policer action for the packet with red color.
2742 * ``stats_mask``: Mask of statistics counter types to be enabled for the
2744 * ``shared``: When this parameter has a non-zero value, the meter object is
2745 shared by multiple flows. Otherwise, meter object is used by single flow.
2746 * ``use_pre_meter_color``: When this parameter has a non-zero value, the
2747 input color for the current meter object is determined by the latest meter
2748 object in the same flow. Otherwise, the current meter object uses the
2749 *dscp_table* to determine the input color.
2750 * ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2751 color, 0 <= x <= 63.
2756 Enable meter for the ethernet device::
2758 testpmd> enable port meter (port_id) (mtr_id)
2763 Disable meter for the ethernet device::
2765 testpmd> disable port meter (port_id) (mtr_id)
2770 Delete meter for the ethernet device::
2772 testpmd> del port meter (port_id) (mtr_id)
2774 Set port meter profile
2775 ~~~~~~~~~~~~~~~~~~~~~~
2777 Set meter profile for the ethernet device::
2779 testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2781 set port meter dscp table
2782 ~~~~~~~~~~~~~~~~~~~~~~~~~
2784 Set meter dscp table for the ethernet device::
2786 testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \
2787 (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2789 set port meter policer action
2790 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2792 Set meter policer action for the ethernet device::
2794 testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \
2795 (action0) [(action1) (action1)]
2799 * ``action_mask``: Bit mask indicating which policer actions need to be
2800 updated. One or more policer actions can be updated in a single function
2801 invocation. To update the policer action associated with color C, bit
2802 (1 << C) needs to be set in *action_mask* and element at position C
2803 in the *actions* array needs to be valid.
2804 * ``actionx``: Policer action for the color x,
2805 RTE_MTR_GREEN <= x < RTE_MTR_COLORS
2807 set port meter stats mask
2808 ~~~~~~~~~~~~~~~~~~~~~~~~~
2810 Set meter stats mask for the ethernet device::
2812 testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2816 * ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2818 show port meter stats
2819 ~~~~~~~~~~~~~~~~~~~~~
2821 Show meter stats of the ethernet device::
2823 testpmd> show port meter stats (port_id) (mtr_id) (clear)
2827 * ``clear``: Flag that indicates whether the statistics counters should
2828 be cleared (i.e. set to zero) immediately after they have been read or not.
2833 The following section shows functions for configuring traffic management on
2834 the ethernet device through the use of generic TM API.
2836 show port traffic management capability
2837 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2839 Show traffic management capability of the port::
2841 testpmd> show port tm cap (port_id)
2843 show port traffic management capability (hierarchy level)
2844 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2846 Show traffic management hierarchy level capability of the port::
2848 testpmd> show port tm level cap (port_id) (level_id)
2850 show port traffic management capability (hierarchy node level)
2851 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2853 Show the traffic management hierarchy node capability of the port::
2855 testpmd> show port tm node cap (port_id) (node_id)
2857 show port traffic management hierarchy node type
2858 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2860 Show the port traffic management hierarchy node type::
2862 testpmd> show port tm node type (port_id) (node_id)
2864 show port traffic management hierarchy node stats
2865 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2867 Show the port traffic management hierarchy node statistics::
2869 testpmd> show port tm node stats (port_id) (node_id) (clear)
2873 * ``clear``: When this parameter has a non-zero value, the statistics counters
2874 are cleared (i.e. set to zero) immediately after they have been read,
2875 otherwise the statistics counters are left untouched.
2877 Add port traffic management private shaper profile
2878 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2880 Add the port traffic management private shaper profile::
2882 testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2883 (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size) \
2884 (packet_length_adjust)
2888 * ``shaper_profile id``: Shaper profile ID for the new profile.
2889 * ``cmit_tb_rate``: Committed token bucket rate (bytes per second).
2890 * ``cmit_tb_size``: Committed token bucket size (bytes).
2891 * ``peak_tb_rate``: Peak token bucket rate (bytes per second).
2892 * ``peak_tb_size``: Peak token bucket size (bytes).
2893 * ``packet_length_adjust``: The value (bytes) to be added to the length of
2894 each packet for the purpose of shaping. This parameter value can be used to
2895 correct the packet length with the framing overhead bytes that are consumed
2898 Delete port traffic management private shaper profile
2899 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2901 Delete the port traffic management private shaper::
2903 testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2907 * ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2909 Add port traffic management shared shaper
2910 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2912 Create the port traffic management shared shaper::
2914 testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2919 * ``shared_shaper_id``: Shared shaper ID to be created.
2920 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2922 Set port traffic management shared shaper
2923 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2925 Update the port traffic management shared shaper::
2927 testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2932 * ``shared_shaper_id``: Shared shaper ID to be update.
2933 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2935 Delete port traffic management shared shaper
2936 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2938 Delete the port traffic management shared shaper::
2940 testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2944 * ``shared_shaper_id``: Shared shaper ID to be deleted.
2946 Set port traffic management hierarchy node private shaper
2947 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2949 set the port traffic management hierarchy node private shaper::
2951 testpmd> set port tm node shaper profile (port_id) (node_id) \
2956 * ``shaper_profile id``: Private shaper profile ID to be enabled on the
2959 Add port traffic management WRED profile
2960 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2962 Create a new WRED profile::
2964 testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2965 (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2966 (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2967 (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2971 * ``wred_profile id``: Identifier for the newly create WRED profile
2972 * ``color_g``: Packet color (green)
2973 * ``min_th_g``: Minimum queue threshold for packet with green color
2974 * ``max_th_g``: Minimum queue threshold for packet with green color
2975 * ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2976 * ``wq_log2_g``: Negated log2 of queue weight (wq)
2977 * ``color_y``: Packet color (yellow)
2978 * ``min_th_y``: Minimum queue threshold for packet with yellow color
2979 * ``max_th_y``: Minimum queue threshold for packet with yellow color
2980 * ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2981 * ``wq_log2_y``: Negated log2 of queue weight (wq)
2982 * ``color_r``: Packet color (red)
2983 * ``min_th_r``: Minimum queue threshold for packet with yellow color
2984 * ``max_th_r``: Minimum queue threshold for packet with yellow color
2985 * ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2986 * ``wq_log2_r``: Negated log2 of queue weight (wq)
2988 Delete port traffic management WRED profile
2989 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2991 Delete the WRED profile::
2993 testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2995 Add port traffic management hierarchy nonleaf node
2996 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2998 Add nonleaf node to port traffic management hierarchy::
3000 testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
3001 (priority) (weight) (level_id) (shaper_profile_id) \
3002 (n_sp_priorities) (stats_mask) (n_shared_shapers) \
3003 [(shared_shaper_0) (shared_shaper_1) ...] \
3007 * ``parent_node_id``: Node ID of the parent.
3008 * ``priority``: Node priority (highest node priority is zero). This is used by
3009 the SP algorithm running on the parent node for scheduling this node.
3010 * ``weight``: Node weight (lowest weight is one). The node weight is relative
3011 to the weight sum of all siblings that have the same priority. It is used by
3012 the WFQ algorithm running on the parent node for scheduling this node.
3013 * ``level_id``: Hierarchy level of the node.
3014 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
3016 * ``n_sp_priorities``: Number of strict priorities.
3017 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
3018 * ``n_shared_shapers``: Number of shared shapers.
3019 * ``shared_shaper_id``: Shared shaper id.
3021 Add port traffic management hierarchy leaf node
3022 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3024 Add leaf node to port traffic management hierarchy::
3026 testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
3027 (priority) (weight) (level_id) (shaper_profile_id) \
3028 (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
3029 [(shared_shaper_id) (shared_shaper_id) ...] \
3033 * ``parent_node_id``: Node ID of the parent.
3034 * ``priority``: Node priority (highest node priority is zero). This is used by
3035 the SP algorithm running on the parent node for scheduling this node.
3036 * ``weight``: Node weight (lowest weight is one). The node weight is relative
3037 to the weight sum of all siblings that have the same priority. It is used by
3038 the WFQ algorithm running on the parent node for scheduling this node.
3039 * ``level_id``: Hierarchy level of the node.
3040 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
3042 * ``cman_mode``: Congestion management mode to be enabled for this node.
3043 * ``wred_profile_id``: WRED profile id to be enabled for this node.
3044 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
3045 * ``n_shared_shapers``: Number of shared shapers.
3046 * ``shared_shaper_id``: Shared shaper id.
3048 Delete port traffic management hierarchy node
3049 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3051 Delete node from port traffic management hierarchy::
3053 testpmd> del port tm node (port_id) (node_id)
3055 Update port traffic management hierarchy parent node
3056 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3058 Update port traffic management hierarchy parent node::
3060 testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
3063 This function can only be called after the hierarchy commit invocation. Its
3064 success depends on the port support for this operation, as advertised through
3065 the port capability set. This function is valid for all nodes of the traffic
3066 management hierarchy except root node.
3068 Suspend port traffic management hierarchy node
3069 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3071 testpmd> suspend port tm node (port_id) (node_id)
3073 Resume port traffic management hierarchy node
3074 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3076 testpmd> resume port tm node (port_id) (node_id)
3078 Commit port traffic management hierarchy
3079 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3081 Commit the traffic management hierarchy on the port::
3083 testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
3087 * ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
3088 call failure. On the other hand, hierarchy is preserved when this parameter
3091 Set port traffic management mark VLAN dei
3092 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3094 Enables/Disables the traffic management marking on the port for VLAN packets::
3096 testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red>
3100 * ``port_id``: The port which on which VLAN packets marked as ``green`` or
3101 ``yellow`` or ``red`` will have dei bit enabled
3103 * ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green
3105 * ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow
3107 * ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red
3109 Set port traffic management mark IP dscp
3110 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3112 Enables/Disables the traffic management marking on the port for IP dscp packets::
3114 testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red>
3118 * ``port_id``: The port which on which IP packets marked as ``green`` or
3119 ``yellow`` or ``red`` will have IP dscp bits updated
3121 * ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets
3123 * ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets
3125 * ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets
3127 Set port traffic management mark IP ecn
3128 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3130 Enables/Disables the traffic management marking on the port for IP ecn packets::
3132 testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red>
3136 * ``port_id``: The port which on which IP packets marked as ``green`` or
3137 ``yellow`` or ``red`` will have IP ecn bits updated
3139 * ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01 or 2'b10
3140 to ecn of 2'b11 when IP is caring TCP or SCTP
3142 * ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
3143 to ecn of 2'b11 when IP is caring TCP or SCTP
3145 * ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10
3146 to ecn of 2'b11 when IP is caring TCP or SCTP
3151 This section details the available filter functions that are available.
3153 Note these functions interface the deprecated legacy filtering framework,
3154 superseded by *rte_flow*. See `Flow rules management`_.
3157 ~~~~~~~~~~~~~~~~~~~~
3159 Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
3161 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
3162 ethertype (ether_type) (drop|fwd) queue (queue_id)
3164 The available information parameters are:
3166 * ``port_id``: The port which the Ethertype filter assigned on.
3168 * ``mac_addr``: Compare destination mac address.
3170 * ``mac_ignr``: Ignore destination mac address match.
3172 * ``mac_address``: Destination mac address to match.
3174 * ``ether_type``: The EtherType value want to match,
3175 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
3177 * ``queue_id``: The receive queue associated with this EtherType filter.
3178 It is meaningless when deleting or dropping.
3180 Example, to add/remove an ethertype filter rule::
3182 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
3183 ethertype 0x0806 fwd queue 3
3185 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
3186 ethertype 0x0806 fwd queue 3
3191 Add or delete a 2-tuple filter,
3192 which identifies packets by specific protocol and destination TCP/UDP port
3193 and forwards packets into one of the receive queues::
3195 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
3196 protocol (protocol_value) mask (mask_value) \
3197 tcp_flags (tcp_flags_value) priority (prio_value) \
3200 The available information parameters are:
3202 * ``port_id``: The port which the 2-tuple filter assigned on.
3204 * ``dst_port_value``: Destination port in L4.
3206 * ``protocol_value``: IP L4 protocol.
3208 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
3210 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
3212 * ``prio_value``: Priority of this filter.
3214 * ``queue_id``: The receive queue associated with this 2-tuple filter.
3216 Example, to add/remove an 2tuple filter rule::
3218 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
3219 tcp_flags 0x02 priority 3 queue 3
3221 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
3222 tcp_flags 0x02 priority 3 queue 3
3227 Add or delete a 5-tuple filter,
3228 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
3229 and routes packets into one of the receive queues::
3231 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
3232 (src_address) dst_port (dst_port_value) \
3233 src_port (src_port_value) protocol (protocol_value) \
3234 mask (mask_value) tcp_flags (tcp_flags_value) \
3235 priority (prio_value) queue (queue_id)
3237 The available information parameters are:
3239 * ``port_id``: The port which the 5-tuple filter assigned on.
3241 * ``dst_address``: Destination IP address.
3243 * ``src_address``: Source IP address.
3245 * ``dst_port_value``: TCP/UDP destination port.
3247 * ``src_port_value``: TCP/UDP source port.
3249 * ``protocol_value``: L4 protocol.
3251 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
3253 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
3255 * ``prio_value``: The priority of this filter.
3257 * ``queue_id``: The receive queue associated with this 5-tuple filter.
3259 Example, to add/remove an 5tuple filter rule::
3261 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3262 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3263 flags 0x0 priority 3 queue 3
3265 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
3266 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
3267 flags 0x0 priority 3 queue 3
3272 Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
3274 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
3276 The available information parameters are:
3278 * ``port_id``: The port which the SYN filter assigned on.
3280 * ``high``: This SYN filter has higher priority than other filters.
3282 * ``low``: This SYN filter has lower priority than other filters.
3284 * ``queue_id``: The receive queue associated with this SYN filter
3288 testpmd> syn_filter 0 add priority high queue 3
3293 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
3294 and routed into one of the receive queues::
3296 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
3297 mask (mask_value) priority (prio_value) queue (queue_id)
3299 The available information parameters are:
3301 * ``port_id``: The port which the Flex filter is assigned on.
3303 * ``len_value``: Filter length in bytes, no greater than 128.
3305 * ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
3307 * ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
3309 * ``prio_value``: The priority of this filter.
3311 * ``queue_id``: The receive queue associated with this Flex filter.
3315 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
3316 mask 000C priority 3 queue 3
3318 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
3319 mask 000C priority 3 queue 3
3322 .. _testpmd_flow_director:
3324 flow_director_filter
3325 ~~~~~~~~~~~~~~~~~~~~
3327 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
3329 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
3330 Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
3332 * Perfect match filters.
3333 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3334 The masked fields are for IP flow.
3336 * Signature filters.
3337 The hardware checks a match between a hash-based signature of the masked fields of the received packet.
3339 * Perfect-mac-vlan match filters.
3340 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3341 The masked fields are for MAC VLAN flow.
3343 * Perfect-tunnel match filters.
3344 The hardware checks a match between the masked fields of the received packets and the programmed filters.
3345 The masked fields are for tunnel flow.
3347 * Perfect-raw-flow-type match filters.
3348 The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet.
3349 The masked fields are specified by input sets.
3351 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
3352 per flow type and the flexible payload.
3354 The Flow Director can also mask out parts of all of these fields so that filters
3355 are only applied to certain fields or parts of the fields.
3357 Note that for raw flow type mode the source and destination fields in the
3358 raw packet buffer need to be presented in a reversed order with respect
3359 to the expected received packets.
3360 For example: IP source and destination addresses or TCP/UDP/SCTP
3361 source and destination ports
3363 Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
3365 # Commands to add flow director filters of different flow types::
3367 flow_director_filter (port_id) mode IP (add|del|update) \
3368 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
3369 src (src_ip_address) dst (dst_ip_address) \
3370 tos (tos_value) proto (proto_value) ttl (ttl_value) \
3371 vlan (vlan_value) flexbytes (flexbytes_value) \
3372 (drop|fwd) pf|vf(vf_id) queue (queue_id) \
3375 flow_director_filter (port_id) mode IP (add|del|update) \
3376 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
3377 src (src_ip_address) (src_port) \
3378 dst (dst_ip_address) (dst_port) \
3379 tos (tos_value) ttl (ttl_value) \
3380 vlan (vlan_value) flexbytes (flexbytes_value) \
3381 (drop|fwd) queue pf|vf(vf_id) (queue_id) \
3384 flow_director_filter (port_id) mode IP (add|del|update) \
3385 flow (ipv4-sctp|ipv6-sctp) \
3386 src (src_ip_address) (src_port) \
3387 dst (dst_ip_address) (dst_port) \
3388 tos (tos_value) ttl (ttl_value) \
3389 tag (verification_tag) vlan (vlan_value) \
3390 flexbytes (flexbytes_value) (drop|fwd) \
3391 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
3393 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
3394 ether (ethertype) flexbytes (flexbytes_value) \
3395 (drop|fwd) pf|vf(vf_id) queue (queue_id)
3398 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
3399 mac (mac_address) vlan (vlan_value) \
3400 flexbytes (flexbytes_value) (drop|fwd) \
3401 queue (queue_id) fd_id (fd_id_value)
3403 flow_director_filter (port_id) mode Tunnel (add|del|update) \
3404 mac (mac_address) vlan (vlan_value) \
3405 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
3406 flexbytes (flexbytes_value) (drop|fwd) \
3407 queue (queue_id) fd_id (fd_id_value)
3409 flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \
3410 (drop|fwd) queue (queue_id) fd_id (fd_id_value) \
3411 packet (packet file name)
3413 For example, to add an ipv4-udp flow type filter::
3415 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
3416 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
3417 fwd pf queue 1 fd_id 1
3419 For example, add an ipv4-other flow type filter::
3421 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
3422 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
3423 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
3428 Flush all flow director filters on a device::
3430 testpmd> flush_flow_director (port_id)
3432 Example, to flush all flow director filter on port 0::
3434 testpmd> flush_flow_director 0
3439 Set flow director's input masks::
3441 flow_director_mask (port_id) mode IP vlan (vlan_value) \
3442 src_mask (ipv4_src) (ipv6_src) (src_port) \
3443 dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
3445 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
3447 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
3448 mac (mac_value) tunnel-type (tunnel_type_value) \
3449 tunnel-id (tunnel_id_value)
3451 Example, to set flow director mask on port 0::
3453 testpmd> flow_director_mask 0 mode IP vlan 0xefff \
3454 src_mask 255.255.255.255 \
3455 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
3456 dst_mask 255.255.255.255 \
3457 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
3459 flow_director_flex_mask
3460 ~~~~~~~~~~~~~~~~~~~~~~~
3462 set masks of flow director's flexible payload based on certain flow type::
3464 testpmd> flow_director_flex_mask (port_id) \
3465 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3466 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
3467 l2_payload|all) (mask)
3469 Example, to set flow director's flex mask for all flow type on port 0::
3471 testpmd> flow_director_flex_mask 0 flow all \
3472 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
3475 flow_director_flex_payload
3476 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3478 Configure flexible payload selection::
3480 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3482 For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
3484 testpmd> flow_director_flex_payload 0 l4 \
3485 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
3487 get_sym_hash_ena_per_port
3488 ~~~~~~~~~~~~~~~~~~~~~~~~~
3490 Get symmetric hash enable configuration per port::
3492 get_sym_hash_ena_per_port (port_id)
3494 For example, to get symmetric hash enable configuration of port 1::
3496 testpmd> get_sym_hash_ena_per_port 1
3498 set_sym_hash_ena_per_port
3499 ~~~~~~~~~~~~~~~~~~~~~~~~~
3501 Set symmetric hash enable configuration per port to enable or disable::
3503 set_sym_hash_ena_per_port (port_id) (enable|disable)
3505 For example, to set symmetric hash enable configuration of port 1 to enable::
3507 testpmd> set_sym_hash_ena_per_port 1 enable
3509 get_hash_global_config
3510 ~~~~~~~~~~~~~~~~~~~~~~
3512 Get the global configurations of hash filters::
3514 get_hash_global_config (port_id)
3516 For example, to get the global configurations of hash filters of port 1::
3518 testpmd> get_hash_global_config 1
3520 set_hash_global_config
3521 ~~~~~~~~~~~~~~~~~~~~~~
3523 Set the global configurations of hash filters::
3525 set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default) \
3526 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
3527 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flow_id>) \
3530 For example, to enable simple_xor for flow type of ipv6 on port 2::
3532 testpmd> set_hash_global_config 2 simple_xor ipv6 enable
3537 Set the input set for hash::
3539 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3540 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3541 l2_payload|<flow_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3542 ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
3543 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
3544 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
3545 fld-8th|none) (select|add)
3547 For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
3549 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
3554 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3555 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3557 Set the input set for flow director::
3559 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3560 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3561 l2_payload|<flow_id>) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3562 ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
3563 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
3564 sctp-dst-port|sctp-veri-tag|none) (select|add)
3566 For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
3568 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
3573 Set different GRE key length for input set::
3575 global_config (port_id) gre-key-len (number in bytes)
3577 For example to set GRE key length for input set to 4 bytes on port 0::
3579 testpmd> global_config 0 gre-key-len 4
3582 .. _testpmd_rte_flow:
3584 Flow rules management
3585 ---------------------
3587 Control of the generic flow API (*rte_flow*) is fully exposed through the
3588 ``flow`` command (validation, creation, destruction, queries and operation
3591 Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3592 features simultaneously may cause undefined side-effects and is therefore
3598 Because the ``flow`` command uses dynamic tokens to handle the large number
3599 of possible flow rules combinations, its behavior differs slightly from
3600 other commands, in particular:
3602 - Pressing *?* or the *<tab>* key displays contextual help for the current
3603 token, not that of the entire command.
3605 - Optional and repeated parameters are supported (provided they are listed
3606 in the contextual help).
3608 The first parameter stands for the operation mode. Possible operations and
3609 their general syntax are described below. They are covered in detail in the
3612 - Check whether a flow rule can be created::
3614 flow validate {port_id}
3615 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3616 pattern {item} [/ {item} [...]] / end
3617 actions {action} [/ {action} [...]] / end
3619 - Create a flow rule::
3621 flow create {port_id}
3622 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3623 pattern {item} [/ {item} [...]] / end
3624 actions {action} [/ {action} [...]] / end
3626 - Destroy specific flow rules::
3628 flow destroy {port_id} rule {rule_id} [...]
3630 - Destroy all flow rules::
3632 flow flush {port_id}
3634 - Query an existing flow rule::
3636 flow query {port_id} {rule_id} {action}
3638 - List existing flow rules sorted by priority, filtered by group
3641 flow list {port_id} [group {group_id}] [...]
3643 - Restrict ingress traffic to the defined flow rules::
3645 flow isolate {port_id} {boolean}
3647 - Dump internal representation information of all flows in hardware::
3649 flow dump {port_id} {output_file}
3651 - List and destroy aged flow rules::
3653 flow aged {port_id} [destroy]
3655 Validating flow rules
3656 ~~~~~~~~~~~~~~~~~~~~~
3658 ``flow validate`` reports whether a flow rule would be accepted by the
3659 underlying device in its current state but stops short of creating it. It is
3660 bound to ``rte_flow_validate()``::
3662 flow validate {port_id}
3663 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3664 pattern {item} [/ {item} [...]] / end
3665 actions {action} [/ {action} [...]] / end
3667 If successful, it will show::
3671 Otherwise it will show an error message of the form::
3673 Caught error type [...] ([...]): [...]
3675 This command uses the same parameters as ``flow create``, their format is
3676 described in `Creating flow rules`_.
3678 Check whether redirecting any Ethernet packet received on port 0 to RX queue
3679 index 6 is supported::
3681 testpmd> flow validate 0 ingress pattern eth / end
3682 actions queue index 6 / end
3686 Port 0 does not support TCPv6 rules::
3688 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3690 Caught error type 9 (specific pattern item): Invalid argument
3696 ``flow create`` validates and creates the specified flow rule. It is bound
3697 to ``rte_flow_create()``::
3699 flow create {port_id}
3700 [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3701 pattern {item} [/ {item} [...]] / end
3702 actions {action} [/ {action} [...]] / end
3704 If successful, it will return a flow rule ID usable with other commands::
3706 Flow rule #[...] created
3708 Otherwise it will show an error message of the form::
3710 Caught error type [...] ([...]): [...]
3712 Parameters describe in the following order:
3714 - Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens).
3715 - A matching pattern, starting with the *pattern* token and terminated by an
3717 - Actions, starting with the *actions* token and terminated by an *end*
3720 These translate directly to *rte_flow* objects provided as-is to the
3721 underlying functions.
3723 The shortest valid definition only comprises mandatory tokens::
3725 testpmd> flow create 0 pattern end actions end
3727 Note that PMDs may refuse rules that essentially do nothing such as this
3730 **All unspecified object values are automatically initialized to 0.**
3735 These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3736 specified before the ``pattern`` token.
3738 - ``group {group id}``: priority group.
3739 - ``priority {level}``: priority level within group.
3740 - ``ingress``: rule applies to ingress traffic.
3741 - ``egress``: rule applies to egress traffic.
3742 - ``transfer``: apply rule directly to endpoints found in pattern.
3744 Each instance of an attribute specified several times overrides the previous
3745 value as shown below (group 4 is used)::
3747 testpmd> flow create 0 group 42 group 24 group 4 [...]
3749 Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3751 While not specifying a direction is an error, some rules may allow both
3754 Most rules affect RX therefore contain the ``ingress`` token::
3756 testpmd> flow create 0 ingress pattern [...]
3761 A matching pattern starts after the ``pattern`` token. It is made of pattern
3762 items and is terminated by a mandatory ``end`` item.
3764 Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3765 rte_flow_item_type``).
3767 The ``/`` token is used as a separator between pattern items as shown
3770 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3772 Note that protocol items like these must be stacked from lowest to highest
3773 layer to make sense. For instance, the following rule is either invalid or
3774 unlikely to match any packet::
3776 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3778 More information on these restrictions can be found in the *rte_flow*
3781 Several items support additional specification structures, for example
3782 ``ipv4`` allows specifying source and destination addresses as follows::
3784 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3785 dst is 10.2.0.0 / end [...]
3787 This rule matches all IPv4 traffic with the specified properties.
3789 In this example, ``src`` and ``dst`` are field names of the underlying
3790 ``struct rte_flow_item_ipv4`` object. All item properties can be specified
3791 in a similar fashion.
3793 The ``is`` token means that the subsequent value must be matched exactly,
3794 and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3795 accordingly. Possible assignment tokens are:
3797 - ``is``: match value perfectly (with full bit-mask).
3798 - ``spec``: match value according to configured bit-mask.
3799 - ``last``: specify upper bound to establish a range.
3800 - ``mask``: specify bit-mask with relevant bits set to one.
3801 - ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one.
3803 These yield identical results::
3805 ipv4 src is 10.1.1.1
3809 ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3813 ipv4 src spec 10.1.1.1 src prefix 32
3817 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3821 ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3823 Inclusive ranges can be defined with ``last``::
3825 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3827 Note that ``mask`` affects both ``spec`` and ``last``::
3829 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3830 # matches 10.1.0.0 to 10.2.255.255
3832 Properties can be modified multiple times::
3834 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3838 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3843 This section lists supported pattern items and their attributes, if any.
3845 - ``end``: end list of pattern items.
3847 - ``void``: no-op pattern item.
3849 - ``invert``: perform actions when pattern does not match.
3851 - ``any``: match any protocol for the current layer.
3853 - ``num {unsigned}``: number of layers covered.
3855 - ``pf``: match traffic from/to the physical function.
3857 - ``vf``: match traffic from/to a virtual function ID.
3859 - ``id {unsigned}``: VF ID.
3861 - ``phy_port``: match traffic from/to a specific physical port.
3863 - ``index {unsigned}``: physical port index.
3865 - ``port_id``: match traffic from/to a given DPDK port ID.
3867 - ``id {unsigned}``: DPDK port ID.
3869 - ``mark``: match value set in previously matched flow rule using the mark action.
3871 - ``id {unsigned}``: arbitrary integer value.
3873 - ``raw``: match an arbitrary byte string.
3875 - ``relative {boolean}``: look for pattern after the previous item.
3876 - ``search {boolean}``: search pattern from offset (see also limit).
3877 - ``offset {integer}``: absolute or relative offset for pattern.
3878 - ``limit {unsigned}``: search area limit for start of pattern.
3879 - ``pattern {string}``: byte string to look for.
3881 - ``eth``: match Ethernet header.
3883 - ``dst {MAC-48}``: destination MAC.
3884 - ``src {MAC-48}``: source MAC.
3885 - ``type {unsigned}``: EtherType or TPID.
3887 - ``vlan``: match 802.1Q/ad VLAN tag.
3889 - ``tci {unsigned}``: tag control information.
3890 - ``pcp {unsigned}``: priority code point.
3891 - ``dei {unsigned}``: drop eligible indicator.
3892 - ``vid {unsigned}``: VLAN identifier.
3893 - ``inner_type {unsigned}``: inner EtherType or TPID.
3895 - ``ipv4``: match IPv4 header.
3897 - ``tos {unsigned}``: type of service.
3898 - ``ttl {unsigned}``: time to live.
3899 - ``proto {unsigned}``: next protocol ID.
3900 - ``src {ipv4 address}``: source address.
3901 - ``dst {ipv4 address}``: destination address.
3903 - ``ipv6``: match IPv6 header.
3905 - ``tc {unsigned}``: traffic class.
3906 - ``flow {unsigned}``: flow label.
3907 - ``proto {unsigned}``: protocol (next header).
3908 - ``hop {unsigned}``: hop limit.
3909 - ``src {ipv6 address}``: source address.
3910 - ``dst {ipv6 address}``: destination address.
3912 - ``icmp``: match ICMP header.
3914 - ``type {unsigned}``: ICMP packet type.
3915 - ``code {unsigned}``: ICMP packet code.
3917 - ``udp``: match UDP header.
3919 - ``src {unsigned}``: UDP source port.
3920 - ``dst {unsigned}``: UDP destination port.
3922 - ``tcp``: match TCP header.
3924 - ``src {unsigned}``: TCP source port.
3925 - ``dst {unsigned}``: TCP destination port.
3927 - ``sctp``: match SCTP header.
3929 - ``src {unsigned}``: SCTP source port.
3930 - ``dst {unsigned}``: SCTP destination port.
3931 - ``tag {unsigned}``: validation tag.
3932 - ``cksum {unsigned}``: checksum.
3934 - ``vxlan``: match VXLAN header.
3936 - ``vni {unsigned}``: VXLAN identifier.
3938 - ``e_tag``: match IEEE 802.1BR E-Tag header.
3940 - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3942 - ``nvgre``: match NVGRE header.
3944 - ``tni {unsigned}``: virtual subnet ID.
3946 - ``mpls``: match MPLS header.
3948 - ``label {unsigned}``: MPLS label.
3950 - ``gre``: match GRE header.
3952 - ``protocol {unsigned}``: protocol type.
3954 - ``gre_key``: match GRE optional key field.
3956 - ``value {unsigned}``: key value.
3958 - ``fuzzy``: fuzzy pattern match, expect faster than default.
3960 - ``thresh {unsigned}``: accuracy threshold.
3962 - ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3964 - ``teid {unsigned}``: tunnel endpoint identifier.
3966 - ``geneve``: match GENEVE header.
3968 - ``vni {unsigned}``: virtual network identifier.
3969 - ``protocol {unsigned}``: protocol type.
3971 - ``vxlan-gpe``: match VXLAN-GPE header.
3973 - ``vni {unsigned}``: VXLAN-GPE identifier.
3975 - ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.
3977 - ``sha {MAC-48}``: sender hardware address.
3978 - ``spa {ipv4 address}``: sender IPv4 address.
3979 - ``tha {MAC-48}``: target hardware address.
3980 - ``tpa {ipv4 address}``: target IPv4 address.
3982 - ``ipv6_ext``: match presence of any IPv6 extension header.
3984 - ``next_hdr {unsigned}``: next header.
3986 - ``icmp6``: match any ICMPv6 header.
3988 - ``type {unsigned}``: ICMPv6 type.
3989 - ``code {unsigned}``: ICMPv6 code.
3991 - ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.
3993 - ``target_addr {ipv6 address}``: target address.
3995 - ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.
3997 - ``target_addr {ipv6 address}``: target address.
3999 - ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.
4001 - ``type {unsigned}``: ND option type.
4003 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet
4004 link-layer address option.
4006 - ``sla {MAC-48}``: source Ethernet LLA.
4008 - ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet
4009 link-layer address option.
4011 - ``tla {MAC-48}``: target Ethernet LLA.
4013 - ``meta``: match application specific metadata.
4015 - ``data {unsigned}``: metadata value.
4017 - ``gtp_psc``: match GTP PDU extension header with type 0x85.
4019 - ``pdu_type {unsigned}``: PDU type.
4020 - ``qfi {unsigned}``: QoS flow identifier.
4022 - ``pppoes``, ``pppoed``: match PPPoE header.
4024 - ``session_id {unsigned}``: session identifier.
4026 - ``pppoe_proto_id``: match PPPoE session protocol identifier.
4028 - ``proto_id {unsigned}``: PPP protocol identifier.
4030 - ``l2tpv3oip``: match L2TPv3 over IP header.
4032 - ``session_id {unsigned}``: L2TPv3 over IP session identifier.
4034 - ``ah``: match AH header.
4036 - ``spi {unsigned}``: security parameters index.
4038 - ``pfcp``: match PFCP header.
4040 - ``s_field {unsigned}``: S field.
4041 - ``seid {unsigned}``: session endpoint identifier.
4046 A list of actions starts after the ``actions`` token in the same fashion as
4047 `Matching pattern`_; actions are separated by ``/`` tokens and the list is
4048 terminated by a mandatory ``end`` action.
4050 Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
4051 rte_flow_action_type``).
4053 Dropping all incoming UDPv4 packets can be expressed as follows::
4055 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
4058 Several actions have configurable properties which must be specified when
4059 there is no valid default value. For example, ``queue`` requires a target
4062 This rule redirects incoming UDPv4 traffic to queue index 6::
4064 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
4065 actions queue index 6 / end
4067 While this one could be rejected by PMDs (unspecified queue index)::
4069 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
4072 As defined by *rte_flow*, the list is not ordered, all actions of a given
4073 rule are performed simultaneously. These are equivalent::
4075 queue index 6 / void / mark id 42 / end
4079 void / mark id 42 / queue index 6 / end
4081 All actions in a list should have different types, otherwise only the last
4082 action of a given type is taken into account::
4084 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
4088 drop / drop / drop / end # drop is performed only once
4092 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
4094 Considering they are performed simultaneously, opposite and overlapping
4095 actions can sometimes be combined when the end result is unambiguous::
4097 drop / queue index 6 / end # drop has no effect
4101 queue index 6 / rss queues 6 7 8 / end # queue has no effect
4105 drop / passthru / end # drop has no effect
4107 Note that PMDs may still refuse such combinations.
4112 This section lists supported actions and their attributes, if any.
4114 - ``end``: end list of actions.
4116 - ``void``: no-op action.
4118 - ``passthru``: let subsequent rule process matched packets.
4120 - ``jump``: redirect traffic to group on device.
4122 - ``group {unsigned}``: group to redirect to.
4124 - ``mark``: attach 32 bit value to packets.
4126 - ``id {unsigned}``: 32 bit value to return with packets.
4128 - ``flag``: flag packets.
4130 - ``queue``: assign packets to a given queue index.
4132 - ``index {unsigned}``: queue index to use.
4134 - ``drop``: drop packets (note: passthru has priority).
4136 - ``count``: enable counters for this rule.
4138 - ``rss``: spread packets among several queues.
4140 - ``func {hash function}``: RSS hash function to apply, allowed tokens are
4141 the same as `set_hash_global_config`_.
4143 - ``level {unsigned}``: encapsulation level for ``types``.
4145 - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed
4146 tokens are the same as `set_hash_input_set`_, except that an empty list
4147 does not disable RSS but instead requests unspecified "best-effort"
4150 - ``key {string}``: RSS hash key, overrides ``key_len``.
4152 - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in
4153 conjunction with ``key`` to pad or truncate it.
4155 - ``queues [{unsigned} [...]] end``: queue indices to use.
4157 - ``pf``: direct traffic to physical function.
4159 - ``vf``: direct traffic to a virtual function ID.
4161 - ``original {boolean}``: use original VF ID if possible.
4162 - ``id {unsigned}``: VF ID.
4164 - ``phy_port``: direct packets to physical port index.
4166 - ``original {boolean}``: use original port index if possible.
4167 - ``index {unsigned}``: physical port index.
4169 - ``port_id``: direct matching traffic to a given DPDK port ID.
4171 - ``original {boolean}``: use original DPDK port ID if possible.
4172 - ``id {unsigned}``: DPDK port ID.
4174 - ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``.
4176 - ``mpls_ttl``: MPLS TTL.
4178 - ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``.
4180 - ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``.
4182 - ``nw_ttl``: IP TTL.
4184 - ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``.
4186 - ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``.
4188 - ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``.
4190 - ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``.
4192 - ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``.
4194 - ``ethertype``: Ethertype.
4196 - ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``.
4198 - ``vlan_vid``: VLAN id.
4200 - ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``.
4202 - ``vlan_pcp``: VLAN priority.
4204 - ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``.
4206 - ``ethertype``: Ethertype.
4208 - ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``.
4210 - ``ethertype``: Ethertype.
4212 - ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration
4213 is done through `Config VXLAN Encap outer layers`_.
4215 - ``vxlan_decap``: Performs a decapsulation action by stripping all headers of
4216 the VXLAN tunnel network overlay from the matched flow.
4218 - ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration
4219 is done through `Config NVGRE Encap outer layers`_.
4221 - ``nvgre_decap``: Performs a decapsulation action by stripping all headers of
4222 the NVGRE tunnel network overlay from the matched flow.
4224 - ``l2_encap``: Performs a L2 encapsulation, L2 configuration
4225 is done through `Config L2 Encap`_.
4227 - ``l2_decap``: Performs a L2 decapsulation, L2 configuration
4228 is done through `Config L2 Decap`_.
4230 - ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer
4231 configuration is done through `Config MPLSoGRE Encap outer layers`_.
4233 - ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer
4234 configuration is done through `Config MPLSoGRE Decap outer layers`_.
4236 - ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer
4237 configuration is done through `Config MPLSoUDP Encap outer layers`_.
4239 - ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer
4240 configuration is done through `Config MPLSoUDP Decap outer layers`_.
4242 - ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header.
4244 - ``ipv4_addr``: New IPv4 source address.
4246 - ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4
4249 - ``ipv4_addr``: New IPv4 destination address.
4251 - ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header.
4253 - ``ipv6_addr``: New IPv6 source address.
4255 - ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6
4258 - ``ipv6_addr``: New IPv6 destination address.
4260 - ``set_tp_src``: Set a new source port number in the outermost TCP/UDP
4263 - ``port``: New TCP/UDP source port number.
4265 - ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
4268 - ``port``: New TCP/UDP destination port number.
4270 - ``mac_swap``: Swap the source and destination MAC addresses in the outermost
4273 - ``dec_ttl``: Performs a decrease TTL value action
4275 - ``set_ttl``: Set TTL value with specified value
4276 - ``ttl_value {unsigned}``: The new TTL value to be set
4278 - ``set_mac_src``: set source MAC address
4280 - ``mac_addr {MAC-48}``: new source MAC address
4282 - ``set_mac_dst``: set destination MAC address
4284 - ``mac_addr {MAC-48}``: new destination MAC address
4286 - ``inc_tcp_seq``: Increase sequence number in the outermost TCP header.
4288 - ``value {unsigned}``: Value to increase TCP sequence number by.
4290 - ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header.
4292 - ``value {unsigned}``: Value to decrease TCP sequence number by.
4294 - ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP header.
4296 - ``value {unsigned}``: Value to increase TCP acknowledgment number by.
4298 - ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP header.
4300 - ``value {unsigned}``: Value to decrease TCP acknowledgment number by.
4302 - ``set_ipv4_dscp``: Set IPv4 DSCP value with specified value
4304 - ``dscp_value {unsigned}``: The new DSCP value to be set
4306 - ``set_ipv6_dscp``: Set IPv6 DSCP value with specified value
4308 - ``dscp_value {unsigned}``: The new DSCP value to be set
4310 Destroying flow rules
4311 ~~~~~~~~~~~~~~~~~~~~~
4313 ``flow destroy`` destroys one or more rules from their rule ID (as returned
4314 by ``flow create``), this command calls ``rte_flow_destroy()`` as many
4315 times as necessary::
4317 flow destroy {port_id} rule {rule_id} [...]
4319 If successful, it will show::
4321 Flow rule #[...] destroyed
4323 It does not report anything for rule IDs that do not exist. The usual error
4324 message is shown when a rule cannot be destroyed::
4326 Caught error type [...] ([...]): [...]
4328 ``flow flush`` destroys all rules on a device and does not take extra
4329 arguments. It is bound to ``rte_flow_flush()``::
4331 flow flush {port_id}
4333 Any errors are reported as above.
4335 Creating several rules and destroying them::
4337 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4338 actions queue index 2 / end
4339 Flow rule #0 created
4340 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4341 actions queue index 3 / end
4342 Flow rule #1 created
4343 testpmd> flow destroy 0 rule 0 rule 1
4344 Flow rule #1 destroyed
4345 Flow rule #0 destroyed
4348 The same result can be achieved using ``flow flush``::
4350 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4351 actions queue index 2 / end
4352 Flow rule #0 created
4353 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4354 actions queue index 3 / end
4355 Flow rule #1 created
4356 testpmd> flow flush 0
4359 Non-existent rule IDs are ignored::
4361 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4362 actions queue index 2 / end
4363 Flow rule #0 created
4364 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4365 actions queue index 3 / end
4366 Flow rule #1 created
4367 testpmd> flow destroy 0 rule 42 rule 10 rule 2
4369 testpmd> flow destroy 0 rule 0
4370 Flow rule #0 destroyed
4376 ``flow query`` queries a specific action of a flow rule having that
4377 ability. Such actions collect information that can be reported using this
4378 command. It is bound to ``rte_flow_query()``::
4380 flow query {port_id} {rule_id} {action}
4382 If successful, it will display either the retrieved data for known actions
4383 or the following message::
4385 Cannot display result for action type [...] ([...])
4387 Otherwise, it will complain either that the rule does not exist or that some
4390 Flow rule #[...] not found
4394 Caught error type [...] ([...]): [...]
4396 Currently only the ``count`` action is supported. This action reports the
4397 number of packets that hit the flow rule and the total number of bytes. Its
4398 output has the following format::
4401 hits_set: [...] # whether "hits" contains a valid value
4402 bytes_set: [...] # whether "bytes" contains a valid value
4403 hits: [...] # number of packets
4404 bytes: [...] # number of bytes
4406 Querying counters for TCPv6 packets redirected to queue 6::
4408 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
4409 actions queue index 6 / count / end
4410 Flow rule #4 created
4411 testpmd> flow query 0 4 count
4422 ``flow list`` lists existing flow rules sorted by priority and optionally
4423 filtered by group identifiers::
4425 flow list {port_id} [group {group_id}] [...]
4427 This command only fails with the following message if the device does not
4432 Output consists of a header line followed by a short description of each
4433 flow rule, one per line. There is no output at all when no flow rules are
4434 configured on the device::
4436 ID Group Prio Attr Rule
4437 [...] [...] [...] [...] [...]
4439 ``Attr`` column flags:
4441 - ``i`` for ``ingress``.
4442 - ``e`` for ``egress``.
4444 Creating several flow rules and listing them::
4446 testpmd> flow create 0 ingress pattern eth / ipv4 / end
4447 actions queue index 6 / end
4448 Flow rule #0 created
4449 testpmd> flow create 0 ingress pattern eth / ipv6 / end
4450 actions queue index 2 / end
4451 Flow rule #1 created
4452 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
4453 actions rss queues 6 7 8 end / end
4454 Flow rule #2 created
4455 testpmd> flow list 0
4456 ID Group Prio Attr Rule
4457 0 0 0 i- ETH IPV4 => QUEUE
4458 1 0 0 i- ETH IPV6 => QUEUE
4459 2 0 5 i- ETH IPV4 UDP => RSS
4462 Rules are sorted by priority (i.e. group ID first, then priority level)::
4464 testpmd> flow list 1
4465 ID Group Prio Attr Rule
4466 0 0 0 i- ETH => COUNT
4467 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4468 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4469 1 24 0 i- ETH IPV4 UDP => QUEUE
4470 4 24 10 i- ETH IPV4 TCP => DROP
4471 3 24 20 i- ETH IPV4 => DROP
4472 2 24 42 i- ETH IPV4 UDP => QUEUE
4473 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4476 Output can be limited to specific groups::
4478 testpmd> flow list 1 group 0 group 63
4479 ID Group Prio Attr Rule
4480 0 0 0 i- ETH => COUNT
4481 6 0 500 i- ETH IPV6 TCP => DROP COUNT
4482 5 0 1000 i- ETH IPV6 ICMP => QUEUE
4483 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE
4486 Toggling isolated mode
4487 ~~~~~~~~~~~~~~~~~~~~~~
4489 ``flow isolate`` can be used to tell the underlying PMD that ingress traffic
4490 must only be injected from the defined flow rules; that no default traffic
4491 is expected outside those rules and the driver is free to assign more
4492 resources to handle them. It is bound to ``rte_flow_isolate()``::
4494 flow isolate {port_id} {boolean}
4496 If successful, enabling or disabling isolated mode shows either::
4498 Ingress traffic on port [...]
4499 is now restricted to the defined flow rules
4503 Ingress traffic on port [...]
4504 is not restricted anymore to the defined flow rules
4506 Otherwise, in case of error::
4508 Caught error type [...] ([...]): [...]
4510 Mainly due to its side effects, PMDs supporting this mode may not have the
4511 ability to toggle it more than once without reinitializing affected ports
4512 first (e.g. by exiting testpmd).
4514 Enabling isolated mode::
4516 testpmd> flow isolate 0 true
4517 Ingress traffic on port 0 is now restricted to the defined flow rules
4520 Disabling isolated mode::
4522 testpmd> flow isolate 0 false
4523 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
4526 Dumping HW internal information
4527 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4529 ``flow dump`` dumps the hardware's internal representation information of
4530 all flows. It is bound to ``rte_flow_dev_dump()``::
4532 flow dump {port_id} {output_file}
4534 If successful, it will show::
4538 Otherwise, it will complain error occurred::
4540 Caught error type [...] ([...]): [...]
4542 Listing and destroying aged flow rules
4543 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4545 ``flow aged`` simply lists aged flow rules be get from api ``rte_flow_get_aged_flows``,
4546 and ``destroy`` parameter can be used to destroy those flow rules in PMD.
4548 flow aged {port_id} [destroy]
4550 Listing current aged flow rules::
4552 testpmd> flow aged 0
4553 Port 0 total aged flows: 0
4554 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.14 / end
4555 actions age timeout 5 / queue index 0 / end
4556 Flow rule #0 created
4557 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.15 / end
4558 actions age timeout 4 / queue index 0 / end
4559 Flow rule #1 created
4560 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.16 / end
4561 actions age timeout 2 / queue index 0 / end
4562 Flow rule #2 created
4563 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.17 / end
4564 actions age timeout 3 / queue index 0 / end
4565 Flow rule #3 created
4568 Aged Rules are simply list as command ``flow list {port_id}``, but strip the detail rule
4569 information, all the aged flows are sorted by the longest timeout time. For example, if
4570 those rules be configured in the same time, ID 2 will be the first aged out rule, the next
4571 will be ID 3, ID 1, ID 0::
4573 testpmd> flow aged 0
4574 Port 0 total aged flows: 4
4581 If attach ``destroy`` parameter, the command will destroy all the list aged flow rules.
4583 testpmd> flow aged 0 destroy
4584 Port 0 total aged flows: 4
4591 Flow rule #2 destroyed
4592 Flow rule #3 destroyed
4593 Flow rule #1 destroyed
4594 Flow rule #0 destroyed
4595 4 flows be destroyed
4596 testpmd> flow aged 0
4597 Port 0 total aged flows: 0
4600 Sample QinQ flow rules
4601 ~~~~~~~~~~~~~~~~~~~~~~
4603 Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
4605 testpmd> port stop 0
4606 testpmd> vlan set qinq_strip on 0
4608 The above command sets the inner and outer TPID's to 0x8100.
4610 To change the TPID's the following commands should be used::
4612 testpmd> vlan set outer tpid 0xa100 0
4613 testpmd> vlan set inner tpid 0x9100 0
4614 testpmd> port start 0
4616 Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
4620 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
4621 vlan tci is 456 / end actions vf id 1 / queue index 0 / end
4622 Flow rule #0 validated
4624 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
4625 vlan tci is 456 / end actions vf id 123 / queue index 0 / end
4626 Flow rule #0 created
4628 testpmd> flow list 0
4629 ID Group Prio Attr Rule
4630 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4632 Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
4636 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
4637 vlan tci is 654 / end actions pf / queue index 0 / end
4638 Flow rule #1 validated
4640 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
4641 vlan tci is 654 / end actions pf / queue index 1 / end
4642 Flow rule #1 created
4644 testpmd> flow list 0
4645 ID Group Prio Attr Rule
4646 0 0 0 i- ETH VLAN VLAN=>VF QUEUE
4647 1 0 0 i- ETH VLAN VLAN=>PF QUEUE
4649 Sample VXLAN encapsulation rule
4650 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4652 VXLAN encapsulation outer layer has default value pre-configured in testpmd
4653 source code, those can be changed by using the following commands
4655 IPv4 VXLAN outer header::
4657 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1
4658 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4659 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4662 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src
4663 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4664 eth-dst 22:22:22:22:22:22
4665 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4668 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0
4669 ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4670 eth-dst 22:22:22:22:22:22
4671 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4674 IPv6 VXLAN outer header::
4676 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1
4677 ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4678 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4681 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4682 ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11
4683 eth-dst 22:22:22:22:22:22
4684 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4687 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4688 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4689 eth-dst 22:22:22:22:22:22
4690 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4693 Sample NVGRE encapsulation rule
4694 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4696 NVGRE encapsulation outer layer has default value pre-configured in testpmd
4697 source code, those can be changed by using the following commands
4699 IPv4 NVGRE outer header::
4701 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1
4702 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4703 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4706 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1
4707 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4708 eth-dst 22:22:22:22:22:22
4709 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4712 IPv6 NVGRE outer header::
4714 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4715 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4716 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4719 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4720 vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4721 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4724 Sample L2 encapsulation rule
4725 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4727 L2 encapsulation has default value pre-configured in testpmd
4728 source code, those can be changed by using the following commands
4732 testpmd> set l2_encap ip-version ipv4
4733 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4734 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4735 mplsoudp_decap / l2_encap / end
4737 L2 with VXLAN header::
4739 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34
4740 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4741 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4742 mplsoudp_decap / l2_encap / end
4744 Sample L2 decapsulation rule
4745 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4747 L2 decapsulation has default value pre-configured in testpmd
4748 source code, those can be changed by using the following commands
4752 testpmd> set l2_decap
4753 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap /
4756 L2 with VXLAN header::
4758 testpmd> set l2_encap-with-vlan
4759 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap /
4762 Sample MPLSoGRE encapsulation rule
4763 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4765 MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd
4766 source code, those can be changed by using the following commands
4768 IPv4 MPLSoGRE outer header::
4770 testpmd> set mplsogre_encap ip-version ipv4 label 4
4771 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4772 eth-dst 22:22:22:22:22:22
4773 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4774 mplsogre_encap / end
4776 IPv4 MPLSoGRE with VLAN outer header::
4778 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4
4779 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4780 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4781 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4782 mplsogre_encap / end
4784 IPv6 MPLSoGRE outer header::
4786 testpmd> set mplsogre_encap ip-version ipv6 mask 4
4787 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4788 eth-dst 22:22:22:22:22:22
4789 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4790 mplsogre_encap / end
4792 IPv6 MPLSoGRE with VLAN outer header::
4794 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4
4795 ip-src ::1 ip-dst ::2222 vlan-tci 34
4796 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4797 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4798 mplsogre_encap / end
4800 Sample MPLSoGRE decapsulation rule
4801 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4803 MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd
4804 source code, those can be changed by using the following commands
4806 IPv4 MPLSoGRE outer header::
4808 testpmd> set mplsogre_decap ip-version ipv4
4809 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions
4810 mplsogre_decap / l2_encap / end
4812 IPv4 MPLSoGRE with VLAN outer header::
4814 testpmd> set mplsogre_decap-with-vlan ip-version ipv4
4815 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end
4816 actions mplsogre_decap / l2_encap / end
4818 IPv6 MPLSoGRE outer header::
4820 testpmd> set mplsogre_decap ip-version ipv6
4821 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end
4822 actions mplsogre_decap / l2_encap / end
4824 IPv6 MPLSoGRE with VLAN outer header::
4826 testpmd> set mplsogre_decap-with-vlan ip-version ipv6
4827 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end
4828 actions mplsogre_decap / l2_encap / end
4830 Sample MPLSoUDP encapsulation rule
4831 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4833 MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd
4834 source code, those can be changed by using the following commands
4836 IPv4 MPLSoUDP outer header::
4838 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10
4839 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4840 eth-dst 22:22:22:22:22:22
4841 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4842 mplsoudp_encap / end
4844 IPv4 MPLSoUDP with VLAN outer header::
4846 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5
4847 udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4848 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4849 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4850 mplsoudp_encap / end
4852 IPv6 MPLSoUDP outer header::
4854 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10
4855 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4856 eth-dst 22:22:22:22:22:22
4857 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4858 mplsoudp_encap / end
4860 IPv6 MPLSoUDP with VLAN outer header::
4862 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5
4863 udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34
4864 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4865 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4866 mplsoudp_encap / end
4868 Sample MPLSoUDP decapsulation rule
4869 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4871 MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd
4872 source code, those can be changed by using the following commands
4874 IPv4 MPLSoUDP outer header::
4876 testpmd> set mplsoudp_decap ip-version ipv4
4877 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4878 mplsoudp_decap / l2_encap / end
4880 IPv4 MPLSoUDP with VLAN outer header::
4882 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4
4883 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end
4884 actions mplsoudp_decap / l2_encap / end
4886 IPv6 MPLSoUDP outer header::
4888 testpmd> set mplsoudp_decap ip-version ipv6
4889 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end
4890 actions mplsoudp_decap / l2_encap / end
4892 IPv6 MPLSoUDP with VLAN outer header::
4894 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6
4895 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end
4896 actions mplsoudp_decap / l2_encap / end
4898 Sample Raw encapsulation rule
4899 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4901 Raw encapsulation configuration can be set by the following commands
4903 Eecapsulating VxLAN::
4905 testpmd> set raw_encap 4 eth src is 10:11:22:33:44:55 / vlan tci is 1
4906 inner_type is 0x0800 / ipv4 / udp dst is 4789 / vxlan vni
4908 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
4909 raw_encap index 4 / end
4911 Sample Raw decapsulation rule
4912 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4914 Raw decapsulation configuration can be set by the following commands
4916 Decapsulating VxLAN::
4918 testpmd> set raw_decap eth / ipv4 / udp / vxlan / end_set
4919 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 /
4920 end actions raw_decap / queue index 0 / end
4925 ESP rules can be created by the following commands::
4927 testpmd> flow create 0 ingress pattern eth / ipv4 / esp spi is 1 / end actions
4929 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp spi is 1 / end
4930 actions queue index 3 / end
4931 testpmd> flow create 0 ingress pattern eth / ipv6 / esp spi is 1 / end actions
4933 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp spi is 1 / end
4934 actions queue index 3 / end
4939 AH rules can be created by the following commands::
4941 testpmd> flow create 0 ingress pattern eth / ipv4 / ah spi is 1 / end actions
4943 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / ah spi is 1 / end
4944 actions queue index 3 / end
4945 testpmd> flow create 0 ingress pattern eth / ipv6 / ah spi is 1 / end actions
4947 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / ah spi is 1 / end
4948 actions queue index 3 / end
4953 PFCP rules can be created by the following commands(s_field need to be 1
4956 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 0 / end
4957 actions queue index 3 / end
4958 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 1
4959 seid is 1 / end actions queue index 3 / end
4960 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 0 / end
4961 actions queue index 3 / end
4962 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 1
4963 seid is 1 / end actions queue index 3 / end
4968 The following sections show functions to load/unload eBPF based filters.
4973 Load an eBPF program as a callback for particular RX/TX queue::
4975 testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename)
4977 The available load-flags are:
4979 * ``J``: use JIT generated native code, otherwise BPF interpreter will be used.
4981 * ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data.
4987 You'll need clang v3.7 or above to build bpf program you'd like to load
4991 .. code-block:: console
4994 clang -O2 -target bpf -c t1.c
4996 Then to load (and JIT compile) t1.o at RX queue 0, port 1:
4998 .. code-block:: console
5000 testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o
5002 To load (not JITed) t1.o at TX queue 0, port 0:
5004 .. code-block:: console
5006 testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o
5011 Unload previously loaded eBPF program for particular RX/TX queue::
5013 testpmd> bpf-unload rx|tx (portid) (queueid)
5015 For example to unload BPF filter from TX queue 0, port 0:
5017 .. code-block:: console
5019 testpmd> bpf-unload tx 0 0