app/testpmd: add tx_first burst number option
[dpdk.git] / doc / guides / testpmd_app_ug / testpmd_funcs.rst
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
33 Testpmd Runtime Functions
34 =========================
35
36 Where the testpmd application is started in interactive mode, (``-i|--interactive``),
37 it displays a prompt that can be used to start and stop forwarding,
38 configure the application, display statistics, set the Flow Director and other tasks::
39
40    testpmd>
41
42 The testpmd prompt has some, limited, readline support.
43 Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
44 as well as access to the command history via the up-arrow.
45
46 There is also support for tab completion.
47 If 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
67 In the real ``testpmd>`` prompt these commands should be on a single line.
68
69 Help Functions
70 --------------
71
72 The testpmd has on-line help for the functions that are available at runtime.
73 These 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
88 Control Functions
89 -----------------
90
91 start
92 ~~~~~
93
94 Start packet forwarding with current configuration::
95
96    testpmd> start
97
98 start tx_first
99 ~~~~~~~~~~~~~~
100
101 Start packet forwarding with current configuration after sending specified number of bursts of packets::
102
103    testpmd> start tx_first (""|burst_num)
104
105 The default burst number is 1 when ``burst_num`` not presented.
106
107 stop
108 ~~~~
109
110 Stop packet forwarding, and display accumulated statistics::
111
112    testpmd> stop
113
114 quit
115 ~~~~
116
117 Quit to prompt::
118
119    testpmd> quit
120
121
122 Display Functions
123 -----------------
124
125 The functions in the following sections are used to display information about the
126 testpmd configuration or the NIC status.
127
128 show port
129 ~~~~~~~~~
130
131 Display information for a given port or all ports::
132
133    testpmd> show port (info|stats|fdir|stat_qmap|dcb_tc) (port_id|all)
134
135 The 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
147 For 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
183 show port rss reta
184 ~~~~~~~~~~~~~~~~~~
185
186 Display the rss redirection table entry indicated by masks on port X::
187
188    testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
189
190 size is used to indicate the hardware supported reta size
191
192 show port rss-hash
193 ~~~~~~~~~~~~~~~~~~
194
195 Display 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
199 clear port
200 ~~~~~~~~~~
201
202 Clear 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
206 For example::
207
208    testpmd> clear port stats all
209
210 show (rxq|txq)
211 ~~~~~~~~~~~~~~
212
213 Display information for a given port's RX/TX queue::
214
215    testpmd> show (rxq|txq) info (port_id) (queue_id)
216
217 show config
218 ~~~~~~~~~~~
219
220 Displays the configuration of the application.
221 The configuration comes from the command-line, the runtime or the application defaults::
222
223    testpmd> show config (rxtx|cores|fwd|txpkts)
224
225 The 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
235 For 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
249 set fwd
250 ~~~~~~~
251
252 Set 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
259 The 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
283 Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``.
284
285 Example::
286
287    testpmd> set fwd rxonly
288
289    Set rxonly packet forwarding mode
290
291
292 read rxd
293 ~~~~~~~~
294
295 Display an RX descriptor for a port RX queue::
296
297    testpmd> read rxd (port_id) (queue_id) (rxd_id)
298
299 For example::
300
301    testpmd> read rxd 0 0 4
302         0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
303
304 read txd
305 ~~~~~~~~
306
307 Display a TX descriptor for a port TX queue::
308
309    testpmd> read txd (port_id) (queue_id) (txd_id)
310
311 For example::
312
313    testpmd> read txd 0 0 4
314         0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
315
316
317 Configuration Functions
318 -----------------------
319
320 The testpmd application can be configured from the runtime as well as from the command-line.
321
322 This 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
328 set default
329 ~~~~~~~~~~~
330
331 Reset forwarding to the default configuration::
332
333    testpmd> set default
334
335 set verbose
336 ~~~~~~~~~~~
337
338 Set the debug verbosity level::
339
340    testpmd> set verbose (level)
341
342 Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
343
344 set nbport
345 ~~~~~~~~~~
346
347 Set the number of ports used by the application:
348
349 set nbport (num)
350
351 This is equivalent to the ``--nb-ports`` command-line option.
352
353 set nbcore
354 ~~~~~~~~~~
355
356 Set the number of cores used by the application::
357
358    testpmd> set nbcore (num)
359
360 This 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
366 set coremask
367 ~~~~~~~~~~~~
368
369 Set the forwarding cores hexadecimal mask::
370
371    testpmd> set coremask (mask)
372
373 This 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
379 set portmask
380 ~~~~~~~~~~~~
381
382 Set the forwarding ports hexadecimal mask::
383
384    testpmd> set portmask (mask)
385
386 This is equivalent to the ``--portmask`` command-line option.
387
388 set burst
389 ~~~~~~~~~
390
391 Set number of packets per burst::
392
393    testpmd> set burst (num)
394
395 This is equivalent to the ``--burst command-line`` option.
396
397 When 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
401 set txpkts
402 ~~~~~~~~~~
403
404 Set the length of each segment of the TX-ONLY packets::
405
406    testpmd> set txpkts (x[,y]*)
407
408 Where x[,y]* represents a CSV list of values, without white space.
409
410 set txsplit
411 ~~~~~~~~~~~
412
413 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
414
415    testpmd> set txsplit (off|on|rand)
416
417 Where:
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
427 set corelist
428 ~~~~~~~~~~~~
429
430 Set the list of forwarding cores::
431
432    testpmd> set corelist (x[,y]*)
433
434 For 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
451 set portlist
452 ~~~~~~~~~~~~
453
454 Set the list of forwarding ports::
455
456    testpmd> set portlist (x[,y]*)
457
458 For 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
472 vlan set strip
473 ~~~~~~~~~~~~~~
474
475 Set the VLAN strip on a port::
476
477    testpmd> vlan set strip (on|off) (port_id)
478
479 vlan set stripq
480 ~~~~~~~~~~~~~~~
481
482 Set the VLAN strip for a queue on a port::
483
484    testpmd> vlan set stripq (on|off) (port_id,queue_id)
485
486 vlan set filter
487 ~~~~~~~~~~~~~~~
488
489 Set the VLAN filter on a port::
490
491    testpmd> vlan set filter (on|off) (port_id)
492
493 vlan set qinq
494 ~~~~~~~~~~~~~
495
496 Set the VLAN QinQ (extended queue in queue) on for a port::
497
498    testpmd> vlan set qinq (on|off) (port_id)
499
500 vlan set tpid
501 ~~~~~~~~~~~~~
502
503 Set 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
511 rx_vlan add
512 ~~~~~~~~~~~
513
514 Add 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
524 rx_vlan rm
525 ~~~~~~~~~~
526
527 Remove 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
531 rx_vlan add (for VF)
532 ~~~~~~~~~~~~~~~~~~~~
533
534 Add 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
538 rx_vlan rm (for VF)
539 ~~~~~~~~~~~~~~~~~~~
540
541 Remove 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
545 tunnel_filter add
546 ~~~~~~~~~~~~~~~~~
547
548 Add 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
554 The 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
576 Example::
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
583 tunnel_filter remove
584 ~~~~~~~~~~~~~~~~~~~~
585
586 Remove 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
592 rx_vxlan_port add
593 ~~~~~~~~~~~~~~~~~
594
595 Add an UDP port for VXLAN packet filter on a port::
596
597    testpmd> rx_vxlan_port add (udp_port) (port_id)
598
599 rx_vxlan_port remove
600 ~~~~~~~~~~~~~~~~~~~~
601
602 Remove an UDP port for VXLAN packet filter on a port::
603
604    testpmd> rx_vxlan_port rm (udp_port) (port_id)
605
606 tx_vlan set
607 ~~~~~~~~~~~
608
609 Set 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
613 For example, set a single VLAN ID (5) insertion on port 0::
614
615    tx_vlan set 0 5
616
617 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
618
619    tx_vlan set 1 2 3
620
621
622 tx_vlan set pvid
623 ~~~~~~~~~~~~~~~~
624
625 Set 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
629 tx_vlan reset
630 ~~~~~~~~~~~~~
631
632 Disable hardware insertion of a VLAN header in packets sent on a port::
633
634    testpmd> tx_vlan reset (port_id)
635
636 csum set
637 ~~~~~~~~
638
639 Select hardware or software calculation of the checksum when
640 transmitting a packet using the ``csum`` forwarding engine::
641
642    testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)
643
644 Where:
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
656 csum parse-tunnel
657 ~~~~~~~~~~~~~~~~~
658
659 Define how tunneled packets should be handled by the csum forward
660 engine::
661
662    testpmd> csum parse-tunnel (on|off) (tx_port_id)
663
664 If enabled, the csum forward engine will try to recognize supported
665 tunnel headers (vxlan, gre, ipip).
666
667 If disabled, treat tunnel packets as non-tunneled packets (a inner
668 header 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
674 Example:
675
676 Consider 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
687 csum show
688 ~~~~~~~~~
689
690 Display tx checksum offload configuration::
691
692    testpmd> csum show (port_id)
693
694 tso set
695 ~~~~~~~
696
697 Enable 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
705 tso show
706 ~~~~~~~~
707
708 Display the status of TCP Segmentation Offload::
709
710    testpmd> tso show (port_id)
711
712 mac_addr add
713 ~~~~~~~~~~~~
714
715 Add an alternative MAC address to a port::
716
717    testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
718
719 mac_addr remove
720 ~~~~~~~~~~~~~~~
721
722 Remove a MAC address from a port::
723
724    testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
725
726 mac_addr add(for VF)
727 ~~~~~~~~~~~~~~~~~~~~
728
729 Add 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
733 set port-uta
734 ~~~~~~~~~~~~
735
736 Set 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
740 set promisc
741 ~~~~~~~~~~~
742
743 Set the promiscuous mode on for a port or for all ports.
744 In 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
748 set allmulti
749 ~~~~~~~~~~~~
750
751 Set the allmulti mode for a port or for all ports::
752
753    testpmd> set allmulti (port_id|all) (on|off)
754
755 Same as the ifconfig (8) option. Controls how multicast packets are handled.
756
757 set flow_ctrl rx
758 ~~~~~~~~~~~~~~~~
759
760 Set 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
766 Where:
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
780 set pfc_ctrl rx
781 ~~~~~~~~~~~~~~~
782
783 Set 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
788 Where:
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
798 set stat_qmap
799 ~~~~~~~~~~~~~
800
801 Set 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
805 For example, to set rx queue 2 on port 0 to mapping 5::
806
807    testpmd>set stat_qmap rx 0 2 5
808
809 set port - rx/tx (for VF)
810 ~~~~~~~~~~~~~~~~~~~~~~~~~
811
812 Set VF receive/transmit from a port::
813
814    testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
815
816 set port - mac address filter (for VF)
817 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
818
819 Add/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
824 set port - rx mode(for VF)
825 ~~~~~~~~~~~~~~~~~~~~~~~~~~
826
827 Set 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
832 The 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
842 set port - tx_rate (for Queue)
843 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
844
845 Set TX rate limitation for a queue on a port::
846
847    testpmd> set port (port_id) queue (queue_id) rate (rate_value)
848
849 set port - tx_rate (for VF)
850 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
851
852 Set 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
856 set port - mirror rule
857 ~~~~~~~~~~~~~~~~~~~~~~
858
859 Set 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
865 Set 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
870 For 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
874 reset port - mirror rule
875 ~~~~~~~~~~~~~~~~~~~~~~~~
876
877 Reset a mirror rule for a port::
878
879    testpmd> reset port (port_id) mirror-rule (rule_id)
880
881 set flush_rx
882 ~~~~~~~~~~~~
883
884 Set the flush on RX streams before forwarding.
885 The default is flush ``on``.
886 Mainly 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
890 set bypass mode
891 ~~~~~~~~~~~~~~~
892
893 Set the bypass mode for the lowest port on bypass enabled NIC::
894
895    testpmd> set bypass mode (normal|bypass|isolate) (port_id)
896
897 set bypass event
898 ~~~~~~~~~~~~~~~~
899
900 Set 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
905 Where:
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
918 set bypass timeout
919 ~~~~~~~~~~~~~~~~~~
920
921 Set 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
925 show bypass config
926 ~~~~~~~~~~~~~~~~~~
927
928 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
929
930    testpmd> show bypass config (port_id)
931
932 set link up
933 ~~~~~~~~~~~
934
935 Set link up for a port::
936
937    testpmd> set link-up port (port id)
938
939 set link down
940 ~~~~~~~~~~~~~
941
942 Set link down for a port::
943
944    testpmd> set link-down port (port id)
945
946 E-tag set
947 ~~~~~~~~~
948
949 Enable 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
953 Disable E-tag insertion for a VF on a port::
954
955    testpmd> E-tag set insertion off port (port_id) vf (vf_id)
956
957 Enable/disable E-tag stripping on a port::
958
959    testpmd> E-tag set stripping (on|off) port (port_id)
960
961 Enable/disable E-tag based forwarding on a port::
962
963    testpmd> E-tag set forwarding (on|off) port (port_id)
964
965 Add 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
969 Delete an E-tag forwarding filter on a port::
970    testpmd> E-tag set filter del e-tag-id (value) port (port_id)
971
972
973 Port Functions
974 --------------
975
976 The following sections show functions for configuring ports.
977
978 .. note::
979
980    Port configuration changes only become active when forwarding is started/restarted.
981
982 port attach
983 ~~~~~~~~~~~
984
985 Attach a port specified by pci address or virtual device args::
986
987    testpmd> port attach (identifier)
988
989 To attach a new pci device, the device should be recognized by kernel first.
990 Then it should be moved under DPDK management.
991 Finally the port can be attached to testpmd.
992
993 For 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
1019 To attach a port created by virtual device, above steps are not needed.
1020
1021 For 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
1036 For 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
1047 In this case, identifier is ``eth_pcap0``.
1048 This identifier format is the same as ``--vdev`` format of DPDK applications.
1049
1050 For example, to re-attach a bonded port which has been previously detached,
1051 the 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
1063 port detach
1064 ~~~~~~~~~~~
1065
1066 Detach a specific port::
1067
1068    testpmd> port detach (port_id)
1069
1070 Before detaching a port, the port should be stopped and closed.
1071
1072 For 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
1092 For 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
1109 To remove a pci device completely from the system, first detach the port from testpmd.
1110 Then the device should be moved under kernel management.
1111 Finally the device can be removed using kernel pci hotplug functionality.
1112
1113 For 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
1129 To remove a port created by a virtual device, above steps are not needed.
1130
1131 port start
1132 ~~~~~~~~~~
1133
1134 Start all ports or a specific port::
1135
1136    testpmd> port start (port_id|all)
1137
1138 port stop
1139 ~~~~~~~~~
1140
1141 Stop all ports or a specific port::
1142
1143    testpmd> port stop (port_id|all)
1144
1145 port close
1146 ~~~~~~~~~~
1147
1148 Close all ports or a specific port::
1149
1150    testpmd> port close (port_id|all)
1151
1152 port start/stop queue
1153 ~~~~~~~~~~~~~~~~~~~~~
1154
1155 Start/stop a rx/tx queue on a specific port::
1156
1157    testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1158
1159 Only take effect when port is started.
1160
1161 port config - speed
1162 ~~~~~~~~~~~~~~~~~~~
1163
1164 Set 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
1169 port config - queues/descriptors
1170 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1171
1172 Set number of queues/descriptors for rxq, txq, rxd and txd::
1173
1174    testpmd> port config all (rxq|txq|rxd|txd) (value)
1175
1176 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1177
1178 port config - max-pkt-len
1179 ~~~~~~~~~~~~~~~~~~~~~~~~~
1180
1181 Set the maximum packet length::
1182
1183    testpmd> port config all max-pkt-len (value)
1184
1185 This is equivalent to the ``--max-pkt-len`` command-line option.
1186
1187 port config - CRC Strip
1188 ~~~~~~~~~~~~~~~~~~~~~~~
1189
1190 Set hardware CRC stripping on or off for all ports::
1191
1192    testpmd> port config all crc-strip (on|off)
1193
1194 CRC stripping is off by default.
1195
1196 The ``on`` option is equivalent to the ``--crc-strip`` command-line option.
1197
1198 port config - scatter
1199 ~~~~~~~~~~~~~~~~~~~~~~~
1200
1201 Set RX scatter mode on or off for all ports::
1202
1203    testpmd> port config all scatter (on|off)
1204
1205 RX scatter mode is off by default.
1206
1207 The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1208
1209 port config - TX queue flags
1210 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1211
1212 Set a hexadecimal bitmap of TX queue flags for all ports::
1213
1214    testpmd> port config all txqflags value
1215
1216 This command is equivalent to the ``--txqflags`` command-line option.
1217
1218 port config - RX Checksum
1219 ~~~~~~~~~~~~~~~~~~~~~~~~~
1220
1221 Set hardware RX checksum offload to on or off for all ports::
1222
1223    testpmd> port config all rx-cksum (on|off)
1224
1225 Checksum offload is off by default.
1226
1227 The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1228
1229 port config - VLAN
1230 ~~~~~~~~~~~~~~~~~~
1231
1232 Set hardware VLAN on or off for all ports::
1233
1234    testpmd> port config all hw-vlan (on|off)
1235
1236 Hardware VLAN is on by default.
1237
1238 The ``off`` option is equivalent to the ``--disable-hw-vlan`` command-line option.
1239
1240 port config - VLAN filter
1241 ~~~~~~~~~~~~~~~~~~~~~~~~~
1242
1243 Set hardware VLAN filter on or off for all ports::
1244
1245    testpmd> port config all hw-vlan-filter (on|off)
1246
1247 Hardware VLAN filter is on by default.
1248
1249 The ``off`` option is equivalent to the ``--disable-hw-vlan-filter`` command-line option.
1250
1251 port config - VLAN strip
1252 ~~~~~~~~~~~~~~~~~~~~~~~~
1253
1254 Set hardware VLAN strip on or off for all ports::
1255
1256    testpmd> port config all hw-vlan-strip (on|off)
1257
1258 Hardware VLAN strip is on by default.
1259
1260 The ``off`` option is equivalent to the ``--disable-hw-vlan-strip`` command-line option.
1261
1262 port config - VLAN extend
1263 ~~~~~~~~~~~~~~~~~~~~~~~~~
1264
1265 Set hardware VLAN extend on or off for all ports::
1266
1267    testpmd> port config all hw-vlan-extend (on|off)
1268
1269 Hardware VLAN extend is off by default.
1270
1271 The ``off`` option is equivalent to the ``--disable-hw-vlan-extend`` command-line option.
1272
1273 port config - Drop Packets
1274 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1275
1276 Set packet drop for packets with no descriptors on or off for all ports::
1277
1278    testpmd> port config all drop-en (on|off)
1279
1280 Packet dropping for packets with no descriptors is off by default.
1281
1282 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1283
1284 port config - RSS
1285 ~~~~~~~~~~~~~~~~~
1286
1287 Set the RSS (Receive Side Scaling) mode on or off::
1288
1289    testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|none)
1290
1291 RSS is on by default.
1292
1293 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1294
1295 port config - RSS Reta
1296 ~~~~~~~~~~~~~~~~~~~~~~
1297
1298 Set the RSS (Receive Side Scaling) redirection table::
1299
1300    testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1301
1302 port config - DCB
1303 ~~~~~~~~~~~~~~~~~
1304
1305 Set the DCB mode for an individual port::
1306
1307    testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1308
1309 The traffic class should be 4 or 8.
1310
1311 port config - Burst
1312 ~~~~~~~~~~~~~~~~~~~
1313
1314 Set the number of packets per burst::
1315
1316    testpmd> port config all burst (value)
1317
1318 This is equivalent to the ``--burst`` command-line option.
1319
1320 port config - Threshold
1321 ~~~~~~~~~~~~~~~~~~~~~~~
1322
1323 Set thresholds for TX/RX queues::
1324
1325    testpmd> port config all (threshold) (value)
1326
1327 Where 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
1347 These threshold options are also available from the command-line.
1348
1349 port config - E-tag
1350 ~~~~~~~~~~~~~~~~~~~
1351
1352 Set the value of ether-type for E-tag::
1353
1354    testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1355
1356 Enable/disable the E-tag support::
1357
1358    testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1359
1360
1361 Link Bonding Functions
1362 ----------------------
1363
1364 The Link Bonding functions make it possible to dynamically create and
1365 manage link bonding devices from within testpmd interactive prompt.
1366
1367 create bonded device
1368 ~~~~~~~~~~~~~~~~~~~~
1369
1370 Create a new bonding device::
1371
1372    testpmd> create bonded device (mode) (socket)
1373
1374 For 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
1379 add bonding slave
1380 ~~~~~~~~~~~~~~~~~
1381
1382 Adds Ethernet device to a Link Bonding device::
1383
1384    testpmd> add bonding slave (slave id) (port id)
1385
1386 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
1387
1388    testpmd> add bonding slave 6 10
1389
1390
1391 remove bonding slave
1392 ~~~~~~~~~~~~~~~~~~~~
1393
1394 Removes an Ethernet slave device from a Link Bonding device::
1395
1396    testpmd> remove bonding slave (slave id) (port id)
1397
1398 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
1399
1400    testpmd> remove bonding slave 6 10
1401
1402 set bonding mode
1403 ~~~~~~~~~~~~~~~~
1404
1405 Set the Link Bonding mode of a Link Bonding device::
1406
1407    testpmd> set bonding mode (value) (port id)
1408
1409 For 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
1413 set bonding primary
1414 ~~~~~~~~~~~~~~~~~~~
1415
1416 Set an Ethernet slave device as the primary device on a Link Bonding device::
1417
1418    testpmd> set bonding primary (slave id) (port id)
1419
1420 For 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
1424 set bonding mac
1425 ~~~~~~~~~~~~~~~
1426
1427 Set the MAC address of a Link Bonding device::
1428
1429    testpmd> set bonding mac (port id) (mac)
1430
1431 For 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
1435 set bonding xmit_balance_policy
1436 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1437
1438 Set 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
1442 For 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
1447 set bonding mon_period
1448 ~~~~~~~~~~~~~~~~~~~~~~
1449
1450 Set the link status monitoring polling period in milliseconds for a bonding device.
1451
1452 This adds support for PMD slave devices which do not support link status interrupts.
1453 When the mon_period is set to a value greater than 0 then all PMD's which do not support
1454 link 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
1458 For 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
1463 show bonding config
1464 ~~~~~~~~~~~~~~~~~~~
1465
1466 Show the current configuration of a Link Bonding device::
1467
1468    testpmd> show bonding config (port id)
1469
1470 For example,
1471 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
1472 in 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
1482 Register Functions
1483 ------------------
1484
1485 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
1486 This is mainly useful for debugging purposes.
1487 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
1488 and fields that can be accessed.
1489
1490 read reg
1491 ~~~~~~~~
1492
1493 Display the value of a port register::
1494
1495    testpmd> read reg (port_id) (address)
1496
1497 For 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
1502 read regfield
1503 ~~~~~~~~~~~~~
1504
1505 Display a port register bit field::
1506
1507    testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
1508
1509 For 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
1514 read regbit
1515 ~~~~~~~~~~~
1516
1517 Display a single port register bit::
1518
1519    testpmd> read regbit (port_id) (address) (bit_x)
1520
1521 For 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
1526 write reg
1527 ~~~~~~~~~
1528
1529 Set the value of a port register::
1530
1531    testpmd> write reg (port_id) (address) (value)
1532
1533 For example, to clear a register::
1534
1535    testpmd> write reg 0 0xEE00 0x0
1536    port 0 PCI register at offset 0xEE00: 0x00000000 (0)
1537
1538 write regfield
1539 ~~~~~~~~~~~~~~
1540
1541 Set bit field of a port register::
1542
1543    testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
1544
1545 For 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
1550 write regbit
1551 ~~~~~~~~~~~~
1552
1553 Set single bit value of a port register::
1554
1555    testpmd> write regbit (port_id) (address) (bit_x) (value)
1556
1557 For 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
1563 Filter Functions
1564 ----------------
1565
1566 This section details the available filter functions that are available.
1567
1568 ethertype_filter
1569 ~~~~~~~~~~~~~~~~~~~~
1570
1571 Add 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
1576 The 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
1592 Example, 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
1600 2tuple_filter
1601 ~~~~~~~~~~~~~~~~~
1602
1603 Add or delete a 2-tuple filter,
1604 which identifies packets by specific protocol and destination TCP/UDP port
1605 and 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
1612 The 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
1628 Example, 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
1636 5tuple_filter
1637 ~~~~~~~~~~~~~~~~~
1638
1639 Add or delete a 5-tuple filter,
1640 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
1641 and 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
1649 The 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
1671 Example, 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
1681 syn_filter
1682 ~~~~~~~~~~
1683
1684 Using 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
1688 The 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
1698 Example::
1699
1700    testpmd> syn_filter 0 add priority high queue 3
1701
1702 flex_filter
1703 ~~~~~~~~~~~
1704
1705 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
1706 and 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
1711 The 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
1725 Example::
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
1736 flow_director_filter
1737 ~~~~~~~~~~~~~~~~~~~~
1738
1739 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
1740
1741 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
1742 Perfect-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
1759 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
1760 per flow type and the flexible payload.
1761
1762 The Flow Director can also mask out parts of all of these fields so that filters
1763 are only applied to certain fields or parts of the fields.
1764
1765 Different 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
1811 For 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
1817 For 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
1823 flush_flow_director
1824 ~~~~~~~~~~~~~~~~~~~
1825
1826 Flush all flow director filters on a device::
1827
1828    testpmd> flush_flow_director (port_id)
1829
1830 Example, to flush all flow director filter on port 0::
1831
1832    testpmd> flush_flow_director 0
1833
1834 flow_director_mask
1835 ~~~~~~~~~~~~~~~~~~
1836
1837 Set 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
1850 Example, 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
1858 flow_director_flex_mask
1859 ~~~~~~~~~~~~~~~~~~~~~~~
1860
1861 set 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
1868 Example, 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
1874 flow_director_flex_payload
1875 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1876
1877 Configure flexible payload selection::
1878
1879    flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
1880
1881 For 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
1886 get_sym_hash_ena_per_port
1887 ~~~~~~~~~~~~~~~~~~~~~~~~~
1888
1889 Get symmetric hash enable configuration per port::
1890
1891    get_sym_hash_ena_per_port (port_id)
1892
1893 For example, to get symmetric hash enable configuration of port 1::
1894
1895    testpmd> get_sym_hash_ena_per_port 1
1896
1897 set_sym_hash_ena_per_port
1898 ~~~~~~~~~~~~~~~~~~~~~~~~~
1899
1900 Set symmetric hash enable configuration per port to enable or disable::
1901
1902    set_sym_hash_ena_per_port (port_id) (enable|disable)
1903
1904 For example, to set symmetric hash enable configuration of port 1 to enable::
1905
1906    testpmd> set_sym_hash_ena_per_port 1 enable
1907
1908 get_hash_global_config
1909 ~~~~~~~~~~~~~~~~~~~~~~
1910
1911 Get the global configurations of hash filters::
1912
1913    get_hash_global_config (port_id)
1914
1915 For example, to get the global configurations of hash filters of port 1::
1916
1917    testpmd> get_hash_global_config 1
1918
1919 set_hash_global_config
1920 ~~~~~~~~~~~~~~~~~~~~~~
1921
1922 Set 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
1929 For 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
1933 set_hash_input_set
1934 ~~~~~~~~~~~~~~~~~~
1935
1936 Set 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
1946 For 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
1950 set_fdir_input_set
1951 ~~~~~~~~~~~~~~~~~~
1952
1953 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
1954 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
1955
1956 Set 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
1965 For 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
1969 global_config
1970 ~~~~~~~~~~~~~
1971
1972 Set different GRE key length for input set::
1973
1974    global_config (port_id) gre-key-len (number in bytes)
1975
1976 For 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