xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision 52d6beb9d2ba2353391db122345ba6ebdb340dd3)
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
89Control Functions
90-----------------
91
92start
93~~~~~
94
95Start packet forwarding with current configuration::
96
97   testpmd> start
98
99start tx_first
100~~~~~~~~~~~~~~
101
102Start packet forwarding with current configuration after sending specified number of bursts of packets::
103
104   testpmd> start tx_first (""|burst_num)
105
106The default burst number is 1 when ``burst_num`` not presented.
107
108stop
109~~~~
110
111Stop packet forwarding, and display accumulated statistics::
112
113   testpmd> stop
114
115quit
116~~~~
117
118Quit to prompt::
119
120   testpmd> quit
121
122
123Display Functions
124-----------------
125
126The functions in the following sections are used to display information about the
127testpmd configuration or the NIC status.
128
129show port
130~~~~~~~~~
131
132Display information for a given port or all ports::
133
134   testpmd> show port (info|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)
135
136The available information categories are:
137
138* ``info``: General port information such as MAC address.
139
140* ``stats``: RX/TX statistics.
141
142* ``xstats``: RX/TX extended NIC statistics.
143
144* ``fdir``: Flow Director information and statistics.
145
146* ``stat_qmap``: Queue statistics mapping.
147
148* ``dcb_tc``: DCB information such as TC mapping.
149
150* ``cap``: Supported offload capabilities.
151
152For example:
153
154.. code-block:: console
155
156   testpmd> show port info 0
157
158   ********************* Infos for port 0 *********************
159
160   MAC address: XX:XX:XX:XX:XX:XX
161   Connect to socket: 0
162   memory allocation on the socket: 0
163   Link status: up
164   Link speed: 40000 Mbps
165   Link duplex: full-duplex
166   Promiscuous mode: enabled
167   Allmulticast mode: disabled
168   Maximum number of MAC addresses: 64
169   Maximum number of MAC addresses of hash filtering: 0
170   VLAN offload:
171       strip on
172       filter on
173       qinq(extend) off
174   Redirection table size: 512
175   Supported flow types:
176     ipv4-frag
177     ipv4-tcp
178     ipv4-udp
179     ipv4-sctp
180     ipv4-other
181     ipv6-frag
182     ipv6-tcp
183     ipv6-udp
184     ipv6-sctp
185     ipv6-other
186     l2_payload
187     port
188     vxlan
189     geneve
190     nvgre
191
192show port rss reta
193~~~~~~~~~~~~~~~~~~
194
195Display the rss redirection table entry indicated by masks on port X::
196
197   testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
198
199size is used to indicate the hardware supported reta size
200
201show port rss-hash
202~~~~~~~~~~~~~~~~~~
203
204Display the RSS hash functions and RSS hash key of a port::
205
206   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]
207
208clear port
209~~~~~~~~~~
210
211Clear the port statistics for a given port or for all ports::
212
213   testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
214
215For example::
216
217   testpmd> clear port stats all
218
219show (rxq|txq)
220~~~~~~~~~~~~~~
221
222Display information for a given port's RX/TX queue::
223
224   testpmd> show (rxq|txq) info (port_id) (queue_id)
225
226show config
227~~~~~~~~~~~
228
229Displays the configuration of the application.
230The configuration comes from the command-line, the runtime or the application defaults::
231
232   testpmd> show config (rxtx|cores|fwd|txpkts)
233
234The available information categories are:
235
236* ``rxtx``: RX/TX configuration items.
237
238* ``cores``: List of forwarding cores.
239
240* ``fwd``: Packet forwarding configuration.
241
242* ``txpkts``: Packets to TX configuration.
243
244For example:
245
246.. code-block:: console
247
248   testpmd> show config rxtx
249
250   io packet forwarding - CRC stripping disabled - packets/burst=16
251   nb forwarding cores=2 - nb forwarding ports=1
252   RX queues=1 - RX desc=128 - RX free threshold=0
253   RX threshold registers: pthresh=8 hthresh=8 wthresh=4
254   TX queues=1 - TX desc=512 - TX free threshold=0
255   TX threshold registers: pthresh=36 hthresh=0 wthresh=0
256   TX RS bit threshold=0 - TXQ flags=0x0
257
258set fwd
259~~~~~~~
260
261Set the packet forwarding mode::
262
263   testpmd> set fwd (io|mac|macswap|flowgen| \
264                     rxonly|txonly|csum|icmpecho) (""|retry)
265
266``retry`` can be specified for forwarding engines except ``rx_only``.
267
268The available information categories are:
269
270* ``io``: Forwards packets "as-is" in I/O mode.
271  This is the fastest possible forwarding operation as it does not access packets data.
272  This is the default mode.
273
274* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
275  Default application behaviour is to set source Ethernet address to that of the transmitting interface, and destination
276  address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
277  'eth-peer-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
278
279* ``macswap``: MAC swap forwarding mode.
280  Swaps the source and the destination Ethernet addresses of packets before forwarding them.
281
282* ``flowgen``: Multi-flow generation mode.
283  Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
284
285* ``rxonly``: Receives packets but doesn't transmit them.
286
287* ``txonly``: Generates and transmits packets without receiving any.
288
289* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
290
291* ``icmpecho``: Receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies.
292
293* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
294
295Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``.
296
297Example::
298
299   testpmd> set fwd rxonly
300
301   Set rxonly packet forwarding mode
302
303
304read rxd
305~~~~~~~~
306
307Display an RX descriptor for a port RX queue::
308
309   testpmd> read rxd (port_id) (queue_id) (rxd_id)
310
311For example::
312
313   testpmd> read rxd 0 0 4
314        0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
315
316read txd
317~~~~~~~~
318
319Display a TX descriptor for a port TX queue::
320
321   testpmd> read txd (port_id) (queue_id) (txd_id)
322
323For example::
324
325   testpmd> read txd 0 0 4
326        0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
327
328
329Configuration Functions
330-----------------------
331
332The testpmd application can be configured from the runtime as well as from the command-line.
333
334This section details the available configuration functions that are available.
335
336.. note::
337
338   Configuration changes only become active when forwarding is started/restarted.
339
340set default
341~~~~~~~~~~~
342
343Reset forwarding to the default configuration::
344
345   testpmd> set default
346
347set verbose
348~~~~~~~~~~~
349
350Set the debug verbosity level::
351
352   testpmd> set verbose (level)
353
354Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
355
356set nbport
357~~~~~~~~~~
358
359Set the number of ports used by the application:
360
361set nbport (num)
362
363This is equivalent to the ``--nb-ports`` command-line option.
364
365set nbcore
366~~~~~~~~~~
367
368Set the number of cores used by the application::
369
370   testpmd> set nbcore (num)
371
372This is equivalent to the ``--nb-cores`` command-line option.
373
374.. note::
375
376   The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
377
378set coremask
379~~~~~~~~~~~~
380
381Set the forwarding cores hexadecimal mask::
382
383   testpmd> set coremask (mask)
384
385This is equivalent to the ``--coremask`` command-line option.
386
387.. note::
388
389   The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
390
391set portmask
392~~~~~~~~~~~~
393
394Set the forwarding ports hexadecimal mask::
395
396   testpmd> set portmask (mask)
397
398This is equivalent to the ``--portmask`` command-line option.
399
400set burst
401~~~~~~~~~
402
403Set number of packets per burst::
404
405   testpmd> set burst (num)
406
407This is equivalent to the ``--burst command-line`` option.
408
409When retry is enabled, the transmit delay time and number of retries can also be set::
410
411   testpmd> set burst tx delay (microseconds) retry (num)
412
413set txpkts
414~~~~~~~~~~
415
416Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
417
418   testpmd> set txpkts (x[,y]*)
419
420Where x[,y]* represents a CSV list of values, without white space.
421
422set txsplit
423~~~~~~~~~~~
424
425Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
426
427   testpmd> set txsplit (off|on|rand)
428
429Where:
430
431* ``off`` disable packet copy & split for CSUM mode.
432
433* ``on`` split outgoing packet into multiple segments. Size of each segment
434  and number of segments per packet is determined by ``set txpkts`` command
435  (see above).
436
437* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
438
439set corelist
440~~~~~~~~~~~~
441
442Set the list of forwarding cores::
443
444   testpmd> set corelist (x[,y]*)
445
446For example, to change the forwarding cores:
447
448.. code-block:: console
449
450   testpmd> set corelist 3,1
451   testpmd> show config fwd
452
453   io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
454   Logical Core 3 (socket 0) forwards packets on 1 streams:
455   RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
456   Logical Core 1 (socket 0) forwards packets on 1 streams:
457   RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
458
459.. note::
460
461   The cores are used in the same order as specified on the command line.
462
463set portlist
464~~~~~~~~~~~~
465
466Set the list of forwarding ports::
467
468   testpmd> set portlist (x[,y]*)
469
470For example, to change the port forwarding:
471
472.. code-block:: console
473
474   testpmd> set portlist 0,2,1,3
475   testpmd> show config fwd
476
477   io packet forwarding - ports=4 - cores=1 - streams=4
478   Logical Core 3 (socket 0) forwards packets on 4 streams:
479   RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
480   RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
481   RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
482   RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
483
484set tx loopback
485~~~~~~~~~~~~~~~
486
487Enable/disable tx loopback::
488
489   testpmd> set tx loopback (port_id) (on|off)
490
491set drop enable
492~~~~~~~~~~~~~~~
493
494set drop enable bit for all queues::
495
496   testpmd> set all queues drop (port_id) (on|off)
497
498set split drop enable (for VF)
499~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
500
501set split drop enable bit for VF from PF::
502
503   testpmd> set vf split drop (port_id) (vf_id) (on|off)
504
505set mac antispoof (for VF)
506~~~~~~~~~~~~~~~~~~~~~~~~~~
507
508Set mac antispoof for a VF from the PF::
509
510   testpmd> set vf mac antispoof  (port_id) (vf_id) (on|off)
511
512set macsec offload
513~~~~~~~~~~~~~~~~~~
514
515Enable/disable MACsec offload::
516
517   testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
518   testpmd> set macsec offload (port_id) off
519
520set macsec sc
521~~~~~~~~~~~~~
522
523Configure MACsec secure connection (SC)::
524
525   testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
526
527.. note::
528
529   The pi argument is ignored for tx.
530   Check the NIC Datasheet for hardware limits.
531
532set macsec sa
533~~~~~~~~~~~~~
534
535Configure MACsec secure association (SA)::
536
537   testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
538
539.. note::
540
541   The IDX value must be 0 or 1.
542   Check the NIC Datasheet for hardware limits.
543
544set broadcast mode (for VF)
545~~~~~~~~~~~~~~~~~~~~~~~~~~~
546
547Set broadcast mode for a VF from the PF::
548
549   testpmd> set vf broadcast (port_id) (vf_id) (on|off)
550
551vlan set strip
552~~~~~~~~~~~~~~
553
554Set the VLAN strip on a port::
555
556   testpmd> vlan set strip (on|off) (port_id)
557
558vlan set stripq
559~~~~~~~~~~~~~~~
560
561Set the VLAN strip for a queue on a port::
562
563   testpmd> vlan set stripq (on|off) (port_id,queue_id)
564
565vlan set stripq (for VF)
566~~~~~~~~~~~~~~~~~~~~~~~~
567
568Set VLAN strip for all queues in a pool for a VF from the PF::
569
570   testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
571
572vlan set insert (for VF)
573~~~~~~~~~~~~~~~~~~~~~~~~
574
575Set VLAN insert for a VF from the PF::
576
577   testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
578
579vlan set tag (for VF)
580~~~~~~~~~~~~~~~~~~~~~
581
582Set VLAN tag for a VF from the PF::
583
584   testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
585
586vlan set antispoof (for VF)
587~~~~~~~~~~~~~~~~~~~~~~~~~~~
588
589Set VLAN antispoof for a VF from the PF::
590
591   testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
592
593vlan set filter
594~~~~~~~~~~~~~~~
595
596Set the VLAN filter on a port::
597
598   testpmd> vlan set filter (on|off) (port_id)
599
600vlan set qinq
601~~~~~~~~~~~~~
602
603Set the VLAN QinQ (extended queue in queue) on for a port::
604
605   testpmd> vlan set qinq (on|off) (port_id)
606
607vlan set tpid
608~~~~~~~~~~~~~
609
610Set the inner or outer VLAN TPID for packet filtering on a port::
611
612   testpmd> vlan set (inner|outer) tpid (value) (port_id)
613
614.. note::
615
616   TPID value must be a 16-bit number (value <= 65536).
617
618rx_vlan add
619~~~~~~~~~~~
620
621Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
622
623   testpmd> rx_vlan add (vlan_id|all) (port_id)
624
625.. note::
626
627   VLAN filter must be set on that port. VLAN ID < 4096.
628   Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
629   in VFTA table. This is important if enabling all vlan_ids.
630
631rx_vlan rm
632~~~~~~~~~~
633
634Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
635
636   testpmd> rx_vlan rm (vlan_id|all) (port_id)
637
638rx_vlan add (for VF)
639~~~~~~~~~~~~~~~~~~~~
640
641Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
642
643   testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
644
645rx_vlan rm (for VF)
646~~~~~~~~~~~~~~~~~~~
647
648Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
649
650   testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
651
652tunnel_filter add
653~~~~~~~~~~~~~~~~~
654
655Add a tunnel filter on a port::
656
657   testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
658            (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
659            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
660
661The available information categories are:
662
663* ``vxlan``: Set tunnel type as VXLAN.
664
665* ``nvgre``: Set tunnel type as NVGRE.
666
667* ``ipingre``: Set tunnel type as IP-in-GRE.
668
669* ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
670
671* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
672
673* ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
674
675* ``imac``: Set filter type as Inner MAC.
676
677* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
678
679* ``oip``: Set filter type as Outer IP.
680
681* ``iip``: Set filter type as Inner IP.
682
683Example::
684
685   testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
686            192.168.2.2 0 ipingre oip 1 1
687
688   Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
689
690tunnel_filter remove
691~~~~~~~~~~~~~~~~~~~~
692
693Remove a tunnel filter on a port::
694
695   testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
696            (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
697            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
698
699rx_vxlan_port add
700~~~~~~~~~~~~~~~~~
701
702Add an UDP port for VXLAN packet filter on a port::
703
704   testpmd> rx_vxlan_port add (udp_port) (port_id)
705
706rx_vxlan_port remove
707~~~~~~~~~~~~~~~~~~~~
708
709Remove an UDP port for VXLAN packet filter on a port::
710
711   testpmd> rx_vxlan_port rm (udp_port) (port_id)
712
713tx_vlan set
714~~~~~~~~~~~
715
716Set hardware insertion of VLAN IDs in packets sent on a port::
717
718   testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
719
720For example, set a single VLAN ID (5) insertion on port 0::
721
722   tx_vlan set 0 5
723
724Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
725
726   tx_vlan set 1 2 3
727
728
729tx_vlan set pvid
730~~~~~~~~~~~~~~~~
731
732Set port based hardware insertion of VLAN ID in packets sent on a port::
733
734   testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
735
736tx_vlan reset
737~~~~~~~~~~~~~
738
739Disable hardware insertion of a VLAN header in packets sent on a port::
740
741   testpmd> tx_vlan reset (port_id)
742
743csum set
744~~~~~~~~
745
746Select hardware or software calculation of the checksum when
747transmitting a packet using the ``csum`` forwarding engine::
748
749   testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)
750
751Where:
752
753* ``ip|udp|tcp|sctp`` always relate to  the inner layer.
754
755* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
756  as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
757  supported). See also the ``csum parse-tunnel`` command.
758
759.. note::
760
761   Check the NIC Datasheet for hardware limits.
762
763csum parse-tunnel
764~~~~~~~~~~~~~~~~~
765
766Define how tunneled packets should be handled by the csum forward
767engine::
768
769   testpmd> csum parse-tunnel (on|off) (tx_port_id)
770
771If enabled, the csum forward engine will try to recognize supported
772tunnel headers (vxlan, gre, ipip).
773
774If disabled, treat tunnel packets as non-tunneled packets (a inner
775header is handled as a packet payload).
776
777.. note::
778
779   The port argument is the TX port like in the ``csum set`` command.
780
781Example:
782
783Consider a packet in packet like the following::
784
785   eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
786
787* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
788  command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
789  ``outer-ip parameter`` relates to the outer headers (here ``ipv4_out``).
790
791* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum  set``
792   command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
793
794csum show
795~~~~~~~~~
796
797Display tx checksum offload configuration::
798
799   testpmd> csum show (port_id)
800
801tso set
802~~~~~~~
803
804Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
805
806   testpmd> tso set (segsize) (port_id)
807
808.. note::
809
810   Check the NIC datasheet for hardware limits.
811
812tso show
813~~~~~~~~
814
815Display the status of TCP Segmentation Offload::
816
817   testpmd> tso show (port_id)
818
819mac_addr add
820~~~~~~~~~~~~
821
822Add an alternative MAC address to a port::
823
824   testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
825
826mac_addr remove
827~~~~~~~~~~~~~~~
828
829Remove a MAC address from a port::
830
831   testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
832
833mac_addr add (for VF)
834~~~~~~~~~~~~~~~~~~~~~
835
836Add an alternative MAC address for a VF to a port::
837
838   testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
839
840mac_addr set
841~~~~~~~~~~~~
842
843Set the default MAC address for a port::
844
845   testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
846
847mac_addr set (for VF)
848~~~~~~~~~~~~~~~~~~~~~
849
850Set the MAC address for a VF from the PF::
851
852   testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
853
854set port-uta
855~~~~~~~~~~~~
856
857Set the unicast hash filter(s) on/off for a port::
858
859   testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
860
861set promisc
862~~~~~~~~~~~
863
864Set the promiscuous mode on for a port or for all ports.
865In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
866
867   testpmd> set promisc (port_id|all) (on|off)
868
869set allmulti
870~~~~~~~~~~~~
871
872Set the allmulti mode for a port or for all ports::
873
874   testpmd> set allmulti (port_id|all) (on|off)
875
876Same as the ifconfig (8) option. Controls how multicast packets are handled.
877
878set promisc (for VF)
879~~~~~~~~~~~~~~~~~~~~
880
881Set the unicast promiscuous mode for a VF from PF.
882It's supported by Intel i40e NICs now.
883In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
884
885   testpmd> set vf promisc (port_id) (vf_id) (on|off)
886
887set allmulticast (for VF)
888~~~~~~~~~~~~~~~~~~~~~~~~~
889
890Set the multicast promiscuous mode for a VF from PF.
891It's supported by Intel i40e NICs now.
892In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
893
894   testpmd> set vf allmulti (port_id) (vf_id) (on|off)
895
896set tx max bandwidth (for VF)
897~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
898
899Set TX max absolute bandwidth (Mbps) for a VF from PF::
900
901   testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
902
903set tc tx min bandwidth (for VF)
904~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
905
906Set all TCs' TX min relative bandwidth (%) for a VF from PF::
907
908   testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
909
910set tc tx max bandwidth (for VF)
911~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
912
913Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
914
915   testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
916
917set tc strict link priority mode
918~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
919
920Set some TCs' strict link priority mode on a physical port::
921
922   testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
923
924set tc tx min bandwidth
925~~~~~~~~~~~~~~~~~~~~~~~
926
927Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
928
929   testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
930
931set flow_ctrl rx
932~~~~~~~~~~~~~~~~
933
934Set the link flow control parameter on a port::
935
936   testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
937            (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
938	    autoneg (on|off) (port_id)
939
940Where:
941
942* ``high_water`` (integer): High threshold value to trigger XOFF.
943
944* ``low_water`` (integer): Low threshold value to trigger XON.
945
946* ``pause_time`` (integer): Pause quota in the Pause frame.
947
948* ``send_xon`` (0/1): Send XON frame.
949
950* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
951
952* ``autoneg``: Change the auto-negotiation parameter.
953
954set pfc_ctrl rx
955~~~~~~~~~~~~~~~
956
957Set the priority flow control parameter on a port::
958
959   testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
960            (pause_time) (priority) (port_id)
961
962Where:
963
964* ``high_water`` (integer): High threshold value.
965
966* ``low_water`` (integer): Low threshold value.
967
968* ``pause_time`` (integer): Pause quota in the Pause frame.
969
970* ``priority`` (0-7): VLAN User Priority.
971
972set stat_qmap
973~~~~~~~~~~~~~
974
975Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
976
977   testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
978
979For example, to set rx queue 2 on port 0 to mapping 5::
980
981   testpmd>set stat_qmap rx 0 2 5
982
983set port - rx/tx (for VF)
984~~~~~~~~~~~~~~~~~~~~~~~~~
985
986Set VF receive/transmit from a port::
987
988   testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
989
990set port - mac address filter (for VF)
991~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
992
993Add/Remove unicast or multicast MAC addr filter for a VF::
994
995   testpmd> set port (port_id) vf (vf_id) (mac_addr) \
996            (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
997
998set port - rx mode(for VF)
999~~~~~~~~~~~~~~~~~~~~~~~~~~
1000
1001Set the VF receive mode of a port::
1002
1003   testpmd> set port (port_id) vf (vf_id) \
1004            rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1005
1006The available receive modes are:
1007
1008* ``AUPE``: Accepts untagged VLAN.
1009
1010* ``ROPE``: Accepts unicast hash.
1011
1012* ``BAM``: Accepts broadcast packets.
1013
1014* ``MPE``: Accepts all multicast packets.
1015
1016set port - tx_rate (for Queue)
1017~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1018
1019Set TX rate limitation for a queue on a port::
1020
1021   testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1022
1023set port - tx_rate (for VF)
1024~~~~~~~~~~~~~~~~~~~~~~~~~~~
1025
1026Set TX rate limitation for queues in VF on a port::
1027
1028   testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1029
1030set port - mirror rule
1031~~~~~~~~~~~~~~~~~~~~~~
1032
1033Set pool or vlan type mirror rule for a port::
1034
1035   testpmd> set port (port_id) mirror-rule (rule_id) \
1036            (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1037            (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1038
1039Set link mirror rule for a port::
1040
1041   testpmd> set port (port_id) mirror-rule (rule_id) \
1042           (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1043
1044For example to enable mirror traffic with vlan 0,1 to pool 0::
1045
1046   set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1047
1048reset port - mirror rule
1049~~~~~~~~~~~~~~~~~~~~~~~~
1050
1051Reset a mirror rule for a port::
1052
1053   testpmd> reset port (port_id) mirror-rule (rule_id)
1054
1055set flush_rx
1056~~~~~~~~~~~~
1057
1058Set the flush on RX streams before forwarding.
1059The default is flush ``on``.
1060Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1061
1062   testpmd> set flush_rx off
1063
1064set bypass mode
1065~~~~~~~~~~~~~~~
1066
1067Set the bypass mode for the lowest port on bypass enabled NIC::
1068
1069   testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1070
1071set bypass event
1072~~~~~~~~~~~~~~~~
1073
1074Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1075
1076   testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1077            mode (normal|bypass|isolate) (port_id)
1078
1079Where:
1080
1081* ``timeout``: Enable bypass after watchdog timeout.
1082
1083* ``os_on``: Enable bypass when OS/board is powered on.
1084
1085* ``os_off``: Enable bypass when OS/board is powered off.
1086
1087* ``power_on``: Enable bypass when power supply is turned on.
1088
1089* ``power_off``: Enable bypass when power supply is turned off.
1090
1091
1092set bypass timeout
1093~~~~~~~~~~~~~~~~~~
1094
1095Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1096
1097   testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1098
1099show bypass config
1100~~~~~~~~~~~~~~~~~~
1101
1102Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1103
1104   testpmd> show bypass config (port_id)
1105
1106set link up
1107~~~~~~~~~~~
1108
1109Set link up for a port::
1110
1111   testpmd> set link-up port (port id)
1112
1113set link down
1114~~~~~~~~~~~~~
1115
1116Set link down for a port::
1117
1118   testpmd> set link-down port (port id)
1119
1120E-tag set
1121~~~~~~~~~
1122
1123Enable E-tag insertion for a VF on a port::
1124
1125   testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1126
1127Disable E-tag insertion for a VF on a port::
1128
1129   testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1130
1131Enable/disable E-tag stripping on a port::
1132
1133   testpmd> E-tag set stripping (on|off) port (port_id)
1134
1135Enable/disable E-tag based forwarding on a port::
1136
1137   testpmd> E-tag set forwarding (on|off) port (port_id)
1138
1139Add an E-tag forwarding filter on a port::
1140
1141   testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1142
1143Delete an E-tag forwarding filter on a port::
1144   testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1145
1146
1147Port Functions
1148--------------
1149
1150The following sections show functions for configuring ports.
1151
1152.. note::
1153
1154   Port configuration changes only become active when forwarding is started/restarted.
1155
1156port attach
1157~~~~~~~~~~~
1158
1159Attach a port specified by pci address or virtual device args::
1160
1161   testpmd> port attach (identifier)
1162
1163To attach a new pci device, the device should be recognized by kernel first.
1164Then it should be moved under DPDK management.
1165Finally the port can be attached to testpmd.
1166
1167For example, to move a pci device using ixgbe under DPDK management:
1168
1169.. code-block:: console
1170
1171   # Check the status of the available devices.
1172   ./usertools/dpdk-devbind.py --status
1173
1174   Network devices using DPDK-compatible driver
1175   ============================================
1176   <none>
1177
1178   Network devices using kernel driver
1179   ===================================
1180   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1181
1182
1183   # Bind the device to igb_uio.
1184   sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1185
1186
1187   # Recheck the status of the devices.
1188   ./usertools/dpdk-devbind.py --status
1189   Network devices using DPDK-compatible driver
1190   ============================================
1191   0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1192
1193To attach a port created by virtual device, above steps are not needed.
1194
1195For example, to attach a port whose pci address is 0000:0a:00.0.
1196
1197.. code-block:: console
1198
1199   testpmd> port attach 0000:0a:00.0
1200   Attaching a new port...
1201   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1202   EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
1203   EAL:   PCI memory mapped at 0x7f83bfa00000
1204   EAL:   PCI memory mapped at 0x7f83bfa80000
1205   PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1206   PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1207   Port 0 is attached. Now total ports is 1
1208   Done
1209
1210For example, to attach a port created by pcap PMD.
1211
1212.. code-block:: console
1213
1214   testpmd> port attach net_pcap0
1215   Attaching a new port...
1216   PMD: Initializing pmd_pcap for net_pcap0
1217   PMD: Creating pcap-backed ethdev on numa socket 0
1218   Port 0 is attached. Now total ports is 1
1219   Done
1220
1221In this case, identifier is ``net_pcap0``.
1222This identifier format is the same as ``--vdev`` format of DPDK applications.
1223
1224For example, to re-attach a bonded port which has been previously detached,
1225the mode and slave parameters must be given.
1226
1227.. code-block:: console
1228
1229   testpmd> port attach net_bond_0,mode=0,slave=1
1230   Attaching a new port...
1231   EAL: Initializing pmd_bond for net_bond_0
1232   EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
1233   Port 0 is attached. Now total ports is 1
1234   Done
1235
1236
1237port detach
1238~~~~~~~~~~~
1239
1240Detach a specific port::
1241
1242   testpmd> port detach (port_id)
1243
1244Before detaching a port, the port should be stopped and closed.
1245
1246For example, to detach a pci device port 0.
1247
1248.. code-block:: console
1249
1250   testpmd> port stop 0
1251   Stopping ports...
1252   Done
1253   testpmd> port close 0
1254   Closing ports...
1255   Done
1256
1257   testpmd> port detach 0
1258   Detaching a port...
1259   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1260   EAL:   remove driver: 8086:10fb rte_ixgbe_pmd
1261   EAL:   PCI memory unmapped at 0x7f83bfa00000
1262   EAL:   PCI memory unmapped at 0x7f83bfa80000
1263   Done
1264
1265
1266For example, to detach a virtual device port 0.
1267
1268.. code-block:: console
1269
1270   testpmd> port stop 0
1271   Stopping ports...
1272   Done
1273   testpmd> port close 0
1274   Closing ports...
1275   Done
1276
1277   testpmd> port detach 0
1278   Detaching a port...
1279   PMD: Closing pcap ethdev on numa socket 0
1280   Port 'net_pcap0' is detached. Now total ports is 0
1281   Done
1282
1283To remove a pci device completely from the system, first detach the port from testpmd.
1284Then the device should be moved under kernel management.
1285Finally the device can be removed using kernel pci hotplug functionality.
1286
1287For example, to move a pci device under kernel management:
1288
1289.. code-block:: console
1290
1291   sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
1292
1293   ./usertools/dpdk-devbind.py --status
1294
1295   Network devices using DPDK-compatible driver
1296   ============================================
1297   <none>
1298
1299   Network devices using kernel driver
1300   ===================================
1301   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
1302
1303To remove a port created by a virtual device, above steps are not needed.
1304
1305port start
1306~~~~~~~~~~
1307
1308Start all ports or a specific port::
1309
1310   testpmd> port start (port_id|all)
1311
1312port stop
1313~~~~~~~~~
1314
1315Stop all ports or a specific port::
1316
1317   testpmd> port stop (port_id|all)
1318
1319port close
1320~~~~~~~~~~
1321
1322Close all ports or a specific port::
1323
1324   testpmd> port close (port_id|all)
1325
1326port start/stop queue
1327~~~~~~~~~~~~~~~~~~~~~
1328
1329Start/stop a rx/tx queue on a specific port::
1330
1331   testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1332
1333Only take effect when port is started.
1334
1335port config - speed
1336~~~~~~~~~~~~~~~~~~~
1337
1338Set the speed and duplex mode for all ports or a specific port::
1339
1340   testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|auto) \
1341            duplex (half|full|auto)
1342
1343port config - queues/descriptors
1344~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1345
1346Set number of queues/descriptors for rxq, txq, rxd and txd::
1347
1348   testpmd> port config all (rxq|txq|rxd|txd) (value)
1349
1350This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1351
1352port config - max-pkt-len
1353~~~~~~~~~~~~~~~~~~~~~~~~~
1354
1355Set the maximum packet length::
1356
1357   testpmd> port config all max-pkt-len (value)
1358
1359This is equivalent to the ``--max-pkt-len`` command-line option.
1360
1361port config - CRC Strip
1362~~~~~~~~~~~~~~~~~~~~~~~
1363
1364Set hardware CRC stripping on or off for all ports::
1365
1366   testpmd> port config all crc-strip (on|off)
1367
1368CRC stripping is off by default.
1369
1370The ``on`` option is equivalent to the ``--crc-strip`` command-line option.
1371
1372port config - scatter
1373~~~~~~~~~~~~~~~~~~~~~~~
1374
1375Set RX scatter mode on or off for all ports::
1376
1377   testpmd> port config all scatter (on|off)
1378
1379RX scatter mode is off by default.
1380
1381The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1382
1383port config - TX queue flags
1384~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1385
1386Set a hexadecimal bitmap of TX queue flags for all ports::
1387
1388   testpmd> port config all txqflags value
1389
1390This command is equivalent to the ``--txqflags`` command-line option.
1391
1392port config - RX Checksum
1393~~~~~~~~~~~~~~~~~~~~~~~~~
1394
1395Set hardware RX checksum offload to on or off for all ports::
1396
1397   testpmd> port config all rx-cksum (on|off)
1398
1399Checksum offload is off by default.
1400
1401The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1402
1403port config - VLAN
1404~~~~~~~~~~~~~~~~~~
1405
1406Set hardware VLAN on or off for all ports::
1407
1408   testpmd> port config all hw-vlan (on|off)
1409
1410Hardware VLAN is on by default.
1411
1412The ``off`` option is equivalent to the ``--disable-hw-vlan`` command-line option.
1413
1414port config - VLAN filter
1415~~~~~~~~~~~~~~~~~~~~~~~~~
1416
1417Set hardware VLAN filter on or off for all ports::
1418
1419   testpmd> port config all hw-vlan-filter (on|off)
1420
1421Hardware VLAN filter is on by default.
1422
1423The ``off`` option is equivalent to the ``--disable-hw-vlan-filter`` command-line option.
1424
1425port config - VLAN strip
1426~~~~~~~~~~~~~~~~~~~~~~~~
1427
1428Set hardware VLAN strip on or off for all ports::
1429
1430   testpmd> port config all hw-vlan-strip (on|off)
1431
1432Hardware VLAN strip is on by default.
1433
1434The ``off`` option is equivalent to the ``--disable-hw-vlan-strip`` command-line option.
1435
1436port config - VLAN extend
1437~~~~~~~~~~~~~~~~~~~~~~~~~
1438
1439Set hardware VLAN extend on or off for all ports::
1440
1441   testpmd> port config all hw-vlan-extend (on|off)
1442
1443Hardware VLAN extend is off by default.
1444
1445The ``off`` option is equivalent to the ``--disable-hw-vlan-extend`` command-line option.
1446
1447port config - Drop Packets
1448~~~~~~~~~~~~~~~~~~~~~~~~~~
1449
1450Set packet drop for packets with no descriptors on or off for all ports::
1451
1452   testpmd> port config all drop-en (on|off)
1453
1454Packet dropping for packets with no descriptors is off by default.
1455
1456The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1457
1458port config - RSS
1459~~~~~~~~~~~~~~~~~
1460
1461Set the RSS (Receive Side Scaling) mode on or off::
1462
1463   testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)
1464
1465RSS is on by default.
1466
1467The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1468
1469port config - RSS Reta
1470~~~~~~~~~~~~~~~~~~~~~~
1471
1472Set the RSS (Receive Side Scaling) redirection table::
1473
1474   testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1475
1476port config - DCB
1477~~~~~~~~~~~~~~~~~
1478
1479Set the DCB mode for an individual port::
1480
1481   testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1482
1483The traffic class should be 4 or 8.
1484
1485port config - Burst
1486~~~~~~~~~~~~~~~~~~~
1487
1488Set the number of packets per burst::
1489
1490   testpmd> port config all burst (value)
1491
1492This is equivalent to the ``--burst`` command-line option.
1493
1494port config - Threshold
1495~~~~~~~~~~~~~~~~~~~~~~~
1496
1497Set thresholds for TX/RX queues::
1498
1499   testpmd> port config all (threshold) (value)
1500
1501Where the threshold type can be:
1502
1503* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
1504
1505* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
1506
1507* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
1508
1509* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
1510
1511* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
1512
1513* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
1514
1515* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
1516
1517* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
1518
1519* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
1520
1521These threshold options are also available from the command-line.
1522
1523port config - E-tag
1524~~~~~~~~~~~~~~~~~~~
1525
1526Set the value of ether-type for E-tag::
1527
1528   testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1529
1530Enable/disable the E-tag support::
1531
1532   testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1533
1534
1535Link Bonding Functions
1536----------------------
1537
1538The Link Bonding functions make it possible to dynamically create and
1539manage link bonding devices from within testpmd interactive prompt.
1540
1541create bonded device
1542~~~~~~~~~~~~~~~~~~~~
1543
1544Create a new bonding device::
1545
1546   testpmd> create bonded device (mode) (socket)
1547
1548For example, to create a bonded device in mode 1 on socket 0::
1549
1550   testpmd> create bonded 1 0
1551   created new bonded device (port X)
1552
1553add bonding slave
1554~~~~~~~~~~~~~~~~~
1555
1556Adds Ethernet device to a Link Bonding device::
1557
1558   testpmd> add bonding slave (slave id) (port id)
1559
1560For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
1561
1562   testpmd> add bonding slave 6 10
1563
1564
1565remove bonding slave
1566~~~~~~~~~~~~~~~~~~~~
1567
1568Removes an Ethernet slave device from a Link Bonding device::
1569
1570   testpmd> remove bonding slave (slave id) (port id)
1571
1572For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
1573
1574   testpmd> remove bonding slave 6 10
1575
1576set bonding mode
1577~~~~~~~~~~~~~~~~
1578
1579Set the Link Bonding mode of a Link Bonding device::
1580
1581   testpmd> set bonding mode (value) (port id)
1582
1583For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
1584
1585   testpmd> set bonding mode 3 10
1586
1587set bonding primary
1588~~~~~~~~~~~~~~~~~~~
1589
1590Set an Ethernet slave device as the primary device on a Link Bonding device::
1591
1592   testpmd> set bonding primary (slave id) (port id)
1593
1594For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
1595
1596   testpmd> set bonding primary 6 10
1597
1598set bonding mac
1599~~~~~~~~~~~~~~~
1600
1601Set the MAC address of a Link Bonding device::
1602
1603   testpmd> set bonding mac (port id) (mac)
1604
1605For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
1606
1607   testpmd> set bonding mac 10 00:00:00:00:00:01
1608
1609set bonding xmit_balance_policy
1610~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1611
1612Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
1613
1614   testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
1615
1616For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
1617
1618   testpmd> set bonding xmit_balance_policy 10 l34
1619
1620
1621set bonding mon_period
1622~~~~~~~~~~~~~~~~~~~~~~
1623
1624Set the link status monitoring polling period in milliseconds for a bonding device.
1625
1626This adds support for PMD slave devices which do not support link status interrupts.
1627When the mon_period is set to a value greater than 0 then all PMD's which do not support
1628link status ISR will be queried every polling interval to check if their link status has changed::
1629
1630   testpmd> set bonding mon_period (port_id) (value)
1631
1632For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
1633
1634   testpmd> set bonding mon_period 5 150
1635
1636
1637show bonding config
1638~~~~~~~~~~~~~~~~~~~
1639
1640Show the current configuration of a Link Bonding device::
1641
1642   testpmd> show bonding config (port id)
1643
1644For example,
1645to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
1646in balance mode with a transmission policy of layer 2+3::
1647
1648   testpmd> show bonding config 9
1649        Bonding mode: 2
1650        Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
1651        Slaves (3): [1 3 4]
1652        Active Slaves (3): [1 3 4]
1653        Primary: [3]
1654
1655
1656Register Functions
1657------------------
1658
1659The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
1660This is mainly useful for debugging purposes.
1661Reference should be made to the appropriate datasheet for the network card for details on the register addresses
1662and fields that can be accessed.
1663
1664read reg
1665~~~~~~~~
1666
1667Display the value of a port register::
1668
1669   testpmd> read reg (port_id) (address)
1670
1671For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
1672
1673   testpmd> read reg 0 0xEE00
1674   port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
1675
1676read regfield
1677~~~~~~~~~~~~~
1678
1679Display a port register bit field::
1680
1681   testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
1682
1683For example, reading the lowest two bits from the register in the example above::
1684
1685   testpmd> read regfield 0 0xEE00 0 1
1686   port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
1687
1688read regbit
1689~~~~~~~~~~~
1690
1691Display a single port register bit::
1692
1693   testpmd> read regbit (port_id) (address) (bit_x)
1694
1695For example, reading the lowest bit from the register in the example above::
1696
1697   testpmd> read regbit 0 0xEE00 0
1698   port 0 PCI register at offset 0xEE00: bit 0=1
1699
1700write reg
1701~~~~~~~~~
1702
1703Set the value of a port register::
1704
1705   testpmd> write reg (port_id) (address) (value)
1706
1707For example, to clear a register::
1708
1709   testpmd> write reg 0 0xEE00 0x0
1710   port 0 PCI register at offset 0xEE00: 0x00000000 (0)
1711
1712write regfield
1713~~~~~~~~~~~~~~
1714
1715Set bit field of a port register::
1716
1717   testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
1718
1719For example, writing to the register cleared in the example above::
1720
1721   testpmd> write regfield 0 0xEE00 0 1 2
1722   port 0 PCI register at offset 0xEE00: 0x00000002 (2)
1723
1724write regbit
1725~~~~~~~~~~~~
1726
1727Set single bit value of a port register::
1728
1729   testpmd> write regbit (port_id) (address) (bit_x) (value)
1730
1731For example, to set the high bit in the register from the example above::
1732
1733   testpmd> write regbit 0 0xEE00 31 1
1734   port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
1735
1736
1737Filter Functions
1738----------------
1739
1740This section details the available filter functions that are available.
1741
1742Note these functions interface the deprecated legacy filtering framework,
1743superseded by *rte_flow*. See `Flow rules management`_.
1744
1745ethertype_filter
1746~~~~~~~~~~~~~~~~~~~~
1747
1748Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
1749
1750   ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
1751                    ethertype (ether_type) (drop|fwd) queue (queue_id)
1752
1753The available information parameters are:
1754
1755* ``port_id``: The port which the Ethertype filter assigned on.
1756
1757* ``mac_addr``: Compare destination mac address.
1758
1759* ``mac_ignr``: Ignore destination mac address match.
1760
1761* ``mac_address``: Destination mac address to match.
1762
1763* ``ether_type``: The EtherType value want to match,
1764  for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
1765
1766* ``queue_id``: The receive queue associated with this EtherType filter.
1767  It is meaningless when deleting or dropping.
1768
1769Example, to add/remove an ethertype filter rule::
1770
1771   testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
1772                             ethertype 0x0806 fwd queue 3
1773
1774   testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
1775                             ethertype 0x0806 fwd queue 3
1776
17772tuple_filter
1778~~~~~~~~~~~~~~~~~
1779
1780Add or delete a 2-tuple filter,
1781which identifies packets by specific protocol and destination TCP/UDP port
1782and forwards packets into one of the receive queues::
1783
1784   2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
1785                 protocol (protocol_value) mask (mask_value) \
1786                 tcp_flags (tcp_flags_value) priority (prio_value) \
1787                 queue (queue_id)
1788
1789The available information parameters are:
1790
1791* ``port_id``: The port which the 2-tuple filter assigned on.
1792
1793* ``dst_port_value``: Destination port in L4.
1794
1795* ``protocol_value``: IP L4 protocol.
1796
1797* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
1798
1799* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
1800
1801* ``prio_value``: Priority of this filter.
1802
1803* ``queue_id``: The receive queue associated with this 2-tuple filter.
1804
1805Example, to add/remove an 2tuple filter rule::
1806
1807   testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
1808                          tcp_flags 0x02 priority 3 queue 3
1809
1810   testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
1811                          tcp_flags 0x02 priority 3 queue 3
1812
18135tuple_filter
1814~~~~~~~~~~~~~~~~~
1815
1816Add or delete a 5-tuple filter,
1817which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
1818and routes packets into one of the receive queues::
1819
1820   5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
1821                 (src_address) dst_port (dst_port_value) \
1822                 src_port (src_port_value) protocol (protocol_value) \
1823                 mask (mask_value) tcp_flags (tcp_flags_value) \
1824                 priority (prio_value) queue (queue_id)
1825
1826The available information parameters are:
1827
1828* ``port_id``: The port which the 5-tuple filter assigned on.
1829
1830* ``dst_address``: Destination IP address.
1831
1832* ``src_address``: Source IP address.
1833
1834* ``dst_port_value``: TCP/UDP destination port.
1835
1836* ``src_port_value``: TCP/UDP source port.
1837
1838* ``protocol_value``: L4 protocol.
1839
1840* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
1841
1842* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
1843
1844* ``prio_value``: The priority of this filter.
1845
1846* ``queue_id``: The receive queue associated with this 5-tuple filter.
1847
1848Example, to add/remove an 5tuple filter rule::
1849
1850   testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
1851            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
1852            flags 0x0 priority 3 queue 3
1853
1854   testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
1855            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
1856            flags 0x0 priority 3 queue 3
1857
1858syn_filter
1859~~~~~~~~~~
1860
1861Using the  SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
1862
1863   syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
1864
1865The available information parameters are:
1866
1867* ``port_id``: The port which the SYN filter assigned on.
1868
1869* ``high``: This SYN filter has higher priority than other filters.
1870
1871* ``low``: This SYN filter has lower priority than other filters.
1872
1873* ``queue_id``: The receive queue associated with this SYN filter
1874
1875Example::
1876
1877   testpmd> syn_filter 0 add priority high queue 3
1878
1879flex_filter
1880~~~~~~~~~~~
1881
1882With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
1883and routed into one of the receive queues::
1884
1885   flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
1886               mask (mask_value) priority (prio_value) queue (queue_id)
1887
1888The available information parameters are:
1889
1890* ``port_id``: The port which the Flex filter is assigned on.
1891
1892* ``len_value``: Filter length in bytes, no greater than 128.
1893
1894* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
1895
1896* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
1897
1898* ``prio_value``: The priority of this filter.
1899
1900* ``queue_id``: The receive queue associated with this Flex filter.
1901
1902Example::
1903
1904   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
1905                          mask 000C priority 3 queue 3
1906
1907   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
1908                          mask 000C priority 3 queue 3
1909
1910
1911.. _testpmd_flow_director:
1912
1913flow_director_filter
1914~~~~~~~~~~~~~~~~~~~~
1915
1916The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
1917
1918Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
1919Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
1920
1921* Perfect match filters.
1922  The hardware checks a match between the masked fields of the received packets and the programmed filters.
1923  The masked fields are for IP flow.
1924
1925* Signature filters.
1926  The hardware checks a match between a hash-based signature of the masked fields of the received packet.
1927
1928* Perfect-mac-vlan match filters.
1929  The hardware checks a match between the masked fields of the received packets and the programmed filters.
1930  The masked fields are for MAC VLAN flow.
1931
1932* Perfect-tunnel match filters.
1933  The hardware checks a match between the masked fields of the received packets and the programmed filters.
1934  The masked fields are for tunnel flow.
1935
1936The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
1937per flow type and the flexible payload.
1938
1939The Flow Director can also mask out parts of all of these fields so that filters
1940are only applied to certain fields or parts of the fields.
1941
1942Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
1943
1944# Commands to add flow director filters of different flow types::
1945
1946   flow_director_filter (port_id) mode IP (add|del|update) \
1947                        flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
1948                        src (src_ip_address) dst (dst_ip_address) \
1949                        tos (tos_value) proto (proto_value) ttl (ttl_value) \
1950                        vlan (vlan_value) flexbytes (flexbytes_value) \
1951                        (drop|fwd) pf|vf(vf_id) queue (queue_id) \
1952                        fd_id (fd_id_value)
1953
1954   flow_director_filter (port_id) mode IP (add|del|update) \
1955                        flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
1956                        src (src_ip_address) (src_port) \
1957                        dst (dst_ip_address) (dst_port) \
1958                        tos (tos_value) ttl (ttl_value) \
1959                        vlan (vlan_value) flexbytes (flexbytes_value) \
1960                        (drop|fwd) queue pf|vf(vf_id) (queue_id) \
1961                        fd_id (fd_id_value)
1962
1963   flow_director_filter (port_id) mode IP (add|del|update) \
1964                        flow (ipv4-sctp|ipv6-sctp) \
1965                        src (src_ip_address) (src_port) \
1966                        dst (dst_ip_address) (dst_port) \
1967                        tos (tos_value) ttl (ttl_value) \
1968                        tag (verification_tag) vlan (vlan_value) \
1969                        flexbytes (flexbytes_value) (drop|fwd) \
1970                        pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
1971
1972   flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
1973                        ether (ethertype) flexbytes (flexbytes_value) \
1974                        (drop|fwd) pf|vf(vf_id) queue (queue_id)
1975                        fd_id (fd_id_value)
1976
1977   flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
1978                        mac (mac_address) vlan (vlan_value) \
1979                        flexbytes (flexbytes_value) (drop|fwd) \
1980                        queue (queue_id) fd_id (fd_id_value)
1981
1982   flow_director_filter (port_id) mode Tunnel (add|del|update) \
1983                        mac (mac_address) vlan (vlan_value) \
1984                        tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
1985                        flexbytes (flexbytes_value) (drop|fwd) \
1986                        queue (queue_id) fd_id (fd_id_value)
1987
1988For example, to add an ipv4-udp flow type filter::
1989
1990   testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
1991            dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
1992            fwd pf queue 1 fd_id 1
1993
1994For example, add an ipv4-other flow type filter::
1995
1996   testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
1997             dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
1998             flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
1999
2000flush_flow_director
2001~~~~~~~~~~~~~~~~~~~
2002
2003Flush all flow director filters on a device::
2004
2005   testpmd> flush_flow_director (port_id)
2006
2007Example, to flush all flow director filter on port 0::
2008
2009   testpmd> flush_flow_director 0
2010
2011flow_director_mask
2012~~~~~~~~~~~~~~~~~~
2013
2014Set flow director's input masks::
2015
2016   flow_director_mask (port_id) mode IP vlan (vlan_value) \
2017                      src_mask (ipv4_src) (ipv6_src) (src_port) \
2018                      dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
2019
2020   flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
2021
2022   flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
2023                      mac (mac_value) tunnel-type (tunnel_type_value) \
2024                      tunnel-id (tunnel_id_value)
2025
2026Example, to set flow director mask on port 0::
2027
2028   testpmd> flow_director_mask 0 mode IP vlan 0xefff \
2029            src_mask 255.255.255.255 \
2030                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
2031            dst_mask 255.255.255.255 \
2032                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
2033
2034flow_director_flex_mask
2035~~~~~~~~~~~~~~~~~~~~~~~
2036
2037set masks of flow director's flexible payload based on certain flow type::
2038
2039   testpmd> flow_director_flex_mask (port_id) \
2040            flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2041                  ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
2042                  l2_payload|all) (mask)
2043
2044Example, to set flow director's flex mask for all flow type on port 0::
2045
2046   testpmd> flow_director_flex_mask 0 flow all \
2047            (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
2048
2049
2050flow_director_flex_payload
2051~~~~~~~~~~~~~~~~~~~~~~~~~~
2052
2053Configure flexible payload selection::
2054
2055   flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
2056
2057For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
2058
2059   testpmd> flow_director_flex_payload 0 l4 \
2060            (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
2061
2062get_sym_hash_ena_per_port
2063~~~~~~~~~~~~~~~~~~~~~~~~~
2064
2065Get symmetric hash enable configuration per port::
2066
2067   get_sym_hash_ena_per_port (port_id)
2068
2069For example, to get symmetric hash enable configuration of port 1::
2070
2071   testpmd> get_sym_hash_ena_per_port 1
2072
2073set_sym_hash_ena_per_port
2074~~~~~~~~~~~~~~~~~~~~~~~~~
2075
2076Set symmetric hash enable configuration per port to enable or disable::
2077
2078   set_sym_hash_ena_per_port (port_id) (enable|disable)
2079
2080For example, to set symmetric hash enable configuration of port 1 to enable::
2081
2082   testpmd> set_sym_hash_ena_per_port 1 enable
2083
2084get_hash_global_config
2085~~~~~~~~~~~~~~~~~~~~~~
2086
2087Get the global configurations of hash filters::
2088
2089   get_hash_global_config (port_id)
2090
2091For example, to get the global configurations of hash filters of port 1::
2092
2093   testpmd> get_hash_global_config 1
2094
2095set_hash_global_config
2096~~~~~~~~~~~~~~~~~~~~~~
2097
2098Set the global configurations of hash filters::
2099
2100   set_hash_global_config (port_id) (toeplitz|simple_xor|default) \
2101   (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
2102   ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \
2103   (enable|disable)
2104
2105For example, to enable simple_xor for flow type of ipv6 on port 2::
2106
2107   testpmd> set_hash_global_config 2 simple_xor ipv6 enable
2108
2109set_hash_input_set
2110~~~~~~~~~~~~~~~~~~
2111
2112Set the input set for hash::
2113
2114   set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2115   ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
2116   l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
2117   ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
2118   tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
2119   udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
2120   fld-8th|none) (select|add)
2121
2122For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
2123
2124   testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
2125
2126set_fdir_input_set
2127~~~~~~~~~~~~~~~~~~
2128
2129The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
2130on per flow type and the flexible payload. This command can be used to change input set for each flow type.
2131
2132Set the input set for flow director::
2133
2134   set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
2135   ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
2136   l2_payload) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
2137   ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
2138   tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
2139   sctp-dst-port|sctp-veri-tag|none) (select|add)
2140
2141For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
2142
2143   testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
2144
2145global_config
2146~~~~~~~~~~~~~
2147
2148Set different GRE key length for input set::
2149
2150   global_config (port_id) gre-key-len (number in bytes)
2151
2152For example to set GRE key length for input set to 4 bytes on port 0::
2153
2154   testpmd> global_config 0 gre-key-len 4
2155
2156
2157.. _testpmd_rte_flow:
2158
2159Flow rules management
2160---------------------
2161
2162Control of the generic flow API (*rte_flow*) is fully exposed through the
2163``flow`` command (validation, creation, destruction and queries).
2164
2165Considering *rte_flow* overlaps with all `Filter Functions`_, using both
2166features simultaneously may cause undefined side-effects and is therefore
2167not recommended.
2168
2169``flow`` syntax
2170~~~~~~~~~~~~~~~
2171
2172Because the ``flow`` command uses dynamic tokens to handle the large number
2173of possible flow rules combinations, its behavior differs slightly from
2174other commands, in particular:
2175
2176- Pressing *?* or the *<tab>* key displays contextual help for the current
2177  token, not that of the entire command.
2178
2179- Optional and repeated parameters are supported (provided they are listed
2180  in the contextual help).
2181
2182The first parameter stands for the operation mode. Possible operations and
2183their general syntax are described below. They are covered in detail in the
2184following sections.
2185
2186- Check whether a flow rule can be created::
2187
2188   flow validate {port_id}
2189       [group {group_id}] [priority {level}] [ingress] [egress]
2190       pattern {item} [/ {item} [...]] / end
2191       actions {action} [/ {action} [...]] / end
2192
2193- Create a flow rule::
2194
2195   flow create {port_id}
2196       [group {group_id}] [priority {level}] [ingress] [egress]
2197       pattern {item} [/ {item} [...]] / end
2198       actions {action} [/ {action} [...]] / end
2199
2200- Destroy specific flow rules::
2201
2202   flow destroy {port_id} rule {rule_id} [...]
2203
2204- Destroy all flow rules::
2205
2206   flow flush {port_id}
2207
2208- Query an existing flow rule::
2209
2210   flow query {port_id} {rule_id} {action}
2211
2212- List existing flow rules sorted by priority, filtered by group
2213  identifiers::
2214
2215   flow list {port_id} [group {group_id}] [...]
2216
2217Validating flow rules
2218~~~~~~~~~~~~~~~~~~~~~
2219
2220``flow validate`` reports whether a flow rule would be accepted by the
2221underlying device in its current state but stops short of creating it. It is
2222bound to ``rte_flow_validate()``::
2223
2224   flow validate {port_id}
2225      [group {group_id}] [priority {level}] [ingress] [egress]
2226      pattern {item} [/ {item} [...]] / end
2227      actions {action} [/ {action} [...]] / end
2228
2229If successful, it will show::
2230
2231   Flow rule validated
2232
2233Otherwise it will show an error message of the form::
2234
2235   Caught error type [...] ([...]): [...]
2236
2237This command uses the same parameters as ``flow create``, their format is
2238described in `Creating flow rules`_.
2239
2240Check whether redirecting any Ethernet packet received on port 0 to RX queue
2241index 6 is supported::
2242
2243   testpmd> flow validate 0 ingress pattern eth / end
2244      actions queue index 6 / end
2245   Flow rule validated
2246   testpmd>
2247
2248Port 0 does not support TCPv6 rules::
2249
2250   testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
2251      actions drop / end
2252   Caught error type 9 (specific pattern item): Invalid argument
2253   testpmd>
2254
2255Creating flow rules
2256~~~~~~~~~~~~~~~~~~~
2257
2258``flow create`` validates and creates the specified flow rule. It is bound
2259to ``rte_flow_create()``::
2260
2261   flow create {port_id}
2262      [group {group_id}] [priority {level}] [ingress] [egress]
2263      pattern {item} [/ {item} [...]] / end
2264      actions {action} [/ {action} [...]] / end
2265
2266If successful, it will return a flow rule ID usable with other commands::
2267
2268   Flow rule #[...] created
2269
2270Otherwise it will show an error message of the form::
2271
2272   Caught error type [...] ([...]): [...]
2273
2274Parameters describe in the following order:
2275
2276- Attributes (*group*, *priority*, *ingress*, *egress* tokens).
2277- A matching pattern, starting with the *pattern* token and terminated by an
2278  *end* pattern item.
2279- Actions, starting with the *actions* token and terminated by an *end*
2280  action.
2281
2282These translate directly to *rte_flow* objects provided as-is to the
2283underlying functions.
2284
2285The shortest valid definition only comprises mandatory tokens::
2286
2287   testpmd> flow create 0 pattern end actions end
2288
2289Note that PMDs may refuse rules that essentially do nothing such as this
2290one.
2291
2292**All unspecified object values are automatically initialized to 0.**
2293
2294Attributes
2295^^^^^^^^^^
2296
2297These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
2298specified before the ``pattern`` token.
2299
2300- ``group {group id}``: priority group.
2301- ``priority {level}``: priority level within group.
2302- ``ingress``: rule applies to ingress traffic.
2303- ``egress``: rule applies to egress traffic.
2304
2305Each instance of an attribute specified several times overrides the previous
2306value as shown below (group 4 is used)::
2307
2308   testpmd> flow create 0 group 42 group 24 group 4 [...]
2309
2310Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
2311
2312While not specifying a direction is an error, some rules may allow both
2313simultaneously.
2314
2315Most rules affect RX therefore contain the ``ingress`` token::
2316
2317   testpmd> flow create 0 ingress pattern [...]
2318
2319Matching pattern
2320^^^^^^^^^^^^^^^^
2321
2322A matching pattern starts after the ``pattern`` token. It is made of pattern
2323items and is terminated by a mandatory ``end`` item.
2324
2325Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
2326rte_flow_item_type``).
2327
2328The ``/`` token is used as a separator between pattern items as shown
2329below::
2330
2331   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
2332
2333Note that protocol items like these must be stacked from lowest to highest
2334layer to make sense. For instance, the following rule is either invalid or
2335unlikely to match any packet::
2336
2337   testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
2338
2339More information on these restrictions can be found in the *rte_flow*
2340documentation.
2341
2342Several items support additional specification structures, for example
2343``ipv4`` allows specifying source and destination addresses as follows::
2344
2345   testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
2346      dst is 10.2.0.0 / end [...]
2347
2348This rule matches all IPv4 traffic with the specified properties.
2349
2350In this example, ``src`` and ``dst`` are field names of the underlying
2351``struct rte_flow_item_ipv4`` object. All item properties can be specified
2352in a similar fashion.
2353
2354The ``is`` token means that the subsequent value must be matched exactly,
2355and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
2356accordingly. Possible assignment tokens are:
2357
2358- ``is``: match value perfectly (with full bit-mask).
2359- ``spec``: match value according to configured bit-mask.
2360- ``last``: specify upper bound to establish a range.
2361- ``mask``: specify bit-mask with relevant bits set to one.
2362- ``prefix``: generate bit-mask from a prefix length.
2363
2364These yield identical results::
2365
2366   ipv4 src is 10.1.1.1
2367
2368::
2369
2370   ipv4 src spec 10.1.1.1 src mask 255.255.255.255
2371
2372::
2373
2374   ipv4 src spec 10.1.1.1 src prefix 32
2375
2376::
2377
2378   ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
2379
2380::
2381
2382   ipv4 src is 10.1.1.1 src last 0 # 0 disables range
2383
2384Inclusive ranges can be defined with ``last``::
2385
2386   ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
2387
2388Note that ``mask`` affects both ``spec`` and ``last``::
2389
2390   ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
2391      # matches 10.1.0.0 to 10.2.255.255
2392
2393Properties can be modified multiple times::
2394
2395   ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
2396
2397::
2398
2399   ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
2400
2401Pattern items
2402^^^^^^^^^^^^^
2403
2404This section lists supported pattern items and their attributes, if any.
2405
2406- ``end``: end list of pattern items.
2407
2408- ``void``: no-op pattern item.
2409
2410- ``invert``: perform actions when pattern does not match.
2411
2412- ``any``: match any protocol for the current layer.
2413
2414  - ``num {unsigned}``: number of layers covered.
2415
2416- ``pf``: match packets addressed to the physical function.
2417
2418- ``vf``: match packets addressed to a virtual function ID.
2419
2420  - ``id {unsigned}``: destination VF ID.
2421
2422- ``port``: device-specific physical port index to use.
2423
2424  - ``index {unsigned}``: physical port index.
2425
2426- ``raw``: match an arbitrary byte string.
2427
2428  - ``relative {boolean}``: look for pattern after the previous item.
2429  - ``search {boolean}``: search pattern from offset (see also limit).
2430  - ``offset {integer}``: absolute or relative offset for pattern.
2431  - ``limit {unsigned}``: search area limit for start of pattern.
2432  - ``pattern {string}``: byte string to look for.
2433
2434- ``eth``: match Ethernet header.
2435
2436  - ``dst {MAC-48}``: destination MAC.
2437  - ``src {MAC-48}``: source MAC.
2438  - ``type {unsigned}``: EtherType.
2439
2440- ``vlan``: match 802.1Q/ad VLAN tag.
2441
2442  - ``tpid {unsigned}``: tag protocol identifier.
2443  - ``tci {unsigned}``: tag control information.
2444  - ``pcp {unsigned}``: priority code point.
2445  - ``dei {unsigned}``: drop eligible indicator.
2446  - ``vid {unsigned}``: VLAN identifier.
2447
2448- ``ipv4``: match IPv4 header.
2449
2450  - ``tos {unsigned}``: type of service.
2451  - ``ttl {unsigned}``: time to live.
2452  - ``proto {unsigned}``: next protocol ID.
2453  - ``src {ipv4 address}``: source address.
2454  - ``dst {ipv4 address}``: destination address.
2455
2456- ``ipv6``: match IPv6 header.
2457
2458  - ``tc {unsigned}``: traffic class.
2459  - ``flow {unsigned}``: flow label.
2460  - ``proto {unsigned}``: protocol (next header).
2461  - ``hop {unsigned}``: hop limit.
2462  - ``src {ipv6 address}``: source address.
2463  - ``dst {ipv6 address}``: destination address.
2464
2465- ``icmp``: match ICMP header.
2466
2467  - ``type {unsigned}``: ICMP packet type.
2468  - ``code {unsigned}``: ICMP packet code.
2469
2470- ``udp``: match UDP header.
2471
2472  - ``src {unsigned}``: UDP source port.
2473  - ``dst {unsigned}``: UDP destination port.
2474
2475- ``tcp``: match TCP header.
2476
2477  - ``src {unsigned}``: TCP source port.
2478  - ``dst {unsigned}``: TCP destination port.
2479
2480- ``sctp``: match SCTP header.
2481
2482  - ``src {unsigned}``: SCTP source port.
2483  - ``dst {unsigned}``: SCTP destination port.
2484  - ``tag {unsigned}``: validation tag.
2485  - ``cksum {unsigned}``: checksum.
2486
2487- ``vxlan``: match VXLAN header.
2488
2489  - ``vni {unsigned}``: VXLAN identifier.
2490
2491- ``mpls``: match MPLS header.
2492
2493  - ``label {unsigned}``: MPLS label.
2494
2495- ``gre``: match GRE header.
2496
2497  - ``protocol {unsigned}``: protocol type.
2498
2499Actions list
2500^^^^^^^^^^^^
2501
2502A list of actions starts after the ``actions`` token in the same fashion as
2503`Matching pattern`_; actions are separated by ``/`` tokens and the list is
2504terminated by a mandatory ``end`` action.
2505
2506Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
2507rte_flow_action_type``).
2508
2509Dropping all incoming UDPv4 packets can be expressed as follows::
2510
2511   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
2512      actions drop / end
2513
2514Several actions have configurable properties which must be specified when
2515there is no valid default value. For example, ``queue`` requires a target
2516queue index.
2517
2518This rule redirects incoming UDPv4 traffic to queue index 6::
2519
2520   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
2521      actions queue index 6 / end
2522
2523While this one could be rejected by PMDs (unspecified queue index)::
2524
2525   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
2526      actions queue / end
2527
2528As defined by *rte_flow*, the list is not ordered, all actions of a given
2529rule are performed simultaneously. These are equivalent::
2530
2531   queue index 6 / void / mark id 42 / end
2532
2533::
2534
2535   void / mark id 42 / queue index 6 / end
2536
2537All actions in a list should have different types, otherwise only the last
2538action of a given type is taken into account::
2539
2540   queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
2541
2542::
2543
2544   drop / drop / drop / end # drop is performed only once
2545
2546::
2547
2548   mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
2549
2550Considering they are performed simultaneously, opposite and overlapping
2551actions can sometimes be combined when the end result is unambiguous::
2552
2553   drop / queue index 6 / end # drop has no effect
2554
2555::
2556
2557   drop / dup index 6 / end # same as above
2558
2559::
2560
2561   queue index 6 / rss queues 6 7 8 / end # queue has no effect
2562
2563::
2564
2565   drop / passthru / end # drop has no effect
2566
2567Note that PMDs may still refuse such combinations.
2568
2569Actions
2570^^^^^^^
2571
2572This section lists supported actions and their attributes, if any.
2573
2574- ``end``: end list of actions.
2575
2576- ``void``: no-op action.
2577
2578- ``passthru``: let subsequent rule process matched packets.
2579
2580- ``mark``: attach 32 bit value to packets.
2581
2582  - ``id {unsigned}``: 32 bit value to return with packets.
2583
2584- ``flag``: flag packets.
2585
2586- ``queue``: assign packets to a given queue index.
2587
2588  - ``index {unsigned}``: queue index to use.
2589
2590- ``drop``: drop packets (note: passthru has priority).
2591
2592- ``count``: enable counters for this rule.
2593
2594- ``dup``: duplicate packets to a given queue index.
2595
2596  - ``index {unsigned}``: queue index to duplicate packets to.
2597
2598- ``rss``: spread packets among several queues.
2599
2600  - ``queues [{unsigned} [...]] end``: queue indices to use.
2601
2602- ``pf``: redirect packets to physical device function.
2603
2604- ``vf``: redirect packets to virtual device function.
2605
2606  - ``original {boolean}``: use original VF ID if possible.
2607  - ``id {unsigned}``: VF ID to redirect packets to.
2608
2609Destroying flow rules
2610~~~~~~~~~~~~~~~~~~~~~
2611
2612``flow destroy`` destroys one or more rules from their rule ID (as returned
2613by ``flow create``), this command calls ``rte_flow_destroy()`` as many
2614times as necessary::
2615
2616   flow destroy {port_id} rule {rule_id} [...]
2617
2618If successful, it will show::
2619
2620   Flow rule #[...] destroyed
2621
2622It does not report anything for rule IDs that do not exist. The usual error
2623message is shown when a rule cannot be destroyed::
2624
2625   Caught error type [...] ([...]): [...]
2626
2627``flow flush`` destroys all rules on a device and does not take extra
2628arguments. It is bound to ``rte_flow_flush()``::
2629
2630   flow flush {port_id}
2631
2632Any errors are reported as above.
2633
2634Creating several rules and destroying them::
2635
2636   testpmd> flow create 0 ingress pattern eth / ipv6 / end
2637      actions queue index 2 / end
2638   Flow rule #0 created
2639   testpmd> flow create 0 ingress pattern eth / ipv4 / end
2640      actions queue index 3 / end
2641   Flow rule #1 created
2642   testpmd> flow destroy 0 rule 0 rule 1
2643   Flow rule #1 destroyed
2644   Flow rule #0 destroyed
2645   testpmd>
2646
2647The same result can be achieved using ``flow flush``::
2648
2649   testpmd> flow create 0 ingress pattern eth / ipv6 / end
2650      actions queue index 2 / end
2651   Flow rule #0 created
2652   testpmd> flow create 0 ingress pattern eth / ipv4 / end
2653      actions queue index 3 / end
2654   Flow rule #1 created
2655   testpmd> flow flush 0
2656   testpmd>
2657
2658Non-existent rule IDs are ignored::
2659
2660   testpmd> flow create 0 ingress pattern eth / ipv6 / end
2661      actions queue index 2 / end
2662   Flow rule #0 created
2663   testpmd> flow create 0 ingress pattern eth / ipv4 / end
2664      actions queue index 3 / end
2665   Flow rule #1 created
2666   testpmd> flow destroy 0 rule 42 rule 10 rule 2
2667   testpmd>
2668   testpmd> flow destroy 0 rule 0
2669   Flow rule #0 destroyed
2670   testpmd>
2671
2672Querying flow rules
2673~~~~~~~~~~~~~~~~~~~
2674
2675``flow query`` queries a specific action of a flow rule having that
2676ability. Such actions collect information that can be reported using this
2677command. It is bound to ``rte_flow_query()``::
2678
2679   flow query {port_id} {rule_id} {action}
2680
2681If successful, it will display either the retrieved data for known actions
2682or the following message::
2683
2684   Cannot display result for action type [...] ([...])
2685
2686Otherwise, it will complain either that the rule does not exist or that some
2687error occurred::
2688
2689   Flow rule #[...] not found
2690
2691::
2692
2693   Caught error type [...] ([...]): [...]
2694
2695Currently only the ``count`` action is supported. This action reports the
2696number of packets that hit the flow rule and the total number of bytes. Its
2697output has the following format::
2698
2699   count:
2700    hits_set: [...] # whether "hits" contains a valid value
2701    bytes_set: [...] # whether "bytes" contains a valid value
2702    hits: [...] # number of packets
2703    bytes: [...] # number of bytes
2704
2705Querying counters for TCPv6 packets redirected to queue 6::
2706
2707   testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
2708      actions queue index 6 / count / end
2709   Flow rule #4 created
2710   testpmd> flow query 0 4 count
2711   count:
2712    hits_set: 1
2713    bytes_set: 0
2714    hits: 386446
2715    bytes: 0
2716   testpmd>
2717
2718Listing flow rules
2719~~~~~~~~~~~~~~~~~~
2720
2721``flow list`` lists existing flow rules sorted by priority and optionally
2722filtered by group identifiers::
2723
2724   flow list {port_id} [group {group_id}] [...]
2725
2726This command only fails with the following message if the device does not
2727exist::
2728
2729   Invalid port [...]
2730
2731Output consists of a header line followed by a short description of each
2732flow rule, one per line. There is no output at all when no flow rules are
2733configured on the device::
2734
2735   ID      Group   Prio    Attr    Rule
2736   [...]   [...]   [...]   [...]   [...]
2737
2738``Attr`` column flags:
2739
2740- ``i`` for ``ingress``.
2741- ``e`` for ``egress``.
2742
2743Creating several flow rules and listing them::
2744
2745   testpmd> flow create 0 ingress pattern eth / ipv4 / end
2746      actions queue index 6 / end
2747   Flow rule #0 created
2748   testpmd> flow create 0 ingress pattern eth / ipv6 / end
2749      actions queue index 2 / end
2750   Flow rule #1 created
2751   testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
2752      actions rss queues 6 7 8 end / end
2753   Flow rule #2 created
2754   testpmd> flow list 0
2755   ID      Group   Prio    Attr    Rule
2756   0       0       0       i-      ETH IPV4 => QUEUE
2757   1       0       0       i-      ETH IPV6 => QUEUE
2758   2       0       5       i-      ETH IPV4 UDP => RSS
2759   testpmd>
2760
2761Rules are sorted by priority (i.e. group ID first, then priority level)::
2762
2763   testpmd> flow list 1
2764   ID      Group   Prio    Attr    Rule
2765   0       0       0       i-      ETH => COUNT
2766   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
2767   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
2768   1       24      0       i-      ETH IPV4 UDP => QUEUE
2769   4       24      10      i-      ETH IPV4 TCP => DROP
2770   3       24      20      i-      ETH IPV4 => DROP
2771   2       24      42      i-      ETH IPV4 UDP => QUEUE
2772   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
2773   testpmd>
2774
2775Output can be limited to specific groups::
2776
2777   testpmd> flow list 1 group 0 group 63
2778   ID      Group   Prio    Attr    Rule
2779   0       0       0       i-      ETH => COUNT
2780   6       0       500     i-      ETH IPV6 TCP => DROP COUNT
2781   5       0       1000    i-      ETH IPV6 ICMP => QUEUE
2782   7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
2783   testpmd>
2784