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