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