xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision edab33b1c01d508fdd934c06ee27f84250d2749a)
1..  BSD LICENSE
2    Copyright(c) 2010-2014 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
31Testpmd Runtime Functions
32=========================
33
34Where the testpmd application is started in interactive mode, (-i|--interactive),
35it displays a prompt that can be used to start and stop forwarding,
36configure the application, display statistics, set the Flow Director and other tasks.
37
38.. code-block:: console
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 X
54        info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap all
55        stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap X
56        stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap all
57        ...
58
59Help Functions
60--------------
61
62The testpmd has on-line help for the functions that are available at runtime.
63These are divided into sections and can be accessed using help, help section or help all:
64
65.. code-block:: console
66
67    testpmd> help
68
69        Help is available for the following sections:
70        help control    : Start and stop forwarding.
71        help display    : Displaying port, stats and config information.
72        help config     : Configuration information.
73        help ports      : Configuring ports.
74        help registers  : Reading and setting port registers.
75        help filters    : Filters configuration help.
76        help all        : All of the above sections.
77
78Control Functions
79-----------------
80
81start
82~~~~~
83
84Start packet forwarding with current configuration:
85
86start
87
88start tx_first
89~~~~~~~~~~~~~~
90
91Start packet forwarding with current configuration after sending one burst of packets:
92
93start tx_first
94
95stop
96~~~~
97
98Stop packet forwarding, and display accumulated statistics:
99
100stop
101
102quit
103~~~~
104
105Quit to prompt:
106
107quit
108
109Display Functions
110-----------------
111
112The functions in the following sections are used to display information about the
113testpmd configuration or the NIC status.
114
115show port
116~~~~~~~~~
117
118Display information for a given port or all ports:
119
120show port (info|stats|fdir|stat_qmap) (port_id|all)
121
122The available information categories are:
123
124info    : General port information such as MAC address.
125
126stats   : RX/TX statistics.
127
128fdir    : Flow Director information and statistics.
129
130stat_qmap : Queue statistics mapping.
131
132For example:
133
134.. code-block:: console
135
136    testpmd> show port info 0
137
138    ********************* Infos for port 0 *********************
139
140    MAC address: XX:XX:XX:XX:XX:XX
141    Link status: up
142    Link speed: 10000 Mbps
143    Link duplex: full-duplex
144    Promiscuous mode: enabled
145    Allmulticast mode: disabled
146    Maximum number of MAC addresses: 127
147    VLAN offload:
148        strip on
149        filter on
150        qinq(extend) off
151
152show port rss reta
153~~~~~~~~~~~~~~~~~~
154
155Display the rss redirection table entry indicated by masks on port X:
156
157show port (port_id) rss reta (size) (mask0, mask1...)
158
159size is used to indicate the hardware supported reta size
160
161show port rss-hash
162~~~~~~~~~~~~~~~~~~
163
164Display the RSS hash functions and RSS hash key of a port:
165
166show port (port_id) rss-hash [key]
167
168clear port
169~~~~~~~~~~
170
171Clear the port statistics for a given port or for all ports:
172
173clear port (info|stats|fdir|stat_qmap) (port_id|all)
174
175For example:
176
177.. code-block:: console
178
179    testpmd> clear port stats all
180
181show config
182~~~~~~~~~~~
183
184Displays the configuration of the application.
185The configuration comes from the command-line, the runtime or the application defaults:
186
187show config (rxtx|cores|fwd)
188
189The available information categories are:
190
191rxtx  : RX/TX configuration items.
192
193cores : List of forwarding cores.
194
195fwd   : Packet forwarding configuration.
196
197For example:
198
199.. code-block:: console
200
201    testpmd> show config rxtx
202
203    io packet forwarding - CRC stripping disabled - packets/burst=16
204    nb forwarding cores=2 - nb forwarding ports=1
205    RX queues=1 - RX desc=128 - RX free threshold=0
206    RX threshold registers: pthresh=8 hthresh=8 wthresh=4
207    TX queues=1 - TX desc=512 - TX free threshold=0
208    TX threshold registers: pthresh=36 hthresh=0 wthresh=0
209    TX RS bit threshold=0 - TXQ flags=0x0
210
211read rxd
212~~~~~~~~
213
214Display an RX descriptor for a port RX queue:
215
216read rxd (port_id) (queue_id) (rxd_id)
217
218For example:
219
220.. code-block:: console
221
222    testpmd> read rxd 0 0 4
223        0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
224
225read txd
226~~~~~~~~
227
228Display a TX descriptor for a port TX queue:
229
230read txd (port_id) (queue_id) (txd_id)
231
232For example:
233
234.. code-block:: console
235
236    testpmd> read txd 0 0 4
237        0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
238
239Configuration Functions
240-----------------------
241
242The testpmd application can be configured from the runtime as well as from the command-line.
243
244This section details the available configuration functions that are available.
245
246.. note::
247
248    Configuration changes only become active when forwarding is started/restarted.
249
250set default
251~~~~~~~~~~~
252
253Reset forwarding to the default configuration:
254
255set default
256
257set verbose
258~~~~~~~~~~~
259
260Set the debug verbosity level:
261
262set verbose (level)
263
264Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
265
266set nbport
267~~~~~~~~~~
268
269Set the number of ports used by the application:
270
271set nbport (num)
272
273This is equivalent to the --nb-ports command-line option.
274
275set nbcore
276~~~~~~~~~~
277
278Set the number of cores used by the application:
279
280set nbcore (num)
281
282This is equivalent to the --nb-cores command-line option.
283
284.. note::
285
286    The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
287
288set coremask
289~~~~~~~~~~~~
290
291Set the forwarding cores hexadecimal mask:
292
293set coremask (mask)
294
295This is equivalent to the --coremask command-line option.
296
297.. note::
298
299    The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
300
301set portmask
302~~~~~~~~~~~~
303
304Set the forwarding ports hexadecimal mask:
305
306set portmask (mask)
307
308This is equivalent to the --portmask command-line option.
309
310set burst
311~~~~~~~~~
312
313Set number of packets per burst:
314
315set burst (num)
316
317This is equivalent to the --burst command-line option.
318
319In mac_retry forwarding mode, the transmit delay time and number of retries can also be set.
320
321set burst tx delay (micrseconds) retry (num)
322
323set txpkts
324~~~~~~~~~~
325
326Set the length of each segment of the TX-ONLY packets:
327
328set txpkts (x[,y]*)
329
330Where x[,y]* represents a CSV list of values, without white space.
331
332set corelist
333~~~~~~~~~~~~
334
335Set the list of forwarding cores:
336
337set corelist (x[,y]*)
338
339For example, to change the forwarding cores:
340
341.. code-block:: console
342
343    testpmd> set corelist 3,1
344    testpmd> show config fwd
345
346    io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
347    Logical Core 3 (socket 0) forwards packets on 1 streams:
348    RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
349    Logical Core 1 (socket 0) forwards packets on 1 streams:
350    RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
351
352.. note::
353
354    The cores are used in the same order as specified on the command line.
355
356set portlist
357~~~~~~~~~~~~
358
359Set the list of forwarding ports:
360
361set portlist (x[,y]*)
362
363For example, to change the port forwarding:
364
365.. code-block:: console
366
367    testpmd> set portlist 0,2,1,3
368    testpmd> show config fwd
369
370    io packet forwarding - ports=4 - cores=1 - streams=4
371    Logical Core 3 (socket 0) forwards packets on 4 streams:
372    RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
373    RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
374    RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
375    RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
376
377vlan set strip
378~~~~~~~~~~~~~~
379
380Set the VLAN strip on a port:
381
382vlan set strip (on|off) (port_id)
383
384vlan set stripq
385~~~~~~~~~~~~~~~
386
387Set the VLAN strip for a queue on a port:
388
389vlan set stripq (on|off) (port_id,queue_id)
390
391vlan set filter
392~~~~~~~~~~~~~~~
393
394Set the VLAN filter on a port:
395
396vlan set filter (on|off) (port_id)
397
398vlan set qinq
399~~~~~~~~~~~~~
400
401Set the VLAN QinQ (extended queue in queue) on for a port:
402
403vlan set qinq (on|off) (port_id)
404
405vlan set tpid
406~~~~~~~~~~~~~
407
408Set the outer VLAN TPID for packet filtering on a port:
409
410vlan set tpid (value) (port_id)
411
412.. note::
413
414    TPID value must be a 16-bit number (value <= 65536).
415
416rx_vlan add
417~~~~~~~~~~~
418
419Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID:
420
421rx_vlan add (vlan_id|all) (port_id)
422
423.. note::
424
425    VLAN filter must be set on that port. VLAN ID < 4096.
426
427rx_vlan rm
428~~~~~~~~~~
429
430Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID:
431
432rx_vlan rm (vlan_id|all) (port_id)
433
434rx_vlan add(for VF)
435~~~~~~~~~~~~~~~~~~~
436
437Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID:
438
439rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
440
441rx_vlan rm(for VF)
442~~~~~~~~~~~~~~~~~~
443
444Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID:
445
446rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
447
448rx_vlan set tpid
449~~~~~~~~~~~~~~~~
450
451Set the outer VLAN TPID for packet filtering on a port:
452
453rx_vlan set tpid (value) (port_id)
454
455tunnel_filter add
456~~~~~~~~~~~~~~~~~
457
458Add a tunnel filter on a port:
459
460tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan)
461 (tunnel_type) (filter_type) (tenant_id) (queue_id)
462
463tunnel_filter remove
464~~~~~~~~~~~~~~~~~~~~
465
466Remove a tunnel filter on a port:
467
468tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan)
469 (tunnel_type) (filter_type) (tenant_id) (queue_id)
470
471rx_vxlan_port add
472~~~~~~~~~~~~~~~~~
473
474Add an UDP port for VXLAN packet filter on a port:
475
476rx_vxlan_port add (udp_port) (port_id)
477
478rx_vxlan_port remove
479~~~~~~~~~~~~~~~~~~~~
480
481Remove an UDP port for VXLAN packet filter on a port:
482
483rx_vxlan_port rm (udp_port) (port_id)
484
485tx_vlan set
486~~~~~~~~~~~
487
488Set hardware insertion of VLAN ID in packets sent on a port:
489
490tx_vlan set (vlan_id) (port_id)
491
492tx_vlan set pvid
493~~~~~~~~~~~~~~~~
494
495Set port based hardware insertion of VLAN ID in pacekts sent on a port:
496
497tx_vlan set pvid (port_id) (vlan_id) (on|off)
498
499tx_vlan reset
500~~~~~~~~~~~~~
501
502Disable hardware insertion of a VLAN header in packets sent on a port:
503
504tx_vlan reset (port_id)
505
506tx_checksum set
507~~~~~~~~~~~~~~~
508
509Select hardware or software calculation of the checksum when
510transmitting a packet using the csum forward engine:
511
512tx_cksum set (ip|udp|tcp|sctp|vxlan)
513
514ip|udp|tcp|sctp always concern the inner layer.
515vxlan concerns the outer IP and UDP layer (in case the packet
516is recognized as a vxlan packet by the forward engine)
517
518.. note::
519
520    Check the NIC Datasheet for hardware limits.
521
522tx_checksum show
523~~~~~~~~~~~~~~~~
524
525Display tx checksum offload configuration:
526
527tx_checksum show (port_id)
528
529tso set
530~~~~~~~
531
532Enable TCP Segmentation Offload in csum forward engine:
533
534tso set (segsize) (port_id)
535
536.. note::
537   Please check the NIC datasheet for HW limits
538
539tso show
540~~~~~~~~
541
542Display the status of TCP Segmentation Offload:
543
544tso show (port_id)
545
546set fwd
547~~~~~~~
548
549Set the packet forwarding mode:
550
551set fwd (io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho)
552
553The available information categories are:
554
555*   io: forwards packets "as-is" in I/O mode.
556    This is the fastest possible forwarding operation as it does not access packets data.
557    This is the default mode.
558
559*   mac: changes the source and the destination Ethernet addresses of packets before forwarding them.
560
561*   mac_retry: same as "mac" forwarding mode, but includes retries if the destination queue is full.
562
563*   macswap: MAC swap forwarding mode.
564    Swaps the source and the destination Ethernet addresses of packets before forwarding them.
565
566*   flowgen: multi-flow generation mode.
567    Originates a bunch of flows (varying destination IP addresses), and terminate receive traffic.
568
569*   rxonly: receives packets but doesn't transmit them.
570
571*   txonly: generates and transmits packets without receiving any.
572
573*   csum: changes the checksum field with HW or SW methods depending on the offload flags on the packet.
574
575*   icmpecho: receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies.
576
577
578Example:
579
580.. code-block:: console
581
582    testpmd> set fwd rxonly
583
584    Set rxonly packet forwarding mode
585
586mac_addr add
587~~~~~~~~~~~~
588
589Add an alternative MAC address to a port:
590
591mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
592
593mac_addr remove
594~~~~~~~~~~~~~~~
595
596Remove a MAC address from a port:
597
598mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
599
600mac_addr add(for VF)
601~~~~~~~~~~~~~~~~~~~~
602
603Add an alternative MAC address for a VF to a port:
604
605mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
606
607set port-uta
608~~~~~~~~~~~~
609
610Set the unicast hash filter(s) on/off for a port X:
611
612set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
613
614set promisc
615~~~~~~~~~~~
616
617Set the promiscuous mode on for a port or for all ports.
618In promiscuous mode packets are not dropped if they aren't for the specified MAC address:
619
620set promisc (port_id|all) (on|off)
621
622set allmulti
623~~~~~~~~~~~~
624
625Set the allmulti mode for a port or for all ports:
626
627set allmulti (port_id|all) (on|off)
628
629Same as the ifconfig (8) option. Controls how multicast packets are handled.
630
631set flow_ctrl rx
632~~~~~~~~~~~~~~~~
633
634Set the link flow control parameter on a port:
635
636set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
637(pause_time) (send_xon) (port_id)
638
639Where:
640
641high_water (integer): High threshold value to trigger XOFF.
642
643low_water (integer) : Low threshold value to trigger XON.
644
645pause_time (integer): Pause quota in the Pause frame.
646
647send_xon (0/1) : Send XON frame.
648
649mac_ctrl_frame_fwd : Enable receiving MAC control frames
650
651set pfc_ctrl rx
652~~~~~~~~~~~~~~~
653
654Set the priority flow control parameter on a port:
655
656set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ (pause_time) (priority) (port_id)
657
658Where:
659
660priority (0-7): VLAN User Priority.
661
662set stat_qmap
663~~~~~~~~~~~~~
664
665Set statistics mapping (qmapping 0..15) for RX/TX queue on port:
666
667set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
668
669For example, to set rx queue 2 on port 0 to mapping 5:
670
671.. code-block:: console
672
673     testpmd>set stat_qmap rx 0 2 5
674
675set port - rx/tx(for VF)
676~~~~~~~~~~~~~~~~~~~~~~~~
677
678Set VF receive/transmit from a port:
679
680set port (port_id) vf (vf_id) (rx|tx) (on|off)
681
682set port - mac address filter (for VF)
683~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
684
685Add/Remove unicast or multicast MAC addr filter for a VF:
686
687set port (port_id) vf (vf_id) (mac_addr)
688 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
689
690set port - rx mode(for VF)
691~~~~~~~~~~~~~~~~~~~~~~~~~~
692
693Set the VF receive mode of a port:
694
695set port (port_id) vf (vf_id) rxmode (AUPE|ROPE|BAM|MPE) (on|off)
696
697The available receive modes are:
698
699*  AUPE: accepts untagged VLAN.
700
701*  ROPE: accepts unicast hash.
702
703*  BAM: accepts broadcast packets
704
705*  MPE: accepts all multicast packets
706
707set port - tx_rate (for Queue)
708~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
709
710Set TX rate limitation for queue of a port ID:
711
712set port (port_id) queue (queue_id) rate (rate_value)
713
714set port - tx_rate (for VF)
715~~~~~~~~~~~~~~~~~~~~~~~~~~~
716
717Set TX rate limitation for queues in VF of a port ID:
718
719set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
720
721set port - mirror rule
722~~~~~~~~~~~~~~~~~~~~~~
723
724Set port or vlan type mirror rule for a port.
725
726set port (port_id) mirror-rule (rule_id) (pool-mirror|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
727
728For example to enable mirror traffic with vlan 0,1 to pool 0:
729
730.. code-block:: console
731
732    set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
733
734reset port - mirror rule
735~~~~~~~~~~~~~~~~~~~~~~~~
736
737Reset a mirror rule for a port.
738
739reset port (port_id) mirror-rule (rule_id)
740
741set flush_rx
742~~~~~~~~~~~~
743
744Flush (default) or don't flush RX streams before forwarding.
745Mainly used with PCAP drivers to avoid the default behavior of flushing the first 512 packets on RX streams.
746
747set flush_rx off
748
749set bypass mode
750~~~~~~~~~~~~~~~
751
752Set the bypass mode for the lowest port on bypass enabled NIC.
753
754set bypass mode (normal|bypass|isolate) (port_id)
755
756set bypass event
757~~~~~~~~~~~~~~~~
758
759Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled NIC where:
760
761*   timeout: enable bypass after watchdog timeout.
762
763*   os_on: enable bypass when OS/board is powered on.
764
765*   os_off: enable bypass when OS/board is powered off.
766
767*   power_on: enable bypass when power supply is turned on.
768
769*   power_off: enable bypass when power supply is turned off.
770
771set bypass event (timeout|os_on|os_off|power_on|power_off) mode (normal|bypass|isolate) (port_id)
772
773set bypass timeout
774~~~~~~~~~~~~~~~~~~
775
776Set the bypass watchdog timeout to 'n' seconds where 0 = instant.
777
778set bypass timeout (0|1.5|2|3|4|8|16|32)
779
780show bypass config
781~~~~~~~~~~~~~~~~~~
782
783Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC.
784
785show bypass config (port_id)
786
787set link up
788~~~~~~~~~~~
789
790Set link up for a port.
791
792set link-up port (port id)
793
794set link down
795~~~~~~~~~~~~~
796
797Set link down for a port.
798
799set link-down port (port id)
800
801Port Functions
802--------------
803
804The following sections show functions for configuring ports.
805
806.. note::
807
808    Port configuration changes only become active when forwarding is started/restarted.
809
810port attach
811~~~~~~~~~~~
812
813Attach a port specified by pci address or virtual device args.
814
815To attach a new pci device, the device should be recognized by kernel first.
816Then it should be moved under DPDK management.
817Finally the port can be attached to testpmd.
818On the other hand, to attach a port created by virtual device, above steps are not needed.
819
820port attach (identifier)
821
822For example, to attach a port whose pci address is 0000:02:00.0.
823
824.. code-block:: console
825
826    testpmd> port attach 0000:02:00.0
827    Attaching a new port...
828    ... snip ...
829    Port 0 is attached. Now total ports is 1
830    Done
831
832For example, to attach a port created by pcap PMD.
833
834.. code-block:: console
835
836    testpmd> port attach eth_pcap0,iface=eth0
837    Attaching a new port...
838    ... snip ...
839    Port 0 is attached. Now total ports is 1
840    Done
841
842In this case, identifier is "eth_pcap0,iface=eth0".
843This identifier format is the same as "--vdev" format of DPDK applications.
844
845port detach
846~~~~~~~~~~~
847
848Detach a specific port.
849
850Before detaching a port, the port should be closed.
851Also to remove a pci device completely from the system, first detach the port from testpmd.
852Then the device should be moved under kernel management.
853Finally the device can be removed using kernel pci hotplug functionality.
854On the other hand, to remove a port created by a virtual device, above steps are not needed.
855
856port detach (port_id)
857
858For example, to detach a port 0.
859
860.. code-block:: console
861
862    testpmd> port detach 0
863    Detaching a port...
864    ... snip ...
865    Done
866
867port start
868~~~~~~~~~~
869
870Start all ports or a specific port:
871
872port start (port_id|all)
873
874port stop
875~~~~~~~~~
876
877Stop all ports or a specific port:
878
879port stop (port_id|all)
880
881port close
882~~~~~~~~~~
883
884Close all ports or a specific port:
885
886port close (port_id|all)
887
888port start/stop queue
889~~~~~~~~~~~~~~~~~~~~~
890
891Start/stop a rx/tx queue on a specific port:
892
893port (port_id) (rxq|txq) (queue_id) (start|stop)
894
895Only take effect when port is started.
896
897port config - speed
898~~~~~~~~~~~~~~~~~~~
899
900Set the speed and duplex mode for all ports or a specific port:
901
902port config (port_id|all) speed (10|100|1000|10000|auto) duplex (half|full|auto)
903
904port config - queues/descriptors
905~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
906
907Set number of queues/descriptors for rxq, txq, rxd and txd:
908
909port config all (rxq|txq|rxd|txd) (value)
910
911This is equivalent to the --rxq, --txq, --rxd and --txd command-line options.
912
913port config - max-pkt-len
914~~~~~~~~~~~~~~~~~~~~~~~~~
915
916Set the maximum packet length:
917
918port config all max-pkt-len (value)
919
920This is equivalent to the --max-pkt-len command-line option.
921
922port config - CRC Strip
923~~~~~~~~~~~~~~~~~~~~~~~
924
925Set hardware CRC stripping on or off for all ports:
926
927port config all crc-strip (on|off)
928
929CRC stripping is off by default.
930
931The on option is equivalent to the --crc-strip command-line option.
932
933port config - RX Checksum
934~~~~~~~~~~~~~~~~~~~~~~~~~
935
936Set hardware RX checksum offload to on or off for all ports:
937
938port config all rx-cksum (on|off)
939
940Checksum offload is off by default.
941
942The on option is equivalent to the --enable-rx-cksum command-line option.
943
944port config - VLAN
945~~~~~~~~~~~~~~~~~~
946
947Set hardware VLAN on or off for all ports:
948
949port config all hw-vlan (on|off)
950
951Hardware VLAN is on by default.
952
953The off option is equivalent to the --disable-hw-vlan command-line option.
954
955port config - Drop Packets
956~~~~~~~~~~~~~~~~~~~~~~~~~~
957
958Set packet drop for packets with no descriptors on or off for all ports:
959
960port config all drop-en (on|off)
961
962Packet dropping for packets with no descriptors is off by default.
963
964The on option is equivalent to the --enable-drop-en command-line option.
965
966port config - RSS
967~~~~~~~~~~~~~~~~~
968
969Set the RSS (Receive Side Scaling) mode on or off:
970
971port config all rss (ip|udp|none)
972
973RSS is on by default.
974
975The off option is equivalent to the --disable-rss command-line option.
976
977port config - RSS Reta
978~~~~~~~~~~~~~~~~~~~~~~
979
980Set the RSS (Receive Side Scaling) redirection table:
981
982port config all rss reta (hash,queue)[,(hash,queue)]
983
984port config - DCB
985~~~~~~~~~~~~~~~~~
986
987Set the DCB mode for an individual port:
988
989port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
990
991The traffic class should be 4 or 8.
992
993port config - Burst
994~~~~~~~~~~~~~~~~~~~
995
996Set the number of packets per burst:
997
998port config all burst (value)
999
1000This is equivalent to the --burst command-line option.
1001
1002port config - Threshold
1003~~~~~~~~~~~~~~~~~~~~~~~
1004
1005Set thresholds for TX/RX queues:
1006
1007port config all (threshold) (value)
1008
1009Where the threshold type can be:
1010
1011*   txpt: Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
1012
1013*   txht: Set the host threshold register of the TX rings, 0 <= value <= 255.
1014
1015*   txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255.
1016
1017*   rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
1018
1019*   rxht: Set the host threshold register of the RX rings, 0 <= value <= 255.
1020
1021*   rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255.
1022
1023*   txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd.
1024
1025*   rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
1026
1027*   txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
1028    These threshold options are also available from the command-line.
1029
1030Link Bonding Functions
1031----------------------
1032
1033The Link Bonding functions make it possible to dynamically create and
1034manage link bonding devices from within testpmd interactive prompt.
1035
1036create bonded device
1037~~~~~~~~~~~~~~~~~~~~
1038
1039Create a new bonding device:
1040
1041create bonded device (mode) (socket)
1042
1043For example, to create a bonded device in mode 1 on socket 0.
1044
1045.. code-block:: console
1046
1047    testpmd> create bonded 1 0
1048    created new bonded device (port X)
1049
1050add bonding slave
1051~~~~~~~~~~~~~~~~~
1052
1053Adds Ethernet device to a Link Bonding device:
1054
1055add bonding slave (slave id) (port id)
1056
1057For example, to add Ethernet device (port 6) to a Link Bonding device (port 10).
1058
1059.. code-block:: console
1060
1061    testpmd> add bonding slave 6 10
1062
1063
1064remove bonding slave
1065~~~~~~~~~~~~~~~~~~~~
1066
1067Removes an Ethernet slave device from a Link Bonding device:
1068
1069remove bonding slave (slave id) (port id)
1070
1071For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10).
1072
1073.. code-block:: console
1074
1075    testpmd> remove bonding slave 6 10
1076
1077set bonding mode
1078~~~~~~~~~~~~~~~~
1079
1080Set the Link Bonding mode of a Link Bonding device:
1081
1082set bonding mode (value) (port id)
1083
1084For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3).
1085
1086.. code-block:: console
1087
1088    testpmd> set bonding mode 3 10
1089
1090set bonding primary
1091~~~~~~~~~~~~~~~~~~~
1092
1093Set an Ethernet slave device as the primary device on a Link Bonding device:
1094
1095set bonding primary (slave id) (port id)
1096
1097For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10).
1098
1099.. code-block:: console
1100
1101    testpmd> set bonding primary 6 10
1102
1103set bonding mac
1104~~~~~~~~~~~~~~~
1105
1106Set the MAC address of a Link Bonding device:
1107
1108set bonding mac (port id) (mac)
1109
1110For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01
1111
1112.. code-block:: console
1113
1114    testpmd> set bonding mac 10 00:00:00:00:00:01
1115
1116set bonding xmit_balance_policy
1117~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1118
1119Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:
1120
1121set bonding xmit_balance_policy (port_id) (l2|l23|l34)
1122
1123For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports )
1124
1125.. code-block:: console
1126
1127    testpmd> set bonding xmit_balance_policy 10 l34
1128
1129
1130set bonding mon_period
1131~~~~~~~~~~~~~~~~~~~~~~
1132
1133Set the link status monitoring polling period in milliseconds for a bonding devicie.
1134
1135This adds support for PMD slave devices which do not support link status interrupts.
1136When the mon_period is set to a value greater than 0 then all PMD's which do not support
1137link status ISR will be queried every polling interval to check if their link status has changed.
1138
1139set bonding mon_period (port_id) (value)
1140
1141For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms
1142
1143.. code-block:: console
1144
1145    testpmd> set bonding mon_period 5 150
1146
1147
1148show bonding config
1149~~~~~~~~~~~~~~~~~~~
1150
1151Show the current configuration of a Link Bonding device:
1152
1153show bonding config (port id)
1154
1155For example,
1156to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
1157in balance mode with a transmission policy of layer 2+3.
1158
1159.. code-block:: console
1160
1161    testpmd> show bonding config 9
1162        Bonding mode: 2
1163        Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
1164        Slaves (3): [1 3 4]
1165        Active Slaves (3): [1 3 4]
1166        Primary: [3]
1167
1168Register Functions
1169------------------
1170
1171The Register functions can be used to read from and write to registers on the network card referenced by a port number.
1172This is mainly useful for debugging purposes.
1173Reference should be made to the appropriate datasheet for the network card for details on the register addresses
1174and fields that can be accessed.
1175
1176read reg
1177~~~~~~~~
1178
1179Display the value of a port register:
1180
1181read reg (port_id) (address)
1182
1183For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel® 82599 10 GbE Controller:
1184
1185.. code-block:: console
1186
1187    testpmd> read reg 0 0xEE00
1188    port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
1189
1190read regfield
1191~~~~~~~~~~~~~
1192
1193Display a port register bit field:
1194
1195read regfield (port_id) (address) (bit_x) (bit_y)
1196
1197For example, reading the lowest two bits from the register in the example above:
1198
1199.. code-block:: console
1200
1201    testpmd> read regfield 0 0xEE00 0 1
1202    port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
1203
1204read regbit
1205~~~~~~~~~~~
1206
1207Display a single port register bit:
1208
1209read regbit (port_id) (address) (bit_x)
1210
1211For example, reading the lowest bit from the register in the example above:
1212
1213.. code-block:: console
1214
1215    testpmd> read regbit 0 0xEE00 0
1216    port 0 PCI register at offset 0xEE00: bit 0=1
1217
1218write reg
1219~~~~~~~~~
1220
1221Set the value of a port register:
1222
1223write reg (port_id) (address) (value)
1224
1225For example, to clear a register:
1226
1227.. code-block:: console
1228
1229    testpmd> write reg 0 0xEE00 0x0
1230    port 0 PCI register at offset 0xEE00: 0x00000000 (0)
1231
1232write regfield
1233~~~~~~~~~~~~~~
1234
1235Set bit field of a port register:
1236
1237write regfield (port_id) (address) (bit_x) (bit_y) (value)
1238
1239For example, writing to the register cleared in the example above:
1240
1241.. code-block:: console
1242
1243    testpmd> write regfield 0 0xEE00 0 1 2
1244    port 0 PCI register at offset 0xEE00: 0x00000002 (2)
1245
1246write regbit
1247~~~~~~~~~~~~
1248
1249Set single bit value of a port register:
1250
1251write regbit (port_id) (address) (bit_x) (value)
1252
1253For example, to set the high bit in the register from the example above:
1254
1255.. code-block:: console
1256
1257    testpmd> write regbit 0 0xEE00 31 1
1258    port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
1259
1260Filter Functions
1261----------------
1262
1263This section details the available filter functions that are available.
1264
1265ethertype_filter
1266~~~~~~~~~~~~~~~~~~~~
1267
1268Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue.
1269
1270ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) ethertype (ether_type) (drop|fwd) queue (queue_id)
1271
1272The available information parameters are:
1273
1274*   port_id:  the port which the Ethertype filter assigned on.
1275
1276*   mac_addr: compare destination mac address.
1277
1278*   mac_ignr: ignore destination mac address match.
1279
1280*   mac_address: destination mac address to match.
1281
1282*   ether_type: the EtherType value want to match,
1283    for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
1284
1285*   queue_id : The receive queue associated with this EtherType filter. It is meaningless when deleting or dropping.
1286
1287Example, to add/remove an ethertype filter rule:
1288
1289.. code-block:: console
1290
1291    testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3
1292    testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3
1293
12942tuple_filter
1295~~~~~~~~~~~~~~~~~
1296
1297Add or delete a 2-tuple filter,
1298which identify packets by specific protocol and destination TCP/UDP port
1299and forwards packets into one of the receive queues.
1300
13012tuple_filter (port_id) (add|del) dst_port (dst_port_value) protocol (protocol_value)
1302mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id)
1303
1304The available information parameters are:
1305
1306*   port_id: the port which the 2-tuple filter assigned on.
1307
1308*   dst_port_value: destination port in L4.
1309
1310*   protocol_value: IP L4 protocol.
1311
1312*   mask_value: participates in the match or not by bit for field above, 1b means participate.
1313
1314*   tcp_flags_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
1315
1316*   prio_value: priority of this filter.
1317
1318*   queue_id: The receive queue associated with this 2-tuple filter.
1319
1320Example, to add/remove an 2tuple filter rule:
1321
1322.. code-block:: console
1323
1324    testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3
1325    testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3
1326
13275tuple_filter
1328~~~~~~~~~~~~~~~~~
1329
1330Add or delete a 5-tuple filter,
1331which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
1332and routes packets into one of the receive queues.
1333
13345tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip (src_address) dst_port (dst_port_value) src_port (src_port_value)
1335protocol (protocol_value) mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id)
1336
1337The available information parameters are:
1338
1339*   port_id: the port which the 5-tuple filter assigned on.
1340
1341*   dst_address: destination IP address.
1342
1343*   src_address: source IP address.
1344
1345*   dst_port_value: TCP/UDP destination port.
1346
1347*   src_port_value: TCP/UDP source port.
1348
1349*   protocol_value: L4 protocol.
1350
1351*   mask_value: participates in the match or not by bit for field above, 1b means participate
1352
1353*   tcp_flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
1354
1355*   prio_value: the priority of this filter.
1356
1357*   queue_id: The receive queue associated with this 5-tuple filter.
1358
1359Example, to add/remove an 5tuple filter rule:
1360
1361.. code-block:: console
1362
1363    testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 dst_port 64 src_port 32 protocol 0x06 mask 0x1F flags 0x0 priority 3 queue 3
1364    testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 dst_port 64 src_port 32 protocol 0x06 mask 0x1F flags 0x0 priority 3 queue 3
1365
1366syn_filter
1367~~~~~~~~~~~~~~
1368
1369By SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue.
1370
1371syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
1372
1373The available information parameters are:
1374
1375*   port_id: the port which the SYN filter assigned on.
1376
1377*   high: this SYN filter has higher priority than other filters.
1378
1379*   low: this SYN filter has lower priority than other filters.
1380
1381*   queue_id: The receive queue associated with this SYN filter
1382
1383Example:
1384
1385.. code-block:: console
1386
1387    testpmd> syn_filter 0 add priority high queue 3
1388
1389flex_filter
1390~~~~~~~~~~~
1391
1392With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
1393and routes packets into one of the receive queues.
1394
1395flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value)
1396mask (mask_value) priority (prio_value) queue (queue_id)
1397
1398The available information parameters are:
1399
1400*   port_id: the port which the Flex filter is assigned on.
1401
1402*   len_value: filter length in bytes, no greater than 128.
1403
1404*   bytes_value: a string in hexadecimal, means the value the flex filter needs to match.
1405
1406*   mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match.
1407
1408*   prio_value: the priority of this filter.
1409
1410*   queue_id: the receive queue associated with this Flex filter.
1411
1412Example:
1413
1414.. code-block:: console
1415
1416   testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000
1417        mask 000C priority 3 queue 3
1418
1419   testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000
1420        mask 000C priority 3 queue 3
1421
1422flow_director_filter
1423~~~~~~~~~~~~~~~~~~~~
1424
1425The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
1426
1427Two types of filtering are supported which are referred to as Perfect Match and Signature filters, the match mode
1428is set by the --pkt-filter-mode command-line parameter:
1429
1430*   Perfect match filters.
1431    The hardware checks a match between the masked fields of the received packets and the programmed filters.
1432
1433*   Signature filters.
1434    The hardware checks a match between a hash-based signature of the masked fields of the received packet.
1435
1436The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
1437per flow type and the flexible payload. The Flow Director can also mask out parts of all of these fields so that filters
1438are only applied to certain fields or parts of the fields.
1439
1440Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
1441
1442# Commands to add flow director filters of different flow types.
1443
1444flow_director_filter (port_id) (add|del|update) flow (ip4|ip4-frag|ip6|ip6-frag)
1445src (src_ip_address) dst (dst_ip_address) vlan (vlan_value) flexbytes (flexbytes_value)
1446(drop|fwd) queue (queue_id) fd_id (fd_id_value)
1447
1448flow_director_filter (port_id) (add|del|update) flow (udp4|tcp4|udp6|tcp6)
1449src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) vlan (vlan_value)
1450flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value)
1451
1452flow_director_filter (port_id) (add|del|update) flow (sctp4|sctp6)
1453src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag)
1454vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value)
1455
1456For example, to add an udp flow type filter:
1457
1458.. code-block:: console
1459
1460    testpmd> flow_director_filter 0 add flow udp4 src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1
1461
1462For example, add an ip4 flow type filter:
1463
1464.. code-block:: console
1465
1466    testpmd> flow_director_filter 0 add flow ip4 src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1
1467
1468flush_flow_director
1469~~~~~~~~~~~~~~~~~~~
1470
1471flush all flow director filters on a device:
1472
1473flush_flow_director (port_id)
1474
1475Example, to flush all flow director filter on port 0:
1476
1477.. code-block:: console
1478
1479   testpmd> flush_flow_director 0
1480
1481flow_director_mask
1482~~~~~~~~~~~~~~~~~~
1483
1484set flow director's masks on match input set
1485
1486flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
1487
1488Example, to set flow director mask on port 0:
1489
1490.. code-block:: console
1491
1492   testpmd> flow_director_mask 0 vlan 0xefff src_mask 255.255.255.255 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF dst_mask 255.255.255.255 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
1493
1494
1495flow_director_flex_mask
1496~~~~~~~~~~~~~~~~~~~~~~~
1497
1498set masks of flow director's flexible payload based on certain flow type:
1499
1500flow_director_flex_mask (port_id) flow (raw|ip4|ip4-frag|tcp4|udp4|sctp4|ip6|ip6-frag|tcp6|udp6|sctp6|all) (mask)
1501
1502Example, to set flow director's udpv4 flex mask on port 0:
1503
1504.. code-block:: console
1505
1506   testpmd> flow_director_flex_mask 0 flow all (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
1507
1508
1509flow_director_flex_payload
1510~~~~~~~~~~~~~~~~~~~~~~~~~~
1511
1512Configure flexible payload selection.
1513
1514flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
1515
1516For example, to select the first 16 bytes from the offset 4 (bytes) of packet’s payload as flexible payload.
1517
1518.. code-block:: console
1519
1520   testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
1521