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