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