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