xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision 6c066bacbf0280b1117b86a5910e3006b02d45bc)
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
2071
2072Traffic Management
2073------------------
2074
2075The following section shows functions for configuring traffic management on
2076on the ethernet device through the use of generic TM API.
2077
2078show port traffic management capability
2079~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2080
2081Show traffic management capability of the port::
2082
2083   testpmd> show port tm cap (port_id)
2084
2085show port traffic management capability (hierarchy level)
2086~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2087
2088Show traffic management hierarchy level capability of the port::
2089
2090   testpmd> show port tm cap (port_id) (level_id)
2091
2092show port traffic management capability (hierarchy node level)
2093~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2094
2095Show the traffic management hierarchy node capability of the port::
2096
2097   testpmd> show port tm cap (port_id) (node_id)
2098
2099show port traffic management hierarchy node type
2100~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2101
2102Show the port traffic management hierarchy node type::
2103
2104   testpmd> show port tm node type (port_id) (node_id)
2105
2106show port traffic management hierarchy node stats
2107~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2108
2109Show the port traffic management hierarchy node statistics::
2110
2111   testpmd> show port tm node stats (port_id) (node_id) (clear)
2112
2113where:
2114
2115* ``clear``: When this parameter has a non-zero value, the statistics counters
2116  are cleared (i.e. set to zero) immediately after they have been read,
2117  otherwise the statistics counters are left untouched.
2118
2119Add port traffic management private shaper profile
2120~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2121
2122Add the port traffic management private shaper profile::
2123
2124   testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2125   (tb_rate) (tb_size) (packet_length_adjust)
2126
2127where:
2128
2129* ``shaper_profile id``: Shaper profile ID for the new profile.
2130* ``tb_rate``: Token bucket rate (bytes per second).
2131* ``tb_size``: Token bucket size (bytes).
2132* ``packet_length_adjust``: The value (bytes) to be added to the length of
2133  each packet for the purpose of shaping. This parameter value can be used to
2134  correct the packet length with the framing overhead bytes that are consumed
2135  on the wire.
2136
2137Delete port traffic management private shaper profile
2138~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2139
2140Delete the port traffic management private shaper::
2141
2142   testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2143
2144where:
2145
2146* ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2147
2148Add port traffic management shared shaper
2149~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2150
2151Create the port traffic management shared shaper::
2152
2153   testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2154   (shaper_profile_id)
2155
2156where:
2157
2158* ``shared_shaper_id``: Shared shaper ID to be created.
2159* ``shaper_profile id``: Shaper profile ID for shared shaper.
2160
2161Set port traffic management shared shaper
2162~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2163
2164Update the port traffic management shared shaper::
2165
2166   testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2167   (shaper_profile_id)
2168
2169where:
2170
2171* ``shared_shaper_id``: Shared shaper ID to be update.
2172* ``shaper_profile id``: Shaper profile ID for shared shaper.
2173
2174Delete port traffic management shared shaper
2175~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2176
2177Delete the port traffic management shared shaper::
2178
2179   testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2180
2181where:
2182
2183* ``shared_shaper_id``: Shared shaper ID to be deleted.
2184
2185Set port traffic management hiearchy node private shaper
2186~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2187
2188set the port traffic management hierarchy node private shaper::
2189
2190   testpmd> set port tm node shaper profile (port_id) (node_id) \
2191   (shaper_profile_id)
2192
2193where:
2194
2195* ``shaper_profile id``: Private shaper profile ID to be enabled on the
2196  hierarchy node.
2197
2198Add port traffic management WRED profile
2199~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2200
2201Create a new WRED profile::
2202
2203   testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2204   (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2205   (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2206   (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2207
2208where:
2209
2210* ``wred_profile id``: Identifier for the newly create WRED profile
2211* ``color_g``: Packet color (green)
2212* ``min_th_g``: Minimum queue threshold for packet with green color
2213* ``max_th_g``: Minimum queue threshold for packet with green color
2214* ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2215* ``wq_log2_g``: Negated log2 of queue weight (wq)
2216* ``color_y``: Packet color (yellow)
2217* ``min_th_y``: Minimum queue threshold for packet with yellow color
2218* ``max_th_y``: Minimum queue threshold for packet with yellow color
2219* ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2220* ``wq_log2_y``: Negated log2 of queue weight (wq)
2221* ``color_r``: Packet color (red)
2222* ``min_th_r``: Minimum queue threshold for packet with yellow color
2223* ``max_th_r``: Minimum queue threshold for packet with yellow color
2224* ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2225* ``wq_log2_r``: Negated log2 of queue weight (wq)
2226
2227Delete port traffic management WRED profile
2228~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2229
2230Delete the WRED profile::
2231
2232   testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2233
2234Add port traffic management hierarchy nonleaf node
2235~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2236
2237Add nonleaf node to port traffic management hiearchy::
2238
2239   testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2240   (priority) (weight) (level_id) (shaper_profile_id) \
2241   (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2242   [(shared_shaper_0) (shared_shaper_1) ...] \
2243
2244where:
2245
2246* ``parent_node_id``: Node ID of the parent.
2247* ``priority``: Node priority (highest node priority is zero). This is used by
2248  the SP algorithm running on the parent node for scheduling this node.
2249* ``weight``: Node weight (lowest weight is one). The node weight is relative
2250  to the weight sum of all siblings that have the same priority. It is used by
2251  the WFQ algorithm running on the parent node for scheduling this node.
2252* ``level_id``: Hiearchy level of the node.
2253* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2254  the node.
2255* ``n_sp_priorities``: Number of strict priorities.
2256* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2257* ``n_shared_shapers``: Number of shared shapers.
2258* ``shared_shaper_id``: Shared shaper id.
2259
2260Add port traffic management hierarchy leaf node
2261~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2262
2263Add leaf node to port traffic management hiearchy::
2264
2265   testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2266   (priority) (weight) (level_id) (shaper_profile_id) \
2267   (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2268   [(shared_shaper_id) (shared_shaper_id) ...] \
2269
2270where:
2271
2272* ``parent_node_id``: Node ID of the parent.
2273* ``priority``: Node priority (highest node priority is zero). This is used by
2274  the SP algorithm running on the parent node for scheduling this node.
2275* ``weight``: Node weight (lowest weight is one). The node weight is relative
2276  to the weight sum of all siblings that have the same priority. It is used by
2277  the WFQ algorithm running on the parent node for scheduling this node.
2278* ``level_id``: Hiearchy level of the node.
2279* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2280  the node.
2281* ``cman_mode``: Congestion management mode to be enabled for this node.
2282* ``wred_profile_id``: WRED profile id to be enabled for this node.
2283* ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2284* ``n_shared_shapers``: Number of shared shapers.
2285* ``shared_shaper_id``: Shared shaper id.
2286
2287Delete port traffic management hierarchy node
2288~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2289
2290Delete node from port traffic management hiearchy::
2291
2292   testpmd> del port tm node (port_id) (node_id)
2293
2294Update port traffic management hierarchy parent node
2295~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2296
2297Update port traffic management hierarchy parent node::
2298
2299   testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
2300   (priority) (weight)
2301
2302This function can only be called after the hierarchy commit invocation. Its
2303success depends on the port support for this operation, as advertised through
2304the port capability set. This function is valid for all nodes of the traffic
2305management hierarchy except root node.
2306
2307Commit port traffic management hierarchy
2308~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2309
2310Commit the traffic management hierarchy on the port::
2311
2312   testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2313
2314where:
2315
2316* ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
2317  call failure. On the other hand, hierarchy is preserved when this parameter
2318  is equal to zero.
2319
2320Set port traffic management default hierarchy (tm forwarding mode)
2321~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2322
2323set the traffic management default hierarchy on the port::
2324
2325   testpmd> set port tm hierarchy default (port_id)
2326
2327Filter Functions
2328----------------
2329
2330This section details the available filter functions that are available.
2331
2332Note these functions interface the deprecated legacy filtering framework,
2333superseded by *rte_flow*. See `Flow rules management`_.
2334
2335ethertype_filter
2336~~~~~~~~~~~~~~~~~~~~
2337
2338Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
2339
2340   ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
2341                    ethertype (ether_type) (drop|fwd) queue (queue_id)
2342
2343The available information parameters are:
2344
2345* ``port_id``: The port which the Ethertype filter assigned on.
2346
2347* ``mac_addr``: Compare destination mac address.
2348
2349* ``mac_ignr``: Ignore destination mac address match.
2350
2351* ``mac_address``: Destination mac address to match.
2352
2353* ``ether_type``: The EtherType value want to match,
2354  for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
2355
2356* ``queue_id``: The receive queue associated with this EtherType filter.
2357  It is meaningless when deleting or dropping.
2358
2359Example, to add/remove an ethertype filter rule::
2360
2361   testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
2362                             ethertype 0x0806 fwd queue 3
2363
2364   testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
2365                             ethertype 0x0806 fwd queue 3
2366
23672tuple_filter
2368~~~~~~~~~~~~~~~~~
2369
2370Add or delete a 2-tuple filter,
2371which identifies packets by specific protocol and destination TCP/UDP port
2372and forwards packets into one of the receive queues::
2373
2374   2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
2375                 protocol (protocol_value) mask (mask_value) \
2376                 tcp_flags (tcp_flags_value) priority (prio_value) \
2377                 queue (queue_id)
2378
2379The available information parameters are:
2380
2381* ``port_id``: The port which the 2-tuple filter assigned on.
2382
2383* ``dst_port_value``: Destination port in L4.
2384
2385* ``protocol_value``: IP L4 protocol.
2386
2387* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
2388
2389* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
2390
2391* ``prio_value``: Priority of this filter.
2392
2393* ``queue_id``: The receive queue associated with this 2-tuple filter.
2394
2395Example, to add/remove an 2tuple filter rule::
2396
2397   testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
2398                          tcp_flags 0x02 priority 3 queue 3
2399
2400   testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
2401                          tcp_flags 0x02 priority 3 queue 3
2402
24035tuple_filter
2404~~~~~~~~~~~~~~~~~
2405
2406Add or delete a 5-tuple filter,
2407which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
2408and routes packets into one of the receive queues::
2409
2410   5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
2411                 (src_address) dst_port (dst_port_value) \
2412                 src_port (src_port_value) protocol (protocol_value) \
2413                 mask (mask_value) tcp_flags (tcp_flags_value) \
2414                 priority (prio_value) queue (queue_id)
2415
2416The available information parameters are:
2417
2418* ``port_id``: The port which the 5-tuple filter assigned on.
2419
2420* ``dst_address``: Destination IP address.
2421
2422* ``src_address``: Source IP address.
2423
2424* ``dst_port_value``: TCP/UDP destination port.
2425
2426* ``src_port_value``: TCP/UDP source port.
2427
2428* ``protocol_value``: L4 protocol.
2429
2430* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
2431
2432* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
2433
2434* ``prio_value``: The priority of this filter.
2435
2436* ``queue_id``: The receive queue associated with this 5-tuple filter.
2437
2438Example, to add/remove an 5tuple filter rule::
2439
2440   testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
2441            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
2442            flags 0x0 priority 3 queue 3
2443
2444   testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
2445            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
2446            flags 0x0 priority 3 queue 3
2447
2448syn_filter
2449~~~~~~~~~~
2450
2451Using the  SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
2452
2453   syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
2454
2455The available information parameters are:
2456
2457* ``port_id``: The port which the SYN filter assigned on.
2458
2459* ``high``: This SYN filter has higher priority than other filters.
2460
2461* ``low``: This SYN filter has lower priority than other filters.
2462
2463* ``queue_id``: The receive queue associated with this SYN filter
2464
2465Example::
2466
2467   testpmd> syn_filter 0 add priority high queue 3
2468
2469flex_filter
2470~~~~~~~~~~~
2471
2472With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
2473and routed into one of the receive queues::
2474
2475   flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
2476               mask (mask_value) priority (prio_value) queue (queue_id)
2477
2478The available information parameters are:
2479
2480* ``port_id``: The port which the Flex filter is assigned on.
2481
2482* ``len_value``: Filter length in bytes, no greater than 128.
2483
2484* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
2485
2486* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
2487
2488* ``prio_value``: The priority of this filter.
2489
2490* ``queue_id``: The receive queue associated with this Flex filter.
2491
2492Example::
2493
2494   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
2495                          mask 000C priority 3 queue 3
2496
2497   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
2498                          mask 000C priority 3 queue 3
2499
2500
2501.. _testpmd_flow_director:
2502
2503flow_director_filter
2504~~~~~~~~~~~~~~~~~~~~
2505
2506The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
2507
2508Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
2509Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
2510
2511* Perfect match filters.
2512  The hardware checks a match between the masked fields of the received packets and the programmed filters.
2513  The masked fields are for IP flow.
2514
2515* Signature filters.
2516  The hardware checks a match between a hash-based signature of the masked fields of the received packet.
2517
2518* Perfect-mac-vlan match filters.
2519  The hardware checks a match between the masked fields of the received packets and the programmed filters.
2520  The masked fields are for MAC VLAN flow.
2521
2522* Perfect-tunnel match filters.
2523  The hardware checks a match between the masked fields of the received packets and the programmed filters.
2524  The masked fields are for tunnel flow.
2525
2526The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
2527per flow type and the flexible payload.
2528
2529The Flow Director can also mask out parts of all of these fields so that filters
2530are only applied to certain fields or parts of the fields.
2531
2532Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
2533
2534# Commands to add flow director filters of different flow types::
2535
2536   flow_director_filter (port_id) mode IP (add|del|update) \
2537                        flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
2538                        src (src_ip_address) dst (dst_ip_address) \
2539                        tos (tos_value) proto (proto_value) ttl (ttl_value) \
2540                        vlan (vlan_value) flexbytes (flexbytes_value) \
2541                        (drop|fwd) pf|vf(vf_id) queue (queue_id) \
2542                        fd_id (fd_id_value)
2543
2544   flow_director_filter (port_id) mode IP (add|del|update) \
2545                        flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
2546                        src (src_ip_address) (src_port) \
2547                        dst (dst_ip_address) (dst_port) \
2548                        tos (tos_value) ttl (ttl_value) \
2549                        vlan (vlan_value) flexbytes (flexbytes_value) \
2550                        (drop|fwd) queue pf|vf(vf_id) (queue_id) \
2551                        fd_id (fd_id_value)
2552
2553   flow_director_filter (port_id) mode IP (add|del|update) \
2554                        flow (ipv4-sctp|ipv6-sctp) \
2555                        src (src_ip_address) (src_port) \
2556                        dst (dst_ip_address) (dst_port) \
2557                        tos (tos_value) ttl (ttl_value) \
2558                        tag (verification_tag) vlan (vlan_value) \
2559                        flexbytes (flexbytes_value) (drop|fwd) \
2560                        pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
2561
2562   flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
2563                        ether (ethertype) flexbytes (flexbytes_value) \
2564                        (drop|fwd) pf|vf(vf_id) queue (queue_id)
2565                        fd_id (fd_id_value)
2566
2567   flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
2568                        mac (mac_address) vlan (vlan_value) \
2569                        flexbytes (flexbytes_value) (drop|fwd) \
2570                        queue (queue_id) fd_id (fd_id_value)
2571
2572   flow_director_filter (port_id) mode Tunnel (add|del|update) \
2573                        mac (mac_address) vlan (vlan_value) \
2574                        tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
2575                        flexbytes (flexbytes_value) (drop|fwd) \
2576                        queue (queue_id) fd_id (fd_id_value)
2577
2578For example, to add an ipv4-udp flow type filter::
2579
2580   testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
2581            dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
2582            fwd pf queue 1 fd_id 1
2583
2584For example, add an ipv4-other flow type filter::
2585
2586   testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
2587             dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
2588             flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
2589
2590flush_flow_director
2591~~~~~~~~~~~~~~~~~~~
2592
2593Flush all flow director filters on a device::
2594
2595   testpmd> flush_flow_director (port_id)
2596
2597Example, to flush all flow director filter on port 0::
2598
2599   testpmd> flush_flow_director 0
2600
2601flow_director_mask
2602~~~~~~~~~~~~~~~~~~
2603
2604Set flow director's input masks::
2605
2606   flow_director_mask (port_id) mode IP vlan (vlan_value) \
2607                      src_mask (ipv4_src) (ipv6_src) (src_port) \
2608                      dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
2609
2610   flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
2611
2612   flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
2613                      mac (mac_value) tunnel-type (tunnel_type_value) \
2614                      tunnel-id (tunnel_id_value)
2615
2616Example, to set flow director mask on port 0::
2617
2618   testpmd> flow_director_mask 0 mode IP vlan 0xefff \
2619            src_mask 255.255.255.255 \
2620                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
2621            dst_mask 255.255.255.255 \
2622                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
2623
2624flow_director_flex_mask
2625~~~~~~~~~~~~~~~~~~~~~~~
2626
2627set masks of flow director's flexible payload based on certain flow type::
2628
2629   testpmd> flow_director_flex_mask (port_id) \
2630            flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2631                  ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
2632                  l2_payload|all) (mask)
2633
2634Example, to set flow director's flex mask for all flow type on port 0::
2635
2636   testpmd> flow_director_flex_mask 0 flow all \
2637            (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
2638
2639
2640flow_director_flex_payload
2641~~~~~~~~~~~~~~~~~~~~~~~~~~
2642
2643Configure flexible payload selection::
2644
2645   flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
2646
2647For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
2648
2649   testpmd> flow_director_flex_payload 0 l4 \
2650            (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
2651
2652get_sym_hash_ena_per_port
2653~~~~~~~~~~~~~~~~~~~~~~~~~
2654
2655Get symmetric hash enable configuration per port::
2656
2657   get_sym_hash_ena_per_port (port_id)
2658
2659For example, to get symmetric hash enable configuration of port 1::
2660
2661   testpmd> get_sym_hash_ena_per_port 1
2662
2663set_sym_hash_ena_per_port
2664~~~~~~~~~~~~~~~~~~~~~~~~~
2665
2666Set symmetric hash enable configuration per port to enable or disable::
2667
2668   set_sym_hash_ena_per_port (port_id) (enable|disable)
2669
2670For example, to set symmetric hash enable configuration of port 1 to enable::
2671
2672   testpmd> set_sym_hash_ena_per_port 1 enable
2673
2674get_hash_global_config
2675~~~~~~~~~~~~~~~~~~~~~~
2676
2677Get the global configurations of hash filters::
2678
2679   get_hash_global_config (port_id)
2680
2681For example, to get the global configurations of hash filters of port 1::
2682
2683   testpmd> get_hash_global_config 1
2684
2685set_hash_global_config
2686~~~~~~~~~~~~~~~~~~~~~~
2687
2688Set the global configurations of hash filters::
2689
2690   set_hash_global_config (port_id) (toeplitz|simple_xor|default) \
2691   (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
2692   ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \
2693   (enable|disable)
2694
2695For example, to enable simple_xor for flow type of ipv6 on port 2::
2696
2697   testpmd> set_hash_global_config 2 simple_xor ipv6 enable
2698
2699set_hash_input_set
2700~~~~~~~~~~~~~~~~~~
2701
2702Set the input set for hash::
2703
2704   set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2705   ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
2706   l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
2707   ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
2708   tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
2709   udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
2710   fld-8th|none) (select|add)
2711
2712For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
2713
2714   testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
2715
2716set_fdir_input_set
2717~~~~~~~~~~~~~~~~~~
2718
2719The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
2720on per flow type and the flexible payload. This command can be used to change input set for each flow type.
2721
2722Set the input set for flow director::
2723
2724   set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2725   ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
2726   l2_payload) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
2727   ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
2728   tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
2729   sctp-dst-port|sctp-veri-tag|none) (select|add)
2730
2731For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
2732
2733   testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
2734
2735global_config
2736~~~~~~~~~~~~~
2737
2738Set different GRE key length for input set::
2739
2740   global_config (port_id) gre-key-len (number in bytes)
2741
2742For example to set GRE key length for input set to 4 bytes on port 0::
2743
2744   testpmd> global_config 0 gre-key-len 4
2745
2746
2747.. _testpmd_rte_flow:
2748
2749Flow rules management
2750---------------------
2751
2752Control of the generic flow API (*rte_flow*) is fully exposed through the
2753``flow`` command (validation, creation, destruction, queries and operation
2754modes).
2755
2756Considering *rte_flow* overlaps with all `Filter Functions`_, using both
2757features simultaneously may cause undefined side-effects and is therefore
2758not recommended.
2759
2760``flow`` syntax
2761~~~~~~~~~~~~~~~
2762
2763Because the ``flow`` command uses dynamic tokens to handle the large number
2764of possible flow rules combinations, its behavior differs slightly from
2765other commands, in particular:
2766
2767- Pressing *?* or the *<tab>* key displays contextual help for the current
2768  token, not that of the entire command.
2769
2770- Optional and repeated parameters are supported (provided they are listed
2771  in the contextual help).
2772
2773The first parameter stands for the operation mode. Possible operations and
2774their general syntax are described below. They are covered in detail in the
2775following sections.
2776
2777- Check whether a flow rule can be created::
2778
2779   flow validate {port_id}
2780       [group {group_id}] [priority {level}] [ingress] [egress]
2781       pattern {item} [/ {item} [...]] / end
2782       actions {action} [/ {action} [...]] / end
2783
2784- Create a flow rule::
2785
2786   flow create {port_id}
2787       [group {group_id}] [priority {level}] [ingress] [egress]
2788       pattern {item} [/ {item} [...]] / end
2789       actions {action} [/ {action} [...]] / end
2790
2791- Destroy specific flow rules::
2792
2793   flow destroy {port_id} rule {rule_id} [...]
2794
2795- Destroy all flow rules::
2796
2797   flow flush {port_id}
2798
2799- Query an existing flow rule::
2800
2801   flow query {port_id} {rule_id} {action}
2802
2803- List existing flow rules sorted by priority, filtered by group
2804  identifiers::
2805
2806   flow list {port_id} [group {group_id}] [...]
2807
2808- Restrict ingress traffic to the defined flow rules::
2809
2810   flow isolate {port_id} {boolean}
2811
2812Validating flow rules
2813~~~~~~~~~~~~~~~~~~~~~
2814
2815``flow validate`` reports whether a flow rule would be accepted by the
2816underlying device in its current state but stops short of creating it. It is
2817bound to ``rte_flow_validate()``::
2818
2819   flow validate {port_id}
2820      [group {group_id}] [priority {level}] [ingress] [egress]
2821      pattern {item} [/ {item} [...]] / end
2822      actions {action} [/ {action} [...]] / end
2823
2824If successful, it will show::
2825
2826   Flow rule validated
2827
2828Otherwise it will show an error message of the form::
2829
2830   Caught error type [...] ([...]): [...]
2831
2832This command uses the same parameters as ``flow create``, their format is
2833described in `Creating flow rules`_.
2834
2835Check whether redirecting any Ethernet packet received on port 0 to RX queue
2836index 6 is supported::
2837
2838   testpmd> flow validate 0 ingress pattern eth / end
2839      actions queue index 6 / end
2840   Flow rule validated
2841   testpmd>
2842
2843Port 0 does not support TCPv6 rules::
2844
2845   testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
2846      actions drop / end
2847   Caught error type 9 (specific pattern item): Invalid argument
2848   testpmd>
2849
2850Creating flow rules
2851~~~~~~~~~~~~~~~~~~~
2852
2853``flow create`` validates and creates the specified flow rule. It is bound
2854to ``rte_flow_create()``::
2855
2856   flow create {port_id}
2857      [group {group_id}] [priority {level}] [ingress] [egress]
2858      pattern {item} [/ {item} [...]] / end
2859      actions {action} [/ {action} [...]] / end
2860
2861If successful, it will return a flow rule ID usable with other commands::
2862
2863   Flow rule #[...] created
2864
2865Otherwise it will show an error message of the form::
2866
2867   Caught error type [...] ([...]): [...]
2868
2869Parameters describe in the following order:
2870
2871- Attributes (*group*, *priority*, *ingress*, *egress* tokens).
2872- A matching pattern, starting with the *pattern* token and terminated by an
2873  *end* pattern item.
2874- Actions, starting with the *actions* token and terminated by an *end*
2875  action.
2876
2877These translate directly to *rte_flow* objects provided as-is to the
2878underlying functions.
2879
2880The shortest valid definition only comprises mandatory tokens::
2881
2882   testpmd> flow create 0 pattern end actions end
2883
2884Note that PMDs may refuse rules that essentially do nothing such as this
2885one.
2886
2887**All unspecified object values are automatically initialized to 0.**
2888
2889Attributes
2890^^^^^^^^^^
2891
2892These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
2893specified before the ``pattern`` token.
2894
2895- ``group {group id}``: priority group.
2896- ``priority {level}``: priority level within group.
2897- ``ingress``: rule applies to ingress traffic.
2898- ``egress``: rule applies to egress traffic.
2899
2900Each instance of an attribute specified several times overrides the previous
2901value as shown below (group 4 is used)::
2902
2903   testpmd> flow create 0 group 42 group 24 group 4 [...]
2904
2905Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
2906
2907While not specifying a direction is an error, some rules may allow both
2908simultaneously.
2909
2910Most rules affect RX therefore contain the ``ingress`` token::
2911
2912   testpmd> flow create 0 ingress pattern [...]
2913
2914Matching pattern
2915^^^^^^^^^^^^^^^^
2916
2917A matching pattern starts after the ``pattern`` token. It is made of pattern
2918items and is terminated by a mandatory ``end`` item.
2919
2920Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
2921rte_flow_item_type``).
2922
2923The ``/`` token is used as a separator between pattern items as shown
2924below::
2925
2926   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
2927
2928Note that protocol items like these must be stacked from lowest to highest
2929layer to make sense. For instance, the following rule is either invalid or
2930unlikely to match any packet::
2931
2932   testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
2933
2934More information on these restrictions can be found in the *rte_flow*
2935documentation.
2936
2937Several items support additional specification structures, for example
2938``ipv4`` allows specifying source and destination addresses as follows::
2939
2940   testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
2941      dst is 10.2.0.0 / end [...]
2942
2943This rule matches all IPv4 traffic with the specified properties.
2944
2945In this example, ``src`` and ``dst`` are field names of the underlying
2946``struct rte_flow_item_ipv4`` object. All item properties can be specified
2947in a similar fashion.
2948
2949The ``is`` token means that the subsequent value must be matched exactly,
2950and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
2951accordingly. Possible assignment tokens are:
2952
2953- ``is``: match value perfectly (with full bit-mask).
2954- ``spec``: match value according to configured bit-mask.
2955- ``last``: specify upper bound to establish a range.
2956- ``mask``: specify bit-mask with relevant bits set to one.
2957- ``prefix``: generate bit-mask from a prefix length.
2958
2959These yield identical results::
2960
2961   ipv4 src is 10.1.1.1
2962
2963::
2964
2965   ipv4 src spec 10.1.1.1 src mask 255.255.255.255
2966
2967::
2968
2969   ipv4 src spec 10.1.1.1 src prefix 32
2970
2971::
2972
2973   ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
2974
2975::
2976
2977   ipv4 src is 10.1.1.1 src last 0 # 0 disables range
2978
2979Inclusive ranges can be defined with ``last``::
2980
2981   ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
2982
2983Note that ``mask`` affects both ``spec`` and ``last``::
2984
2985   ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
2986      # matches 10.1.0.0 to 10.2.255.255
2987
2988Properties can be modified multiple times::
2989
2990   ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
2991
2992::
2993
2994   ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
2995
2996Pattern items
2997^^^^^^^^^^^^^
2998
2999This section lists supported pattern items and their attributes, if any.
3000
3001- ``end``: end list of pattern items.
3002
3003- ``void``: no-op pattern item.
3004
3005- ``invert``: perform actions when pattern does not match.
3006
3007- ``any``: match any protocol for the current layer.
3008
3009  - ``num {unsigned}``: number of layers covered.
3010
3011- ``pf``: match packets addressed to the physical function.
3012
3013- ``vf``: match packets addressed to a virtual function ID.
3014
3015  - ``id {unsigned}``: destination VF ID.
3016
3017- ``port``: device-specific physical port index to use.
3018
3019  - ``index {unsigned}``: physical port index.
3020
3021- ``raw``: match an arbitrary byte string.
3022
3023  - ``relative {boolean}``: look for pattern after the previous item.
3024  - ``search {boolean}``: search pattern from offset (see also limit).
3025  - ``offset {integer}``: absolute or relative offset for pattern.
3026  - ``limit {unsigned}``: search area limit for start of pattern.
3027  - ``pattern {string}``: byte string to look for.
3028
3029- ``eth``: match Ethernet header.
3030
3031  - ``dst {MAC-48}``: destination MAC.
3032  - ``src {MAC-48}``: source MAC.
3033  - ``type {unsigned}``: EtherType.
3034
3035- ``vlan``: match 802.1Q/ad VLAN tag.
3036
3037  - ``tpid {unsigned}``: tag protocol identifier.
3038  - ``tci {unsigned}``: tag control information.
3039  - ``pcp {unsigned}``: priority code point.
3040  - ``dei {unsigned}``: drop eligible indicator.
3041  - ``vid {unsigned}``: VLAN identifier.
3042
3043- ``ipv4``: match IPv4 header.
3044
3045  - ``tos {unsigned}``: type of service.
3046  - ``ttl {unsigned}``: time to live.
3047  - ``proto {unsigned}``: next protocol ID.
3048  - ``src {ipv4 address}``: source address.
3049  - ``dst {ipv4 address}``: destination address.
3050
3051- ``ipv6``: match IPv6 header.
3052
3053  - ``tc {unsigned}``: traffic class.
3054  - ``flow {unsigned}``: flow label.
3055  - ``proto {unsigned}``: protocol (next header).
3056  - ``hop {unsigned}``: hop limit.
3057  - ``src {ipv6 address}``: source address.
3058  - ``dst {ipv6 address}``: destination address.
3059
3060- ``icmp``: match ICMP header.
3061
3062  - ``type {unsigned}``: ICMP packet type.
3063  - ``code {unsigned}``: ICMP packet code.
3064
3065- ``udp``: match UDP header.
3066
3067  - ``src {unsigned}``: UDP source port.
3068  - ``dst {unsigned}``: UDP destination port.
3069
3070- ``tcp``: match TCP header.
3071
3072  - ``src {unsigned}``: TCP source port.
3073  - ``dst {unsigned}``: TCP destination port.
3074
3075- ``sctp``: match SCTP header.
3076
3077  - ``src {unsigned}``: SCTP source port.
3078  - ``dst {unsigned}``: SCTP destination port.
3079  - ``tag {unsigned}``: validation tag.
3080  - ``cksum {unsigned}``: checksum.
3081
3082- ``vxlan``: match VXLAN header.
3083
3084  - ``vni {unsigned}``: VXLAN identifier.
3085
3086- ``e_tag``: match IEEE 802.1BR E-Tag header.
3087
3088  - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3089
3090- ``nvgre``: match NVGRE header.
3091
3092  - ``tni {unsigned}``: virtual subnet ID.
3093
3094- ``mpls``: match MPLS header.
3095
3096  - ``label {unsigned}``: MPLS label.
3097
3098- ``gre``: match GRE header.
3099
3100  - ``protocol {unsigned}``: protocol type.
3101
3102- ``fuzzy``: fuzzy pattern match, expect faster than default.
3103
3104  - ``thresh {unsigned}``: accuracy threshold.
3105
3106- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3107
3108  - ``teid {unsigned}``: tunnel endpoint identifier.
3109
3110Actions list
3111^^^^^^^^^^^^
3112
3113A list of actions starts after the ``actions`` token in the same fashion as
3114`Matching pattern`_; actions are separated by ``/`` tokens and the list is
3115terminated by a mandatory ``end`` action.
3116
3117Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3118rte_flow_action_type``).
3119
3120Dropping all incoming UDPv4 packets can be expressed as follows::
3121
3122   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3123      actions drop / end
3124
3125Several actions have configurable properties which must be specified when
3126there is no valid default value. For example, ``queue`` requires a target
3127queue index.
3128
3129This rule redirects incoming UDPv4 traffic to queue index 6::
3130
3131   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3132      actions queue index 6 / end
3133
3134While this one could be rejected by PMDs (unspecified queue index)::
3135
3136   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3137      actions queue / end
3138
3139As defined by *rte_flow*, the list is not ordered, all actions of a given
3140rule are performed simultaneously. These are equivalent::
3141
3142   queue index 6 / void / mark id 42 / end
3143
3144::
3145
3146   void / mark id 42 / queue index 6 / end
3147
3148All actions in a list should have different types, otherwise only the last
3149action of a given type is taken into account::
3150
3151   queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
3152
3153::
3154
3155   drop / drop / drop / end # drop is performed only once
3156
3157::
3158
3159   mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
3160
3161Considering they are performed simultaneously, opposite and overlapping
3162actions can sometimes be combined when the end result is unambiguous::
3163
3164   drop / queue index 6 / end # drop has no effect
3165
3166::
3167
3168   drop / dup index 6 / end # same as above
3169
3170::
3171
3172   queue index 6 / rss queues 6 7 8 / end # queue has no effect
3173
3174::
3175
3176   drop / passthru / end # drop has no effect
3177
3178Note that PMDs may still refuse such combinations.
3179
3180Actions
3181^^^^^^^
3182
3183This section lists supported actions and their attributes, if any.
3184
3185- ``end``: end list of actions.
3186
3187- ``void``: no-op action.
3188
3189- ``passthru``: let subsequent rule process matched packets.
3190
3191- ``mark``: attach 32 bit value to packets.
3192
3193  - ``id {unsigned}``: 32 bit value to return with packets.
3194
3195- ``flag``: flag packets.
3196
3197- ``queue``: assign packets to a given queue index.
3198
3199  - ``index {unsigned}``: queue index to use.
3200
3201- ``drop``: drop packets (note: passthru has priority).
3202
3203- ``count``: enable counters for this rule.
3204
3205- ``dup``: duplicate packets to a given queue index.
3206
3207  - ``index {unsigned}``: queue index to duplicate packets to.
3208
3209- ``rss``: spread packets among several queues.
3210
3211  - ``queues [{unsigned} [...]] end``: queue indices to use.
3212
3213- ``pf``: redirect packets to physical device function.
3214
3215- ``vf``: redirect packets to virtual device function.
3216
3217  - ``original {boolean}``: use original VF ID if possible.
3218  - ``id {unsigned}``: VF ID to redirect packets to.
3219
3220Destroying flow rules
3221~~~~~~~~~~~~~~~~~~~~~
3222
3223``flow destroy`` destroys one or more rules from their rule ID (as returned
3224by ``flow create``), this command calls ``rte_flow_destroy()`` as many
3225times as necessary::
3226
3227   flow destroy {port_id} rule {rule_id} [...]
3228
3229If successful, it will show::
3230
3231   Flow rule #[...] destroyed
3232
3233It does not report anything for rule IDs that do not exist. The usual error
3234message is shown when a rule cannot be destroyed::
3235
3236   Caught error type [...] ([...]): [...]
3237
3238``flow flush`` destroys all rules on a device and does not take extra
3239arguments. It is bound to ``rte_flow_flush()``::
3240
3241   flow flush {port_id}
3242
3243Any errors are reported as above.
3244
3245Creating several rules and destroying them::
3246
3247   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3248      actions queue index 2 / end
3249   Flow rule #0 created
3250   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3251      actions queue index 3 / end
3252   Flow rule #1 created
3253   testpmd> flow destroy 0 rule 0 rule 1
3254   Flow rule #1 destroyed
3255   Flow rule #0 destroyed
3256   testpmd>
3257
3258The same result can be achieved using ``flow flush``::
3259
3260   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3261      actions queue index 2 / end
3262   Flow rule #0 created
3263   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3264      actions queue index 3 / end
3265   Flow rule #1 created
3266   testpmd> flow flush 0
3267   testpmd>
3268
3269Non-existent rule IDs are ignored::
3270
3271   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3272      actions queue index 2 / end
3273   Flow rule #0 created
3274   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3275      actions queue index 3 / end
3276   Flow rule #1 created
3277   testpmd> flow destroy 0 rule 42 rule 10 rule 2
3278   testpmd>
3279   testpmd> flow destroy 0 rule 0
3280   Flow rule #0 destroyed
3281   testpmd>
3282
3283Querying flow rules
3284~~~~~~~~~~~~~~~~~~~
3285
3286``flow query`` queries a specific action of a flow rule having that
3287ability. Such actions collect information that can be reported using this
3288command. It is bound to ``rte_flow_query()``::
3289
3290   flow query {port_id} {rule_id} {action}
3291
3292If successful, it will display either the retrieved data for known actions
3293or the following message::
3294
3295   Cannot display result for action type [...] ([...])
3296
3297Otherwise, it will complain either that the rule does not exist or that some
3298error occurred::
3299
3300   Flow rule #[...] not found
3301
3302::
3303
3304   Caught error type [...] ([...]): [...]
3305
3306Currently only the ``count`` action is supported. This action reports the
3307number of packets that hit the flow rule and the total number of bytes. Its
3308output has the following format::
3309
3310   count:
3311    hits_set: [...] # whether "hits" contains a valid value
3312    bytes_set: [...] # whether "bytes" contains a valid value
3313    hits: [...] # number of packets
3314    bytes: [...] # number of bytes
3315
3316Querying counters for TCPv6 packets redirected to queue 6::
3317
3318   testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
3319      actions queue index 6 / count / end
3320   Flow rule #4 created
3321   testpmd> flow query 0 4 count
3322   count:
3323    hits_set: 1
3324    bytes_set: 0
3325    hits: 386446
3326    bytes: 0
3327   testpmd>
3328
3329Listing flow rules
3330~~~~~~~~~~~~~~~~~~
3331
3332``flow list`` lists existing flow rules sorted by priority and optionally
3333filtered by group identifiers::
3334
3335   flow list {port_id} [group {group_id}] [...]
3336
3337This command only fails with the following message if the device does not
3338exist::
3339
3340   Invalid port [...]
3341
3342Output consists of a header line followed by a short description of each
3343flow rule, one per line. There is no output at all when no flow rules are
3344configured on the device::
3345
3346   ID      Group   Prio    Attr    Rule
3347   [...]   [...]   [...]   [...]   [...]
3348
3349``Attr`` column flags:
3350
3351- ``i`` for ``ingress``.
3352- ``e`` for ``egress``.
3353
3354Creating several flow rules and listing them::
3355
3356   testpmd> flow create 0 ingress pattern eth / ipv4 / end
3357      actions queue index 6 / end
3358   Flow rule #0 created
3359   testpmd> flow create 0 ingress pattern eth / ipv6 / end
3360      actions queue index 2 / end
3361   Flow rule #1 created
3362   testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
3363      actions rss queues 6 7 8 end / end
3364   Flow rule #2 created
3365   testpmd> flow list 0
3366   ID      Group   Prio    Attr    Rule
3367   0       0       0       i-      ETH IPV4 => QUEUE
3368   1       0       0       i-      ETH IPV6 => QUEUE
3369   2       0       5       i-      ETH IPV4 UDP => RSS
3370   testpmd>
3371
3372Rules are sorted by priority (i.e. group ID first, then priority level)::
3373
3374   testpmd> flow list 1
3375   ID      Group   Prio    Attr    Rule
3376   0       0       0       i-      ETH => COUNT
3377   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
3378   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
3379   1       24      0       i-      ETH IPV4 UDP => QUEUE
3380   4       24      10      i-      ETH IPV4 TCP => DROP
3381   3       24      20      i-      ETH IPV4 => DROP
3382   2       24      42      i-      ETH IPV4 UDP => QUEUE
3383   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
3384   testpmd>
3385
3386Output can be limited to specific groups::
3387
3388   testpmd> flow list 1 group 0 group 63
3389   ID      Group   Prio    Attr    Rule
3390   0       0       0       i-      ETH => COUNT
3391   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
3392   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
3393   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
3394   testpmd>
3395
3396Toggling isolated mode
3397~~~~~~~~~~~~~~~~~~~~~~
3398
3399``flow isolate`` can be used to tell the underlying PMD that ingress traffic
3400must only be injected from the defined flow rules; that no default traffic
3401is expected outside those rules and the driver is free to assign more
3402resources to handle them. It is bound to ``rte_flow_isolate()``::
3403
3404 flow isolate {port_id} {boolean}
3405
3406If successful, enabling or disabling isolated mode shows either::
3407
3408 Ingress traffic on port [...]
3409    is now restricted to the defined flow rules
3410
3411Or::
3412
3413 Ingress traffic on port [...]
3414    is not restricted anymore to the defined flow rules
3415
3416Otherwise, in case of error::
3417
3418   Caught error type [...] ([...]): [...]
3419
3420Mainly due to its side effects, PMDs supporting this mode may not have the
3421ability to toggle it more than once without reinitializing affected ports
3422first (e.g. by exiting testpmd).
3423
3424Enabling isolated mode::
3425
3426 testpmd> flow isolate 0 true
3427 Ingress traffic on port 0 is now restricted to the defined flow rules
3428 testpmd>
3429
3430Disabling isolated mode::
3431
3432 testpmd> flow isolate 0 false
3433 Ingress traffic on port 0 is not restricted anymore to the defined flow rules
3434 testpmd>
3435
3436Sample QinQ flow rules
3437~~~~~~~~~~~~~~~~~~~~~~
3438
3439Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
3440
3441   testpmd> port stop 0
3442   testpmd> vlan set qinq on 0
3443
3444The above command sets the inner and outer TPID's to 0x8100.
3445
3446To change the TPID's the following commands should be used::
3447
3448   testpmd> vlan set outer tpid 0xa100 0
3449   testpmd> vlan set inner tpid 0x9100 0
3450   testpmd> port start 0
3451
3452Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
3453
3454::
3455
3456   testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
3457       vlan tci is 456 / end actions vf id 1 / queue index 0 / end
3458   Flow rule #0 validated
3459
3460   testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
3461       vlan tci is 456 / end actions vf id 123 / queue index 0 / end
3462   Flow rule #0 created
3463
3464   testpmd> flow list 0
3465   ID      Group   Prio    Attr    Rule
3466   0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
3467
3468Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
3469
3470::
3471
3472   testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
3473        vlan tci is 654 / end actions pf / queue index 0 / end
3474   Flow rule #1 validated
3475
3476   testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
3477        vlan tci is 654 / end actions pf / queue index 1 / end
3478   Flow rule #1 created
3479
3480   testpmd> flow list 0
3481   ID      Group   Prio    Attr    Rule
3482   0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
3483   1       0       0       i-      ETH VLAN VLAN=>PF QUEUE
3484