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