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