xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision 7babda4316f937acacf37673067a2a9d42486798)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2010-2016 Intel Corporation.
3
4.. _testpmd_runtime:
5
6Testpmd Runtime Functions
7=========================
8
9Where the testpmd application is started in interactive mode, (``-i|--interactive``),
10it displays a prompt that can be used to start and stop forwarding,
11configure the application, display statistics (including the extended NIC
12statistics aka xstats) , set the Flow Director and other tasks::
13
14   testpmd>
15
16The testpmd prompt has some, limited, readline support.
17Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
18as well as access to the command history via the up-arrow.
19
20There is also support for tab completion.
21If you type a partial command and hit ``<TAB>`` you get a list of the available completions:
22
23.. code-block:: console
24
25   testpmd> show port <TAB>
26
27       info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|dcb_tc|cap X
28       info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|dcb_tc|cap all
29       stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|dcb_tc|cap X
30       stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|dcb_tc|cap all
31       ...
32
33
34.. note::
35
36   Some examples in this document are too long to fit on one line are shown wrapped at `"\\"` for display purposes::
37
38      testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
39               (pause_time) (send_xon) (port_id)
40
41In the real ``testpmd>`` prompt these commands should be on a single line.
42
43Help Functions
44--------------
45
46The testpmd has on-line help for the functions that are available at runtime.
47These are divided into sections and can be accessed using help, help section or help all:
48
49.. code-block:: console
50
51   testpmd> help
52       Help is available for the following sections:
53
54           help control                    : Start and stop forwarding.
55           help display                    : Displaying port, stats and config information.
56           help config                     : Configuration information.
57           help ports                      : Configuring ports.
58           help filters                    : Filters configuration help.
59           help traffic_management         : Traffic Management commands.
60           help devices                    : Device related commands.
61           help drivers                    : Driver specific commands.
62           help all                        : All of the above sections.
63
64Command File Functions
65----------------------
66
67To facilitate loading large number of commands or to avoid cutting and pasting where not
68practical or possible testpmd supports alternative methods for executing commands.
69
70* If started with the ``--cmdline-file=FILENAME`` command line argument testpmd
71  will execute all CLI commands contained within the file immediately before
72  starting packet forwarding or entering interactive mode.
73
74.. code-block:: console
75
76   ./dpdk-testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt
77   Interactive-mode selected
78   CLI commands to be read from /home/ubuntu/flow-create-commands.txt
79   Configuring Port 0 (socket 0)
80   Port 0: 7C:FE:90:CB:74:CE
81   Configuring Port 1 (socket 0)
82   Port 1: 7C:FE:90:CB:74:CA
83   Checking link statuses...
84   Port 0 Link Up - speed 10000 Mbps - full-duplex
85   Port 1 Link Up - speed 10000 Mbps - full-duplex
86   Done
87   Flow rule #0 created
88   Flow rule #1 created
89   ...
90   ...
91   Flow rule #498 created
92   Flow rule #499 created
93   Read all CLI commands from /home/ubuntu/flow-create-commands.txt
94   testpmd>
95
96
97* At run-time additional commands can be loaded in bulk by invoking the ``load FILENAME``
98  command.
99
100.. code-block:: console
101
102   testpmd> load /home/ubuntu/flow-create-commands.txt
103   Flow rule #0 created
104   Flow rule #1 created
105   ...
106   ...
107   Flow rule #498 created
108   Flow rule #499 created
109   Read all CLI commands from /home/ubuntu/flow-create-commands.txt
110   testpmd>
111
112
113In all cases output from any included command will be displayed as standard output.
114Execution will continue until the end of the file is reached regardless of
115whether any errors occur.  The end user must examine the output to determine if
116any failures occurred.
117
118
119Control Functions
120-----------------
121
122start
123~~~~~
124
125Start packet forwarding with current configuration::
126
127   testpmd> start
128
129start tx_first
130~~~~~~~~~~~~~~
131
132Start packet forwarding with current configuration after sending specified number of bursts of packets::
133
134   testpmd> start tx_first (""|burst_num)
135
136The default burst number is 1 when ``burst_num`` not presented.
137
138stop
139~~~~
140
141Stop packet forwarding, and display accumulated statistics::
142
143   testpmd> stop
144
145quit
146~~~~
147
148Quit to prompt::
149
150   testpmd> quit
151
152
153Display Functions
154-----------------
155
156The functions in the following sections are used to display information about the
157testpmd configuration or the NIC status.
158
159show port
160~~~~~~~~~
161
162Display information for a given port or all ports::
163
164   testpmd> show port (info|summary|stats|xstats|fdir|dcb_tc|cap) (port_id|all)
165
166The available information categories are:
167
168* ``info``: General port information such as MAC address.
169
170* ``summary``: Brief port summary such as Device Name, Driver Name etc.
171
172* ``stats``: RX/TX statistics.
173
174* ``xstats``: RX/TX extended NIC statistics.
175
176* ``fdir``: Flow Director information and statistics.
177
178* ``dcb_tc``: DCB information such as TC mapping.
179
180For example:
181
182.. code-block:: console
183
184   testpmd> show port info 0
185
186   ********************* Infos for port 0 *********************
187
188   MAC address: XX:XX:XX:XX:XX:XX
189   Connect to socket: 0
190   memory allocation on the socket: 0
191   Link status: up
192   Link speed: 40000 Mbps
193   Link duplex: full-duplex
194   Promiscuous mode: enabled
195   Allmulticast mode: disabled
196   Maximum number of MAC addresses: 64
197   Maximum number of MAC addresses of hash filtering: 0
198   VLAN offload:
199       strip on, filter on, extend off, qinq strip off
200   Redirection table size: 512
201   Supported flow types:
202     ipv4-frag
203     ipv4-tcp
204     ipv4-udp
205     ipv4-sctp
206     ipv4-other
207     ipv6-frag
208     ipv6-tcp
209     ipv6-udp
210     ipv6-sctp
211     ipv6-other
212     l2_payload
213     port
214     vxlan
215     geneve
216     nvgre
217     vxlan-gpe
218
219show port (module_eeprom|eeprom)
220~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
221
222Display the EEPROM information of a port::
223
224   testpmd> show port (port_id) (module_eeprom|eeprom)
225
226show port rss reta
227~~~~~~~~~~~~~~~~~~
228
229Display the rss redirection table entry indicated by masks on port X::
230
231   testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
232
233size is used to indicate the hardware supported reta size
234
235show port rss-hash
236~~~~~~~~~~~~~~~~~~
237
238Display the RSS hash functions and RSS hash key of a port::
239
240   testpmd> show port (port_id) rss-hash [key]
241
242clear port
243~~~~~~~~~~
244
245Clear the port statistics and forward engine statistics for a given port or for all ports::
246
247   testpmd> clear port (info|stats|xstats|fdir) (port_id|all)
248
249For example::
250
251   testpmd> clear port stats all
252
253show (rxq|txq)
254~~~~~~~~~~~~~~
255
256Display information for a given port's RX/TX queue::
257
258   testpmd> show (rxq|txq) info (port_id) (queue_id)
259
260show desc status(rxq|txq)
261~~~~~~~~~~~~~~~~~~~~~~~~~
262
263Display information for a given port's RX/TX descriptor status::
264
265   testpmd> show port (port_id) (rxq|txq) (queue_id) desc (desc_id) status
266
267show rxq desc used count
268~~~~~~~~~~~~~~~~~~~~~~~~
269
270Display the number of receive packet descriptors currently filled by hardware
271and ready to be processed by the driver on a given RX queue::
272
273   testpmd> show port (port_id) rxq (queue_id) desc used count
274
275show config
276~~~~~~~~~~~
277
278Displays the configuration of the application.
279The configuration comes from the command-line, the runtime or the application defaults::
280
281   testpmd> show config (rxtx|cores|fwd|rxoffs|rxpkts|txpkts|txtimes)
282
283The available information categories are:
284
285* ``rxtx``: RX/TX configuration items.
286
287* ``cores``: List of forwarding cores.
288
289* ``fwd``: Packet forwarding configuration.
290
291* ``rxoffs``: Packet offsets for RX split.
292
293* ``rxpkts``: Packets to RX split configuration.
294
295* ``txpkts``: Packets to TX configuration.
296
297* ``txtimes``: Burst time pattern for Tx only mode.
298
299For example:
300
301.. code-block:: console
302
303   testpmd> show config rxtx
304
305   io packet forwarding - CRC stripping disabled - packets/burst=16
306   nb forwarding cores=2 - nb forwarding ports=1
307   RX queues=1 - RX desc=128 - RX free threshold=0
308   RX threshold registers: pthresh=8 hthresh=8 wthresh=4
309   TX queues=1 - TX desc=512 - TX free threshold=0
310   TX threshold registers: pthresh=36 hthresh=0 wthresh=0
311   TX RS bit threshold=0 - TXQ flags=0x0
312
313set fwd
314~~~~~~~
315
316Set the packet forwarding mode::
317
318   testpmd> set fwd (io|mac|macswap|flowgen| \
319                     rxonly|txonly|csum|icmpecho|noisy|5tswap|shared-rxq) (""|retry)
320
321``retry`` can be specified for forwarding engines except ``rx_only``.
322
323The available information categories are:
324
325* ``io``: Forwards packets "as-is" in I/O mode.
326  This is the fastest possible forwarding operation as it does not access packets data.
327  This is the default mode.
328
329* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
330  Default application behavior is to set source Ethernet address to that of the transmitting interface, and destination
331  address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
332  'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
333
334* ``macswap``: MAC swap forwarding mode.
335  Swaps the source and the destination Ethernet addresses of packets before forwarding them.
336
337* ``flowgen``: Multi-flow generation mode.
338  Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
339
340* ``rxonly``: Receives packets but doesn't transmit them.
341
342* ``txonly``: Generates and transmits packets without receiving any.
343
344* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
345
346* ``icmpecho``: Receives a burst of packets, lookup for ICMP echo requests and, if any, send back ICMP echo replies.
347
348* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX.
349
350* ``noisy``: Noisy neighbor simulation.
351  Simulate more realistic behavior of a guest machine engaged in receiving
352  and sending packets performing Virtual Network Function (VNF).
353
354* ``5tswap``: Swap the source and destination of L2,L3,L4 if they exist.
355
356  L2 swaps the source address and destination address of Ethernet, as same as ``macswap``.
357
358  L3 swaps the source address and destination address of IP (v4 and v6).
359
360  L4 swaps the source port and destination port of transport layer (TCP and UDP).
361
362* ``shared-rxq``: Receive only for shared Rx queue.
363  Resolve packet source port from mbuf and update stream statistics accordingly.
364
365Example::
366
367   testpmd> set fwd rxonly
368
369   Set rxonly packet forwarding mode
370
371
372show fwd
373~~~~~~~~
374
375When running, forwarding engines maintain statistics from the time they have been started.
376Example for the io forwarding engine, with some packet drops on the tx side::
377
378   testpmd> show fwd stats all
379
380     ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 1/Queue= 0 -------
381     RX-packets: 274293770      TX-packets: 274293642      TX-dropped: 128
382
383     ------- Forward Stats for RX Port= 1/Queue= 0 -> TX Port= 0/Queue= 0 -------
384     RX-packets: 274301850      TX-packets: 274301850      TX-dropped: 0
385
386     ---------------------- Forward statistics for port 0  ----------------------
387     RX-packets: 274293802      RX-dropped: 0             RX-total: 274293802
388     TX-packets: 274301862      TX-dropped: 0             TX-total: 274301862
389     ----------------------------------------------------------------------------
390
391     ---------------------- Forward statistics for port 1  ----------------------
392     RX-packets: 274301894      RX-dropped: 0             RX-total: 274301894
393     TX-packets: 274293706      TX-dropped: 128           TX-total: 274293834
394     ----------------------------------------------------------------------------
395
396     +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
397     RX-packets: 548595696      RX-dropped: 0             RX-total: 548595696
398     TX-packets: 548595568      TX-dropped: 128           TX-total: 548595696
399     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
400
401
402clear fwd
403~~~~~~~~~
404
405Clear the forwarding engines statistics::
406
407   testpmd> clear fwd stats all
408
409read rxd
410~~~~~~~~
411
412Display an RX descriptor for a port RX queue::
413
414   testpmd> read rxd (port_id) (queue_id) (rxd_id)
415
416For example::
417
418   testpmd> read rxd 0 0 4
419        0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
420
421read txd
422~~~~~~~~
423
424Display a TX descriptor for a port TX queue::
425
426   testpmd> read txd (port_id) (queue_id) (txd_id)
427
428For example::
429
430   testpmd> read txd 0 0 4
431        0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
432
433show vf stats
434~~~~~~~~~~~~~
435
436Display VF statistics::
437
438   testpmd> show vf stats (port_id) (vf_id)
439
440clear vf stats
441~~~~~~~~~~~~~~
442
443Reset VF statistics::
444
445   testpmd> clear vf stats (port_id) (vf_id)
446
447show rx offloading capabilities
448~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
449
450List all per queue and per port Rx offloading capabilities of a port::
451
452   testpmd> show port (port_id) rx_offload capabilities
453
454show rx offloading configuration
455~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
456
457List port level and all queue level Rx offloading configuration::
458
459   testpmd> show port (port_id) rx_offload configuration
460
461show tx offloading capabilities
462~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
463
464List all per queue and per port Tx offloading capabilities of a port::
465
466   testpmd> show port (port_id) tx_offload capabilities
467
468show tx offloading configuration
469~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
470
471List port level and all queue level Tx offloading configuration::
472
473   testpmd> show port (port_id) tx_offload configuration
474
475show tx metadata setting
476~~~~~~~~~~~~~~~~~~~~~~~~
477
478Show Tx metadata value set for a specific port::
479
480   testpmd> show port (port_id) tx_metadata
481
482show port supported ptypes
483~~~~~~~~~~~~~~~~~~~~~~~~~~
484
485Show ptypes supported for a specific port::
486
487   testpmd> show port (port_id) ptypes
488
489set port supported ptypes
490~~~~~~~~~~~~~~~~~~~~~~~~~
491
492set packet types classification for a specific port::
493
494   testpmd> set port (port_id) ptypes_mask (mask)
495
496show port mac addresses info
497~~~~~~~~~~~~~~~~~~~~~~~~~~~~
498
499Show mac addresses added for a specific port::
500
501   testpmd> show port (port_id) macs
502
503
504show port multicast mac addresses info
505~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
506
507Show multicast mac addresses added for a specific port::
508
509   testpmd> show port (port_id) mcast_macs
510
511show flow transfer proxy port ID for the given port
512~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
513
514Show proxy port ID to use as the 1st argument in commands to
515manage ``transfer`` flows and their indirect components.
516::
517
518   testpmd> show port (port_id) flow transfer proxy
519
520show device info
521~~~~~~~~~~~~~~~~
522
523Show general information about devices probed::
524
525   testpmd> show device info (<identifier>|all)
526
527For example:
528
529.. code-block:: console
530
531    testpmd> show device info net_pcap0
532
533    ********************* Infos for device net_pcap0 *********************
534    Bus name: vdev
535    Driver name: net_pcap
536    Devargs: iface=enP2p6s0,phy_mac=1
537    Connect to socket: -1
538
539            Port id: 2
540            MAC address: 1E:37:93:28:04:B8
541            Device name: net_pcap0
542
543dump physmem
544~~~~~~~~~~~~
545
546Dumps all physical memory segment layouts::
547
548   testpmd> dump_physmem
549
550dump memzone
551~~~~~~~~~~~~
552
553Dumps the layout of all memory zones::
554
555   testpmd> dump_memzone
556
557dump socket memory
558~~~~~~~~~~~~~~~~~~
559
560Dumps the memory usage of all sockets::
561
562   testpmd> dump_socket_mem
563
564dump struct size
565~~~~~~~~~~~~~~~~
566
567Dumps the size of all memory structures::
568
569   testpmd> dump_struct_sizes
570
571dump ring
572~~~~~~~~~
573
574Dumps the status of all or specific element in DPDK rings::
575
576   testpmd> dump_ring [ring_name]
577
578dump mempool
579~~~~~~~~~~~~
580
581Dumps the statistics of all or specific memory pool::
582
583   testpmd> dump_mempool [mempool_name]
584
585dump devargs
586~~~~~~~~~~~~
587
588Dumps the user device list::
589
590   testpmd> dump_devargs
591
592dump log types
593~~~~~~~~~~~~~~
594
595Dumps the log level for all the dpdk modules::
596
597   testpmd> dump_log_types
598
599show (raw_encap|raw_decap)
600~~~~~~~~~~~~~~~~~~~~~~~~~~
601
602Display content of raw_encap/raw_decap buffers in hex::
603
604  testpmd> show <raw_encap|raw_decap> <index>
605  testpmd> show <raw_encap|raw_decap> all
606
607For example::
608
609  testpmd> show raw_encap 6
610
611  index: 6 at [0x1c565b0], len=50
612  00000000: 00 00 00 00 00 00 16 26 36 46 56 66 08 00 45 00 | .......&6FVf..E.
613  00000010: 00 00 00 00 00 00 00 11 00 00 C0 A8 01 06 C0 A8 | ................
614  00000020: 03 06 00 00 00 FA 00 00 00 00 08 00 00 00 00 00 | ................
615  00000030: 06 00                                           | ..
616
617show fec capabilities
618~~~~~~~~~~~~~~~~~~~~~
619
620Show fec capabilities of a port::
621
622  testpmd> show port (port_id) fec capabilities
623
624show fec mode
625~~~~~~~~~~~~~
626
627Show fec mode of a port::
628
629  testpmd> show port (port_id) fec_mode
630
631
632Configuration Functions
633-----------------------
634
635The testpmd application can be configured from the runtime as well as from the command-line.
636
637This section details the available configuration functions that are available.
638
639.. note::
640
641   Configuration changes only become active when forwarding is started/restarted.
642
643set default
644~~~~~~~~~~~
645
646Reset forwarding to the default configuration::
647
648   testpmd> set default
649
650set verbose
651~~~~~~~~~~~
652
653Set the debug verbosity level::
654
655   testpmd> set verbose (level)
656
657Available levels are as following:
658
659* ``0`` silent except for error.
660* ``1`` fully verbose except for Tx packets.
661* ``2`` fully verbose except for Rx packets.
662* ``> 2`` fully verbose.
663
664set log
665~~~~~~~
666
667Set the log level for a log type::
668
669	testpmd> set log global|(type) (level)
670
671Where:
672
673* ``type`` is the log name.
674
675* ``level`` is the log level.
676
677For example, to change the global log level::
678
679	testpmd> set log global (level)
680
681Regexes can also be used for type. To change log level of user1, user2 and user3::
682
683	testpmd> set log user[1-3] (level)
684
685set nbport
686~~~~~~~~~~
687
688Set the number of ports used by the application:
689
690set nbport (num)
691
692This is equivalent to the ``--nb-ports`` command-line option.
693
694set nbcore
695~~~~~~~~~~
696
697Set the number of cores used by the application::
698
699   testpmd> set nbcore (num)
700
701This is equivalent to the ``--nb-cores`` command-line option.
702
703.. note::
704
705   The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
706
707set coremask
708~~~~~~~~~~~~
709
710Set the forwarding cores hexadecimal mask::
711
712   testpmd> set coremask (mask)
713
714This is equivalent to the ``--coremask`` command-line option.
715
716.. note::
717
718   The main lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
719
720set portmask
721~~~~~~~~~~~~
722
723Set the forwarding ports hexadecimal mask::
724
725   testpmd> set portmask (mask)
726
727This is equivalent to the ``--portmask`` command-line option.
728
729set record-core-cycles
730~~~~~~~~~~~~~~~~~~~~~~
731
732Set the recording of CPU cycles::
733
734   testpmd> set record-core-cycles (on|off)
735
736Where:
737
738* ``on`` enables measurement of CPU cycles per packet.
739
740* ``off`` disables measurement of CPU cycles per packet.
741
742This is equivalent to the ``--record-core-cycles command-line`` option.
743
744set record-burst-stats
745~~~~~~~~~~~~~~~~~~~~~~
746
747Set the displaying of RX and TX bursts::
748
749   testpmd> set record-burst-stats (on|off)
750
751Where:
752
753* ``on`` enables display of RX and TX bursts.
754
755* ``off`` disables display of RX and TX bursts.
756
757This is equivalent to the ``--record-burst-stats command-line`` option.
758
759set burst
760~~~~~~~~~
761
762Set number of packets per burst::
763
764   testpmd> set burst (num)
765
766This is equivalent to the ``--burst command-line`` option.
767
768When retry is enabled, the transmit delay time and number of retries can also be set::
769
770   testpmd> set burst tx delay (microseconds) retry (num)
771
772set rxoffs
773~~~~~~~~~~
774
775Set the offsets of segments relating to the data buffer beginning on receiving
776if split feature is engaged. Affects only the queues configured with split
777offloads (currently BUFFER_SPLIT is supported only).
778
779   testpmd> set rxoffs (x[,y]*)
780
781Where x[,y]* represents a CSV list of values, without white space. If the list
782of offsets is shorter than the list of segments the zero offsets will be used
783for the remaining segments.
784
785set rxpkts
786~~~~~~~~~~
787
788Set the length of segments to scatter packets on receiving if split
789feature is engaged. Affects only the queues configured with split offloads
790(currently BUFFER_SPLIT is supported only). Optionally the multiple memory
791pools can be specified with --mbuf-size command line parameter and the mbufs
792to receive will be allocated sequentially from these extra memory pools (the
793mbuf for the first segment is allocated from the first pool, the second one
794from the second pool, and so on, if segment number is greater then pool's the
795mbuf for remaining segments will be allocated from the last valid pool).
796
797   testpmd> set rxpkts (x[,y]*)
798
799Where x[,y]* represents a CSV list of values, without white space. Zero value
800means to use the corresponding memory pool data buffer size.
801
802set txpkts
803~~~~~~~~~~
804
805Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
806
807   testpmd> set txpkts (x[,y]*)
808
809Where x[,y]* represents a CSV list of values, without white space.
810
811set txtimes
812~~~~~~~~~~~
813
814Configure the timing burst pattern for Tx only mode. This command enables
815the packet send scheduling on dynamic timestamp mbuf field and configures
816timing pattern in Tx only mode. In this mode, if scheduling is enabled
817application provides timestamps in the packets being sent. It is possible
818to configure delay (in unspecified device clock units) between bursts
819and between the packets within the burst::
820
821   testpmd> set txtimes (inter),(intra)
822
823where:
824
825* ``inter``  is the delay between the bursts in the device clock units.
826  If ``intra`` is zero, this is the time between the beginnings of the
827  first packets in the neighbour bursts, if ``intra`` is not zero,
828  ``inter`` specifies the time between the beginning of the first packet
829  of the current burst and the beginning of the last packet of the
830  previous burst. If ``inter`` parameter is zero the send scheduling
831  on timestamps is disabled (default).
832
833* ``intra`` is the delay between the packets within the burst specified
834  in the device clock units. The number of packets in the burst is defined
835  by regular burst setting. If ``intra`` parameter is zero no timestamps
836  provided in the packets excepting the first one in the burst.
837
838As the result the bursts of packet will be transmitted with specific
839delays between the packets within the burst and specific delay between
840the bursts. The rte_eth_read_clock() must be supported by the device(s)
841and is supposed to be engaged to get the current device clock value
842and provide the reference for the timestamps. If there is no supported
843rte_eth_read_clock() there will be no send scheduling provided on the port.
844
845set txsplit
846~~~~~~~~~~~
847
848Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
849
850   testpmd> set txsplit (off|on|rand)
851
852Where:
853
854* ``off`` disable packet copy & split for CSUM mode.
855
856* ``on`` split outgoing packet into multiple segments. Size of each segment
857  and number of segments per packet is determined by ``set txpkts`` command
858  (see above).
859
860* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
861
862set corelist
863~~~~~~~~~~~~
864
865Set the list of forwarding cores::
866
867   testpmd> set corelist (x[,y]*)
868
869For example, to change the forwarding cores:
870
871.. code-block:: console
872
873   testpmd> set corelist 3,1
874   testpmd> show config fwd
875
876   io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
877   Logical Core 3 (socket 0) forwards packets on 1 streams:
878   RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
879   Logical Core 1 (socket 0) forwards packets on 1 streams:
880   RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
881
882.. note::
883
884   The cores are used in the same order as specified on the command line.
885
886set portlist
887~~~~~~~~~~~~
888
889Set the list of forwarding ports::
890
891   testpmd> set portlist (x[,y]*)
892
893For example, to change the port forwarding:
894
895.. code-block:: console
896
897   testpmd> set portlist 0,2,1,3
898   testpmd> show config fwd
899
900   io packet forwarding - ports=4 - cores=1 - streams=4
901   Logical Core 3 (socket 0) forwards packets on 4 streams:
902   RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
903   RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
904   RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
905   RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
906
907set port setup on
908~~~~~~~~~~~~~~~~~
909
910Select how to retrieve new ports created after "port attach" command::
911
912   testpmd> set port setup on (iterator|event)
913
914For each new port, a setup is done.
915It will find the probed ports via RTE_ETH_FOREACH_MATCHING_DEV loop
916in iterator mode, or via RTE_ETH_EVENT_NEW in event mode.
917
918set tx loopback
919~~~~~~~~~~~~~~~
920
921Enable/disable tx loopback::
922
923   testpmd> set tx loopback (port_id) (on|off)
924
925set drop enable
926~~~~~~~~~~~~~~~
927
928set drop enable bit for all queues::
929
930   testpmd> set all queues drop (port_id) (on|off)
931
932set mac antispoof (for VF)
933~~~~~~~~~~~~~~~~~~~~~~~~~~
934
935Set mac antispoof for a VF from the PF::
936
937   testpmd> set vf mac antispoof  (port_id) (vf_id) (on|off)
938
939vlan set stripq
940~~~~~~~~~~~~~~~
941
942Set the VLAN strip for a queue on a port::
943
944   testpmd> vlan set stripq (on|off) (port_id,queue_id)
945
946vlan set stripq (for VF)
947~~~~~~~~~~~~~~~~~~~~~~~~
948
949Set VLAN strip for all queues in a pool for a VF from the PF::
950
951   testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
952
953vlan set insert (for VF)
954~~~~~~~~~~~~~~~~~~~~~~~~
955
956Set VLAN insert for a VF from the PF::
957
958   testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
959
960vlan set antispoof (for VF)
961~~~~~~~~~~~~~~~~~~~~~~~~~~~
962
963Set VLAN antispoof for a VF from the PF::
964
965   testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
966
967vlan set (strip|filter|qinq_strip|extend)
968~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
969Set the VLAN strip/filter/QinQ strip/extend on for a port::
970
971   testpmd> vlan set (strip|filter|qinq_strip|extend) (on|off) (port_id)
972
973vlan set tpid
974~~~~~~~~~~~~~
975
976Set the inner or outer VLAN TPID for packet filtering on a port::
977
978   testpmd> vlan set (inner|outer) tpid (value) (port_id)
979
980.. note::
981
982   TPID value must be a 16-bit number (value <= 65536).
983
984rx_vlan add
985~~~~~~~~~~~
986
987Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
988
989   testpmd> rx_vlan add (vlan_id|all) (port_id)
990
991.. note::
992
993   VLAN filter must be set on that port. VLAN ID < 4096.
994   Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
995   in VFTA table. This is important if enabling all vlan_ids.
996
997rx_vlan rm
998~~~~~~~~~~
999
1000Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
1001
1002   testpmd> rx_vlan rm (vlan_id|all) (port_id)
1003
1004rx_vlan add (for VF)
1005~~~~~~~~~~~~~~~~~~~~
1006
1007Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
1008
1009   testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
1010
1011rx_vlan rm (for VF)
1012~~~~~~~~~~~~~~~~~~~
1013
1014Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
1015
1016   testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
1017
1018rx_vxlan_port add
1019~~~~~~~~~~~~~~~~~
1020
1021Add an UDP port for VXLAN packet filter on a port::
1022
1023   testpmd> rx_vxlan_port add (udp_port) (port_id)
1024
1025rx_vxlan_port remove
1026~~~~~~~~~~~~~~~~~~~~
1027
1028Remove an UDP port for VXLAN packet filter on a port::
1029
1030   testpmd> rx_vxlan_port rm (udp_port) (port_id)
1031
1032tx_vlan set
1033~~~~~~~~~~~
1034
1035Set hardware insertion of VLAN IDs in packets sent on a port::
1036
1037   testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
1038
1039For example, set a single VLAN ID (5) insertion on port 0::
1040
1041   tx_vlan set 0 5
1042
1043Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
1044
1045   tx_vlan set 1 2 3
1046
1047
1048tx_vlan set pvid
1049~~~~~~~~~~~~~~~~
1050
1051Set port based hardware insertion of VLAN ID in packets sent on a port::
1052
1053   testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
1054
1055tx_vlan reset
1056~~~~~~~~~~~~~
1057
1058Disable hardware insertion of a VLAN header in packets sent on a port::
1059
1060   testpmd> tx_vlan reset (port_id)
1061
1062csum set
1063~~~~~~~~
1064
1065Select hardware or software calculation of the checksum when
1066transmitting a packet using the ``csum`` forwarding engine::
1067
1068   testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)
1069
1070Where:
1071
1072* ``ip|udp|tcp|sctp`` always relate to  the inner layer.
1073
1074* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
1075  as a tunnel packet by the forwarding engine (geneve, gre, gtp, ipip, vxlan and vxlan-gpe are
1076  supported). See also the ``csum parse-tunnel`` command.
1077
1078* ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized
1079  as a tunnel packet by the forwarding engine (geneve, gtp, vxlan and vxlan-gpe are
1080  supported). See also the ``csum parse-tunnel`` command.
1081
1082.. note::
1083
1084   Check the NIC Datasheet for hardware limits.
1085
1086csum parse-tunnel
1087~~~~~~~~~~~~~~~~~
1088
1089Define how tunneled packets should be handled by the csum forward
1090engine::
1091
1092   testpmd> csum parse-tunnel (on|off) (tx_port_id)
1093
1094If enabled, the csum forward engine will try to recognize supported
1095tunnel headers (geneve, gtp, gre, ipip, vxlan, vxlan-gpe).
1096
1097If disabled, treat tunnel packets as non-tunneled packets (a inner
1098header is handled as a packet payload).
1099
1100.. note::
1101
1102   The port argument is the TX port like in the ``csum set`` command.
1103
1104Example:
1105
1106Consider a packet in packet like the following::
1107
1108   eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
1109
1110* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
1111  command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
1112  ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``).
1113
1114* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum  set``
1115   command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
1116
1117csum show
1118~~~~~~~~~
1119
1120Display tx checksum offload configuration::
1121
1122   testpmd> csum show (port_id)
1123
1124tso set
1125~~~~~~~
1126
1127Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
1128
1129   testpmd> tso set (segsize) (port_id)
1130
1131.. note::
1132
1133   Check the NIC datasheet for hardware limits.
1134
1135tso show
1136~~~~~~~~
1137
1138Display the status of TCP Segmentation Offload::
1139
1140   testpmd> tso show (port_id)
1141
1142tunnel tso set
1143~~~~~~~~~~~~~~
1144
1145Set tso segment size of tunneled packets for a port in csum engine::
1146
1147   testpmd> tunnel_tso set (tso_segsz) (port_id)
1148
1149tunnel tso show
1150~~~~~~~~~~~~~~~
1151
1152Display the status of tunneled TCP Segmentation Offload for a port::
1153
1154   testpmd> tunnel_tso show (port_id)
1155
1156set port - gro
1157~~~~~~~~~~~~~~
1158
1159Enable or disable GRO in ``csum`` forwarding engine::
1160
1161   testpmd> set port <port_id> gro on|off
1162
1163If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
1164packets received from the given port.
1165
1166If disabled, packets received from the given port won't be performed
1167GRO. By default, GRO is disabled for all ports.
1168
1169.. note::
1170
1171   When enable GRO for a port, TCP/IPv4 packets received from the port
1172   will be performed GRO. After GRO, all merged packets have bad
1173   checksums, since the GRO library doesn't re-calculate checksums for
1174   the merged packets. Therefore, if users want the merged packets to
1175   have correct checksums, please select HW IP checksum calculation and
1176   HW TCP checksum calculation for the port which the merged packets are
1177   transmitted to.
1178
1179show port - gro
1180~~~~~~~~~~~~~~~
1181
1182Display GRO configuration for a given port::
1183
1184   testpmd> show port <port_id> gro
1185
1186set gro flush
1187~~~~~~~~~~~~~
1188
1189Set the cycle to flush the GROed packets from reassembly tables::
1190
1191   testpmd> set gro flush <cycles>
1192
1193When enable GRO, the csum forwarding engine performs GRO on received
1194packets, and the GROed packets are stored in reassembly tables. Users
1195can use this command to determine when the GROed packets are flushed
1196from the reassembly tables.
1197
1198The ``cycles`` is measured in GRO operation times. The csum forwarding
1199engine flushes the GROed packets from the tables every ``cycles`` GRO
1200operations.
1201
1202By default, the value of ``cycles`` is 1, which means flush GROed packets
1203from the reassembly tables as soon as one GRO operation finishes. The value
1204of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1205
1206Please note that the large value of ``cycles`` may cause the poor TCP/IP
1207stack performance. Because the GROed packets are delayed to arrive the
1208stack, thus causing more duplicated ACKs and TCP retransmissions.
1209
1210set port - gso
1211~~~~~~~~~~~~~~
1212
1213Toggle per-port GSO support in ``csum`` forwarding engine::
1214
1215   testpmd> set port <port_id> gso on|off
1216
1217If enabled, the csum forwarding engine will perform GSO on supported IPv4
1218packets, transmitted on the given port.
1219
1220If disabled, packets transmitted on the given port will not undergo GSO.
1221By default, GSO is disabled for all ports.
1222
1223.. note::
1224
1225   When GSO is enabled on a port, supported IPv4 packets transmitted on that
1226   port undergo GSO. Afterwards, the segmented packets are represented by
1227   multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1228   of checksums for GSO'd segments in SW. As a result, if users want correct
1229   checksums in GSO segments, they should enable HW checksum calculation for
1230   GSO-enabled ports.
1231
1232   For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1233   by setting the following options in the csum forwarding engine:
1234
1235   testpmd> csum set outer_ip hw <port_id>
1236
1237   testpmd> csum set ip hw <port_id>
1238
1239   testpmd> csum set tcp hw <port_id>
1240
1241   UDP GSO is the same as IP fragmentation, which treats the UDP header
1242   as the payload and does not modify it during segmentation. That is,
1243   after UDP GSO, only the first output fragment has the original UDP
1244   header. Therefore, users need to enable HW IP checksum calculation
1245   and SW UDP checksum calculation for GSO-enabled ports, if they want
1246   correct checksums for UDP/IPv4 packets.
1247
1248set gso segsz
1249~~~~~~~~~~~~~
1250
1251Set the maximum GSO segment size (measured in bytes), which includes the
1252packet header and the packet payload for GSO-enabled ports (global)::
1253
1254   testpmd> set gso segsz <length>
1255
1256show port - gso
1257~~~~~~~~~~~~~~~
1258
1259Display the status of Generic Segmentation Offload for a given port::
1260
1261   testpmd> show port <port_id> gso
1262
1263mac_addr add
1264~~~~~~~~~~~~
1265
1266Add an alternative MAC address to a port::
1267
1268   testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1269
1270mac_addr remove
1271~~~~~~~~~~~~~~~
1272
1273Remove a MAC address from a port::
1274
1275   testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1276
1277mcast_addr add
1278~~~~~~~~~~~~~~
1279
1280To add the multicast MAC address to/from the set of multicast addresses
1281filtered by port::
1282
1283   testpmd> mcast_addr add (port_id) (mcast_addr)
1284
1285mcast_addr remove
1286~~~~~~~~~~~~~~~~~
1287
1288To remove the multicast MAC address to/from the set of multicast addresses
1289filtered by port::
1290
1291   testpmd> mcast_addr remove (port_id) (mcast_addr)
1292
1293mac_addr add (for VF)
1294~~~~~~~~~~~~~~~~~~~~~
1295
1296Add an alternative MAC address for a VF to a port::
1297
1298   testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1299
1300mac_addr set
1301~~~~~~~~~~~~
1302
1303Set the default MAC address for a port::
1304
1305   testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1306
1307mac_addr set (for VF)
1308~~~~~~~~~~~~~~~~~~~~~
1309
1310Set the MAC address for a VF from the PF::
1311
1312   testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1313
1314set eth-peer
1315~~~~~~~~~~~~
1316
1317Set the forwarding peer address for certain port::
1318
1319   testpmd> set eth-peer (port_id) (peer_addr)
1320
1321This is equivalent to the ``--eth-peer`` command-line option.
1322
1323set port-uta
1324~~~~~~~~~~~~
1325
1326Set the unicast hash filter(s) on/off for a port::
1327
1328   testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1329
1330set promisc
1331~~~~~~~~~~~
1332
1333Set the promiscuous mode on for a port or for all ports.
1334In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1335
1336   testpmd> set promisc (port_id|all) (on|off)
1337
1338set allmulti
1339~~~~~~~~~~~~
1340
1341Set the allmulti mode for a port or for all ports::
1342
1343   testpmd> set allmulti (port_id|all) (on|off)
1344
1345Same as the ifconfig (8) option. Controls how multicast packets are handled.
1346
1347set flow_ctrl rx
1348~~~~~~~~~~~~~~~~
1349
1350Set the link flow control parameter on a port::
1351
1352   testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1353            (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1354	    autoneg (on|off) (port_id)
1355
1356Where:
1357
1358* ``high_water`` (integer): High threshold value to trigger XOFF.
1359
1360* ``low_water`` (integer): Low threshold value to trigger XON.
1361
1362* ``pause_time`` (integer): Pause quota in the Pause frame.
1363
1364* ``send_xon`` (0/1): Send XON frame.
1365
1366* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1367
1368* ``autoneg``: Change the auto-negotiation parameter.
1369
1370show flow control
1371~~~~~~~~~~~~~~~~~
1372
1373show the link flow control parameter on a port::
1374
1375   testpmd> show port <port_id> flow_ctrl
1376
1377set pfc_ctrl rx
1378~~~~~~~~~~~~~~~
1379
1380Set the priority flow control parameter on a port::
1381
1382   testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1383            (pause_time) (priority) (port_id)
1384
1385Where:
1386
1387* ``high_water`` (integer): High threshold value.
1388
1389* ``low_water`` (integer): Low threshold value.
1390
1391* ``pause_time`` (integer): Pause quota in the Pause frame.
1392
1393* ``priority`` (0-7): VLAN User Priority.
1394
1395set pfc_queue_ctrl
1396~~~~~~~~~~~~~~~~~~
1397
1398Set the priority flow control parameter on a given Rx and Tx queue of a port::
1399
1400   testpmd> set pfc_queue_ctrl <port_id> rx (on|off) <tx_qid> <tx_tc> \
1401            tx (on|off) <rx_qid> <rx_tc> <pause_time>
1402
1403Where:
1404
1405* ``tx_qid`` (integer): Tx qid for which ``tx_tc`` will be applied and traffic
1406  will be paused when PFC frame is received with ``tx_tc`` enabled.
1407
1408* ``tx_tc`` (0-15): TC for which traffic is to be paused for xmit.
1409
1410* ``rx_qid`` (integer): Rx qid for which threshold will be applied and PFC
1411  frame will be generated with ``tx_tc`` when exceeds the threshold.
1412
1413* ``rx_tc`` (0-15): TC filled in PFC frame for which remote Tx is to be paused.
1414
1415* ``pause_time`` (integer): Pause quanta filled in the PFC frame for which
1416  interval, remote Tx will be paused. Valid only if Tx pause is on.
1417
1418Set Rx queue available descriptors threshold
1419~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1420
1421Set available descriptors threshold for a specific Rx queue of port::
1422
1423  testpmd> set port (port_id) rxq (queue_id) avail_thresh (0..99)
1424
1425Use 0 value to disable the threshold and corresponding event.
1426
1427set stat_qmap
1428~~~~~~~~~~~~~
1429
1430Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1431
1432   testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1433
1434For example, to set rx queue 2 on port 0 to mapping 5::
1435
1436   testpmd>set stat_qmap rx 0 2 5
1437
1438set xstats-hide-zero
1439~~~~~~~~~~~~~~~~~~~~
1440
1441Set the option to hide zero values for xstats display::
1442
1443	testpmd> set xstats-hide-zero on|off
1444
1445.. note::
1446
1447	By default, the zero values are displayed for xstats.
1448
1449set port - rx/tx (for VF)
1450~~~~~~~~~~~~~~~~~~~~~~~~~
1451
1452Set VF receive/transmit from a port::
1453
1454   testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1455
1456set port - rx mode(for VF)
1457~~~~~~~~~~~~~~~~~~~~~~~~~~
1458
1459Set the VF receive mode of a port::
1460
1461   testpmd> set port (port_id) vf (vf_id) \
1462            rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1463
1464The available receive modes are:
1465
1466* ``AUPE``: Accepts untagged VLAN.
1467
1468* ``ROPE``: Accepts unicast hash.
1469
1470* ``BAM``: Accepts broadcast packets.
1471
1472* ``MPE``: Accepts all multicast packets.
1473
1474set port - tx_rate (for Queue)
1475~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1476
1477Set TX rate limitation for a queue on a port::
1478
1479   testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1480
1481set port - tx_rate (for VF)
1482~~~~~~~~~~~~~~~~~~~~~~~~~~~
1483
1484Set TX rate limitation for queues in VF on a port::
1485
1486   testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1487
1488set flush_rx
1489~~~~~~~~~~~~
1490
1491Set the flush on RX streams before forwarding.
1492The default is flush ``on``.
1493Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1494
1495   testpmd> set flush_rx off
1496
1497set link up
1498~~~~~~~~~~~
1499
1500Set link up for a port::
1501
1502   testpmd> set link-up port (port id)
1503
1504set link down
1505~~~~~~~~~~~~~
1506
1507Set link down for a port::
1508
1509   testpmd> set link-down port (port id)
1510
1511E-tag set
1512~~~~~~~~~
1513
1514Enable E-tag insertion for a VF on a port::
1515
1516   testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1517
1518Disable E-tag insertion for a VF on a port::
1519
1520   testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1521
1522Enable/disable E-tag stripping on a port::
1523
1524   testpmd> E-tag set stripping (on|off) port (port_id)
1525
1526Enable/disable E-tag based forwarding on a port::
1527
1528   testpmd> E-tag set forwarding (on|off) port (port_id)
1529
1530config per port Rx offloading
1531~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1532
1533Enable or disable a per port Rx offloading on all Rx queues of a port::
1534
1535   testpmd> port config (port_id) rx_offload (offloading) on|off
1536
1537* ``offloading``: can be any of these offloading capability:
1538                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1539                  qinq_strip, outer_ipv4_cksum, macsec_strip,
1540                  vlan_filter, vlan_extend, jumbo_frame,
1541                  scatter, timestamp, security, keep_crc, rss_hash
1542
1543This command should be run when the port is stopped, or else it will fail.
1544
1545config per queue Rx offloading
1546~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1547
1548Enable or disable a per queue Rx offloading only on a specific Rx queue::
1549
1550   testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
1551
1552* ``offloading``: can be any of these offloading capability:
1553                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1554                  qinq_strip, outer_ipv4_cksum, macsec_strip,
1555                  vlan_filter, vlan_extend, jumbo_frame,
1556                  scatter, timestamp, security, keep_crc
1557
1558This command should be run when the port is stopped, or else it will fail.
1559
1560config per port Tx offloading
1561~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1562
1563Enable or disable a per port Tx offloading on all Tx queues of a port::
1564
1565   testpmd> port config (port_id) tx_offload (offloading) on|off
1566
1567* ``offloading``: can be any of these offloading capability:
1568                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1569                  sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1570                  qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1571                  ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1572                  mt_lockfree, multi_segs, mbuf_fast_free, security
1573
1574This command should be run when the port is stopped, or else it will fail.
1575
1576config per queue Tx offloading
1577~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1578
1579Enable or disable a per queue Tx offloading only on a specific Tx queue::
1580
1581   testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
1582
1583* ``offloading``: can be any of these offloading capability:
1584                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1585                  sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1586                  qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1587                  ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1588                  mt_lockfree, multi_segs, mbuf_fast_free, security
1589
1590This command should be run when the port is stopped, or else it will fail.
1591
1592Config VXLAN Encap outer layers
1593~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1594
1595Configure the outer layer to encapsulate a packet inside a VXLAN tunnel::
1596
1597 set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1598 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \
1599 eth-dst (eth-dst)
1600
1601 set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1602 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1603 eth-src (eth-src) eth-dst (eth-dst)
1604
1605 set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1606 udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) \
1607 ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1608
1609These commands will set an internal configuration inside testpmd, any following
1610flow rule using the action vxlan_encap will use the last configuration set.
1611To have a different encapsulation header, one of those commands must be called
1612before the flow rule creation.
1613
1614Config NVGRE Encap outer layers
1615~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1616
1617Configure the outer layer to encapsulate a packet inside a NVGRE tunnel::
1618
1619 set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \
1620        eth-src (eth-src) eth-dst (eth-dst)
1621 set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \
1622        ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1623
1624These commands will set an internal configuration inside testpmd, any following
1625flow rule using the action nvgre_encap will use the last configuration set.
1626To have a different encapsulation header, one of those commands must be called
1627before the flow rule creation.
1628
1629Config L2 Encap
1630~~~~~~~~~~~~~~~
1631
1632Configure the l2 to be used when encapsulating a packet with L2::
1633
1634 set l2_encap ip-version (ipv4|ipv6) eth-src (eth-src) eth-dst (eth-dst)
1635 set l2_encap-with-vlan ip-version (ipv4|ipv6) vlan-tci (vlan-tci) \
1636        eth-src (eth-src) eth-dst (eth-dst)
1637
1638Those commands will set an internal configuration inside testpmd, any following
1639flow rule using the action l2_encap will use the last configuration set.
1640To have a different encapsulation header, one of those commands must be called
1641before the flow rule creation.
1642
1643Config L2 Decap
1644~~~~~~~~~~~~~~~
1645
1646Configure the l2 to be removed when decapsulating a packet with L2::
1647
1648 set l2_decap ip-version (ipv4|ipv6)
1649 set l2_decap-with-vlan ip-version (ipv4|ipv6)
1650
1651Those commands will set an internal configuration inside testpmd, any following
1652flow rule using the action l2_decap will use the last configuration set.
1653To have a different encapsulation header, one of those commands must be called
1654before the flow rule creation.
1655
1656Config MPLSoGRE Encap outer layers
1657~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1658
1659Configure the outer layer to encapsulate a packet inside a MPLSoGRE tunnel::
1660
1661 set mplsogre_encap ip-version (ipv4|ipv6) label (label) \
1662        ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst)
1663 set mplsogre_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1664        ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1665        eth-src (eth-src) eth-dst (eth-dst)
1666
1667These commands will set an internal configuration inside testpmd, any following
1668flow rule using the action mplsogre_encap will use the last configuration set.
1669To have a different encapsulation header, one of those commands must be called
1670before the flow rule creation.
1671
1672Config MPLSoGRE Decap outer layers
1673~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1674
1675Configure the outer layer to decapsulate MPLSoGRE packet::
1676
1677 set mplsogre_decap ip-version (ipv4|ipv6)
1678 set mplsogre_decap-with-vlan ip-version (ipv4|ipv6)
1679
1680These commands will set an internal configuration inside testpmd, any following
1681flow rule using the action mplsogre_decap will use the last configuration set.
1682To have a different decapsulation header, one of those commands must be called
1683before the flow rule creation.
1684
1685Config MPLSoUDP Encap outer layers
1686~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1687
1688Configure the outer layer to encapsulate a packet inside a MPLSoUDP tunnel::
1689
1690 set mplsoudp_encap ip-version (ipv4|ipv6) label (label) udp-src (udp-src) \
1691        udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1692        eth-src (eth-src) eth-dst (eth-dst)
1693 set mplsoudp_encap-with-vlan ip-version (ipv4|ipv6) label (label) \
1694        udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \
1695        vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1696
1697These commands will set an internal configuration inside testpmd, any following
1698flow rule using the action mplsoudp_encap will use the last configuration set.
1699To have a different encapsulation header, one of those commands must be called
1700before the flow rule creation.
1701
1702Config MPLSoUDP Decap outer layers
1703~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1704
1705Configure the outer layer to decapsulate MPLSoUDP packet::
1706
1707 set mplsoudp_decap ip-version (ipv4|ipv6)
1708 set mplsoudp_decap-with-vlan ip-version (ipv4|ipv6)
1709
1710These commands will set an internal configuration inside testpmd, any following
1711flow rule using the action mplsoudp_decap will use the last configuration set.
1712To have a different decapsulation header, one of those commands must be called
1713before the flow rule creation.
1714
1715Config Raw Encapsulation
1716~~~~~~~~~~~~~~~~~~~~~~~~~
1717
1718Configure the raw data to be used when encapsulating a packet by
1719rte_flow_action_raw_encap::
1720
1721 set raw_encap {index} {item} [/ {item} [...]] / end_set
1722
1723There are multiple global buffers for ``raw_encap``, this command will set one
1724internal buffer index by ``{index}``.
1725If there is no ``{index}`` specified::
1726
1727 set raw_encap {item} [/ {item} [...]] / end_set
1728
1729the default index ``0`` is used.
1730In order to use different encapsulating header, ``index`` must be specified
1731during the flow rule creation::
1732
1733 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
1734        raw_encap index 2 / end
1735
1736Otherwise the default index ``0`` is used.
1737
1738Config Raw Decapsulation
1739~~~~~~~~~~~~~~~~~~~~~~~~
1740
1741Configure the raw data to be used when decapsulating a packet by
1742rte_flow_action_raw_decap::
1743
1744 set raw_decap {index} {item} [/ {item} [...]] / end_set
1745
1746There are multiple global buffers for ``raw_decap``, this command will set
1747one internal buffer index by ``{index}``.
1748If there is no ``{index}`` specified::
1749
1750 set raw_decap {item} [/ {item} [...]] / end_set
1751
1752the default index ``0`` is used.
1753In order to use different decapsulating header, ``index`` must be specified
1754during the flow rule creation::
1755
1756 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
1757          raw_encap index 3 / end
1758
1759Otherwise the default index ``0`` is used.
1760
1761Set fec mode
1762~~~~~~~~~~~~
1763
1764Set fec mode for a specific port::
1765
1766  testpmd> set port (port_id) fec_mode auto|off|rs|baser
1767
1768Config Sample actions list
1769~~~~~~~~~~~~~~~~~~~~~~~~~~
1770
1771Configure the sample actions list to be used when sampling a packet by
1772rte_flow_action_sample::
1773
1774 set sample_actions {index} {action} [/ {action} [...]] / end
1775
1776There are multiple global buffers for ``sample_actions``, this command will set
1777one internal buffer index by ``{index}``.
1778
1779In order to use different sample actions list, ``index`` must be specified
1780during the flow rule creation::
1781
1782 testpmd> flow create 0 ingress pattern eth / ipv4 / end actions
1783        sample ratio 2 index 2 / end
1784
1785Otherwise the default index ``0`` is used.
1786
1787Port Functions
1788--------------
1789
1790The following sections show functions for configuring ports.
1791
1792.. note::
1793
1794   Port configuration changes only become active when forwarding is started/restarted.
1795
1796.. _port_attach:
1797
1798port attach
1799~~~~~~~~~~~
1800
1801Attach a port specified by pci address or virtual device args::
1802
1803   testpmd> port attach (identifier)
1804
1805To attach a new pci device, the device should be recognized by kernel first.
1806Then it should be moved under DPDK management.
1807Finally the port can be attached to testpmd.
1808
1809For example, to move a pci device using ixgbe under DPDK management:
1810
1811.. code-block:: console
1812
1813   # Check the status of the available devices.
1814   ./usertools/dpdk-devbind.py --status
1815
1816   Network devices using DPDK-compatible driver
1817   ============================================
1818   <none>
1819
1820   Network devices using kernel driver
1821   ===================================
1822   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1823
1824
1825   # Bind the device to igb_uio.
1826   sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1827
1828
1829   # Recheck the status of the devices.
1830   ./usertools/dpdk-devbind.py --status
1831   Network devices using DPDK-compatible driver
1832   ============================================
1833   0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1834
1835To attach a port created by virtual device, above steps are not needed.
1836
1837For example, to attach a port whose pci address is 0000:0a:00.0.
1838
1839.. code-block:: console
1840
1841   testpmd> port attach 0000:0a:00.0
1842   Attaching a new port...
1843   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1844   EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
1845   EAL:   PCI memory mapped at 0x7f83bfa00000
1846   EAL:   PCI memory mapped at 0x7f83bfa80000
1847   PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1848   PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1849   Port 0 is attached. Now total ports is 1
1850   Done
1851
1852For example, to attach a port created by pcap PMD.
1853
1854.. code-block:: console
1855
1856   testpmd> port attach net_pcap0
1857   Attaching a new port...
1858   PMD: Initializing pmd_pcap for net_pcap0
1859   PMD: Creating pcap-backed ethdev on numa socket 0
1860   Port 0 is attached. Now total ports is 1
1861   Done
1862
1863In this case, identifier is ``net_pcap0``.
1864This identifier format is the same as ``--vdev`` format of DPDK applications.
1865
1866For example, to re-attach a bonded port which has been previously detached,
1867the mode and slave parameters must be given.
1868
1869.. code-block:: console
1870
1871   testpmd> port attach net_bond_0,mode=0,slave=1
1872   Attaching a new port...
1873   EAL: Initializing pmd_bond for net_bond_0
1874   EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
1875   Port 0 is attached. Now total ports is 1
1876   Done
1877
1878
1879port detach
1880~~~~~~~~~~~
1881
1882Detach a specific port::
1883
1884   testpmd> port detach (port_id)
1885
1886Before detaching a port, the port should be stopped and closed.
1887
1888For example, to detach a pci device port 0.
1889
1890.. code-block:: console
1891
1892   testpmd> port stop 0
1893   Stopping ports...
1894   Done
1895   testpmd> port close 0
1896   Closing ports...
1897   Done
1898
1899   testpmd> port detach 0
1900   Detaching a port...
1901   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1902   EAL:   remove driver: 8086:10fb rte_ixgbe_pmd
1903   EAL:   PCI memory unmapped at 0x7f83bfa00000
1904   EAL:   PCI memory unmapped at 0x7f83bfa80000
1905   Done
1906
1907
1908For example, to detach a virtual device port 0.
1909
1910.. code-block:: console
1911
1912   testpmd> port stop 0
1913   Stopping ports...
1914   Done
1915   testpmd> port close 0
1916   Closing ports...
1917   Done
1918
1919   testpmd> port detach 0
1920   Detaching a port...
1921   PMD: Closing pcap ethdev on numa socket 0
1922   Port 'net_pcap0' is detached. Now total ports is 0
1923   Done
1924
1925To remove a pci device completely from the system, first detach the port from testpmd.
1926Then the device should be moved under kernel management.
1927Finally the device can be removed using kernel pci hotplug functionality.
1928
1929For example, to move a pci device under kernel management:
1930
1931.. code-block:: console
1932
1933   sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
1934
1935   ./usertools/dpdk-devbind.py --status
1936
1937   Network devices using DPDK-compatible driver
1938   ============================================
1939   <none>
1940
1941   Network devices using kernel driver
1942   ===================================
1943   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
1944
1945To remove a port created by a virtual device, above steps are not needed.
1946
1947port start
1948~~~~~~~~~~
1949
1950Start all ports or a specific port::
1951
1952   testpmd> port start (port_id|all)
1953
1954port stop
1955~~~~~~~~~
1956
1957Stop all ports or a specific port::
1958
1959   testpmd> port stop (port_id|all)
1960
1961port close
1962~~~~~~~~~~
1963
1964Close all ports or a specific port::
1965
1966   testpmd> port close (port_id|all)
1967
1968port reset
1969~~~~~~~~~~
1970
1971Reset all ports or a specific port::
1972
1973   testpmd> port reset (port_id|all)
1974
1975User should stop port(s) before resetting and (re-)start after reset.
1976
1977port config - queue ring size
1978~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1979
1980Configure a rx/tx queue ring size::
1981
1982   testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
1983
1984Only take effect after command that (re-)start the port or command that setup specific queue.
1985
1986port start/stop queue
1987~~~~~~~~~~~~~~~~~~~~~
1988
1989Start/stop a rx/tx queue on a specific port::
1990
1991   testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1992
1993port config - queue deferred start
1994~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1995
1996Switch on/off deferred start of a specific port queue::
1997
1998   testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
1999
2000port setup queue
2001~~~~~~~~~~~~~~~~~~~~~
2002
2003Setup a rx/tx queue on a specific port::
2004
2005   testpmd> port (port_id) (rxq|txq) (queue_id) setup
2006
2007Only take effect when port is started.
2008
2009port config - speed
2010~~~~~~~~~~~~~~~~~~~
2011
2012Set the speed and duplex mode for all ports or a specific port::
2013
2014   testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|200000|auto) \
2015            duplex (half|full|auto)
2016
2017port config - queues/descriptors
2018~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019
2020Set number of queues/descriptors for rxq, txq, rxd and txd::
2021
2022   testpmd> port config all (rxq|txq|rxd|txd) (value)
2023
2024This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
2025
2026port config - max-pkt-len
2027~~~~~~~~~~~~~~~~~~~~~~~~~
2028
2029Set the maximum packet length::
2030
2031   testpmd> port config all max-pkt-len (value)
2032
2033This is equivalent to the ``--max-pkt-len`` command-line option.
2034
2035port config - max-lro-pkt-size
2036~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2037
2038Set the maximum LRO aggregated packet size::
2039
2040   testpmd> port config all max-lro-pkt-size (value)
2041
2042This is equivalent to the ``--max-lro-pkt-size`` command-line option.
2043
2044port config - Drop Packets
2045~~~~~~~~~~~~~~~~~~~~~~~~~~
2046
2047Enable or disable packet drop on all RX queues of all ports when no receive buffers available::
2048
2049   testpmd> port config all drop-en (on|off)
2050
2051Packet dropping when no receive buffers available is off by default.
2052
2053The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
2054
2055port config - RSS
2056~~~~~~~~~~~~~~~~~
2057
2058Set the RSS (Receive Side Scaling) mode on or off::
2059   testpmd> port config all rss (all|default|level-default|level-outer|level-inner| \
2060                                 ip|tcp|udp|sctp|tunnel|vlan|none| \
2061                                 ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other| \
2062                                 ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
2063                                 ipv6-other|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex| \
2064                                 l2-payload|port|vxlan|geneve|nvgre|gtpu|eth|s-vlan|c-vlan| \
2065                                 esp|ah|l2tpv3|pfcp|pppoe|ecpri|mpls|ipv4-chksum|l4-chksum| \
2066                                 l2tpv2|l3-pre96|l3-pre64|l3-pre56|l3-pre48|l3-pre40|l3-pre32| \
2067                                 l2-dst-only|l2-src-only|l4-dst-only|l4-src-only|l3-dst-only|l3-src-only|<rsstype_id>)
2068
2069RSS is on by default.
2070
2071The ``all`` option is equivalent to eth|vlan|ip|tcp|udp|sctp|ether|l2tpv3|esp|ah|pfcp|l2tpv2.
2072
2073The ``default`` option enables all supported RSS types reported by device info.
2074
2075The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
2076
2077port config - RSS Reta
2078~~~~~~~~~~~~~~~~~~~~~~
2079
2080Set the RSS (Receive Side Scaling) redirection table::
2081
2082   testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
2083
2084port config - DCB
2085~~~~~~~~~~~~~~~~~
2086
2087Set the DCB mode for an individual port::
2088
2089   testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
2090
2091The traffic class should be 4 or 8.
2092
2093port config - Burst
2094~~~~~~~~~~~~~~~~~~~
2095
2096Set the number of packets per burst::
2097
2098   testpmd> port config all burst (value)
2099
2100This is equivalent to the ``--burst`` command-line option.
2101
2102port config - Threshold
2103~~~~~~~~~~~~~~~~~~~~~~~
2104
2105Set thresholds for TX/RX queues::
2106
2107   testpmd> port config all (threshold) (value)
2108
2109Where the threshold type can be:
2110
2111* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
2112
2113* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
2114
2115* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
2116
2117* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
2118
2119* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
2120
2121* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
2122
2123* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
2124
2125* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
2126
2127* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
2128
2129These threshold options are also available from the command-line.
2130
2131port config pctype mapping
2132~~~~~~~~~~~~~~~~~~~~~~~~~~
2133
2134Reset pctype mapping table::
2135
2136   testpmd> port config (port_id) pctype mapping reset
2137
2138Update hardware defined pctype to software defined flow type mapping table::
2139
2140   testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
2141
2142where:
2143
2144* ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
2145
2146* ``flow_type_id``: software flow type id as the index of the pctype mapping table.
2147
2148port config input set
2149~~~~~~~~~~~~~~~~~~~~~
2150
2151Config RSS/FDIR/FDIR flexible payload input set for some pctype::
2152
2153   testpmd> port config (port_id) pctype (pctype_id) \
2154            (hash_inset|fdir_inset|fdir_flx_inset) \
2155	    (get|set|clear) field (field_idx)
2156
2157Clear RSS/FDIR/FDIR flexible payload input set for some pctype::
2158
2159   testpmd> port config (port_id) pctype (pctype_id) \
2160            (hash_inset|fdir_inset|fdir_flx_inset) clear all
2161
2162where:
2163
2164* ``pctype_id``: hardware packet classification types.
2165* ``field_idx``: hardware field index.
2166
2167port config udp_tunnel_port
2168~~~~~~~~~~~~~~~~~~~~~~~~~~~
2169
2170Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols::
2171
2172    testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe|ecpri (udp_port)
2173
2174port config tx_metadata
2175~~~~~~~~~~~~~~~~~~~~~~~
2176
2177Set Tx metadata value per port.
2178testpmd will add this value to any Tx packet sent from this port::
2179
2180   testpmd> port config (port_id) tx_metadata (value)
2181
2182port config dynf
2183~~~~~~~~~~~~~~~~
2184
2185Set/clear dynamic flag per port.
2186testpmd will register this flag in the mbuf (same registration
2187for both Tx and Rx). Then set/clear this flag for each Tx
2188packet sent from this port. The set bit only works for Tx packet::
2189
2190   testpmd> port config (port_id) dynf (name) (set|clear)
2191
2192port config mtu
2193~~~~~~~~~~~~~~~
2194
2195To configure MTU(Maximum Transmission Unit) on devices using testpmd::
2196
2197   testpmd> port config mtu (port_id) (value)
2198
2199port config rss hash key
2200~~~~~~~~~~~~~~~~~~~~~~~~
2201
2202To configure the RSS hash key used to compute the RSS
2203hash of input [IP] packets received on port::
2204
2205   testpmd> port config <port_id> rss-hash-key (ipv4|ipv4-frag|\
2206                     ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\
2207                     ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|\
2208                     ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|\
2209                     ipv6-udp-ex <string of hex digits \
2210                     (variable length, NIC dependent)>)
2211
2212port cleanup txq mbufs
2213~~~~~~~~~~~~~~~~~~~~~~
2214
2215To cleanup txq mbufs currently cached by driver::
2216
2217   testpmd> port cleanup (port_id) txq (queue_id) (free_cnt)
2218
2219If the value of ``free_cnt`` is 0, driver should free all cached mbufs.
2220
2221Device Functions
2222----------------
2223
2224The following sections show functions for device operations.
2225
2226device detach
2227~~~~~~~~~~~~~
2228
2229Detach a device specified by pci address or virtual device args::
2230
2231   testpmd> device detach (identifier)
2232
2233Before detaching a device associated with ports, the ports should be stopped and closed.
2234
2235For example, to detach a pci device whose address is 0002:03:00.0.
2236
2237.. code-block:: console
2238
2239    testpmd> device detach 0002:03:00.0
2240    Removing a device...
2241    Port 1 is now closed
2242    EAL: Releasing pci mapped resource for 0002:03:00.0
2243    EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218a050000
2244    EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218c050000
2245    Device 0002:03:00.0 is detached
2246    Now total ports is 1
2247
2248For example, to detach a port created by pcap PMD.
2249
2250.. code-block:: console
2251
2252    testpmd> device detach net_pcap0
2253    Removing a device...
2254    Port 0 is now closed
2255    Device net_pcap0 is detached
2256    Now total ports is 0
2257    Done
2258
2259In this case, identifier is ``net_pcap0``.
2260This identifier format is the same as ``--vdev`` format of DPDK applications.
2261
2262Link Bonding Functions
2263----------------------
2264
2265The Link Bonding functions make it possible to dynamically create and
2266manage link bonding devices from within testpmd interactive prompt.
2267
2268See :doc:`../prog_guide/link_bonding_poll_mode_drv_lib` for more information.
2269
2270Traffic Metering and Policing
2271-----------------------------
2272
2273The following section shows functions for configuring traffic metering and
2274policing on the ethernet device through the use of generic ethdev API.
2275
2276show port traffic management capability
2277~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2278
2279Show traffic metering and policing capability of the port::
2280
2281   testpmd> show port meter cap (port_id)
2282
2283add port meter profile (srTCM rfc2967)
2284~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2285
2286Add meter profile (srTCM rfc2697) to the ethernet device::
2287
2288   testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2289   (cir) (cbs) (ebs) (packet_mode)
2290
2291where:
2292
2293* ``profile_id``: ID for the meter profile.
2294* ``cir``: Committed Information Rate (CIR) (bytes per second or packets per second).
2295* ``cbs``: Committed Burst Size (CBS) (bytes or packets).
2296* ``ebs``: Excess Burst Size (EBS) (bytes or packets).
2297* ``packet_mode``: Packets mode for meter profile.
2298
2299add port meter profile (trTCM rfc2968)
2300~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2301
2302Add meter profile (srTCM rfc2698) to the ethernet device::
2303
2304   testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2305   (cir) (pir) (cbs) (pbs) (packet_mode)
2306
2307where:
2308
2309* ``profile_id``: ID for the meter profile.
2310* ``cir``: Committed information rate (bytes per second or packets per second).
2311* ``pir``: Peak information rate (bytes per second or packets per second).
2312* ``cbs``: Committed burst size (bytes or packets).
2313* ``pbs``: Peak burst size (bytes or packets).
2314* ``packet_mode``: Packets mode for meter profile.
2315
2316add port meter profile (trTCM rfc4115)
2317~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2318
2319Add meter profile (trTCM rfc4115) to the ethernet device::
2320
2321   testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2322   (cir) (eir) (cbs) (ebs) (packet_mode)
2323
2324where:
2325
2326* ``profile_id``: ID for the meter profile.
2327* ``cir``: Committed information rate (bytes per second or packets per second).
2328* ``eir``: Excess information rate (bytes per second or packets per second).
2329* ``cbs``: Committed burst size (bytes or packets).
2330* ``ebs``: Excess burst size (bytes or packets).
2331* ``packet_mode``: Packets mode for meter profile.
2332
2333delete port meter profile
2334~~~~~~~~~~~~~~~~~~~~~~~~~
2335
2336Delete meter profile from the ethernet device::
2337
2338   testpmd> del port meter profile (port_id) (profile_id)
2339
2340create port policy
2341~~~~~~~~~~~~~~~~~~
2342
2343Create new policy object for the ethernet device::
2344
2345   testpmd> add port meter policy (port_id) (policy_id) g_actions \
2346   {action} y_actions {action} r_actions {action}
2347
2348where:
2349
2350* ``policy_id``: policy ID.
2351* ``action``: action lists for green/yellow/red colors.
2352
2353delete port policy
2354~~~~~~~~~~~~~~~~~~
2355
2356Delete policy object for the ethernet device::
2357
2358   testpmd> del port meter policy (port_id) (policy_id)
2359
2360where:
2361
2362* ``policy_id``: policy ID.
2363
2364create port meter
2365~~~~~~~~~~~~~~~~~
2366
2367Create new meter object for the ethernet device::
2368
2369   testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2370   (policy_id) (meter_enable) (stats_mask) (shared) (default_input_color) \
2371   (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2372   (dscp_tbl_entry63)] [(vlan_tbl_entry0) (vlan_tbl_entry1) ... \
2373   (vlan_tbl_entry15)]
2374
2375where:
2376
2377* ``mtr_id``: meter object ID.
2378* ``profile_id``: ID for the meter profile.
2379* ``policy_id``: ID for the policy.
2380* ``meter_enable``: When this parameter has a non-zero value, the meter object
2381  gets enabled at the time of creation, otherwise remains disabled.
2382* ``stats_mask``: Mask of statistics counter types to be enabled for the
2383  meter object.
2384* ``shared``:  When this parameter has a non-zero value, the meter object is
2385  shared by multiple flows. Otherwise, meter object is used by single flow.
2386* ``default_input_color``:  Default input color for incoming packets.
2387  If incoming packet misses DSCP or VLAN input color table then it will be used
2388  as input color.
2389* ``use_pre_meter_color``: When this parameter has a non-zero value, the
2390  input color for the current meter object is determined by the latest meter
2391  object in the same flow. Otherwise, the current meter object uses the
2392  *dscp_table* to determine the input color.
2393* ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2394  color, 0 <= x <= 63.
2395* ``vlan_tbl_entryx``: VLAN table entry x providing meter input color,
2396  0 <= x <= 15.
2397
2398enable port meter
2399~~~~~~~~~~~~~~~~~
2400
2401Enable meter for the ethernet device::
2402
2403   testpmd> enable port meter (port_id) (mtr_id)
2404
2405disable port meter
2406~~~~~~~~~~~~~~~~~~
2407
2408Disable meter for the ethernet device::
2409
2410   testpmd> disable port meter (port_id) (mtr_id)
2411
2412delete port meter
2413~~~~~~~~~~~~~~~~~
2414
2415Delete meter for the ethernet device::
2416
2417   testpmd> del port meter (port_id) (mtr_id)
2418
2419Set port meter profile
2420~~~~~~~~~~~~~~~~~~~~~~
2421
2422Set meter profile for the ethernet device::
2423
2424   testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2425
2426set port meter dscp table
2427~~~~~~~~~~~~~~~~~~~~~~~~~
2428
2429Set meter dscp table for the ethernet device::
2430
2431   testpmd> set port meter dscp table (port_id) (mtr_id) (proto) \
2432   [(dscp_tbl_entry0) (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2433
2434set port meter vlan table
2435~~~~~~~~~~~~~~~~~~~~~~~~~
2436Set meter VLAN table for the Ethernet device::
2437
2438   testpmd> set port meter vlan table (port_id) (mtr_id) (proto) \
2439   [(vlan_tbl_entry0) (vlan_tbl_entry1)...(vlan_tbl_entry15)]
2440
2441set port meter protocol
2442~~~~~~~~~~~~~~~~~~~~~~~
2443Set meter protocol and corresponding priority::
2444
2445   testpmd> set port meter proto (port_id) (mtr_id) (proto) (prio)
2446
2447get port meter protocol
2448~~~~~~~~~~~~~~~~~~~~~~~
2449Get meter protocol::
2450
2451   testpmd> get port meter proto (port_id) (mtr_id)
2452
2453get port meter protocol priority
2454~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2455Get priority associated to meter protocol::
2456
2457   testpmd> get port meter proto_prio (port_id) (mtr_id) (proto)
2458
2459set port meter stats mask
2460~~~~~~~~~~~~~~~~~~~~~~~~~
2461
2462Set meter stats mask for the ethernet device::
2463
2464   testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2465
2466where:
2467
2468* ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2469
2470show port meter stats
2471~~~~~~~~~~~~~~~~~~~~~
2472
2473Show meter stats of the ethernet device::
2474
2475   testpmd> show port meter stats (port_id) (mtr_id) (clear)
2476
2477where:
2478
2479* ``clear``: Flag that indicates whether the statistics counters should
2480  be cleared (i.e. set to zero) immediately after they have been read or not.
2481
2482Traffic Management
2483------------------
2484
2485The following section shows functions for configuring traffic management on
2486the ethernet device through the use of generic TM API.
2487
2488show port traffic management capability
2489~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2490
2491Show traffic management capability of the port::
2492
2493   testpmd> show port tm cap (port_id)
2494
2495show port traffic management capability (hierarchy level)
2496~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2497
2498Show traffic management hierarchy level capability of the port::
2499
2500   testpmd> show port tm level cap (port_id) (level_id)
2501
2502show port traffic management capability (hierarchy node level)
2503~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2504
2505Show the traffic management hierarchy node capability of the port::
2506
2507   testpmd> show port tm node cap (port_id) (node_id)
2508
2509show port traffic management hierarchy node type
2510~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2511
2512Show the port traffic management hierarchy node type::
2513
2514   testpmd> show port tm node type (port_id) (node_id)
2515
2516show port traffic management hierarchy node stats
2517~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2518
2519Show the port traffic management hierarchy node statistics::
2520
2521   testpmd> show port tm node stats (port_id) (node_id) (clear)
2522
2523where:
2524
2525* ``clear``: When this parameter has a non-zero value, the statistics counters
2526  are cleared (i.e. set to zero) immediately after they have been read,
2527  otherwise the statistics counters are left untouched.
2528
2529Add port traffic management private shaper profile
2530~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2531
2532Add the port traffic management private shaper profile::
2533
2534   testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2535   (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size) \
2536   (packet_length_adjust) (packet_mode)
2537
2538where:
2539
2540* ``shaper_profile id``: Shaper profile ID for the new profile.
2541* ``cmit_tb_rate``: Committed token bucket rate (bytes per second or packets per second).
2542* ``cmit_tb_size``: Committed token bucket size (bytes or packets).
2543* ``peak_tb_rate``: Peak token bucket rate (bytes per second or packets per second).
2544* ``peak_tb_size``: Peak token bucket size (bytes or packets).
2545* ``packet_length_adjust``: The value (bytes) to be added to the length of
2546  each packet for the purpose of shaping. This parameter value can be used to
2547  correct the packet length with the framing overhead bytes that are consumed
2548  on the wire.
2549* ``packet_mode``: Shaper configured in packet mode. This parameter value if
2550  zero, configures shaper in byte mode and if non-zero configures it in packet
2551  mode.
2552
2553Delete port traffic management private shaper profile
2554~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2555
2556Delete the port traffic management private shaper::
2557
2558   testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2559
2560where:
2561
2562* ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2563
2564Add port traffic management shared shaper
2565~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2566
2567Create the port traffic management shared shaper::
2568
2569   testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2570   (shaper_profile_id)
2571
2572where:
2573
2574* ``shared_shaper_id``: Shared shaper ID to be created.
2575* ``shaper_profile id``: Shaper profile ID for shared shaper.
2576
2577Set port traffic management shared shaper
2578~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2579
2580Update the port traffic management shared shaper::
2581
2582   testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2583   (shaper_profile_id)
2584
2585where:
2586
2587* ``shared_shaper_id``: Shared shaper ID to be update.
2588* ``shaper_profile id``: Shaper profile ID for shared shaper.
2589
2590Delete port traffic management shared shaper
2591~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2592
2593Delete the port traffic management shared shaper::
2594
2595   testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2596
2597where:
2598
2599* ``shared_shaper_id``: Shared shaper ID to be deleted.
2600
2601Set port traffic management hierarchy node private shaper
2602~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2603
2604set the port traffic management hierarchy node private shaper::
2605
2606   testpmd> set port tm node shaper profile (port_id) (node_id) \
2607   (shaper_profile_id)
2608
2609where:
2610
2611* ``shaper_profile id``: Private shaper profile ID to be enabled on the
2612  hierarchy node.
2613
2614Add port traffic management WRED profile
2615~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2616
2617Create a new WRED profile::
2618
2619   testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2620   (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2621   (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2622   (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2623
2624where:
2625
2626* ``wred_profile id``: Identifier for the newly create WRED profile
2627* ``color_g``: Packet color (green)
2628* ``min_th_g``: Minimum queue threshold for packet with green color
2629* ``max_th_g``: Minimum queue threshold for packet with green color
2630* ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2631* ``wq_log2_g``: Negated log2 of queue weight (wq)
2632* ``color_y``: Packet color (yellow)
2633* ``min_th_y``: Minimum queue threshold for packet with yellow color
2634* ``max_th_y``: Minimum queue threshold for packet with yellow color
2635* ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2636* ``wq_log2_y``: Negated log2 of queue weight (wq)
2637* ``color_r``: Packet color (red)
2638* ``min_th_r``: Minimum queue threshold for packet with yellow color
2639* ``max_th_r``: Minimum queue threshold for packet with yellow color
2640* ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2641* ``wq_log2_r``: Negated log2 of queue weight (wq)
2642
2643Delete port traffic management WRED profile
2644~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2645
2646Delete the WRED profile::
2647
2648   testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2649
2650Add port traffic management hierarchy nonleaf node
2651~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2652
2653Add nonleaf node to port traffic management hierarchy::
2654
2655   testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2656   (priority) (weight) (level_id) (shaper_profile_id) \
2657   (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2658   [(shared_shaper_0) (shared_shaper_1) ...] \
2659
2660where:
2661
2662* ``parent_node_id``: Node ID of the parent.
2663* ``priority``: Node priority (highest node priority is zero). This is used by
2664  the SP algorithm running on the parent node for scheduling this node.
2665* ``weight``: Node weight (lowest weight is one). The node weight is relative
2666  to the weight sum of all siblings that have the same priority. It is used by
2667  the WFQ algorithm running on the parent node for scheduling this node.
2668* ``level_id``: Hierarchy level of the node.
2669* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2670  the node.
2671* ``n_sp_priorities``: Number of strict priorities.
2672* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2673* ``n_shared_shapers``: Number of shared shapers.
2674* ``shared_shaper_id``: Shared shaper id.
2675
2676Add port traffic management hierarchy nonleaf node with packet mode
2677~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2678
2679Add nonleaf node with packet mode to port traffic management hierarchy::
2680
2681   testpmd> add port tm nonleaf node pktmode (port_id) (node_id) (parent_node_id) \
2682   (priority) (weight) (level_id) (shaper_profile_id) \
2683   (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2684   [(shared_shaper_0) (shared_shaper_1) ...] \
2685
2686where:
2687
2688* ``parent_node_id``: Node ID of the parent.
2689* ``priority``: Node priority (highest node priority is zero). This is used by
2690  the SP algorithm running on the parent node for scheduling this node.
2691* ``weight``: Node weight (lowest weight is one). The node weight is relative
2692  to the weight sum of all siblings that have the same priority. It is used by
2693  the WFQ algorithm running on the parent node for scheduling this node.
2694* ``level_id``: Hierarchy level of the node.
2695* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2696  the node.
2697* ``n_sp_priorities``: Number of strict priorities. Packet mode is enabled on
2698  all of them.
2699* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2700* ``n_shared_shapers``: Number of shared shapers.
2701* ``shared_shaper_id``: Shared shaper id.
2702
2703Add port traffic management hierarchy leaf node
2704~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2705
2706Add leaf node to port traffic management hierarchy::
2707
2708   testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2709   (priority) (weight) (level_id) (shaper_profile_id) \
2710   (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2711   [(shared_shaper_id) (shared_shaper_id) ...] \
2712
2713where:
2714
2715* ``parent_node_id``: Node ID of the parent.
2716* ``priority``: Node priority (highest node priority is zero). This is used by
2717  the SP algorithm running on the parent node for scheduling this node.
2718* ``weight``: Node weight (lowest weight is one). The node weight is relative
2719  to the weight sum of all siblings that have the same priority. It is used by
2720  the WFQ algorithm running on the parent node for scheduling this node.
2721* ``level_id``: Hierarchy level of the node.
2722* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2723  the node.
2724* ``cman_mode``: Congestion management mode to be enabled for this node.
2725* ``wred_profile_id``: WRED profile id to be enabled for this node.
2726* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2727* ``n_shared_shapers``: Number of shared shapers.
2728* ``shared_shaper_id``: Shared shaper id.
2729
2730Delete port traffic management hierarchy node
2731~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2732
2733Delete node from port traffic management hierarchy::
2734
2735   testpmd> del port tm node (port_id) (node_id)
2736
2737Update port traffic management hierarchy parent node
2738~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2739
2740Update port traffic management hierarchy parent node::
2741
2742   testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
2743   (priority) (weight)
2744
2745This function can only be called after the hierarchy commit invocation. Its
2746success depends on the port support for this operation, as advertised through
2747the port capability set. This function is valid for all nodes of the traffic
2748management hierarchy except root node.
2749
2750Suspend port traffic management hierarchy node
2751~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2752
2753   testpmd> suspend port tm node (port_id) (node_id)
2754
2755Resume port traffic management hierarchy node
2756~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2757
2758   testpmd> resume port tm node (port_id) (node_id)
2759
2760Commit port traffic management hierarchy
2761~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2762
2763Commit the traffic management hierarchy on the port::
2764
2765   testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2766
2767where:
2768
2769* ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
2770  call failure. On the other hand, hierarchy is preserved when this parameter
2771  is equal to zero.
2772
2773Set port traffic management mark VLAN dei
2774~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2775
2776Enables/Disables the traffic management marking on the port for VLAN packets::
2777
2778   testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red>
2779
2780where:
2781
2782* ``port_id``: The port which on which VLAN packets marked as ``green`` or
2783  ``yellow`` or ``red`` will have dei bit enabled
2784
2785* ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green
2786
2787* ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow
2788
2789* ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red
2790
2791Set port traffic management mark IP dscp
2792~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2793
2794Enables/Disables the traffic management marking on the port for IP dscp packets::
2795
2796   testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red>
2797
2798where:
2799
2800* ``port_id``: The port which on which IP packets marked as ``green`` or
2801  ``yellow`` or ``red`` will have IP dscp bits updated
2802
2803* ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets
2804
2805* ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets
2806
2807* ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets
2808
2809Set port traffic management mark IP ecn
2810~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2811
2812Enables/Disables the traffic management marking on the port for IP ecn packets::
2813
2814   testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red>
2815
2816where:
2817
2818* ``port_id``: The port which on which IP packets marked as ``green`` or
2819  ``yellow`` or ``red`` will have IP ecn bits updated
2820
2821* ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01  or 2'b10
2822  to ecn of 2'b11 when IP is caring TCP or SCTP
2823
2824* ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01  or 2'b10
2825  to ecn of 2'b11 when IP is caring TCP or SCTP
2826
2827* ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01  or 2'b10
2828  to ecn of 2'b11 when IP is caring TCP or SCTP
2829
2830Filter Functions
2831----------------
2832
2833This section details the available filter functions that are available.
2834
2835Note these functions interface the deprecated legacy filtering framework,
2836superseded by *rte_flow*. See `Flow rules management`_.
2837
2838.. _testpmd_rte_flow:
2839
2840Flow rules management
2841---------------------
2842
2843Control of the generic flow API (*rte_flow*) is fully exposed through the
2844``flow`` command (configuration, validation, creation, destruction, queries
2845and operation modes).
2846
2847Considering *rte_flow* overlaps with all `Filter Functions`_, using both
2848features simultaneously may cause undefined side-effects and is therefore
2849not recommended.
2850
2851``flow`` syntax
2852~~~~~~~~~~~~~~~
2853
2854Because the ``flow`` command uses dynamic tokens to handle the large number
2855of possible flow rules combinations, its behavior differs slightly from
2856other commands, in particular:
2857
2858- Pressing *?* or the *<tab>* key displays contextual help for the current
2859  token, not that of the entire command.
2860
2861- Optional and repeated parameters are supported (provided they are listed
2862  in the contextual help).
2863
2864The first parameter stands for the operation mode. Possible operations and
2865their general syntax are described below. They are covered in detail in the
2866following sections.
2867
2868- Get info about flow engine::
2869
2870   flow info {port_id}
2871
2872- Configure flow engine::
2873
2874   flow configure {port_id}
2875       [queues_number {number}] [queues_size {size}]
2876       [counters_number {number}]
2877       [aging_counters_number {number}]
2878       [meters_number {number}]
2879
2880- Create a pattern template::
2881   flow pattern_template {port_id} create [pattern_template_id {id}]
2882       [relaxed {boolean}] [ingress] [egress] [transfer]
2883	   template {item} [/ {item} [...]] / end
2884
2885- Destroy a pattern template::
2886
2887   flow pattern_template {port_id} destroy pattern_template {id} [...]
2888
2889- Create an actions template::
2890
2891   flow actions_template {port_id} create [actions_template_id {id}]
2892       [ingress] [egress] [transfer]
2893       template {action} [/ {action} [...]] / end
2894       mask {action} [/ {action} [...]] / end
2895
2896- Destroy an actions template::
2897
2898   flow actions_template {port_id} destroy actions_template {id} [...]
2899
2900- Create a table::
2901
2902   flow table {port_id} create
2903       [table_id {id}]
2904       [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
2905       rules_number {number}
2906       pattern_template {pattern_template_id}
2907       actions_template {actions_template_id}
2908
2909- Destroy a table::
2910
2911   flow table {port_id} destroy table {id} [...]
2912
2913- Check whether a flow rule can be created::
2914
2915   flow validate {port_id}
2916       [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
2917       pattern {item} [/ {item} [...]] / end
2918       actions {action} [/ {action} [...]] / end
2919
2920- Enqueue creation of a flow rule::
2921
2922   flow queue {port_id} create {queue_id}
2923       [postpone {boolean}] template_table {table_id}
2924       pattern_template {pattern_template_index}
2925       actions_template {actions_template_index}
2926       pattern {item} [/ {item} [...]] / end
2927       actions {action} [/ {action} [...]] / end
2928
2929- Enqueue destruction of specific flow rules::
2930
2931   flow queue {port_id} destroy {queue_id}
2932       [postpone {boolean}] rule {rule_id} [...]
2933
2934- Push enqueued operations::
2935
2936   flow push {port_id} queue {queue_id}
2937
2938- Pull all operations results from a queue::
2939
2940   flow pull {port_id} queue {queue_id}
2941
2942- Create a flow rule::
2943
2944   flow create {port_id}
2945       [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
2946       pattern {item} [/ {item} [...]] / end
2947       actions {action} [/ {action} [...]] / end
2948
2949- Destroy specific flow rules::
2950
2951   flow destroy {port_id} rule {rule_id} [...]
2952
2953- Destroy all flow rules::
2954
2955   flow flush {port_id}
2956
2957- Query an existing flow rule::
2958
2959   flow query {port_id} {rule_id} {action}
2960
2961- List existing flow rules sorted by priority, filtered by group
2962  identifiers::
2963
2964   flow list {port_id} [group {group_id}] [...]
2965
2966- Restrict ingress traffic to the defined flow rules::
2967
2968   flow isolate {port_id} {boolean}
2969
2970- Dump internal representation information of all flows in hardware::
2971
2972   flow dump {port_id} all {output_file}
2973
2974  for one flow::
2975
2976   flow dump {port_id} rule {rule_id} {output_file}
2977
2978- List and destroy aged flow rules::
2979
2980   flow aged {port_id} [destroy]
2981
2982- Tunnel offload - create a tunnel stub::
2983
2984   flow tunnel create {port_id} type {tunnel_type}
2985
2986- Tunnel offload - destroy a tunnel stub::
2987
2988   flow tunnel destroy {port_id} id {tunnel_id}
2989
2990- Tunnel offload - list port tunnel stubs::
2991
2992   flow tunnel list {port_id}
2993
2994Retrieving info about flow management engine
2995~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2996
2997``flow info`` retrieves info on pre-configurable resources in the underlying
2998device to give a hint of possible values for flow engine configuration.
2999
3000``rte_flow_info_get()``::
3001
3002   flow info {port_id}
3003
3004If successful, it will show::
3005
3006   Flow engine resources on port #[...]:
3007   Number of queues: #[...]
3008   Size of queues: #[...]
3009   Number of counters: #[...]
3010   Number of aging objects: #[...]
3011   Number of meters: #[...]
3012
3013Otherwise it will show an error message of the form::
3014
3015   Caught error type [...] ([...]): [...]
3016
3017Configuring flow management engine
3018~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3019
3020``flow configure`` pre-allocates all the needed resources in the underlying
3021device to be used later at the flow creation. Flow queues are allocated as well
3022for asynchronous flow creation/destruction operations. It is bound to
3023``rte_flow_configure()``::
3024
3025   flow configure {port_id}
3026       [queues_number {number}] [queues_size {size}]
3027       [counters_number {number}]
3028       [aging_counters_number {number}]
3029       [meters_number {number}]
3030
3031If successful, it will show::
3032
3033   Configure flows on port #[...]: number of queues #[...] with #[...] elements
3034
3035Otherwise it will show an error message of the form::
3036
3037   Caught error type [...] ([...]): [...]
3038
3039Creating pattern templates
3040~~~~~~~~~~~~~~~~~~~~~~~~~~
3041
3042``flow pattern_template create`` creates the specified pattern template.
3043It is bound to ``rte_flow_pattern_template_create()``::
3044
3045   flow pattern_template {port_id} create [pattern_template_id {id}]
3046       [relaxed {boolean}] [ingress] [egress] [transfer]
3047	   template {item} [/ {item} [...]] / end
3048
3049If successful, it will show::
3050
3051   Pattern template #[...] created
3052
3053Otherwise it will show an error message of the form::
3054
3055   Caught error type [...] ([...]): [...]
3056
3057This command uses the same pattern items as ``flow create``,
3058their format is described in `Creating flow rules`_.
3059
3060Destroying pattern templates
3061~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3062
3063``flow pattern_template destroy`` destroys one or more pattern templates
3064from their template ID (as returned by ``flow pattern_template create``),
3065this command calls ``rte_flow_pattern_template_destroy()`` as many
3066times as necessary::
3067
3068   flow pattern_template {port_id} destroy pattern_template {id} [...]
3069
3070If successful, it will show::
3071
3072   Pattern template #[...] destroyed
3073
3074It does not report anything for pattern template IDs that do not exist.
3075The usual error message is shown when a pattern template cannot be destroyed::
3076
3077   Caught error type [...] ([...]): [...]
3078
3079Creating actions templates
3080~~~~~~~~~~~~~~~~~~~~~~~~~~
3081
3082``flow actions_template create`` creates the specified actions template.
3083It is bound to ``rte_flow_actions_template_create()``::
3084
3085   flow actions_template {port_id} create [actions_template_id {id}]
3086       [ingress] [egress] [transfer]
3087	   template {action} [/ {action} [...]] / end
3088       mask {action} [/ {action} [...]] / end
3089
3090If successful, it will show::
3091
3092   Actions template #[...] created
3093
3094Otherwise it will show an error message of the form::
3095
3096   Caught error type [...] ([...]): [...]
3097
3098This command uses the same actions as ``flow create``,
3099their format is described in `Creating flow rules`_.
3100
3101Destroying actions templates
3102~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3103
3104``flow actions_template destroy`` destroys one or more actions templates
3105from their template ID (as returned by ``flow actions_template create``),
3106this command calls ``rte_flow_actions_template_destroy()`` as many
3107times as necessary::
3108
3109   flow actions_template {port_id} destroy actions_template {id} [...]
3110
3111If successful, it will show::
3112
3113   Actions template #[...] destroyed
3114
3115It does not report anything for actions template IDs that do not exist.
3116The usual error message is shown when an actions template cannot be destroyed::
3117
3118   Caught error type [...] ([...]): [...]
3119
3120Creating template table
3121~~~~~~~~~~~~~~~~~~~~~~~
3122
3123``flow template_table create`` creates the specified template table.
3124It is bound to ``rte_flow_template_table_create()``::
3125
3126   flow template_table {port_id} create
3127       [table_id {id}] [group {group_id}]
3128       [priority {level}] [ingress] [egress] [transfer]
3129       rules_number {number}
3130       pattern_template {pattern_template_id}
3131       actions_template {actions_template_id}
3132
3133If successful, it will show::
3134
3135   Template table #[...] created
3136
3137Otherwise it will show an error message of the form::
3138
3139   Caught error type [...] ([...]): [...]
3140
3141Destroying flow table
3142~~~~~~~~~~~~~~~~~~~~~
3143
3144``flow template_table destroy`` destroys one or more template tables
3145from their table ID (as returned by ``flow template_table create``),
3146this command calls ``rte_flow_template_table_destroy()`` as many
3147times as necessary::
3148
3149   flow template_table {port_id} destroy table {id} [...]
3150
3151If successful, it will show::
3152
3153   Template table #[...] destroyed
3154
3155It does not report anything for table IDs that do not exist.
3156The usual error message is shown when a table cannot be destroyed::
3157
3158   Caught error type [...] ([...]): [...]
3159
3160Pushing enqueued operations
3161~~~~~~~~~~~~~~~~~~~~~~~~~~~
3162
3163``flow push`` pushes all the outstanding enqueued operations
3164to the underlying device immediately.
3165It is bound to ``rte_flow_push()``::
3166
3167   flow push {port_id} queue {queue_id}
3168
3169If successful, it will show::
3170
3171   Queue #[...] operations pushed
3172
3173The usual error message is shown when operations cannot be pushed::
3174
3175   Caught error type [...] ([...]): [...]
3176
3177Pulling flow operations results
3178~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3179
3180``flow pull`` asks the underlying device about flow queue operations
3181results and return all the processed (successfully or not) operations.
3182It is bound to ``rte_flow_pull()``::
3183
3184   flow pull {port_id} queue {queue_id}
3185
3186If successful, it will show::
3187
3188   Queue #[...] pulled #[...] operations (#[...] failed, #[...] succeeded)
3189
3190The usual error message is shown when operations results cannot be pulled::
3191
3192   Caught error type [...] ([...]): [...]
3193
3194Creating a tunnel stub for offload
3195~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3196
3197``flow tunnel create`` setup a tunnel stub for tunnel offload flow rules::
3198
3199   flow tunnel create {port_id} type {tunnel_type}
3200
3201If successful, it will return a tunnel stub ID usable with other commands::
3202
3203   port [...]: flow tunnel #[...] type [...]
3204
3205Tunnel stub ID is relative to a port.
3206
3207Destroying tunnel offload stub
3208~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3209
3210``flow tunnel destroy`` destroy port tunnel stub::
3211
3212   flow tunnel destroy {port_id} id {tunnel_id}
3213
3214Listing tunnel offload stubs
3215~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3216
3217``flow tunnel list`` list port tunnel offload stubs::
3218
3219   flow tunnel list {port_id}
3220
3221Validating flow rules
3222~~~~~~~~~~~~~~~~~~~~~
3223
3224``flow validate`` reports whether a flow rule would be accepted by the
3225underlying device in its current state but stops short of creating it. It is
3226bound to ``rte_flow_validate()``::
3227
3228   flow validate {port_id}
3229      [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3230      pattern {item} [/ {item} [...]] / end
3231      actions {action} [/ {action} [...]] / end
3232
3233If successful, it will show::
3234
3235   Flow rule validated
3236
3237Otherwise it will show an error message of the form::
3238
3239   Caught error type [...] ([...]): [...]
3240
3241This command uses the same parameters as ``flow create``, their format is
3242described in `Creating flow rules`_.
3243
3244Check whether redirecting any Ethernet packet received on port 0 to RX queue
3245index 6 is supported::
3246
3247   testpmd> flow validate 0 ingress pattern eth / end
3248      actions queue index 6 / end
3249   Flow rule validated
3250   testpmd>
3251
3252Port 0 does not support TCPv6 rules::
3253
3254   testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3255      actions drop / end
3256   Caught error type 9 (specific pattern item): Invalid argument
3257   testpmd>
3258
3259Creating flow rules
3260~~~~~~~~~~~~~~~~~~~
3261
3262``flow create`` validates and creates the specified flow rule. It is bound
3263to ``rte_flow_create()``::
3264
3265   flow create {port_id}
3266      [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3267      [tunnel_set {tunnel_id}] [tunnel_match {tunnel_id}]
3268      pattern {item} [/ {item} [...]] / end
3269      actions {action} [/ {action} [...]] / end
3270
3271If successful, it will return a flow rule ID usable with other commands::
3272
3273   Flow rule #[...] created
3274
3275Otherwise it will show an error message of the form::
3276
3277   Caught error type [...] ([...]): [...]
3278
3279Parameters describe in the following order:
3280
3281- Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens).
3282- Tunnel offload specification (tunnel_set, tunnel_match)
3283- A matching pattern, starting with the *pattern* token and terminated by an
3284  *end* pattern item.
3285- Actions, starting with the *actions* token and terminated by an *end*
3286  action.
3287
3288These translate directly to *rte_flow* objects provided as-is to the
3289underlying functions.
3290
3291The shortest valid definition only comprises mandatory tokens::
3292
3293   testpmd> flow create 0 pattern end actions end
3294
3295Note that PMDs may refuse rules that essentially do nothing such as this
3296one.
3297
3298**All unspecified object values are automatically initialized to 0.**
3299
3300Enqueueing creation of flow rules
3301~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3302
3303``flow queue create`` adds creation operation of a flow rule to a queue.
3304It is bound to ``rte_flow_async_create()``::
3305
3306   flow queue {port_id} create {queue_id}
3307       [postpone {boolean}] template_table {table_id}
3308       pattern_template {pattern_template_index}
3309       actions_template {actions_template_index}
3310       pattern {item} [/ {item} [...]] / end
3311       actions {action} [/ {action} [...]] / end
3312
3313If successful, it will return a flow rule ID usable with other commands::
3314
3315   Flow rule #[...] creaion enqueued
3316
3317Otherwise it will show an error message of the form::
3318
3319   Caught error type [...] ([...]): [...]
3320
3321This command uses the same pattern items and actions as ``flow create``,
3322their format is described in `Creating flow rules`_.
3323
3324``flow queue pull`` must be called to retrieve the operation status.
3325
3326Attributes
3327^^^^^^^^^^
3328
3329These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3330specified before the ``pattern`` token.
3331
3332- ``group {group id}``: priority group.
3333- ``priority {level}``: priority level within group.
3334- ``ingress``: rule applies to ingress traffic.
3335- ``egress``: rule applies to egress traffic.
3336- ``transfer``: apply rule directly to endpoints found in pattern.
3337
3338Please note that use of ``transfer`` attribute requires that the flow and
3339its indirect components be managed via so-called ``transfer`` proxy port.
3340See `show flow transfer proxy port ID for the given port`_ for details.
3341
3342Each instance of an attribute specified several times overrides the previous
3343value as shown below (group 4 is used)::
3344
3345   testpmd> flow create 0 group 42 group 24 group 4 [...]
3346
3347Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3348
3349While not specifying a direction is an error, some rules may allow both
3350simultaneously.
3351
3352Most rules affect RX therefore contain the ``ingress`` token::
3353
3354   testpmd> flow create 0 ingress pattern [...]
3355
3356Tunnel offload
3357^^^^^^^^^^^^^^
3358
3359Indicate tunnel offload rule type
3360
3361- ``tunnel_set {tunnel_id}``: mark rule as tunnel offload decap_set type.
3362- ``tunnel_match {tunnel_id}``:  mark rule as tunnel offload match type.
3363
3364Matching pattern
3365^^^^^^^^^^^^^^^^
3366
3367A matching pattern starts after the ``pattern`` token. It is made of pattern
3368items and is terminated by a mandatory ``end`` item.
3369
3370Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3371rte_flow_item_type``).
3372
3373The ``/`` token is used as a separator between pattern items as shown
3374below::
3375
3376   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3377
3378Note that protocol items like these must be stacked from lowest to highest
3379layer to make sense. For instance, the following rule is either invalid or
3380unlikely to match any packet::
3381
3382   testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3383
3384More information on these restrictions can be found in the *rte_flow*
3385documentation.
3386
3387Several items support additional specification structures, for example
3388``ipv4`` allows specifying source and destination addresses as follows::
3389
3390   testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3391      dst is 10.2.0.0 / end [...]
3392
3393This rule matches all IPv4 traffic with the specified properties.
3394
3395In this example, ``src`` and ``dst`` are field names of the underlying
3396``struct rte_flow_item_ipv4`` object. All item properties can be specified
3397in a similar fashion.
3398
3399The ``is`` token means that the subsequent value must be matched exactly,
3400and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3401accordingly. Possible assignment tokens are:
3402
3403- ``is``: match value perfectly (with full bit-mask).
3404- ``spec``: match value according to configured bit-mask.
3405- ``last``: specify upper bound to establish a range.
3406- ``mask``: specify bit-mask with relevant bits set to one.
3407- ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one.
3408
3409These yield identical results::
3410
3411   ipv4 src is 10.1.1.1
3412
3413::
3414
3415   ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3416
3417::
3418
3419   ipv4 src spec 10.1.1.1 src prefix 32
3420
3421::
3422
3423   ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3424
3425::
3426
3427   ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3428
3429Inclusive ranges can be defined with ``last``::
3430
3431   ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3432
3433Note that ``mask`` affects both ``spec`` and ``last``::
3434
3435   ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3436      # matches 10.1.0.0 to 10.2.255.255
3437
3438Properties can be modified multiple times::
3439
3440   ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3441
3442::
3443
3444   ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3445
3446Pattern items
3447^^^^^^^^^^^^^
3448
3449This section lists supported pattern items and their attributes, if any.
3450
3451- ``end``: end list of pattern items.
3452
3453- ``void``: no-op pattern item.
3454
3455- ``invert``: perform actions when pattern does not match.
3456
3457- ``any``: match any protocol for the current layer.
3458
3459  - ``num {unsigned}``: number of layers covered.
3460
3461- ``port_id``: match traffic from/to a given DPDK port ID.
3462
3463  - ``id {unsigned}``: DPDK port ID.
3464
3465- ``mark``: match value set in previously matched flow rule using the mark action.
3466
3467  - ``id {unsigned}``: arbitrary integer value.
3468
3469- ``raw``: match an arbitrary byte string.
3470
3471  - ``relative {boolean}``: look for pattern after the previous item.
3472  - ``search {boolean}``: search pattern from offset (see also limit).
3473  - ``offset {integer}``: absolute or relative offset for pattern.
3474  - ``limit {unsigned}``: search area limit for start of pattern.
3475  - ``pattern {string}``: byte string to look for.
3476  - ``pattern_hex {string}``: byte string (provided in hexadecimal) to look for.
3477
3478- ``eth``: match Ethernet header.
3479
3480  - ``dst {MAC-48}``: destination MAC.
3481  - ``src {MAC-48}``: source MAC.
3482  - ``type {unsigned}``: EtherType or TPID.
3483
3484- ``vlan``: match 802.1Q/ad VLAN tag.
3485
3486  - ``tci {unsigned}``: tag control information.
3487  - ``pcp {unsigned}``: priority code point.
3488  - ``dei {unsigned}``: drop eligible indicator.
3489  - ``vid {unsigned}``: VLAN identifier.
3490  - ``inner_type {unsigned}``: inner EtherType or TPID.
3491
3492- ``ipv4``: match IPv4 header.
3493
3494  - ``version_ihl {unsigned}``: IPv4 version and IP header length.
3495  - ``tos {unsigned}``: type of service.
3496  - ``ttl {unsigned}``: time to live.
3497  - ``proto {unsigned}``: next protocol ID.
3498  - ``src {ipv4 address}``: source address.
3499  - ``dst {ipv4 address}``: destination address.
3500
3501- ``ipv6``: match IPv6 header.
3502
3503  - ``tc {unsigned}``: traffic class.
3504  - ``flow {unsigned}``: flow label.
3505  - ``proto {unsigned}``: protocol (next header).
3506  - ``hop {unsigned}``: hop limit.
3507  - ``src {ipv6 address}``: source address.
3508  - ``dst {ipv6 address}``: destination address.
3509
3510- ``icmp``: match ICMP header.
3511
3512  - ``type {unsigned}``: ICMP packet type.
3513  - ``code {unsigned}``: ICMP packet code.
3514
3515- ``udp``: match UDP header.
3516
3517  - ``src {unsigned}``: UDP source port.
3518  - ``dst {unsigned}``: UDP destination port.
3519
3520- ``tcp``: match TCP header.
3521
3522  - ``src {unsigned}``: TCP source port.
3523  - ``dst {unsigned}``: TCP destination port.
3524
3525- ``sctp``: match SCTP header.
3526
3527  - ``src {unsigned}``: SCTP source port.
3528  - ``dst {unsigned}``: SCTP destination port.
3529  - ``tag {unsigned}``: validation tag.
3530  - ``cksum {unsigned}``: checksum.
3531
3532- ``vxlan``: match VXLAN header.
3533
3534  - ``vni {unsigned}``: VXLAN identifier.
3535  - ``last_rsvd {unsigned}``: VXLAN last reserved 8-bits.
3536
3537- ``e_tag``: match IEEE 802.1BR E-Tag header.
3538
3539  - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3540
3541- ``nvgre``: match NVGRE header.
3542
3543  - ``tni {unsigned}``: virtual subnet ID.
3544
3545- ``mpls``: match MPLS header.
3546
3547  - ``label {unsigned}``: MPLS label.
3548
3549- ``gre``: match GRE header.
3550
3551  - ``protocol {unsigned}``: protocol type.
3552
3553- ``gre_key``: match GRE optional key field.
3554
3555  - ``value {unsigned}``: key value.
3556
3557- ``gre_option``: match GRE optional fields(checksum/key/sequence).
3558
3559  - ``checksum {unsigned}``: checksum value.
3560  - ``key {unsigned}``: key value.
3561  - ``sequence {unsigned}``: sequence number value.
3562
3563- ``fuzzy``: fuzzy pattern match, expect faster than default.
3564
3565  - ``thresh {unsigned}``: accuracy threshold.
3566
3567- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3568
3569  - ``teid {unsigned}``: tunnel endpoint identifier.
3570
3571- ``geneve``: match GENEVE header.
3572
3573  - ``vni {unsigned}``: virtual network identifier.
3574  - ``protocol {unsigned}``: protocol type.
3575
3576- ``geneve-opt``: match GENEVE header option.
3577
3578  - ``class {unsigned}``: GENEVE option class.
3579  - ``type {unsigned}``: GENEVE option type.
3580  - ``length {unsigned}``: GENEVE option length in 32-bit words.
3581  - ``data {hex string}``: GENEVE option data, the length is defined by
3582    ``length`` field.
3583
3584- ``vxlan-gpe``: match VXLAN-GPE header.
3585
3586  - ``vni {unsigned}``: VXLAN-GPE identifier.
3587
3588- ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.
3589
3590  - ``sha {MAC-48}``: sender hardware address.
3591  - ``spa {ipv4 address}``: sender IPv4 address.
3592  - ``tha {MAC-48}``: target hardware address.
3593  - ``tpa {ipv4 address}``: target IPv4 address.
3594
3595- ``ipv6_ext``: match presence of any IPv6 extension header.
3596
3597  - ``next_hdr {unsigned}``: next header.
3598
3599- ``icmp6``: match any ICMPv6 header.
3600
3601  - ``type {unsigned}``: ICMPv6 type.
3602  - ``code {unsigned}``: ICMPv6 code.
3603
3604- ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.
3605
3606  - ``target_addr {ipv6 address}``: target address.
3607
3608- ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.
3609
3610  - ``target_addr {ipv6 address}``: target address.
3611
3612- ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.
3613
3614  - ``type {unsigned}``: ND option type.
3615
3616- ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet
3617  link-layer address option.
3618
3619  - ``sla {MAC-48}``: source Ethernet LLA.
3620
3621- ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet
3622  link-layer address option.
3623
3624  - ``tla {MAC-48}``: target Ethernet LLA.
3625
3626- ``meta``: match application specific metadata.
3627
3628  - ``data {unsigned}``: metadata value.
3629
3630- ``gtp_psc``: match GTP PDU extension header with type 0x85.
3631
3632  - ``pdu_type {unsigned}``: PDU type.
3633
3634  - ``qfi {unsigned}``: QoS flow identifier.
3635
3636- ``pppoes``, ``pppoed``: match PPPoE header.
3637
3638  - ``session_id {unsigned}``: session identifier.
3639
3640- ``pppoe_proto_id``: match PPPoE session protocol identifier.
3641
3642  - ``proto_id {unsigned}``: PPP protocol identifier.
3643
3644- ``l2tpv3oip``: match L2TPv3 over IP header.
3645
3646  - ``session_id {unsigned}``: L2TPv3 over IP session identifier.
3647
3648- ``ah``: match AH header.
3649
3650  - ``spi {unsigned}``: security parameters index.
3651
3652- ``pfcp``: match PFCP header.
3653
3654  - ``s_field {unsigned}``: S field.
3655  - ``seid {unsigned}``: session endpoint identifier.
3656
3657- ``integrity``: match packet integrity.
3658
3659   - ``level {unsigned}``: Packet encapsulation level the item should
3660     apply to. See rte_flow_action_rss for details.
3661   - ``value {unsigned}``: A bitmask that specify what packet elements
3662     must be matched for integrity.
3663
3664- ``conntrack``: match conntrack state.
3665
3666- ``port_representor``: match traffic entering the embedded switch from the given ethdev
3667
3668  - ``port_id {unsigned}``: ethdev port ID
3669
3670- ``represented_port``: match traffic entering the embedded switch from
3671  the entity represented by the given ethdev
3672
3673  - ``ethdev_port_id {unsigned}``: ethdev port ID
3674
3675- ``l2tpv2``: match L2TPv2 header.
3676
3677  - ``length {unsigned}``: L2TPv2 option length.
3678  - ``tunnel_id {unsigned}``: L2TPv2 tunnel identifier.
3679  - ``session_id {unsigned}``: L2TPv2 session identifier.
3680  - ``ns {unsigned}``: L2TPv2 option ns.
3681  - ``nr {unsigned}``: L2TPv2 option nr.
3682  - ``offset_size {unsigned}``: L2TPv2 option offset.
3683
3684- ``ppp``: match PPP header.
3685
3686  - ``addr {unsigned}``: PPP address.
3687  - ``ctrl {unsigned}``: PPP control.
3688  - ``proto_id {unsigned}``: PPP protocol identifier.
3689
3690- ``meter``: match meter color.
3691
3692  - ``color {value}``: meter color value (green/yellow/red).
3693
3694- ``send_to_kernel``: send packets to kernel.
3695
3696
3697Actions list
3698^^^^^^^^^^^^
3699
3700A list of actions starts after the ``actions`` token in the same fashion as
3701`Matching pattern`_; actions are separated by ``/`` tokens and the list is
3702terminated by a mandatory ``end`` action.
3703
3704Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3705rte_flow_action_type``).
3706
3707Dropping all incoming UDPv4 packets can be expressed as follows::
3708
3709   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3710      actions drop / end
3711
3712Several actions have configurable properties which must be specified when
3713there is no valid default value. For example, ``queue`` requires a target
3714queue index.
3715
3716This rule redirects incoming UDPv4 traffic to queue index 6::
3717
3718   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3719      actions queue index 6 / end
3720
3721While this one could be rejected by PMDs (unspecified queue index)::
3722
3723   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3724      actions queue / end
3725
3726As defined by *rte_flow*, the list is not ordered, all actions of a given
3727rule are performed simultaneously. These are equivalent::
3728
3729   queue index 6 / void / mark id 42 / end
3730
3731::
3732
3733   void / mark id 42 / queue index 6 / end
3734
3735All actions in a list should have different types, otherwise only the last
3736action of a given type is taken into account::
3737
3738   queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
3739
3740::
3741
3742   drop / drop / drop / end # drop is performed only once
3743
3744::
3745
3746   mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
3747
3748Considering they are performed simultaneously, opposite and overlapping
3749actions can sometimes be combined when the end result is unambiguous::
3750
3751   drop / queue index 6 / end # drop has no effect
3752
3753::
3754
3755   queue index 6 / rss queues 6 7 8 / end # queue has no effect
3756
3757::
3758
3759   drop / passthru / end # drop has no effect
3760
3761Note that PMDs may still refuse such combinations.
3762
3763Actions
3764^^^^^^^
3765
3766This section lists supported actions and their attributes, if any.
3767
3768- ``end``: end list of actions.
3769
3770- ``void``: no-op action.
3771
3772- ``passthru``: let subsequent rule process matched packets.
3773
3774- ``jump``: redirect traffic to group on device.
3775
3776  - ``group {unsigned}``: group to redirect to.
3777
3778- ``mark``: attach 32 bit value to packets.
3779
3780  - ``id {unsigned}``: 32 bit value to return with packets.
3781
3782- ``flag``: flag packets.
3783
3784- ``queue``: assign packets to a given queue index.
3785
3786  - ``index {unsigned}``: queue index to use.
3787
3788- ``drop``: drop packets (note: passthru has priority).
3789
3790- ``count``: enable counters for this rule.
3791
3792- ``rss``: spread packets among several queues.
3793
3794  - ``func {hash function}``: RSS hash function to apply, allowed tokens are
3795    ``toeplitz``, ``simple_xor``, ``symmetric_toeplitz`` and ``default``.
3796
3797  - ``level {unsigned}``: encapsulation level for ``types``.
3798
3799  - ``types [{RSS hash type} [...]] end``: specific RSS hash types.
3800    Note that an empty list does not disable RSS but instead requests
3801    unspecified "best-effort" settings.
3802
3803  - ``key {string}``: RSS hash key, overrides ``key_len``.
3804
3805  - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in
3806    conjunction with ``key`` to pad or truncate it.
3807
3808  - ``queues [{unsigned} [...]] end``: queue indices to use.
3809
3810- ``pf``: direct traffic to physical function.
3811
3812- ``vf``: direct traffic to a virtual function ID.
3813
3814  - ``original {boolean}``: use original VF ID if possible.
3815  - ``id {unsigned}``: VF ID.
3816
3817- ``port_id``: direct matching traffic to a given DPDK port ID.
3818
3819  - ``original {boolean}``: use original DPDK port ID if possible.
3820  - ``id {unsigned}``: DPDK port ID.
3821
3822- ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``.
3823
3824  - ``mpls_ttl``: MPLS TTL.
3825
3826- ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``.
3827
3828- ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``.
3829
3830  - ``nw_ttl``: IP TTL.
3831
3832- ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``.
3833
3834- ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``.
3835
3836- ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``.
3837
3838- ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``.
3839
3840- ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``.
3841
3842  - ``ethertype``: Ethertype.
3843
3844- ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``.
3845
3846  - ``vlan_vid``: VLAN id.
3847
3848- ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``.
3849
3850  - ``vlan_pcp``: VLAN priority.
3851
3852- ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``.
3853
3854  - ``ethertype``: Ethertype.
3855
3856- ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``.
3857
3858  - ``ethertype``: Ethertype.
3859
3860- ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration
3861  is done through `Config VXLAN Encap outer layers`_.
3862
3863- ``vxlan_decap``: Performs a decapsulation action by stripping all headers of
3864  the VXLAN tunnel network overlay from the matched flow.
3865
3866- ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration
3867  is done through `Config NVGRE Encap outer layers`_.
3868
3869- ``nvgre_decap``: Performs a decapsulation action by stripping all headers of
3870  the NVGRE tunnel network overlay from the matched flow.
3871
3872- ``l2_encap``: Performs a L2 encapsulation, L2 configuration
3873  is done through `Config L2 Encap`_.
3874
3875- ``l2_decap``: Performs a L2 decapsulation, L2 configuration
3876  is done through `Config L2 Decap`_.
3877
3878- ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer
3879  configuration is done through `Config MPLSoGRE Encap outer layers`_.
3880
3881- ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer
3882  configuration is done through `Config MPLSoGRE Decap outer layers`_.
3883
3884- ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer
3885  configuration is done through `Config MPLSoUDP Encap outer layers`_.
3886
3887- ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer
3888  configuration is done through `Config MPLSoUDP Decap outer layers`_.
3889
3890- ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header.
3891
3892  - ``ipv4_addr``: New IPv4 source address.
3893
3894- ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4
3895  header.
3896
3897  - ``ipv4_addr``: New IPv4 destination address.
3898
3899- ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header.
3900
3901  - ``ipv6_addr``: New IPv6 source address.
3902
3903- ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6
3904  header.
3905
3906  - ``ipv6_addr``: New IPv6 destination address.
3907
3908- ``set_tp_src``: Set a new source port number in the outermost TCP/UDP
3909  header.
3910
3911  - ``port``: New TCP/UDP source port number.
3912
3913- ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
3914  header.
3915
3916  - ``port``: New TCP/UDP destination port number.
3917
3918- ``mac_swap``: Swap the source and destination MAC addresses in the outermost
3919  Ethernet header.
3920
3921- ``dec_ttl``: Performs a decrease TTL value action
3922
3923- ``set_ttl``: Set TTL value with specified value
3924  - ``ttl_value {unsigned}``: The new TTL value to be set
3925
3926- ``set_mac_src``: set source MAC address
3927
3928  - ``mac_addr {MAC-48}``: new source MAC address
3929
3930- ``set_mac_dst``: set destination MAC address
3931
3932  - ``mac_addr {MAC-48}``: new destination MAC address
3933
3934- ``inc_tcp_seq``: Increase sequence number in the outermost TCP header.
3935
3936  - ``value {unsigned}``: Value to increase TCP sequence number by.
3937
3938- ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header.
3939
3940  - ``value {unsigned}``: Value to decrease TCP sequence number by.
3941
3942- ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP header.
3943
3944  - ``value {unsigned}``: Value to increase TCP acknowledgment number by.
3945
3946- ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP header.
3947
3948  - ``value {unsigned}``: Value to decrease TCP acknowledgment number by.
3949
3950- ``set_ipv4_dscp``: Set IPv4 DSCP value with specified value
3951
3952  - ``dscp_value {unsigned}``: The new DSCP value to be set
3953
3954- ``set_ipv6_dscp``: Set IPv6 DSCP value with specified value
3955
3956  - ``dscp_value {unsigned}``: The new DSCP value to be set
3957
3958- ``indirect``: Use indirect action created via
3959  ``flow indirect_action {port_id} create``
3960
3961  - ``indirect_action_id {unsigned}``: Indirect action ID to use
3962
3963- ``color``: Color the packet to reflect the meter color result
3964
3965  - ``type {value}``: Set color type with specified value(green/yellow/red)
3966
3967- ``port_representor``: at embedded switch level, send matching traffic to
3968  the given ethdev
3969
3970  - ``port_id {unsigned}``: ethdev port ID
3971
3972- ``represented_port``: at embedded switch level, send matching traffic to
3973  the entity represented by the given ethdev
3974
3975  - ``ethdev_port_id {unsigned}``: ethdev port ID
3976
3977- ``meter_mark``:  meter the directed packets using profile and policy
3978
3979  - ``mtr_profile {unsigned}``: meter profile ID to use
3980  - ``mtr_policy {unsigned}``: meter policy ID to use
3981  - ``mtr_color_mode {unsigned}``: meter color-awareness mode (blind/aware)
3982  - ``mtr_init_color {value}``: initial color value (green/yellow/red)
3983  - ``mtr_state {unsigned}``: meter state (disabled/enabled)
3984
3985Destroying flow rules
3986~~~~~~~~~~~~~~~~~~~~~
3987
3988``flow destroy`` destroys one or more rules from their rule ID (as returned
3989by ``flow create``), this command calls ``rte_flow_destroy()`` as many
3990times as necessary::
3991
3992   flow destroy {port_id} rule {rule_id} [...]
3993
3994If successful, it will show::
3995
3996   Flow rule #[...] destroyed
3997
3998It does not report anything for rule IDs that do not exist. The usual error
3999message is shown when a rule cannot be destroyed::
4000
4001   Caught error type [...] ([...]): [...]
4002
4003``flow flush`` destroys all rules on a device and does not take extra
4004arguments. It is bound to ``rte_flow_flush()``::
4005
4006   flow flush {port_id}
4007
4008Any errors are reported as above.
4009
4010Creating several rules and destroying them::
4011
4012   testpmd> flow create 0 ingress pattern eth / ipv6 / end
4013      actions queue index 2 / end
4014   Flow rule #0 created
4015   testpmd> flow create 0 ingress pattern eth / ipv4 / end
4016      actions queue index 3 / end
4017   Flow rule #1 created
4018   testpmd> flow destroy 0 rule 0 rule 1
4019   Flow rule #1 destroyed
4020   Flow rule #0 destroyed
4021   testpmd>
4022
4023The same result can be achieved using ``flow flush``::
4024
4025   testpmd> flow create 0 ingress pattern eth / ipv6 / end
4026      actions queue index 2 / end
4027   Flow rule #0 created
4028   testpmd> flow create 0 ingress pattern eth / ipv4 / end
4029      actions queue index 3 / end
4030   Flow rule #1 created
4031   testpmd> flow flush 0
4032   testpmd>
4033
4034Non-existent rule IDs are ignored::
4035
4036   testpmd> flow create 0 ingress pattern eth / ipv6 / end
4037      actions queue index 2 / end
4038   Flow rule #0 created
4039   testpmd> flow create 0 ingress pattern eth / ipv4 / end
4040      actions queue index 3 / end
4041   Flow rule #1 created
4042   testpmd> flow destroy 0 rule 42 rule 10 rule 2
4043   testpmd>
4044   testpmd> flow destroy 0 rule 0
4045   Flow rule #0 destroyed
4046   testpmd>
4047
4048Enqueueing destruction of flow rules
4049~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4050
4051``flow queue destroy`` adds destruction operations to destroy one or more rules
4052from their rule ID (as returned by ``flow queue create``) to a queue,
4053this command calls ``rte_flow_async_destroy()`` as many times as necessary::
4054
4055   flow queue {port_id} destroy {queue_id}
4056        [postpone {boolean}] rule {rule_id} [...]
4057
4058If successful, it will show::
4059
4060   Flow rule #[...] destruction enqueued
4061
4062It does not report anything for rule IDs that do not exist. The usual error
4063message is shown when a rule cannot be destroyed::
4064
4065   Caught error type [...] ([...]): [...]
4066
4067``flow queue pull`` must be called to retrieve the operation status.
4068
4069Querying flow rules
4070~~~~~~~~~~~~~~~~~~~
4071
4072``flow query`` queries a specific action of a flow rule having that
4073ability. Such actions collect information that can be reported using this
4074command. It is bound to ``rte_flow_query()``::
4075
4076   flow query {port_id} {rule_id} {action}
4077
4078If successful, it will display either the retrieved data for known actions
4079or the following message::
4080
4081   Cannot display result for action type [...] ([...])
4082
4083Otherwise, it will complain either that the rule does not exist or that some
4084error occurred::
4085
4086   Flow rule #[...] not found
4087
4088::
4089
4090   Caught error type [...] ([...]): [...]
4091
4092Currently only the ``count`` action is supported. This action reports the
4093number of packets that hit the flow rule and the total number of bytes. Its
4094output has the following format::
4095
4096   count:
4097    hits_set: [...] # whether "hits" contains a valid value
4098    bytes_set: [...] # whether "bytes" contains a valid value
4099    hits: [...] # number of packets
4100    bytes: [...] # number of bytes
4101
4102Querying counters for TCPv6 packets redirected to queue 6::
4103
4104   testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
4105      actions queue index 6 / count / end
4106   Flow rule #4 created
4107   testpmd> flow query 0 4 count
4108   count:
4109    hits_set: 1
4110    bytes_set: 0
4111    hits: 386446
4112    bytes: 0
4113   testpmd>
4114
4115Listing flow rules
4116~~~~~~~~~~~~~~~~~~
4117
4118``flow list`` lists existing flow rules sorted by priority and optionally
4119filtered by group identifiers::
4120
4121   flow list {port_id} [group {group_id}] [...]
4122
4123This command only fails with the following message if the device does not
4124exist::
4125
4126   Invalid port [...]
4127
4128Output consists of a header line followed by a short description of each
4129flow rule, one per line. There is no output at all when no flow rules are
4130configured on the device::
4131
4132   ID      Group   Prio    Attr    Rule
4133   [...]   [...]   [...]   [...]   [...]
4134
4135``Attr`` column flags:
4136
4137- ``i`` for ``ingress``.
4138- ``e`` for ``egress``.
4139
4140Creating several flow rules and listing them::
4141
4142   testpmd> flow create 0 ingress pattern eth / ipv4 / end
4143      actions queue index 6 / end
4144   Flow rule #0 created
4145   testpmd> flow create 0 ingress pattern eth / ipv6 / end
4146      actions queue index 2 / end
4147   Flow rule #1 created
4148   testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
4149      actions rss queues 6 7 8 end / end
4150   Flow rule #2 created
4151   testpmd> flow list 0
4152   ID      Group   Prio    Attr    Rule
4153   0       0       0       i-      ETH IPV4 => QUEUE
4154   1       0       0       i-      ETH IPV6 => QUEUE
4155   2       0       5       i-      ETH IPV4 UDP => RSS
4156   testpmd>
4157
4158Rules are sorted by priority (i.e. group ID first, then priority level)::
4159
4160   testpmd> flow list 1
4161   ID      Group   Prio    Attr    Rule
4162   0       0       0       i-      ETH => COUNT
4163   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
4164   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
4165   1       24      0       i-      ETH IPV4 UDP => QUEUE
4166   4       24      10      i-      ETH IPV4 TCP => DROP
4167   3       24      20      i-      ETH IPV4 => DROP
4168   2       24      42      i-      ETH IPV4 UDP => QUEUE
4169   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
4170   testpmd>
4171
4172Output can be limited to specific groups::
4173
4174   testpmd> flow list 1 group 0 group 63
4175   ID      Group   Prio    Attr    Rule
4176   0       0       0       i-      ETH => COUNT
4177   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
4178   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
4179   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
4180   testpmd>
4181
4182Toggling isolated mode
4183~~~~~~~~~~~~~~~~~~~~~~
4184
4185``flow isolate`` can be used to tell the underlying PMD that ingress traffic
4186must only be injected from the defined flow rules; that no default traffic
4187is expected outside those rules and the driver is free to assign more
4188resources to handle them. It is bound to ``rte_flow_isolate()``::
4189
4190 flow isolate {port_id} {boolean}
4191
4192If successful, enabling or disabling isolated mode shows either::
4193
4194 Ingress traffic on port [...]
4195    is now restricted to the defined flow rules
4196
4197Or::
4198
4199 Ingress traffic on port [...]
4200    is not restricted anymore to the defined flow rules
4201
4202Otherwise, in case of error::
4203
4204   Caught error type [...] ([...]): [...]
4205
4206Mainly due to its side effects, PMDs supporting this mode may not have the
4207ability to toggle it more than once without reinitializing affected ports
4208first (e.g. by exiting testpmd).
4209
4210Enabling isolated mode::
4211
4212 testpmd> flow isolate 0 true
4213 Ingress traffic on port 0 is now restricted to the defined flow rules
4214 testpmd>
4215
4216Disabling isolated mode::
4217
4218 testpmd> flow isolate 0 false
4219 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
4220 testpmd>
4221
4222Dumping HW internal information
4223~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4224
4225``flow dump`` dumps the hardware's internal representation information of
4226all flows. It is bound to ``rte_flow_dev_dump()``::
4227
4228   flow dump {port_id} {output_file}
4229
4230If successful, it will show::
4231
4232   Flow dump finished
4233
4234Otherwise, it will complain error occurred::
4235
4236   Caught error type [...] ([...]): [...]
4237
4238Listing and destroying aged flow rules
4239~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4240
4241``flow aged`` simply lists aged flow rules be get from api ``rte_flow_get_aged_flows``,
4242and ``destroy`` parameter can be used to destroy those flow rules in PMD.
4243
4244   flow aged {port_id} [destroy]
4245
4246Listing current aged flow rules::
4247
4248   testpmd> flow aged 0
4249   Port 0 total aged flows: 0
4250   testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.14 / end
4251      actions age timeout 5 / queue index 0 /  end
4252   Flow rule #0 created
4253   testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.15 / end
4254      actions age timeout 4 / queue index 0 /  end
4255   Flow rule #1 created
4256   testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.16 / end
4257      actions age timeout 2 / queue index 0 /  end
4258   Flow rule #2 created
4259   testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.17 / end
4260      actions age timeout 3 / queue index 0 /  end
4261   Flow rule #3 created
4262
4263
4264Aged Rules are simply list as command ``flow list {port_id}``, but strip the detail rule
4265information, all the aged flows are sorted by the longest timeout time. For example, if
4266those rules be configured in the same time, ID 2 will be the first aged out rule, the next
4267will be ID 3, ID 1, ID 0::
4268
4269   testpmd> flow aged 0
4270   Port 0 total aged flows: 4
4271   ID      Group   Prio    Attr
4272   2       0       0       i--
4273   3       0       0       i--
4274   1       0       0       i--
4275   0       0       0       i--
4276
4277If attach ``destroy`` parameter, the command will destroy all the list aged flow rules.
4278
4279   testpmd> flow aged 0 destroy
4280   Port 0 total aged flows: 4
4281   ID      Group   Prio    Attr
4282   2       0       0       i--
4283   3       0       0       i--
4284   1       0       0       i--
4285   0       0       0       i--
4286
4287   Flow rule #2 destroyed
4288   Flow rule #3 destroyed
4289   Flow rule #1 destroyed
4290   Flow rule #0 destroyed
4291   4 flows be destroyed
4292   testpmd> flow aged 0
4293   Port 0 total aged flows: 0
4294
4295Creating indirect actions
4296~~~~~~~~~~~~~~~~~~~~~~~~~
4297
4298``flow indirect_action {port_id} create`` creates indirect action with optional
4299indirect action ID. It is bound to ``rte_flow_action_handle_create()``::
4300
4301   flow indirect_action {port_id} create [action_id {indirect_action_id}]
4302      [ingress] [egress] [transfer] action {action} / end
4303
4304If successful, it will show::
4305
4306   Indirect action #[...] created
4307
4308Otherwise, it will complain either that indirect action already exists or that
4309some error occurred::
4310
4311   Indirect action #[...] is already assigned, delete it first
4312
4313::
4314
4315   Caught error type [...] ([...]): [...]
4316
4317Create indirect rss action with id 100 to queues 1 and 2 on port 0::
4318
4319   testpmd> flow indirect_action 0 create action_id 100 \
4320      ingress action rss queues 1 2 end / end
4321
4322Create indirect rss action with id assigned by testpmd to queues 1 and 2 on
4323port 0::
4324
4325	testpmd> flow indirect_action 0 create action_id \
4326		ingress action rss queues 0 1 end / end
4327
4328Enqueueing creation of indirect actions
4329~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4330
4331``flow queue indirect_action create`` adds creation operation of an indirect
4332action to a queue. It is bound to ``rte_flow_async_action_handle_create()``::
4333
4334   flow queue {port_id} create {queue_id} [postpone {boolean}]
4335       table {table_id} item_template {item_template_id}
4336       action_template {action_template_id}
4337       pattern {item} [/ {item} [...]] / end
4338       actions {action} [/ {action} [...]] / end
4339
4340If successful, it will show::
4341
4342   Indirect action #[...] creation queued
4343
4344Otherwise it will show an error message of the form::
4345
4346   Caught error type [...] ([...]): [...]
4347
4348This command uses the same parameters as  ``flow indirect_action create``,
4349described in `Creating indirect actions`_.
4350
4351``flow queue pull`` must be called to retrieve the operation status.
4352
4353Updating indirect actions
4354~~~~~~~~~~~~~~~~~~~~~~~~~
4355
4356``flow indirect_action {port_id} update`` updates configuration of the indirect
4357action from its indirect action ID (as returned by
4358``flow indirect_action {port_id} create``). It is bound to
4359``rte_flow_action_handle_update()``::
4360
4361   flow indirect_action {port_id} update {indirect_action_id}
4362      action {action} / end
4363
4364If successful, it will show::
4365
4366   Indirect action #[...] updated
4367
4368Otherwise, it will complain either that indirect action not found or that some
4369error occurred::
4370
4371   Failed to find indirect action #[...] on port [...]
4372
4373::
4374
4375   Caught error type [...] ([...]): [...]
4376
4377Update indirect rss action having id 100 on port 0 with rss to queues 0 and 3
4378(in create example above rss queues were 1 and 2)::
4379
4380   testpmd> flow indirect_action 0 update 100 action rss queues 0 3 end / end
4381
4382Enqueueing update of indirect actions
4383~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4384
4385``flow queue indirect_action update`` adds update operation for an indirect
4386action to a queue. It is bound to ``rte_flow_async_action_handle_update()``::
4387
4388   flow queue {port_id} indirect_action {queue_id} update
4389      {indirect_action_id} [postpone {boolean}] action {action} / end
4390
4391If successful, it will show::
4392
4393   Indirect action #[...] update queued
4394
4395Otherwise it will show an error message of the form::
4396
4397   Caught error type [...] ([...]): [...]
4398
4399``flow queue pull`` must be called to retrieve the operation status.
4400
4401Destroying indirect actions
4402~~~~~~~~~~~~~~~~~~~~~~~~~~~
4403
4404``flow indirect_action {port_id} destroy`` destroys one or more indirect actions
4405from their indirect action IDs (as returned by
4406``flow indirect_action {port_id} create``). It is bound to
4407``rte_flow_action_handle_destroy()``::
4408
4409   flow indirect_action {port_id} destroy action_id {indirect_action_id} [...]
4410
4411If successful, it will show::
4412
4413   Indirect action #[...] destroyed
4414
4415It does not report anything for indirect action IDs that do not exist.
4416The usual error message is shown when a indirect action cannot be destroyed::
4417
4418   Caught error type [...] ([...]): [...]
4419
4420Destroy indirect actions having id 100 & 101::
4421
4422   testpmd> flow indirect_action 0 destroy action_id 100 action_id 101
4423
4424Enqueueing destruction of indirect actions
4425~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4426
4427``flow queue indirect_action destroy`` adds destruction operation to destroy
4428one or more indirect actions from their indirect action IDs (as returned by
4429``flow queue {port_id} indirect_action {queue_id} create``) to a queue.
4430It is bound to ``rte_flow_async_action_handle_destroy()``::
4431
4432   flow queue {port_id} indirect_action {queue_id} destroy
4433      [postpone {boolean}] action_id {indirect_action_id} [...]
4434
4435If successful, it will show::
4436
4437   Indirect action #[...] destruction queued
4438
4439Otherwise it will show an error message of the form::
4440
4441   Caught error type [...] ([...]): [...]
4442
4443``flow queue pull`` must be called to retrieve the operation status.
4444
4445Query indirect actions
4446~~~~~~~~~~~~~~~~~~~~~~
4447
4448``flow indirect_action {port_id} query`` queries the indirect action from its
4449indirect action ID (as returned by ``flow indirect_action {port_id} create``).
4450It is bound to ``rte_flow_action_handle_query()``::
4451
4452  flow indirect_action {port_id} query {indirect_action_id}
4453
4454Currently only rss indirect action supported. If successful, it will show::
4455
4456   Indirect RSS action:
4457      refs:[...]
4458
4459Otherwise, it will complain either that indirect action not found or that some
4460error occurred::
4461
4462   Failed to find indirect action #[...] on port [...]
4463
4464::
4465
4466   Caught error type [...] ([...]): [...]
4467
4468Query indirect action having id 100::
4469
4470   testpmd> flow indirect_action 0 query 100
4471
4472Enqueueing query of indirect actions
4473~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4474
4475``flow queue indirect_action query`` adds query operation for an indirect
4476action to a queue. It is bound to ``rte_flow_async_action_handle_query()``::
4477
4478   flow queue {port_id} indirect_action {queue_id} query
4479      {indirect_action_id} [postpone {boolean}]
4480
4481If successful, it will show::
4482
4483   Indirect action #[...] query queued
4484
4485Otherwise it will show an error message of the form::
4486
4487   Caught error type [...] ([...]): [...]
4488
4489``flow queue pull`` must be called to retrieve the operation status.
4490
4491Sample QinQ flow rules
4492~~~~~~~~~~~~~~~~~~~~~~
4493
4494Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
4495
4496   testpmd> port stop 0
4497   testpmd> vlan set extend on 0
4498
4499The above command sets the inner and outer TPID's to 0x8100.
4500
4501To change the TPID's the following commands should be used::
4502
4503   testpmd> vlan set outer tpid 0x88A8 0
4504   testpmd> vlan set inner tpid 0x8100 0
4505   testpmd> port start 0
4506
4507Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
4508
4509::
4510
4511   testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
4512       vlan tci is 456 / end actions vf id 1 / queue index 0 / end
4513   Flow rule #0 validated
4514
4515   testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
4516       vlan tci is 456 / end actions vf id 123 / queue index 0 / end
4517   Flow rule #0 created
4518
4519   testpmd> flow list 0
4520   ID      Group   Prio    Attr    Rule
4521   0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
4522
4523Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
4524
4525::
4526
4527   testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
4528        vlan tci is 654 / end actions pf / queue index 0 / end
4529   Flow rule #1 validated
4530
4531   testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
4532        vlan tci is 654 / end actions pf / queue index 1 / end
4533   Flow rule #1 created
4534
4535   testpmd> flow list 0
4536   ID      Group   Prio    Attr    Rule
4537   0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
4538   1       0       0       i-      ETH VLAN VLAN=>PF QUEUE
4539
4540Sample VXLAN flow rules
4541~~~~~~~~~~~~~~~~~~~~~~~
4542
4543Before creating VXLAN rule(s), the UDP port should be added for VXLAN packet
4544filter on a port::
4545
4546  testpmd> rx_vxlan_port add 4789 0
4547
4548Create VXLAN rules on port 0 to steer traffic to PF queues.
4549
4550::
4551
4552  testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan /
4553         eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end
4554  Flow rule #0 created
4555
4556  testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 3 /
4557         eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end
4558  Flow rule #1 created
4559
4560  testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan /
4561         eth dst is 00:11:22:33:44:55 / vlan tci is 10 / end actions pf /
4562         queue index 3 / end
4563  Flow rule #2 created
4564
4565  testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 5 /
4566         eth dst is 00:11:22:33:44:55 / vlan tci is 20 / end actions pf /
4567         queue index 4 / end
4568  Flow rule #3 created
4569
4570  testpmd> flow create 0 ingress pattern eth dst is 00:00:00:00:01:00 / ipv4 /
4571         udp / vxlan vni is 6 /  eth dst is 00:11:22:33:44:55 / end actions pf /
4572         queue index 5 / end
4573  Flow rule #4 created
4574
4575  testpmd> flow list 0
4576  ID      Group   Prio    Attr    Rule
4577  0       0       0       i-      ETH IPV4 UDP VXLAN ETH => QUEUE
4578  1       0       0       i-      ETH IPV4 UDP VXLAN ETH => QUEUE
4579  2       0       0       i-      ETH IPV4 UDP VXLAN ETH VLAN => QUEUE
4580  3       0       0       i-      ETH IPV4 UDP VXLAN ETH VLAN => QUEUE
4581  4       0       0       i-      ETH IPV4 UDP VXLAN ETH => QUEUE
4582
4583Sample VXLAN encapsulation rule
4584~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4585
4586VXLAN encapsulation outer layer has default value pre-configured in testpmd
4587source code, those can be changed by using the following commands
4588
4589IPv4 VXLAN outer header::
4590
4591 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1
4592        ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4593 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4594        queue index 0 / end
4595
4596 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src
4597         127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4598         eth-dst 22:22:22:22:22:22
4599 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4600         queue index 0 / end
4601
4602 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0
4603         ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4604         eth-dst 22:22:22:22:22:22
4605 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4606         queue index 0 / end
4607
4608IPv6 VXLAN outer header::
4609
4610 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1
4611        ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4612 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4613         queue index 0 / end
4614
4615 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4616         ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11
4617         eth-dst 22:22:22:22:22:22
4618 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4619         queue index 0 / end
4620
4621 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4622         ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4623         eth-dst 22:22:22:22:22:22
4624 testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4625         queue index 0 / end
4626
4627Sample NVGRE encapsulation rule
4628~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4629
4630NVGRE encapsulation outer layer has default value pre-configured in testpmd
4631source code, those can be changed by using the following commands
4632
4633IPv4 NVGRE outer header::
4634
4635 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1
4636        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4637 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4638        queue index 0 / end
4639
4640 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1
4641         ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4642         eth-dst 22:22:22:22:22:22
4643 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4644         queue index 0 / end
4645
4646IPv6 NVGRE outer header::
4647
4648 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4649        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4650 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4651        queue index 0 / end
4652
4653 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4654        vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4655 testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4656        queue index 0 / end
4657
4658Sample L2 encapsulation rule
4659~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4660
4661L2 encapsulation has default value pre-configured in testpmd
4662source code, those can be changed by using the following commands
4663
4664L2 header::
4665
4666 testpmd> set l2_encap ip-version ipv4
4667        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4668 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4669        mplsoudp_decap / l2_encap / end
4670
4671L2 with VXLAN header::
4672
4673 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34
4674         eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4675 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4676        mplsoudp_decap / l2_encap / end
4677
4678Sample L2 decapsulation rule
4679~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4680
4681L2 decapsulation has default value pre-configured in testpmd
4682source code, those can be changed by using the following commands
4683
4684L2 header::
4685
4686 testpmd> set l2_decap
4687 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap /
4688        queue index 0 / end
4689
4690L2 with VXLAN header::
4691
4692 testpmd> set l2_encap-with-vlan
4693 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap /
4694         queue index 0 / end
4695
4696Sample MPLSoGRE encapsulation rule
4697~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4698
4699MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd
4700source code, those can be changed by using the following commands
4701
4702IPv4 MPLSoGRE outer header::
4703
4704 testpmd> set mplsogre_encap ip-version ipv4 label 4
4705        ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4706        eth-dst 22:22:22:22:22:22
4707 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4708        mplsogre_encap / end
4709
4710IPv4 MPLSoGRE with VLAN outer header::
4711
4712 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4
4713        ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4714        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4715 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4716        mplsogre_encap / end
4717
4718IPv6 MPLSoGRE outer header::
4719
4720 testpmd> set mplsogre_encap ip-version ipv6 mask 4
4721        ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4722        eth-dst 22:22:22:22:22:22
4723 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4724        mplsogre_encap / end
4725
4726IPv6 MPLSoGRE with VLAN outer header::
4727
4728 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4
4729        ip-src ::1 ip-dst ::2222 vlan-tci 34
4730        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4731 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4732        mplsogre_encap / end
4733
4734Sample MPLSoGRE decapsulation rule
4735~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4736
4737MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd
4738source code, those can be changed by using the following commands
4739
4740IPv4 MPLSoGRE outer header::
4741
4742 testpmd> set mplsogre_decap ip-version ipv4
4743 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions
4744        mplsogre_decap / l2_encap / end
4745
4746IPv4 MPLSoGRE with VLAN outer header::
4747
4748 testpmd> set mplsogre_decap-with-vlan ip-version ipv4
4749 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end
4750        actions mplsogre_decap / l2_encap / end
4751
4752IPv6 MPLSoGRE outer header::
4753
4754 testpmd> set mplsogre_decap ip-version ipv6
4755 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end
4756        actions mplsogre_decap / l2_encap / end
4757
4758IPv6 MPLSoGRE with VLAN outer header::
4759
4760 testpmd> set mplsogre_decap-with-vlan ip-version ipv6
4761 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end
4762        actions mplsogre_decap / l2_encap / end
4763
4764Sample MPLSoUDP encapsulation rule
4765~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4766
4767MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd
4768source code, those can be changed by using the following commands
4769
4770IPv4 MPLSoUDP outer header::
4771
4772 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10
4773        ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11
4774        eth-dst 22:22:22:22:22:22
4775 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4776        mplsoudp_encap / end
4777
4778IPv4 MPLSoUDP with VLAN outer header::
4779
4780 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5
4781        udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34
4782        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4783 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4784        mplsoudp_encap / end
4785
4786IPv6 MPLSoUDP outer header::
4787
4788 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10
4789        ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11
4790        eth-dst 22:22:22:22:22:22
4791 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4792        mplsoudp_encap / end
4793
4794IPv6 MPLSoUDP with VLAN outer header::
4795
4796 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5
4797        udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34
4798        eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4799 testpmd> flow create 0 egress pattern eth / end actions l2_decap /
4800        mplsoudp_encap / end
4801
4802Sample MPLSoUDP decapsulation rule
4803~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4804
4805MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd
4806source code, those can be changed by using the following commands
4807
4808IPv4 MPLSoUDP outer header::
4809
4810 testpmd> set mplsoudp_decap ip-version ipv4
4811 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions
4812        mplsoudp_decap / l2_encap / end
4813
4814IPv4 MPLSoUDP with VLAN outer header::
4815
4816 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4
4817 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end
4818        actions mplsoudp_decap / l2_encap / end
4819
4820IPv6 MPLSoUDP outer header::
4821
4822 testpmd> set mplsoudp_decap ip-version ipv6
4823 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end
4824        actions mplsoudp_decap / l2_encap / end
4825
4826IPv6 MPLSoUDP with VLAN outer header::
4827
4828 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6
4829 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end
4830        actions mplsoudp_decap / l2_encap / end
4831
4832Sample Raw encapsulation rule
4833~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4834
4835Raw encapsulation configuration can be set by the following commands
4836
4837Encapsulating VxLAN::
4838
4839 testpmd> set raw_encap 4 eth src is 10:11:22:33:44:55 / vlan tci is 1
4840        inner_type is 0x0800 / ipv4 / udp dst is 4789 / vxlan vni
4841        is 2 / end_set
4842 testpmd> flow create 0 egress pattern eth / ipv4 / end actions
4843        raw_encap index 4 / end
4844
4845Sample Raw decapsulation rule
4846~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4847
4848Raw decapsulation configuration can be set by the following commands
4849
4850Decapsulating VxLAN::
4851
4852 testpmd> set raw_decap eth / ipv4 / udp / vxlan / end_set
4853 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 /
4854        end actions raw_decap / queue index 0 / end
4855
4856Sample ESP rules
4857~~~~~~~~~~~~~~~~
4858
4859ESP rules can be created by the following commands::
4860
4861 testpmd> flow create 0 ingress pattern eth / ipv4 / esp spi is 1 / end actions
4862        queue index 3 / end
4863 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp spi is 1 / end
4864        actions queue index 3 / end
4865 testpmd> flow create 0 ingress pattern eth / ipv6 / esp spi is 1 / end actions
4866        queue index 3 / end
4867 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp spi is 1 / end
4868        actions queue index 3 / end
4869
4870Sample AH rules
4871~~~~~~~~~~~~~~~~
4872
4873AH rules can be created by the following commands::
4874
4875 testpmd> flow create 0 ingress pattern eth / ipv4 / ah spi is 1 / end actions
4876        queue index 3 / end
4877 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / ah spi is 1 / end
4878        actions queue index 3 / end
4879 testpmd> flow create 0 ingress pattern eth / ipv6 / ah spi is 1 / end actions
4880        queue index 3 / end
4881 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / ah spi is 1 / end
4882        actions queue index 3 / end
4883
4884Sample PFCP rules
4885~~~~~~~~~~~~~~~~~
4886
4887PFCP rules can be created by the following commands(s_field need to be 1
4888if seid is set)::
4889
4890 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 0 / end
4891        actions queue index 3 / end
4892 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 1
4893        seid is 1 / end actions queue index 3 / end
4894 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 0 / end
4895        actions queue index 3 / end
4896 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 1
4897        seid is 1 / end actions queue index 3 / end
4898
4899Sample Sampling/Mirroring rules
4900~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4901
4902Sample/Mirroring rules can be set by the following commands
4903
4904NIC-RX Sampling rule, the matched ingress packets and sent to the queue 1,
4905and 50% packets are duplicated and marked with 0x1234 and sent to queue 0.
4906
4907::
4908
4909 testpmd> set sample_actions 0 mark id  0x1234 / queue index 0 / end
4910 testpmd> flow create 0 ingress group 1 pattern eth / end actions
4911        sample ratio 2 index 0 / queue index 1 / end
4912
4913Match packets coming from a VM which is referred to by means of
4914its representor ethdev (port 1), mirror 50% of them to the
4915said representor (for bookkeeping) as well as encapsulate
4916all the packets and steer them to the physical port:
4917
4918::
4919
4920   testpmd> set sample_actions 0 port_representor ethdev_port_id 1 / end
4921
4922   testpmd> set vxlan ip-version ipv4 vni 4 udp-src 32 udp-dst 4789 ip-src 127.0.0.1
4923      ip-dst 127.0.0.2 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4924
4925   testpmd> flow create 0 transfer pattern represented_port ethdev_port_id is 1 / end
4926      actions sample ratio 2 index 0 / vxlan_encap /
4927      represented_port ethdev_port_id 0 / end
4928
4929The rule is inserted via port 0 (assumed to have "transfer" privilege).
4930
4931Sample integrity rules
4932~~~~~~~~~~~~~~~~~~~~~~
4933
4934Integrity rules can be created by the following commands:
4935
4936Integrity rule that forwards valid TCP packets to group 1.
4937TCP packet integrity is matched with the ``l4_ok`` bit 3.
4938
4939::
4940
4941 testpmd> flow create 0 ingress
4942            pattern eth / ipv4 / tcp / integrity value mask 8 value spec 8 / end
4943            actions jump group 1 / end
4944
4945Integrity rule that forwards invalid packets to application.
4946General packet integrity is matched with the ``packet_ok`` bit 0.
4947
4948::
4949
4950 testpmd> flow create 0 ingress pattern integrity value mask 1 value spec 0 / end actions queue index 0 / end
4951
4952Sample conntrack rules
4953~~~~~~~~~~~~~~~~~~~~~~
4954
4955Conntrack rules can be set by the following commands
4956
4957Need to construct the connection context with provided information.
4958In the first table, create a flow rule by using conntrack action and jump to
4959the next table. In the next table, create a rule to check the state.
4960
4961::
4962
4963 testpmd> set conntrack com peer 1 is_orig 1 enable 1 live 1 sack 1 cack 0
4964        last_dir 0 liberal 0 state 1 max_ack_win 7 r_lim 5 last_win 510
4965        last_seq 2632987379 last_ack 2532480967 last_end 2632987379
4966        last_index 0x8
4967 testpmd> set conntrack orig scale 7 fin 0 acked 1 unack_data 0
4968        sent_end 2632987379 reply_end 2633016339 max_win 28960
4969        max_ack 2632987379
4970 testpmd> set conntrack rply scale 7 fin 0 acked 1 unack_data 0
4971        sent_end 2532480967 reply_end 2532546247 max_win 65280
4972        max_ack 2532480967
4973 testpmd> flow indirect_action 0 create ingress action conntrack / end
4974 testpmd> flow create 0 group 3 ingress pattern eth / ipv4 / tcp / end actions indirect 0 / jump group 5 / end
4975 testpmd> flow create 0 group 5 ingress pattern eth / ipv4 / tcp / conntrack is 1 / end actions queue index 5 / end
4976
4977Construct the conntrack again with only "is_orig" set to 0 (other fields are
4978ignored), then use "update" interface to update the direction. Create flow
4979rules like above for the peer port.
4980
4981::
4982
4983 testpmd> flow indirect_action 0 update 0 action conntrack_update dir / end
4984
4985Sample meter with policy rules
4986~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4987
4988Meter with policy rules can be created by the following commands:
4989
4990Need to create policy first and actions are set for green/yellow/red colors.
4991Create meter with policy id. Create flow with meter id.
4992
4993Example for policy with meter color action. The purpose is to color the packet
4994to reflect the meter color result.
4995The meter policy action list: ``green -> green, yellow -> yellow, red -> red``.
4996
4997::
4998
4999   testpmd> add port meter profile srtcm_rfc2697 0 13 21504 2688 0 0
5000   testpmd> add port meter policy 0 1 g_actions color type green / end y_actions color type yellow / end
5001            r_actions color type red / end
5002   testpmd> create port meter 0 1 13 1 yes 0xffff 0 0
5003   testpmd> flow create 0 priority 0 ingress group 1 pattern eth / end actions meter mtr_id 1 / end
5004
5005Sample L2TPv2 RSS rules
5006~~~~~~~~~~~~~~~~~~~~~~~
5007
5008L2TPv2 RSS rules can be created by the following commands::
5009
5010   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type control
5011            / end actions rss types l2tpv2 end queues end / end
5012   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / end
5013            actions rss types eth l2-src-only end queues end / end
5014   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / end
5015            actions rss types l2tpv2 end queues end / end
5016   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4
5017            / end actions rss types ipv4 end queues end / end
5018   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv6
5019            / udp / end actions rss types ipv6-udp end queues end / end
5020   testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 / ppp / ipv4
5021            / tcp / end actions rss types ipv4-tcp end queues end / end
5022   testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 / ppp / ipv6
5023            / end actions rss types ipv6 end queues end / end
5024
5025Sample L2TPv2 FDIR rules
5026~~~~~~~~~~~~~~~~~~~~~~~~
5027
5028L2TPv2 FDIR rules can be created by the following commands::
5029
5030   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type control
5031            session_id is 0x1111 / end actions queue index 3 / end
5032   testpmd> flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4
5033            / udp / l2tpv2 type data / end actions queue index 3 / end
5034   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data
5035            session_id is 0x1111 / ppp / end actions queue index 3 / end
5036   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4
5037            src is 10.0.0.1 / end actions queue index 3 / end
5038   testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 / ppp / ipv6
5039            dst is ABAB:910B:6666:3457:8295:3333:1800:2929 / end actions queue index 3 / end
5040   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4
5041            / udp src is 22 / end actions queue index 3 / end
5042   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4
5043            / tcp dst is 23 / end actions queue index 3 / end
5044
5045Sample RAW rule
5046~~~~~~~~~~~~~~~
5047
5048A RAW rule can be created as following using ``pattern_hex`` key and mask.
5049
5050::
5051
5052    testpmd> flow create 0 group 0 priority 1 ingress pattern raw relative is 0 search is 0 offset
5053             is 0 limit is 0 pattern_hex spec 00000000000000000000000000000000000000000000000000000a0a0a0a
5054             pattern_hex mask 0000000000000000000000000000000000000000000000000000ffffffff / end actions
5055             queue index 4 / end
5056
5057BPF Functions
5058--------------
5059
5060The following sections show functions to load/unload eBPF based filters.
5061
5062bpf-load
5063~~~~~~~~
5064
5065Load an eBPF program as a callback for particular RX/TX queue::
5066
5067   testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename)
5068
5069The available load-flags are:
5070
5071* ``J``: use JIT generated native code, otherwise BPF interpreter will be used.
5072
5073* ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data.
5074
5075* ``-``: none.
5076
5077.. note::
5078
5079   You'll need clang v3.7 or above to build bpf program you'd like to load
5080
5081For example:
5082
5083.. code-block:: console
5084
5085   cd examples/bpf
5086   clang -O2 -target bpf -c t1.c
5087
5088Then to load (and JIT compile) t1.o at RX queue 0, port 1:
5089
5090.. code-block:: console
5091
5092   testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o
5093
5094To load (not JITed) t1.o at TX queue 0, port 0:
5095
5096.. code-block:: console
5097
5098   testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o
5099
5100bpf-unload
5101~~~~~~~~~~
5102
5103Unload previously loaded eBPF program for particular RX/TX queue::
5104
5105   testpmd> bpf-unload rx|tx (portid) (queueid)
5106
5107For example to unload BPF filter from TX queue 0, port 0:
5108
5109.. code-block:: console
5110
5111   testpmd> bpf-unload tx 0 0
5112
5113Flex Item Functions
5114-------------------
5115
5116The following sections show functions that configure and create flex item object,
5117create flex pattern and use it in a flow rule.
5118The commands will use 20 bytes IPv4 header for examples:
5119
5120::
5121
5122   0                   1                   2                   3
5123   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
5124   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5125   |  ver  |  IHL  |     TOS       |        length                 | +0
5126   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5127   |       identification          | flg |    frag. offset         | +4
5128   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5129   |       TTL     |  protocol     |        checksum               | +8
5130   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5131   |               source IP address                               | +12
5132   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5133   |              destination IP address                           | +16
5134   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5135
5136
5137Create flex item
5138~~~~~~~~~~~~~~~~
5139
5140Flex item object is created by PMD according to a new header configuration. The
5141header configuration is compiled by the testpmd and stored in
5142``rte_flow_item_flex_conf`` type variable.
5143
5144::
5145
5146   # flow flex_item create <port> <flex id> <configuration file>
5147   testpmd> flow flex_item init 0 3 ipv4_flex_config.json
5148   port-0: created flex item #3
5149
5150Flex item configuration is kept in external JSON file.
5151It describes the following header elements:
5152
5153**New header length.**
5154
5155Specify whether the new header has fixed or variable length and the basic/minimal
5156header length value.
5157
5158If header length is not fixed, header location with a value that completes header
5159length calculation and scale/offset function must be added.
5160
5161Scale function depends on port hardware.
5162
5163**Next protocol.**
5164
5165Describes location in the new header that specify following network header type.
5166
5167**Flow match samples.**
5168
5169Describes locations in the new header that will be used in flow rules.
5170
5171Number of flow samples and sample maximal length depend of port hardware.
5172
5173**Input trigger.**
5174
5175Describes preceding network header configuration.
5176
5177**Output trigger.**
5178
5179Describes conditions that trigger transfer to following network header
5180
5181.. code-block:: json
5182
5183   {
5184      "next_header": { "field_mode": "FIELD_MODE_FIXED", "field_size": 20},
5185      "next_protocol": {"field_size": 8, "field_base": 72},
5186      "sample_data": [
5187         { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 0},
5188         { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 32},
5189         { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 64},
5190         { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 96}
5191      ],
5192      "input_link": [
5193         {"item": "eth type is 0x0800"},
5194         {"item": "vlan inner_type is 0x0800"}
5195      ],
5196      "output_link": [
5197         {"item": "udp", "next": 17},
5198         {"item": "tcp", "next": 6},
5199         {"item": "icmp", "next": 1}
5200      ]
5201   }
5202
5203
5204Flex pattern and flow rules
5205~~~~~~~~~~~~~~~~~~~~~~~~~~~
5206
5207Flex pattern describe parts of network header that will trigger flex flow item hit in a flow rule.
5208Flex pattern directly related to flex item samples configuration.
5209Flex pattern can be shared between ports.
5210
5211**Flex pattern and flow rule to match IPv4 version and 20 bytes length**
5212
5213::
5214
5215   # set flex_pattern <pattern_id> is <hex bytes sequence>
5216   testpmd> flow flex_item pattern 5 is 45FF
5217   created pattern #5
5218
5219   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / flex item is 3 pattern is 5 / end actions mark id 1 / queue index 0 / end
5220   Flow rule #0 created
5221
5222**Flex pattern and flow rule to match packets with source address 1.2.3.4**
5223
5224::
5225
5226   testpmd> flow flex_item pattern 2 spec 45000000000000000000000001020304 mask FF0000000000000000000000FFFFFFFF
5227   created pattern #2
5228
5229   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / flex item is 3 pattern is 2 / end actions mark id 1 / queue index 0 / end
5230   Flow rule #0 created
5231
5232Driver specific commands
5233------------------------
5234
5235Some drivers provide specific features.
5236See:
5237
5238- :ref:`net/bonding testpmd driver specific commands <bonding_testpmd_commands>`
5239- :ref:`net/i40e testpmd driver specific commands <net_i40e_testpmd_commands>`
5240- :ref:`net/ixgbe testpmd driver specific commands <net_ixgbe_testpmd_commands>`
5241