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