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