xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision ce3eee49fe3a1df3625e2b94415d4889b65b4443)
1..  BSD LICENSE
2    Copyright(c) 2010-2015 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, set the Flow Director and other tasks::
39
40   testpmd>
41
42The testpmd prompt has some, limited, readline support.
43Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
44as well as access to the command history via the up-arrow.
45
46There is also support for tab completion.
47If you type a partial command and hit ``<TAB>`` you get a list of the available completions:
48
49.. code-block:: console
50
51   testpmd> show port <TAB>
52
53       info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc X
54       info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc all
55       stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc X
56       stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc all
57       ...
58
59
60.. note::
61
62   Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes::
63
64      testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
65               (pause_time) (send_xon) (port_id)
66
67In the real ``testpmd>`` prompt these commands should be on a single line.
68
69Help Functions
70--------------
71
72The testpmd has on-line help for the functions that are available at runtime.
73These are divided into sections and can be accessed using help, help section or help all:
74
75.. code-block:: console
76
77   testpmd> help
78
79       help control    : Start and stop forwarding.
80       help display    : Displaying port, stats and config information.
81       help config     : Configuration information.
82       help ports      : Configuring ports.
83       help registers  : Reading and setting port registers.
84       help filters    : Filters configuration help.
85       help all        : All of the above sections.
86
87
88Control Functions
89-----------------
90
91start
92~~~~~
93
94Start packet forwarding with current configuration::
95
96   testpmd> start
97
98start tx_first
99~~~~~~~~~~~~~~
100
101Start packet forwarding with current configuration after sending specified number of bursts of packets::
102
103   testpmd> start tx_first (""|burst_num)
104
105The default burst number is 1 when ``burst_num`` not presented.
106
107stop
108~~~~
109
110Stop packet forwarding, and display accumulated statistics::
111
112   testpmd> stop
113
114quit
115~~~~
116
117Quit to prompt::
118
119   testpmd> quit
120
121
122Display Functions
123-----------------
124
125The functions in the following sections are used to display information about the
126testpmd configuration or the NIC status.
127
128show port
129~~~~~~~~~
130
131Display information for a given port or all ports::
132
133   testpmd> show port (info|stats|fdir|stat_qmap|dcb_tc) (port_id|all)
134
135The available information categories are:
136
137* ``info``: General port information such as MAC address.
138
139* ``stats``: RX/TX statistics.
140
141* ``fdir``: Flow Director information and statistics.
142
143* ``stat_qmap``: Queue statistics mapping.
144
145* ``dcb_tc``: DCB information such as TC mapping.
146
147For example:
148
149.. code-block:: console
150
151   testpmd> show port info 0
152
153   ********************* Infos for port 0 *********************
154
155   MAC address: XX:XX:XX:XX:XX:XX
156   Connect to socket: 0
157   memory allocation on the socket: 0
158   Link status: up
159   Link speed: 40000 Mbps
160   Link duplex: full-duplex
161   Promiscuous mode: enabled
162   Allmulticast mode: disabled
163   Maximum number of MAC addresses: 64
164   Maximum number of MAC addresses of hash filtering: 0
165   VLAN offload:
166       strip on
167       filter on
168       qinq(extend) off
169   Redirection table size: 512
170   Supported flow types:
171     ipv4-frag
172     ipv4-tcp
173     ipv4-udp
174     ipv4-sctp
175     ipv4-other
176     ipv6-frag
177     ipv6-tcp
178     ipv6-udp
179     ipv6-sctp
180     ipv6-other
181     l2_payload
182
183show port rss reta
184~~~~~~~~~~~~~~~~~~
185
186Display the rss redirection table entry indicated by masks on port X::
187
188   testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
189
190size is used to indicate the hardware supported reta size
191
192show port rss-hash
193~~~~~~~~~~~~~~~~~~
194
195Display the RSS hash functions and RSS hash key of a port::
196
197   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]
198
199clear port
200~~~~~~~~~~
201
202Clear the port statistics for a given port or for all ports::
203
204   testpmd> clear port (info|stats|fdir|stat_qmap) (port_id|all)
205
206For example::
207
208   testpmd> clear port stats all
209
210show (rxq|txq)
211~~~~~~~~~~~~~~
212
213Display information for a given port's RX/TX queue::
214
215   testpmd> show (rxq|txq) info (port_id) (queue_id)
216
217show config
218~~~~~~~~~~~
219
220Displays the configuration of the application.
221The configuration comes from the command-line, the runtime or the application defaults::
222
223   testpmd> show config (rxtx|cores|fwd|txpkts)
224
225The available information categories are:
226
227* ``rxtx``: RX/TX configuration items.
228
229* ``cores``: List of forwarding cores.
230
231* ``fwd``: Packet forwarding configuration.
232
233* ``txpkts``: Packets to TX configuration.
234
235For example:
236
237.. code-block:: console
238
239   testpmd> show config rxtx
240
241   io packet forwarding - CRC stripping disabled - packets/burst=16
242   nb forwarding cores=2 - nb forwarding ports=1
243   RX queues=1 - RX desc=128 - RX free threshold=0
244   RX threshold registers: pthresh=8 hthresh=8 wthresh=4
245   TX queues=1 - TX desc=512 - TX free threshold=0
246   TX threshold registers: pthresh=36 hthresh=0 wthresh=0
247   TX RS bit threshold=0 - TXQ flags=0x0
248
249set fwd
250~~~~~~~
251
252Set the packet forwarding mode::
253
254   testpmd> set fwd (io|mac|macswap|flowgen| \
255                     rxonly|txonly|csum|icmpecho) (""|retry)
256
257``retry`` can be specified for forwarding engines except ``rx_only``.
258
259The available information categories are:
260
261* ``io``: Forwards packets "as-is" in I/O mode.
262  This is the fastest possible forwarding operation as it does not access packets data.
263  This is the default mode.
264
265* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
266
267* ``macswap``: MAC swap forwarding mode.
268  Swaps the source and the destination Ethernet addresses of packets before forwarding them.
269
270* ``flowgen``: Multi-flow generation mode.
271  Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
272
273* ``rxonly``: Receives packets but doesn't transmit them.
274
275* ``txonly``: Generates and transmits packets without receiving any.
276
277* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
278
279* ``icmpecho``: Receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies.
280
281* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
282
283Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``.
284
285Example::
286
287   testpmd> set fwd rxonly
288
289   Set rxonly packet forwarding mode
290
291
292read rxd
293~~~~~~~~
294
295Display an RX descriptor for a port RX queue::
296
297   testpmd> read rxd (port_id) (queue_id) (rxd_id)
298
299For example::
300
301   testpmd> read rxd 0 0 4
302        0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
303
304read txd
305~~~~~~~~
306
307Display a TX descriptor for a port TX queue::
308
309   testpmd> read txd (port_id) (queue_id) (txd_id)
310
311For example::
312
313   testpmd> read txd 0 0 4
314        0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
315
316
317Configuration Functions
318-----------------------
319
320The testpmd application can be configured from the runtime as well as from the command-line.
321
322This section details the available configuration functions that are available.
323
324.. note::
325
326   Configuration changes only become active when forwarding is started/restarted.
327
328set default
329~~~~~~~~~~~
330
331Reset forwarding to the default configuration::
332
333   testpmd> set default
334
335set verbose
336~~~~~~~~~~~
337
338Set the debug verbosity level::
339
340   testpmd> set verbose (level)
341
342Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
343
344set nbport
345~~~~~~~~~~
346
347Set the number of ports used by the application:
348
349set nbport (num)
350
351This is equivalent to the ``--nb-ports`` command-line option.
352
353set nbcore
354~~~~~~~~~~
355
356Set the number of cores used by the application::
357
358   testpmd> set nbcore (num)
359
360This is equivalent to the ``--nb-cores`` command-line option.
361
362.. note::
363
364   The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
365
366set coremask
367~~~~~~~~~~~~
368
369Set the forwarding cores hexadecimal mask::
370
371   testpmd> set coremask (mask)
372
373This is equivalent to the ``--coremask`` command-line option.
374
375.. note::
376
377   The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
378
379set portmask
380~~~~~~~~~~~~
381
382Set the forwarding ports hexadecimal mask::
383
384   testpmd> set portmask (mask)
385
386This is equivalent to the ``--portmask`` command-line option.
387
388set burst
389~~~~~~~~~
390
391Set number of packets per burst::
392
393   testpmd> set burst (num)
394
395This is equivalent to the ``--burst command-line`` option.
396
397When retry is enabled, the transmit delay time and number of retries can also be set::
398
399   testpmd> set burst tx delay (microseconds) retry (num)
400
401set txpkts
402~~~~~~~~~~
403
404Set the length of each segment of the TX-ONLY packets::
405
406   testpmd> set txpkts (x[,y]*)
407
408Where x[,y]* represents a CSV list of values, without white space.
409
410set txsplit
411~~~~~~~~~~~
412
413Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
414
415   testpmd> set txsplit (off|on|rand)
416
417Where:
418
419* ``off`` disable packet copy & split for CSUM mode.
420
421* ``on`` split outgoing packet into multiple segments. Size of each segment
422  and number of segments per packet is determined by ``set txpkts`` command
423  (see above).
424
425* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
426
427set corelist
428~~~~~~~~~~~~
429
430Set the list of forwarding cores::
431
432   testpmd> set corelist (x[,y]*)
433
434For example, to change the forwarding cores:
435
436.. code-block:: console
437
438   testpmd> set corelist 3,1
439   testpmd> show config fwd
440
441   io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
442   Logical Core 3 (socket 0) forwards packets on 1 streams:
443   RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
444   Logical Core 1 (socket 0) forwards packets on 1 streams:
445   RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
446
447.. note::
448
449   The cores are used in the same order as specified on the command line.
450
451set portlist
452~~~~~~~~~~~~
453
454Set the list of forwarding ports::
455
456   testpmd> set portlist (x[,y]*)
457
458For example, to change the port forwarding:
459
460.. code-block:: console
461
462   testpmd> set portlist 0,2,1,3
463   testpmd> show config fwd
464
465   io packet forwarding - ports=4 - cores=1 - streams=4
466   Logical Core 3 (socket 0) forwards packets on 4 streams:
467   RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
468   RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
469   RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
470   RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
471
472vlan set strip
473~~~~~~~~~~~~~~
474
475Set the VLAN strip on a port::
476
477   testpmd> vlan set strip (on|off) (port_id)
478
479vlan set stripq
480~~~~~~~~~~~~~~~
481
482Set the VLAN strip for a queue on a port::
483
484   testpmd> vlan set stripq (on|off) (port_id,queue_id)
485
486vlan set filter
487~~~~~~~~~~~~~~~
488
489Set the VLAN filter on a port::
490
491   testpmd> vlan set filter (on|off) (port_id)
492
493vlan set qinq
494~~~~~~~~~~~~~
495
496Set the VLAN QinQ (extended queue in queue) on for a port::
497
498   testpmd> vlan set qinq (on|off) (port_id)
499
500vlan set tpid
501~~~~~~~~~~~~~
502
503Set the inner or outer VLAN TPID for packet filtering on a port::
504
505   testpmd> vlan set (inner|outer) tpid (value) (port_id)
506
507.. note::
508
509   TPID value must be a 16-bit number (value <= 65536).
510
511rx_vlan add
512~~~~~~~~~~~
513
514Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
515
516   testpmd> rx_vlan add (vlan_id|all) (port_id)
517
518.. note::
519
520   VLAN filter must be set on that port. VLAN ID < 4096.
521   Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
522   in VFTA table. This is important if enabling all vlan_ids.
523
524rx_vlan rm
525~~~~~~~~~~
526
527Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
528
529   testpmd> rx_vlan rm (vlan_id|all) (port_id)
530
531rx_vlan add (for VF)
532~~~~~~~~~~~~~~~~~~~~
533
534Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
535
536   testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
537
538rx_vlan rm (for VF)
539~~~~~~~~~~~~~~~~~~~
540
541Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
542
543   testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
544
545tunnel_filter add
546~~~~~~~~~~~~~~~~~
547
548Add a tunnel filter on a port::
549
550   testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
551            (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
552            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
553
554The available information categories are:
555
556* ``vxlan``: Set tunnel type as VXLAN.
557
558* ``nvgre``: Set tunnel type as NVGRE.
559
560* ``ipingre``: Set tunnel type as IP-in-GRE.
561
562* ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
563
564* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
565
566* ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
567
568* ``imac``: Set filter type as Inner MAC.
569
570* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
571
572* ``oip``: Set filter type as Outer IP.
573
574* ``iip``: Set filter type as Inner IP.
575
576Example::
577
578   testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
579            192.168.2.2 0 ipingre oip 1 1
580
581   Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
582
583tunnel_filter remove
584~~~~~~~~~~~~~~~~~~~~
585
586Remove a tunnel filter on a port::
587
588   testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
589            (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
590            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
591
592rx_vxlan_port add
593~~~~~~~~~~~~~~~~~
594
595Add an UDP port for VXLAN packet filter on a port::
596
597   testpmd> rx_vxlan_port add (udp_port) (port_id)
598
599rx_vxlan_port remove
600~~~~~~~~~~~~~~~~~~~~
601
602Remove an UDP port for VXLAN packet filter on a port::
603
604   testpmd> rx_vxlan_port rm (udp_port) (port_id)
605
606tx_vlan set
607~~~~~~~~~~~
608
609Set hardware insertion of VLAN IDs in packets sent on a port::
610
611   testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
612
613For example, set a single VLAN ID (5) insertion on port 0::
614
615   tx_vlan set 0 5
616
617Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
618
619   tx_vlan set 1 2 3
620
621
622tx_vlan set pvid
623~~~~~~~~~~~~~~~~
624
625Set port based hardware insertion of VLAN ID in packets sent on a port::
626
627   testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
628
629tx_vlan reset
630~~~~~~~~~~~~~
631
632Disable hardware insertion of a VLAN header in packets sent on a port::
633
634   testpmd> tx_vlan reset (port_id)
635
636csum set
637~~~~~~~~
638
639Select hardware or software calculation of the checksum when
640transmitting a packet using the ``csum`` forwarding engine::
641
642   testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)
643
644Where:
645
646* ``ip|udp|tcp|sctp`` always relate to  the inner layer.
647
648* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
649  as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
650  supported). See also the ``csum parse-tunnel`` command.
651
652.. note::
653
654   Check the NIC Datasheet for hardware limits.
655
656csum parse-tunnel
657~~~~~~~~~~~~~~~~~
658
659Define how tunneled packets should be handled by the csum forward
660engine::
661
662   testpmd> csum parse-tunnel (on|off) (tx_port_id)
663
664If enabled, the csum forward engine will try to recognize supported
665tunnel headers (vxlan, gre, ipip).
666
667If disabled, treat tunnel packets as non-tunneled packets (a inner
668header is handled as a packet payload).
669
670.. note::
671
672   The port argument is the TX port like in the ``csum set`` command.
673
674Example:
675
676Consider a packet in packet like the following::
677
678   eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
679
680* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
681  command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
682  ``outer-ip parameter`` relates to the outer headers (here ``ipv4_out``).
683
684* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum  set``
685   command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
686
687csum show
688~~~~~~~~~
689
690Display tx checksum offload configuration::
691
692   testpmd> csum show (port_id)
693
694tso set
695~~~~~~~
696
697Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
698
699   testpmd> tso set (segsize) (port_id)
700
701.. note::
702
703   Check the NIC datasheet for hardware limits.
704
705tso show
706~~~~~~~~
707
708Display the status of TCP Segmentation Offload::
709
710   testpmd> tso show (port_id)
711
712mac_addr add
713~~~~~~~~~~~~
714
715Add an alternative MAC address to a port::
716
717   testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
718
719mac_addr remove
720~~~~~~~~~~~~~~~
721
722Remove a MAC address from a port::
723
724   testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
725
726mac_addr add(for VF)
727~~~~~~~~~~~~~~~~~~~~
728
729Add an alternative MAC address for a VF to a port::
730
731   testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
732
733set port-uta
734~~~~~~~~~~~~
735
736Set the unicast hash filter(s) on/off for a port::
737
738   testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
739
740set promisc
741~~~~~~~~~~~
742
743Set the promiscuous mode on for a port or for all ports.
744In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
745
746   testpmd> set promisc (port_id|all) (on|off)
747
748set allmulti
749~~~~~~~~~~~~
750
751Set the allmulti mode for a port or for all ports::
752
753   testpmd> set allmulti (port_id|all) (on|off)
754
755Same as the ifconfig (8) option. Controls how multicast packets are handled.
756
757set flow_ctrl rx
758~~~~~~~~~~~~~~~~
759
760Set the link flow control parameter on a port::
761
762   testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
763            (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
764	    autoneg (on|off) (port_id)
765
766Where:
767
768* ``high_water`` (integer): High threshold value to trigger XOFF.
769
770* ``low_water`` (integer): Low threshold value to trigger XON.
771
772* ``pause_time`` (integer): Pause quota in the Pause frame.
773
774* ``send_xon`` (0/1): Send XON frame.
775
776* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
777
778* ``autoneg``: Change the auto-negotiation para mete.
779
780set pfc_ctrl rx
781~~~~~~~~~~~~~~~
782
783Set the priority flow control parameter on a port::
784
785   testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
786            (pause_time) (priority) (port_id)
787
788Where:
789
790* ``high_water`` (integer): High threshold value.
791
792* ``low_water`` (integer): Low threshold value.
793
794* ``pause_time`` (integer): Pause quota in the Pause frame.
795
796* ``priority`` (0-7): VLAN User Priority.
797
798set stat_qmap
799~~~~~~~~~~~~~
800
801Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
802
803   testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
804
805For example, to set rx queue 2 on port 0 to mapping 5::
806
807   testpmd>set stat_qmap rx 0 2 5
808
809set port - rx/tx (for VF)
810~~~~~~~~~~~~~~~~~~~~~~~~~
811
812Set VF receive/transmit from a port::
813
814   testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
815
816set port - mac address filter (for VF)
817~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
818
819Add/Remove unicast or multicast MAC addr filter for a VF::
820
821   testpmd> set port (port_id) vf (vf_id) (mac_addr) \
822            (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
823
824set port - rx mode(for VF)
825~~~~~~~~~~~~~~~~~~~~~~~~~~
826
827Set the VF receive mode of a port::
828
829   testpmd> set port (port_id) vf (vf_id) \
830            rxmode (AUPE|ROPE|BAM|MPE) (on|off)
831
832The available receive modes are:
833
834* ``AUPE``: Accepts untagged VLAN.
835
836* ``ROPE``: Accepts unicast hash.
837
838* ``BAM``: Accepts broadcast packets.
839
840* ``MPE``: Accepts all multicast packets.
841
842set port - tx_rate (for Queue)
843~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
844
845Set TX rate limitation for a queue on a port::
846
847   testpmd> set port (port_id) queue (queue_id) rate (rate_value)
848
849set port - tx_rate (for VF)
850~~~~~~~~~~~~~~~~~~~~~~~~~~~
851
852Set TX rate limitation for queues in VF on a port::
853
854   testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
855
856set port - mirror rule
857~~~~~~~~~~~~~~~~~~~~~~
858
859Set pool or vlan type mirror rule for a port::
860
861   testpmd> set port (port_id) mirror-rule (rule_id) \
862            (pool-mirror-up|pool-mirror-down|vlan-mirror) \
863            (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
864
865Set link mirror rule for a port::
866
867   testpmd> set port (port_id) mirror-rule (rule_id) \
868           (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
869
870For example to enable mirror traffic with vlan 0,1 to pool 0::
871
872   set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
873
874reset port - mirror rule
875~~~~~~~~~~~~~~~~~~~~~~~~
876
877Reset a mirror rule for a port::
878
879   testpmd> reset port (port_id) mirror-rule (rule_id)
880
881set flush_rx
882~~~~~~~~~~~~
883
884Set the flush on RX streams before forwarding.
885The default is flush ``on``.
886Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
887
888   testpmd> set flush_rx off
889
890set bypass mode
891~~~~~~~~~~~~~~~
892
893Set the bypass mode for the lowest port on bypass enabled NIC::
894
895   testpmd> set bypass mode (normal|bypass|isolate) (port_id)
896
897set bypass event
898~~~~~~~~~~~~~~~~
899
900Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
901
902   testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
903            mode (normal|bypass|isolate) (port_id)
904
905Where:
906
907* ``timeout``: Enable bypass after watchdog timeout.
908
909* ``os_on``: Enable bypass when OS/board is powered on.
910
911* ``os_off``: Enable bypass when OS/board is powered off.
912
913* ``power_on``: Enable bypass when power supply is turned on.
914
915* ``power_off``: Enable bypass when power supply is turned off.
916
917
918set bypass timeout
919~~~~~~~~~~~~~~~~~~
920
921Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
922
923   testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
924
925show bypass config
926~~~~~~~~~~~~~~~~~~
927
928Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
929
930   testpmd> show bypass config (port_id)
931
932set link up
933~~~~~~~~~~~
934
935Set link up for a port::
936
937   testpmd> set link-up port (port id)
938
939set link down
940~~~~~~~~~~~~~
941
942Set link down for a port::
943
944   testpmd> set link-down port (port id)
945
946E-tag set
947~~~~~~~~~
948
949Enable E-tag insertion for a VF on a port::
950
951   testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
952
953Disable E-tag insertion for a VF on a port::
954
955   testpmd> E-tag set insertion off port (port_id) vf (vf_id)
956
957Enable/disable E-tag stripping on a port::
958
959   testpmd> E-tag set stripping (on|off) port (port_id)
960
961Enable/disable E-tag based forwarding on a port::
962
963   testpmd> E-tag set forwarding (on|off) port (port_id)
964
965Add an E-tag forwarding filter on a port::
966
967   testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
968
969Delete an E-tag forwarding filter on a port::
970   testpmd> E-tag set filter del e-tag-id (value) port (port_id)
971
972
973Port Functions
974--------------
975
976The following sections show functions for configuring ports.
977
978.. note::
979
980   Port configuration changes only become active when forwarding is started/restarted.
981
982port attach
983~~~~~~~~~~~
984
985Attach a port specified by pci address or virtual device args::
986
987   testpmd> port attach (identifier)
988
989To attach a new pci device, the device should be recognized by kernel first.
990Then it should be moved under DPDK management.
991Finally the port can be attached to testpmd.
992
993For example, to move a pci device using ixgbe under DPDK management:
994
995.. code-block:: console
996
997   # Check the status of the available devices.
998   ./tools/dpdk_nic_bind.py --status
999
1000   Network devices using DPDK-compatible driver
1001   ============================================
1002   <none>
1003
1004   Network devices using kernel driver
1005   ===================================
1006   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1007
1008
1009   # Bind the device to igb_uio.
1010   sudo ./tools/dpdk_nic_bind.py -b igb_uio 0000:0a:00.0
1011
1012
1013   # Recheck the status of the devices.
1014   ./tools/dpdk_nic_bind.py --status
1015   Network devices using DPDK-compatible driver
1016   ============================================
1017   0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1018
1019To attach a port created by virtual device, above steps are not needed.
1020
1021For example, to attach a port whose pci address is 0000:0a:00.0.
1022
1023.. code-block:: console
1024
1025   testpmd> port attach 0000:0a:00.0
1026   Attaching a new port...
1027   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1028   EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
1029   EAL:   PCI memory mapped at 0x7f83bfa00000
1030   EAL:   PCI memory mapped at 0x7f83bfa80000
1031   PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1032   PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1033   Port 0 is attached. Now total ports is 1
1034   Done
1035
1036For example, to attach a port created by pcap PMD.
1037
1038.. code-block:: console
1039
1040   testpmd> port attach eth_pcap0
1041   Attaching a new port...
1042   PMD: Initializing pmd_pcap for eth_pcap0
1043   PMD: Creating pcap-backed ethdev on numa socket 0
1044   Port 0 is attached. Now total ports is 1
1045   Done
1046
1047In this case, identifier is ``eth_pcap0``.
1048This identifier format is the same as ``--vdev`` format of DPDK applications.
1049
1050For example, to re-attach a bonded port which has been previously detached,
1051the mode and slave parameters must be given.
1052
1053.. code-block:: console
1054
1055   testpmd> port attach eth_bond_0,mode=0,slave=1
1056   Attaching a new port...
1057   EAL: Initializing pmd_bond for eth_bond_0
1058   EAL: Create bonded device eth_bond_0 on port 0 in mode 0 on socket 0.
1059   Port 0 is attached. Now total ports is 1
1060   Done
1061
1062
1063port detach
1064~~~~~~~~~~~
1065
1066Detach a specific port::
1067
1068   testpmd> port detach (port_id)
1069
1070Before detaching a port, the port should be stopped and closed.
1071
1072For example, to detach a pci device port 0.
1073
1074.. code-block:: console
1075
1076   testpmd> port stop 0
1077   Stopping ports...
1078   Done
1079   testpmd> port close 0
1080   Closing ports...
1081   Done
1082
1083   testpmd> port detach 0
1084   Detaching a port...
1085   EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1086   EAL:   remove driver: 8086:10fb rte_ixgbe_pmd
1087   EAL:   PCI memory unmapped at 0x7f83bfa00000
1088   EAL:   PCI memory unmapped at 0x7f83bfa80000
1089   Done
1090
1091
1092For example, to detach a virtual device port 0.
1093
1094.. code-block:: console
1095
1096   testpmd> port stop 0
1097   Stopping ports...
1098   Done
1099   testpmd> port close 0
1100   Closing ports...
1101   Done
1102
1103   testpmd> port detach 0
1104   Detaching a port...
1105   PMD: Closing pcap ethdev on numa socket 0
1106   Port 'eth_pcap0' is detached. Now total ports is 0
1107   Done
1108
1109To remove a pci device completely from the system, first detach the port from testpmd.
1110Then the device should be moved under kernel management.
1111Finally the device can be removed using kernel pci hotplug functionality.
1112
1113For example, to move a pci device under kernel management:
1114
1115.. code-block:: console
1116
1117   sudo ./tools/dpdk_nic_bind.py -b ixgbe 0000:0a:00.0
1118
1119   ./tools/dpdk_nic_bind.py --status
1120
1121   Network devices using DPDK-compatible driver
1122   ============================================
1123   <none>
1124
1125   Network devices using kernel driver
1126   ===================================
1127   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
1128
1129To remove a port created by a virtual device, above steps are not needed.
1130
1131port start
1132~~~~~~~~~~
1133
1134Start all ports or a specific port::
1135
1136   testpmd> port start (port_id|all)
1137
1138port stop
1139~~~~~~~~~
1140
1141Stop all ports or a specific port::
1142
1143   testpmd> port stop (port_id|all)
1144
1145port close
1146~~~~~~~~~~
1147
1148Close all ports or a specific port::
1149
1150   testpmd> port close (port_id|all)
1151
1152port start/stop queue
1153~~~~~~~~~~~~~~~~~~~~~
1154
1155Start/stop a rx/tx queue on a specific port::
1156
1157   testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1158
1159Only take effect when port is started.
1160
1161port config - speed
1162~~~~~~~~~~~~~~~~~~~
1163
1164Set the speed and duplex mode for all ports or a specific port::
1165
1166   testpmd> port config (port_id|all) speed (10|100|1000|10000|40000|100000|auto) \
1167            duplex (half|full|auto)
1168
1169port config - queues/descriptors
1170~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1171
1172Set number of queues/descriptors for rxq, txq, rxd and txd::
1173
1174   testpmd> port config all (rxq|txq|rxd|txd) (value)
1175
1176This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1177
1178port config - max-pkt-len
1179~~~~~~~~~~~~~~~~~~~~~~~~~
1180
1181Set the maximum packet length::
1182
1183   testpmd> port config all max-pkt-len (value)
1184
1185This is equivalent to the ``--max-pkt-len`` command-line option.
1186
1187port config - CRC Strip
1188~~~~~~~~~~~~~~~~~~~~~~~
1189
1190Set hardware CRC stripping on or off for all ports::
1191
1192   testpmd> port config all crc-strip (on|off)
1193
1194CRC stripping is off by default.
1195
1196The ``on`` option is equivalent to the ``--crc-strip`` command-line option.
1197
1198port config - scatter
1199~~~~~~~~~~~~~~~~~~~~~~~
1200
1201Set RX scatter mode on or off for all ports::
1202
1203   testpmd> port config all scatter (on|off)
1204
1205RX scatter mode is off by default.
1206
1207The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1208
1209port config - TX queue flags
1210~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1211
1212Set a hexadecimal bitmap of TX queue flags for all ports::
1213
1214   testpmd> port config all txqflags value
1215
1216This command is equivalent to the ``--txqflags`` command-line option.
1217
1218port config - RX Checksum
1219~~~~~~~~~~~~~~~~~~~~~~~~~
1220
1221Set hardware RX checksum offload to on or off for all ports::
1222
1223   testpmd> port config all rx-cksum (on|off)
1224
1225Checksum offload is off by default.
1226
1227The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1228
1229port config - VLAN
1230~~~~~~~~~~~~~~~~~~
1231
1232Set hardware VLAN on or off for all ports::
1233
1234   testpmd> port config all hw-vlan (on|off)
1235
1236Hardware VLAN is on by default.
1237
1238The ``off`` option is equivalent to the ``--disable-hw-vlan`` command-line option.
1239
1240port config - VLAN filter
1241~~~~~~~~~~~~~~~~~~~~~~~~~
1242
1243Set hardware VLAN filter on or off for all ports::
1244
1245   testpmd> port config all hw-vlan-filter (on|off)
1246
1247Hardware VLAN filter is on by default.
1248
1249The ``off`` option is equivalent to the ``--disable-hw-vlan-filter`` command-line option.
1250
1251port config - VLAN strip
1252~~~~~~~~~~~~~~~~~~~~~~~~
1253
1254Set hardware VLAN strip on or off for all ports::
1255
1256   testpmd> port config all hw-vlan-strip (on|off)
1257
1258Hardware VLAN strip is on by default.
1259
1260The ``off`` option is equivalent to the ``--disable-hw-vlan-strip`` command-line option.
1261
1262port config - VLAN extend
1263~~~~~~~~~~~~~~~~~~~~~~~~~
1264
1265Set hardware VLAN extend on or off for all ports::
1266
1267   testpmd> port config all hw-vlan-extend (on|off)
1268
1269Hardware VLAN extend is off by default.
1270
1271The ``off`` option is equivalent to the ``--disable-hw-vlan-extend`` command-line option.
1272
1273port config - Drop Packets
1274~~~~~~~~~~~~~~~~~~~~~~~~~~
1275
1276Set packet drop for packets with no descriptors on or off for all ports::
1277
1278   testpmd> port config all drop-en (on|off)
1279
1280Packet dropping for packets with no descriptors is off by default.
1281
1282The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1283
1284port config - RSS
1285~~~~~~~~~~~~~~~~~
1286
1287Set the RSS (Receive Side Scaling) mode on or off::
1288
1289   testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|none)
1290
1291RSS is on by default.
1292
1293The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1294
1295port config - RSS Reta
1296~~~~~~~~~~~~~~~~~~~~~~
1297
1298Set the RSS (Receive Side Scaling) redirection table::
1299
1300   testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1301
1302port config - DCB
1303~~~~~~~~~~~~~~~~~
1304
1305Set the DCB mode for an individual port::
1306
1307   testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1308
1309The traffic class should be 4 or 8.
1310
1311port config - Burst
1312~~~~~~~~~~~~~~~~~~~
1313
1314Set the number of packets per burst::
1315
1316   testpmd> port config all burst (value)
1317
1318This is equivalent to the ``--burst`` command-line option.
1319
1320port config - Threshold
1321~~~~~~~~~~~~~~~~~~~~~~~
1322
1323Set thresholds for TX/RX queues::
1324
1325   testpmd> port config all (threshold) (value)
1326
1327Where the threshold type can be:
1328
1329* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
1330
1331* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
1332
1333* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
1334
1335* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
1336
1337* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
1338
1339* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
1340
1341* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
1342
1343* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
1344
1345* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
1346
1347These threshold options are also available from the command-line.
1348
1349port config - E-tag
1350~~~~~~~~~~~~~~~~~~~
1351
1352Set the value of ether-type for E-tag::
1353
1354   testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1355
1356Enable/disable the E-tag support::
1357
1358   testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1359
1360
1361Link Bonding Functions
1362----------------------
1363
1364The Link Bonding functions make it possible to dynamically create and
1365manage link bonding devices from within testpmd interactive prompt.
1366
1367create bonded device
1368~~~~~~~~~~~~~~~~~~~~
1369
1370Create a new bonding device::
1371
1372   testpmd> create bonded device (mode) (socket)
1373
1374For example, to create a bonded device in mode 1 on socket 0::
1375
1376   testpmd> create bonded 1 0
1377   created new bonded device (port X)
1378
1379add bonding slave
1380~~~~~~~~~~~~~~~~~
1381
1382Adds Ethernet device to a Link Bonding device::
1383
1384   testpmd> add bonding slave (slave id) (port id)
1385
1386For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
1387
1388   testpmd> add bonding slave 6 10
1389
1390
1391remove bonding slave
1392~~~~~~~~~~~~~~~~~~~~
1393
1394Removes an Ethernet slave device from a Link Bonding device::
1395
1396   testpmd> remove bonding slave (slave id) (port id)
1397
1398For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
1399
1400   testpmd> remove bonding slave 6 10
1401
1402set bonding mode
1403~~~~~~~~~~~~~~~~
1404
1405Set the Link Bonding mode of a Link Bonding device::
1406
1407   testpmd> set bonding mode (value) (port id)
1408
1409For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
1410
1411   testpmd> set bonding mode 3 10
1412
1413set bonding primary
1414~~~~~~~~~~~~~~~~~~~
1415
1416Set an Ethernet slave device as the primary device on a Link Bonding device::
1417
1418   testpmd> set bonding primary (slave id) (port id)
1419
1420For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
1421
1422   testpmd> set bonding primary 6 10
1423
1424set bonding mac
1425~~~~~~~~~~~~~~~
1426
1427Set the MAC address of a Link Bonding device::
1428
1429   testpmd> set bonding mac (port id) (mac)
1430
1431For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
1432
1433   testpmd> set bonding mac 10 00:00:00:00:00:01
1434
1435set bonding xmit_balance_policy
1436~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1437
1438Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
1439
1440   testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
1441
1442For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
1443
1444   testpmd> set bonding xmit_balance_policy 10 l34
1445
1446
1447set bonding mon_period
1448~~~~~~~~~~~~~~~~~~~~~~
1449
1450Set the link status monitoring polling period in milliseconds for a bonding device.
1451
1452This adds support for PMD slave devices which do not support link status interrupts.
1453When the mon_period is set to a value greater than 0 then all PMD's which do not support
1454link status ISR will be queried every polling interval to check if their link status has changed::
1455
1456   testpmd> set bonding mon_period (port_id) (value)
1457
1458For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
1459
1460   testpmd> set bonding mon_period 5 150
1461
1462
1463show bonding config
1464~~~~~~~~~~~~~~~~~~~
1465
1466Show the current configuration of a Link Bonding device::
1467
1468   testpmd> show bonding config (port id)
1469
1470For example,
1471to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
1472in balance mode with a transmission policy of layer 2+3::
1473
1474   testpmd> show bonding config 9
1475        Bonding mode: 2
1476        Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
1477        Slaves (3): [1 3 4]
1478        Active Slaves (3): [1 3 4]
1479        Primary: [3]
1480
1481
1482Register Functions
1483------------------
1484
1485The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
1486This is mainly useful for debugging purposes.
1487Reference should be made to the appropriate datasheet for the network card for details on the register addresses
1488and fields that can be accessed.
1489
1490read reg
1491~~~~~~~~
1492
1493Display the value of a port register::
1494
1495   testpmd> read reg (port_id) (address)
1496
1497For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
1498
1499   testpmd> read reg 0 0xEE00
1500   port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
1501
1502read regfield
1503~~~~~~~~~~~~~
1504
1505Display a port register bit field::
1506
1507   testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
1508
1509For example, reading the lowest two bits from the register in the example above::
1510
1511   testpmd> read regfield 0 0xEE00 0 1
1512   port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
1513
1514read regbit
1515~~~~~~~~~~~
1516
1517Display a single port register bit::
1518
1519   testpmd> read regbit (port_id) (address) (bit_x)
1520
1521For example, reading the lowest bit from the register in the example above::
1522
1523   testpmd> read regbit 0 0xEE00 0
1524   port 0 PCI register at offset 0xEE00: bit 0=1
1525
1526write reg
1527~~~~~~~~~
1528
1529Set the value of a port register::
1530
1531   testpmd> write reg (port_id) (address) (value)
1532
1533For example, to clear a register::
1534
1535   testpmd> write reg 0 0xEE00 0x0
1536   port 0 PCI register at offset 0xEE00: 0x00000000 (0)
1537
1538write regfield
1539~~~~~~~~~~~~~~
1540
1541Set bit field of a port register::
1542
1543   testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
1544
1545For example, writing to the register cleared in the example above::
1546
1547   testpmd> write regfield 0 0xEE00 0 1 2
1548   port 0 PCI register at offset 0xEE00: 0x00000002 (2)
1549
1550write regbit
1551~~~~~~~~~~~~
1552
1553Set single bit value of a port register::
1554
1555   testpmd> write regbit (port_id) (address) (bit_x) (value)
1556
1557For example, to set the high bit in the register from the example above::
1558
1559   testpmd> write regbit 0 0xEE00 31 1
1560   port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
1561
1562
1563Filter Functions
1564----------------
1565
1566This section details the available filter functions that are available.
1567
1568ethertype_filter
1569~~~~~~~~~~~~~~~~~~~~
1570
1571Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
1572
1573   ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
1574                    ethertype (ether_type) (drop|fwd) queue (queue_id)
1575
1576The available information parameters are:
1577
1578* ``port_id``: The port which the Ethertype filter assigned on.
1579
1580* ``mac_addr``: Compare destination mac address.
1581
1582* ``mac_ignr``: Ignore destination mac address match.
1583
1584* ``mac_address``: Destination mac address to match.
1585
1586* ``ether_type``: The EtherType value want to match,
1587  for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
1588
1589* ``queue_id``: The receive queue associated with this EtherType filter.
1590  It is meaningless when deleting or dropping.
1591
1592Example, to add/remove an ethertype filter rule::
1593
1594   testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
1595                             ethertype 0x0806 fwd queue 3
1596
1597   testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
1598                             ethertype 0x0806 fwd queue 3
1599
16002tuple_filter
1601~~~~~~~~~~~~~~~~~
1602
1603Add or delete a 2-tuple filter,
1604which identifies packets by specific protocol and destination TCP/UDP port
1605and forwards packets into one of the receive queues::
1606
1607   2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
1608                 protocol (protocol_value) mask (mask_value) \
1609                 tcp_flags (tcp_flags_value) priority (prio_value) \
1610                 queue (queue_id)
1611
1612The available information parameters are:
1613
1614* ``port_id``: The port which the 2-tuple filter assigned on.
1615
1616* ``dst_port_value``: Destination port in L4.
1617
1618* ``protocol_value``: IP L4 protocol.
1619
1620* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
1621
1622* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
1623
1624* ``prio_value``: Priority of this filter.
1625
1626* ``queue_id``: The receive queue associated with this 2-tuple filter.
1627
1628Example, to add/remove an 2tuple filter rule::
1629
1630   testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
1631                          tcp_flags 0x02 priority 3 queue 3
1632
1633   testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
1634                          tcp_flags 0x02 priority 3 queue 3
1635
16365tuple_filter
1637~~~~~~~~~~~~~~~~~
1638
1639Add or delete a 5-tuple filter,
1640which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
1641and routes packets into one of the receive queues::
1642
1643   5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
1644                 (src_address) dst_port (dst_port_value) \
1645                 src_port (src_port_value) protocol (protocol_value) \
1646                 mask (mask_value) tcp_flags (tcp_flags_value) \
1647                 priority (prio_value) queue (queue_id)
1648
1649The available information parameters are:
1650
1651* ``port_id``: The port which the 5-tuple filter assigned on.
1652
1653* ``dst_address``: Destination IP address.
1654
1655* ``src_address``: Source IP address.
1656
1657* ``dst_port_value``: TCP/UDP destination port.
1658
1659* ``src_port_value``: TCP/UDP source port.
1660
1661* ``protocol_value``: L4 protocol.
1662
1663* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
1664
1665* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
1666
1667* ``prio_value``: The priority of this filter.
1668
1669* ``queue_id``: The receive queue associated with this 5-tuple filter.
1670
1671Example, to add/remove an 5tuple filter rule::
1672
1673   testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
1674            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
1675            flags 0x0 priority 3 queue 3
1676
1677   testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
1678            dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
1679            flags 0x0 priority 3 queue 3
1680
1681syn_filter
1682~~~~~~~~~~
1683
1684Using the  SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
1685
1686   syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
1687
1688The available information parameters are:
1689
1690* ``port_id``: The port which the SYN filter assigned on.
1691
1692* ``high``: This SYN filter has higher priority than other filters.
1693
1694* ``low``: This SYN filter has lower priority than other filters.
1695
1696* ``queue_id``: The receive queue associated with this SYN filter
1697
1698Example::
1699
1700   testpmd> syn_filter 0 add priority high queue 3
1701
1702flex_filter
1703~~~~~~~~~~~
1704
1705With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
1706and routed into one of the receive queues::
1707
1708   flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
1709               mask (mask_value) priority (prio_value) queue (queue_id)
1710
1711The available information parameters are:
1712
1713* ``port_id``: The port which the Flex filter is assigned on.
1714
1715* ``len_value``: Filter length in bytes, no greater than 128.
1716
1717* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
1718
1719* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
1720
1721* ``prio_value``: The priority of this filter.
1722
1723* ``queue_id``: The receive queue associated with this Flex filter.
1724
1725Example::
1726
1727   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
1728                          mask 000C priority 3 queue 3
1729
1730   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
1731                          mask 000C priority 3 queue 3
1732
1733
1734.. _testpmd_flow_director:
1735
1736flow_director_filter
1737~~~~~~~~~~~~~~~~~~~~
1738
1739The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
1740
1741Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
1742Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
1743
1744* Perfect match filters.
1745  The hardware checks a match between the masked fields of the received packets and the programmed filters.
1746  The masked fields are for IP flow.
1747
1748* Signature filters.
1749  The hardware checks a match between a hash-based signature of the masked fields of the received packet.
1750
1751* Perfect-mac-vlan match filters.
1752  The hardware checks a match between the masked fields of the received packets and the programmed filters.
1753  The masked fields are for MAC VLAN flow.
1754
1755* Perfect-tunnel match filters.
1756  The hardware checks a match between the masked fields of the received packets and the programmed filters.
1757  The masked fields are for tunnel flow.
1758
1759The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
1760per flow type and the flexible payload.
1761
1762The Flow Director can also mask out parts of all of these fields so that filters
1763are only applied to certain fields or parts of the fields.
1764
1765Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
1766
1767# Commands to add flow director filters of different flow types::
1768
1769   flow_director_filter (port_id) mode IP (add|del|update) \
1770                        flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
1771                        src (src_ip_address) dst (dst_ip_address) \
1772                        tos (tos_value) proto (proto_value) ttl (ttl_value) \
1773                        vlan (vlan_value) flexbytes (flexbytes_value) \
1774                        (drop|fwd) pf|vf(vf_id) queue (queue_id) \
1775                        fd_id (fd_id_value)
1776
1777   flow_director_filter (port_id) mode IP (add|del|update) \
1778                        flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
1779                        src (src_ip_address) (src_port) \
1780                        dst (dst_ip_address) (dst_port) \
1781                        tos (tos_value) ttl (ttl_value) \
1782                        vlan (vlan_value) flexbytes (flexbytes_value) \
1783                        (drop|fwd) queue pf|vf(vf_id) (queue_id) \
1784                        fd_id (fd_id_value)
1785
1786   flow_director_filter (port_id) mode IP (add|del|update) \
1787                        flow (ipv4-sctp|ipv6-sctp) \
1788                        src (src_ip_address) (src_port) \
1789                        dst (dst_ip_address) (dst_port) \
1790                        tos (tos_value) ttl (ttl_value) \
1791                        tag (verification_tag) vlan (vlan_value) \
1792                        flexbytes (flexbytes_value) (drop|fwd) \
1793                        pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
1794
1795   flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
1796                        ether (ethertype) flexbytes (flexbytes_value) \
1797                        (drop|fwd) pf|vf(vf_id) queue (queue_id)
1798                        fd_id (fd_id_value)
1799
1800   flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
1801                        mac (mac_address) vlan (vlan_value) \
1802                        flexbytes (flexbytes_value) (drop|fwd) \
1803                        queue (queue_id) fd_id (fd_id_value)
1804
1805   flow_director_filter (port_id) mode Tunnel (add|del|update) \
1806                        mac (mac_address) vlan (vlan_value) \
1807                        tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
1808                        flexbytes (flexbytes_value) (drop|fwd) \
1809                        queue (queue_id) fd_id (fd_id_value)
1810
1811For example, to add an ipv4-udp flow type filter::
1812
1813   testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
1814            dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
1815            fwd pf queue 1 fd_id 1
1816
1817For example, add an ipv4-other flow type filter::
1818
1819   testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
1820             dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
1821             flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
1822
1823flush_flow_director
1824~~~~~~~~~~~~~~~~~~~
1825
1826Flush all flow director filters on a device::
1827
1828   testpmd> flush_flow_director (port_id)
1829
1830Example, to flush all flow director filter on port 0::
1831
1832   testpmd> flush_flow_director 0
1833
1834flow_director_mask
1835~~~~~~~~~~~~~~~~~~
1836
1837Set flow director's input masks::
1838
1839   flow_director_mask (port_id) mode IP vlan (vlan_value) \
1840                      src_mask (ipv4_src) (ipv6_src) (src_port) \
1841                      dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
1842
1843   flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) \
1844                      mac (mac_value)
1845
1846   flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
1847                      mac (mac_value) tunnel-type (tunnel_type_value) \
1848                      tunnel-id (tunnel_id_value)
1849
1850Example, to set flow director mask on port 0::
1851
1852   testpmd> flow_director_mask 0 mode IP vlan 0xefff \
1853            src_mask 255.255.255.255 \
1854                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
1855            dst_mask 255.255.255.255 \
1856                FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
1857
1858flow_director_flex_mask
1859~~~~~~~~~~~~~~~~~~~~~~~
1860
1861set masks of flow director's flexible payload based on certain flow type::
1862
1863   testpmd> flow_director_flex_mask (port_id) \
1864            flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
1865                  ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
1866                  l2_payload|all) (mask)
1867
1868Example, to set flow director's flex mask for all flow type on port 0::
1869
1870   testpmd> flow_director_flex_mask 0 flow all \
1871            (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
1872
1873
1874flow_director_flex_payload
1875~~~~~~~~~~~~~~~~~~~~~~~~~~
1876
1877Configure flexible payload selection::
1878
1879   flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
1880
1881For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
1882
1883   testpmd> flow_director_flex_payload 0 l4 \
1884            (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
1885
1886get_sym_hash_ena_per_port
1887~~~~~~~~~~~~~~~~~~~~~~~~~
1888
1889Get symmetric hash enable configuration per port::
1890
1891   get_sym_hash_ena_per_port (port_id)
1892
1893For example, to get symmetric hash enable configuration of port 1::
1894
1895   testpmd> get_sym_hash_ena_per_port 1
1896
1897set_sym_hash_ena_per_port
1898~~~~~~~~~~~~~~~~~~~~~~~~~
1899
1900Set symmetric hash enable configuration per port to enable or disable::
1901
1902   set_sym_hash_ena_per_port (port_id) (enable|disable)
1903
1904For example, to set symmetric hash enable configuration of port 1 to enable::
1905
1906   testpmd> set_sym_hash_ena_per_port 1 enable
1907
1908get_hash_global_config
1909~~~~~~~~~~~~~~~~~~~~~~
1910
1911Get the global configurations of hash filters::
1912
1913   get_hash_global_config (port_id)
1914
1915For example, to get the global configurations of hash filters of port 1::
1916
1917   testpmd> get_hash_global_config 1
1918
1919set_hash_global_config
1920~~~~~~~~~~~~~~~~~~~~~~
1921
1922Set the global configurations of hash filters::
1923
1924   set_hash_global_config (port_id) (toeplitz|simple_xor|default) \
1925   (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
1926   ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \
1927   (enable|disable)
1928
1929For example, to enable simple_xor for flow type of ipv6 on port 2::
1930
1931   testpmd> set_hash_global_config 2 simple_xor ipv6 enable
1932
1933set_hash_input_set
1934~~~~~~~~~~~~~~~~~~
1935
1936Set the input set for hash::
1937
1938   set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
1939   ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
1940   l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
1941   ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
1942   tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
1943   udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
1944   fld-8th|none) (select|add)
1945
1946For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
1947
1948   testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
1949
1950set_fdir_input_set
1951~~~~~~~~~~~~~~~~~~
1952
1953The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
1954on per flow type and the flexible payload. This command can be used to change input set for each flow type.
1955
1956Set the input set for flow director::
1957
1958   set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
1959   ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
1960   l2_payload) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \
1961   ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
1962   tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
1963   sctp-dst-port|sctp-veri-tag|none) (select|add)
1964
1965For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
1966
1967   testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
1968
1969global_config
1970~~~~~~~~~~~~~
1971
1972Set different GRE key length for input set::
1973
1974   global_config (port_id) gre-key-len (number in bytes)
1975
1976For example to set GRE key length for input set to 4 bytes on port 0::
1977
1978   testpmd> global_config 0 gre-key-len 4
1979