app/testpmd: support outer UDP HW checksum
[dpdk.git] / doc / guides / testpmd_app_ug / testpmd_funcs.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2010-2016 Intel Corporation.
3
4 .. _testpmd_runtime:
5
6 Testpmd Runtime Functions
7 =========================
8
9 Where the testpmd application is started in interactive mode, (``-i|--interactive``),
10 it displays a prompt that can be used to start and stop forwarding,
11 configure the application, display statistics (including the extended NIC
12 statistics aka xstats) , set the Flow Director and other tasks::
13
14    testpmd>
15
16 The testpmd prompt has some, limited, readline support.
17 Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported
18 as well as access to the command history via the up-arrow.
19
20 There is also support for tab completion.
21 If you type a partial command and hit ``<TAB>`` you get a list of the available completions:
22
23 .. code-block:: console
24
25    testpmd> show port <TAB>
26
27        info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
28        info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
29        stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
30        stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
31        ...
32
33
34 .. note::
35
36    Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes::
37
38       testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \
39                (pause_time) (send_xon) (port_id)
40
41 In the real ``testpmd>`` prompt these commands should be on a single line.
42
43 Help Functions
44 --------------
45
46 The testpmd has on-line help for the functions that are available at runtime.
47 These are divided into sections and can be accessed using help, help section or help all:
48
49 .. code-block:: console
50
51    testpmd> help
52
53        help control    : Start and stop forwarding.
54        help display    : Displaying port, stats and config information.
55        help config     : Configuration information.
56        help ports      : Configuring ports.
57        help registers  : Reading and setting port registers.
58        help filters    : Filters configuration help.
59        help all        : All of the above sections.
60
61
62 Command File Functions
63 ----------------------
64
65 To facilitate loading large number of commands or to avoid cutting and pasting where not
66 practical or possible testpmd supports alternative methods for executing commands.
67
68 * If started with the ``--cmdline-file=FILENAME`` command line argument testpmd
69   will execute all CLI commands contained within the file immediately before
70   starting packet forwarding or entering interactive mode.
71
72 .. code-block:: console
73
74    ./testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt
75    Interactive-mode selected
76    CLI commands to be read from /home/ubuntu/flow-create-commands.txt
77    Configuring Port 0 (socket 0)
78    Port 0: 7C:FE:90:CB:74:CE
79    Configuring Port 1 (socket 0)
80    Port 1: 7C:FE:90:CB:74:CA
81    Checking link statuses...
82    Port 0 Link Up - speed 10000 Mbps - full-duplex
83    Port 1 Link Up - speed 10000 Mbps - full-duplex
84    Done
85    Flow rule #0 created
86    Flow rule #1 created
87    ...
88    ...
89    Flow rule #498 created
90    Flow rule #499 created
91    Read all CLI commands from /home/ubuntu/flow-create-commands.txt
92    testpmd>
93
94
95 * At run-time additional commands can be loaded in bulk by invoking the ``load FILENAME``
96   command.
97
98 .. code-block:: console
99
100    testpmd> load /home/ubuntu/flow-create-commands.txt
101    Flow rule #0 created
102    Flow rule #1 created
103    ...
104    ...
105    Flow rule #498 created
106    Flow rule #499 created
107    Read all CLI commands from /home/ubuntu/flow-create-commands.txt
108    testpmd>
109
110
111 In all cases output from any included command will be displayed as standard output.
112 Execution will continue until the end of the file is reached regardless of
113 whether any errors occur.  The end user must examine the output to determine if
114 any failures occurred.
115
116
117 Control Functions
118 -----------------
119
120 start
121 ~~~~~
122
123 Start packet forwarding with current configuration::
124
125    testpmd> start
126
127 start tx_first
128 ~~~~~~~~~~~~~~
129
130 Start packet forwarding with current configuration after sending specified number of bursts of packets::
131
132    testpmd> start tx_first (""|burst_num)
133
134 The default burst number is 1 when ``burst_num`` not presented.
135
136 stop
137 ~~~~
138
139 Stop packet forwarding, and display accumulated statistics::
140
141    testpmd> stop
142
143 quit
144 ~~~~
145
146 Quit to prompt::
147
148    testpmd> quit
149
150
151 Display Functions
152 -----------------
153
154 The functions in the following sections are used to display information about the
155 testpmd configuration or the NIC status.
156
157 show port
158 ~~~~~~~~~
159
160 Display information for a given port or all ports::
161
162    testpmd> show port (info|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)
163
164 The available information categories are:
165
166 * ``info``: General port information such as MAC address.
167
168 * ``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
180 For 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
220 show port rss reta
221 ~~~~~~~~~~~~~~~~~~
222
223 Display the rss redirection table entry indicated by masks on port X::
224
225    testpmd> show port (port_id) rss reta (size) (mask0, mask1...)
226
227 size is used to indicate the hardware supported reta size
228
229 show port rss-hash
230 ~~~~~~~~~~~~~~~~~~
231
232 Display the RSS hash functions and RSS hash key of a port::
233
234    testpmd> show port (port_id) rss-hash [key]
235
236 clear port
237 ~~~~~~~~~~
238
239 Clear 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
243 For example::
244
245    testpmd> clear port stats all
246
247 show (rxq|txq)
248 ~~~~~~~~~~~~~~
249
250 Display information for a given port's RX/TX queue::
251
252    testpmd> show (rxq|txq) info (port_id) (queue_id)
253
254 show config
255 ~~~~~~~~~~~
256
257 Displays the configuration of the application.
258 The configuration comes from the command-line, the runtime or the application defaults::
259
260    testpmd> show config (rxtx|cores|fwd|txpkts)
261
262 The 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
272 For 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
286 set fwd
287 ~~~~~~~
288
289 Set 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
296 The 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
326 Example::
327
328    testpmd> set fwd rxonly
329
330    Set rxonly packet forwarding mode
331
332
333 read rxd
334 ~~~~~~~~
335
336 Display an RX descriptor for a port RX queue::
337
338    testpmd> read rxd (port_id) (queue_id) (rxd_id)
339
340 For example::
341
342    testpmd> read rxd 0 0 4
343         0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180
344
345 read txd
346 ~~~~~~~~
347
348 Display a TX descriptor for a port TX queue::
349
350    testpmd> read txd (port_id) (queue_id) (txd_id)
351
352 For example::
353
354    testpmd> read txd 0 0 4
355         0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C
356
357 ddp get list
358 ~~~~~~~~~~~~
359
360 Get loaded dynamic device personalization (DDP) package info list::
361
362    testpmd> ddp get list (port_id)
363
364 ddp get info
365 ~~~~~~~~~~~~
366
367 Display information about dynamic device personalization (DDP) profile::
368
369    testpmd> ddp get info (profile_path)
370
371 show vf stats
372 ~~~~~~~~~~~~~
373
374 Display VF statistics::
375
376    testpmd> show vf stats (port_id) (vf_id)
377
378 clear vf stats
379 ~~~~~~~~~~~~~~
380
381 Reset VF statistics::
382
383    testpmd> clear vf stats (port_id) (vf_id)
384
385 show port pctype mapping
386 ~~~~~~~~~~~~~~~~~~~~~~~~
387
388 List all items from the pctype mapping table::
389
390    testpmd> show port (port_id) pctype mapping
391
392 show rx offloading capabilities
393 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
394
395 List all per queue and per port Rx offloading capabilities of a port::
396
397    testpmd> show port (port_id) rx_offload capabilities
398
399 show rx offloading configuration
400 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
401
402 List port level and all queue level Rx offloading configuration::
403
404    testpmd> show port (port_id) rx_offload configuration
405
406 show tx offloading capabilities
407 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
408
409 List all per queue and per port Tx offloading capabilities of a port::
410
411    testpmd> show port (port_id) tx_offload capabilities
412
413 show tx offloading configuration
414 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
415
416 List port level and all queue level Tx offloading configuration::
417
418    testpmd> show port (port_id) tx_offload configuration
419
420
421 Configuration Functions
422 -----------------------
423
424 The testpmd application can be configured from the runtime as well as from the command-line.
425
426 This 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
432 set default
433 ~~~~~~~~~~~
434
435 Reset forwarding to the default configuration::
436
437    testpmd> set default
438
439 set verbose
440 ~~~~~~~~~~~
441
442 Set the debug verbosity level::
443
444    testpmd> set verbose (level)
445
446 Currently the only available levels are 0 (silent except for error) and 1 (fully verbose).
447
448 set log
449 ~~~~~~~
450
451 Set the log level for a log type::
452
453         testpmd> set log global|(type) (level)
454
455 Where:
456
457 * ``type`` is the log name.
458
459 * ``level`` is the log level.
460
461 For example, to change the global log level::
462         testpmd> set log global (level)
463
464 Regexes can also be used for type. To change log level of user1, user2 and user3::
465         testpmd> set log user[1-3] (level)
466
467 set nbport
468 ~~~~~~~~~~
469
470 Set the number of ports used by the application:
471
472 set nbport (num)
473
474 This is equivalent to the ``--nb-ports`` command-line option.
475
476 set nbcore
477 ~~~~~~~~~~
478
479 Set the number of cores used by the application::
480
481    testpmd> set nbcore (num)
482
483 This 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
489 set coremask
490 ~~~~~~~~~~~~
491
492 Set the forwarding cores hexadecimal mask::
493
494    testpmd> set coremask (mask)
495
496 This 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
502 set portmask
503 ~~~~~~~~~~~~
504
505 Set the forwarding ports hexadecimal mask::
506
507    testpmd> set portmask (mask)
508
509 This is equivalent to the ``--portmask`` command-line option.
510
511 set burst
512 ~~~~~~~~~
513
514 Set number of packets per burst::
515
516    testpmd> set burst (num)
517
518 This is equivalent to the ``--burst command-line`` option.
519
520 When 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
524 set txpkts
525 ~~~~~~~~~~
526
527 Set 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
531 Where x[,y]* represents a CSV list of values, without white space.
532
533 set txsplit
534 ~~~~~~~~~~~
535
536 Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes::
537
538    testpmd> set txsplit (off|on|rand)
539
540 Where:
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
550 set corelist
551 ~~~~~~~~~~~~
552
553 Set the list of forwarding cores::
554
555    testpmd> set corelist (x[,y]*)
556
557 For 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
574 set portlist
575 ~~~~~~~~~~~~
576
577 Set the list of forwarding ports::
578
579    testpmd> set portlist (x[,y]*)
580
581 For 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
595 set tx loopback
596 ~~~~~~~~~~~~~~~
597
598 Enable/disable tx loopback::
599
600    testpmd> set tx loopback (port_id) (on|off)
601
602 set drop enable
603 ~~~~~~~~~~~~~~~
604
605 set drop enable bit for all queues::
606
607    testpmd> set all queues drop (port_id) (on|off)
608
609 set split drop enable (for VF)
610 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
611
612 set split drop enable bit for VF from PF::
613
614    testpmd> set vf split drop (port_id) (vf_id) (on|off)
615
616 set mac antispoof (for VF)
617 ~~~~~~~~~~~~~~~~~~~~~~~~~~
618
619 Set mac antispoof for a VF from the PF::
620
621    testpmd> set vf mac antispoof  (port_id) (vf_id) (on|off)
622
623 set macsec offload
624 ~~~~~~~~~~~~~~~~~~
625
626 Enable/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
631 set macsec sc
632 ~~~~~~~~~~~~~
633
634 Configure 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
643 set macsec sa
644 ~~~~~~~~~~~~~
645
646 Configure 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
655 set broadcast mode (for VF)
656 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
657
658 Set broadcast mode for a VF from the PF::
659
660    testpmd> set vf broadcast (port_id) (vf_id) (on|off)
661
662 vlan set strip
663 ~~~~~~~~~~~~~~
664
665 Set the VLAN strip on a port::
666
667    testpmd> vlan set strip (on|off) (port_id)
668
669 vlan set stripq
670 ~~~~~~~~~~~~~~~
671
672 Set the VLAN strip for a queue on a port::
673
674    testpmd> vlan set stripq (on|off) (port_id,queue_id)
675
676 vlan set stripq (for VF)
677 ~~~~~~~~~~~~~~~~~~~~~~~~
678
679 Set 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
683 vlan set insert (for VF)
684 ~~~~~~~~~~~~~~~~~~~~~~~~
685
686 Set VLAN insert for a VF from the PF::
687
688    testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id)
689
690 vlan set tag (for VF)
691 ~~~~~~~~~~~~~~~~~~~~~
692
693 Set VLAN tag for a VF from the PF::
694
695    testpmd> set vf vlan tag (port_id) (vf_id) (on|off)
696
697 vlan set antispoof (for VF)
698 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
699
700 Set VLAN antispoof for a VF from the PF::
701
702    testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off)
703
704 vlan set filter
705 ~~~~~~~~~~~~~~~
706
707 Set the VLAN filter on a port::
708
709    testpmd> vlan set filter (on|off) (port_id)
710
711 vlan set qinq
712 ~~~~~~~~~~~~~
713
714 Set the VLAN QinQ (extended queue in queue) on for a port::
715
716    testpmd> vlan set qinq (on|off) (port_id)
717
718 vlan set tpid
719 ~~~~~~~~~~~~~
720
721 Set 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
729 rx_vlan add
730 ~~~~~~~~~~~
731
732 Add 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
742 rx_vlan rm
743 ~~~~~~~~~~
744
745 Remove 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
749 rx_vlan add (for VF)
750 ~~~~~~~~~~~~~~~~~~~~
751
752 Add 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
756 rx_vlan rm (for VF)
757 ~~~~~~~~~~~~~~~~~~~
758
759 Remove 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
763 tunnel_filter add
764 ~~~~~~~~~~~~~~~~~
765
766 Add 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
772 The 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
794 Example::
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
801 tunnel_filter remove
802 ~~~~~~~~~~~~~~~~~~~~
803
804 Remove 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
810 rx_vxlan_port add
811 ~~~~~~~~~~~~~~~~~
812
813 Add an UDP port for VXLAN packet filter on a port::
814
815    testpmd> rx_vxlan_port add (udp_port) (port_id)
816
817 rx_vxlan_port remove
818 ~~~~~~~~~~~~~~~~~~~~
819
820 Remove an UDP port for VXLAN packet filter on a port::
821
822    testpmd> rx_vxlan_port rm (udp_port) (port_id)
823
824 tx_vlan set
825 ~~~~~~~~~~~
826
827 Set 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
831 For example, set a single VLAN ID (5) insertion on port 0::
832
833    tx_vlan set 0 5
834
835 Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1::
836
837    tx_vlan set 1 2 3
838
839
840 tx_vlan set pvid
841 ~~~~~~~~~~~~~~~~
842
843 Set 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
847 tx_vlan reset
848 ~~~~~~~~~~~~~
849
850 Disable hardware insertion of a VLAN header in packets sent on a port::
851
852    testpmd> tx_vlan reset (port_id)
853
854 csum set
855 ~~~~~~~~
856
857 Select hardware or software calculation of the checksum when
858 transmitting 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
862 Where:
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
878 RSS queue region
879 ~~~~~~~~~~~~~~~~
880
881 Set 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
886 Set 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
890 where:
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
895 Set 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
899 Flush all queue region related configuration on a port::
900
901    testpmd> set port (port_id) queue-region flush (on|off)
902
903 where:
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
912 Show 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
921 csum parse-tunnel
922 ~~~~~~~~~~~~~~~~~
923
924 Define how tunneled packets should be handled by the csum forward
925 engine::
926
927    testpmd> csum parse-tunnel (on|off) (tx_port_id)
928
929 If enabled, the csum forward engine will try to recognize supported
930 tunnel headers (vxlan, gre, ipip).
931
932 If disabled, treat tunnel packets as non-tunneled packets (a inner
933 header 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
939 Example:
940
941 Consider 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
952 csum show
953 ~~~~~~~~~
954
955 Display tx checksum offload configuration::
956
957    testpmd> csum show (port_id)
958
959 tso set
960 ~~~~~~~
961
962 Enable 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
970 tso show
971 ~~~~~~~~
972
973 Display the status of TCP Segmentation Offload::
974
975    testpmd> tso show (port_id)
976
977 set port - gro
978 ~~~~~~~~~~~~~~
979
980 Enable or disable GRO in ``csum`` forwarding engine::
981
982    testpmd> set port <port_id> gro on|off
983
984 If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4
985 packets received from the given port.
986
987 If disabled, packets received from the given port won't be performed
988 GRO. 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
1000 show port - gro
1001 ~~~~~~~~~~~~~~~
1002
1003 Display GRO configuration for a given port::
1004
1005    testpmd> show port <port_id> gro
1006
1007 set gro flush
1008 ~~~~~~~~~~~~~
1009
1010 Set the cycle to flush the GROed packets from reassembly tables::
1011
1012    testpmd> set gro flush <cycles>
1013
1014 When enable GRO, the csum forwarding engine performs GRO on received
1015 packets, and the GROed packets are stored in reassembly tables. Users
1016 can use this command to determine when the GROed packets are flushed
1017 from the reassembly tables.
1018
1019 The ``cycles`` is measured in GRO operation times. The csum forwarding
1020 engine flushes the GROed packets from the tables every ``cycles`` GRO
1021 operations.
1022
1023 By default, the value of ``cycles`` is 1, which means flush GROed packets
1024 from the reassembly tables as soon as one GRO operation finishes. The value
1025 of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``.
1026
1027 Please note that the large value of ``cycles`` may cause the poor TCP/IP
1028 stack performance. Because the GROed packets are delayed to arrive the
1029 stack, thus causing more duplicated ACKs and TCP retransmissions.
1030
1031 set port - gso
1032 ~~~~~~~~~~~~~~
1033
1034 Toggle per-port GSO support in ``csum`` forwarding engine::
1035
1036    testpmd> set port <port_id> gso on|off
1037
1038 If enabled, the csum forwarding engine will perform GSO on supported IPv4
1039 packets, transmitted on the given port.
1040
1041 If disabled, packets transmitted on the given port will not undergo GSO.
1042 By 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
1069 set gso segsz
1070 ~~~~~~~~~~~~~
1071
1072 Set the maximum GSO segment size (measured in bytes), which includes the
1073 packet header and the packet payload for GSO-enabled ports (global)::
1074
1075    testpmd> set gso segsz <length>
1076
1077 show port - gso
1078 ~~~~~~~~~~~~~~~
1079
1080 Display the status of Generic Segmentation Offload for a given port::
1081
1082    testpmd> show port <port_id> gso
1083
1084 mac_addr add
1085 ~~~~~~~~~~~~
1086
1087 Add an alternative MAC address to a port::
1088
1089    testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)
1090
1091 mac_addr remove
1092 ~~~~~~~~~~~~~~~
1093
1094 Remove a MAC address from a port::
1095
1096    testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX)
1097
1098 mac_addr add (for VF)
1099 ~~~~~~~~~~~~~~~~~~~~~
1100
1101 Add 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
1105 mac_addr set
1106 ~~~~~~~~~~~~
1107
1108 Set the default MAC address for a port::
1109
1110    testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX)
1111
1112 mac_addr set (for VF)
1113 ~~~~~~~~~~~~~~~~~~~~~
1114
1115 Set 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
1119 set eth-peer
1120 ~~~~~~~~~~~~
1121
1122 Set the forwarding peer address for certain port::
1123
1124    testpmd> set eth-peer (port_id) (perr_addr)
1125
1126 This is equivalent to the ``--eth-peer`` command-line option.
1127
1128 set port-uta
1129 ~~~~~~~~~~~~
1130
1131 Set 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
1135 set promisc
1136 ~~~~~~~~~~~
1137
1138 Set the promiscuous mode on for a port or for all ports.
1139 In 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
1143 set allmulti
1144 ~~~~~~~~~~~~
1145
1146 Set the allmulti mode for a port or for all ports::
1147
1148    testpmd> set allmulti (port_id|all) (on|off)
1149
1150 Same as the ifconfig (8) option. Controls how multicast packets are handled.
1151
1152 set promisc (for VF)
1153 ~~~~~~~~~~~~~~~~~~~~
1154
1155 Set the unicast promiscuous mode for a VF from PF.
1156 It's supported by Intel i40e NICs now.
1157 In 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
1161 set allmulticast (for VF)
1162 ~~~~~~~~~~~~~~~~~~~~~~~~~
1163
1164 Set the multicast promiscuous mode for a VF from PF.
1165 It's supported by Intel i40e NICs now.
1166 In 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
1170 set tx max bandwidth (for VF)
1171 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1172
1173 Set 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
1177 set tc tx min bandwidth (for VF)
1178 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1179
1180 Set 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
1184 set tc tx max bandwidth (for VF)
1185 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1186
1187 Set 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
1191 set tc strict link priority mode
1192 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1193
1194 Set some TCs' strict link priority mode on a physical port::
1195
1196    testpmd> set tx strict-link-priority (port_id) (tc_bitmap)
1197
1198 set tc tx min bandwidth
1199 ~~~~~~~~~~~~~~~~~~~~~~~
1200
1201 Set 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
1205 set flow_ctrl rx
1206 ~~~~~~~~~~~~~~~~
1207
1208 Set 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
1214 Where:
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
1228 set pfc_ctrl rx
1229 ~~~~~~~~~~~~~~~
1230
1231 Set 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
1236 Where:
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
1246 set stat_qmap
1247 ~~~~~~~~~~~~~
1248
1249 Set 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
1253 For example, to set rx queue 2 on port 0 to mapping 5::
1254
1255    testpmd>set stat_qmap rx 0 2 5
1256
1257 set xstats-hide-zero
1258 ~~~~~~~~~~~~~~~~~~~~
1259
1260 Set 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
1268 set port - rx/tx (for VF)
1269 ~~~~~~~~~~~~~~~~~~~~~~~~~
1270
1271 Set VF receive/transmit from a port::
1272
1273    testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off)
1274
1275 set port - mac address filter (for VF)
1276 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1277
1278 Add/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
1283 set port - rx mode(for VF)
1284 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1285
1286 Set 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
1291 The 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
1301 set port - tx_rate (for Queue)
1302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1303
1304 Set TX rate limitation for a queue on a port::
1305
1306    testpmd> set port (port_id) queue (queue_id) rate (rate_value)
1307
1308 set port - tx_rate (for VF)
1309 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1310
1311 Set 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
1315 set port - mirror rule
1316 ~~~~~~~~~~~~~~~~~~~~~~
1317
1318 Set 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
1324 Set 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
1329 For 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
1333 reset port - mirror rule
1334 ~~~~~~~~~~~~~~~~~~~~~~~~
1335
1336 Reset a mirror rule for a port::
1337
1338    testpmd> reset port (port_id) mirror-rule (rule_id)
1339
1340 set flush_rx
1341 ~~~~~~~~~~~~
1342
1343 Set the flush on RX streams before forwarding.
1344 The default is flush ``on``.
1345 Mainly 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
1349 set bypass mode
1350 ~~~~~~~~~~~~~~~
1351
1352 Set the bypass mode for the lowest port on bypass enabled NIC::
1353
1354    testpmd> set bypass mode (normal|bypass|isolate) (port_id)
1355
1356 set bypass event
1357 ~~~~~~~~~~~~~~~~
1358
1359 Set 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
1364 Where:
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
1377 set bypass timeout
1378 ~~~~~~~~~~~~~~~~~~
1379
1380 Set 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
1384 show bypass config
1385 ~~~~~~~~~~~~~~~~~~
1386
1387 Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC::
1388
1389    testpmd> show bypass config (port_id)
1390
1391 set link up
1392 ~~~~~~~~~~~
1393
1394 Set link up for a port::
1395
1396    testpmd> set link-up port (port id)
1397
1398 set link down
1399 ~~~~~~~~~~~~~
1400
1401 Set link down for a port::
1402
1403    testpmd> set link-down port (port id)
1404
1405 E-tag set
1406 ~~~~~~~~~
1407
1408 Enable 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
1412 Disable E-tag insertion for a VF on a port::
1413
1414    testpmd> E-tag set insertion off port (port_id) vf (vf_id)
1415
1416 Enable/disable E-tag stripping on a port::
1417
1418    testpmd> E-tag set stripping (on|off) port (port_id)
1419
1420 Enable/disable E-tag based forwarding on a port::
1421
1422    testpmd> E-tag set forwarding (on|off) port (port_id)
1423
1424 Add 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
1428 Delete an E-tag forwarding filter on a port::
1429    testpmd> E-tag set filter del e-tag-id (value) port (port_id)
1430
1431 ddp add
1432 ~~~~~~~
1433
1434 Load a dynamic device personalization (DDP) profile and store backup profile::
1435
1436    testpmd> ddp add (port_id) (profile_path[,backup_profile_path])
1437
1438 ddp del
1439 ~~~~~~~
1440
1441 Delete a dynamic device personalization profile and restore backup profile::
1442
1443    testpmd> ddp del (port_id) (backup_profile_path)
1444
1445 ptype mapping
1446 ~~~~~~~~~~~~~
1447
1448 List all items from the ptype mapping table::
1449
1450    testpmd> ptype mapping get (port_id) (valid_only)
1451
1452 Where:
1453
1454 * ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0).
1455
1456 Replace 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
1460 where:
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
1468 Update hardware defined ptype to software defined packet type mapping table::
1469
1470    testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype)
1471
1472 where:
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
1478 Reset ptype mapping table::
1479
1480    testpmd> ptype mapping reset (port_id)
1481
1482 config per port Rx offloading
1483 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1484
1485 Enable 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
1495 This command should be run when the port is stopped, or else it will fail.
1496
1497 config per queue Rx offloading
1498 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1499
1500 Enable 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
1510 This command should be run when the port is stopped, or else it will fail.
1511
1512 config per port Tx offloading
1513 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1514
1515 Enable 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
1526 This command should be run when the port is stopped, or else it will fail.
1527
1528 config per queue Tx offloading
1529 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1530
1531 Enable 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
1542 This command should be run when the port is stopped, or else it will fail.
1543
1544 Config VXLAN Encap outer layers
1545 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1546
1547 Configure 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
1557 Those command will set an internal configuration inside testpmd, any following
1558 flow rule using the action vxlan_encap will use the last configuration set.
1559 To have a different encapsulation header, one of those commands must be called
1560 before the flow rule creation.
1561
1562 Config NVGRE Encap outer layers
1563 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1564
1565 Configure 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
1572 Those command will set an internal configuration inside testpmd, any following
1573 flow rule using the action nvgre_encap will use the last configuration set.
1574 To have a different encapsulation header, one of those commands must be called
1575 before the flow rule creation.
1576
1577 Port Functions
1578 --------------
1579
1580 The following sections show functions for configuring ports.
1581
1582 .. note::
1583
1584    Port configuration changes only become active when forwarding is started/restarted.
1585
1586 port attach
1587 ~~~~~~~~~~~
1588
1589 Attach a port specified by pci address or virtual device args::
1590
1591    testpmd> port attach (identifier)
1592
1593 To attach a new pci device, the device should be recognized by kernel first.
1594 Then it should be moved under DPDK management.
1595 Finally the port can be attached to testpmd.
1596
1597 For 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
1623 To attach a port created by virtual device, above steps are not needed.
1624
1625 For 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
1640 For 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
1651 In this case, identifier is ``net_pcap0``.
1652 This identifier format is the same as ``--vdev`` format of DPDK applications.
1653
1654 For example, to re-attach a bonded port which has been previously detached,
1655 the 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
1667 port detach
1668 ~~~~~~~~~~~
1669
1670 Detach a specific port::
1671
1672    testpmd> port detach (port_id)
1673
1674 Before detaching a port, the port should be stopped and closed.
1675
1676 For 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
1696 For 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
1713 To remove a pci device completely from the system, first detach the port from testpmd.
1714 Then the device should be moved under kernel management.
1715 Finally the device can be removed using kernel pci hotplug functionality.
1716
1717 For 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
1733 To remove a port created by a virtual device, above steps are not needed.
1734
1735 port start
1736 ~~~~~~~~~~
1737
1738 Start all ports or a specific port::
1739
1740    testpmd> port start (port_id|all)
1741
1742 port stop
1743 ~~~~~~~~~
1744
1745 Stop all ports or a specific port::
1746
1747    testpmd> port stop (port_id|all)
1748
1749 port close
1750 ~~~~~~~~~~
1751
1752 Close all ports or a specific port::
1753
1754    testpmd> port close (port_id|all)
1755
1756 port config - queue ring size
1757 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1758
1759 Configure a rx/tx queue ring size::
1760
1761    testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
1762
1763 Only take effect after command that (re-)start the port or command that setup specific queue.
1764
1765 port start/stop queue
1766 ~~~~~~~~~~~~~~~~~~~~~
1767
1768 Start/stop a rx/tx queue on a specific port::
1769
1770    testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop)
1771
1772 port config - queue deferred start
1773 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1774
1775 Switch on/off deferred start of a specific port queue::
1776
1777    testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off)
1778
1779 port setup queue
1780 ~~~~~~~~~~~~~~~~~~~~~
1781
1782 Setup a rx/tx queue on a specific port::
1783
1784    testpmd> port (port_id) (rxq|txq) (queue_id) setup
1785
1786 Only take effect when port is started.
1787
1788 port config - speed
1789 ~~~~~~~~~~~~~~~~~~~
1790
1791 Set 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
1796 port config - queues/descriptors
1797 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1798
1799 Set number of queues/descriptors for rxq, txq, rxd and txd::
1800
1801    testpmd> port config all (rxq|txq|rxd|txd) (value)
1802
1803 This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options.
1804
1805 port config - max-pkt-len
1806 ~~~~~~~~~~~~~~~~~~~~~~~~~
1807
1808 Set the maximum packet length::
1809
1810    testpmd> port config all max-pkt-len (value)
1811
1812 This is equivalent to the ``--max-pkt-len`` command-line option.
1813
1814 port config - CRC Strip
1815 ~~~~~~~~~~~~~~~~~~~~~~~
1816
1817 Set hardware CRC stripping on or off for all ports::
1818
1819    testpmd> port config all crc-strip (on|off)
1820
1821 CRC stripping is on by default.
1822
1823 The ``off`` option is equivalent to the ``--disable-crc-strip`` command-line option.
1824
1825 port config - scatter
1826 ~~~~~~~~~~~~~~~~~~~~~~~
1827
1828 Set RX scatter mode on or off for all ports::
1829
1830    testpmd> port config all scatter (on|off)
1831
1832 RX scatter mode is off by default.
1833
1834 The ``on`` option is equivalent to the ``--enable-scatter`` command-line option.
1835
1836 port config - RX Checksum
1837 ~~~~~~~~~~~~~~~~~~~~~~~~~
1838
1839 Set hardware RX checksum offload to on or off for all ports::
1840
1841    testpmd> port config all rx-cksum (on|off)
1842
1843 Checksum offload is off by default.
1844
1845 The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option.
1846
1847 port config - VLAN
1848 ~~~~~~~~~~~~~~~~~~
1849
1850 Set hardware VLAN on or off for all ports::
1851
1852    testpmd> port config all hw-vlan (on|off)
1853
1854 Hardware VLAN is off by default.
1855
1856 The ``on`` option is equivalent to the ``--enable-hw-vlan`` command-line option.
1857
1858 port config - VLAN filter
1859 ~~~~~~~~~~~~~~~~~~~~~~~~~
1860
1861 Set hardware VLAN filter on or off for all ports::
1862
1863    testpmd> port config all hw-vlan-filter (on|off)
1864
1865 Hardware VLAN filter is off by default.
1866
1867 The ``on`` option is equivalent to the ``--enable-hw-vlan-filter`` command-line option.
1868
1869 port config - VLAN strip
1870 ~~~~~~~~~~~~~~~~~~~~~~~~
1871
1872 Set hardware VLAN strip on or off for all ports::
1873
1874    testpmd> port config all hw-vlan-strip (on|off)
1875
1876 Hardware VLAN strip is off by default.
1877
1878 The ``on`` option is equivalent to the ``--enable-hw-vlan-strip`` command-line option.
1879
1880 port config - VLAN extend
1881 ~~~~~~~~~~~~~~~~~~~~~~~~~
1882
1883 Set hardware VLAN extend on or off for all ports::
1884
1885    testpmd> port config all hw-vlan-extend (on|off)
1886
1887 Hardware VLAN extend is off by default.
1888
1889 The ``on`` option is equivalent to the ``--enable-hw-vlan-extend`` command-line option.
1890
1891 port config - Drop Packets
1892 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1893
1894 Set packet drop for packets with no descriptors on or off for all ports::
1895
1896    testpmd> port config all drop-en (on|off)
1897
1898 Packet dropping for packets with no descriptors is off by default.
1899
1900 The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option.
1901
1902 port config - RSS
1903 ~~~~~~~~~~~~~~~~~
1904
1905 Set 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
1909 RSS is on by default.
1910
1911 The ``all`` option is equivalent to ip|tcp|udp|sctp|ether.
1912 The ``default`` option enables all supported RSS types reported by device info.
1913 The ``none`` option is equivalent to the ``--disable-rss`` command-line option.
1914
1915 port config - RSS Reta
1916 ~~~~~~~~~~~~~~~~~~~~~~
1917
1918 Set the RSS (Receive Side Scaling) redirection table::
1919
1920    testpmd> port config all rss reta (hash,queue)[,(hash,queue)]
1921
1922 port config - DCB
1923 ~~~~~~~~~~~~~~~~~
1924
1925 Set the DCB mode for an individual port::
1926
1927    testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off)
1928
1929 The traffic class should be 4 or 8.
1930
1931 port config - Burst
1932 ~~~~~~~~~~~~~~~~~~~
1933
1934 Set the number of packets per burst::
1935
1936    testpmd> port config all burst (value)
1937
1938 This is equivalent to the ``--burst`` command-line option.
1939
1940 port config - Threshold
1941 ~~~~~~~~~~~~~~~~~~~~~~~
1942
1943 Set thresholds for TX/RX queues::
1944
1945    testpmd> port config all (threshold) (value)
1946
1947 Where 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
1967 These threshold options are also available from the command-line.
1968
1969 port config - E-tag
1970 ~~~~~~~~~~~~~~~~~~~
1971
1972 Set the value of ether-type for E-tag::
1973
1974    testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value)
1975
1976 Enable/disable the E-tag support::
1977
1978    testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable)
1979
1980 port config pctype mapping
1981 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1982
1983 Reset pctype mapping table::
1984
1985    testpmd> port config (port_id) pctype mapping reset
1986
1987 Update 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
1991 where:
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
1997 port config input set
1998 ~~~~~~~~~~~~~~~~~~~~~
1999
2000 Config 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
2005 Clear 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
2009 where:
2010
2011 * ``pctype_id``: hardware packet classification types.
2012 * ``field_idx``: hardware field index.
2013
2014 port config udp_tunnel_port
2015 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016
2017 Add/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
2020 Link Bonding Functions
2021 ----------------------
2022
2023 The Link Bonding functions make it possible to dynamically create and
2024 manage link bonding devices from within testpmd interactive prompt.
2025
2026 create bonded device
2027 ~~~~~~~~~~~~~~~~~~~~
2028
2029 Create a new bonding device::
2030
2031    testpmd> create bonded device (mode) (socket)
2032
2033 For 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
2038 add bonding slave
2039 ~~~~~~~~~~~~~~~~~
2040
2041 Adds Ethernet device to a Link Bonding device::
2042
2043    testpmd> add bonding slave (slave id) (port id)
2044
2045 For example, to add Ethernet device (port 6) to a Link Bonding device (port 10)::
2046
2047    testpmd> add bonding slave 6 10
2048
2049
2050 remove bonding slave
2051 ~~~~~~~~~~~~~~~~~~~~
2052
2053 Removes an Ethernet slave device from a Link Bonding device::
2054
2055    testpmd> remove bonding slave (slave id) (port id)
2056
2057 For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10)::
2058
2059    testpmd> remove bonding slave 6 10
2060
2061 set bonding mode
2062 ~~~~~~~~~~~~~~~~
2063
2064 Set the Link Bonding mode of a Link Bonding device::
2065
2066    testpmd> set bonding mode (value) (port id)
2067
2068 For 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
2072 set bonding primary
2073 ~~~~~~~~~~~~~~~~~~~
2074
2075 Set an Ethernet slave device as the primary device on a Link Bonding device::
2076
2077    testpmd> set bonding primary (slave id) (port id)
2078
2079 For 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
2083 set bonding mac
2084 ~~~~~~~~~~~~~~~
2085
2086 Set the MAC address of a Link Bonding device::
2087
2088    testpmd> set bonding mac (port id) (mac)
2089
2090 For 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
2094 set bonding xmit_balance_policy
2095 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2096
2097 Set 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
2101 For 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
2106 set bonding mon_period
2107 ~~~~~~~~~~~~~~~~~~~~~~
2108
2109 Set the link status monitoring polling period in milliseconds for a bonding device.
2110
2111 This adds support for PMD slave devices which do not support link status interrupts.
2112 When the mon_period is set to a value greater than 0 then all PMD's which do not support
2113 link 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
2117 For 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
2122 set bonding lacp dedicated_queue
2123 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2124
2125 Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic
2126 when in mode 4 (link-aggregration-802.3ad)::
2127
2128    testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable)
2129
2130
2131 set bonding agg_mode
2132 ~~~~~~~~~~~~~~~~~~~~
2133
2134 Enable 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
2139 show bonding config
2140 ~~~~~~~~~~~~~~~~~~~
2141
2142 Show the current configuration of a Link Bonding device::
2143
2144    testpmd> show bonding config (port id)
2145
2146 For example,
2147 to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4)
2148 in 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
2158 Register Functions
2159 ------------------
2160
2161 The Register Functions can be used to read from and write to registers on the network card referenced by a port number.
2162 This is mainly useful for debugging purposes.
2163 Reference should be made to the appropriate datasheet for the network card for details on the register addresses
2164 and fields that can be accessed.
2165
2166 read reg
2167 ~~~~~~~~
2168
2169 Display the value of a port register::
2170
2171    testpmd> read reg (port_id) (address)
2172
2173 For 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
2178 read regfield
2179 ~~~~~~~~~~~~~
2180
2181 Display a port register bit field::
2182
2183    testpmd> read regfield (port_id) (address) (bit_x) (bit_y)
2184
2185 For 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
2190 read regbit
2191 ~~~~~~~~~~~
2192
2193 Display a single port register bit::
2194
2195    testpmd> read regbit (port_id) (address) (bit_x)
2196
2197 For 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
2202 write reg
2203 ~~~~~~~~~
2204
2205 Set the value of a port register::
2206
2207    testpmd> write reg (port_id) (address) (value)
2208
2209 For example, to clear a register::
2210
2211    testpmd> write reg 0 0xEE00 0x0
2212    port 0 PCI register at offset 0xEE00: 0x00000000 (0)
2213
2214 write regfield
2215 ~~~~~~~~~~~~~~
2216
2217 Set bit field of a port register::
2218
2219    testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value)
2220
2221 For 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
2226 write regbit
2227 ~~~~~~~~~~~~
2228
2229 Set single bit value of a port register::
2230
2231    testpmd> write regbit (port_id) (address) (bit_x) (value)
2232
2233 For 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
2238 Traffic Metering and Policing
2239 -----------------------------
2240
2241 The following section shows functions for configuring traffic metering and
2242 policing on the ethernet device through the use of generic ethdev API.
2243
2244 show port traffic management capability
2245 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2246
2247 Show traffic metering and policing capability of the port::
2248
2249    testpmd> show port meter cap (port_id)
2250
2251 add port meter profile (srTCM rfc2967)
2252 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2253
2254 Add 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
2259 where:
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
2266 add port meter profile (trTCM rfc2968)
2267 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2268
2269 Add 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
2274 where:
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
2282 add port meter profile (trTCM rfc4115)
2283 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2284
2285 Add 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
2290 where:
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
2298 delete port meter profile
2299 ~~~~~~~~~~~~~~~~~~~~~~~~~
2300
2301 Delete meter profile from the ethernet device::
2302
2303    testpmd> del port meter profile (port_id) (profile_id)
2304
2305 create port meter
2306 ~~~~~~~~~~~~~~~~~
2307
2308 Create 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
2315 where:
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
2335 enable port meter
2336 ~~~~~~~~~~~~~~~~~
2337
2338 Enable meter for the ethernet device::
2339
2340    testpmd> enable port meter (port_id) (mtr_id)
2341
2342 disable port meter
2343 ~~~~~~~~~~~~~~~~~~
2344
2345 Disable meter for the ethernet device::
2346
2347    testpmd> disable port meter (port_id) (mtr_id)
2348
2349 delete port meter
2350 ~~~~~~~~~~~~~~~~~
2351
2352 Delete meter for the ethernet device::
2353
2354    testpmd> del port meter (port_id) (mtr_id)
2355
2356 Set port meter profile
2357 ~~~~~~~~~~~~~~~~~~~~~~
2358
2359 Set meter profile for the ethernet device::
2360
2361    testpmd> set port meter profile (port_id) (mtr_id) (profile_id)
2362
2363 set port meter dscp table
2364 ~~~~~~~~~~~~~~~~~~~~~~~~~
2365
2366 Set 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
2371 set port meter policer action
2372 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2373
2374 Set 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
2379 where:
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
2389 set port meter stats mask
2390 ~~~~~~~~~~~~~~~~~~~~~~~~~
2391
2392 Set meter stats mask for the ethernet device::
2393
2394    testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask)
2395
2396 where:
2397
2398 * ``stats_mask``: Bit mask indicating statistics counter types to be enabled.
2399
2400 show port meter stats
2401 ~~~~~~~~~~~~~~~~~~~~~
2402
2403 Show meter stats of the ethernet device::
2404
2405    testpmd> show port meter stats (port_id) (mtr_id) (clear)
2406
2407 where:
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
2412 Traffic Management
2413 ------------------
2414
2415 The following section shows functions for configuring traffic management on
2416 on the ethernet device through the use of generic TM API.
2417
2418 show port traffic management capability
2419 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2420
2421 Show traffic management capability of the port::
2422
2423    testpmd> show port tm cap (port_id)
2424
2425 show port traffic management capability (hierarchy level)
2426 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2427
2428 Show traffic management hierarchy level capability of the port::
2429
2430    testpmd> show port tm level cap (port_id) (level_id)
2431
2432 show port traffic management capability (hierarchy node level)
2433 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2434
2435 Show the traffic management hierarchy node capability of the port::
2436
2437    testpmd> show port tm node cap (port_id) (node_id)
2438
2439 show port traffic management hierarchy node type
2440 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2441
2442 Show the port traffic management hierarchy node type::
2443
2444    testpmd> show port tm node type (port_id) (node_id)
2445
2446 show port traffic management hierarchy node stats
2447 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2448
2449 Show the port traffic management hierarchy node statistics::
2450
2451    testpmd> show port tm node stats (port_id) (node_id) (clear)
2452
2453 where:
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
2459 Add port traffic management private shaper profile
2460 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2461
2462 Add 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
2467 where:
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
2477 Delete port traffic management private shaper profile
2478 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2479
2480 Delete the port traffic management private shaper::
2481
2482    testpmd> del port tm node shaper profile (port_id) (shaper_profile_id)
2483
2484 where:
2485
2486 * ``shaper_profile id``: Shaper profile ID that needs to be deleted.
2487
2488 Add port traffic management shared shaper
2489 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2490
2491 Create 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
2496 where:
2497
2498 * ``shared_shaper_id``: Shared shaper ID to be created.
2499 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2500
2501 Set port traffic management shared shaper
2502 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2503
2504 Update 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
2509 where:
2510
2511 * ``shared_shaper_id``: Shared shaper ID to be update.
2512 * ``shaper_profile id``: Shaper profile ID for shared shaper.
2513
2514 Delete port traffic management shared shaper
2515 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2516
2517 Delete the port traffic management shared shaper::
2518
2519    testpmd> del port tm node shared shaper (port_id) (shared_shaper_id)
2520
2521 where:
2522
2523 * ``shared_shaper_id``: Shared shaper ID to be deleted.
2524
2525 Set port traffic management hiearchy node private shaper
2526 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2527
2528 set 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
2533 where:
2534
2535 * ``shaper_profile id``: Private shaper profile ID to be enabled on the
2536   hierarchy node.
2537
2538 Add port traffic management WRED profile
2539 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2540
2541 Create 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
2548 where:
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
2567 Delete port traffic management WRED profile
2568 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2569
2570 Delete the WRED profile::
2571
2572    testpmd> del port tm node wred profile (port_id) (wred_profile_id)
2573
2574 Add port traffic management hierarchy nonleaf node
2575 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2576
2577 Add 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
2584 where:
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
2600 Add port traffic management hierarchy leaf node
2601 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2602
2603 Add 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
2610 where:
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
2627 Delete port traffic management hierarchy node
2628 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2629
2630 Delete node from port traffic management hiearchy::
2631
2632    testpmd> del port tm node (port_id) (node_id)
2633
2634 Update port traffic management hierarchy parent node
2635 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2636
2637 Update 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
2642 This function can only be called after the hierarchy commit invocation. Its
2643 success depends on the port support for this operation, as advertised through
2644 the port capability set. This function is valid for all nodes of the traffic
2645 management hierarchy except root node.
2646
2647 Suspend port traffic management hierarchy node
2648 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2649
2650    testpmd> suspend port tm node (port_id) (node_id)
2651
2652 Resume port traffic management hierarchy node
2653 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2654
2655    testpmd> resume port tm node (port_id) (node_id)
2656
2657 Commit port traffic management hierarchy
2658 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2659
2660 Commit the traffic management hierarchy on the port::
2661
2662    testpmd> port tm hierarchy commit (port_id) (clean_on_fail)
2663
2664 where:
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
2670 Set port traffic management default hierarchy (softnic forwarding mode)
2671 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2672
2673 set the traffic management default hierarchy on the port::
2674
2675    testpmd> set port tm hierarchy default (port_id)
2676
2677 Filter Functions
2678 ----------------
2679
2680 This section details the available filter functions that are available.
2681
2682 Note these functions interface the deprecated legacy filtering framework,
2683 superseded by *rte_flow*. See `Flow rules management`_.
2684
2685 ethertype_filter
2686 ~~~~~~~~~~~~~~~~~~~~
2687
2688 Add 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
2693 The 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
2709 Example, 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
2717 2tuple_filter
2718 ~~~~~~~~~~~~~~~~~
2719
2720 Add or delete a 2-tuple filter,
2721 which identifies packets by specific protocol and destination TCP/UDP port
2722 and 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
2729 The 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
2745 Example, 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
2753 5tuple_filter
2754 ~~~~~~~~~~~~~~~~~
2755
2756 Add or delete a 5-tuple filter,
2757 which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port)
2758 and 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
2766 The 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
2788 Example, 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
2798 syn_filter
2799 ~~~~~~~~~~
2800
2801 Using 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
2805 The 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
2815 Example::
2816
2817    testpmd> syn_filter 0 add priority high queue 3
2818
2819 flex_filter
2820 ~~~~~~~~~~~
2821
2822 With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet
2823 and 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
2828 The 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
2842 Example::
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
2853 flow_director_filter
2854 ~~~~~~~~~~~~~~~~~~~~
2855
2856 The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues.
2857
2858 Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and
2859 Perfect-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
2880 The Flow Director filters can match the different fields for different type of packet: flow type, specific input set
2881 per flow type and the flexible payload.
2882
2883 The Flow Director can also mask out parts of all of these fields so that filters
2884 are only applied to certain fields or parts of the fields.
2885
2886 Note that for raw flow type mode the source and destination fields in the
2887 raw packet buffer need to be presented in a reversed order with respect
2888 to the expected received packets.
2889 For example: IP source and destination addresses or TCP/UDP/SCTP
2890 source and destination ports
2891
2892 Different 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
2942 For 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
2948 For 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
2954 flush_flow_director
2955 ~~~~~~~~~~~~~~~~~~~
2956
2957 Flush all flow director filters on a device::
2958
2959    testpmd> flush_flow_director (port_id)
2960
2961 Example, to flush all flow director filter on port 0::
2962
2963    testpmd> flush_flow_director 0
2964
2965 flow_director_mask
2966 ~~~~~~~~~~~~~~~~~~
2967
2968 Set 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
2980 Example, 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
2988 flow_director_flex_mask
2989 ~~~~~~~~~~~~~~~~~~~~~~~
2990
2991 set 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
2998 Example, 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
3004 flow_director_flex_payload
3005 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3006
3007 Configure flexible payload selection::
3008
3009    flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config)
3010
3011 For 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
3016 get_sym_hash_ena_per_port
3017 ~~~~~~~~~~~~~~~~~~~~~~~~~
3018
3019 Get symmetric hash enable configuration per port::
3020
3021    get_sym_hash_ena_per_port (port_id)
3022
3023 For example, to get symmetric hash enable configuration of port 1::
3024
3025    testpmd> get_sym_hash_ena_per_port 1
3026
3027 set_sym_hash_ena_per_port
3028 ~~~~~~~~~~~~~~~~~~~~~~~~~
3029
3030 Set symmetric hash enable configuration per port to enable or disable::
3031
3032    set_sym_hash_ena_per_port (port_id) (enable|disable)
3033
3034 For example, to set symmetric hash enable configuration of port 1 to enable::
3035
3036    testpmd> set_sym_hash_ena_per_port 1 enable
3037
3038 get_hash_global_config
3039 ~~~~~~~~~~~~~~~~~~~~~~
3040
3041 Get the global configurations of hash filters::
3042
3043    get_hash_global_config (port_id)
3044
3045 For example, to get the global configurations of hash filters of port 1::
3046
3047    testpmd> get_hash_global_config 1
3048
3049 set_hash_global_config
3050 ~~~~~~~~~~~~~~~~~~~~~~
3051
3052 Set 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
3059 For 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
3063 set_hash_input_set
3064 ~~~~~~~~~~~~~~~~~~
3065
3066 Set 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
3076 For 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
3080 set_fdir_input_set
3081 ~~~~~~~~~~~~~~~~~~
3082
3083 The Flow Director filters can match the different fields for different type of packet, i.e. specific input set
3084 on per flow type and the flexible payload. This command can be used to change input set for each flow type.
3085
3086 Set 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
3095 For 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
3099 global_config
3100 ~~~~~~~~~~~~~
3101
3102 Set different GRE key length for input set::
3103
3104    global_config (port_id) gre-key-len (number in bytes)
3105
3106 For 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
3113 Flow rules management
3114 ---------------------
3115
3116 Control of the generic flow API (*rte_flow*) is fully exposed through the
3117 ``flow`` command (validation, creation, destruction, queries and operation
3118 modes).
3119
3120 Considering *rte_flow* overlaps with all `Filter Functions`_, using both
3121 features simultaneously may cause undefined side-effects and is therefore
3122 not recommended.
3123
3124 ``flow`` syntax
3125 ~~~~~~~~~~~~~~~
3126
3127 Because the ``flow`` command uses dynamic tokens to handle the large number
3128 of possible flow rules combinations, its behavior differs slightly from
3129 other 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
3137 The first parameter stands for the operation mode. Possible operations and
3138 their general syntax are described below. They are covered in detail in the
3139 following 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
3176 Validating flow rules
3177 ~~~~~~~~~~~~~~~~~~~~~
3178
3179 ``flow validate`` reports whether a flow rule would be accepted by the
3180 underlying device in its current state but stops short of creating it. It is
3181 bound 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
3188 If successful, it will show::
3189
3190    Flow rule validated
3191
3192 Otherwise it will show an error message of the form::
3193
3194    Caught error type [...] ([...]): [...]
3195
3196 This command uses the same parameters as ``flow create``, their format is
3197 described in `Creating flow rules`_.
3198
3199 Check whether redirecting any Ethernet packet received on port 0 to RX queue
3200 index 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
3207 Port 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
3214 Creating flow rules
3215 ~~~~~~~~~~~~~~~~~~~
3216
3217 ``flow create`` validates and creates the specified flow rule. It is bound
3218 to ``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
3225 If successful, it will return a flow rule ID usable with other commands::
3226
3227    Flow rule #[...] created
3228
3229 Otherwise it will show an error message of the form::
3230
3231    Caught error type [...] ([...]): [...]
3232
3233 Parameters 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
3241 These translate directly to *rte_flow* objects provided as-is to the
3242 underlying functions.
3243
3244 The shortest valid definition only comprises mandatory tokens::
3245
3246    testpmd> flow create 0 pattern end actions end
3247
3248 Note that PMDs may refuse rules that essentially do nothing such as this
3249 one.
3250
3251 **All unspecified object values are automatically initialized to 0.**
3252
3253 Attributes
3254 ^^^^^^^^^^
3255
3256 These tokens affect flow rule attributes (``struct rte_flow_attr``) and are
3257 specified 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
3265 Each instance of an attribute specified several times overrides the previous
3266 value as shown below (group 4 is used)::
3267
3268    testpmd> flow create 0 group 42 group 24 group 4 [...]
3269
3270 Note that once enabled, ``ingress`` and ``egress`` cannot be disabled.
3271
3272 While not specifying a direction is an error, some rules may allow both
3273 simultaneously.
3274
3275 Most rules affect RX therefore contain the ``ingress`` token::
3276
3277    testpmd> flow create 0 ingress pattern [...]
3278
3279 Matching pattern
3280 ^^^^^^^^^^^^^^^^
3281
3282 A matching pattern starts after the ``pattern`` token. It is made of pattern
3283 items and is terminated by a mandatory ``end`` item.
3284
3285 Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum
3286 rte_flow_item_type``).
3287
3288 The ``/`` token is used as a separator between pattern items as shown
3289 below::
3290
3291    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...]
3292
3293 Note that protocol items like these must be stacked from lowest to highest
3294 layer to make sense. For instance, the following rule is either invalid or
3295 unlikely to match any packet::
3296
3297    testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...]
3298
3299 More information on these restrictions can be found in the *rte_flow*
3300 documentation.
3301
3302 Several 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
3308 This rule matches all IPv4 traffic with the specified properties.
3309
3310 In this example, ``src`` and ``dst`` are field names of the underlying
3311 ``struct rte_flow_item_ipv4`` object. All item properties can be specified
3312 in a similar fashion.
3313
3314 The ``is`` token means that the subsequent value must be matched exactly,
3315 and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item``
3316 accordingly. 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
3324 These 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
3344 Inclusive 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
3348 Note 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
3353 Properties 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
3361 Pattern items
3362 ^^^^^^^^^^^^^
3363
3364 This 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
3530 Actions list
3531 ^^^^^^^^^^^^
3532
3533 A 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
3535 terminated by a mandatory ``end`` action.
3536
3537 Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum
3538 rte_flow_action_type``).
3539
3540 Dropping 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
3545 Several actions have configurable properties which must be specified when
3546 there is no valid default value. For example, ``queue`` requires a target
3547 queue index.
3548
3549 This 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
3554 While 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
3559 As defined by *rte_flow*, the list is not ordered, all actions of a given
3560 rule 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
3568 All actions in a list should have different types, otherwise only the last
3569 action 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
3581 Considering they are performed simultaneously, opposite and overlapping
3582 actions 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
3594 Note that PMDs may still refuse such combinations.
3595
3596 Actions
3597 ^^^^^^^
3598
3599 This 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
3742 Destroying flow rules
3743 ~~~~~~~~~~~~~~~~~~~~~
3744
3745 ``flow destroy`` destroys one or more rules from their rule ID (as returned
3746 by ``flow create``), this command calls ``rte_flow_destroy()`` as many
3747 times as necessary::
3748
3749    flow destroy {port_id} rule {rule_id} [...]
3750
3751 If successful, it will show::
3752
3753    Flow rule #[...] destroyed
3754
3755 It does not report anything for rule IDs that do not exist. The usual error
3756 message 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
3761 arguments. It is bound to ``rte_flow_flush()``::
3762
3763    flow flush {port_id}
3764
3765 Any errors are reported as above.
3766
3767 Creating 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
3780 The 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
3791 Non-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
3805 Querying flow rules
3806 ~~~~~~~~~~~~~~~~~~~
3807
3808 ``flow query`` queries a specific action of a flow rule having that
3809 ability. Such actions collect information that can be reported using this
3810 command. It is bound to ``rte_flow_query()``::
3811
3812    flow query {port_id} {rule_id} {action}
3813
3814 If successful, it will display either the retrieved data for known actions
3815 or the following message::
3816
3817    Cannot display result for action type [...] ([...])
3818
3819 Otherwise, it will complain either that the rule does not exist or that some
3820 error occurred::
3821
3822    Flow rule #[...] not found
3823
3824 ::
3825
3826    Caught error type [...] ([...]): [...]
3827
3828 Currently only the ``count`` action is supported. This action reports the
3829 number of packets that hit the flow rule and the total number of bytes. Its
3830 output 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
3838 Querying 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
3851 Listing flow rules
3852 ~~~~~~~~~~~~~~~~~~
3853
3854 ``flow list`` lists existing flow rules sorted by priority and optionally
3855 filtered by group identifiers::
3856
3857    flow list {port_id} [group {group_id}] [...]
3858
3859 This command only fails with the following message if the device does not
3860 exist::
3861
3862    Invalid port [...]
3863
3864 Output consists of a header line followed by a short description of each
3865 flow rule, one per line. There is no output at all when no flow rules are
3866 configured 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
3876 Creating 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
3894 Rules 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
3908 Output 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
3918 Toggling isolated mode
3919 ~~~~~~~~~~~~~~~~~~~~~~
3920
3921 ``flow isolate`` can be used to tell the underlying PMD that ingress traffic
3922 must only be injected from the defined flow rules; that no default traffic
3923 is expected outside those rules and the driver is free to assign more
3924 resources to handle them. It is bound to ``rte_flow_isolate()``::
3925
3926  flow isolate {port_id} {boolean}
3927
3928 If successful, enabling or disabling isolated mode shows either::
3929
3930  Ingress traffic on port [...]
3931     is now restricted to the defined flow rules
3932
3933 Or::
3934
3935  Ingress traffic on port [...]
3936     is not restricted anymore to the defined flow rules
3937
3938 Otherwise, in case of error::
3939
3940    Caught error type [...] ([...]): [...]
3941
3942 Mainly due to its side effects, PMDs supporting this mode may not have the
3943 ability to toggle it more than once without reinitializing affected ports
3944 first (e.g. by exiting testpmd).
3945
3946 Enabling 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
3952 Disabling 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
3958 Sample QinQ flow rules
3959 ~~~~~~~~~~~~~~~~~~~~~~
3960
3961 Before 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
3966 The above command sets the inner and outer TPID's to 0x8100.
3967
3968 To 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
3974 Validate 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
3990 Validate 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
4007 Sample VXLAN encapsulation rule
4008 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4009
4010 VXLAN encapsulation outer layer has default value pre-configured in testpmd
4011 source code, those can be changed by using the following commands
4012
4013 IPv4 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
4026 IPv6 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
4039 Sample NVGRE encapsulation rule
4040 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4041
4042 NVGRE encapsulation outer layer has default value pre-configured in testpmd
4043 source code, those can be changed by using the following commands
4044
4045 IPv4 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
4058 IPv6 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
4070 BPF Functions
4071 --------------
4072
4073 The following sections show functions to load/unload eBPF based filters.
4074
4075 bpf-load
4076 ~~~~~~~~
4077
4078 Load 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
4082 The 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
4094 For example:
4095
4096 .. code-block:: console
4097
4098    cd test/bpf
4099    clang -O2 -target bpf -c t1.c
4100
4101 Then 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
4107 To 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
4113 bpf-unload
4114 ~~~~~~~~~~
4115
4116 Unload previously loaded eBPF program for partciular RX/TX queue::
4117
4118    testpmd> bpf-unload rx|tx (portid) (queueid)
4119
4120 For 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