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