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