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