xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision f06125c07d6203a84e9b242c62d6a8e532a5c51d)
1..  BSD LICENSE
2    Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
3    All rights reserved.
4
5    Redistribution and use in source and binary forms, with or without
6    modification, are permitted provided that the following conditions
7    are met:
8
9    * Redistributions of source code must retain the above copyright
10    notice, this list of conditions and the following disclaimer.
11    * Redistributions in binary form must reproduce the above copyright
12    notice, this list of conditions and the following disclaimer in
13    the documentation and/or other materials provided with the
14    distribution.
15    * Neither the name of Intel Corporation nor the names of its
16    contributors may be used to endorse or promote products derived
17    from this software without specific prior written permission.
18
19    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31.. _testpmd_runtime:
32
33Testpmd Runtime Functions
34=========================
35
36Where the testpmd application is started in interactive mode, (``-i|--interactive``),
37it displays a prompt that can be used to start and stop forwarding,
38configure the application, display statistics (including the extended NIC
39statistics aka xstats) , set the Flow Director and other tasks::
40
41   testpmd>
42
43The testpmd prompt has some, limited, readline support.
44Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
45as well as access to the command history via the up-arrow.
46
47There is also support for tab completion.
48If you type a partial command and hit ``<TAB>`` you get a list of the available completions:
49
50.. code-block:: console
51
52   testpmd> show port <TAB>
53
54       info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
55       info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
56       stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
57       stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
58       ...
59
60
61.. note::
62
63   Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes::
64
65      testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
66               (pause_time) (send_xon) (port_id)
67
68In the real ``testpmd>`` prompt these commands should be on a single line.
69
70Help Functions
71--------------
72
73The testpmd has on-line help for the functions that are available at runtime.
74These are divided into sections and can be accessed using help, help section or help all:
75
76.. code-block:: console
77
78   testpmd> help
79
80       help control    : Start and stop forwarding.
81       help display    : Displaying port, stats and config information.
82       help config     : Configuration information.
83       help ports      : Configuring ports.
84       help registers  : Reading and setting port registers.
85       help filters    : Filters configuration help.
86       help all        : All of the above sections.
87
88
89Command File Functions
90----------------------
91
92To facilitate loading large number of commands or to avoid cutting and pasting where not
93practical or possible testpmd supports alternative methods for executing commands.
94
95* If started with the ``--cmdline-file=FILENAME`` command line argument testpmd
96  will execute all CLI commands contained within the file immediately before
97  starting packet forwarding or entering interactive mode.
98
99.. code-block:: console
100
101   ./testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt
102   Interactive-mode selected
103   CLI commands to be read from /home/ubuntu/flow-create-commands.txt
104   Configuring Port 0 (socket 0)
105   Port 0: 7C:FE:90:CB:74:CE
106   Configuring Port 1 (socket 0)
107   Port 1: 7C:FE:90:CB:74:CA
108   Checking link statuses...
109   Port 0 Link Up - speed 10000 Mbps - full-duplex
110   Port 1 Link Up - speed 10000 Mbps - full-duplex
111   Done
112   Flow rule #0 created
113   Flow rule #1 created
114   ...
115   ...
116   Flow rule #498 created
117   Flow rule #499 created
118   Read all CLI commands from /home/ubuntu/flow-create-commands.txt
119   testpmd>
120
121
122* At run-time additional commands can be loaded in bulk by invoking the ``load FILENAME``
123  command.
124
125.. code-block:: console
126
127   testpmd> load /home/ubuntu/flow-create-commands.txt
128   Flow rule #0 created
129   Flow rule #1 created
130   ...
131   ...
132   Flow rule #498 created
133   Flow rule #499 created
134   Read all CLI commands from /home/ubuntu/flow-create-commands.txt
135   testpmd>
136
137
138In all cases output from any included command will be displayed as standard output.
139Execution will continue until the end of the file is reached regardless of
140whether any errors occur.  The end user must examine the output to determine if
141any failures occurred.
142
143
144Control Functions
145-----------------
146
147start
148~~~~~
149
150Start packet forwarding with current configuration::
151
152   testpmd> start
153
154start tx_first
155~~~~~~~~~~~~~~
156
157Start packet forwarding with current configuration after sending specified number of bursts of packets::
158
159   testpmd> start tx_first (""|burst_num)
160
161The default burst number is 1 when ``burst_num`` not presented.
162
163stop
164~~~~
165
166Stop packet forwarding, and display accumulated statistics::
167
168   testpmd> stop
169
170quit
171~~~~
172
173Quit to prompt::
174
175   testpmd> quit
176
177
178Display Functions
179-----------------
180
181The functions in the following sections are used to display information about the
182testpmd configuration or the NIC status.
183
184show port
185~~~~~~~~~
186
187Display information for a given port or all ports::
188
189   testpmd> show port (info|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)
190
191The available information categories are:
192
193* ``info``: General port information such as MAC address.
194
195* ``stats``: RX/TX statistics.
196
197* ``xstats``: RX/TX extended NIC statistics.
198
199* ``fdir``: Flow Director information and statistics.
200
201* ``stat_qmap``: Queue statistics mapping.
202
203* ``dcb_tc``: DCB information such as TC mapping.
204
205* ``cap``: Supported offload capabilities.
206
207For example:
208
209.. code-block:: console
210
211   testpmd> show port info 0
212
213   ********************* Infos for port 0 *********************
214
215   MAC address: XX:XX:XX:XX:XX:XX
216   Connect to socket: 0
217   memory allocation on the socket: 0
218   Link status: up
219   Link speed: 40000 Mbps
220   Link duplex: full-duplex
221   Promiscuous mode: enabled
222   Allmulticast mode: disabled
223   Maximum number of MAC addresses: 64
224   Maximum number of MAC addresses of hash filtering: 0
225   VLAN offload:
226       strip on
227       filter on
228       qinq(extend) off
229   Redirection table size: 512
230   Supported flow types:
231     ipv4-frag
232     ipv4-tcp
233     ipv4-udp
234     ipv4-sctp
235     ipv4-other
236     ipv6-frag
237     ipv6-tcp
238     ipv6-udp
239     ipv6-sctp
240     ipv6-other
241     l2_payload
242     port
243     vxlan
244     geneve
245     nvgre
246
247show port rss reta
248~~~~~~~~~~~~~~~~~~
249
250Display the rss redirection table entry indicated by masks on port X::
251
252   testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
253
254size is used to indicate the hardware supported reta size
255
256show port rss-hash
257~~~~~~~~~~~~~~~~~~
258
259Display the RSS hash functions and RSS hash key of a port::
260
261   testpmd> show port (port_id) rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex [key]
262
263clear port
264~~~~~~~~~~
265
266Clear the port statistics for a given port or for all ports::
267
268   testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
269
270For example::
271
272   testpmd> clear port stats all
273
274show (rxq|txq)
275~~~~~~~~~~~~~~
276
277Display information for a given port's RX/TX queue::
278
279   testpmd> show (rxq|txq) info (port_id) (queue_id)
280
281show config
282~~~~~~~~~~~
283
284Displays the configuration of the application.
285The configuration comes from the command-line, the runtime or the application defaults::
286
287   testpmd> show config (rxtx|cores|fwd|txpkts)
288
289The available information categories are:
290
291* ``rxtx``: RX/TX configuration items.
292
293* ``cores``: List of forwarding cores.
294
295* ``fwd``: Packet forwarding configuration.
296
297* ``txpkts``: Packets to TX configuration.
298
299For example:
300
301.. code-block:: console
302
303   testpmd> show config rxtx
304
305   io packet forwarding - CRC stripping disabled - packets/burst=16
306   nb forwarding cores=2 - nb forwarding ports=1
307   RX queues=1 - RX desc=128 - RX free threshold=0
308   RX threshold registers: pthresh=8 hthresh=8 wthresh=4
309   TX queues=1 - TX desc=512 - TX free threshold=0
310   TX threshold registers: pthresh=36 hthresh=0 wthresh=0
311   TX RS bit threshold=0 - TXQ flags=0x0
312
313set fwd
314~~~~~~~
315
316Set the packet forwarding mode::
317
318   testpmd> set fwd (io|mac|macswap|flowgen| \
319                     rxonly|txonly|csum|icmpecho) (""|retry)
320
321``retry`` can be specified for forwarding engines except ``rx_only``.
322
323The available information categories are:
324
325* ``io``: Forwards packets "as-is" in I/O mode.
326  This is the fastest possible forwarding operation as it does not access packets data.
327  This is the default mode.
328
329* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
330  Default application behaviour is to set source Ethernet address to that of the transmitting interface, and destination
331  address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
332  'eth-peer-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
333
334* ``macswap``: MAC swap forwarding mode.
335  Swaps the source and the destination Ethernet addresses of packets before forwarding them.
336
337* ``flowgen``: Multi-flow generation mode.
338  Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
339
340* ``rxonly``: Receives packets but doesn't transmit them.
341
342* ``txonly``: Generates and transmits packets without receiving any.
343
344* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
345
346* ``icmpecho``: Receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies.
347
348* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
349
350* ``tm``: Traffic Management forwarding mode
351  Demonstrates the use of ethdev traffic management APIs and softnic PMD for
352  QoS traffic management. In this mode, 5-level hierarchical QoS scheduler is
353  available as an default option that can be enabled through CLI. The user can
354  also modify the default hierarchy or specify the new hierarchy through CLI for
355  implementing QoS scheduler.  Requires ``CONFIG_RTE_LIBRTE_PMD_SOFTNIC=y`` ``CONFIG_RTE_LIBRTE_SCHED=y``.
356
357Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``.
358
359Example::
360
361   testpmd> set fwd rxonly
362
363   Set rxonly packet forwarding mode
364
365
366read rxd
367~~~~~~~~
368
369Display an RX descriptor for a port RX queue::
370
371   testpmd> read rxd (port_id) (queue_id) (rxd_id)
372
373For example::
374
375   testpmd> read rxd 0 0 4
376        0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
377
378read txd
379~~~~~~~~
380
381Display a TX descriptor for a port TX queue::
382
383   testpmd> read txd (port_id) (queue_id) (txd_id)
384
385For example::
386
387   testpmd> read txd 0 0 4
388        0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
389
390ddp get list
391~~~~~~~~~~~~
392
393Get loaded dynamic device personalization (DDP) package info list::
394
395   testpmd> ddp get list (port_id)
396
397ddp get info
398~~~~~~~~~~~~
399
400Display information about dynamic device personalization (DDP) profile::
401
402   testpmd> ddp get info (profile_path)
403
404show vf stats
405~~~~~~~~~~~~~
406
407Display VF statistics::
408
409   testpmd> show vf stats (port_id) (vf_id)
410
411clear vf stats
412~~~~~~~~~~~~~~
413
414Reset VF statistics::
415
416   testpmd> clear vf stats (port_id) (vf_id)
417
418show port pctype mapping
419~~~~~~~~~~~~~~~~~~~~~~~~
420
421List all items from the pctype mapping table::
422
423   testpmd> show port (port_id) pctype mapping
424
425
426Configuration Functions
427-----------------------
428
429The testpmd application can be configured from the runtime as well as from the command-line.
430
431This section details the available configuration functions that are available.
432
433.. note::
434
435   Configuration changes only become active when forwarding is started/restarted.
436
437set default
438~~~~~~~~~~~
439
440Reset forwarding to the default configuration::
441
442   testpmd> set default
443
444set verbose
445~~~~~~~~~~~
446
447Set the debug verbosity level::
448
449   testpmd> set verbose (level)
450
451Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
452
453set nbport
454~~~~~~~~~~
455
456Set the number of ports used by the application:
457
458set nbport (num)
459
460This is equivalent to the ``--nb-ports`` command-line option.
461
462set nbcore
463~~~~~~~~~~
464
465Set the number of cores used by the application::
466
467   testpmd> set nbcore (num)
468
469This is equivalent to the ``--nb-cores`` command-line option.
470
471.. note::
472
473   The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
474
475set coremask
476~~~~~~~~~~~~
477
478Set the forwarding cores hexadecimal mask::
479
480   testpmd> set coremask (mask)
481
482This is equivalent to the ``--coremask`` command-line option.
483
484.. note::
485
486   The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
487
488set portmask
489~~~~~~~~~~~~
490
491Set the forwarding ports hexadecimal mask::
492
493   testpmd> set portmask (mask)
494
495This is equivalent to the ``--portmask`` command-line option.
496
497set burst
498~~~~~~~~~
499
500Set number of packets per burst::
501
502   testpmd> set burst (num)
503
504This is equivalent to the ``--burst command-line`` option.
505
506When retry is enabled, the transmit delay time and number of retries can also be set::
507
508   testpmd> set burst tx delay (microseconds) retry (num)
509
510set txpkts
511~~~~~~~~~~
512
513Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
514
515   testpmd> set txpkts (x[,y]*)
516
517Where x[,y]* represents a CSV list of values, without white space.
518
519set txsplit
520~~~~~~~~~~~
521
522Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
523
524   testpmd> set txsplit (off|on|rand)
525
526Where:
527
528* ``off`` disable packet copy & split for CSUM mode.
529
530* ``on`` split outgoing packet into multiple segments. Size of each segment
531  and number of segments per packet is determined by ``set txpkts`` command
532  (see above).
533
534* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
535
536set corelist
537~~~~~~~~~~~~
538
539Set the list of forwarding cores::
540
541   testpmd> set corelist (x[,y]*)
542
543For example, to change the forwarding cores:
544
545.. code-block:: console
546
547   testpmd> set corelist 3,1
548   testpmd> show config fwd
549
550   io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
551   Logical Core 3 (socket 0) forwards packets on 1 streams:
552   RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
553   Logical Core 1 (socket 0) forwards packets on 1 streams:
554   RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
555
556.. note::
557
558   The cores are used in the same order as specified on the command line.
559
560set portlist
561~~~~~~~~~~~~
562
563Set the list of forwarding ports::
564
565   testpmd> set portlist (x[,y]*)
566
567For example, to change the port forwarding:
568
569.. code-block:: console
570
571   testpmd> set portlist 0,2,1,3
572   testpmd> show config fwd
573
574   io packet forwarding - ports=4 - cores=1 - streams=4
575   Logical Core 3 (socket 0) forwards packets on 4 streams:
576   RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
577   RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
578   RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
579   RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
580
581set tx loopback
582~~~~~~~~~~~~~~~
583
584Enable/disable tx loopback::
585
586   testpmd> set tx loopback (port_id) (on|off)
587
588set drop enable
589~~~~~~~~~~~~~~~
590
591set drop enable bit for all queues::
592
593   testpmd> set all queues drop (port_id) (on|off)
594
595set split drop enable (for VF)
596~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
597
598set split drop enable bit for VF from PF::
599
600   testpmd> set vf split drop (port_id) (vf_id) (on|off)
601
602set mac antispoof (for VF)
603~~~~~~~~~~~~~~~~~~~~~~~~~~
604
605Set mac antispoof for a VF from the PF::
606
607   testpmd> set vf mac antispoof  (port_id) (vf_id) (on|off)
608
609set macsec offload
610~~~~~~~~~~~~~~~~~~
611
612Enable/disable MACsec offload::
613
614   testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
615   testpmd> set macsec offload (port_id) off
616
617set macsec sc
618~~~~~~~~~~~~~
619
620Configure MACsec secure connection (SC)::
621
622   testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
623
624.. note::
625
626   The pi argument is ignored for tx.
627   Check the NIC Datasheet for hardware limits.
628
629set macsec sa
630~~~~~~~~~~~~~
631
632Configure MACsec secure association (SA)::
633
634   testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
635
636.. note::
637
638   The IDX value must be 0 or 1.
639   Check the NIC Datasheet for hardware limits.
640
641set broadcast mode (for VF)
642~~~~~~~~~~~~~~~~~~~~~~~~~~~
643
644Set broadcast mode for a VF from the PF::
645
646   testpmd> set vf broadcast (port_id) (vf_id) (on|off)
647
648vlan set strip
649~~~~~~~~~~~~~~
650
651Set the VLAN strip on a port::
652
653   testpmd> vlan set strip (on|off) (port_id)
654
655vlan set stripq
656~~~~~~~~~~~~~~~
657
658Set the VLAN strip for a queue on a port::
659
660   testpmd> vlan set stripq (on|off) (port_id,queue_id)
661
662vlan set stripq (for VF)
663~~~~~~~~~~~~~~~~~~~~~~~~
664
665Set VLAN strip for all queues in a pool for a VF from the PF::
666
667   testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
668
669vlan set insert (for VF)
670~~~~~~~~~~~~~~~~~~~~~~~~
671
672Set VLAN insert for a VF from the PF::
673
674   testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
675
676vlan set tag (for VF)
677~~~~~~~~~~~~~~~~~~~~~
678
679Set VLAN tag for a VF from the PF::
680
681   testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
682
683vlan set antispoof (for VF)
684~~~~~~~~~~~~~~~~~~~~~~~~~~~
685
686Set VLAN antispoof for a VF from the PF::
687
688   testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
689
690vlan set filter
691~~~~~~~~~~~~~~~
692
693Set the VLAN filter on a port::
694
695   testpmd> vlan set filter (on|off) (port_id)
696
697vlan set qinq
698~~~~~~~~~~~~~
699
700Set the VLAN QinQ (extended queue in queue) on for a port::
701
702   testpmd> vlan set qinq (on|off) (port_id)
703
704vlan set tpid
705~~~~~~~~~~~~~
706
707Set the inner or outer VLAN TPID for packet filtering on a port::
708
709   testpmd> vlan set (inner|outer) tpid (value) (port_id)
710
711.. note::
712
713   TPID value must be a 16-bit number (value <= 65536).
714
715rx_vlan add
716~~~~~~~~~~~
717
718Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
719
720   testpmd> rx_vlan add (vlan_id|all) (port_id)
721
722.. note::
723
724   VLAN filter must be set on that port. VLAN ID < 4096.
725   Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
726   in VFTA table. This is important if enabling all vlan_ids.
727
728rx_vlan rm
729~~~~~~~~~~
730
731Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
732
733   testpmd> rx_vlan rm (vlan_id|all) (port_id)
734
735rx_vlan add (for VF)
736~~~~~~~~~~~~~~~~~~~~
737
738Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
739
740   testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
741
742rx_vlan rm (for VF)
743~~~~~~~~~~~~~~~~~~~
744
745Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
746
747   testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
748
749tunnel_filter add
750~~~~~~~~~~~~~~~~~
751
752Add a tunnel filter on a port::
753
754   testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
755            (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
756            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
757
758The available information categories are:
759
760* ``vxlan``: Set tunnel type as VXLAN.
761
762* ``nvgre``: Set tunnel type as NVGRE.
763
764* ``ipingre``: Set tunnel type as IP-in-GRE.
765
766* ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
767
768* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
769
770* ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
771
772* ``imac``: Set filter type as Inner MAC.
773
774* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
775
776* ``oip``: Set filter type as Outer IP.
777
778* ``iip``: Set filter type as Inner IP.
779
780Example::
781
782   testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
783            192.168.2.2 0 ipingre oip 1 1
784
785   Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
786
787tunnel_filter remove
788~~~~~~~~~~~~~~~~~~~~
789
790Remove a tunnel filter on a port::
791
792   testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
793            (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
794            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
795
796rx_vxlan_port add
797~~~~~~~~~~~~~~~~~
798
799Add an UDP port for VXLAN packet filter on a port::
800
801   testpmd> rx_vxlan_port add (udp_port) (port_id)
802
803rx_vxlan_port remove
804~~~~~~~~~~~~~~~~~~~~
805
806Remove an UDP port for VXLAN packet filter on a port::
807
808   testpmd> rx_vxlan_port rm (udp_port) (port_id)
809
810tx_vlan set
811~~~~~~~~~~~
812
813Set hardware insertion of VLAN IDs in packets sent on a port::
814
815   testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
816
817For example, set a single VLAN ID (5) insertion on port 0::
818
819   tx_vlan set 0 5
820
821Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
822
823   tx_vlan set 1 2 3
824
825
826tx_vlan set pvid
827~~~~~~~~~~~~~~~~
828
829Set port based hardware insertion of VLAN ID in packets sent on a port::
830
831   testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
832
833tx_vlan reset
834~~~~~~~~~~~~~
835
836Disable hardware insertion of a VLAN header in packets sent on a port::
837
838   testpmd> tx_vlan reset (port_id)
839
840csum set
841~~~~~~~~
842
843Select hardware or software calculation of the checksum when
844transmitting a packet using the ``csum`` forwarding engine::
845
846   testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)
847
848Where:
849
850* ``ip|udp|tcp|sctp`` always relate to  the inner layer.
851
852* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
853  as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
854  supported). See also the ``csum parse-tunnel`` command.
855
856.. note::
857
858   Check the NIC Datasheet for hardware limits.
859
860RSS queue region
861~~~~~~~~~~~~~~~~
862
863Set RSS queue region span on a port::
864
865   testpmd> set port (port_id) queue-region region_id (value) \
866		queue_start_index (value) queue_num (value)
867
868Set flowtype mapping on a RSS queue region on a port::
869
870   testpmd> set port (port_id) queue-region region_id (value) flowtype (value)
871
872where:
873
874* For the flowtype(pctype) of packet,the specific index for each type has
875  been defined in file i40e_type.h as enum i40e_filter_pctype.
876
877Set user priority mapping on a RSS queue region on a port::
878
879   testpmd> set port (port_id) queue-region UP (value) region_id (value)
880
881Flush all queue region related configuration on a port::
882
883   testpmd> set port (port_id) queue-region flush (on|off)
884
885where:
886
887* "on"is just an enable function which server for other configuration,
888  it is for all configuration about queue region from up layer,
889  at first will only keep in DPDK softwarestored in driver,
890  only after "flush on", it commit all configuration to HW.
891  "off" is just clean all configuration about queue region just now,
892  and restore all to DPDK i40e driver default config when start up.
893
894Show all queue region related configuration info on a port::
895
896   testpmd> show port (port_id) queue-region
897
898.. note::
899
900  Queue region only support on PF by now, so these command is
901  only for configuration of queue region on PF port.
902
903csum parse-tunnel
904~~~~~~~~~~~~~~~~~
905
906Define how tunneled packets should be handled by the csum forward
907engine::
908
909   testpmd> csum parse-tunnel (on|off) (tx_port_id)
910
911If enabled, the csum forward engine will try to recognize supported
912tunnel headers (vxlan, gre, ipip).
913
914If disabled, treat tunnel packets as non-tunneled packets (a inner
915header is handled as a packet payload).
916
917.. note::
918
919   The port argument is the TX port like in the ``csum set`` command.
920
921Example:
922
923Consider a packet in packet like the following::
924
925   eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
926
927* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
928  command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
929  ``outer-ip parameter`` relates to the outer headers (here ``ipv4_out``).
930
931* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum  set``
932   command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
933
934csum show
935~~~~~~~~~
936
937Display tx checksum offload configuration::
938
939   testpmd> csum show (port_id)
940
941tso set
942~~~~~~~
943
944Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
945
946   testpmd> tso set (segsize) (port_id)
947
948.. note::
949
950   Check the NIC datasheet for hardware limits.
951
952tso show
953~~~~~~~~
954
955Display the status of TCP Segmentation Offload::
956
957   testpmd> tso show (port_id)
958
959set port - gro
960~~~~~~~~~~~~~~
961
962Enable or disable GRO in ``csum`` forwarding engine::
963
964   testpmd> set port <port_id> gro on|off
965
966If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
967packets received from the given port.
968
969If disabled, packets received from the given port won't be performed
970GRO. By default, GRO is disabled for all ports.
971
972.. note::
973
974   When enable GRO for a port, TCP/IPv4 packets received from the port
975   will be performed GRO. After GRO, all merged packets have bad
976   checksums, since the GRO library doesn't re-calculate checksums for
977   the merged packets. Therefore, if users want the merged packets to
978   have correct checksums, please select HW IP checksum calculation and
979   HW TCP checksum calculation for the port which the merged packets are
980   transmitted to.
981
982show port - gro
983~~~~~~~~~~~~~~~
984
985Display GRO configuration for a given port::
986
987   testpmd> show port <port_id> gro
988
989set gro flush
990~~~~~~~~~~~~~
991
992Set the cycle to flush the GROed packets from reassembly tables::
993
994   testpmd> set gro flush <cycles>
995
996When enable GRO, the csum forwarding engine performs GRO on received
997packets, and the GROed packets are stored in reassembly tables. Users
998can use this command to determine when the GROed packets are flushed
999from the reassembly tables.
1000
1001The ``cycles`` is measured in GRO operation times. The csum forwarding
1002engine flushes the GROed packets from the tables every ``cycles`` GRO
1003operations.
1004
1005By default, the value of ``cycles`` is 1, which means flush GROed packets
1006from the reassembly tables as soon as one GRO operation finishes. The value
1007of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1008
1009Please note that the large value of ``cycles`` may cause the poor TCP/IP
1010stack performance. Because the GROed packets are delayed to arrive the
1011stack, thus causing more duplicated ACKs and TCP retransmissions.
1012
1013set port - gso
1014~~~~~~~~~~~~~~
1015
1016Toggle per-port GSO support in ``csum`` forwarding engine::
1017
1018   testpmd> set port <port_id> gso on|off
1019
1020If enabled, the csum forwarding engine will perform GSO on supported IPv4
1021packets, transmitted on the given port.
1022
1023If disabled, packets transmitted on the given port will not undergo GSO.
1024By default, GSO is disabled for all ports.
1025
1026.. note::
1027
1028   When GSO is enabled on a port, supported IPv4 packets transmitted on that
1029   port undergo GSO. Afterwards, the segmented packets are represented by
1030   multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1031   of checksums for GSO'd segments in SW. As a result, if users want correct
1032   checksums in GSO segments, they should enable HW checksum calculation for
1033   GSO-enabled ports.
1034
1035   For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1036   by setting the following options in the csum forwarding engine:
1037
1038   testpmd> csum set outer_ip hw <port_id>
1039
1040   testpmd> csum set ip hw <port_id>
1041
1042   testpmd> csum set tcp hw <port_id>
1043
1044set gso segsz
1045~~~~~~~~~~~~~
1046
1047Set the maximum GSO segment size (measured in bytes), which includes the
1048packet header and the packet payload for GSO-enabled ports (global)::
1049
1050   testpmd> set gso segsz <length>
1051
1052show port - gso
1053~~~~~~~~~~~~~~~
1054
1055Display the status of Generic Segmentation Offload for a given port::
1056
1057   testpmd> show port <port_id> gso
1058
1059mac_addr add
1060~~~~~~~~~~~~
1061
1062Add an alternative MAC address to a port::
1063
1064   testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1065
1066mac_addr remove
1067~~~~~~~~~~~~~~~
1068
1069Remove a MAC address from a port::
1070
1071   testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1072
1073mac_addr add (for VF)
1074~~~~~~~~~~~~~~~~~~~~~
1075
1076Add an alternative MAC address for a VF to a port::
1077
1078   testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1079
1080mac_addr set
1081~~~~~~~~~~~~
1082
1083Set the default MAC address for a port::
1084
1085   testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1086
1087mac_addr set (for VF)
1088~~~~~~~~~~~~~~~~~~~~~
1089
1090Set the MAC address for a VF from the PF::
1091
1092   testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1093
1094set port-uta
1095~~~~~~~~~~~~
1096
1097Set the unicast hash filter(s) on/off for a port::
1098
1099   testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1100
1101set promisc
1102~~~~~~~~~~~
1103
1104Set the promiscuous mode on for a port or for all ports.
1105In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1106
1107   testpmd> set promisc (port_id|all) (on|off)
1108
1109set allmulti
1110~~~~~~~~~~~~
1111
1112Set the allmulti mode for a port or for all ports::
1113
1114   testpmd> set allmulti (port_id|all) (on|off)
1115
1116Same as the ifconfig (8) option. Controls how multicast packets are handled.
1117
1118set promisc (for VF)
1119~~~~~~~~~~~~~~~~~~~~
1120
1121Set the unicast promiscuous mode for a VF from PF.
1122It's supported by Intel i40e NICs now.
1123In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1124
1125   testpmd> set vf promisc (port_id) (vf_id) (on|off)
1126
1127set allmulticast (for VF)
1128~~~~~~~~~~~~~~~~~~~~~~~~~
1129
1130Set the multicast promiscuous mode for a VF from PF.
1131It's supported by Intel i40e NICs now.
1132In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1133
1134   testpmd> set vf allmulti (port_id) (vf_id) (on|off)
1135
1136set tx max bandwidth (for VF)
1137~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1138
1139Set TX max absolute bandwidth (Mbps) for a VF from PF::
1140
1141   testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
1142
1143set tc tx min bandwidth (for VF)
1144~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1145
1146Set all TCs' TX min relative bandwidth (%) for a VF from PF::
1147
1148   testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
1149
1150set tc tx max bandwidth (for VF)
1151~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1152
1153Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
1154
1155   testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
1156
1157set tc strict link priority mode
1158~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1159
1160Set some TCs' strict link priority mode on a physical port::
1161
1162   testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1163
1164set tc tx min bandwidth
1165~~~~~~~~~~~~~~~~~~~~~~~
1166
1167Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
1168
1169   testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
1170
1171set flow_ctrl rx
1172~~~~~~~~~~~~~~~~
1173
1174Set the link flow control parameter on a port::
1175
1176   testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1177            (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1178	    autoneg (on|off) (port_id)
1179
1180Where:
1181
1182* ``high_water`` (integer): High threshold value to trigger XOFF.
1183
1184* ``low_water`` (integer): Low threshold value to trigger XON.
1185
1186* ``pause_time`` (integer): Pause quota in the Pause frame.
1187
1188* ``send_xon`` (0/1): Send XON frame.
1189
1190* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1191
1192* ``autoneg``: Change the auto-negotiation parameter.
1193
1194set pfc_ctrl rx
1195~~~~~~~~~~~~~~~
1196
1197Set the priority flow control parameter on a port::
1198
1199   testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1200            (pause_time) (priority) (port_id)
1201
1202Where:
1203
1204* ``high_water`` (integer): High threshold value.
1205
1206* ``low_water`` (integer): Low threshold value.
1207
1208* ``pause_time`` (integer): Pause quota in the Pause frame.
1209
1210* ``priority`` (0-7): VLAN User Priority.
1211
1212set stat_qmap
1213~~~~~~~~~~~~~
1214
1215Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1216
1217   testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1218
1219For example, to set rx queue 2 on port 0 to mapping 5::
1220
1221   testpmd>set stat_qmap rx 0 2 5
1222
1223set xstats-hide-zero
1224~~~~~~~~~~~~~~~~~~~~
1225
1226Set the option to hide zero values for xstats display::
1227
1228	testpmd> set xstats-hide-zero on|off
1229
1230.. note::
1231
1232	By default, the zero values are displayed for xstats.
1233
1234set port - rx/tx (for VF)
1235~~~~~~~~~~~~~~~~~~~~~~~~~
1236
1237Set VF receive/transmit from a port::
1238
1239   testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1240
1241set port - mac address filter (for VF)
1242~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1243
1244Add/Remove unicast or multicast MAC addr filter for a VF::
1245
1246   testpmd> set port (port_id) vf (vf_id) (mac_addr) \
1247            (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
1248
1249set port - rx mode(for VF)
1250~~~~~~~~~~~~~~~~~~~~~~~~~~
1251
1252Set the VF receive mode of a port::
1253
1254   testpmd> set port (port_id) vf (vf_id) \
1255            rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1256
1257The available receive modes are:
1258
1259* ``AUPE``: Accepts untagged VLAN.
1260
1261* ``ROPE``: Accepts unicast hash.
1262
1263* ``BAM``: Accepts broadcast packets.
1264
1265* ``MPE``: Accepts all multicast packets.
1266
1267set port - tx_rate (for Queue)
1268~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1269
1270Set TX rate limitation for a queue on a port::
1271
1272   testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1273
1274set port - tx_rate (for VF)
1275~~~~~~~~~~~~~~~~~~~~~~~~~~~
1276
1277Set TX rate limitation for queues in VF on a port::
1278
1279   testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1280
1281set port - mirror rule
1282~~~~~~~~~~~~~~~~~~~~~~
1283
1284Set pool or vlan type mirror rule for a port::
1285
1286   testpmd> set port (port_id) mirror-rule (rule_id) \
1287            (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1288            (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1289
1290Set link mirror rule for a port::
1291
1292   testpmd> set port (port_id) mirror-rule (rule_id) \
1293           (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1294
1295For example to enable mirror traffic with vlan 0,1 to pool 0::
1296
1297   set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1298
1299reset port - mirror rule
1300~~~~~~~~~~~~~~~~~~~~~~~~
1301
1302Reset a mirror rule for a port::
1303
1304   testpmd> reset port (port_id) mirror-rule (rule_id)
1305
1306set flush_rx
1307~~~~~~~~~~~~
1308
1309Set the flush on RX streams before forwarding.
1310The default is flush ``on``.
1311Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1312
1313   testpmd> set flush_rx off
1314
1315set bypass mode
1316~~~~~~~~~~~~~~~
1317
1318Set the bypass mode for the lowest port on bypass enabled NIC::
1319
1320   testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1321
1322set bypass event
1323~~~~~~~~~~~~~~~~
1324
1325Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1326
1327   testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1328            mode (normal|bypass|isolate) (port_id)
1329
1330Where:
1331
1332* ``timeout``: Enable bypass after watchdog timeout.
1333
1334* ``os_on``: Enable bypass when OS/board is powered on.
1335
1336* ``os_off``: Enable bypass when OS/board is powered off.
1337
1338* ``power_on``: Enable bypass when power supply is turned on.
1339
1340* ``power_off``: Enable bypass when power supply is turned off.
1341
1342
1343set bypass timeout
1344~~~~~~~~~~~~~~~~~~
1345
1346Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1347
1348   testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1349
1350show bypass config
1351~~~~~~~~~~~~~~~~~~
1352
1353Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1354
1355   testpmd> show bypass config (port_id)
1356
1357set link up
1358~~~~~~~~~~~
1359
1360Set link up for a port::
1361
1362   testpmd> set link-up port (port id)
1363
1364set link down
1365~~~~~~~~~~~~~
1366
1367Set link down for a port::
1368
1369   testpmd> set link-down port (port id)
1370
1371E-tag set
1372~~~~~~~~~
1373
1374Enable E-tag insertion for a VF on a port::
1375
1376   testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1377
1378Disable E-tag insertion for a VF on a port::
1379
1380   testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1381
1382Enable/disable E-tag stripping on a port::
1383
1384   testpmd> E-tag set stripping (on|off) port (port_id)
1385
1386Enable/disable E-tag based forwarding on a port::
1387
1388   testpmd> E-tag set forwarding (on|off) port (port_id)
1389
1390Add an E-tag forwarding filter on a port::
1391
1392   testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1393
1394Delete an E-tag forwarding filter on a port::
1395   testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1396
1397ddp add
1398~~~~~~~
1399
1400Load a dynamic device personalization (DDP) package::
1401
1402   testpmd> ddp add (port_id) (package_path[,output_path])
1403
1404ddp del
1405~~~~~~~
1406
1407Delete a dynamic device personalization package::
1408
1409   testpmd> ddp del (port_id) (package_path)
1410
1411ptype mapping
1412~~~~~~~~~~~~~
1413
1414List all items from the ptype mapping table::
1415
1416   testpmd> ptype mapping get (port_id) (valid_only)
1417
1418Where:
1419
1420* ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1421
1422Replace a specific or a group of software defined ptype with a new one::
1423
1424   testpmd> ptype mapping replace  (port_id) (target) (mask) (pkt_type)
1425
1426where:
1427
1428* ``target``: A specific software ptype or a mask to represent a group of software ptypes.
1429
1430* ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1).
1431
1432* ``pkt_type``: The new software ptype to replace the old ones.
1433
1434Update hardware defined ptype to software defined packet type mapping table::
1435
1436   testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1437
1438where:
1439
1440* ``hw_ptype``: hardware ptype as the index of the ptype mapping table.
1441
1442* ``sw_ptype``: software ptype as the value of the ptype mapping table.
1443
1444Reset ptype mapping table::
1445
1446   testpmd> ptype mapping reset (port_id)
1447
1448Port Functions
1449--------------
1450
1451The following sections show functions for configuring ports.
1452
1453.. note::
1454
1455   Port configuration changes only become active when forwarding is started/restarted.
1456
1457port attach
1458~~~~~~~~~~~
1459
1460Attach a port specified by pci address or virtual device args::
1461
1462   testpmd> port attach (identifier)
1463
1464To attach a new pci device, the device should be recognized by kernel first.
1465Then it should be moved under DPDK management.
1466Finally the port can be attached to testpmd.
1467
1468For example, to move a pci device using ixgbe under DPDK management:
1469
1470.. code-block:: console
1471
1472   # Check the status of the available devices.
1473   ./usertools/dpdk-devbind.py --status
1474
1475   Network devices using DPDK-compatible driver
1476   ============================================
1477   <none>
1478
1479   Network devices using kernel driver
1480   ===================================
1481   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1482
1483
1484   # Bind the device to igb_uio.
1485   sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1486
1487
1488   # Recheck the status of the devices.
1489   ./usertools/dpdk-devbind.py --status
1490   Network devices using DPDK-compatible driver
1491   ============================================
1492   0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1493
1494To attach a port created by virtual device, above steps are not needed.
1495
1496For example, to attach a port whose pci address is 0000:0a:00.0.
1497
1498.. code-block:: console
1499
1500   testpmd> port attach 0000:0a:00.0
1501   Attaching a new port...
1502   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1503   EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
1504   EAL:   PCI memory mapped at 0x7f83bfa00000
1505   EAL:   PCI memory mapped at 0x7f83bfa80000
1506   PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1507   PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1508   Port 0 is attached. Now total ports is 1
1509   Done
1510
1511For example, to attach a port created by pcap PMD.
1512
1513.. code-block:: console
1514
1515   testpmd> port attach net_pcap0
1516   Attaching a new port...
1517   PMD: Initializing pmd_pcap for net_pcap0
1518   PMD: Creating pcap-backed ethdev on numa socket 0
1519   Port 0 is attached. Now total ports is 1
1520   Done
1521
1522In this case, identifier is ``net_pcap0``.
1523This identifier format is the same as ``--vdev`` format of DPDK applications.
1524
1525For example, to re-attach a bonded port which has been previously detached,
1526the mode and slave parameters must be given.
1527
1528.. code-block:: console
1529
1530   testpmd> port attach net_bond_0,mode=0,slave=1
1531   Attaching a new port...
1532   EAL: Initializing pmd_bond for net_bond_0
1533   EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
1534   Port 0 is attached. Now total ports is 1
1535   Done
1536
1537
1538port detach
1539~~~~~~~~~~~
1540
1541Detach a specific port::
1542
1543   testpmd> port detach (port_id)
1544
1545Before detaching a port, the port should be stopped and closed.
1546
1547For example, to detach a pci device port 0.
1548
1549.. code-block:: console
1550
1551   testpmd> port stop 0
1552   Stopping ports...
1553   Done
1554   testpmd> port close 0
1555   Closing ports...
1556   Done
1557
1558   testpmd> port detach 0
1559   Detaching a port...
1560   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1561   EAL:   remove driver: 8086:10fb rte_ixgbe_pmd
1562   EAL:   PCI memory unmapped at 0x7f83bfa00000
1563   EAL:   PCI memory unmapped at 0x7f83bfa80000
1564   Done
1565
1566
1567For example, to detach a virtual device port 0.
1568
1569.. code-block:: console
1570
1571   testpmd> port stop 0
1572   Stopping ports...
1573   Done
1574   testpmd> port close 0
1575   Closing ports...
1576   Done
1577
1578   testpmd> port detach 0
1579   Detaching a port...
1580   PMD: Closing pcap ethdev on numa socket 0
1581   Port 'net_pcap0' is detached. Now total ports is 0
1582   Done
1583
1584To remove a pci device completely from the system, first detach the port from testpmd.
1585Then the device should be moved under kernel management.
1586Finally the device can be removed using kernel pci hotplug functionality.
1587
1588For example, to move a pci device under kernel management:
1589
1590.. code-block:: console
1591
1592   sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
1593
1594   ./usertools/dpdk-devbind.py --status
1595
1596   Network devices using DPDK-compatible driver
1597   ============================================
1598   <none>
1599
1600   Network devices using kernel driver
1601   ===================================
1602   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
1603
1604To remove a port created by a virtual device, above steps are not needed.
1605
1606port start
1607~~~~~~~~~~
1608
1609Start all ports or a specific port::
1610
1611   testpmd> port start (port_id|all)
1612
1613port stop
1614~~~~~~~~~
1615
1616Stop all ports or a specific port::
1617
1618   testpmd> port stop (port_id|all)
1619
1620port close
1621~~~~~~~~~~
1622
1623Close all ports or a specific port::
1624
1625   testpmd> port close (port_id|all)
1626
1627port start/stop queue
1628~~~~~~~~~~~~~~~~~~~~~
1629
1630Start/stop a rx/tx queue on a specific port::
1631
1632   testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1633
1634Only take effect when port is started.
1635
1636port config - speed
1637~~~~~~~~~~~~~~~~~~~
1638
1639Set the speed and duplex mode for all ports or a specific port::
1640
1641   testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|auto) \
1642            duplex (half|full|auto)
1643
1644port config - queues/descriptors
1645~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1646
1647Set number of queues/descriptors for rxq, txq, rxd and txd::
1648
1649   testpmd> port config all (rxq|txq|rxd|txd) (value)
1650
1651This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1652
1653port config - max-pkt-len
1654~~~~~~~~~~~~~~~~~~~~~~~~~
1655
1656Set the maximum packet length::
1657
1658   testpmd> port config all max-pkt-len (value)
1659
1660This is equivalent to the ``--max-pkt-len`` command-line option.
1661
1662port config - CRC Strip
1663~~~~~~~~~~~~~~~~~~~~~~~
1664
1665Set hardware CRC stripping on or off for all ports::
1666
1667   testpmd> port config all crc-strip (on|off)
1668
1669CRC stripping is on by default.
1670
1671The ``off`` option is equivalent to the ``--disable-crc-strip`` command-line option.
1672
1673port config - scatter
1674~~~~~~~~~~~~~~~~~~~~~~~
1675
1676Set RX scatter mode on or off for all ports::
1677
1678   testpmd> port config all scatter (on|off)
1679
1680RX scatter mode is off by default.
1681
1682The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1683
1684port config - TX queue flags
1685~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1686
1687Set a hexadecimal bitmap of TX queue flags for all ports::
1688
1689   testpmd> port config all txqflags value
1690
1691This command is equivalent to the ``--txqflags`` command-line option.
1692
1693port config - RX Checksum
1694~~~~~~~~~~~~~~~~~~~~~~~~~
1695
1696Set hardware RX checksum offload to on or off for all ports::
1697
1698   testpmd> port config all rx-cksum (on|off)
1699
1700Checksum offload is off by default.
1701
1702The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1703
1704port config - VLAN
1705~~~~~~~~~~~~~~~~~~
1706
1707Set hardware VLAN on or off for all ports::
1708
1709   testpmd> port config all hw-vlan (on|off)
1710
1711Hardware VLAN is on by default.
1712
1713The ``off`` option is equivalent to the ``--disable-hw-vlan`` command-line option.
1714
1715port config - VLAN filter
1716~~~~~~~~~~~~~~~~~~~~~~~~~
1717
1718Set hardware VLAN filter on or off for all ports::
1719
1720   testpmd> port config all hw-vlan-filter (on|off)
1721
1722Hardware VLAN filter is on by default.
1723
1724The ``off`` option is equivalent to the ``--disable-hw-vlan-filter`` command-line option.
1725
1726port config - VLAN strip
1727~~~~~~~~~~~~~~~~~~~~~~~~
1728
1729Set hardware VLAN strip on or off for all ports::
1730
1731   testpmd> port config all hw-vlan-strip (on|off)
1732
1733Hardware VLAN strip is on by default.
1734
1735The ``off`` option is equivalent to the ``--disable-hw-vlan-strip`` command-line option.
1736
1737port config - VLAN extend
1738~~~~~~~~~~~~~~~~~~~~~~~~~
1739
1740Set hardware VLAN extend on or off for all ports::
1741
1742   testpmd> port config all hw-vlan-extend (on|off)
1743
1744Hardware VLAN extend is off by default.
1745
1746The ``off`` option is equivalent to the ``--disable-hw-vlan-extend`` command-line option.
1747
1748port config - Drop Packets
1749~~~~~~~~~~~~~~~~~~~~~~~~~~
1750
1751Set packet drop for packets with no descriptors on or off for all ports::
1752
1753   testpmd> port config all drop-en (on|off)
1754
1755Packet dropping for packets with no descriptors is off by default.
1756
1757The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1758
1759port config - RSS
1760~~~~~~~~~~~~~~~~~
1761
1762Set the RSS (Receive Side Scaling) mode on or off::
1763
1764   testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)
1765
1766RSS is on by default.
1767
1768The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1769
1770port config - RSS Reta
1771~~~~~~~~~~~~~~~~~~~~~~
1772
1773Set the RSS (Receive Side Scaling) redirection table::
1774
1775   testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1776
1777port config - DCB
1778~~~~~~~~~~~~~~~~~
1779
1780Set the DCB mode for an individual port::
1781
1782   testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1783
1784The traffic class should be 4 or 8.
1785
1786port config - Burst
1787~~~~~~~~~~~~~~~~~~~
1788
1789Set the number of packets per burst::
1790
1791   testpmd> port config all burst (value)
1792
1793This is equivalent to the ``--burst`` command-line option.
1794
1795port config - Threshold
1796~~~~~~~~~~~~~~~~~~~~~~~
1797
1798Set thresholds for TX/RX queues::
1799
1800   testpmd> port config all (threshold) (value)
1801
1802Where the threshold type can be:
1803
1804* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
1805
1806* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
1807
1808* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
1809
1810* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
1811
1812* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
1813
1814* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
1815
1816* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
1817
1818* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
1819
1820* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
1821
1822These threshold options are also available from the command-line.
1823
1824port config - E-tag
1825~~~~~~~~~~~~~~~~~~~
1826
1827Set the value of ether-type for E-tag::
1828
1829   testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1830
1831Enable/disable the E-tag support::
1832
1833   testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1834
1835port config pctype mapping
1836~~~~~~~~~~~~~~~~~~~~~~~~~~
1837
1838Reset pctype mapping table::
1839
1840   testpmd> port config (port_id) pctype mapping reset
1841
1842Update hardware defined pctype to software defined flow type mapping table::
1843
1844   testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
1845
1846where:
1847
1848* ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
1849
1850* ``flow_type_id``: software flow type id as the index of the pctype mapping table.
1851
1852
1853Link Bonding Functions
1854----------------------
1855
1856The Link Bonding functions make it possible to dynamically create and
1857manage link bonding devices from within testpmd interactive prompt.
1858
1859create bonded device
1860~~~~~~~~~~~~~~~~~~~~
1861
1862Create a new bonding device::
1863
1864   testpmd> create bonded device (mode) (socket)
1865
1866For example, to create a bonded device in mode 1 on socket 0::
1867
1868   testpmd> create bonded 1 0
1869   created new bonded device (port X)
1870
1871add bonding slave
1872~~~~~~~~~~~~~~~~~
1873
1874Adds Ethernet device to a Link Bonding device::
1875
1876   testpmd> add bonding slave (slave id) (port id)
1877
1878For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
1879
1880   testpmd> add bonding slave 6 10
1881
1882
1883remove bonding slave
1884~~~~~~~~~~~~~~~~~~~~
1885
1886Removes an Ethernet slave device from a Link Bonding device::
1887
1888   testpmd> remove bonding slave (slave id) (port id)
1889
1890For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
1891
1892   testpmd> remove bonding slave 6 10
1893
1894set bonding mode
1895~~~~~~~~~~~~~~~~
1896
1897Set the Link Bonding mode of a Link Bonding device::
1898
1899   testpmd> set bonding mode (value) (port id)
1900
1901For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
1902
1903   testpmd> set bonding mode 3 10
1904
1905set bonding primary
1906~~~~~~~~~~~~~~~~~~~
1907
1908Set an Ethernet slave device as the primary device on a Link Bonding device::
1909
1910   testpmd> set bonding primary (slave id) (port id)
1911
1912For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
1913
1914   testpmd> set bonding primary 6 10
1915
1916set bonding mac
1917~~~~~~~~~~~~~~~
1918
1919Set the MAC address of a Link Bonding device::
1920
1921   testpmd> set bonding mac (port id) (mac)
1922
1923For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
1924
1925   testpmd> set bonding mac 10 00:00:00:00:00:01
1926
1927set bonding xmit_balance_policy
1928~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1929
1930Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
1931
1932   testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
1933
1934For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
1935
1936   testpmd> set bonding xmit_balance_policy 10 l34
1937
1938
1939set bonding mon_period
1940~~~~~~~~~~~~~~~~~~~~~~
1941
1942Set the link status monitoring polling period in milliseconds for a bonding device.
1943
1944This adds support for PMD slave devices which do not support link status interrupts.
1945When the mon_period is set to a value greater than 0 then all PMD's which do not support
1946link status ISR will be queried every polling interval to check if their link status has changed::
1947
1948   testpmd> set bonding mon_period (port_id) (value)
1949
1950For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
1951
1952   testpmd> set bonding mon_period 5 150
1953
1954
1955set bonding lacp dedicated_queue
1956~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1957
1958Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
1959when in mode 4 (link-aggregration-802.3ad)::
1960
1961   testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
1962
1963
1964set bonding agg_mode
1965~~~~~~~~~~~~~~~~~~~~
1966
1967Enable one of the specific aggregators mode when in mode 4 (link-aggregration-802.3ad)::
1968
1969   testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable)
1970
1971
1972show bonding config
1973~~~~~~~~~~~~~~~~~~~
1974
1975Show the current configuration of a Link Bonding device::
1976
1977   testpmd> show bonding config (port id)
1978
1979For example,
1980to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
1981in balance mode with a transmission policy of layer 2+3::
1982
1983   testpmd> show bonding config 9
1984        Bonding mode: 2
1985        Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
1986        Slaves (3): [1 3 4]
1987        Active Slaves (3): [1 3 4]
1988        Primary: [3]
1989
1990
1991Register Functions
1992------------------
1993
1994The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
1995This is mainly useful for debugging purposes.
1996Reference should be made to the appropriate datasheet for the network card for details on the register addresses
1997and fields that can be accessed.
1998
1999read reg
2000~~~~~~~~
2001
2002Display the value of a port register::
2003
2004   testpmd> read reg (port_id) (address)
2005
2006For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
2007
2008   testpmd> read reg 0 0xEE00
2009   port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
2010
2011read regfield
2012~~~~~~~~~~~~~
2013
2014Display a port register bit field::
2015
2016   testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2017
2018For example, reading the lowest two bits from the register in the example above::
2019
2020   testpmd> read regfield 0 0xEE00 0 1
2021   port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
2022
2023read regbit
2024~~~~~~~~~~~
2025
2026Display a single port register bit::
2027
2028   testpmd> read regbit (port_id) (address) (bit_x)
2029
2030For example, reading the lowest bit from the register in the example above::
2031
2032   testpmd> read regbit 0 0xEE00 0
2033   port 0 PCI register at offset 0xEE00: bit 0=1
2034
2035write reg
2036~~~~~~~~~
2037
2038Set the value of a port register::
2039
2040   testpmd> write reg (port_id) (address) (value)
2041
2042For example, to clear a register::
2043
2044   testpmd> write reg 0 0xEE00 0x0
2045   port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2046
2047write regfield
2048~~~~~~~~~~~~~~
2049
2050Set bit field of a port register::
2051
2052   testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2053
2054For example, writing to the register cleared in the example above::
2055
2056   testpmd> write regfield 0 0xEE00 0 1 2
2057   port 0 PCI register at offset 0xEE00: 0x00000002 (2)
2058
2059write regbit
2060~~~~~~~~~~~~
2061
2062Set single bit value of a port register::
2063
2064   testpmd> write regbit (port_id) (address) (bit_x) (value)
2065
2066For example, to set the high bit in the register from the example above::
2067
2068   testpmd> write regbit 0 0xEE00 31 1
2069   port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
2070
2071Traffic Metering and Policing
2072-----------------------------
2073
2074The following section shows functions for configuring traffic metering and
2075policing on the ethernet device through the use of generic ethdev API.
2076
2077show port traffic management capability
2078~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2079
2080Show traffic metering and policing capability of the port::
2081
2082   testpmd> show port meter cap (port_id)
2083
2084add port meter profile (srTCM rfc2967)
2085~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2086
2087Add meter profile (srTCM rfc2697) to the ethernet device::
2088
2089   testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2090   (cir) (cbs) (ebs)
2091
2092where:
2093
2094* ``profile_id``: ID for the meter profile.
2095* ``cir``: Committed Information Rate (CIR) (bytes/second).
2096* ``cbs``: Committed Burst Size (CBS) (bytes).
2097* ``ebs``: Excess Burst Size (EBS) (bytes).
2098
2099add port meter profile (trTCM rfc2968)
2100~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2101
2102Add meter profile (srTCM rfc2698) to the ethernet device::
2103
2104   testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2105   (cir) (pir) (cbs) (pbs)
2106
2107where:
2108
2109* ``profile_id``: ID for the meter profile.
2110* ``cir``: Committed information rate (bytes/second).
2111* ``pir``: Peak information rate (bytes/second).
2112* ``cbs``: Committed burst size (bytes).
2113* ``pbs``: Peak burst size (bytes).
2114
2115add port meter profile (trTCM rfc4115)
2116~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2117
2118Add meter profile (trTCM rfc4115) to the ethernet device::
2119
2120   testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2121   (cir) (eir) (cbs) (ebs)
2122
2123where:
2124
2125* ``profile_id``: ID for the meter profile.
2126* ``cir``: Committed information rate (bytes/second).
2127* ``eir``: Excess information rate (bytes/second).
2128* ``cbs``: Committed burst size (bytes).
2129* ``ebs``: Excess burst size (bytes).
2130
2131delete port meter profile
2132~~~~~~~~~~~~~~~~~~~~~~~~~
2133
2134Delete meter profile from the ethernet device::
2135
2136   testpmd> del port meter profile (port_id) (profile_id)
2137
2138create port meter
2139~~~~~~~~~~~~~~~~~
2140
2141Create new meter object for the ethernet device::
2142
2143   testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2144   (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \
2145   (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2146   (dscp_tbl_entry63)]
2147
2148where:
2149
2150* ``mtr_id``: meter object ID.
2151* ``profile_id``: ID for the meter profile.
2152* ``meter_enable``: When this parameter has a non-zero value, the meter object
2153  gets enabled at the time of creation, otherwise remains disabled.
2154* ``g_action``: Policer action for the packet with green color.
2155* ``y_action``: Policer action for the packet with yellow color.
2156* ``r_action``: Policer action for the packet with red color.
2157* ``stats_mask``: Mask of statistics counter types to be enabled for the
2158  meter object.
2159* ``shared``:  When this parameter has a non-zero value, the meter object is
2160  shared by multiple flows. Otherwise, meter object is used by single flow.
2161* ``use_pre_meter_color``: When this parameter has a non-zero value, the
2162  input color for the current meter object is determined by the latest meter
2163  object in the same flow. Otherwise, the current meter object uses the
2164  *dscp_table* to determine the input color.
2165* ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2166  color, 0 <= x <= 63.
2167
2168enable port meter
2169~~~~~~~~~~~~~~~~~
2170
2171Enable meter for the ethernet device::
2172
2173   testpmd> enable port meter (port_id) (mtr_id)
2174
2175disable port meter
2176~~~~~~~~~~~~~~~~~~
2177
2178Disable meter for the ethernet device::
2179
2180   testpmd> disable port meter (port_id) (mtr_id)
2181
2182delete port meter
2183~~~~~~~~~~~~~~~~~
2184
2185Delete meter for the ethernet device::
2186
2187   testpmd> del port meter (port_id) (mtr_id)
2188
2189Set port meter profile
2190~~~~~~~~~~~~~~~~~~~~~~
2191
2192Set meter profile for the ethernet device::
2193
2194   testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2195
2196set port meter dscp table
2197~~~~~~~~~~~~~~~~~~~~~~~~~
2198
2199Set meter dscp table for the ethernet device::
2200
2201   testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \
2202   (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2203
2204set port meter policer action
2205~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2206
2207Set meter policer action for the ethernet device::
2208
2209   testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \
2210   (action0) [(action1) (action1)]
2211
2212where:
2213
2214* ``action_mask``: Bit mask indicating which policer actions need to be
2215  updated. One or more policer actions can be updated in a single function
2216  invocation. To update the policer action associated with color C, bit
2217  (1 << C) needs to be set in *action_mask* and element at position C
2218  in the *actions* array needs to be valid.
2219* ``actionx``: Policer action for the color x,
2220  RTE_MTR_GREEN <= x < RTE_MTR_COLORS
2221
2222set port meter stats mask
2223~~~~~~~~~~~~~~~~~~~~~~~~~
2224
2225Set meter stats mask for the ethernet device::
2226
2227   testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2228
2229where:
2230
2231* ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2232
2233show port meter stats
2234~~~~~~~~~~~~~~~~~~~~~
2235
2236Show meter stats of the ethernet device::
2237
2238   testpmd> show port meter stats (port_id) (mtr_id) (clear)
2239
2240where:
2241
2242* ``clear``: Flag that indicates whether the statistics counters should
2243  be cleared (i.e. set to zero) immediately after they have been read or not.
2244
2245Traffic Management
2246------------------
2247
2248The following section shows functions for configuring traffic management on
2249on the ethernet device through the use of generic TM API.
2250
2251show port traffic management capability
2252~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2253
2254Show traffic management capability of the port::
2255
2256   testpmd> show port tm cap (port_id)
2257
2258show port traffic management capability (hierarchy level)
2259~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2260
2261Show traffic management hierarchy level capability of the port::
2262
2263   testpmd> show port tm cap (port_id) (level_id)
2264
2265show port traffic management capability (hierarchy node level)
2266~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2267
2268Show the traffic management hierarchy node capability of the port::
2269
2270   testpmd> show port tm cap (port_id) (node_id)
2271
2272show port traffic management hierarchy node type
2273~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2274
2275Show the port traffic management hierarchy node type::
2276
2277   testpmd> show port tm node type (port_id) (node_id)
2278
2279show port traffic management hierarchy node stats
2280~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2281
2282Show the port traffic management hierarchy node statistics::
2283
2284   testpmd> show port tm node stats (port_id) (node_id) (clear)
2285
2286where:
2287
2288* ``clear``: When this parameter has a non-zero value, the statistics counters
2289  are cleared (i.e. set to zero) immediately after they have been read,
2290  otherwise the statistics counters are left untouched.
2291
2292Add port traffic management private shaper profile
2293~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2294
2295Add the port traffic management private shaper profile::
2296
2297   testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2298   (tb_rate) (tb_size) (packet_length_adjust)
2299
2300where:
2301
2302* ``shaper_profile id``: Shaper profile ID for the new profile.
2303* ``tb_rate``: Token bucket rate (bytes per second).
2304* ``tb_size``: Token bucket size (bytes).
2305* ``packet_length_adjust``: The value (bytes) to be added to the length of
2306  each packet for the purpose of shaping. This parameter value can be used to
2307  correct the packet length with the framing overhead bytes that are consumed
2308  on the wire.
2309
2310Delete port traffic management private shaper profile
2311~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2312
2313Delete the port traffic management private shaper::
2314
2315   testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2316
2317where:
2318
2319* ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2320
2321Add port traffic management shared shaper
2322~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2323
2324Create the port traffic management shared shaper::
2325
2326   testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2327   (shaper_profile_id)
2328
2329where:
2330
2331* ``shared_shaper_id``: Shared shaper ID to be created.
2332* ``shaper_profile id``: Shaper profile ID for shared shaper.
2333
2334Set port traffic management shared shaper
2335~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2336
2337Update the port traffic management shared shaper::
2338
2339   testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2340   (shaper_profile_id)
2341
2342where:
2343
2344* ``shared_shaper_id``: Shared shaper ID to be update.
2345* ``shaper_profile id``: Shaper profile ID for shared shaper.
2346
2347Delete port traffic management shared shaper
2348~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2349
2350Delete the port traffic management shared shaper::
2351
2352   testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2353
2354where:
2355
2356* ``shared_shaper_id``: Shared shaper ID to be deleted.
2357
2358Set port traffic management hiearchy node private shaper
2359~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2360
2361set the port traffic management hierarchy node private shaper::
2362
2363   testpmd> set port tm node shaper profile (port_id) (node_id) \
2364   (shaper_profile_id)
2365
2366where:
2367
2368* ``shaper_profile id``: Private shaper profile ID to be enabled on the
2369  hierarchy node.
2370
2371Add port traffic management WRED profile
2372~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2373
2374Create a new WRED profile::
2375
2376   testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2377   (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2378   (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2379   (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2380
2381where:
2382
2383* ``wred_profile id``: Identifier for the newly create WRED profile
2384* ``color_g``: Packet color (green)
2385* ``min_th_g``: Minimum queue threshold for packet with green color
2386* ``max_th_g``: Minimum queue threshold for packet with green color
2387* ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2388* ``wq_log2_g``: Negated log2 of queue weight (wq)
2389* ``color_y``: Packet color (yellow)
2390* ``min_th_y``: Minimum queue threshold for packet with yellow color
2391* ``max_th_y``: Minimum queue threshold for packet with yellow color
2392* ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2393* ``wq_log2_y``: Negated log2 of queue weight (wq)
2394* ``color_r``: Packet color (red)
2395* ``min_th_r``: Minimum queue threshold for packet with yellow color
2396* ``max_th_r``: Minimum queue threshold for packet with yellow color
2397* ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2398* ``wq_log2_r``: Negated log2 of queue weight (wq)
2399
2400Delete port traffic management WRED profile
2401~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2402
2403Delete the WRED profile::
2404
2405   testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2406
2407Add port traffic management hierarchy nonleaf node
2408~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2409
2410Add nonleaf node to port traffic management hiearchy::
2411
2412   testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2413   (priority) (weight) (level_id) (shaper_profile_id) \
2414   (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2415   [(shared_shaper_0) (shared_shaper_1) ...] \
2416
2417where:
2418
2419* ``parent_node_id``: Node ID of the parent.
2420* ``priority``: Node priority (highest node priority is zero). This is used by
2421  the SP algorithm running on the parent node for scheduling this node.
2422* ``weight``: Node weight (lowest weight is one). The node weight is relative
2423  to the weight sum of all siblings that have the same priority. It is used by
2424  the WFQ algorithm running on the parent node for scheduling this node.
2425* ``level_id``: Hiearchy level of the node.
2426* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2427  the node.
2428* ``n_sp_priorities``: Number of strict priorities.
2429* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2430* ``n_shared_shapers``: Number of shared shapers.
2431* ``shared_shaper_id``: Shared shaper id.
2432
2433Add port traffic management hierarchy leaf node
2434~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2435
2436Add leaf node to port traffic management hiearchy::
2437
2438   testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2439   (priority) (weight) (level_id) (shaper_profile_id) \
2440   (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2441   [(shared_shaper_id) (shared_shaper_id) ...] \
2442
2443where:
2444
2445* ``parent_node_id``: Node ID of the parent.
2446* ``priority``: Node priority (highest node priority is zero). This is used by
2447  the SP algorithm running on the parent node for scheduling this node.
2448* ``weight``: Node weight (lowest weight is one). The node weight is relative
2449  to the weight sum of all siblings that have the same priority. It is used by
2450  the WFQ algorithm running on the parent node for scheduling this node.
2451* ``level_id``: Hiearchy level of the node.
2452* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2453  the node.
2454* ``cman_mode``: Congestion management mode to be enabled for this node.
2455* ``wred_profile_id``: WRED profile id to be enabled for this node.
2456* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2457* ``n_shared_shapers``: Number of shared shapers.
2458* ``shared_shaper_id``: Shared shaper id.
2459
2460Delete port traffic management hierarchy node
2461~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2462
2463Delete node from port traffic management hiearchy::
2464
2465   testpmd> del port tm node (port_id) (node_id)
2466
2467Update port traffic management hierarchy parent node
2468~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2469
2470Update port traffic management hierarchy parent node::
2471
2472   testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
2473   (priority) (weight)
2474
2475This function can only be called after the hierarchy commit invocation. Its
2476success depends on the port support for this operation, as advertised through
2477the port capability set. This function is valid for all nodes of the traffic
2478management hierarchy except root node.
2479
2480Commit port traffic management hierarchy
2481~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2482
2483Commit the traffic management hierarchy on the port::
2484
2485   testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2486
2487where:
2488
2489* ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
2490  call failure. On the other hand, hierarchy is preserved when this parameter
2491  is equal to zero.
2492
2493Set port traffic management default hierarchy (tm forwarding mode)
2494~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2495
2496set the traffic management default hierarchy on the port::
2497
2498   testpmd> set port tm hierarchy default (port_id)
2499
2500Filter Functions
2501----------------
2502
2503This section details the available filter functions that are available.
2504
2505Note these functions interface the deprecated legacy filtering framework,
2506superseded by *rte_flow*. See `Flow rules management`_.
2507
2508ethertype_filter
2509~~~~~~~~~~~~~~~~~~~~
2510
2511Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
2512
2513   ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
2514                    ethertype (ether_type) (drop|fwd) queue (queue_id)
2515
2516The available information parameters are:
2517
2518* ``port_id``: The port which the Ethertype filter assigned on.
2519
2520* ``mac_addr``: Compare destination mac address.
2521
2522* ``mac_ignr``: Ignore destination mac address match.
2523
2524* ``mac_address``: Destination mac address to match.
2525
2526* ``ether_type``: The EtherType value want to match,
2527  for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
2528
2529* ``queue_id``: The receive queue associated with this EtherType filter.
2530  It is meaningless when deleting or dropping.
2531
2532Example, to add/remove an ethertype filter rule::
2533
2534   testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
2535                             ethertype 0x0806 fwd queue 3
2536
2537   testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
2538                             ethertype 0x0806 fwd queue 3
2539
25402tuple_filter
2541~~~~~~~~~~~~~~~~~
2542
2543Add or delete a 2-tuple filter,
2544which identifies packets by specific protocol and destination TCP/UDP port
2545and forwards packets into one of the receive queues::
2546
2547   2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
2548                 protocol (protocol_value) mask (mask_value) \
2549                 tcp_flags (tcp_flags_value) priority (prio_value) \
2550                 queue (queue_id)
2551
2552The available information parameters are:
2553
2554* ``port_id``: The port which the 2-tuple filter assigned on.
2555
2556* ``dst_port_value``: Destination port in L4.
2557
2558* ``protocol_value``: IP L4 protocol.
2559
2560* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
2561
2562* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
2563
2564* ``prio_value``: Priority of this filter.
2565
2566* ``queue_id``: The receive queue associated with this 2-tuple filter.
2567
2568Example, to add/remove an 2tuple filter rule::
2569
2570   testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
2571                          tcp_flags 0x02 priority 3 queue 3
2572
2573   testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
2574                          tcp_flags 0x02 priority 3 queue 3
2575
25765tuple_filter
2577~~~~~~~~~~~~~~~~~
2578
2579Add or delete a 5-tuple filter,
2580which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
2581and routes packets into one of the receive queues::
2582
2583   5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
2584                 (src_address) dst_port (dst_port_value) \
2585                 src_port (src_port_value) protocol (protocol_value) \
2586                 mask (mask_value) tcp_flags (tcp_flags_value) \
2587                 priority (prio_value) queue (queue_id)
2588
2589The available information parameters are:
2590
2591* ``port_id``: The port which the 5-tuple filter assigned on.
2592
2593* ``dst_address``: Destination IP address.
2594
2595* ``src_address``: Source IP address.
2596
2597* ``dst_port_value``: TCP/UDP destination port.
2598
2599* ``src_port_value``: TCP/UDP source port.
2600
2601* ``protocol_value``: L4 protocol.
2602
2603* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
2604
2605* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
2606
2607* ``prio_value``: The priority of this filter.
2608
2609* ``queue_id``: The receive queue associated with this 5-tuple filter.
2610
2611Example, to add/remove an 5tuple filter rule::
2612
2613   testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
2614            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
2615            flags 0x0 priority 3 queue 3
2616
2617   testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
2618            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
2619            flags 0x0 priority 3 queue 3
2620
2621syn_filter
2622~~~~~~~~~~
2623
2624Using the  SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
2625
2626   syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
2627
2628The available information parameters are:
2629
2630* ``port_id``: The port which the SYN filter assigned on.
2631
2632* ``high``: This SYN filter has higher priority than other filters.
2633
2634* ``low``: This SYN filter has lower priority than other filters.
2635
2636* ``queue_id``: The receive queue associated with this SYN filter
2637
2638Example::
2639
2640   testpmd> syn_filter 0 add priority high queue 3
2641
2642flex_filter
2643~~~~~~~~~~~
2644
2645With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
2646and routed into one of the receive queues::
2647
2648   flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
2649               mask (mask_value) priority (prio_value) queue (queue_id)
2650
2651The available information parameters are:
2652
2653* ``port_id``: The port which the Flex filter is assigned on.
2654
2655* ``len_value``: Filter length in bytes, no greater than 128.
2656
2657* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
2658
2659* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
2660
2661* ``prio_value``: The priority of this filter.
2662
2663* ``queue_id``: The receive queue associated with this Flex filter.
2664
2665Example::
2666
2667   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
2668                          mask 000C priority 3 queue 3
2669
2670   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
2671                          mask 000C priority 3 queue 3
2672
2673
2674.. _testpmd_flow_director:
2675
2676flow_director_filter
2677~~~~~~~~~~~~~~~~~~~~
2678
2679The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
2680
2681Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
2682Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
2683
2684* Perfect match filters.
2685  The hardware checks a match between the masked fields of the received packets and the programmed filters.
2686  The masked fields are for IP flow.
2687
2688* Signature filters.
2689  The hardware checks a match between a hash-based signature of the masked fields of the received packet.
2690
2691* Perfect-mac-vlan match filters.
2692  The hardware checks a match between the masked fields of the received packets and the programmed filters.
2693  The masked fields are for MAC VLAN flow.
2694
2695* Perfect-tunnel match filters.
2696  The hardware checks a match between the masked fields of the received packets and the programmed filters.
2697  The masked fields are for tunnel flow.
2698
2699The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
2700per flow type and the flexible payload.
2701
2702The Flow Director can also mask out parts of all of these fields so that filters
2703are only applied to certain fields or parts of the fields.
2704
2705Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
2706
2707# Commands to add flow director filters of different flow types::
2708
2709   flow_director_filter (port_id) mode IP (add|del|update) \
2710                        flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
2711                        src (src_ip_address) dst (dst_ip_address) \
2712                        tos (tos_value) proto (proto_value) ttl (ttl_value) \
2713                        vlan (vlan_value) flexbytes (flexbytes_value) \
2714                        (drop|fwd) pf|vf(vf_id) queue (queue_id) \
2715                        fd_id (fd_id_value)
2716
2717   flow_director_filter (port_id) mode IP (add|del|update) \
2718                        flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
2719                        src (src_ip_address) (src_port) \
2720                        dst (dst_ip_address) (dst_port) \
2721                        tos (tos_value) ttl (ttl_value) \
2722                        vlan (vlan_value) flexbytes (flexbytes_value) \
2723                        (drop|fwd) queue pf|vf(vf_id) (queue_id) \
2724                        fd_id (fd_id_value)
2725
2726   flow_director_filter (port_id) mode IP (add|del|update) \
2727                        flow (ipv4-sctp|ipv6-sctp) \
2728                        src (src_ip_address) (src_port) \
2729                        dst (dst_ip_address) (dst_port) \
2730                        tos (tos_value) ttl (ttl_value) \
2731                        tag (verification_tag) vlan (vlan_value) \
2732                        flexbytes (flexbytes_value) (drop|fwd) \
2733                        pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
2734
2735   flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
2736                        ether (ethertype) flexbytes (flexbytes_value) \
2737                        (drop|fwd) pf|vf(vf_id) queue (queue_id)
2738                        fd_id (fd_id_value)
2739
2740   flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
2741                        mac (mac_address) vlan (vlan_value) \
2742                        flexbytes (flexbytes_value) (drop|fwd) \
2743                        queue (queue_id) fd_id (fd_id_value)
2744
2745   flow_director_filter (port_id) mode Tunnel (add|del|update) \
2746                        mac (mac_address) vlan (vlan_value) \
2747                        tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
2748                        flexbytes (flexbytes_value) (drop|fwd) \
2749                        queue (queue_id) fd_id (fd_id_value)
2750
2751For example, to add an ipv4-udp flow type filter::
2752
2753   testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
2754            dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
2755            fwd pf queue 1 fd_id 1
2756
2757For example, add an ipv4-other flow type filter::
2758
2759   testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
2760             dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
2761             flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
2762
2763flush_flow_director
2764~~~~~~~~~~~~~~~~~~~
2765
2766Flush all flow director filters on a device::
2767
2768   testpmd> flush_flow_director (port_id)
2769
2770Example, to flush all flow director filter on port 0::
2771
2772   testpmd> flush_flow_director 0
2773
2774flow_director_mask
2775~~~~~~~~~~~~~~~~~~
2776
2777Set flow director's input masks::
2778
2779   flow_director_mask (port_id) mode IP vlan (vlan_value) \
2780                      src_mask (ipv4_src) (ipv6_src) (src_port) \
2781                      dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
2782
2783   flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
2784
2785   flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
2786                      mac (mac_value) tunnel-type (tunnel_type_value) \
2787                      tunnel-id (tunnel_id_value)
2788
2789Example, to set flow director mask on port 0::
2790
2791   testpmd> flow_director_mask 0 mode IP vlan 0xefff \
2792            src_mask 255.255.255.255 \
2793                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
2794            dst_mask 255.255.255.255 \
2795                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
2796
2797flow_director_flex_mask
2798~~~~~~~~~~~~~~~~~~~~~~~
2799
2800set masks of flow director's flexible payload based on certain flow type::
2801
2802   testpmd> flow_director_flex_mask (port_id) \
2803            flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2804                  ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
2805                  l2_payload|all) (mask)
2806
2807Example, to set flow director's flex mask for all flow type on port 0::
2808
2809   testpmd> flow_director_flex_mask 0 flow all \
2810            (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
2811
2812
2813flow_director_flex_payload
2814~~~~~~~~~~~~~~~~~~~~~~~~~~
2815
2816Configure flexible payload selection::
2817
2818   flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
2819
2820For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
2821
2822   testpmd> flow_director_flex_payload 0 l4 \
2823            (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
2824
2825get_sym_hash_ena_per_port
2826~~~~~~~~~~~~~~~~~~~~~~~~~
2827
2828Get symmetric hash enable configuration per port::
2829
2830   get_sym_hash_ena_per_port (port_id)
2831
2832For example, to get symmetric hash enable configuration of port 1::
2833
2834   testpmd> get_sym_hash_ena_per_port 1
2835
2836set_sym_hash_ena_per_port
2837~~~~~~~~~~~~~~~~~~~~~~~~~
2838
2839Set symmetric hash enable configuration per port to enable or disable::
2840
2841   set_sym_hash_ena_per_port (port_id) (enable|disable)
2842
2843For example, to set symmetric hash enable configuration of port 1 to enable::
2844
2845   testpmd> set_sym_hash_ena_per_port 1 enable
2846
2847get_hash_global_config
2848~~~~~~~~~~~~~~~~~~~~~~
2849
2850Get the global configurations of hash filters::
2851
2852   get_hash_global_config (port_id)
2853
2854For example, to get the global configurations of hash filters of port 1::
2855
2856   testpmd> get_hash_global_config 1
2857
2858set_hash_global_config
2859~~~~~~~~~~~~~~~~~~~~~~
2860
2861Set the global configurations of hash filters::
2862
2863   set_hash_global_config (port_id) (toeplitz|simple_xor|default) \
2864   (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
2865   ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \
2866   (enable|disable)
2867
2868For example, to enable simple_xor for flow type of ipv6 on port 2::
2869
2870   testpmd> set_hash_global_config 2 simple_xor ipv6 enable
2871
2872set_hash_input_set
2873~~~~~~~~~~~~~~~~~~
2874
2875Set the input set for hash::
2876
2877   set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2878   ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
2879   l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
2880   ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
2881   tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
2882   udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
2883   fld-8th|none) (select|add)
2884
2885For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
2886
2887   testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
2888
2889set_fdir_input_set
2890~~~~~~~~~~~~~~~~~~
2891
2892The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
2893on per flow type and the flexible payload. This command can be used to change input set for each flow type.
2894
2895Set the input set for flow director::
2896
2897   set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2898   ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
2899   l2_payload) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
2900   ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
2901   tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
2902   sctp-dst-port|sctp-veri-tag|none) (select|add)
2903
2904For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
2905
2906   testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
2907
2908global_config
2909~~~~~~~~~~~~~
2910
2911Set different GRE key length for input set::
2912
2913   global_config (port_id) gre-key-len (number in bytes)
2914
2915For example to set GRE key length for input set to 4 bytes on port 0::
2916
2917   testpmd> global_config 0 gre-key-len 4
2918
2919
2920.. _testpmd_rte_flow:
2921
2922Flow rules management
2923---------------------
2924
2925Control of the generic flow API (*rte_flow*) is fully exposed through the
2926``flow`` command (validation, creation, destruction, queries and operation
2927modes).
2928
2929Considering *rte_flow* overlaps with all `Filter Functions`_, using both
2930features simultaneously may cause undefined side-effects and is therefore
2931not recommended.
2932
2933``flow`` syntax
2934~~~~~~~~~~~~~~~
2935
2936Because the ``flow`` command uses dynamic tokens to handle the large number
2937of possible flow rules combinations, its behavior differs slightly from
2938other commands, in particular:
2939
2940- Pressing *?* or the *<tab>* key displays contextual help for the current
2941  token, not that of the entire command.
2942
2943- Optional and repeated parameters are supported (provided they are listed
2944  in the contextual help).
2945
2946The first parameter stands for the operation mode. Possible operations and
2947their general syntax are described below. They are covered in detail in the
2948following sections.
2949
2950- Check whether a flow rule can be created::
2951
2952   flow validate {port_id}
2953       [group {group_id}] [priority {level}] [ingress] [egress]
2954       pattern {item} [/ {item} [...]] / end
2955       actions {action} [/ {action} [...]] / end
2956
2957- Create a flow rule::
2958
2959   flow create {port_id}
2960       [group {group_id}] [priority {level}] [ingress] [egress]
2961       pattern {item} [/ {item} [...]] / end
2962       actions {action} [/ {action} [...]] / end
2963
2964- Destroy specific flow rules::
2965
2966   flow destroy {port_id} rule {rule_id} [...]
2967
2968- Destroy all flow rules::
2969
2970   flow flush {port_id}
2971
2972- Query an existing flow rule::
2973
2974   flow query {port_id} {rule_id} {action}
2975
2976- List existing flow rules sorted by priority, filtered by group
2977  identifiers::
2978
2979   flow list {port_id} [group {group_id}] [...]
2980
2981- Restrict ingress traffic to the defined flow rules::
2982
2983   flow isolate {port_id} {boolean}
2984
2985Validating flow rules
2986~~~~~~~~~~~~~~~~~~~~~
2987
2988``flow validate`` reports whether a flow rule would be accepted by the
2989underlying device in its current state but stops short of creating it. It is
2990bound to ``rte_flow_validate()``::
2991
2992   flow validate {port_id}
2993      [group {group_id}] [priority {level}] [ingress] [egress]
2994      pattern {item} [/ {item} [...]] / end
2995      actions {action} [/ {action} [...]] / end
2996
2997If successful, it will show::
2998
2999   Flow rule validated
3000
3001Otherwise it will show an error message of the form::
3002
3003   Caught error type [...] ([...]): [...]
3004
3005This command uses the same parameters as ``flow create``, their format is
3006described in `Creating flow rules`_.
3007
3008Check whether redirecting any Ethernet packet received on port 0 to RX queue
3009index 6 is supported::
3010
3011   testpmd> flow validate 0 ingress pattern eth / end
3012      actions queue index 6 / end
3013   Flow rule validated
3014   testpmd>
3015
3016Port 0 does not support TCPv6 rules::
3017
3018   testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3019      actions drop / end
3020   Caught error type 9 (specific pattern item): Invalid argument
3021   testpmd>
3022
3023Creating flow rules
3024~~~~~~~~~~~~~~~~~~~
3025
3026``flow create`` validates and creates the specified flow rule. It is bound
3027to ``rte_flow_create()``::
3028
3029   flow create {port_id}
3030      [group {group_id}] [priority {level}] [ingress] [egress]
3031      pattern {item} [/ {item} [...]] / end
3032      actions {action} [/ {action} [...]] / end
3033
3034If successful, it will return a flow rule ID usable with other commands::
3035
3036   Flow rule #[...] created
3037
3038Otherwise it will show an error message of the form::
3039
3040   Caught error type [...] ([...]): [...]
3041
3042Parameters describe in the following order:
3043
3044- Attributes (*group*, *priority*, *ingress*, *egress* tokens).
3045- A matching pattern, starting with the *pattern* token and terminated by an
3046  *end* pattern item.
3047- Actions, starting with the *actions* token and terminated by an *end*
3048  action.
3049
3050These translate directly to *rte_flow* objects provided as-is to the
3051underlying functions.
3052
3053The shortest valid definition only comprises mandatory tokens::
3054
3055   testpmd> flow create 0 pattern end actions end
3056
3057Note that PMDs may refuse rules that essentially do nothing such as this
3058one.
3059
3060**All unspecified object values are automatically initialized to 0.**
3061
3062Attributes
3063^^^^^^^^^^
3064
3065These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3066specified before the ``pattern`` token.
3067
3068- ``group {group id}``: priority group.
3069- ``priority {level}``: priority level within group.
3070- ``ingress``: rule applies to ingress traffic.
3071- ``egress``: rule applies to egress traffic.
3072
3073Each instance of an attribute specified several times overrides the previous
3074value as shown below (group 4 is used)::
3075
3076   testpmd> flow create 0 group 42 group 24 group 4 [...]
3077
3078Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3079
3080While not specifying a direction is an error, some rules may allow both
3081simultaneously.
3082
3083Most rules affect RX therefore contain the ``ingress`` token::
3084
3085   testpmd> flow create 0 ingress pattern [...]
3086
3087Matching pattern
3088^^^^^^^^^^^^^^^^
3089
3090A matching pattern starts after the ``pattern`` token. It is made of pattern
3091items and is terminated by a mandatory ``end`` item.
3092
3093Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3094rte_flow_item_type``).
3095
3096The ``/`` token is used as a separator between pattern items as shown
3097below::
3098
3099   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3100
3101Note that protocol items like these must be stacked from lowest to highest
3102layer to make sense. For instance, the following rule is either invalid or
3103unlikely to match any packet::
3104
3105   testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3106
3107More information on these restrictions can be found in the *rte_flow*
3108documentation.
3109
3110Several items support additional specification structures, for example
3111``ipv4`` allows specifying source and destination addresses as follows::
3112
3113   testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3114      dst is 10.2.0.0 / end [...]
3115
3116This rule matches all IPv4 traffic with the specified properties.
3117
3118In this example, ``src`` and ``dst`` are field names of the underlying
3119``struct rte_flow_item_ipv4`` object. All item properties can be specified
3120in a similar fashion.
3121
3122The ``is`` token means that the subsequent value must be matched exactly,
3123and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3124accordingly. Possible assignment tokens are:
3125
3126- ``is``: match value perfectly (with full bit-mask).
3127- ``spec``: match value according to configured bit-mask.
3128- ``last``: specify upper bound to establish a range.
3129- ``mask``: specify bit-mask with relevant bits set to one.
3130- ``prefix``: generate bit-mask from a prefix length.
3131
3132These yield identical results::
3133
3134   ipv4 src is 10.1.1.1
3135
3136::
3137
3138   ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3139
3140::
3141
3142   ipv4 src spec 10.1.1.1 src prefix 32
3143
3144::
3145
3146   ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3147
3148::
3149
3150   ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3151
3152Inclusive ranges can be defined with ``last``::
3153
3154   ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3155
3156Note that ``mask`` affects both ``spec`` and ``last``::
3157
3158   ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3159      # matches 10.1.0.0 to 10.2.255.255
3160
3161Properties can be modified multiple times::
3162
3163   ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3164
3165::
3166
3167   ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3168
3169Pattern items
3170^^^^^^^^^^^^^
3171
3172This section lists supported pattern items and their attributes, if any.
3173
3174- ``end``: end list of pattern items.
3175
3176- ``void``: no-op pattern item.
3177
3178- ``invert``: perform actions when pattern does not match.
3179
3180- ``any``: match any protocol for the current layer.
3181
3182  - ``num {unsigned}``: number of layers covered.
3183
3184- ``pf``: match packets addressed to the physical function.
3185
3186- ``vf``: match packets addressed to a virtual function ID.
3187
3188  - ``id {unsigned}``: destination VF ID.
3189
3190- ``port``: device-specific physical port index to use.
3191
3192  - ``index {unsigned}``: physical port index.
3193
3194- ``raw``: match an arbitrary byte string.
3195
3196  - ``relative {boolean}``: look for pattern after the previous item.
3197  - ``search {boolean}``: search pattern from offset (see also limit).
3198  - ``offset {integer}``: absolute or relative offset for pattern.
3199  - ``limit {unsigned}``: search area limit for start of pattern.
3200  - ``pattern {string}``: byte string to look for.
3201
3202- ``eth``: match Ethernet header.
3203
3204  - ``dst {MAC-48}``: destination MAC.
3205  - ``src {MAC-48}``: source MAC.
3206  - ``type {unsigned}``: EtherType.
3207
3208- ``vlan``: match 802.1Q/ad VLAN tag.
3209
3210  - ``tpid {unsigned}``: tag protocol identifier.
3211  - ``tci {unsigned}``: tag control information.
3212  - ``pcp {unsigned}``: priority code point.
3213  - ``dei {unsigned}``: drop eligible indicator.
3214  - ``vid {unsigned}``: VLAN identifier.
3215
3216- ``ipv4``: match IPv4 header.
3217
3218  - ``tos {unsigned}``: type of service.
3219  - ``ttl {unsigned}``: time to live.
3220  - ``proto {unsigned}``: next protocol ID.
3221  - ``src {ipv4 address}``: source address.
3222  - ``dst {ipv4 address}``: destination address.
3223
3224- ``ipv6``: match IPv6 header.
3225
3226  - ``tc {unsigned}``: traffic class.
3227  - ``flow {unsigned}``: flow label.
3228  - ``proto {unsigned}``: protocol (next header).
3229  - ``hop {unsigned}``: hop limit.
3230  - ``src {ipv6 address}``: source address.
3231  - ``dst {ipv6 address}``: destination address.
3232
3233- ``icmp``: match ICMP header.
3234
3235  - ``type {unsigned}``: ICMP packet type.
3236  - ``code {unsigned}``: ICMP packet code.
3237
3238- ``udp``: match UDP header.
3239
3240  - ``src {unsigned}``: UDP source port.
3241  - ``dst {unsigned}``: UDP destination port.
3242
3243- ``tcp``: match TCP header.
3244
3245  - ``src {unsigned}``: TCP source port.
3246  - ``dst {unsigned}``: TCP destination port.
3247
3248- ``sctp``: match SCTP header.
3249
3250  - ``src {unsigned}``: SCTP source port.
3251  - ``dst {unsigned}``: SCTP destination port.
3252  - ``tag {unsigned}``: validation tag.
3253  - ``cksum {unsigned}``: checksum.
3254
3255- ``vxlan``: match VXLAN header.
3256
3257  - ``vni {unsigned}``: VXLAN identifier.
3258
3259- ``e_tag``: match IEEE 802.1BR E-Tag header.
3260
3261  - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3262
3263- ``nvgre``: match NVGRE header.
3264
3265  - ``tni {unsigned}``: virtual subnet ID.
3266
3267- ``mpls``: match MPLS header.
3268
3269  - ``label {unsigned}``: MPLS label.
3270
3271- ``gre``: match GRE header.
3272
3273  - ``protocol {unsigned}``: protocol type.
3274
3275- ``fuzzy``: fuzzy pattern match, expect faster than default.
3276
3277  - ``thresh {unsigned}``: accuracy threshold.
3278
3279- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3280
3281  - ``teid {unsigned}``: tunnel endpoint identifier.
3282
3283Actions list
3284^^^^^^^^^^^^
3285
3286A list of actions starts after the ``actions`` token in the same fashion as
3287`Matching pattern`_; actions are separated by ``/`` tokens and the list is
3288terminated by a mandatory ``end`` action.
3289
3290Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3291rte_flow_action_type``).
3292
3293Dropping all incoming UDPv4 packets can be expressed as follows::
3294
3295   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3296      actions drop / end
3297
3298Several actions have configurable properties which must be specified when
3299there is no valid default value. For example, ``queue`` requires a target
3300queue index.
3301
3302This rule redirects incoming UDPv4 traffic to queue index 6::
3303
3304   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3305      actions queue index 6 / end
3306
3307While this one could be rejected by PMDs (unspecified queue index)::
3308
3309   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3310      actions queue / end
3311
3312As defined by *rte_flow*, the list is not ordered, all actions of a given
3313rule are performed simultaneously. These are equivalent::
3314
3315   queue index 6 / void / mark id 42 / end
3316
3317::
3318
3319   void / mark id 42 / queue index 6 / end
3320
3321All actions in a list should have different types, otherwise only the last
3322action of a given type is taken into account::
3323
3324   queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
3325
3326::
3327
3328   drop / drop / drop / end # drop is performed only once
3329
3330::
3331
3332   mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
3333
3334Considering they are performed simultaneously, opposite and overlapping
3335actions can sometimes be combined when the end result is unambiguous::
3336
3337   drop / queue index 6 / end # drop has no effect
3338
3339::
3340
3341   drop / dup index 6 / end # same as above
3342
3343::
3344
3345   queue index 6 / rss queues 6 7 8 / end # queue has no effect
3346
3347::
3348
3349   drop / passthru / end # drop has no effect
3350
3351Note that PMDs may still refuse such combinations.
3352
3353Actions
3354^^^^^^^
3355
3356This section lists supported actions and their attributes, if any.
3357
3358- ``end``: end list of actions.
3359
3360- ``void``: no-op action.
3361
3362- ``passthru``: let subsequent rule process matched packets.
3363
3364- ``mark``: attach 32 bit value to packets.
3365
3366  - ``id {unsigned}``: 32 bit value to return with packets.
3367
3368- ``flag``: flag packets.
3369
3370- ``queue``: assign packets to a given queue index.
3371
3372  - ``index {unsigned}``: queue index to use.
3373
3374- ``drop``: drop packets (note: passthru has priority).
3375
3376- ``count``: enable counters for this rule.
3377
3378- ``dup``: duplicate packets to a given queue index.
3379
3380  - ``index {unsigned}``: queue index to duplicate packets to.
3381
3382- ``rss``: spread packets among several queues.
3383
3384  - ``queues [{unsigned} [...]] end``: queue indices to use.
3385
3386- ``pf``: redirect packets to physical device function.
3387
3388- ``vf``: redirect packets to virtual device function.
3389
3390  - ``original {boolean}``: use original VF ID if possible.
3391  - ``id {unsigned}``: VF ID to redirect packets to.
3392
3393Destroying flow rules
3394~~~~~~~~~~~~~~~~~~~~~
3395
3396``flow destroy`` destroys one or more rules from their rule ID (as returned
3397by ``flow create``), this command calls ``rte_flow_destroy()`` as many
3398times as necessary::
3399
3400   flow destroy {port_id} rule {rule_id} [...]
3401
3402If successful, it will show::
3403
3404   Flow rule #[...] destroyed
3405
3406It does not report anything for rule IDs that do not exist. The usual error
3407message is shown when a rule cannot be destroyed::
3408
3409   Caught error type [...] ([...]): [...]
3410
3411``flow flush`` destroys all rules on a device and does not take extra
3412arguments. It is bound to ``rte_flow_flush()``::
3413
3414   flow flush {port_id}
3415
3416Any errors are reported as above.
3417
3418Creating several rules and destroying them::
3419
3420   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3421      actions queue index 2 / end
3422   Flow rule #0 created
3423   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3424      actions queue index 3 / end
3425   Flow rule #1 created
3426   testpmd> flow destroy 0 rule 0 rule 1
3427   Flow rule #1 destroyed
3428   Flow rule #0 destroyed
3429   testpmd>
3430
3431The same result can be achieved using ``flow flush``::
3432
3433   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3434      actions queue index 2 / end
3435   Flow rule #0 created
3436   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3437      actions queue index 3 / end
3438   Flow rule #1 created
3439   testpmd> flow flush 0
3440   testpmd>
3441
3442Non-existent rule IDs are ignored::
3443
3444   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3445      actions queue index 2 / end
3446   Flow rule #0 created
3447   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3448      actions queue index 3 / end
3449   Flow rule #1 created
3450   testpmd> flow destroy 0 rule 42 rule 10 rule 2
3451   testpmd>
3452   testpmd> flow destroy 0 rule 0
3453   Flow rule #0 destroyed
3454   testpmd>
3455
3456Querying flow rules
3457~~~~~~~~~~~~~~~~~~~
3458
3459``flow query`` queries a specific action of a flow rule having that
3460ability. Such actions collect information that can be reported using this
3461command. It is bound to ``rte_flow_query()``::
3462
3463   flow query {port_id} {rule_id} {action}
3464
3465If successful, it will display either the retrieved data for known actions
3466or the following message::
3467
3468   Cannot display result for action type [...] ([...])
3469
3470Otherwise, it will complain either that the rule does not exist or that some
3471error occurred::
3472
3473   Flow rule #[...] not found
3474
3475::
3476
3477   Caught error type [...] ([...]): [...]
3478
3479Currently only the ``count`` action is supported. This action reports the
3480number of packets that hit the flow rule and the total number of bytes. Its
3481output has the following format::
3482
3483   count:
3484    hits_set: [...] # whether "hits" contains a valid value
3485    bytes_set: [...] # whether "bytes" contains a valid value
3486    hits: [...] # number of packets
3487    bytes: [...] # number of bytes
3488
3489Querying counters for TCPv6 packets redirected to queue 6::
3490
3491   testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
3492      actions queue index 6 / count / end
3493   Flow rule #4 created
3494   testpmd> flow query 0 4 count
3495   count:
3496    hits_set: 1
3497    bytes_set: 0
3498    hits: 386446
3499    bytes: 0
3500   testpmd>
3501
3502Listing flow rules
3503~~~~~~~~~~~~~~~~~~
3504
3505``flow list`` lists existing flow rules sorted by priority and optionally
3506filtered by group identifiers::
3507
3508   flow list {port_id} [group {group_id}] [...]
3509
3510This command only fails with the following message if the device does not
3511exist::
3512
3513   Invalid port [...]
3514
3515Output consists of a header line followed by a short description of each
3516flow rule, one per line. There is no output at all when no flow rules are
3517configured on the device::
3518
3519   ID      Group   Prio    Attr    Rule
3520   [...]   [...]   [...]   [...]   [...]
3521
3522``Attr`` column flags:
3523
3524- ``i`` for ``ingress``.
3525- ``e`` for ``egress``.
3526
3527Creating several flow rules and listing them::
3528
3529   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3530      actions queue index 6 / end
3531   Flow rule #0 created
3532   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3533      actions queue index 2 / end
3534   Flow rule #1 created
3535   testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
3536      actions rss queues 6 7 8 end / end
3537   Flow rule #2 created
3538   testpmd> flow list 0
3539   ID      Group   Prio    Attr    Rule
3540   0       0       0       i-      ETH IPV4 => QUEUE
3541   1       0       0       i-      ETH IPV6 => QUEUE
3542   2       0       5       i-      ETH IPV4 UDP => RSS
3543   testpmd>
3544
3545Rules are sorted by priority (i.e. group ID first, then priority level)::
3546
3547   testpmd> flow list 1
3548   ID      Group   Prio    Attr    Rule
3549   0       0       0       i-      ETH => COUNT
3550   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
3551   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
3552   1       24      0       i-      ETH IPV4 UDP => QUEUE
3553   4       24      10      i-      ETH IPV4 TCP => DROP
3554   3       24      20      i-      ETH IPV4 => DROP
3555   2       24      42      i-      ETH IPV4 UDP => QUEUE
3556   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
3557   testpmd>
3558
3559Output can be limited to specific groups::
3560
3561   testpmd> flow list 1 group 0 group 63
3562   ID      Group   Prio    Attr    Rule
3563   0       0       0       i-      ETH => COUNT
3564   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
3565   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
3566   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
3567   testpmd>
3568
3569Toggling isolated mode
3570~~~~~~~~~~~~~~~~~~~~~~
3571
3572``flow isolate`` can be used to tell the underlying PMD that ingress traffic
3573must only be injected from the defined flow rules; that no default traffic
3574is expected outside those rules and the driver is free to assign more
3575resources to handle them. It is bound to ``rte_flow_isolate()``::
3576
3577 flow isolate {port_id} {boolean}
3578
3579If successful, enabling or disabling isolated mode shows either::
3580
3581 Ingress traffic on port [...]
3582    is now restricted to the defined flow rules
3583
3584Or::
3585
3586 Ingress traffic on port [...]
3587    is not restricted anymore to the defined flow rules
3588
3589Otherwise, in case of error::
3590
3591   Caught error type [...] ([...]): [...]
3592
3593Mainly due to its side effects, PMDs supporting this mode may not have the
3594ability to toggle it more than once without reinitializing affected ports
3595first (e.g. by exiting testpmd).
3596
3597Enabling isolated mode::
3598
3599 testpmd> flow isolate 0 true
3600 Ingress traffic on port 0 is now restricted to the defined flow rules
3601 testpmd>
3602
3603Disabling isolated mode::
3604
3605 testpmd> flow isolate 0 false
3606 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
3607 testpmd>
3608
3609Sample QinQ flow rules
3610~~~~~~~~~~~~~~~~~~~~~~
3611
3612Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
3613
3614   testpmd> port stop 0
3615   testpmd> vlan set qinq on 0
3616
3617The above command sets the inner and outer TPID's to 0x8100.
3618
3619To change the TPID's the following commands should be used::
3620
3621   testpmd> vlan set outer tpid 0xa100 0
3622   testpmd> vlan set inner tpid 0x9100 0
3623   testpmd> port start 0
3624
3625Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
3626
3627::
3628
3629   testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
3630       vlan tci is 456 / end actions vf id 1 / queue index 0 / end
3631   Flow rule #0 validated
3632
3633   testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
3634       vlan tci is 456 / end actions vf id 123 / queue index 0 / end
3635   Flow rule #0 created
3636
3637   testpmd> flow list 0
3638   ID      Group   Prio    Attr    Rule
3639   0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
3640
3641Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
3642
3643::
3644
3645   testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
3646        vlan tci is 654 / end actions pf / queue index 0 / end
3647   Flow rule #1 validated
3648
3649   testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
3650        vlan tci is 654 / end actions pf / queue index 1 / end
3651   Flow rule #1 created
3652
3653   testpmd> flow list 0
3654   ID      Group   Prio    Attr    Rule
3655   0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
3656   1       0       0       i-      ETH VLAN VLAN=>PF QUEUE
3657