xref: /dpdk/doc/guides/testpmd_app_ug/testpmd_funcs.rst (revision 4bfcbcf5c9f64fbc347fb5ced9ecd5e0ea5a3f47)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2010-2016 Intel Corporation.
3
4.. _testpmd_runtime:
5
6Testpmd Runtime Functions
7=========================
8
9Where the testpmd application is started in interactive mode, (``-i|--interactive``),
10it displays a prompt that can be used to start and stop forwarding,
11configure the application, display statistics (including the extended NIC
12statistics aka xstats) , set the Flow Director and other tasks::
13
14   testpmd>
15
16The testpmd prompt has some, limited, readline support.
17Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
18as well as access to the command history via the up-arrow.
19
20There is also support for tab completion.
21If 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
41In the real ``testpmd>`` prompt these commands should be on a single line.
42
43Help Functions
44--------------
45
46The testpmd has on-line help for the functions that are available at runtime.
47These 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
62Command File Functions
63----------------------
64
65To facilitate loading large number of commands or to avoid cutting and pasting where not
66practical 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
111In all cases output from any included command will be displayed as standard output.
112Execution will continue until the end of the file is reached regardless of
113whether any errors occur.  The end user must examine the output to determine if
114any failures occurred.
115
116
117Control Functions
118-----------------
119
120start
121~~~~~
122
123Start packet forwarding with current configuration::
124
125   testpmd> start
126
127start tx_first
128~~~~~~~~~~~~~~
129
130Start packet forwarding with current configuration after sending specified number of bursts of packets::
131
132   testpmd> start tx_first (""|burst_num)
133
134The default burst number is 1 when ``burst_num`` not presented.
135
136stop
137~~~~
138
139Stop packet forwarding, and display accumulated statistics::
140
141   testpmd> stop
142
143quit
144~~~~
145
146Quit to prompt::
147
148   testpmd> quit
149
150
151Display Functions
152-----------------
153
154The functions in the following sections are used to display information about the
155testpmd configuration or the NIC status.
156
157show port
158~~~~~~~~~
159
160Display 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
164The 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
182For 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
222show port rss reta
223~~~~~~~~~~~~~~~~~~
224
225Display the rss redirection table entry indicated by masks on port X::
226
227   testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
228
229size is used to indicate the hardware supported reta size
230
231show port rss-hash
232~~~~~~~~~~~~~~~~~~
233
234Display the RSS hash functions and RSS hash key of a port::
235
236   testpmd> show port (port_id) rss-hash [key]
237
238clear port
239~~~~~~~~~~
240
241Clear 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
245For example::
246
247   testpmd> clear port stats all
248
249show (rxq|txq)
250~~~~~~~~~~~~~~
251
252Display information for a given port's RX/TX queue::
253
254   testpmd> show (rxq|txq) info (port_id) (queue_id)
255
256show config
257~~~~~~~~~~~
258
259Displays the configuration of the application.
260The configuration comes from the command-line, the runtime or the application defaults::
261
262   testpmd> show config (rxtx|cores|fwd|txpkts)
263
264The 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
274For 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
288set fwd
289~~~~~~~
290
291Set 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
298The 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
328Example::
329
330   testpmd> set fwd rxonly
331
332   Set rxonly packet forwarding mode
333
334
335read rxd
336~~~~~~~~
337
338Display an RX descriptor for a port RX queue::
339
340   testpmd> read rxd (port_id) (queue_id) (rxd_id)
341
342For example::
343
344   testpmd> read rxd 0 0 4
345        0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
346
347read txd
348~~~~~~~~
349
350Display a TX descriptor for a port TX queue::
351
352   testpmd> read txd (port_id) (queue_id) (txd_id)
353
354For example::
355
356   testpmd> read txd 0 0 4
357        0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
358
359ddp get list
360~~~~~~~~~~~~
361
362Get loaded dynamic device personalization (DDP) package info list::
363
364   testpmd> ddp get list (port_id)
365
366ddp get info
367~~~~~~~~~~~~
368
369Display information about dynamic device personalization (DDP) profile::
370
371   testpmd> ddp get info (profile_path)
372
373show vf stats
374~~~~~~~~~~~~~
375
376Display VF statistics::
377
378   testpmd> show vf stats (port_id) (vf_id)
379
380clear vf stats
381~~~~~~~~~~~~~~
382
383Reset VF statistics::
384
385   testpmd> clear vf stats (port_id) (vf_id)
386
387show port pctype mapping
388~~~~~~~~~~~~~~~~~~~~~~~~
389
390List all items from the pctype mapping table::
391
392   testpmd> show port (port_id) pctype mapping
393
394show rx offloading capabilities
395~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
396
397List all per queue and per port Rx offloading capabilities of a port::
398
399   testpmd> show port (port_id) rx_offload capabilities
400
401show rx offloading configuration
402~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
403
404List port level and all queue level Rx offloading configuration::
405
406   testpmd> show port (port_id) rx_offload configuration
407
408show tx offloading capabilities
409~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
410
411List all per queue and per port Tx offloading capabilities of a port::
412
413   testpmd> show port (port_id) tx_offload capabilities
414
415show tx offloading configuration
416~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
417
418List port level and all queue level Tx offloading configuration::
419
420   testpmd> show port (port_id) tx_offload configuration
421
422
423Configuration Functions
424-----------------------
425
426The testpmd application can be configured from the runtime as well as from the command-line.
427
428This 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
434set default
435~~~~~~~~~~~
436
437Reset forwarding to the default configuration::
438
439   testpmd> set default
440
441set verbose
442~~~~~~~~~~~
443
444Set the debug verbosity level::
445
446   testpmd> set verbose (level)
447
448Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
449
450set log
451~~~~~~~
452
453Set the log level for a log type::
454
455	testpmd> set log global|(type) (level)
456
457Where:
458
459* ``type`` is the log name.
460
461* ``level`` is the log level.
462
463For example, to change the global log level::
464	testpmd> set log global (level)
465
466Regexes can also be used for type. To change log level of user1, user2 and user3::
467	testpmd> set log user[1-3] (level)
468
469set nbport
470~~~~~~~~~~
471
472Set the number of ports used by the application:
473
474set nbport (num)
475
476This is equivalent to the ``--nb-ports`` command-line option.
477
478set nbcore
479~~~~~~~~~~
480
481Set the number of cores used by the application::
482
483   testpmd> set nbcore (num)
484
485This 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
491set coremask
492~~~~~~~~~~~~
493
494Set the forwarding cores hexadecimal mask::
495
496   testpmd> set coremask (mask)
497
498This 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
504set portmask
505~~~~~~~~~~~~
506
507Set the forwarding ports hexadecimal mask::
508
509   testpmd> set portmask (mask)
510
511This is equivalent to the ``--portmask`` command-line option.
512
513set burst
514~~~~~~~~~
515
516Set number of packets per burst::
517
518   testpmd> set burst (num)
519
520This is equivalent to the ``--burst command-line`` option.
521
522When 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
526set txpkts
527~~~~~~~~~~
528
529Set 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
533Where x[,y]* represents a CSV list of values, without white space.
534
535set txsplit
536~~~~~~~~~~~
537
538Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
539
540   testpmd> set txsplit (off|on|rand)
541
542Where:
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
552set corelist
553~~~~~~~~~~~~
554
555Set the list of forwarding cores::
556
557   testpmd> set corelist (x[,y]*)
558
559For 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
576set portlist
577~~~~~~~~~~~~
578
579Set the list of forwarding ports::
580
581   testpmd> set portlist (x[,y]*)
582
583For 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
597set tx loopback
598~~~~~~~~~~~~~~~
599
600Enable/disable tx loopback::
601
602   testpmd> set tx loopback (port_id) (on|off)
603
604set drop enable
605~~~~~~~~~~~~~~~
606
607set drop enable bit for all queues::
608
609   testpmd> set all queues drop (port_id) (on|off)
610
611set split drop enable (for VF)
612~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
613
614set split drop enable bit for VF from PF::
615
616   testpmd> set vf split drop (port_id) (vf_id) (on|off)
617
618set mac antispoof (for VF)
619~~~~~~~~~~~~~~~~~~~~~~~~~~
620
621Set mac antispoof for a VF from the PF::
622
623   testpmd> set vf mac antispoof  (port_id) (vf_id) (on|off)
624
625set macsec offload
626~~~~~~~~~~~~~~~~~~
627
628Enable/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
633set macsec sc
634~~~~~~~~~~~~~
635
636Configure 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
645set macsec sa
646~~~~~~~~~~~~~
647
648Configure 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
657set broadcast mode (for VF)
658~~~~~~~~~~~~~~~~~~~~~~~~~~~
659
660Set broadcast mode for a VF from the PF::
661
662   testpmd> set vf broadcast (port_id) (vf_id) (on|off)
663
664vlan set strip
665~~~~~~~~~~~~~~
666
667Set the VLAN strip on a port::
668
669   testpmd> vlan set strip (on|off) (port_id)
670
671vlan set stripq
672~~~~~~~~~~~~~~~
673
674Set the VLAN strip for a queue on a port::
675
676   testpmd> vlan set stripq (on|off) (port_id,queue_id)
677
678vlan set stripq (for VF)
679~~~~~~~~~~~~~~~~~~~~~~~~
680
681Set 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
685vlan set insert (for VF)
686~~~~~~~~~~~~~~~~~~~~~~~~
687
688Set VLAN insert for a VF from the PF::
689
690   testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
691
692vlan set tag (for VF)
693~~~~~~~~~~~~~~~~~~~~~
694
695Set VLAN tag for a VF from the PF::
696
697   testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
698
699vlan set antispoof (for VF)
700~~~~~~~~~~~~~~~~~~~~~~~~~~~
701
702Set VLAN antispoof for a VF from the PF::
703
704   testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
705
706vlan set filter
707~~~~~~~~~~~~~~~
708
709Set the VLAN filter on a port::
710
711   testpmd> vlan set filter (on|off) (port_id)
712
713vlan set qinq
714~~~~~~~~~~~~~
715
716Set the VLAN QinQ (extended queue in queue) on for a port::
717
718   testpmd> vlan set qinq (on|off) (port_id)
719
720vlan set tpid
721~~~~~~~~~~~~~
722
723Set 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
731rx_vlan add
732~~~~~~~~~~~
733
734Add 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
744rx_vlan rm
745~~~~~~~~~~
746
747Remove 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
751rx_vlan add (for VF)
752~~~~~~~~~~~~~~~~~~~~
753
754Add 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
758rx_vlan rm (for VF)
759~~~~~~~~~~~~~~~~~~~
760
761Remove 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
765tunnel_filter add
766~~~~~~~~~~~~~~~~~
767
768Add 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
774The 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
796Example::
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
803tunnel_filter remove
804~~~~~~~~~~~~~~~~~~~~
805
806Remove 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
812rx_vxlan_port add
813~~~~~~~~~~~~~~~~~
814
815Add an UDP port for VXLAN packet filter on a port::
816
817   testpmd> rx_vxlan_port add (udp_port) (port_id)
818
819rx_vxlan_port remove
820~~~~~~~~~~~~~~~~~~~~
821
822Remove an UDP port for VXLAN packet filter on a port::
823
824   testpmd> rx_vxlan_port rm (udp_port) (port_id)
825
826tx_vlan set
827~~~~~~~~~~~
828
829Set 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
833For example, set a single VLAN ID (5) insertion on port 0::
834
835   tx_vlan set 0 5
836
837Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
838
839   tx_vlan set 1 2 3
840
841
842tx_vlan set pvid
843~~~~~~~~~~~~~~~~
844
845Set 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
849tx_vlan reset
850~~~~~~~~~~~~~
851
852Disable hardware insertion of a VLAN header in packets sent on a port::
853
854   testpmd> tx_vlan reset (port_id)
855
856csum set
857~~~~~~~~
858
859Select hardware or software calculation of the checksum when
860transmitting 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
864Where:
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
880RSS queue region
881~~~~~~~~~~~~~~~~
882
883Set 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
888Set 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
892where:
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
897Set 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
901Flush all queue region related configuration on a port::
902
903   testpmd> set port (port_id) queue-region flush (on|off)
904
905where:
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
914Show 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
923csum parse-tunnel
924~~~~~~~~~~~~~~~~~
925
926Define how tunneled packets should be handled by the csum forward
927engine::
928
929   testpmd> csum parse-tunnel (on|off) (tx_port_id)
930
931If enabled, the csum forward engine will try to recognize supported
932tunnel headers (vxlan, gre, ipip).
933
934If disabled, treat tunnel packets as non-tunneled packets (a inner
935header 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
941Example:
942
943Consider 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
954csum show
955~~~~~~~~~
956
957Display tx checksum offload configuration::
958
959   testpmd> csum show (port_id)
960
961tso set
962~~~~~~~
963
964Enable 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
972tso show
973~~~~~~~~
974
975Display the status of TCP Segmentation Offload::
976
977   testpmd> tso show (port_id)
978
979set port - gro
980~~~~~~~~~~~~~~
981
982Enable or disable GRO in ``csum`` forwarding engine::
983
984   testpmd> set port <port_id> gro on|off
985
986If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
987packets received from the given port.
988
989If disabled, packets received from the given port won't be performed
990GRO. 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
1002show port - gro
1003~~~~~~~~~~~~~~~
1004
1005Display GRO configuration for a given port::
1006
1007   testpmd> show port <port_id> gro
1008
1009set gro flush
1010~~~~~~~~~~~~~
1011
1012Set the cycle to flush the GROed packets from reassembly tables::
1013
1014   testpmd> set gro flush <cycles>
1015
1016When enable GRO, the csum forwarding engine performs GRO on received
1017packets, and the GROed packets are stored in reassembly tables. Users
1018can use this command to determine when the GROed packets are flushed
1019from the reassembly tables.
1020
1021The ``cycles`` is measured in GRO operation times. The csum forwarding
1022engine flushes the GROed packets from the tables every ``cycles`` GRO
1023operations.
1024
1025By default, the value of ``cycles`` is 1, which means flush GROed packets
1026from the reassembly tables as soon as one GRO operation finishes. The value
1027of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1028
1029Please note that the large value of ``cycles`` may cause the poor TCP/IP
1030stack performance. Because the GROed packets are delayed to arrive the
1031stack, thus causing more duplicated ACKs and TCP retransmissions.
1032
1033set port - gso
1034~~~~~~~~~~~~~~
1035
1036Toggle per-port GSO support in ``csum`` forwarding engine::
1037
1038   testpmd> set port <port_id> gso on|off
1039
1040If enabled, the csum forwarding engine will perform GSO on supported IPv4
1041packets, transmitted on the given port.
1042
1043If disabled, packets transmitted on the given port will not undergo GSO.
1044By 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
1071set gso segsz
1072~~~~~~~~~~~~~
1073
1074Set the maximum GSO segment size (measured in bytes), which includes the
1075packet header and the packet payload for GSO-enabled ports (global)::
1076
1077   testpmd> set gso segsz <length>
1078
1079show port - gso
1080~~~~~~~~~~~~~~~
1081
1082Display the status of Generic Segmentation Offload for a given port::
1083
1084   testpmd> show port <port_id> gso
1085
1086mac_addr add
1087~~~~~~~~~~~~
1088
1089Add an alternative MAC address to a port::
1090
1091   testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1092
1093mac_addr remove
1094~~~~~~~~~~~~~~~
1095
1096Remove a MAC address from a port::
1097
1098   testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1099
1100mac_addr add (for VF)
1101~~~~~~~~~~~~~~~~~~~~~
1102
1103Add 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
1107mac_addr set
1108~~~~~~~~~~~~
1109
1110Set the default MAC address for a port::
1111
1112   testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1113
1114mac_addr set (for VF)
1115~~~~~~~~~~~~~~~~~~~~~
1116
1117Set 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
1121set eth-peer
1122~~~~~~~~~~~~
1123
1124Set the forwarding peer address for certain port::
1125
1126   testpmd> set eth-peer (port_id) (perr_addr)
1127
1128This is equivalent to the ``--eth-peer`` command-line option.
1129
1130set port-uta
1131~~~~~~~~~~~~
1132
1133Set 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
1137set promisc
1138~~~~~~~~~~~
1139
1140Set the promiscuous mode on for a port or for all ports.
1141In 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
1145set allmulti
1146~~~~~~~~~~~~
1147
1148Set the allmulti mode for a port or for all ports::
1149
1150   testpmd> set allmulti (port_id|all) (on|off)
1151
1152Same as the ifconfig (8) option. Controls how multicast packets are handled.
1153
1154set promisc (for VF)
1155~~~~~~~~~~~~~~~~~~~~
1156
1157Set the unicast promiscuous mode for a VF from PF.
1158It's supported by Intel i40e NICs now.
1159In 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
1163set allmulticast (for VF)
1164~~~~~~~~~~~~~~~~~~~~~~~~~
1165
1166Set the multicast promiscuous mode for a VF from PF.
1167It's supported by Intel i40e NICs now.
1168In 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
1172set tx max bandwidth (for VF)
1173~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1174
1175Set 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
1179set tc tx min bandwidth (for VF)
1180~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1181
1182Set 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
1186set tc tx max bandwidth (for VF)
1187~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1188
1189Set 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
1193set tc strict link priority mode
1194~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1195
1196Set some TCs' strict link priority mode on a physical port::
1197
1198   testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1199
1200set tc tx min bandwidth
1201~~~~~~~~~~~~~~~~~~~~~~~
1202
1203Set 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
1207set flow_ctrl rx
1208~~~~~~~~~~~~~~~~
1209
1210Set 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
1216Where:
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
1230set pfc_ctrl rx
1231~~~~~~~~~~~~~~~
1232
1233Set 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
1238Where:
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
1248set stat_qmap
1249~~~~~~~~~~~~~
1250
1251Set 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
1255For example, to set rx queue 2 on port 0 to mapping 5::
1256
1257   testpmd>set stat_qmap rx 0 2 5
1258
1259set xstats-hide-zero
1260~~~~~~~~~~~~~~~~~~~~
1261
1262Set 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
1270set port - rx/tx (for VF)
1271~~~~~~~~~~~~~~~~~~~~~~~~~
1272
1273Set VF receive/transmit from a port::
1274
1275   testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1276
1277set port - mac address filter (for VF)
1278~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1279
1280Add/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
1285set port - rx mode(for VF)
1286~~~~~~~~~~~~~~~~~~~~~~~~~~
1287
1288Set 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
1293The 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
1303set port - tx_rate (for Queue)
1304~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1305
1306Set TX rate limitation for a queue on a port::
1307
1308   testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1309
1310set port - tx_rate (for VF)
1311~~~~~~~~~~~~~~~~~~~~~~~~~~~
1312
1313Set 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
1317set port - mirror rule
1318~~~~~~~~~~~~~~~~~~~~~~
1319
1320Set 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
1326Set 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
1331For 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
1335reset port - mirror rule
1336~~~~~~~~~~~~~~~~~~~~~~~~
1337
1338Reset a mirror rule for a port::
1339
1340   testpmd> reset port (port_id) mirror-rule (rule_id)
1341
1342set flush_rx
1343~~~~~~~~~~~~
1344
1345Set the flush on RX streams before forwarding.
1346The default is flush ``on``.
1347Mainly 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
1351set bypass mode
1352~~~~~~~~~~~~~~~
1353
1354Set the bypass mode for the lowest port on bypass enabled NIC::
1355
1356   testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1357
1358set bypass event
1359~~~~~~~~~~~~~~~~
1360
1361Set 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
1366Where:
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
1379set bypass timeout
1380~~~~~~~~~~~~~~~~~~
1381
1382Set 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
1386show bypass config
1387~~~~~~~~~~~~~~~~~~
1388
1389Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1390
1391   testpmd> show bypass config (port_id)
1392
1393set link up
1394~~~~~~~~~~~
1395
1396Set link up for a port::
1397
1398   testpmd> set link-up port (port id)
1399
1400set link down
1401~~~~~~~~~~~~~
1402
1403Set link down for a port::
1404
1405   testpmd> set link-down port (port id)
1406
1407E-tag set
1408~~~~~~~~~
1409
1410Enable 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
1414Disable E-tag insertion for a VF on a port::
1415
1416   testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1417
1418Enable/disable E-tag stripping on a port::
1419
1420   testpmd> E-tag set stripping (on|off) port (port_id)
1421
1422Enable/disable E-tag based forwarding on a port::
1423
1424   testpmd> E-tag set forwarding (on|off) port (port_id)
1425
1426Add 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
1430Delete an E-tag forwarding filter on a port::
1431   testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1432
1433ddp add
1434~~~~~~~
1435
1436Load a dynamic device personalization (DDP) profile and store backup profile::
1437
1438   testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1439
1440ddp del
1441~~~~~~~
1442
1443Delete a dynamic device personalization profile and restore backup profile::
1444
1445   testpmd> ddp del (port_id) (backup_profile_path)
1446
1447ptype mapping
1448~~~~~~~~~~~~~
1449
1450List all items from the ptype mapping table::
1451
1452   testpmd> ptype mapping get (port_id) (valid_only)
1453
1454Where:
1455
1456* ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1457
1458Replace 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
1462where:
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
1470Update hardware defined ptype to software defined packet type mapping table::
1471
1472   testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1473
1474where:
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
1480Reset ptype mapping table::
1481
1482   testpmd> ptype mapping reset (port_id)
1483
1484config per port Rx offloading
1485~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1486
1487Enable 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
1497This command should be run when the port is stopped, or else it will fail.
1498
1499config per queue Rx offloading
1500~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1501
1502Enable 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
1512This command should be run when the port is stopped, or else it will fail.
1513
1514config per port Tx offloading
1515~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1516
1517Enable 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
1528This command should be run when the port is stopped, or else it will fail.
1529
1530config per queue Tx offloading
1531~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1532
1533Enable 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
1544This command should be run when the port is stopped, or else it will fail.
1545
1546Config VXLAN Encap outer layers
1547~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1548
1549Configure 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
1559Those command will set an internal configuration inside testpmd, any following
1560flow rule using the action vxlan_encap will use the last configuration set.
1561To have a different encapsulation header, one of those commands must be called
1562before the flow rule creation.
1563
1564Config NVGRE Encap outer layers
1565~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1566
1567Configure 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
1574Those command will set an internal configuration inside testpmd, any following
1575flow rule using the action nvgre_encap will use the last configuration set.
1576To have a different encapsulation header, one of those commands must be called
1577before the flow rule creation.
1578
1579Port Functions
1580--------------
1581
1582The following sections show functions for configuring ports.
1583
1584.. note::
1585
1586   Port configuration changes only become active when forwarding is started/restarted.
1587
1588port attach
1589~~~~~~~~~~~
1590
1591Attach a port specified by pci address or virtual device args::
1592
1593   testpmd> port attach (identifier)
1594
1595To attach a new pci device, the device should be recognized by kernel first.
1596Then it should be moved under DPDK management.
1597Finally the port can be attached to testpmd.
1598
1599For 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
1625To attach a port created by virtual device, above steps are not needed.
1626
1627For 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
1642For 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
1653In this case, identifier is ``net_pcap0``.
1654This identifier format is the same as ``--vdev`` format of DPDK applications.
1655
1656For example, to re-attach a bonded port which has been previously detached,
1657the 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
1669port detach
1670~~~~~~~~~~~
1671
1672Detach a specific port::
1673
1674   testpmd> port detach (port_id)
1675
1676Before detaching a port, the port should be stopped and closed.
1677
1678For 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
1698For 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
1715To remove a pci device completely from the system, first detach the port from testpmd.
1716Then the device should be moved under kernel management.
1717Finally the device can be removed using kernel pci hotplug functionality.
1718
1719For 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
1735To remove a port created by a virtual device, above steps are not needed.
1736
1737port start
1738~~~~~~~~~~
1739
1740Start all ports or a specific port::
1741
1742   testpmd> port start (port_id|all)
1743
1744port stop
1745~~~~~~~~~
1746
1747Stop all ports or a specific port::
1748
1749   testpmd> port stop (port_id|all)
1750
1751port close
1752~~~~~~~~~~
1753
1754Close all ports or a specific port::
1755
1756   testpmd> port close (port_id|all)
1757
1758port config - queue ring size
1759~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1760
1761Configure a rx/tx queue ring size::
1762
1763   testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
1764
1765Only take effect after command that (re-)start the port or command that setup specific queue.
1766
1767port start/stop queue
1768~~~~~~~~~~~~~~~~~~~~~
1769
1770Start/stop a rx/tx queue on a specific port::
1771
1772   testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1773
1774port config - queue deferred start
1775~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1776
1777Switch on/off deferred start of a specific port queue::
1778
1779   testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
1780
1781port setup queue
1782~~~~~~~~~~~~~~~~~~~~~
1783
1784Setup a rx/tx queue on a specific port::
1785
1786   testpmd> port (port_id) (rxq|txq) (queue_id) setup
1787
1788Only take effect when port is started.
1789
1790port config - speed
1791~~~~~~~~~~~~~~~~~~~
1792
1793Set 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
1798port config - queues/descriptors
1799~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1800
1801Set number of queues/descriptors for rxq, txq, rxd and txd::
1802
1803   testpmd> port config all (rxq|txq|rxd|txd) (value)
1804
1805This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1806
1807port config - max-pkt-len
1808~~~~~~~~~~~~~~~~~~~~~~~~~
1809
1810Set the maximum packet length::
1811
1812   testpmd> port config all max-pkt-len (value)
1813
1814This is equivalent to the ``--max-pkt-len`` command-line option.
1815
1816port config - CRC Strip
1817~~~~~~~~~~~~~~~~~~~~~~~
1818
1819Set hardware CRC stripping on or off for all ports::
1820
1821   testpmd> port config all crc-strip (on|off)
1822
1823CRC stripping is on by default.
1824
1825The ``off`` option is equivalent to the ``--disable-crc-strip`` command-line option.
1826
1827port config - scatter
1828~~~~~~~~~~~~~~~~~~~~~~~
1829
1830Set RX scatter mode on or off for all ports::
1831
1832   testpmd> port config all scatter (on|off)
1833
1834RX scatter mode is off by default.
1835
1836The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1837
1838port config - RX Checksum
1839~~~~~~~~~~~~~~~~~~~~~~~~~
1840
1841Set hardware RX checksum offload to on or off for all ports::
1842
1843   testpmd> port config all rx-cksum (on|off)
1844
1845Checksum offload is off by default.
1846
1847The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1848
1849port config - VLAN
1850~~~~~~~~~~~~~~~~~~
1851
1852Set hardware VLAN on or off for all ports::
1853
1854   testpmd> port config all hw-vlan (on|off)
1855
1856Hardware VLAN is off by default.
1857
1858The ``on`` option is equivalent to the ``--enable-hw-vlan`` command-line option.
1859
1860port config - VLAN filter
1861~~~~~~~~~~~~~~~~~~~~~~~~~
1862
1863Set hardware VLAN filter on or off for all ports::
1864
1865   testpmd> port config all hw-vlan-filter (on|off)
1866
1867Hardware VLAN filter is off by default.
1868
1869The ``on`` option is equivalent to the ``--enable-hw-vlan-filter`` command-line option.
1870
1871port config - VLAN strip
1872~~~~~~~~~~~~~~~~~~~~~~~~
1873
1874Set hardware VLAN strip on or off for all ports::
1875
1876   testpmd> port config all hw-vlan-strip (on|off)
1877
1878Hardware VLAN strip is off by default.
1879
1880The ``on`` option is equivalent to the ``--enable-hw-vlan-strip`` command-line option.
1881
1882port config - VLAN extend
1883~~~~~~~~~~~~~~~~~~~~~~~~~
1884
1885Set hardware VLAN extend on or off for all ports::
1886
1887   testpmd> port config all hw-vlan-extend (on|off)
1888
1889Hardware VLAN extend is off by default.
1890
1891The ``on`` option is equivalent to the ``--enable-hw-vlan-extend`` command-line option.
1892
1893port config - Drop Packets
1894~~~~~~~~~~~~~~~~~~~~~~~~~~
1895
1896Set packet drop for packets with no descriptors on or off for all ports::
1897
1898   testpmd> port config all drop-en (on|off)
1899
1900Packet dropping for packets with no descriptors is off by default.
1901
1902The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1903
1904port config - RSS
1905~~~~~~~~~~~~~~~~~
1906
1907Set 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
1911RSS is on by default.
1912
1913The ``all`` option is equivalent to ip|tcp|udp|sctp|ether.
1914The ``default`` option enables all supported RSS types reported by device info.
1915The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1916
1917port config - RSS Reta
1918~~~~~~~~~~~~~~~~~~~~~~
1919
1920Set the RSS (Receive Side Scaling) redirection table::
1921
1922   testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1923
1924port config - DCB
1925~~~~~~~~~~~~~~~~~
1926
1927Set the DCB mode for an individual port::
1928
1929   testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1930
1931The traffic class should be 4 or 8.
1932
1933port config - Burst
1934~~~~~~~~~~~~~~~~~~~
1935
1936Set the number of packets per burst::
1937
1938   testpmd> port config all burst (value)
1939
1940This is equivalent to the ``--burst`` command-line option.
1941
1942port config - Threshold
1943~~~~~~~~~~~~~~~~~~~~~~~
1944
1945Set thresholds for TX/RX queues::
1946
1947   testpmd> port config all (threshold) (value)
1948
1949Where 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
1969These threshold options are also available from the command-line.
1970
1971port config - E-tag
1972~~~~~~~~~~~~~~~~~~~
1973
1974Set the value of ether-type for E-tag::
1975
1976   testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1977
1978Enable/disable the E-tag support::
1979
1980   testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1981
1982port config pctype mapping
1983~~~~~~~~~~~~~~~~~~~~~~~~~~
1984
1985Reset pctype mapping table::
1986
1987   testpmd> port config (port_id) pctype mapping reset
1988
1989Update 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
1993where:
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
1999port config input set
2000~~~~~~~~~~~~~~~~~~~~~
2001
2002Config 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
2007Clear 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
2011where:
2012
2013* ``pctype_id``: hardware packet classification types.
2014* ``field_idx``: hardware field index.
2015
2016port config udp_tunnel_port
2017~~~~~~~~~~~~~~~~~~~~~~~~~~~
2018
2019Add/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
2022Link Bonding Functions
2023----------------------
2024
2025The Link Bonding functions make it possible to dynamically create and
2026manage link bonding devices from within testpmd interactive prompt.
2027
2028create bonded device
2029~~~~~~~~~~~~~~~~~~~~
2030
2031Create a new bonding device::
2032
2033   testpmd> create bonded device (mode) (socket)
2034
2035For 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
2040add bonding slave
2041~~~~~~~~~~~~~~~~~
2042
2043Adds Ethernet device to a Link Bonding device::
2044
2045   testpmd> add bonding slave (slave id) (port id)
2046
2047For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2048
2049   testpmd> add bonding slave 6 10
2050
2051
2052remove bonding slave
2053~~~~~~~~~~~~~~~~~~~~
2054
2055Removes an Ethernet slave device from a Link Bonding device::
2056
2057   testpmd> remove bonding slave (slave id) (port id)
2058
2059For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2060
2061   testpmd> remove bonding slave 6 10
2062
2063set bonding mode
2064~~~~~~~~~~~~~~~~
2065
2066Set the Link Bonding mode of a Link Bonding device::
2067
2068   testpmd> set bonding mode (value) (port id)
2069
2070For 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
2074set bonding primary
2075~~~~~~~~~~~~~~~~~~~
2076
2077Set an Ethernet slave device as the primary device on a Link Bonding device::
2078
2079   testpmd> set bonding primary (slave id) (port id)
2080
2081For 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
2085set bonding mac
2086~~~~~~~~~~~~~~~
2087
2088Set the MAC address of a Link Bonding device::
2089
2090   testpmd> set bonding mac (port id) (mac)
2091
2092For 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
2096set bonding xmit_balance_policy
2097~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2098
2099Set 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
2103For 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
2108set bonding mon_period
2109~~~~~~~~~~~~~~~~~~~~~~
2110
2111Set the link status monitoring polling period in milliseconds for a bonding device.
2112
2113This adds support for PMD slave devices which do not support link status interrupts.
2114When the mon_period is set to a value greater than 0 then all PMD's which do not support
2115link 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
2119For 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
2124set bonding lacp dedicated_queue
2125~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2126
2127Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2128when in mode 4 (link-aggregration-802.3ad)::
2129
2130   testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2131
2132
2133set bonding agg_mode
2134~~~~~~~~~~~~~~~~~~~~
2135
2136Enable 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
2141show bonding config
2142~~~~~~~~~~~~~~~~~~~
2143
2144Show the current configuration of a Link Bonding device::
2145
2146   testpmd> show bonding config (port id)
2147
2148For example,
2149to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2150in 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
2160Register Functions
2161------------------
2162
2163The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2164This is mainly useful for debugging purposes.
2165Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2166and fields that can be accessed.
2167
2168read reg
2169~~~~~~~~
2170
2171Display the value of a port register::
2172
2173   testpmd> read reg (port_id) (address)
2174
2175For 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
2180read regfield
2181~~~~~~~~~~~~~
2182
2183Display a port register bit field::
2184
2185   testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2186
2187For 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
2192read regbit
2193~~~~~~~~~~~
2194
2195Display a single port register bit::
2196
2197   testpmd> read regbit (port_id) (address) (bit_x)
2198
2199For 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
2204write reg
2205~~~~~~~~~
2206
2207Set the value of a port register::
2208
2209   testpmd> write reg (port_id) (address) (value)
2210
2211For example, to clear a register::
2212
2213   testpmd> write reg 0 0xEE00 0x0
2214   port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2215
2216write regfield
2217~~~~~~~~~~~~~~
2218
2219Set bit field of a port register::
2220
2221   testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2222
2223For 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
2228write regbit
2229~~~~~~~~~~~~
2230
2231Set single bit value of a port register::
2232
2233   testpmd> write regbit (port_id) (address) (bit_x) (value)
2234
2235For 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
2240Traffic Metering and Policing
2241-----------------------------
2242
2243The following section shows functions for configuring traffic metering and
2244policing on the ethernet device through the use of generic ethdev API.
2245
2246show port traffic management capability
2247~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2248
2249Show traffic metering and policing capability of the port::
2250
2251   testpmd> show port meter cap (port_id)
2252
2253add port meter profile (srTCM rfc2967)
2254~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2255
2256Add 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
2261where:
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
2268add port meter profile (trTCM rfc2968)
2269~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2270
2271Add 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
2276where:
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
2284add port meter profile (trTCM rfc4115)
2285~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2286
2287Add 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
2292where:
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
2300delete port meter profile
2301~~~~~~~~~~~~~~~~~~~~~~~~~
2302
2303Delete meter profile from the ethernet device::
2304
2305   testpmd> del port meter profile (port_id) (profile_id)
2306
2307create port meter
2308~~~~~~~~~~~~~~~~~
2309
2310Create 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
2317where:
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
2337enable port meter
2338~~~~~~~~~~~~~~~~~
2339
2340Enable meter for the ethernet device::
2341
2342   testpmd> enable port meter (port_id) (mtr_id)
2343
2344disable port meter
2345~~~~~~~~~~~~~~~~~~
2346
2347Disable meter for the ethernet device::
2348
2349   testpmd> disable port meter (port_id) (mtr_id)
2350
2351delete port meter
2352~~~~~~~~~~~~~~~~~
2353
2354Delete meter for the ethernet device::
2355
2356   testpmd> del port meter (port_id) (mtr_id)
2357
2358Set port meter profile
2359~~~~~~~~~~~~~~~~~~~~~~
2360
2361Set meter profile for the ethernet device::
2362
2363   testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2364
2365set port meter dscp table
2366~~~~~~~~~~~~~~~~~~~~~~~~~
2367
2368Set 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
2373set port meter policer action
2374~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2375
2376Set 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
2381where:
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
2391set port meter stats mask
2392~~~~~~~~~~~~~~~~~~~~~~~~~
2393
2394Set meter stats mask for the ethernet device::
2395
2396   testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2397
2398where:
2399
2400* ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2401
2402show port meter stats
2403~~~~~~~~~~~~~~~~~~~~~
2404
2405Show meter stats of the ethernet device::
2406
2407   testpmd> show port meter stats (port_id) (mtr_id) (clear)
2408
2409where:
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
2414Traffic Management
2415------------------
2416
2417The following section shows functions for configuring traffic management on
2418on the ethernet device through the use of generic TM API.
2419
2420show port traffic management capability
2421~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2422
2423Show traffic management capability of the port::
2424
2425   testpmd> show port tm cap (port_id)
2426
2427show port traffic management capability (hierarchy level)
2428~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2429
2430Show traffic management hierarchy level capability of the port::
2431
2432   testpmd> show port tm level cap (port_id) (level_id)
2433
2434show port traffic management capability (hierarchy node level)
2435~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2436
2437Show the traffic management hierarchy node capability of the port::
2438
2439   testpmd> show port tm node cap (port_id) (node_id)
2440
2441show port traffic management hierarchy node type
2442~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2443
2444Show the port traffic management hierarchy node type::
2445
2446   testpmd> show port tm node type (port_id) (node_id)
2447
2448show port traffic management hierarchy node stats
2449~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2450
2451Show the port traffic management hierarchy node statistics::
2452
2453   testpmd> show port tm node stats (port_id) (node_id) (clear)
2454
2455where:
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
2461Add port traffic management private shaper profile
2462~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2463
2464Add 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
2469where:
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
2479Delete port traffic management private shaper profile
2480~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2481
2482Delete the port traffic management private shaper::
2483
2484   testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2485
2486where:
2487
2488* ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2489
2490Add port traffic management shared shaper
2491~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2492
2493Create 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
2498where:
2499
2500* ``shared_shaper_id``: Shared shaper ID to be created.
2501* ``shaper_profile id``: Shaper profile ID for shared shaper.
2502
2503Set port traffic management shared shaper
2504~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2505
2506Update 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
2511where:
2512
2513* ``shared_shaper_id``: Shared shaper ID to be update.
2514* ``shaper_profile id``: Shaper profile ID for shared shaper.
2515
2516Delete port traffic management shared shaper
2517~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2518
2519Delete the port traffic management shared shaper::
2520
2521   testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2522
2523where:
2524
2525* ``shared_shaper_id``: Shared shaper ID to be deleted.
2526
2527Set port traffic management hiearchy node private shaper
2528~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2529
2530set 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
2535where:
2536
2537* ``shaper_profile id``: Private shaper profile ID to be enabled on the
2538  hierarchy node.
2539
2540Add port traffic management WRED profile
2541~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2542
2543Create 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
2550where:
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
2569Delete port traffic management WRED profile
2570~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2571
2572Delete the WRED profile::
2573
2574   testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2575
2576Add port traffic management hierarchy nonleaf node
2577~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2578
2579Add 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
2586where:
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
2602Add port traffic management hierarchy leaf node
2603~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2604
2605Add 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
2612where:
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
2629Delete port traffic management hierarchy node
2630~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2631
2632Delete node from port traffic management hiearchy::
2633
2634   testpmd> del port tm node (port_id) (node_id)
2635
2636Update port traffic management hierarchy parent node
2637~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2638
2639Update 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
2644This function can only be called after the hierarchy commit invocation. Its
2645success depends on the port support for this operation, as advertised through
2646the port capability set. This function is valid for all nodes of the traffic
2647management hierarchy except root node.
2648
2649Suspend port traffic management hierarchy node
2650~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2651
2652   testpmd> suspend port tm node (port_id) (node_id)
2653
2654Resume port traffic management hierarchy node
2655~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2656
2657   testpmd> resume port tm node (port_id) (node_id)
2658
2659Commit port traffic management hierarchy
2660~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2661
2662Commit the traffic management hierarchy on the port::
2663
2664   testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2665
2666where:
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
2672Set port traffic management default hierarchy (softnic forwarding mode)
2673~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2674
2675set the traffic management default hierarchy on the port::
2676
2677   testpmd> set port tm hierarchy default (port_id)
2678
2679Filter Functions
2680----------------
2681
2682This section details the available filter functions that are available.
2683
2684Note these functions interface the deprecated legacy filtering framework,
2685superseded by *rte_flow*. See `Flow rules management`_.
2686
2687ethertype_filter
2688~~~~~~~~~~~~~~~~~~~~
2689
2690Add 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
2695The 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
2711Example, 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
27192tuple_filter
2720~~~~~~~~~~~~~~~~~
2721
2722Add or delete a 2-tuple filter,
2723which identifies packets by specific protocol and destination TCP/UDP port
2724and 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
2731The 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
2747Example, 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
27555tuple_filter
2756~~~~~~~~~~~~~~~~~
2757
2758Add or delete a 5-tuple filter,
2759which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
2760and 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
2768The 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
2790Example, 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
2800syn_filter
2801~~~~~~~~~~
2802
2803Using 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
2807The 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
2817Example::
2818
2819   testpmd> syn_filter 0 add priority high queue 3
2820
2821flex_filter
2822~~~~~~~~~~~
2823
2824With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
2825and 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
2830The 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
2844Example::
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
2855flow_director_filter
2856~~~~~~~~~~~~~~~~~~~~
2857
2858The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
2859
2860Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
2861Perfect-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
2882The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
2883per flow type and the flexible payload.
2884
2885The Flow Director can also mask out parts of all of these fields so that filters
2886are only applied to certain fields or parts of the fields.
2887
2888Note that for raw flow type mode the source and destination fields in the
2889raw packet buffer need to be presented in a reversed order with respect
2890to the expected received packets.
2891For example: IP source and destination addresses or TCP/UDP/SCTP
2892source and destination ports
2893
2894Different 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
2944For 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
2950For 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
2956flush_flow_director
2957~~~~~~~~~~~~~~~~~~~
2958
2959Flush all flow director filters on a device::
2960
2961   testpmd> flush_flow_director (port_id)
2962
2963Example, to flush all flow director filter on port 0::
2964
2965   testpmd> flush_flow_director 0
2966
2967flow_director_mask
2968~~~~~~~~~~~~~~~~~~
2969
2970Set 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
2982Example, 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
2990flow_director_flex_mask
2991~~~~~~~~~~~~~~~~~~~~~~~
2992
2993set 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
3000Example, 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
3006flow_director_flex_payload
3007~~~~~~~~~~~~~~~~~~~~~~~~~~
3008
3009Configure flexible payload selection::
3010
3011   flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3012
3013For 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
3018get_sym_hash_ena_per_port
3019~~~~~~~~~~~~~~~~~~~~~~~~~
3020
3021Get symmetric hash enable configuration per port::
3022
3023   get_sym_hash_ena_per_port (port_id)
3024
3025For example, to get symmetric hash enable configuration of port 1::
3026
3027   testpmd> get_sym_hash_ena_per_port 1
3028
3029set_sym_hash_ena_per_port
3030~~~~~~~~~~~~~~~~~~~~~~~~~
3031
3032Set symmetric hash enable configuration per port to enable or disable::
3033
3034   set_sym_hash_ena_per_port (port_id) (enable|disable)
3035
3036For example, to set symmetric hash enable configuration of port 1 to enable::
3037
3038   testpmd> set_sym_hash_ena_per_port 1 enable
3039
3040get_hash_global_config
3041~~~~~~~~~~~~~~~~~~~~~~
3042
3043Get the global configurations of hash filters::
3044
3045   get_hash_global_config (port_id)
3046
3047For example, to get the global configurations of hash filters of port 1::
3048
3049   testpmd> get_hash_global_config 1
3050
3051set_hash_global_config
3052~~~~~~~~~~~~~~~~~~~~~~
3053
3054Set 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
3061For 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
3065set_hash_input_set
3066~~~~~~~~~~~~~~~~~~
3067
3068Set 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
3078For 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
3082set_fdir_input_set
3083~~~~~~~~~~~~~~~~~~
3084
3085The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3086on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3087
3088Set 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
3097For 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
3101global_config
3102~~~~~~~~~~~~~
3103
3104Set different GRE key length for input set::
3105
3106   global_config (port_id) gre-key-len (number in bytes)
3107
3108For 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
3115Flow rules management
3116---------------------
3117
3118Control of the generic flow API (*rte_flow*) is fully exposed through the
3119``flow`` command (validation, creation, destruction, queries and operation
3120modes).
3121
3122Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3123features simultaneously may cause undefined side-effects and is therefore
3124not recommended.
3125
3126``flow`` syntax
3127~~~~~~~~~~~~~~~
3128
3129Because the ``flow`` command uses dynamic tokens to handle the large number
3130of possible flow rules combinations, its behavior differs slightly from
3131other 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
3139The first parameter stands for the operation mode. Possible operations and
3140their general syntax are described below. They are covered in detail in the
3141following 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
3178Validating flow rules
3179~~~~~~~~~~~~~~~~~~~~~
3180
3181``flow validate`` reports whether a flow rule would be accepted by the
3182underlying device in its current state but stops short of creating it. It is
3183bound 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
3190If successful, it will show::
3191
3192   Flow rule validated
3193
3194Otherwise it will show an error message of the form::
3195
3196   Caught error type [...] ([...]): [...]
3197
3198This command uses the same parameters as ``flow create``, their format is
3199described in `Creating flow rules`_.
3200
3201Check whether redirecting any Ethernet packet received on port 0 to RX queue
3202index 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
3209Port 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
3216Creating flow rules
3217~~~~~~~~~~~~~~~~~~~
3218
3219``flow create`` validates and creates the specified flow rule. It is bound
3220to ``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
3227If successful, it will return a flow rule ID usable with other commands::
3228
3229   Flow rule #[...] created
3230
3231Otherwise it will show an error message of the form::
3232
3233   Caught error type [...] ([...]): [...]
3234
3235Parameters 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
3243These translate directly to *rte_flow* objects provided as-is to the
3244underlying functions.
3245
3246The shortest valid definition only comprises mandatory tokens::
3247
3248   testpmd> flow create 0 pattern end actions end
3249
3250Note that PMDs may refuse rules that essentially do nothing such as this
3251one.
3252
3253**All unspecified object values are automatically initialized to 0.**
3254
3255Attributes
3256^^^^^^^^^^
3257
3258These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3259specified 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
3267Each instance of an attribute specified several times overrides the previous
3268value as shown below (group 4 is used)::
3269
3270   testpmd> flow create 0 group 42 group 24 group 4 [...]
3271
3272Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3273
3274While not specifying a direction is an error, some rules may allow both
3275simultaneously.
3276
3277Most rules affect RX therefore contain the ``ingress`` token::
3278
3279   testpmd> flow create 0 ingress pattern [...]
3280
3281Matching pattern
3282^^^^^^^^^^^^^^^^
3283
3284A matching pattern starts after the ``pattern`` token. It is made of pattern
3285items and is terminated by a mandatory ``end`` item.
3286
3287Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3288rte_flow_item_type``).
3289
3290The ``/`` token is used as a separator between pattern items as shown
3291below::
3292
3293   testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3294
3295Note that protocol items like these must be stacked from lowest to highest
3296layer to make sense. For instance, the following rule is either invalid or
3297unlikely to match any packet::
3298
3299   testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3300
3301More information on these restrictions can be found in the *rte_flow*
3302documentation.
3303
3304Several 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
3310This rule matches all IPv4 traffic with the specified properties.
3311
3312In this example, ``src`` and ``dst`` are field names of the underlying
3313``struct rte_flow_item_ipv4`` object. All item properties can be specified
3314in a similar fashion.
3315
3316The ``is`` token means that the subsequent value must be matched exactly,
3317and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3318accordingly. 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
3326These 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
3346Inclusive 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
3350Note 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
3355Properties 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
3363Pattern items
3364^^^^^^^^^^^^^
3365
3366This 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
3532Actions list
3533^^^^^^^^^^^^
3534
3535A 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
3537terminated by a mandatory ``end`` action.
3538
3539Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3540rte_flow_action_type``).
3541
3542Dropping 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
3547Several actions have configurable properties which must be specified when
3548there is no valid default value. For example, ``queue`` requires a target
3549queue index.
3550
3551This 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
3556While 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
3561As defined by *rte_flow*, the list is not ordered, all actions of a given
3562rule 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
3570All actions in a list should have different types, otherwise only the last
3571action 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
3583Considering they are performed simultaneously, opposite and overlapping
3584actions 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
3596Note that PMDs may still refuse such combinations.
3597
3598Actions
3599^^^^^^^
3600
3601This 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
3744Destroying flow rules
3745~~~~~~~~~~~~~~~~~~~~~
3746
3747``flow destroy`` destroys one or more rules from their rule ID (as returned
3748by ``flow create``), this command calls ``rte_flow_destroy()`` as many
3749times as necessary::
3750
3751   flow destroy {port_id} rule {rule_id} [...]
3752
3753If successful, it will show::
3754
3755   Flow rule #[...] destroyed
3756
3757It does not report anything for rule IDs that do not exist. The usual error
3758message 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
3763arguments. It is bound to ``rte_flow_flush()``::
3764
3765   flow flush {port_id}
3766
3767Any errors are reported as above.
3768
3769Creating 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
3782The 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
3793Non-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
3807Querying flow rules
3808~~~~~~~~~~~~~~~~~~~
3809
3810``flow query`` queries a specific action of a flow rule having that
3811ability. Such actions collect information that can be reported using this
3812command. It is bound to ``rte_flow_query()``::
3813
3814   flow query {port_id} {rule_id} {action}
3815
3816If successful, it will display either the retrieved data for known actions
3817or the following message::
3818
3819   Cannot display result for action type [...] ([...])
3820
3821Otherwise, it will complain either that the rule does not exist or that some
3822error occurred::
3823
3824   Flow rule #[...] not found
3825
3826::
3827
3828   Caught error type [...] ([...]): [...]
3829
3830Currently only the ``count`` action is supported. This action reports the
3831number of packets that hit the flow rule and the total number of bytes. Its
3832output 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
3840Querying 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
3853Listing flow rules
3854~~~~~~~~~~~~~~~~~~
3855
3856``flow list`` lists existing flow rules sorted by priority and optionally
3857filtered by group identifiers::
3858
3859   flow list {port_id} [group {group_id}] [...]
3860
3861This command only fails with the following message if the device does not
3862exist::
3863
3864   Invalid port [...]
3865
3866Output consists of a header line followed by a short description of each
3867flow rule, one per line. There is no output at all when no flow rules are
3868configured 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
3878Creating 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
3896Rules 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
3910Output 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
3920Toggling isolated mode
3921~~~~~~~~~~~~~~~~~~~~~~
3922
3923``flow isolate`` can be used to tell the underlying PMD that ingress traffic
3924must only be injected from the defined flow rules; that no default traffic
3925is expected outside those rules and the driver is free to assign more
3926resources to handle them. It is bound to ``rte_flow_isolate()``::
3927
3928 flow isolate {port_id} {boolean}
3929
3930If successful, enabling or disabling isolated mode shows either::
3931
3932 Ingress traffic on port [...]
3933    is now restricted to the defined flow rules
3934
3935Or::
3936
3937 Ingress traffic on port [...]
3938    is not restricted anymore to the defined flow rules
3939
3940Otherwise, in case of error::
3941
3942   Caught error type [...] ([...]): [...]
3943
3944Mainly due to its side effects, PMDs supporting this mode may not have the
3945ability to toggle it more than once without reinitializing affected ports
3946first (e.g. by exiting testpmd).
3947
3948Enabling 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
3954Disabling 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
3960Sample QinQ flow rules
3961~~~~~~~~~~~~~~~~~~~~~~
3962
3963Before 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
3968The above command sets the inner and outer TPID's to 0x8100.
3969
3970To 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
3976Validate 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
3992Validate 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
4009Sample VXLAN encapsulation rule
4010~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4011
4012VXLAN encapsulation outer layer has default value pre-configured in testpmd
4013source code, those can be changed by using the following commands
4014
4015IPv4 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
4028IPv6 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
4041Sample NVGRE encapsulation rule
4042~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4043
4044NVGRE encapsulation outer layer has default value pre-configured in testpmd
4045source code, those can be changed by using the following commands
4046
4047IPv4 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
4060IPv6 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
4072BPF Functions
4073--------------
4074
4075The following sections show functions to load/unload eBPF based filters.
4076
4077bpf-load
4078~~~~~~~~
4079
4080Load 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
4084The 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
4096For example:
4097
4098.. code-block:: console
4099
4100   cd test/bpf
4101   clang -O2 -target bpf -c t1.c
4102
4103Then 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
4109To 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
4115bpf-unload
4116~~~~~~~~~~
4117
4118Unload previously loaded eBPF program for partciular RX/TX queue::
4119
4120   testpmd> bpf-unload rx|tx (portid) (queueid)
4121
4122For 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
4127