app/testpmd: set packet dump based on verbosity level
[dpdk.git] / doc / guides / testpmd_app_ug / testpmd_funcs.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2010-2016 Intel Corporation.
3
4 .. _testpmd_runtime:
5
6 Testpmd Runtime Functions
7 =========================
8
9 Where the testpmd application is started in interactive mode, (``-i|--interactive``),
10 it displays a prompt that can be used to start and stop forwarding,
11 configure the application, display statistics (including the extended NIC
12 statistics aka xstats) , set the Flow Director and other tasks::
13
14    testpmd>
15
16 The testpmd prompt has some, limited, readline support.
17 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
18 as well as access to the command history via the up-arrow.
19
20 There is also support for tab completion.
21 If you type a partial command and hit ``<TAB>`` you get a list of the available completions:
22
23 .. code-block:: console
24
25    testpmd> show port <TAB>
26
27        info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
28        info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
29        stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
30        stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
31        ...
32
33
34 .. note::
35
36    Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes::
37
38       testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
39                (pause_time) (send_xon) (port_id)
40
41 In the real ``testpmd>`` prompt these commands should be on a single line.
42
43 Help Functions
44 --------------
45
46 The testpmd has on-line help for the functions that are available at runtime.
47 These are divided into sections and can be accessed using help, help section or help all:
48
49 .. code-block:: console
50
51    testpmd> help
52
53        help control    : Start and stop forwarding.
54        help display    : Displaying port, stats and config information.
55        help config     : Configuration information.
56        help ports      : Configuring ports.
57        help registers  : Reading and setting port registers.
58        help filters    : Filters configuration help.
59        help all        : All of the above sections.
60
61
62 Command File Functions
63 ----------------------
64
65 To facilitate loading large number of commands or to avoid cutting and pasting where not
66 practical or possible testpmd supports alternative methods for executing commands.
67
68 * If started with the ``--cmdline-file=FILENAME`` command line argument testpmd
69   will execute all CLI commands contained within the file immediately before
70   starting packet forwarding or entering interactive mode.
71
72 .. code-block:: console
73
74    ./testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt
75    Interactive-mode selected
76    CLI commands to be read from /home/ubuntu/flow-create-commands.txt
77    Configuring Port 0 (socket 0)
78    Port 0: 7C:FE:90:CB:74:CE
79    Configuring Port 1 (socket 0)
80    Port 1: 7C:FE:90:CB:74:CA
81    Checking link statuses...
82    Port 0 Link Up - speed 10000 Mbps - full-duplex
83    Port 1 Link Up - speed 10000 Mbps - full-duplex
84    Done
85    Flow rule #0 created
86    Flow rule #1 created
87    ...
88    ...
89    Flow rule #498 created
90    Flow rule #499 created
91    Read all CLI commands from /home/ubuntu/flow-create-commands.txt
92    testpmd>
93
94
95 * At run-time additional commands can be loaded in bulk by invoking the ``load FILENAME``
96   command.
97
98 .. code-block:: console
99
100    testpmd> load /home/ubuntu/flow-create-commands.txt
101    Flow rule #0 created
102    Flow rule #1 created
103    ...
104    ...
105    Flow rule #498 created
106    Flow rule #499 created
107    Read all CLI commands from /home/ubuntu/flow-create-commands.txt
108    testpmd>
109
110
111 In all cases output from any included command will be displayed as standard output.
112 Execution will continue until the end of the file is reached regardless of
113 whether any errors occur.  The end user must examine the output to determine if
114 any failures occurred.
115
116
117 Control Functions
118 -----------------
119
120 start
121 ~~~~~
122
123 Start packet forwarding with current configuration::
124
125    testpmd> start
126
127 start tx_first
128 ~~~~~~~~~~~~~~
129
130 Start packet forwarding with current configuration after sending specified number of bursts of packets::
131
132    testpmd> start tx_first (""|burst_num)
133
134 The default burst number is 1 when ``burst_num`` not presented.
135
136 stop
137 ~~~~
138
139 Stop packet forwarding, and display accumulated statistics::
140
141    testpmd> stop
142
143 quit
144 ~~~~
145
146 Quit to prompt::
147
148    testpmd> quit
149
150
151 Display Functions
152 -----------------
153
154 The functions in the following sections are used to display information about the
155 testpmd configuration or the NIC status.
156
157 show port
158 ~~~~~~~~~
159
160 Display information for a given port or all ports::
161
162    testpmd> show port (info|summary|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)
163
164 The available information categories are:
165
166 * ``info``: General port information such as MAC address.
167
168 * ``summary``: Brief port summary such as Device Name, Driver Name etc.
169
170 * ``stats``: RX/TX statistics.
171
172 * ``xstats``: RX/TX extended NIC statistics.
173
174 * ``fdir``: Flow Director information and statistics.
175
176 * ``stat_qmap``: Queue statistics mapping.
177
178 * ``dcb_tc``: DCB information such as TC mapping.
179
180 * ``cap``: Supported offload capabilities.
181
182 For example:
183
184 .. code-block:: console
185
186    testpmd> show port info 0
187
188    ********************* Infos for port 0 *********************
189
190    MAC address: XX:XX:XX:XX:XX:XX
191    Connect to socket: 0
192    memory allocation on the socket: 0
193    Link status: up
194    Link speed: 40000 Mbps
195    Link duplex: full-duplex
196    Promiscuous mode: enabled
197    Allmulticast mode: disabled
198    Maximum number of MAC addresses: 64
199    Maximum number of MAC addresses of hash filtering: 0
200    VLAN offload:
201        strip on
202        filter on
203        qinq(extend) off
204    Redirection table size: 512
205    Supported flow types:
206      ipv4-frag
207      ipv4-tcp
208      ipv4-udp
209      ipv4-sctp
210      ipv4-other
211      ipv6-frag
212      ipv6-tcp
213      ipv6-udp
214      ipv6-sctp
215      ipv6-other
216      l2_payload
217      port
218      vxlan
219      geneve
220      nvgre
221
222 show port rss reta
223 ~~~~~~~~~~~~~~~~~~
224
225 Display the rss redirection table entry indicated by masks on port X::
226
227    testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
228
229 size is used to indicate the hardware supported reta size
230
231 show port rss-hash
232 ~~~~~~~~~~~~~~~~~~
233
234 Display the RSS hash functions and RSS hash key of a port::
235
236    testpmd> show port (port_id) rss-hash [key]
237
238 clear port
239 ~~~~~~~~~~
240
241 Clear the port statistics for a given port or for all ports::
242
243    testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
244
245 For example::
246
247    testpmd> clear port stats all
248
249 show (rxq|txq)
250 ~~~~~~~~~~~~~~
251
252 Display information for a given port's RX/TX queue::
253
254    testpmd> show (rxq|txq) info (port_id) (queue_id)
255
256 show config
257 ~~~~~~~~~~~
258
259 Displays the configuration of the application.
260 The configuration comes from the command-line, the runtime or the application defaults::
261
262    testpmd> show config (rxtx|cores|fwd|txpkts)
263
264 The available information categories are:
265
266 * ``rxtx``: RX/TX configuration items.
267
268 * ``cores``: List of forwarding cores.
269
270 * ``fwd``: Packet forwarding configuration.
271
272 * ``txpkts``: Packets to TX configuration.
273
274 For example:
275
276 .. code-block:: console
277
278    testpmd> show config rxtx
279
280    io packet forwarding - CRC stripping disabled - packets/burst=16
281    nb forwarding cores=2 - nb forwarding ports=1
282    RX queues=1 - RX desc=128 - RX free threshold=0
283    RX threshold registers: pthresh=8 hthresh=8 wthresh=4
284    TX queues=1 - TX desc=512 - TX free threshold=0
285    TX threshold registers: pthresh=36 hthresh=0 wthresh=0
286    TX RS bit threshold=0 - TXQ flags=0x0
287
288 set fwd
289 ~~~~~~~
290
291 Set the packet forwarding mode::
292
293    testpmd> set fwd (io|mac|macswap|flowgen| \
294                      rxonly|txonly|csum|icmpecho|noisy) (""|retry)
295
296 ``retry`` can be specified for forwarding engines except ``rx_only``.
297
298 The available information categories are:
299
300 * ``io``: Forwards packets "as-is" in I/O mode.
301   This is the fastest possible forwarding operation as it does not access packets data.
302   This is the default mode.
303
304 * ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them.
305   Default application behaviour is to set source Ethernet address to that of the transmitting interface, and destination
306   address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or
307   'eth-peer-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address.
308
309 * ``macswap``: MAC swap forwarding mode.
310   Swaps the source and the destination Ethernet addresses of packets before forwarding them.
311
312 * ``flowgen``: Multi-flow generation mode.
313   Originates a number of flows (with varying destination IP addresses), and terminate receive traffic.
314
315 * ``rxonly``: Receives packets but doesn't transmit them.
316
317 * ``txonly``: Generates and transmits packets without receiving any.
318
319 * ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet.
320
321 * ``icmpecho``: Receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies.
322
323 * ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``.
324
325 * ``softnic``: Demonstrates the softnic forwarding operation. In this mode, packet forwarding is
326   similar to I/O mode except for the fact that packets are loopback to the softnic ports only. Therefore, portmask parameter should be set to softnic port only. The various software based custom NIC pipelines specified through the softnic firmware (DPDK packet framework script) can be tested in this mode. Furthermore, it allows to build 5-level hierarchical QoS scheduler as a default option that can be enabled through CLI once testpmd application is initialised. The user can modify the default scheduler hierarchy or can specify the new QoS Scheduler hierarchy through CLI. Requires ``CONFIG_RTE_LIBRTE_PMD_SOFTNIC=y``.
327
328 * ``noisy``: Noisy neighbour simulation.
329   Simulate more realistic behavior of a guest machine engaged in receiving
330   and sending packets performing Virtual Network Function (VNF).
331
332 Example::
333
334    testpmd> set fwd rxonly
335
336    Set rxonly packet forwarding mode
337
338
339 read rxd
340 ~~~~~~~~
341
342 Display an RX descriptor for a port RX queue::
343
344    testpmd> read rxd (port_id) (queue_id) (rxd_id)
345
346 For example::
347
348    testpmd> read rxd 0 0 4
349         0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
350
351 read txd
352 ~~~~~~~~
353
354 Display a TX descriptor for a port TX queue::
355
356    testpmd> read txd (port_id) (queue_id) (txd_id)
357
358 For example::
359
360    testpmd> read txd 0 0 4
361         0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
362
363 ddp get list
364 ~~~~~~~~~~~~
365
366 Get loaded dynamic device personalization (DDP) package info list::
367
368    testpmd> ddp get list (port_id)
369
370 ddp get info
371 ~~~~~~~~~~~~
372
373 Display information about dynamic device personalization (DDP) profile::
374
375    testpmd> ddp get info (profile_path)
376
377 show vf stats
378 ~~~~~~~~~~~~~
379
380 Display VF statistics::
381
382    testpmd> show vf stats (port_id) (vf_id)
383
384 clear vf stats
385 ~~~~~~~~~~~~~~
386
387 Reset VF statistics::
388
389    testpmd> clear vf stats (port_id) (vf_id)
390
391 show port pctype mapping
392 ~~~~~~~~~~~~~~~~~~~~~~~~
393
394 List all items from the pctype mapping table::
395
396    testpmd> show port (port_id) pctype mapping
397
398 show rx offloading capabilities
399 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
400
401 List all per queue and per port Rx offloading capabilities of a port::
402
403    testpmd> show port (port_id) rx_offload capabilities
404
405 show rx offloading configuration
406 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
407
408 List port level and all queue level Rx offloading configuration::
409
410    testpmd> show port (port_id) rx_offload configuration
411
412 show tx offloading capabilities
413 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
414
415 List all per queue and per port Tx offloading capabilities of a port::
416
417    testpmd> show port (port_id) tx_offload capabilities
418
419 show tx offloading configuration
420 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
421
422 List port level and all queue level Tx offloading configuration::
423
424    testpmd> show port (port_id) tx_offload configuration
425
426
427 Configuration Functions
428 -----------------------
429
430 The testpmd application can be configured from the runtime as well as from the command-line.
431
432 This section details the available configuration functions that are available.
433
434 .. note::
435
436    Configuration changes only become active when forwarding is started/restarted.
437
438 set default
439 ~~~~~~~~~~~
440
441 Reset forwarding to the default configuration::
442
443    testpmd> set default
444
445 set verbose
446 ~~~~~~~~~~~
447
448 Set the debug verbosity level::
449
450    testpmd> set verbose (level)
451
452 Available levels are as following:
453
454 * ``0`` silent except for error.
455 * ``1`` fully verbose except for Tx packets.
456 * ``2`` fully verbose except for Rx packets.
457 * ``> 2`` fully verbose.
458
459 set log
460 ~~~~~~~
461
462 Set the log level for a log type::
463
464         testpmd> set log global|(type) (level)
465
466 Where:
467
468 * ``type`` is the log name.
469
470 * ``level`` is the log level.
471
472 For example, to change the global log level::
473         testpmd> set log global (level)
474
475 Regexes can also be used for type. To change log level of user1, user2 and user3::
476         testpmd> set log user[1-3] (level)
477
478 set nbport
479 ~~~~~~~~~~
480
481 Set the number of ports used by the application:
482
483 set nbport (num)
484
485 This is equivalent to the ``--nb-ports`` command-line option.
486
487 set nbcore
488 ~~~~~~~~~~
489
490 Set the number of cores used by the application::
491
492    testpmd> set nbcore (num)
493
494 This is equivalent to the ``--nb-cores`` command-line option.
495
496 .. note::
497
498    The number of cores used must not be greater than number of ports used multiplied by the number of queues per port.
499
500 set coremask
501 ~~~~~~~~~~~~
502
503 Set the forwarding cores hexadecimal mask::
504
505    testpmd> set coremask (mask)
506
507 This is equivalent to the ``--coremask`` command-line option.
508
509 .. note::
510
511    The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding.
512
513 set portmask
514 ~~~~~~~~~~~~
515
516 Set the forwarding ports hexadecimal mask::
517
518    testpmd> set portmask (mask)
519
520 This is equivalent to the ``--portmask`` command-line option.
521
522 set burst
523 ~~~~~~~~~
524
525 Set number of packets per burst::
526
527    testpmd> set burst (num)
528
529 This is equivalent to the ``--burst command-line`` option.
530
531 When retry is enabled, the transmit delay time and number of retries can also be set::
532
533    testpmd> set burst tx delay (microseconds) retry (num)
534
535 set txpkts
536 ~~~~~~~~~~
537
538 Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode::
539
540    testpmd> set txpkts (x[,y]*)
541
542 Where x[,y]* represents a CSV list of values, without white space.
543
544 set txsplit
545 ~~~~~~~~~~~
546
547 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
548
549    testpmd> set txsplit (off|on|rand)
550
551 Where:
552
553 * ``off`` disable packet copy & split for CSUM mode.
554
555 * ``on`` split outgoing packet into multiple segments. Size of each segment
556   and number of segments per packet is determined by ``set txpkts`` command
557   (see above).
558
559 * ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments.
560
561 set corelist
562 ~~~~~~~~~~~~
563
564 Set the list of forwarding cores::
565
566    testpmd> set corelist (x[,y]*)
567
568 For example, to change the forwarding cores:
569
570 .. code-block:: console
571
572    testpmd> set corelist 3,1
573    testpmd> show config fwd
574
575    io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled
576    Logical Core 3 (socket 0) forwards packets on 1 streams:
577    RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
578    Logical Core 1 (socket 0) forwards packets on 1 streams:
579    RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
580
581 .. note::
582
583    The cores are used in the same order as specified on the command line.
584
585 set portlist
586 ~~~~~~~~~~~~
587
588 Set the list of forwarding ports::
589
590    testpmd> set portlist (x[,y]*)
591
592 For example, to change the port forwarding:
593
594 .. code-block:: console
595
596    testpmd> set portlist 0,2,1,3
597    testpmd> show config fwd
598
599    io packet forwarding - ports=4 - cores=1 - streams=4
600    Logical Core 3 (socket 0) forwards packets on 4 streams:
601    RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01
602    RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
603    RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03
604    RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02
605
606 set tx loopback
607 ~~~~~~~~~~~~~~~
608
609 Enable/disable tx loopback::
610
611    testpmd> set tx loopback (port_id) (on|off)
612
613 set drop enable
614 ~~~~~~~~~~~~~~~
615
616 set drop enable bit for all queues::
617
618    testpmd> set all queues drop (port_id) (on|off)
619
620 set split drop enable (for VF)
621 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
622
623 set split drop enable bit for VF from PF::
624
625    testpmd> set vf split drop (port_id) (vf_id) (on|off)
626
627 set mac antispoof (for VF)
628 ~~~~~~~~~~~~~~~~~~~~~~~~~~
629
630 Set mac antispoof for a VF from the PF::
631
632    testpmd> set vf mac antispoof  (port_id) (vf_id) (on|off)
633
634 set macsec offload
635 ~~~~~~~~~~~~~~~~~~
636
637 Enable/disable MACsec offload::
638
639    testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off)
640    testpmd> set macsec offload (port_id) off
641
642 set macsec sc
643 ~~~~~~~~~~~~~
644
645 Configure MACsec secure connection (SC)::
646
647    testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi)
648
649 .. note::
650
651    The pi argument is ignored for tx.
652    Check the NIC Datasheet for hardware limits.
653
654 set macsec sa
655 ~~~~~~~~~~~~~
656
657 Configure MACsec secure association (SA)::
658
659    testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key)
660
661 .. note::
662
663    The IDX value must be 0 or 1.
664    Check the NIC Datasheet for hardware limits.
665
666 set broadcast mode (for VF)
667 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
668
669 Set broadcast mode for a VF from the PF::
670
671    testpmd> set vf broadcast (port_id) (vf_id) (on|off)
672
673 vlan set strip
674 ~~~~~~~~~~~~~~
675
676 Set the VLAN strip on a port::
677
678    testpmd> vlan set strip (on|off) (port_id)
679
680 vlan set stripq
681 ~~~~~~~~~~~~~~~
682
683 Set the VLAN strip for a queue on a port::
684
685    testpmd> vlan set stripq (on|off) (port_id,queue_id)
686
687 vlan set stripq (for VF)
688 ~~~~~~~~~~~~~~~~~~~~~~~~
689
690 Set VLAN strip for all queues in a pool for a VF from the PF::
691
692    testpmd> set vf vlan stripq (port_id) (vf_id) (on|off)
693
694 vlan set insert (for VF)
695 ~~~~~~~~~~~~~~~~~~~~~~~~
696
697 Set VLAN insert for a VF from the PF::
698
699    testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
700
701 vlan set tag (for VF)
702 ~~~~~~~~~~~~~~~~~~~~~
703
704 Set VLAN tag for a VF from the PF::
705
706    testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
707
708 vlan set antispoof (for VF)
709 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
710
711 Set VLAN antispoof for a VF from the PF::
712
713    testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
714
715 vlan set filter
716 ~~~~~~~~~~~~~~~
717
718 Set the VLAN filter on a port::
719
720    testpmd> vlan set filter (on|off) (port_id)
721
722 vlan set qinq
723 ~~~~~~~~~~~~~
724
725 Set the VLAN QinQ (extended queue in queue) on for a port::
726
727    testpmd> vlan set qinq (on|off) (port_id)
728
729 vlan set tpid
730 ~~~~~~~~~~~~~
731
732 Set the inner or outer VLAN TPID for packet filtering on a port::
733
734    testpmd> vlan set (inner|outer) tpid (value) (port_id)
735
736 .. note::
737
738    TPID value must be a 16-bit number (value <= 65536).
739
740 rx_vlan add
741 ~~~~~~~~~~~
742
743 Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID::
744
745    testpmd> rx_vlan add (vlan_id|all) (port_id)
746
747 .. note::
748
749    VLAN filter must be set on that port. VLAN ID < 4096.
750    Depending on the NIC used, number of vlan_ids may be limited to the maximum entries
751    in VFTA table. This is important if enabling all vlan_ids.
752
753 rx_vlan rm
754 ~~~~~~~~~~
755
756 Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID::
757
758    testpmd> rx_vlan rm (vlan_id|all) (port_id)
759
760 rx_vlan add (for VF)
761 ~~~~~~~~~~~~~~~~~~~~
762
763 Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID::
764
765    testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask)
766
767 rx_vlan rm (for VF)
768 ~~~~~~~~~~~~~~~~~~~
769
770 Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID::
771
772    testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)
773
774 tunnel_filter add
775 ~~~~~~~~~~~~~~~~~
776
777 Add a tunnel filter on a port::
778
779    testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \
780             (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
781             imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
782
783 The available information categories are:
784
785 * ``vxlan``: Set tunnel type as VXLAN.
786
787 * ``nvgre``: Set tunnel type as NVGRE.
788
789 * ``ipingre``: Set tunnel type as IP-in-GRE.
790
791 * ``imac-ivlan``: Set filter type as Inner MAC and VLAN.
792
793 * ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.
794
795 * ``imac-tenid``: Set filter type as Inner MAC and tenant ID.
796
797 * ``imac``: Set filter type as Inner MAC.
798
799 * ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.
800
801 * ``oip``: Set filter type as Outer IP.
802
803 * ``iip``: Set filter type as Inner IP.
804
805 Example::
806
807    testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \
808             192.168.2.2 0 ipingre oip 1 1
809
810    Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.
811
812 tunnel_filter remove
813 ~~~~~~~~~~~~~~~~~~~~
814
815 Remove a tunnel filter on a port::
816
817    testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \
818             (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\
819             imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)
820
821 rx_vxlan_port add
822 ~~~~~~~~~~~~~~~~~
823
824 Add an UDP port for VXLAN packet filter on a port::
825
826    testpmd> rx_vxlan_port add (udp_port) (port_id)
827
828 rx_vxlan_port remove
829 ~~~~~~~~~~~~~~~~~~~~
830
831 Remove an UDP port for VXLAN packet filter on a port::
832
833    testpmd> rx_vxlan_port rm (udp_port) (port_id)
834
835 tx_vlan set
836 ~~~~~~~~~~~
837
838 Set hardware insertion of VLAN IDs in packets sent on a port::
839
840    testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer]
841
842 For example, set a single VLAN ID (5) insertion on port 0::
843
844    tx_vlan set 0 5
845
846 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
847
848    tx_vlan set 1 2 3
849
850
851 tx_vlan set pvid
852 ~~~~~~~~~~~~~~~~
853
854 Set port based hardware insertion of VLAN ID in packets sent on a port::
855
856    testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off)
857
858 tx_vlan reset
859 ~~~~~~~~~~~~~
860
861 Disable hardware insertion of a VLAN header in packets sent on a port::
862
863    testpmd> tx_vlan reset (port_id)
864
865 csum set
866 ~~~~~~~~
867
868 Select hardware or software calculation of the checksum when
869 transmitting a packet using the ``csum`` forwarding engine::
870
871    testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)
872
873 Where:
874
875 * ``ip|udp|tcp|sctp`` always relate to  the inner layer.
876
877 * ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized
878   as a tunnel packet by the forwarding engine (vxlan, gre and ipip are
879   supported). See also the ``csum parse-tunnel`` command.
880
881 * ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized
882   as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are
883   supported). See also the ``csum parse-tunnel`` command.
884
885 .. note::
886
887    Check the NIC Datasheet for hardware limits.
888
889 RSS queue region
890 ~~~~~~~~~~~~~~~~
891
892 Set RSS queue region span on a port::
893
894    testpmd> set port (port_id) queue-region region_id (value) \
895                 queue_start_index (value) queue_num (value)
896
897 Set flowtype mapping on a RSS queue region on a port::
898
899    testpmd> set port (port_id) queue-region region_id (value) flowtype (value)
900
901 where:
902
903 * For the flowtype(pctype) of packet,the specific index for each type has
904   been defined in file i40e_type.h as enum i40e_filter_pctype.
905
906 Set user priority mapping on a RSS queue region on a port::
907
908    testpmd> set port (port_id) queue-region UP (value) region_id (value)
909
910 Flush all queue region related configuration on a port::
911
912    testpmd> set port (port_id) queue-region flush (on|off)
913
914 where:
915
916 * "on"is just an enable function which server for other configuration,
917   it is for all configuration about queue region from up layer,
918   at first will only keep in DPDK softwarestored in driver,
919   only after "flush on", it commit all configuration to HW.
920   "off" is just clean all configuration about queue region just now,
921   and restore all to DPDK i40e driver default config when start up.
922
923 Show all queue region related configuration info on a port::
924
925    testpmd> show port (port_id) queue-region
926
927 .. note::
928
929   Queue region only support on PF by now, so these command is
930   only for configuration of queue region on PF port.
931
932 csum parse-tunnel
933 ~~~~~~~~~~~~~~~~~
934
935 Define how tunneled packets should be handled by the csum forward
936 engine::
937
938    testpmd> csum parse-tunnel (on|off) (tx_port_id)
939
940 If enabled, the csum forward engine will try to recognize supported
941 tunnel headers (vxlan, gre, ipip).
942
943 If disabled, treat tunnel packets as non-tunneled packets (a inner
944 header is handled as a packet payload).
945
946 .. note::
947
948    The port argument is the TX port like in the ``csum set`` command.
949
950 Example:
951
952 Consider a packet in packet like the following::
953
954    eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in
955
956 * If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set``
957   command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the
958   ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``).
959
960 * If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum  set``
961    command relate to the outer headers, here ``ipv4_out`` and ``udp_out``.
962
963 csum show
964 ~~~~~~~~~
965
966 Display tx checksum offload configuration::
967
968    testpmd> csum show (port_id)
969
970 tso set
971 ~~~~~~~
972
973 Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine::
974
975    testpmd> tso set (segsize) (port_id)
976
977 .. note::
978
979    Check the NIC datasheet for hardware limits.
980
981 tso show
982 ~~~~~~~~
983
984 Display the status of TCP Segmentation Offload::
985
986    testpmd> tso show (port_id)
987
988 set port - gro
989 ~~~~~~~~~~~~~~
990
991 Enable or disable GRO in ``csum`` forwarding engine::
992
993    testpmd> set port <port_id> gro on|off
994
995 If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
996 packets received from the given port.
997
998 If disabled, packets received from the given port won't be performed
999 GRO. By default, GRO is disabled for all ports.
1000
1001 .. note::
1002
1003    When enable GRO for a port, TCP/IPv4 packets received from the port
1004    will be performed GRO. After GRO, all merged packets have bad
1005    checksums, since the GRO library doesn't re-calculate checksums for
1006    the merged packets. Therefore, if users want the merged packets to
1007    have correct checksums, please select HW IP checksum calculation and
1008    HW TCP checksum calculation for the port which the merged packets are
1009    transmitted to.
1010
1011 show port - gro
1012 ~~~~~~~~~~~~~~~
1013
1014 Display GRO configuration for a given port::
1015
1016    testpmd> show port <port_id> gro
1017
1018 set gro flush
1019 ~~~~~~~~~~~~~
1020
1021 Set the cycle to flush the GROed packets from reassembly tables::
1022
1023    testpmd> set gro flush <cycles>
1024
1025 When enable GRO, the csum forwarding engine performs GRO on received
1026 packets, and the GROed packets are stored in reassembly tables. Users
1027 can use this command to determine when the GROed packets are flushed
1028 from the reassembly tables.
1029
1030 The ``cycles`` is measured in GRO operation times. The csum forwarding
1031 engine flushes the GROed packets from the tables every ``cycles`` GRO
1032 operations.
1033
1034 By default, the value of ``cycles`` is 1, which means flush GROed packets
1035 from the reassembly tables as soon as one GRO operation finishes. The value
1036 of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1037
1038 Please note that the large value of ``cycles`` may cause the poor TCP/IP
1039 stack performance. Because the GROed packets are delayed to arrive the
1040 stack, thus causing more duplicated ACKs and TCP retransmissions.
1041
1042 set port - gso
1043 ~~~~~~~~~~~~~~
1044
1045 Toggle per-port GSO support in ``csum`` forwarding engine::
1046
1047    testpmd> set port <port_id> gso on|off
1048
1049 If enabled, the csum forwarding engine will perform GSO on supported IPv4
1050 packets, transmitted on the given port.
1051
1052 If disabled, packets transmitted on the given port will not undergo GSO.
1053 By default, GSO is disabled for all ports.
1054
1055 .. note::
1056
1057    When GSO is enabled on a port, supported IPv4 packets transmitted on that
1058    port undergo GSO. Afterwards, the segmented packets are represented by
1059    multi-segment mbufs; however, the csum forwarding engine doesn't calculation
1060    of checksums for GSO'd segments in SW. As a result, if users want correct
1061    checksums in GSO segments, they should enable HW checksum calculation for
1062    GSO-enabled ports.
1063
1064    For example, HW checksum calculation for VxLAN GSO'd packets may be enabled
1065    by setting the following options in the csum forwarding engine:
1066
1067    testpmd> csum set outer_ip hw <port_id>
1068
1069    testpmd> csum set ip hw <port_id>
1070
1071    testpmd> csum set tcp hw <port_id>
1072
1073    UDP GSO is the same as IP fragmentation, which treats the UDP header
1074    as the payload and does not modify it during segmentation. That is,
1075    after UDP GSO, only the first output fragment has the original UDP
1076    header. Therefore, users need to enable HW IP checksum calculation
1077    and SW UDP checksum calculation for GSO-enabled ports, if they want
1078    correct checksums for UDP/IPv4 packets.
1079
1080 set gso segsz
1081 ~~~~~~~~~~~~~
1082
1083 Set the maximum GSO segment size (measured in bytes), which includes the
1084 packet header and the packet payload for GSO-enabled ports (global)::
1085
1086    testpmd> set gso segsz <length>
1087
1088 show port - gso
1089 ~~~~~~~~~~~~~~~
1090
1091 Display the status of Generic Segmentation Offload for a given port::
1092
1093    testpmd> show port <port_id> gso
1094
1095 mac_addr add
1096 ~~~~~~~~~~~~
1097
1098 Add an alternative MAC address to a port::
1099
1100    testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1101
1102 mac_addr remove
1103 ~~~~~~~~~~~~~~~
1104
1105 Remove a MAC address from a port::
1106
1107    testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1108
1109 mac_addr add (for VF)
1110 ~~~~~~~~~~~~~~~~~~~~~
1111
1112 Add an alternative MAC address for a VF to a port::
1113
1114    testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX)
1115
1116 mac_addr set
1117 ~~~~~~~~~~~~
1118
1119 Set the default MAC address for a port::
1120
1121    testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1122
1123 mac_addr set (for VF)
1124 ~~~~~~~~~~~~~~~~~~~~~
1125
1126 Set the MAC address for a VF from the PF::
1127
1128    testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)
1129
1130 set eth-peer
1131 ~~~~~~~~~~~~
1132
1133 Set the forwarding peer address for certain port::
1134
1135    testpmd> set eth-peer (port_id) (perr_addr)
1136
1137 This is equivalent to the ``--eth-peer`` command-line option.
1138
1139 set port-uta
1140 ~~~~~~~~~~~~
1141
1142 Set the unicast hash filter(s) on/off for a port::
1143
1144    testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off)
1145
1146 set promisc
1147 ~~~~~~~~~~~
1148
1149 Set the promiscuous mode on for a port or for all ports.
1150 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1151
1152    testpmd> set promisc (port_id|all) (on|off)
1153
1154 set allmulti
1155 ~~~~~~~~~~~~
1156
1157 Set the allmulti mode for a port or for all ports::
1158
1159    testpmd> set allmulti (port_id|all) (on|off)
1160
1161 Same as the ifconfig (8) option. Controls how multicast packets are handled.
1162
1163 set promisc (for VF)
1164 ~~~~~~~~~~~~~~~~~~~~
1165
1166 Set the unicast promiscuous mode for a VF from PF.
1167 It's supported by Intel i40e NICs now.
1168 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1169
1170    testpmd> set vf promisc (port_id) (vf_id) (on|off)
1171
1172 set allmulticast (for VF)
1173 ~~~~~~~~~~~~~~~~~~~~~~~~~
1174
1175 Set the multicast promiscuous mode for a VF from PF.
1176 It's supported by Intel i40e NICs now.
1177 In promiscuous mode packets are not dropped if they aren't for the specified MAC address::
1178
1179    testpmd> set vf allmulti (port_id) (vf_id) (on|off)
1180
1181 set tx max bandwidth (for VF)
1182 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1183
1184 Set TX max absolute bandwidth (Mbps) for a VF from PF::
1185
1186    testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth)
1187
1188 set tc tx min bandwidth (for VF)
1189 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1190
1191 Set all TCs' TX min relative bandwidth (%) for a VF from PF::
1192
1193    testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...)
1194
1195 set tc tx max bandwidth (for VF)
1196 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1197
1198 Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF::
1199
1200    testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth)
1201
1202 set tc strict link priority mode
1203 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1204
1205 Set some TCs' strict link priority mode on a physical port::
1206
1207    testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1208
1209 set tc tx min bandwidth
1210 ~~~~~~~~~~~~~~~~~~~~~~~
1211
1212 Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs::
1213
1214    testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...)
1215
1216 set flow_ctrl rx
1217 ~~~~~~~~~~~~~~~~
1218
1219 Set the link flow control parameter on a port::
1220
1221    testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1222             (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \
1223             autoneg (on|off) (port_id)
1224
1225 Where:
1226
1227 * ``high_water`` (integer): High threshold value to trigger XOFF.
1228
1229 * ``low_water`` (integer): Low threshold value to trigger XON.
1230
1231 * ``pause_time`` (integer): Pause quota in the Pause frame.
1232
1233 * ``send_xon`` (0/1): Send XON frame.
1234
1235 * ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames.
1236
1237 * ``autoneg``: Change the auto-negotiation parameter.
1238
1239 set pfc_ctrl rx
1240 ~~~~~~~~~~~~~~~
1241
1242 Set the priority flow control parameter on a port::
1243
1244    testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
1245             (pause_time) (priority) (port_id)
1246
1247 Where:
1248
1249 * ``high_water`` (integer): High threshold value.
1250
1251 * ``low_water`` (integer): Low threshold value.
1252
1253 * ``pause_time`` (integer): Pause quota in the Pause frame.
1254
1255 * ``priority`` (0-7): VLAN User Priority.
1256
1257 set stat_qmap
1258 ~~~~~~~~~~~~~
1259
1260 Set statistics mapping (qmapping 0..15) for RX/TX queue on port::
1261
1262    testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping)
1263
1264 For example, to set rx queue 2 on port 0 to mapping 5::
1265
1266    testpmd>set stat_qmap rx 0 2 5
1267
1268 set xstats-hide-zero
1269 ~~~~~~~~~~~~~~~~~~~~
1270
1271 Set the option to hide zero values for xstats display::
1272
1273         testpmd> set xstats-hide-zero on|off
1274
1275 .. note::
1276
1277         By default, the zero values are displayed for xstats.
1278
1279 set port - rx/tx (for VF)
1280 ~~~~~~~~~~~~~~~~~~~~~~~~~
1281
1282 Set VF receive/transmit from a port::
1283
1284    testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1285
1286 set port - mac address filter (for VF)
1287 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1288
1289 Add/Remove unicast or multicast MAC addr filter for a VF::
1290
1291    testpmd> set port (port_id) vf (vf_id) (mac_addr) \
1292             (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off)
1293
1294 set port - rx mode(for VF)
1295 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1296
1297 Set the VF receive mode of a port::
1298
1299    testpmd> set port (port_id) vf (vf_id) \
1300             rxmode (AUPE|ROPE|BAM|MPE) (on|off)
1301
1302 The available receive modes are:
1303
1304 * ``AUPE``: Accepts untagged VLAN.
1305
1306 * ``ROPE``: Accepts unicast hash.
1307
1308 * ``BAM``: Accepts broadcast packets.
1309
1310 * ``MPE``: Accepts all multicast packets.
1311
1312 set port - tx_rate (for Queue)
1313 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1314
1315 Set TX rate limitation for a queue on a port::
1316
1317    testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1318
1319 set port - tx_rate (for VF)
1320 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1321
1322 Set TX rate limitation for queues in VF on a port::
1323
1324    testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask)
1325
1326 set port - mirror rule
1327 ~~~~~~~~~~~~~~~~~~~~~~
1328
1329 Set pool or vlan type mirror rule for a port::
1330
1331    testpmd> set port (port_id) mirror-rule (rule_id) \
1332             (pool-mirror-up|pool-mirror-down|vlan-mirror) \
1333             (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off)
1334
1335 Set link mirror rule for a port::
1336
1337    testpmd> set port (port_id) mirror-rule (rule_id) \
1338            (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off)
1339
1340 For example to enable mirror traffic with vlan 0,1 to pool 0::
1341
1342    set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on
1343
1344 reset port - mirror rule
1345 ~~~~~~~~~~~~~~~~~~~~~~~~
1346
1347 Reset a mirror rule for a port::
1348
1349    testpmd> reset port (port_id) mirror-rule (rule_id)
1350
1351 set flush_rx
1352 ~~~~~~~~~~~~
1353
1354 Set the flush on RX streams before forwarding.
1355 The default is flush ``on``.
1356 Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams::
1357
1358    testpmd> set flush_rx off
1359
1360 set bypass mode
1361 ~~~~~~~~~~~~~~~
1362
1363 Set the bypass mode for the lowest port on bypass enabled NIC::
1364
1365    testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1366
1367 set bypass event
1368 ~~~~~~~~~~~~~~~~
1369
1370 Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled::
1371
1372    testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \
1373             mode (normal|bypass|isolate) (port_id)
1374
1375 Where:
1376
1377 * ``timeout``: Enable bypass after watchdog timeout.
1378
1379 * ``os_on``: Enable bypass when OS/board is powered on.
1380
1381 * ``os_off``: Enable bypass when OS/board is powered off.
1382
1383 * ``power_on``: Enable bypass when power supply is turned on.
1384
1385 * ``power_off``: Enable bypass when power supply is turned off.
1386
1387
1388 set bypass timeout
1389 ~~~~~~~~~~~~~~~~~~
1390
1391 Set the bypass watchdog timeout to ``n`` seconds where 0 = instant::
1392
1393    testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32)
1394
1395 show bypass config
1396 ~~~~~~~~~~~~~~~~~~
1397
1398 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1399
1400    testpmd> show bypass config (port_id)
1401
1402 set link up
1403 ~~~~~~~~~~~
1404
1405 Set link up for a port::
1406
1407    testpmd> set link-up port (port id)
1408
1409 set link down
1410 ~~~~~~~~~~~~~
1411
1412 Set link down for a port::
1413
1414    testpmd> set link-down port (port id)
1415
1416 E-tag set
1417 ~~~~~~~~~
1418
1419 Enable E-tag insertion for a VF on a port::
1420
1421    testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id)
1422
1423 Disable E-tag insertion for a VF on a port::
1424
1425    testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1426
1427 Enable/disable E-tag stripping on a port::
1428
1429    testpmd> E-tag set stripping (on|off) port (port_id)
1430
1431 Enable/disable E-tag based forwarding on a port::
1432
1433    testpmd> E-tag set forwarding (on|off) port (port_id)
1434
1435 Add an E-tag forwarding filter on a port::
1436
1437    testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id)
1438
1439 Delete an E-tag forwarding filter on a port::
1440    testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1441
1442 ddp add
1443 ~~~~~~~
1444
1445 Load a dynamic device personalization (DDP) profile and store backup profile::
1446
1447    testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1448
1449 ddp del
1450 ~~~~~~~
1451
1452 Delete a dynamic device personalization profile and restore backup profile::
1453
1454    testpmd> ddp del (port_id) (backup_profile_path)
1455
1456 ptype mapping
1457 ~~~~~~~~~~~~~
1458
1459 List all items from the ptype mapping table::
1460
1461    testpmd> ptype mapping get (port_id) (valid_only)
1462
1463 Where:
1464
1465 * ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1466
1467 Replace a specific or a group of software defined ptype with a new one::
1468
1469    testpmd> ptype mapping replace  (port_id) (target) (mask) (pkt_type)
1470
1471 where:
1472
1473 * ``target``: A specific software ptype or a mask to represent a group of software ptypes.
1474
1475 * ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1).
1476
1477 * ``pkt_type``: The new software ptype to replace the old ones.
1478
1479 Update hardware defined ptype to software defined packet type mapping table::
1480
1481    testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1482
1483 where:
1484
1485 * ``hw_ptype``: hardware ptype as the index of the ptype mapping table.
1486
1487 * ``sw_ptype``: software ptype as the value of the ptype mapping table.
1488
1489 Reset ptype mapping table::
1490
1491    testpmd> ptype mapping reset (port_id)
1492
1493 config per port Rx offloading
1494 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1495
1496 Enable or disable a per port Rx offloading on all Rx queues of a port::
1497
1498    testpmd> port config (port_id) rx_offload (offloading) on|off
1499
1500 * ``offloading``: can be any of these offloading capability:
1501                   vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1502                   qinq_strip, outer_ipv4_cksum, macsec_strip,
1503                   header_split, vlan_filter, vlan_extend, jumbo_frame,
1504                   crc_strip, scatter, timestamp, security, keep_crc
1505
1506 This command should be run when the port is stopped, or else it will fail.
1507
1508 config per queue Rx offloading
1509 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1510
1511 Enable or disable a per queue Rx offloading only on a specific Rx queue::
1512
1513    testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
1514
1515 * ``offloading``: can be any of these offloading capability:
1516                   vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
1517                   qinq_strip, outer_ipv4_cksum, macsec_strip,
1518                   header_split, vlan_filter, vlan_extend, jumbo_frame,
1519                   crc_strip, scatter, timestamp, security, keep_crc
1520
1521 This command should be run when the port is stopped, or else it will fail.
1522
1523 config per port Tx offloading
1524 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1525
1526 Enable or disable a per port Tx offloading on all Tx queues of a port::
1527
1528    testpmd> port config (port_id) tx_offload (offloading) on|off
1529
1530 * ``offloading``: can be any of these offloading capability:
1531                   vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1532                   sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1533                   qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1534                   ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1535                   mt_lockfree, multi_segs, mbuf_fast_free, security
1536
1537 This command should be run when the port is stopped, or else it will fail.
1538
1539 config per queue Tx offloading
1540 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1541
1542 Enable or disable a per queue Tx offloading only on a specific Tx queue::
1543
1544    testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
1545
1546 * ``offloading``: can be any of these offloading capability:
1547                   vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
1548                   sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
1549                   qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
1550                   ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
1551                   mt_lockfree, multi_segs, mbuf_fast_free, security
1552
1553 This command should be run when the port is stopped, or else it will fail.
1554
1555 Config VXLAN Encap outer layers
1556 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1557
1558 Configure the outer layer to encapsulate a packet inside a VXLAN tunnel::
1559
1560  set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1561  udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \
1562  eth-dst (eth-dst)
1563
1564  set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \
1565  udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \
1566  eth-src (eth-src) eth-dst (eth-dst)
1567
1568 Those command will set an internal configuration inside testpmd, any following
1569 flow rule using the action vxlan_encap will use the last configuration set.
1570 To have a different encapsulation header, one of those commands must be called
1571 before the flow rule creation.
1572
1573 Config NVGRE Encap outer layers
1574 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1575
1576 Configure the outer layer to encapsulate a packet inside a NVGRE tunnel::
1577
1578  set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \
1579         eth-src (eth-src) eth-dst (eth-dst)
1580  set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \
1581         ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst)
1582
1583 Those command will set an internal configuration inside testpmd, any following
1584 flow rule using the action nvgre_encap will use the last configuration set.
1585 To have a different encapsulation header, one of those commands must be called
1586 before the flow rule creation.
1587
1588 Port Functions
1589 --------------
1590
1591 The following sections show functions for configuring ports.
1592
1593 .. note::
1594
1595    Port configuration changes only become active when forwarding is started/restarted.
1596
1597 port attach
1598 ~~~~~~~~~~~
1599
1600 Attach a port specified by pci address or virtual device args::
1601
1602    testpmd> port attach (identifier)
1603
1604 To attach a new pci device, the device should be recognized by kernel first.
1605 Then it should be moved under DPDK management.
1606 Finally the port can be attached to testpmd.
1607
1608 For example, to move a pci device using ixgbe under DPDK management:
1609
1610 .. code-block:: console
1611
1612    # Check the status of the available devices.
1613    ./usertools/dpdk-devbind.py --status
1614
1615    Network devices using DPDK-compatible driver
1616    ============================================
1617    <none>
1618
1619    Network devices using kernel driver
1620    ===================================
1621    0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
1622
1623
1624    # Bind the device to igb_uio.
1625    sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0
1626
1627
1628    # Recheck the status of the devices.
1629    ./usertools/dpdk-devbind.py --status
1630    Network devices using DPDK-compatible driver
1631    ============================================
1632    0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
1633
1634 To attach a port created by virtual device, above steps are not needed.
1635
1636 For example, to attach a port whose pci address is 0000:0a:00.0.
1637
1638 .. code-block:: console
1639
1640    testpmd> port attach 0000:0a:00.0
1641    Attaching a new port...
1642    EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1643    EAL:   probe driver: 8086:10fb rte_ixgbe_pmd
1644    EAL:   PCI memory mapped at 0x7f83bfa00000
1645    EAL:   PCI memory mapped at 0x7f83bfa80000
1646    PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5
1647    PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb
1648    Port 0 is attached. Now total ports is 1
1649    Done
1650
1651 For example, to attach a port created by pcap PMD.
1652
1653 .. code-block:: console
1654
1655    testpmd> port attach net_pcap0
1656    Attaching a new port...
1657    PMD: Initializing pmd_pcap for net_pcap0
1658    PMD: Creating pcap-backed ethdev on numa socket 0
1659    Port 0 is attached. Now total ports is 1
1660    Done
1661
1662 In this case, identifier is ``net_pcap0``.
1663 This identifier format is the same as ``--vdev`` format of DPDK applications.
1664
1665 For example, to re-attach a bonded port which has been previously detached,
1666 the mode and slave parameters must be given.
1667
1668 .. code-block:: console
1669
1670    testpmd> port attach net_bond_0,mode=0,slave=1
1671    Attaching a new port...
1672    EAL: Initializing pmd_bond for net_bond_0
1673    EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0.
1674    Port 0 is attached. Now total ports is 1
1675    Done
1676
1677
1678 port detach
1679 ~~~~~~~~~~~
1680
1681 Detach a specific port::
1682
1683    testpmd> port detach (port_id)
1684
1685 Before detaching a port, the port should be stopped and closed.
1686
1687 For example, to detach a pci device port 0.
1688
1689 .. code-block:: console
1690
1691    testpmd> port stop 0
1692    Stopping ports...
1693    Done
1694    testpmd> port close 0
1695    Closing ports...
1696    Done
1697
1698    testpmd> port detach 0
1699    Detaching a port...
1700    EAL: PCI device 0000:0a:00.0 on NUMA socket -1
1701    EAL:   remove driver: 8086:10fb rte_ixgbe_pmd
1702    EAL:   PCI memory unmapped at 0x7f83bfa00000
1703    EAL:   PCI memory unmapped at 0x7f83bfa80000
1704    Done
1705
1706
1707 For example, to detach a virtual device port 0.
1708
1709 .. code-block:: console
1710
1711    testpmd> port stop 0
1712    Stopping ports...
1713    Done
1714    testpmd> port close 0
1715    Closing ports...
1716    Done
1717
1718    testpmd> port detach 0
1719    Detaching a port...
1720    PMD: Closing pcap ethdev on numa socket 0
1721    Port 'net_pcap0' is detached. Now total ports is 0
1722    Done
1723
1724 To remove a pci device completely from the system, first detach the port from testpmd.
1725 Then the device should be moved under kernel management.
1726 Finally the device can be removed using kernel pci hotplug functionality.
1727
1728 For example, to move a pci device under kernel management:
1729
1730 .. code-block:: console
1731
1732    sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0
1733
1734    ./usertools/dpdk-devbind.py --status
1735
1736    Network devices using DPDK-compatible driver
1737    ============================================
1738    <none>
1739
1740    Network devices using kernel driver
1741    ===================================
1742    0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio
1743
1744 To remove a port created by a virtual device, above steps are not needed.
1745
1746 port start
1747 ~~~~~~~~~~
1748
1749 Start all ports or a specific port::
1750
1751    testpmd> port start (port_id|all)
1752
1753 port stop
1754 ~~~~~~~~~
1755
1756 Stop all ports or a specific port::
1757
1758    testpmd> port stop (port_id|all)
1759
1760 port close
1761 ~~~~~~~~~~
1762
1763 Close all ports or a specific port::
1764
1765    testpmd> port close (port_id|all)
1766
1767 port config - queue ring size
1768 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1769
1770 Configure a rx/tx queue ring size::
1771
1772    testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
1773
1774 Only take effect after command that (re-)start the port or command that setup specific queue.
1775
1776 port start/stop queue
1777 ~~~~~~~~~~~~~~~~~~~~~
1778
1779 Start/stop a rx/tx queue on a specific port::
1780
1781    testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1782
1783 port config - queue deferred start
1784 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1785
1786 Switch on/off deferred start of a specific port queue::
1787
1788    testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
1789
1790 port setup queue
1791 ~~~~~~~~~~~~~~~~~~~~~
1792
1793 Setup a rx/tx queue on a specific port::
1794
1795    testpmd> port (port_id) (rxq|txq) (queue_id) setup
1796
1797 Only take effect when port is started.
1798
1799 port config - speed
1800 ~~~~~~~~~~~~~~~~~~~
1801
1802 Set the speed and duplex mode for all ports or a specific port::
1803
1804    testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|auto) \
1805             duplex (half|full|auto)
1806
1807 port config - queues/descriptors
1808 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1809
1810 Set number of queues/descriptors for rxq, txq, rxd and txd::
1811
1812    testpmd> port config all (rxq|txq|rxd|txd) (value)
1813
1814 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1815
1816 port config - max-pkt-len
1817 ~~~~~~~~~~~~~~~~~~~~~~~~~
1818
1819 Set the maximum packet length::
1820
1821    testpmd> port config all max-pkt-len (value)
1822
1823 This is equivalent to the ``--max-pkt-len`` command-line option.
1824
1825 port config - CRC Strip
1826 ~~~~~~~~~~~~~~~~~~~~~~~
1827
1828 Set hardware CRC stripping on or off for all ports::
1829
1830    testpmd> port config all crc-strip (on|off)
1831
1832 CRC stripping is on by default.
1833
1834 The ``off`` option is equivalent to the ``--disable-crc-strip`` command-line option.
1835
1836 port config - scatter
1837 ~~~~~~~~~~~~~~~~~~~~~~~
1838
1839 Set RX scatter mode on or off for all ports::
1840
1841    testpmd> port config all scatter (on|off)
1842
1843 RX scatter mode is off by default.
1844
1845 The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1846
1847 port config - RX Checksum
1848 ~~~~~~~~~~~~~~~~~~~~~~~~~
1849
1850 Set hardware RX checksum offload to on or off for all ports::
1851
1852    testpmd> port config all rx-cksum (on|off)
1853
1854 Checksum offload is off by default.
1855
1856 The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1857
1858 port config - VLAN
1859 ~~~~~~~~~~~~~~~~~~
1860
1861 Set hardware VLAN on or off for all ports::
1862
1863    testpmd> port config all hw-vlan (on|off)
1864
1865 Hardware VLAN is off by default.
1866
1867 The ``on`` option is equivalent to the ``--enable-hw-vlan`` command-line option.
1868
1869 port config - VLAN filter
1870 ~~~~~~~~~~~~~~~~~~~~~~~~~
1871
1872 Set hardware VLAN filter on or off for all ports::
1873
1874    testpmd> port config all hw-vlan-filter (on|off)
1875
1876 Hardware VLAN filter is off by default.
1877
1878 The ``on`` option is equivalent to the ``--enable-hw-vlan-filter`` command-line option.
1879
1880 port config - VLAN strip
1881 ~~~~~~~~~~~~~~~~~~~~~~~~
1882
1883 Set hardware VLAN strip on or off for all ports::
1884
1885    testpmd> port config all hw-vlan-strip (on|off)
1886
1887 Hardware VLAN strip is off by default.
1888
1889 The ``on`` option is equivalent to the ``--enable-hw-vlan-strip`` command-line option.
1890
1891 port config - VLAN extend
1892 ~~~~~~~~~~~~~~~~~~~~~~~~~
1893
1894 Set hardware VLAN extend on or off for all ports::
1895
1896    testpmd> port config all hw-vlan-extend (on|off)
1897
1898 Hardware VLAN extend is off by default.
1899
1900 The ``on`` option is equivalent to the ``--enable-hw-vlan-extend`` command-line option.
1901
1902 port config - Drop Packets
1903 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1904
1905 Set packet drop for packets with no descriptors on or off for all ports::
1906
1907    testpmd> port config all drop-en (on|off)
1908
1909 Packet dropping for packets with no descriptors is off by default.
1910
1911 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1912
1913 port config - RSS
1914 ~~~~~~~~~~~~~~~~~
1915
1916 Set the RSS (Receive Side Scaling) mode on or off::
1917
1918    testpmd> port config all rss (all|default|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)
1919
1920 RSS is on by default.
1921
1922 The ``all`` option is equivalent to ip|tcp|udp|sctp|ether.
1923 The ``default`` option enables all supported RSS types reported by device info.
1924 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1925
1926 port config - RSS Reta
1927 ~~~~~~~~~~~~~~~~~~~~~~
1928
1929 Set the RSS (Receive Side Scaling) redirection table::
1930
1931    testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1932
1933 port config - DCB
1934 ~~~~~~~~~~~~~~~~~
1935
1936 Set the DCB mode for an individual port::
1937
1938    testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1939
1940 The traffic class should be 4 or 8.
1941
1942 port config - Burst
1943 ~~~~~~~~~~~~~~~~~~~
1944
1945 Set the number of packets per burst::
1946
1947    testpmd> port config all burst (value)
1948
1949 This is equivalent to the ``--burst`` command-line option.
1950
1951 port config - Threshold
1952 ~~~~~~~~~~~~~~~~~~~~~~~
1953
1954 Set thresholds for TX/RX queues::
1955
1956    testpmd> port config all (threshold) (value)
1957
1958 Where the threshold type can be:
1959
1960 * ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255.
1961
1962 * ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255.
1963
1964 * ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255.
1965
1966 * ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255.
1967
1968 * ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255.
1969
1970 * ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255.
1971
1972 * ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd.
1973
1974 * ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd.
1975
1976 * ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd.
1977
1978 These threshold options are also available from the command-line.
1979
1980 port config - E-tag
1981 ~~~~~~~~~~~~~~~~~~~
1982
1983 Set the value of ether-type for E-tag::
1984
1985    testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1986
1987 Enable/disable the E-tag support::
1988
1989    testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1990
1991 port config pctype mapping
1992 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1993
1994 Reset pctype mapping table::
1995
1996    testpmd> port config (port_id) pctype mapping reset
1997
1998 Update hardware defined pctype to software defined flow type mapping table::
1999
2000    testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id)
2001
2002 where:
2003
2004 * ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table.
2005
2006 * ``flow_type_id``: software flow type id as the index of the pctype mapping table.
2007
2008 port config input set
2009 ~~~~~~~~~~~~~~~~~~~~~
2010
2011 Config RSS/FDIR/FDIR flexible payload input set for some pctype::
2012    testpmd> port config (port_id) pctype (pctype_id) \
2013             (hash_inset|fdir_inset|fdir_flx_inset) \
2014             (get|set|clear) field (field_idx)
2015
2016 Clear RSS/FDIR/FDIR flexible payload input set for some pctype::
2017    testpmd> port config (port_id) pctype (pctype_id) \
2018             (hash_inset|fdir_inset|fdir_flx_inset) clear all
2019
2020 where:
2021
2022 * ``pctype_id``: hardware packet classification types.
2023 * ``field_idx``: hardware field index.
2024
2025 port config udp_tunnel_port
2026 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2027
2028 Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols::
2029     testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve (udp_port)
2030
2031 Link Bonding Functions
2032 ----------------------
2033
2034 The Link Bonding functions make it possible to dynamically create and
2035 manage link bonding devices from within testpmd interactive prompt.
2036
2037 create bonded device
2038 ~~~~~~~~~~~~~~~~~~~~
2039
2040 Create a new bonding device::
2041
2042    testpmd> create bonded device (mode) (socket)
2043
2044 For example, to create a bonded device in mode 1 on socket 0::
2045
2046    testpmd> create bonded device 1 0
2047    created new bonded device (port X)
2048
2049 add bonding slave
2050 ~~~~~~~~~~~~~~~~~
2051
2052 Adds Ethernet device to a Link Bonding device::
2053
2054    testpmd> add bonding slave (slave id) (port id)
2055
2056 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2057
2058    testpmd> add bonding slave 6 10
2059
2060
2061 remove bonding slave
2062 ~~~~~~~~~~~~~~~~~~~~
2063
2064 Removes an Ethernet slave device from a Link Bonding device::
2065
2066    testpmd> remove bonding slave (slave id) (port id)
2067
2068 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2069
2070    testpmd> remove bonding slave 6 10
2071
2072 set bonding mode
2073 ~~~~~~~~~~~~~~~~
2074
2075 Set the Link Bonding mode of a Link Bonding device::
2076
2077    testpmd> set bonding mode (value) (port id)
2078
2079 For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3)::
2080
2081    testpmd> set bonding mode 3 10
2082
2083 set bonding primary
2084 ~~~~~~~~~~~~~~~~~~~
2085
2086 Set an Ethernet slave device as the primary device on a Link Bonding device::
2087
2088    testpmd> set bonding primary (slave id) (port id)
2089
2090 For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10)::
2091
2092    testpmd> set bonding primary 6 10
2093
2094 set bonding mac
2095 ~~~~~~~~~~~~~~~
2096
2097 Set the MAC address of a Link Bonding device::
2098
2099    testpmd> set bonding mac (port id) (mac)
2100
2101 For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01::
2102
2103    testpmd> set bonding mac 10 00:00:00:00:00:01
2104
2105 set bonding xmit_balance_policy
2106 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2107
2108 Set the transmission policy for a Link Bonding device when it is in Balance XOR mode::
2109
2110    testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34)
2111
2112 For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports)::
2113
2114    testpmd> set bonding xmit_balance_policy 10 l34
2115
2116
2117 set bonding mon_period
2118 ~~~~~~~~~~~~~~~~~~~~~~
2119
2120 Set the link status monitoring polling period in milliseconds for a bonding device.
2121
2122 This adds support for PMD slave devices which do not support link status interrupts.
2123 When the mon_period is set to a value greater than 0 then all PMD's which do not support
2124 link status ISR will be queried every polling interval to check if their link status has changed::
2125
2126    testpmd> set bonding mon_period (port_id) (value)
2127
2128 For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms::
2129
2130    testpmd> set bonding mon_period 5 150
2131
2132
2133 set bonding lacp dedicated_queue
2134 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2135
2136 Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2137 when in mode 4 (link-aggregration-802.3ad)::
2138
2139    testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2140
2141
2142 set bonding agg_mode
2143 ~~~~~~~~~~~~~~~~~~~~
2144
2145 Enable one of the specific aggregators mode when in mode 4 (link-aggregration-802.3ad)::
2146
2147    testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable)
2148
2149
2150 show bonding config
2151 ~~~~~~~~~~~~~~~~~~~
2152
2153 Show the current configuration of a Link Bonding device::
2154
2155    testpmd> show bonding config (port id)
2156
2157 For example,
2158 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2159 in balance mode with a transmission policy of layer 2+3::
2160
2161    testpmd> show bonding config 9
2162         Bonding mode: 2
2163         Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23
2164         Slaves (3): [1 3 4]
2165         Active Slaves (3): [1 3 4]
2166         Primary: [3]
2167
2168
2169 Register Functions
2170 ------------------
2171
2172 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2173 This is mainly useful for debugging purposes.
2174 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2175 and fields that can be accessed.
2176
2177 read reg
2178 ~~~~~~~~
2179
2180 Display the value of a port register::
2181
2182    testpmd> read reg (port_id) (address)
2183
2184 For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller::
2185
2186    testpmd> read reg 0 0xEE00
2187    port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241)
2188
2189 read regfield
2190 ~~~~~~~~~~~~~
2191
2192 Display a port register bit field::
2193
2194    testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2195
2196 For example, reading the lowest two bits from the register in the example above::
2197
2198    testpmd> read regfield 0 0xEE00 0 1
2199    port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1)
2200
2201 read regbit
2202 ~~~~~~~~~~~
2203
2204 Display a single port register bit::
2205
2206    testpmd> read regbit (port_id) (address) (bit_x)
2207
2208 For example, reading the lowest bit from the register in the example above::
2209
2210    testpmd> read regbit 0 0xEE00 0
2211    port 0 PCI register at offset 0xEE00: bit 0=1
2212
2213 write reg
2214 ~~~~~~~~~
2215
2216 Set the value of a port register::
2217
2218    testpmd> write reg (port_id) (address) (value)
2219
2220 For example, to clear a register::
2221
2222    testpmd> write reg 0 0xEE00 0x0
2223    port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2224
2225 write regfield
2226 ~~~~~~~~~~~~~~
2227
2228 Set bit field of a port register::
2229
2230    testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2231
2232 For example, writing to the register cleared in the example above::
2233
2234    testpmd> write regfield 0 0xEE00 0 1 2
2235    port 0 PCI register at offset 0xEE00: 0x00000002 (2)
2236
2237 write regbit
2238 ~~~~~~~~~~~~
2239
2240 Set single bit value of a port register::
2241
2242    testpmd> write regbit (port_id) (address) (bit_x) (value)
2243
2244 For example, to set the high bit in the register from the example above::
2245
2246    testpmd> write regbit 0 0xEE00 31 1
2247    port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658)
2248
2249 Traffic Metering and Policing
2250 -----------------------------
2251
2252 The following section shows functions for configuring traffic metering and
2253 policing on the ethernet device through the use of generic ethdev API.
2254
2255 show port traffic management capability
2256 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2257
2258 Show traffic metering and policing capability of the port::
2259
2260    testpmd> show port meter cap (port_id)
2261
2262 add port meter profile (srTCM rfc2967)
2263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2264
2265 Add meter profile (srTCM rfc2697) to the ethernet device::
2266
2267    testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \
2268    (cir) (cbs) (ebs)
2269
2270 where:
2271
2272 * ``profile_id``: ID for the meter profile.
2273 * ``cir``: Committed Information Rate (CIR) (bytes/second).
2274 * ``cbs``: Committed Burst Size (CBS) (bytes).
2275 * ``ebs``: Excess Burst Size (EBS) (bytes).
2276
2277 add port meter profile (trTCM rfc2968)
2278 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2279
2280 Add meter profile (srTCM rfc2698) to the ethernet device::
2281
2282    testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \
2283    (cir) (pir) (cbs) (pbs)
2284
2285 where:
2286
2287 * ``profile_id``: ID for the meter profile.
2288 * ``cir``: Committed information rate (bytes/second).
2289 * ``pir``: Peak information rate (bytes/second).
2290 * ``cbs``: Committed burst size (bytes).
2291 * ``pbs``: Peak burst size (bytes).
2292
2293 add port meter profile (trTCM rfc4115)
2294 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2295
2296 Add meter profile (trTCM rfc4115) to the ethernet device::
2297
2298    testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \
2299    (cir) (eir) (cbs) (ebs)
2300
2301 where:
2302
2303 * ``profile_id``: ID for the meter profile.
2304 * ``cir``: Committed information rate (bytes/second).
2305 * ``eir``: Excess information rate (bytes/second).
2306 * ``cbs``: Committed burst size (bytes).
2307 * ``ebs``: Excess burst size (bytes).
2308
2309 delete port meter profile
2310 ~~~~~~~~~~~~~~~~~~~~~~~~~
2311
2312 Delete meter profile from the ethernet device::
2313
2314    testpmd> del port meter profile (port_id) (profile_id)
2315
2316 create port meter
2317 ~~~~~~~~~~~~~~~~~
2318
2319 Create new meter object for the ethernet device::
2320
2321    testpmd> create port meter (port_id) (mtr_id) (profile_id) \
2322    (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \
2323    (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\
2324    (dscp_tbl_entry63)]
2325
2326 where:
2327
2328 * ``mtr_id``: meter object ID.
2329 * ``profile_id``: ID for the meter profile.
2330 * ``meter_enable``: When this parameter has a non-zero value, the meter object
2331   gets enabled at the time of creation, otherwise remains disabled.
2332 * ``g_action``: Policer action for the packet with green color.
2333 * ``y_action``: Policer action for the packet with yellow color.
2334 * ``r_action``: Policer action for the packet with red color.
2335 * ``stats_mask``: Mask of statistics counter types to be enabled for the
2336   meter object.
2337 * ``shared``:  When this parameter has a non-zero value, the meter object is
2338   shared by multiple flows. Otherwise, meter object is used by single flow.
2339 * ``use_pre_meter_color``: When this parameter has a non-zero value, the
2340   input color for the current meter object is determined by the latest meter
2341   object in the same flow. Otherwise, the current meter object uses the
2342   *dscp_table* to determine the input color.
2343 * ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input
2344   color, 0 <= x <= 63.
2345
2346 enable port meter
2347 ~~~~~~~~~~~~~~~~~
2348
2349 Enable meter for the ethernet device::
2350
2351    testpmd> enable port meter (port_id) (mtr_id)
2352
2353 disable port meter
2354 ~~~~~~~~~~~~~~~~~~
2355
2356 Disable meter for the ethernet device::
2357
2358    testpmd> disable port meter (port_id) (mtr_id)
2359
2360 delete port meter
2361 ~~~~~~~~~~~~~~~~~
2362
2363 Delete meter for the ethernet device::
2364
2365    testpmd> del port meter (port_id) (mtr_id)
2366
2367 Set port meter profile
2368 ~~~~~~~~~~~~~~~~~~~~~~
2369
2370 Set meter profile for the ethernet device::
2371
2372    testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2373
2374 set port meter dscp table
2375 ~~~~~~~~~~~~~~~~~~~~~~~~~
2376
2377 Set meter dscp table for the ethernet device::
2378
2379    testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \
2380    (dscp_tbl_entry1)...(dscp_tbl_entry63)]
2381
2382 set port meter policer action
2383 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2384
2385 Set meter policer action for the ethernet device::
2386
2387    testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \
2388    (action0) [(action1) (action1)]
2389
2390 where:
2391
2392 * ``action_mask``: Bit mask indicating which policer actions need to be
2393   updated. One or more policer actions can be updated in a single function
2394   invocation. To update the policer action associated with color C, bit
2395   (1 << C) needs to be set in *action_mask* and element at position C
2396   in the *actions* array needs to be valid.
2397 * ``actionx``: Policer action for the color x,
2398   RTE_MTR_GREEN <= x < RTE_MTR_COLORS
2399
2400 set port meter stats mask
2401 ~~~~~~~~~~~~~~~~~~~~~~~~~
2402
2403 Set meter stats mask for the ethernet device::
2404
2405    testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2406
2407 where:
2408
2409 * ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2410
2411 show port meter stats
2412 ~~~~~~~~~~~~~~~~~~~~~
2413
2414 Show meter stats of the ethernet device::
2415
2416    testpmd> show port meter stats (port_id) (mtr_id) (clear)
2417
2418 where:
2419
2420 * ``clear``: Flag that indicates whether the statistics counters should
2421   be cleared (i.e. set to zero) immediately after they have been read or not.
2422
2423 Traffic Management
2424 ------------------
2425
2426 The following section shows functions for configuring traffic management on
2427 on the ethernet device through the use of generic TM API.
2428
2429 show port traffic management capability
2430 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2431
2432 Show traffic management capability of the port::
2433
2434    testpmd> show port tm cap (port_id)
2435
2436 show port traffic management capability (hierarchy level)
2437 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2438
2439 Show traffic management hierarchy level capability of the port::
2440
2441    testpmd> show port tm level cap (port_id) (level_id)
2442
2443 show port traffic management capability (hierarchy node level)
2444 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2445
2446 Show the traffic management hierarchy node capability of the port::
2447
2448    testpmd> show port tm node cap (port_id) (node_id)
2449
2450 show port traffic management hierarchy node type
2451 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2452
2453 Show the port traffic management hierarchy node type::
2454
2455    testpmd> show port tm node type (port_id) (node_id)
2456
2457 show port traffic management hierarchy node stats
2458 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2459
2460 Show the port traffic management hierarchy node statistics::
2461
2462    testpmd> show port tm node stats (port_id) (node_id) (clear)
2463
2464 where:
2465
2466 * ``clear``: When this parameter has a non-zero value, the statistics counters
2467   are cleared (i.e. set to zero) immediately after they have been read,
2468   otherwise the statistics counters are left untouched.
2469
2470 Add port traffic management private shaper profile
2471 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2472
2473 Add the port traffic management private shaper profile::
2474
2475    testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \
2476    (tb_rate) (tb_size) (packet_length_adjust)
2477
2478 where:
2479
2480 * ``shaper_profile id``: Shaper profile ID for the new profile.
2481 * ``tb_rate``: Token bucket rate (bytes per second).
2482 * ``tb_size``: Token bucket size (bytes).
2483 * ``packet_length_adjust``: The value (bytes) to be added to the length of
2484   each packet for the purpose of shaping. This parameter value can be used to
2485   correct the packet length with the framing overhead bytes that are consumed
2486   on the wire.
2487
2488 Delete port traffic management private shaper profile
2489 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2490
2491 Delete the port traffic management private shaper::
2492
2493    testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2494
2495 where:
2496
2497 * ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2498
2499 Add port traffic management shared shaper
2500 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2501
2502 Create the port traffic management shared shaper::
2503
2504    testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \
2505    (shaper_profile_id)
2506
2507 where:
2508
2509 * ``shared_shaper_id``: Shared shaper ID to be created.
2510 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2511
2512 Set port traffic management shared shaper
2513 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2514
2515 Update the port traffic management shared shaper::
2516
2517    testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \
2518    (shaper_profile_id)
2519
2520 where:
2521
2522 * ``shared_shaper_id``: Shared shaper ID to be update.
2523 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2524
2525 Delete port traffic management shared shaper
2526 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2527
2528 Delete the port traffic management shared shaper::
2529
2530    testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2531
2532 where:
2533
2534 * ``shared_shaper_id``: Shared shaper ID to be deleted.
2535
2536 Set port traffic management hiearchy node private shaper
2537 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2538
2539 set the port traffic management hierarchy node private shaper::
2540
2541    testpmd> set port tm node shaper profile (port_id) (node_id) \
2542    (shaper_profile_id)
2543
2544 where:
2545
2546 * ``shaper_profile id``: Private shaper profile ID to be enabled on the
2547   hierarchy node.
2548
2549 Add port traffic management WRED profile
2550 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2551
2552 Create a new WRED profile::
2553
2554    testpmd> add port tm node wred profile (port_id) (wred_profile_id) \
2555    (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \
2556    (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \
2557    (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)
2558
2559 where:
2560
2561 * ``wred_profile id``: Identifier for the newly create WRED profile
2562 * ``color_g``: Packet color (green)
2563 * ``min_th_g``: Minimum queue threshold for packet with green color
2564 * ``max_th_g``: Minimum queue threshold for packet with green color
2565 * ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp)
2566 * ``wq_log2_g``: Negated log2 of queue weight (wq)
2567 * ``color_y``: Packet color (yellow)
2568 * ``min_th_y``: Minimum queue threshold for packet with yellow color
2569 * ``max_th_y``: Minimum queue threshold for packet with yellow color
2570 * ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp)
2571 * ``wq_log2_y``: Negated log2 of queue weight (wq)
2572 * ``color_r``: Packet color (red)
2573 * ``min_th_r``: Minimum queue threshold for packet with yellow color
2574 * ``max_th_r``: Minimum queue threshold for packet with yellow color
2575 * ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp)
2576 * ``wq_log2_r``: Negated log2 of queue weight (wq)
2577
2578 Delete port traffic management WRED profile
2579 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2580
2581 Delete the WRED profile::
2582
2583    testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2584
2585 Add port traffic management hierarchy nonleaf node
2586 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2587
2588 Add nonleaf node to port traffic management hiearchy::
2589
2590    testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \
2591    (priority) (weight) (level_id) (shaper_profile_id) \
2592    (n_sp_priorities) (stats_mask) (n_shared_shapers) \
2593    [(shared_shaper_0) (shared_shaper_1) ...] \
2594
2595 where:
2596
2597 * ``parent_node_id``: Node ID of the parent.
2598 * ``priority``: Node priority (highest node priority is zero). This is used by
2599   the SP algorithm running on the parent node for scheduling this node.
2600 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2601   to the weight sum of all siblings that have the same priority. It is used by
2602   the WFQ algorithm running on the parent node for scheduling this node.
2603 * ``level_id``: Hiearchy level of the node.
2604 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2605   the node.
2606 * ``n_sp_priorities``: Number of strict priorities.
2607 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2608 * ``n_shared_shapers``: Number of shared shapers.
2609 * ``shared_shaper_id``: Shared shaper id.
2610
2611 Add port traffic management hierarchy leaf node
2612 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2613
2614 Add leaf node to port traffic management hiearchy::
2615
2616    testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \
2617    (priority) (weight) (level_id) (shaper_profile_id) \
2618    (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \
2619    [(shared_shaper_id) (shared_shaper_id) ...] \
2620
2621 where:
2622
2623 * ``parent_node_id``: Node ID of the parent.
2624 * ``priority``: Node priority (highest node priority is zero). This is used by
2625   the SP algorithm running on the parent node for scheduling this node.
2626 * ``weight``: Node weight (lowest weight is one). The node weight is relative
2627   to the weight sum of all siblings that have the same priority. It is used by
2628   the WFQ algorithm running on the parent node for scheduling this node.
2629 * ``level_id``: Hiearchy level of the node.
2630 * ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by
2631   the node.
2632 * ``cman_mode``: Congestion management mode to be enabled for this node.
2633 * ``wred_profile_id``: WRED profile id to be enabled for this node.
2634 * ``stats_mask``: Mask of statistics counter types to be enabled for this node.
2635 * ``n_shared_shapers``: Number of shared shapers.
2636 * ``shared_shaper_id``: Shared shaper id.
2637
2638 Delete port traffic management hierarchy node
2639 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2640
2641 Delete node from port traffic management hiearchy::
2642
2643    testpmd> del port tm node (port_id) (node_id)
2644
2645 Update port traffic management hierarchy parent node
2646 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2647
2648 Update port traffic management hierarchy parent node::
2649
2650    testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \
2651    (priority) (weight)
2652
2653 This function can only be called after the hierarchy commit invocation. Its
2654 success depends on the port support for this operation, as advertised through
2655 the port capability set. This function is valid for all nodes of the traffic
2656 management hierarchy except root node.
2657
2658 Suspend port traffic management hierarchy node
2659 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2660
2661    testpmd> suspend port tm node (port_id) (node_id)
2662
2663 Resume port traffic management hierarchy node
2664 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2665
2666    testpmd> resume port tm node (port_id) (node_id)
2667
2668 Commit port traffic management hierarchy
2669 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2670
2671 Commit the traffic management hierarchy on the port::
2672
2673    testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2674
2675 where:
2676
2677 * ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function
2678   call failure. On the other hand, hierarchy is preserved when this parameter
2679   is equal to zero.
2680
2681 Set port traffic management mark VLAN dei
2682 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2683
2684 Enables/Disables the traffic management marking on the port for VLAN packets::
2685
2686    testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red>
2687
2688 where:
2689
2690 * ``port_id``: The port which on which VLAN packets marked as ``green`` or
2691   ``yellow`` or ``red`` will have dei bit enabled
2692
2693 * ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green
2694
2695 * ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow
2696
2697 * ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red
2698
2699 Set port traffic management mark IP dscp
2700 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2701
2702 Enables/Disables the traffic management marking on the port for IP dscp packets::
2703
2704    testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red>
2705
2706 where:
2707
2708 * ``port_id``: The port which on which IP packets marked as ``green`` or
2709   ``yellow`` or ``red`` will have IP dscp bits updated
2710
2711 * ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets
2712
2713 * ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets
2714
2715 * ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets
2716
2717 Set port traffic management mark IP ecn
2718 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2719
2720 Enables/Disables the traffic management marking on the port for IP ecn packets::
2721
2722    testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red>
2723
2724 where:
2725
2726 * ``port_id``: The port which on which IP packets marked as ``green`` or
2727   ``yellow`` or ``red`` will have IP ecn bits updated
2728
2729 * ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01  or 2'b10
2730   to ecn of 2'b11 when IP is caring TCP or SCTP
2731
2732 * ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01  or 2'b10
2733   to ecn of 2'b11 when IP is caring TCP or SCTP
2734
2735 * ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01  or 2'b10
2736   to ecn of 2'b11 when IP is caring TCP or SCTP
2737
2738 Set port traffic management default hierarchy (softnic forwarding mode)
2739 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2740
2741 set the traffic management default hierarchy on the port::
2742
2743    testpmd> set port tm hierarchy default (port_id)
2744
2745 Filter Functions
2746 ----------------
2747
2748 This section details the available filter functions that are available.
2749
2750 Note these functions interface the deprecated legacy filtering framework,
2751 superseded by *rte_flow*. See `Flow rules management`_.
2752
2753 ethertype_filter
2754 ~~~~~~~~~~~~~~~~~~~~
2755
2756 Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::
2757
2758    ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \
2759                     ethertype (ether_type) (drop|fwd) queue (queue_id)
2760
2761 The available information parameters are:
2762
2763 * ``port_id``: The port which the Ethertype filter assigned on.
2764
2765 * ``mac_addr``: Compare destination mac address.
2766
2767 * ``mac_ignr``: Ignore destination mac address match.
2768
2769 * ``mac_address``: Destination mac address to match.
2770
2771 * ``ether_type``: The EtherType value want to match,
2772   for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.
2773
2774 * ``queue_id``: The receive queue associated with this EtherType filter.
2775   It is meaningless when deleting or dropping.
2776
2777 Example, to add/remove an ethertype filter rule::
2778
2779    testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \
2780                              ethertype 0x0806 fwd queue 3
2781
2782    testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \
2783                              ethertype 0x0806 fwd queue 3
2784
2785 2tuple_filter
2786 ~~~~~~~~~~~~~~~~~
2787
2788 Add or delete a 2-tuple filter,
2789 which identifies packets by specific protocol and destination TCP/UDP port
2790 and forwards packets into one of the receive queues::
2791
2792    2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \
2793                  protocol (protocol_value) mask (mask_value) \
2794                  tcp_flags (tcp_flags_value) priority (prio_value) \
2795                  queue (queue_id)
2796
2797 The available information parameters are:
2798
2799 * ``port_id``: The port which the 2-tuple filter assigned on.
2800
2801 * ``dst_port_value``: Destination port in L4.
2802
2803 * ``protocol_value``: IP L4 protocol.
2804
2805 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate.
2806
2807 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP).
2808
2809 * ``prio_value``: Priority of this filter.
2810
2811 * ``queue_id``: The receive queue associated with this 2-tuple filter.
2812
2813 Example, to add/remove an 2tuple filter rule::
2814
2815    testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \
2816                           tcp_flags 0x02 priority 3 queue 3
2817
2818    testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \
2819                           tcp_flags 0x02 priority 3 queue 3
2820
2821 5tuple_filter
2822 ~~~~~~~~~~~~~~~~~
2823
2824 Add or delete a 5-tuple filter,
2825 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
2826 and routes packets into one of the receive queues::
2827
2828    5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \
2829                  (src_address) dst_port (dst_port_value) \
2830                  src_port (src_port_value) protocol (protocol_value) \
2831                  mask (mask_value) tcp_flags (tcp_flags_value) \
2832                  priority (prio_value) queue (queue_id)
2833
2834 The available information parameters are:
2835
2836 * ``port_id``: The port which the 5-tuple filter assigned on.
2837
2838 * ``dst_address``: Destination IP address.
2839
2840 * ``src_address``: Source IP address.
2841
2842 * ``dst_port_value``: TCP/UDP destination port.
2843
2844 * ``src_port_value``: TCP/UDP source port.
2845
2846 * ``protocol_value``: L4 protocol.
2847
2848 * ``mask_value``: Participates in the match or not by bit for field above, 1b means participate
2849
2850 * ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP).
2851
2852 * ``prio_value``: The priority of this filter.
2853
2854 * ``queue_id``: The receive queue associated with this 5-tuple filter.
2855
2856 Example, to add/remove an 5tuple filter rule::
2857
2858    testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \
2859             dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
2860             flags 0x0 priority 3 queue 3
2861
2862    testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \
2863             dst_port 64 src_port 32 protocol 0x06 mask 0x1F \
2864             flags 0x0 priority 3 queue 3
2865
2866 syn_filter
2867 ~~~~~~~~~~
2868
2869 Using the  SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue::
2870
2871    syn_filter (port_id) (add|del) priority (high|low) queue (queue_id)
2872
2873 The available information parameters are:
2874
2875 * ``port_id``: The port which the SYN filter assigned on.
2876
2877 * ``high``: This SYN filter has higher priority than other filters.
2878
2879 * ``low``: This SYN filter has lower priority than other filters.
2880
2881 * ``queue_id``: The receive queue associated with this SYN filter
2882
2883 Example::
2884
2885    testpmd> syn_filter 0 add priority high queue 3
2886
2887 flex_filter
2888 ~~~~~~~~~~~
2889
2890 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
2891 and routed into one of the receive queues::
2892
2893    flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \
2894                mask (mask_value) priority (prio_value) queue (queue_id)
2895
2896 The available information parameters are:
2897
2898 * ``port_id``: The port which the Flex filter is assigned on.
2899
2900 * ``len_value``: Filter length in bytes, no greater than 128.
2901
2902 * ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match.
2903
2904 * ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match.
2905
2906 * ``prio_value``: The priority of this filter.
2907
2908 * ``queue_id``: The receive queue associated with this Flex filter.
2909
2910 Example::
2911
2912    testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \
2913                           mask 000C priority 3 queue 3
2914
2915    testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \
2916                           mask 000C priority 3 queue 3
2917
2918
2919 .. _testpmd_flow_director:
2920
2921 flow_director_filter
2922 ~~~~~~~~~~~~~~~~~~~~
2923
2924 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
2925
2926 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
2927 Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter:
2928
2929 * Perfect match filters.
2930   The hardware checks a match between the masked fields of the received packets and the programmed filters.
2931   The masked fields are for IP flow.
2932
2933 * Signature filters.
2934   The hardware checks a match between a hash-based signature of the masked fields of the received packet.
2935
2936 * Perfect-mac-vlan match filters.
2937   The hardware checks a match between the masked fields of the received packets and the programmed filters.
2938   The masked fields are for MAC VLAN flow.
2939
2940 * Perfect-tunnel match filters.
2941   The hardware checks a match between the masked fields of the received packets and the programmed filters.
2942   The masked fields are for tunnel flow.
2943
2944 * Perfect-raw-flow-type match filters.
2945   The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet.
2946   The masked fields are specified by input sets.
2947
2948 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
2949 per flow type and the flexible payload.
2950
2951 The Flow Director can also mask out parts of all of these fields so that filters
2952 are only applied to certain fields or parts of the fields.
2953
2954 Note that for raw flow type mode the source and destination fields in the
2955 raw packet buffer need to be presented in a reversed order with respect
2956 to the expected received packets.
2957 For example: IP source and destination addresses or TCP/UDP/SCTP
2958 source and destination ports
2959
2960 Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information.
2961
2962 # Commands to add flow director filters of different flow types::
2963
2964    flow_director_filter (port_id) mode IP (add|del|update) \
2965                         flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \
2966                         src (src_ip_address) dst (dst_ip_address) \
2967                         tos (tos_value) proto (proto_value) ttl (ttl_value) \
2968                         vlan (vlan_value) flexbytes (flexbytes_value) \
2969                         (drop|fwd) pf|vf(vf_id) queue (queue_id) \
2970                         fd_id (fd_id_value)
2971
2972    flow_director_filter (port_id) mode IP (add|del|update) \
2973                         flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \
2974                         src (src_ip_address) (src_port) \
2975                         dst (dst_ip_address) (dst_port) \
2976                         tos (tos_value) ttl (ttl_value) \
2977                         vlan (vlan_value) flexbytes (flexbytes_value) \
2978                         (drop|fwd) queue pf|vf(vf_id) (queue_id) \
2979                         fd_id (fd_id_value)
2980
2981    flow_director_filter (port_id) mode IP (add|del|update) \
2982                         flow (ipv4-sctp|ipv6-sctp) \
2983                         src (src_ip_address) (src_port) \
2984                         dst (dst_ip_address) (dst_port) \
2985                         tos (tos_value) ttl (ttl_value) \
2986                         tag (verification_tag) vlan (vlan_value) \
2987                         flexbytes (flexbytes_value) (drop|fwd) \
2988                         pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)
2989
2990    flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \
2991                         ether (ethertype) flexbytes (flexbytes_value) \
2992                         (drop|fwd) pf|vf(vf_id) queue (queue_id)
2993                         fd_id (fd_id_value)
2994
2995    flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \
2996                         mac (mac_address) vlan (vlan_value) \
2997                         flexbytes (flexbytes_value) (drop|fwd) \
2998                         queue (queue_id) fd_id (fd_id_value)
2999
3000    flow_director_filter (port_id) mode Tunnel (add|del|update) \
3001                         mac (mac_address) vlan (vlan_value) \
3002                         tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \
3003                         flexbytes (flexbytes_value) (drop|fwd) \
3004                         queue (queue_id) fd_id (fd_id_value)
3005
3006    flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \
3007                         (drop|fwd) queue (queue_id) fd_id (fd_id_value) \
3008                         packet (packet file name)
3009
3010 For example, to add an ipv4-udp flow type filter::
3011
3012    testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \
3013             dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \
3014             fwd pf queue 1 fd_id 1
3015
3016 For example, add an ipv4-other flow type filter::
3017
3018    testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \
3019              dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \
3020              flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1
3021
3022 flush_flow_director
3023 ~~~~~~~~~~~~~~~~~~~
3024
3025 Flush all flow director filters on a device::
3026
3027    testpmd> flush_flow_director (port_id)
3028
3029 Example, to flush all flow director filter on port 0::
3030
3031    testpmd> flush_flow_director 0
3032
3033 flow_director_mask
3034 ~~~~~~~~~~~~~~~~~~
3035
3036 Set flow director's input masks::
3037
3038    flow_director_mask (port_id) mode IP vlan (vlan_value) \
3039                       src_mask (ipv4_src) (ipv6_src) (src_port) \
3040                       dst_mask (ipv4_dst) (ipv6_dst) (dst_port)
3041
3042    flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value)
3043
3044    flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \
3045                       mac (mac_value) tunnel-type (tunnel_type_value) \
3046                       tunnel-id (tunnel_id_value)
3047
3048 Example, to set flow director mask on port 0::
3049
3050    testpmd> flow_director_mask 0 mode IP vlan 0xefff \
3051             src_mask 255.255.255.255 \
3052                 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \
3053             dst_mask 255.255.255.255 \
3054                 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF
3055
3056 flow_director_flex_mask
3057 ~~~~~~~~~~~~~~~~~~~~~~~
3058
3059 set masks of flow director's flexible payload based on certain flow type::
3060
3061    testpmd> flow_director_flex_mask (port_id) \
3062             flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3063                   ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \
3064                   l2_payload|all) (mask)
3065
3066 Example, to set flow director's flex mask for all flow type on port 0::
3067
3068    testpmd> flow_director_flex_mask 0 flow all \
3069             (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
3070
3071
3072 flow_director_flex_payload
3073 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3074
3075 Configure flexible payload selection::
3076
3077    flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3078
3079 For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload::
3080
3081    testpmd> flow_director_flex_payload 0 l4 \
3082             (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
3083
3084 get_sym_hash_ena_per_port
3085 ~~~~~~~~~~~~~~~~~~~~~~~~~
3086
3087 Get symmetric hash enable configuration per port::
3088
3089    get_sym_hash_ena_per_port (port_id)
3090
3091 For example, to get symmetric hash enable configuration of port 1::
3092
3093    testpmd> get_sym_hash_ena_per_port 1
3094
3095 set_sym_hash_ena_per_port
3096 ~~~~~~~~~~~~~~~~~~~~~~~~~
3097
3098 Set symmetric hash enable configuration per port to enable or disable::
3099
3100    set_sym_hash_ena_per_port (port_id) (enable|disable)
3101
3102 For example, to set symmetric hash enable configuration of port 1 to enable::
3103
3104    testpmd> set_sym_hash_ena_per_port 1 enable
3105
3106 get_hash_global_config
3107 ~~~~~~~~~~~~~~~~~~~~~~
3108
3109 Get the global configurations of hash filters::
3110
3111    get_hash_global_config (port_id)
3112
3113 For example, to get the global configurations of hash filters of port 1::
3114
3115    testpmd> get_hash_global_config 1
3116
3117 set_hash_global_config
3118 ~~~~~~~~~~~~~~~~~~~~~~
3119
3120 Set the global configurations of hash filters::
3121
3122    set_hash_global_config (port_id) (toeplitz|simple_xor|default) \
3123    (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \
3124    ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flow_id>) \
3125    (enable|disable)
3126
3127 For example, to enable simple_xor for flow type of ipv6 on port 2::
3128
3129    testpmd> set_hash_global_config 2 simple_xor ipv6 enable
3130
3131 set_hash_input_set
3132 ~~~~~~~~~~~~~~~~~~
3133
3134 Set the input set for hash::
3135
3136    set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3137    ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3138    l2_payload|<flow_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3139    ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \
3140    tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \
3141    udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \
3142    fld-8th|none) (select|add)
3143
3144 For example, to add source IP to hash input set for flow type of ipv4-udp on port 0::
3145
3146    testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add
3147
3148 set_fdir_input_set
3149 ~~~~~~~~~~~~~~~~~~
3150
3151 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3152 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3153
3154 Set the input set for flow director::
3155
3156    set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \
3157    ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \
3158    l2_payload|<flow_id>) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \
3159    ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \
3160    tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \
3161    sctp-dst-port|sctp-veri-tag|none) (select|add)
3162
3163 For example to add source IP to FD input set for flow type of ipv4-udp on port 0::
3164
3165    testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add
3166
3167 global_config
3168 ~~~~~~~~~~~~~
3169
3170 Set different GRE key length for input set::
3171
3172    global_config (port_id) gre-key-len (number in bytes)
3173
3174 For example to set GRE key length for input set to 4 bytes on port 0::
3175
3176    testpmd> global_config 0 gre-key-len 4
3177
3178
3179 .. _testpmd_rte_flow:
3180
3181 Flow rules management
3182 ---------------------
3183
3184 Control of the generic flow API (*rte_flow*) is fully exposed through the
3185 ``flow`` command (validation, creation, destruction, queries and operation
3186 modes).
3187
3188 Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3189 features simultaneously may cause undefined side-effects and is therefore
3190 not recommended.
3191
3192 ``flow`` syntax
3193 ~~~~~~~~~~~~~~~
3194
3195 Because the ``flow`` command uses dynamic tokens to handle the large number
3196 of possible flow rules combinations, its behavior differs slightly from
3197 other commands, in particular:
3198
3199 - Pressing *?* or the *<tab>* key displays contextual help for the current
3200   token, not that of the entire command.
3201
3202 - Optional and repeated parameters are supported (provided they are listed
3203   in the contextual help).
3204
3205 The first parameter stands for the operation mode. Possible operations and
3206 their general syntax are described below. They are covered in detail in the
3207 following sections.
3208
3209 - Check whether a flow rule can be created::
3210
3211    flow validate {port_id}
3212        [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3213        pattern {item} [/ {item} [...]] / end
3214        actions {action} [/ {action} [...]] / end
3215
3216 - Create a flow rule::
3217
3218    flow create {port_id}
3219        [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3220        pattern {item} [/ {item} [...]] / end
3221        actions {action} [/ {action} [...]] / end
3222
3223 - Destroy specific flow rules::
3224
3225    flow destroy {port_id} rule {rule_id} [...]
3226
3227 - Destroy all flow rules::
3228
3229    flow flush {port_id}
3230
3231 - Query an existing flow rule::
3232
3233    flow query {port_id} {rule_id} {action}
3234
3235 - List existing flow rules sorted by priority, filtered by group
3236   identifiers::
3237
3238    flow list {port_id} [group {group_id}] [...]
3239
3240 - Restrict ingress traffic to the defined flow rules::
3241
3242    flow isolate {port_id} {boolean}
3243
3244 Validating flow rules
3245 ~~~~~~~~~~~~~~~~~~~~~
3246
3247 ``flow validate`` reports whether a flow rule would be accepted by the
3248 underlying device in its current state but stops short of creating it. It is
3249 bound to ``rte_flow_validate()``::
3250
3251    flow validate {port_id}
3252       [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3253       pattern {item} [/ {item} [...]] / end
3254       actions {action} [/ {action} [...]] / end
3255
3256 If successful, it will show::
3257
3258    Flow rule validated
3259
3260 Otherwise it will show an error message of the form::
3261
3262    Caught error type [...] ([...]): [...]
3263
3264 This command uses the same parameters as ``flow create``, their format is
3265 described in `Creating flow rules`_.
3266
3267 Check whether redirecting any Ethernet packet received on port 0 to RX queue
3268 index 6 is supported::
3269
3270    testpmd> flow validate 0 ingress pattern eth / end
3271       actions queue index 6 / end
3272    Flow rule validated
3273    testpmd>
3274
3275 Port 0 does not support TCPv6 rules::
3276
3277    testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end
3278       actions drop / end
3279    Caught error type 9 (specific pattern item): Invalid argument
3280    testpmd>
3281
3282 Creating flow rules
3283 ~~~~~~~~~~~~~~~~~~~
3284
3285 ``flow create`` validates and creates the specified flow rule. It is bound
3286 to ``rte_flow_create()``::
3287
3288    flow create {port_id}
3289       [group {group_id}] [priority {level}] [ingress] [egress] [transfer]
3290       pattern {item} [/ {item} [...]] / end
3291       actions {action} [/ {action} [...]] / end
3292
3293 If successful, it will return a flow rule ID usable with other commands::
3294
3295    Flow rule #[...] created
3296
3297 Otherwise it will show an error message of the form::
3298
3299    Caught error type [...] ([...]): [...]
3300
3301 Parameters describe in the following order:
3302
3303 - Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens).
3304 - A matching pattern, starting with the *pattern* token and terminated by an
3305   *end* pattern item.
3306 - Actions, starting with the *actions* token and terminated by an *end*
3307   action.
3308
3309 These translate directly to *rte_flow* objects provided as-is to the
3310 underlying functions.
3311
3312 The shortest valid definition only comprises mandatory tokens::
3313
3314    testpmd> flow create 0 pattern end actions end
3315
3316 Note that PMDs may refuse rules that essentially do nothing such as this
3317 one.
3318
3319 **All unspecified object values are automatically initialized to 0.**
3320
3321 Attributes
3322 ^^^^^^^^^^
3323
3324 These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3325 specified before the ``pattern`` token.
3326
3327 - ``group {group id}``: priority group.
3328 - ``priority {level}``: priority level within group.
3329 - ``ingress``: rule applies to ingress traffic.
3330 - ``egress``: rule applies to egress traffic.
3331 - ``transfer``: apply rule directly to endpoints found in pattern.
3332
3333 Each instance of an attribute specified several times overrides the previous
3334 value as shown below (group 4 is used)::
3335
3336    testpmd> flow create 0 group 42 group 24 group 4 [...]
3337
3338 Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3339
3340 While not specifying a direction is an error, some rules may allow both
3341 simultaneously.
3342
3343 Most rules affect RX therefore contain the ``ingress`` token::
3344
3345    testpmd> flow create 0 ingress pattern [...]
3346
3347 Matching pattern
3348 ^^^^^^^^^^^^^^^^
3349
3350 A matching pattern starts after the ``pattern`` token. It is made of pattern
3351 items and is terminated by a mandatory ``end`` item.
3352
3353 Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3354 rte_flow_item_type``).
3355
3356 The ``/`` token is used as a separator between pattern items as shown
3357 below::
3358
3359    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3360
3361 Note that protocol items like these must be stacked from lowest to highest
3362 layer to make sense. For instance, the following rule is either invalid or
3363 unlikely to match any packet::
3364
3365    testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3366
3367 More information on these restrictions can be found in the *rte_flow*
3368 documentation.
3369
3370 Several items support additional specification structures, for example
3371 ``ipv4`` allows specifying source and destination addresses as follows::
3372
3373    testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1
3374       dst is 10.2.0.0 / end [...]
3375
3376 This rule matches all IPv4 traffic with the specified properties.
3377
3378 In this example, ``src`` and ``dst`` are field names of the underlying
3379 ``struct rte_flow_item_ipv4`` object. All item properties can be specified
3380 in a similar fashion.
3381
3382 The ``is`` token means that the subsequent value must be matched exactly,
3383 and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3384 accordingly. Possible assignment tokens are:
3385
3386 - ``is``: match value perfectly (with full bit-mask).
3387 - ``spec``: match value according to configured bit-mask.
3388 - ``last``: specify upper bound to establish a range.
3389 - ``mask``: specify bit-mask with relevant bits set to one.
3390 - ``prefix``: generate bit-mask from a prefix length.
3391
3392 These yield identical results::
3393
3394    ipv4 src is 10.1.1.1
3395
3396 ::
3397
3398    ipv4 src spec 10.1.1.1 src mask 255.255.255.255
3399
3400 ::
3401
3402    ipv4 src spec 10.1.1.1 src prefix 32
3403
3404 ::
3405
3406    ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value
3407
3408 ::
3409
3410    ipv4 src is 10.1.1.1 src last 0 # 0 disables range
3411
3412 Inclusive ranges can be defined with ``last``::
3413
3414    ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4
3415
3416 Note that ``mask`` affects both ``spec`` and ``last``::
3417
3418    ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0
3419       # matches 10.1.0.0 to 10.2.255.255
3420
3421 Properties can be modified multiple times::
3422
3423    ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4
3424
3425 ::
3426
3427    ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16
3428
3429 Pattern items
3430 ^^^^^^^^^^^^^
3431
3432 This section lists supported pattern items and their attributes, if any.
3433
3434 - ``end``: end list of pattern items.
3435
3436 - ``void``: no-op pattern item.
3437
3438 - ``invert``: perform actions when pattern does not match.
3439
3440 - ``any``: match any protocol for the current layer.
3441
3442   - ``num {unsigned}``: number of layers covered.
3443
3444 - ``pf``: match traffic from/to the physical function.
3445
3446 - ``vf``: match traffic from/to a virtual function ID.
3447
3448   - ``id {unsigned}``: VF ID.
3449
3450 - ``phy_port``: match traffic from/to a specific physical port.
3451
3452   - ``index {unsigned}``: physical port index.
3453
3454 - ``port_id``: match traffic from/to a given DPDK port ID.
3455
3456   - ``id {unsigned}``: DPDK port ID.
3457
3458 - ``mark``: match value set in previously matched flow rule using the mark action.
3459
3460   - ``id {unsigned}``: arbitrary integer value.
3461
3462 - ``raw``: match an arbitrary byte string.
3463
3464   - ``relative {boolean}``: look for pattern after the previous item.
3465   - ``search {boolean}``: search pattern from offset (see also limit).
3466   - ``offset {integer}``: absolute or relative offset for pattern.
3467   - ``limit {unsigned}``: search area limit for start of pattern.
3468   - ``pattern {string}``: byte string to look for.
3469
3470 - ``eth``: match Ethernet header.
3471
3472   - ``dst {MAC-48}``: destination MAC.
3473   - ``src {MAC-48}``: source MAC.
3474   - ``type {unsigned}``: EtherType or TPID.
3475
3476 - ``vlan``: match 802.1Q/ad VLAN tag.
3477
3478   - ``tci {unsigned}``: tag control information.
3479   - ``pcp {unsigned}``: priority code point.
3480   - ``dei {unsigned}``: drop eligible indicator.
3481   - ``vid {unsigned}``: VLAN identifier.
3482   - ``inner_type {unsigned}``: inner EtherType or TPID.
3483
3484 - ``ipv4``: match IPv4 header.
3485
3486   - ``tos {unsigned}``: type of service.
3487   - ``ttl {unsigned}``: time to live.
3488   - ``proto {unsigned}``: next protocol ID.
3489   - ``src {ipv4 address}``: source address.
3490   - ``dst {ipv4 address}``: destination address.
3491
3492 - ``ipv6``: match IPv6 header.
3493
3494   - ``tc {unsigned}``: traffic class.
3495   - ``flow {unsigned}``: flow label.
3496   - ``proto {unsigned}``: protocol (next header).
3497   - ``hop {unsigned}``: hop limit.
3498   - ``src {ipv6 address}``: source address.
3499   - ``dst {ipv6 address}``: destination address.
3500
3501 - ``icmp``: match ICMP header.
3502
3503   - ``type {unsigned}``: ICMP packet type.
3504   - ``code {unsigned}``: ICMP packet code.
3505
3506 - ``udp``: match UDP header.
3507
3508   - ``src {unsigned}``: UDP source port.
3509   - ``dst {unsigned}``: UDP destination port.
3510
3511 - ``tcp``: match TCP header.
3512
3513   - ``src {unsigned}``: TCP source port.
3514   - ``dst {unsigned}``: TCP destination port.
3515
3516 - ``sctp``: match SCTP header.
3517
3518   - ``src {unsigned}``: SCTP source port.
3519   - ``dst {unsigned}``: SCTP destination port.
3520   - ``tag {unsigned}``: validation tag.
3521   - ``cksum {unsigned}``: checksum.
3522
3523 - ``vxlan``: match VXLAN header.
3524
3525   - ``vni {unsigned}``: VXLAN identifier.
3526
3527 - ``e_tag``: match IEEE 802.1BR E-Tag header.
3528
3529   - ``grp_ecid_b {unsigned}``: GRP and E-CID base.
3530
3531 - ``nvgre``: match NVGRE header.
3532
3533   - ``tni {unsigned}``: virtual subnet ID.
3534
3535 - ``mpls``: match MPLS header.
3536
3537   - ``label {unsigned}``: MPLS label.
3538
3539 - ``gre``: match GRE header.
3540
3541   - ``protocol {unsigned}``: protocol type.
3542
3543 - ``fuzzy``: fuzzy pattern match, expect faster than default.
3544
3545   - ``thresh {unsigned}``: accuracy threshold.
3546
3547 - ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
3548
3549   - ``teid {unsigned}``: tunnel endpoint identifier.
3550
3551 - ``geneve``: match GENEVE header.
3552
3553   - ``vni {unsigned}``: virtual network identifier.
3554   - ``protocol {unsigned}``: protocol type.
3555
3556 - ``vxlan-gpe``: match VXLAN-GPE header.
3557
3558   - ``vni {unsigned}``: VXLAN-GPE identifier.
3559
3560 - ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.
3561
3562   - ``sha {MAC-48}``: sender hardware address.
3563   - ``spa {ipv4 address}``: sender IPv4 address.
3564   - ``tha {MAC-48}``: target hardware address.
3565   - ``tpa {ipv4 address}``: target IPv4 address.
3566
3567 - ``ipv6_ext``: match presence of any IPv6 extension header.
3568
3569   - ``next_hdr {unsigned}``: next header.
3570
3571 - ``icmp6``: match any ICMPv6 header.
3572
3573   - ``type {unsigned}``: ICMPv6 type.
3574   - ``code {unsigned}``: ICMPv6 code.
3575
3576 - ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.
3577
3578   - ``target_addr {ipv6 address}``: target address.
3579
3580 - ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.
3581
3582   - ``target_addr {ipv6 address}``: target address.
3583
3584 - ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.
3585
3586   - ``type {unsigned}``: ND option type.
3587
3588 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet
3589   link-layer address option.
3590
3591   - ``sla {MAC-48}``: source Ethernet LLA.
3592
3593 - ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery target Ethernet
3594   link-layer address option.
3595
3596   - ``tla {MAC-48}``: target Ethernet LLA.
3597
3598 Actions list
3599 ^^^^^^^^^^^^
3600
3601 A list of actions starts after the ``actions`` token in the same fashion as
3602 `Matching pattern`_; actions are separated by ``/`` tokens and the list is
3603 terminated by a mandatory ``end`` action.
3604
3605 Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3606 rte_flow_action_type``).
3607
3608 Dropping all incoming UDPv4 packets can be expressed as follows::
3609
3610    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3611       actions drop / end
3612
3613 Several actions have configurable properties which must be specified when
3614 there is no valid default value. For example, ``queue`` requires a target
3615 queue index.
3616
3617 This rule redirects incoming UDPv4 traffic to queue index 6::
3618
3619    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3620       actions queue index 6 / end
3621
3622 While this one could be rejected by PMDs (unspecified queue index)::
3623
3624    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
3625       actions queue / end
3626
3627 As defined by *rte_flow*, the list is not ordered, all actions of a given
3628 rule are performed simultaneously. These are equivalent::
3629
3630    queue index 6 / void / mark id 42 / end
3631
3632 ::
3633
3634    void / mark id 42 / queue index 6 / end
3635
3636 All actions in a list should have different types, otherwise only the last
3637 action of a given type is taken into account::
3638
3639    queue index 4 / queue index 5 / queue index 6 / end # will use queue 6
3640
3641 ::
3642
3643    drop / drop / drop / end # drop is performed only once
3644
3645 ::
3646
3647    mark id 42 / queue index 3 / mark id 24 / end # mark will be 24
3648
3649 Considering they are performed simultaneously, opposite and overlapping
3650 actions can sometimes be combined when the end result is unambiguous::
3651
3652    drop / queue index 6 / end # drop has no effect
3653
3654 ::
3655
3656    queue index 6 / rss queues 6 7 8 / end # queue has no effect
3657
3658 ::
3659
3660    drop / passthru / end # drop has no effect
3661
3662 Note that PMDs may still refuse such combinations.
3663
3664 Actions
3665 ^^^^^^^
3666
3667 This section lists supported actions and their attributes, if any.
3668
3669 - ``end``: end list of actions.
3670
3671 - ``void``: no-op action.
3672
3673 - ``passthru``: let subsequent rule process matched packets.
3674
3675 - ``jump``: redirect traffic to group on device.
3676
3677   - ``group {unsigned}``: group to redirect to.
3678
3679 - ``mark``: attach 32 bit value to packets.
3680
3681   - ``id {unsigned}``: 32 bit value to return with packets.
3682
3683 - ``flag``: flag packets.
3684
3685 - ``queue``: assign packets to a given queue index.
3686
3687   - ``index {unsigned}``: queue index to use.
3688
3689 - ``drop``: drop packets (note: passthru has priority).
3690
3691 - ``count``: enable counters for this rule.
3692
3693 - ``rss``: spread packets among several queues.
3694
3695   - ``func {hash function}``: RSS hash function to apply, allowed tokens are
3696     the same as `set_hash_global_config`_.
3697
3698   - ``level {unsigned}``: encapsulation level for ``types``.
3699
3700   - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed
3701     tokens are the same as `set_hash_input_set`_, except that an empty list
3702     does not disable RSS but instead requests unspecified "best-effort"
3703     settings.
3704
3705   - ``key {string}``: RSS hash key, overrides ``key_len``.
3706
3707   - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in
3708     conjunction with ``key`` to pad or truncate it.
3709
3710   - ``queues [{unsigned} [...]] end``: queue indices to use.
3711
3712 - ``pf``: direct traffic to physical function.
3713
3714 - ``vf``: direct traffic to a virtual function ID.
3715
3716   - ``original {boolean}``: use original VF ID if possible.
3717   - ``id {unsigned}``: VF ID.
3718
3719 - ``phy_port``: direct packets to physical port index.
3720
3721   - ``original {boolean}``: use original port index if possible.
3722   - ``index {unsigned}``: physical port index.
3723
3724 - ``port_id``: direct matching traffic to a given DPDK port ID.
3725
3726   - ``original {boolean}``: use original DPDK port ID if possible.
3727   - ``id {unsigned}``: DPDK port ID.
3728
3729 - ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``.
3730
3731   - ``mpls_ttl``: MPLS TTL.
3732
3733 - ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``.
3734
3735 - ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``.
3736
3737   - ``nw_ttl``: IP TTL.
3738
3739 - ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``.
3740
3741 - ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``.
3742
3743 - ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``.
3744
3745 - ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``.
3746
3747 - ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``.
3748
3749   - ``ethertype``: Ethertype.
3750
3751 - ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``.
3752
3753   - ``vlan_vid``: VLAN id.
3754
3755 - ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``.
3756
3757   - ``vlan_pcp``: VLAN priority.
3758
3759 - ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``.
3760
3761   - ``ethertype``: Ethertype.
3762
3763 - ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``.
3764
3765   - ``ethertype``: Ethertype.
3766
3767 - ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration
3768   is done through `Config VXLAN Encap outer layers`_.
3769
3770 - ``vxlan_decap``: Performs a decapsulation action by stripping all headers of
3771   the VXLAN tunnel network overlay from the matched flow.
3772
3773 - ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration
3774   is done through `Config NVGRE Encap outer layers`_.
3775
3776 - ``nvgre_decap``: Performs a decapsulation action by stripping all headers of
3777   the NVGRE tunnel network overlay from the matched flow.
3778
3779 - ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header.
3780
3781   - ``ipv4_addr``: New IPv4 source address.
3782
3783 - ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4
3784   header.
3785
3786   - ``ipv4_addr``: New IPv4 destination address.
3787
3788 - ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header.
3789
3790   - ``ipv6_addr``: New IPv6 source address.
3791
3792 - ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6
3793   header.
3794
3795   - ``ipv6_addr``: New IPv6 destination address.
3796
3797 - ``of_set_tp_src``: Set a new source port number in the outermost TCP/UDP
3798   header.
3799
3800   - ``port``: New TCP/UDP source port number.
3801
3802 - ``of_set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
3803   header.
3804
3805   - ``port``: New TCP/UDP destination port number.
3806
3807 - ``mac_swap``: Swap the source and destination MAC addresses in the outermost
3808   Ethernet header.
3809
3810 - ``dec_ttl``: Performs a decrease TTL value action
3811
3812 - ``set_ttl``: Set TTL value with specificed value
3813   - ``ttl_value {unsigned}``: The new TTL value to be set
3814
3815 - ``set_mac_src``: set source MAC address
3816
3817   - ``mac_addr {MAC-48}``: new source MAC address
3818
3819 - ``set_mac_dst``: set destination MAC address
3820
3821   - ``mac_addr {MAC-48}``: new destination MAC address
3822
3823 Destroying flow rules
3824 ~~~~~~~~~~~~~~~~~~~~~
3825
3826 ``flow destroy`` destroys one or more rules from their rule ID (as returned
3827 by ``flow create``), this command calls ``rte_flow_destroy()`` as many
3828 times as necessary::
3829
3830    flow destroy {port_id} rule {rule_id} [...]
3831
3832 If successful, it will show::
3833
3834    Flow rule #[...] destroyed
3835
3836 It does not report anything for rule IDs that do not exist. The usual error
3837 message is shown when a rule cannot be destroyed::
3838
3839    Caught error type [...] ([...]): [...]
3840
3841 ``flow flush`` destroys all rules on a device and does not take extra
3842 arguments. It is bound to ``rte_flow_flush()``::
3843
3844    flow flush {port_id}
3845
3846 Any errors are reported as above.
3847
3848 Creating several rules and destroying them::
3849
3850    testpmd> flow create 0 ingress pattern eth / ipv6 / end
3851       actions queue index 2 / end
3852    Flow rule #0 created
3853    testpmd> flow create 0 ingress pattern eth / ipv4 / end
3854       actions queue index 3 / end
3855    Flow rule #1 created
3856    testpmd> flow destroy 0 rule 0 rule 1
3857    Flow rule #1 destroyed
3858    Flow rule #0 destroyed
3859    testpmd>
3860
3861 The same result can be achieved using ``flow flush``::
3862
3863    testpmd> flow create 0 ingress pattern eth / ipv6 / end
3864       actions queue index 2 / end
3865    Flow rule #0 created
3866    testpmd> flow create 0 ingress pattern eth / ipv4 / end
3867       actions queue index 3 / end
3868    Flow rule #1 created
3869    testpmd> flow flush 0
3870    testpmd>
3871
3872 Non-existent rule IDs are ignored::
3873
3874    testpmd> flow create 0 ingress pattern eth / ipv6 / end
3875       actions queue index 2 / end
3876    Flow rule #0 created
3877    testpmd> flow create 0 ingress pattern eth / ipv4 / end
3878       actions queue index 3 / end
3879    Flow rule #1 created
3880    testpmd> flow destroy 0 rule 42 rule 10 rule 2
3881    testpmd>
3882    testpmd> flow destroy 0 rule 0
3883    Flow rule #0 destroyed
3884    testpmd>
3885
3886 Querying flow rules
3887 ~~~~~~~~~~~~~~~~~~~
3888
3889 ``flow query`` queries a specific action of a flow rule having that
3890 ability. Such actions collect information that can be reported using this
3891 command. It is bound to ``rte_flow_query()``::
3892
3893    flow query {port_id} {rule_id} {action}
3894
3895 If successful, it will display either the retrieved data for known actions
3896 or the following message::
3897
3898    Cannot display result for action type [...] ([...])
3899
3900 Otherwise, it will complain either that the rule does not exist or that some
3901 error occurred::
3902
3903    Flow rule #[...] not found
3904
3905 ::
3906
3907    Caught error type [...] ([...]): [...]
3908
3909 Currently only the ``count`` action is supported. This action reports the
3910 number of packets that hit the flow rule and the total number of bytes. Its
3911 output has the following format::
3912
3913    count:
3914     hits_set: [...] # whether "hits" contains a valid value
3915     bytes_set: [...] # whether "bytes" contains a valid value
3916     hits: [...] # number of packets
3917     bytes: [...] # number of bytes
3918
3919 Querying counters for TCPv6 packets redirected to queue 6::
3920
3921    testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end
3922       actions queue index 6 / count / end
3923    Flow rule #4 created
3924    testpmd> flow query 0 4 count
3925    count:
3926     hits_set: 1
3927     bytes_set: 0
3928     hits: 386446
3929     bytes: 0
3930    testpmd>
3931
3932 Listing flow rules
3933 ~~~~~~~~~~~~~~~~~~
3934
3935 ``flow list`` lists existing flow rules sorted by priority and optionally
3936 filtered by group identifiers::
3937
3938    flow list {port_id} [group {group_id}] [...]
3939
3940 This command only fails with the following message if the device does not
3941 exist::
3942
3943    Invalid port [...]
3944
3945 Output consists of a header line followed by a short description of each
3946 flow rule, one per line. There is no output at all when no flow rules are
3947 configured on the device::
3948
3949    ID      Group   Prio    Attr    Rule
3950    [...]   [...]   [...]   [...]   [...]
3951
3952 ``Attr`` column flags:
3953
3954 - ``i`` for ``ingress``.
3955 - ``e`` for ``egress``.
3956
3957 Creating several flow rules and listing them::
3958
3959    testpmd> flow create 0 ingress pattern eth / ipv4 / end
3960       actions queue index 6 / end
3961    Flow rule #0 created
3962    testpmd> flow create 0 ingress pattern eth / ipv6 / end
3963       actions queue index 2 / end
3964    Flow rule #1 created
3965    testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end
3966       actions rss queues 6 7 8 end / end
3967    Flow rule #2 created
3968    testpmd> flow list 0
3969    ID      Group   Prio    Attr    Rule
3970    0       0       0       i-      ETH IPV4 => QUEUE
3971    1       0       0       i-      ETH IPV6 => QUEUE
3972    2       0       5       i-      ETH IPV4 UDP => RSS
3973    testpmd>
3974
3975 Rules are sorted by priority (i.e. group ID first, then priority level)::
3976
3977    testpmd> flow list 1
3978    ID      Group   Prio    Attr    Rule
3979    0       0       0       i-      ETH => COUNT
3980    6       0       500     i-      ETH IPV6 TCP => DROP COUNT
3981    5       0       1000    i-      ETH IPV6 ICMP => QUEUE
3982    1       24      0       i-      ETH IPV4 UDP => QUEUE
3983    4       24      10      i-      ETH IPV4 TCP => DROP
3984    3       24      20      i-      ETH IPV4 => DROP
3985    2       24      42      i-      ETH IPV4 UDP => QUEUE
3986    7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
3987    testpmd>
3988
3989 Output can be limited to specific groups::
3990
3991    testpmd> flow list 1 group 0 group 63
3992    ID      Group   Prio    Attr    Rule
3993    0       0       0       i-      ETH => COUNT
3994    6       0       500     i-      ETH IPV6 TCP => DROP COUNT
3995    5       0       1000    i-      ETH IPV6 ICMP => QUEUE
3996    7       63      0       i-      ETH IPV6 UDP VXLAN => MARK QUEUE
3997    testpmd>
3998
3999 Toggling isolated mode
4000 ~~~~~~~~~~~~~~~~~~~~~~
4001
4002 ``flow isolate`` can be used to tell the underlying PMD that ingress traffic
4003 must only be injected from the defined flow rules; that no default traffic
4004 is expected outside those rules and the driver is free to assign more
4005 resources to handle them. It is bound to ``rte_flow_isolate()``::
4006
4007  flow isolate {port_id} {boolean}
4008
4009 If successful, enabling or disabling isolated mode shows either::
4010
4011  Ingress traffic on port [...]
4012     is now restricted to the defined flow rules
4013
4014 Or::
4015
4016  Ingress traffic on port [...]
4017     is not restricted anymore to the defined flow rules
4018
4019 Otherwise, in case of error::
4020
4021    Caught error type [...] ([...]): [...]
4022
4023 Mainly due to its side effects, PMDs supporting this mode may not have the
4024 ability to toggle it more than once without reinitializing affected ports
4025 first (e.g. by exiting testpmd).
4026
4027 Enabling isolated mode::
4028
4029  testpmd> flow isolate 0 true
4030  Ingress traffic on port 0 is now restricted to the defined flow rules
4031  testpmd>
4032
4033 Disabling isolated mode::
4034
4035  testpmd> flow isolate 0 false
4036  Ingress traffic on port 0 is not restricted anymore to the defined flow rules
4037  testpmd>
4038
4039 Sample QinQ flow rules
4040 ~~~~~~~~~~~~~~~~~~~~~~
4041
4042 Before creating QinQ rule(s) the following commands should be issued to enable QinQ::
4043
4044    testpmd> port stop 0
4045    testpmd> vlan set qinq on 0
4046
4047 The above command sets the inner and outer TPID's to 0x8100.
4048
4049 To change the TPID's the following commands should be used::
4050
4051    testpmd> vlan set outer tpid 0xa100 0
4052    testpmd> vlan set inner tpid 0x9100 0
4053    testpmd> port start 0
4054
4055 Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM.
4056
4057 ::
4058
4059    testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 /
4060        vlan tci is 456 / end actions vf id 1 / queue index 0 / end
4061    Flow rule #0 validated
4062
4063    testpmd> flow create 0 ingress pattern eth / vlan tci is 4 /
4064        vlan tci is 456 / end actions vf id 123 / queue index 0 / end
4065    Flow rule #0 created
4066
4067    testpmd> flow list 0
4068    ID      Group   Prio    Attr    Rule
4069    0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
4070
4071 Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host.
4072
4073 ::
4074
4075    testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 /
4076         vlan tci is 654 / end actions pf / queue index 0 / end
4077    Flow rule #1 validated
4078
4079    testpmd> flow create 0 ingress pattern eth / vlan tci is 321 /
4080         vlan tci is 654 / end actions pf / queue index 1 / end
4081    Flow rule #1 created
4082
4083    testpmd> flow list 0
4084    ID      Group   Prio    Attr    Rule
4085    0       0       0       i-      ETH VLAN VLAN=>VF QUEUE
4086    1       0       0       i-      ETH VLAN VLAN=>PF QUEUE
4087
4088 Sample VXLAN encapsulation rule
4089 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4090
4091 VXLAN encapsulation outer layer has default value pre-configured in testpmd
4092 source code, those can be changed by using the following commands
4093
4094 IPv4 VXLAN outer header::
4095
4096  testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1
4097         ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4098  testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4099         queue index 0 / end
4100
4101  testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src
4102          127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4103          eth-dst 22:22:22:22:22:22
4104  testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4105          queue index 0 / end
4106
4107 IPv6 VXLAN outer header::
4108
4109  testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1
4110         ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4111  testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4112          queue index 0 / end
4113
4114  testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4
4115          ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11
4116          eth-dst 22:22:22:22:22:22
4117  testpmd> flow create 0 ingress pattern end actions vxlan_encap /
4118          queue index 0 / end
4119
4120 Sample NVGRE encapsulation rule
4121 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4122
4123 NVGRE encapsulation outer layer has default value pre-configured in testpmd
4124 source code, those can be changed by using the following commands
4125
4126 IPv4 NVGRE outer header::
4127
4128  testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1
4129         eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4130  testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4131         queue index 0 / end
4132
4133  testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1
4134          ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11
4135          eth-dst 22:22:22:22:22:22
4136  testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4137          queue index 0 / end
4138
4139 IPv6 NVGRE outer header::
4140
4141  testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4142         eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4143  testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4144         queue index 0 / end
4145
4146  testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222
4147         vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22
4148  testpmd> flow create 0 ingress pattern end actions nvgre_encap /
4149         queue index 0 / end
4150
4151 BPF Functions
4152 --------------
4153
4154 The following sections show functions to load/unload eBPF based filters.
4155
4156 bpf-load
4157 ~~~~~~~~
4158
4159 Load an eBPF program as a callback for partciular RX/TX queue::
4160
4161    testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename)
4162
4163 The available load-flags are:
4164
4165 * ``J``: use JIT generated native code, otherwise BPF interpreter will be used.
4166
4167 * ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data.
4168
4169 * ``-``: none.
4170
4171 .. note::
4172
4173    You'll need clang v3.7 or above to build bpf program you'd like to load
4174
4175 For example:
4176
4177 .. code-block:: console
4178
4179    cd test/bpf
4180    clang -O2 -target bpf -c t1.c
4181
4182 Then to load (and JIT compile) t1.o at RX queue 0, port 1::
4183
4184 .. code-block:: console
4185
4186    testpmd> bpf-load rx 1 0 J ./dpdk.org/test/bpf/t1.o
4187
4188 To load (not JITed) t1.o at TX queue 0, port 0::
4189
4190 .. code-block:: console
4191
4192    testpmd> bpf-load tx 0 0 - ./dpdk.org/test/bpf/t1.o
4193
4194 bpf-unload
4195 ~~~~~~~~~~
4196
4197 Unload previously loaded eBPF program for partciular RX/TX queue::
4198
4199    testpmd> bpf-unload rx|tx (portid) (queueid)
4200
4201 For example to unload BPF filter from TX queue 0, port 0:
4202
4203 .. code-block:: console
4204
4205    testpmd> bpf-load tx 0 0 - ./dpdk.org/test/bpf/t1.o