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 2071 2072Traffic Management 2073------------------ 2074 2075The following section shows functions for configuring traffic management on 2076on the ethernet device through the use of generic TM API. 2077 2078show port traffic management capability 2079~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2080 2081Show traffic management capability of the port:: 2082 2083 testpmd> show port tm cap (port_id) 2084 2085show port traffic management capability (hierarchy level) 2086~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2087 2088Show traffic management hierarchy level capability of the port:: 2089 2090 testpmd> show port tm cap (port_id) (level_id) 2091 2092show port traffic management capability (hierarchy node level) 2093~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2094 2095Show the traffic management hierarchy node capability of the port:: 2096 2097 testpmd> show port tm cap (port_id) (node_id) 2098 2099show port traffic management hierarchy node type 2100~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2101 2102Show the port traffic management hierarchy node type:: 2103 2104 testpmd> show port tm node type (port_id) (node_id) 2105 2106show port traffic management hierarchy node stats 2107~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2108 2109Show the port traffic management hierarchy node statistics:: 2110 2111 testpmd> show port tm node stats (port_id) (node_id) (clear) 2112 2113where: 2114 2115* ``clear``: When this parameter has a non-zero value, the statistics counters 2116 are cleared (i.e. set to zero) immediately after they have been read, 2117 otherwise the statistics counters are left untouched. 2118 2119Add port traffic management private shaper profile 2120~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2121 2122Add the port traffic management private shaper profile:: 2123 2124 testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \ 2125 (tb_rate) (tb_size) (packet_length_adjust) 2126 2127where: 2128 2129* ``shaper_profile id``: Shaper profile ID for the new profile. 2130* ``tb_rate``: Token bucket rate (bytes per second). 2131* ``tb_size``: Token bucket size (bytes). 2132* ``packet_length_adjust``: The value (bytes) to be added to the length of 2133 each packet for the purpose of shaping. This parameter value can be used to 2134 correct the packet length with the framing overhead bytes that are consumed 2135 on the wire. 2136 2137Delete port traffic management private shaper profile 2138~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2139 2140Delete the port traffic management private shaper:: 2141 2142 testpmd> del port tm node shaper profile (port_id) (shaper_profile_id) 2143 2144where: 2145 2146* ``shaper_profile id``: Shaper profile ID that needs to be deleted. 2147 2148Add port traffic management shared shaper 2149~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2150 2151Create the port traffic management shared shaper:: 2152 2153 testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \ 2154 (shaper_profile_id) 2155 2156where: 2157 2158* ``shared_shaper_id``: Shared shaper ID to be created. 2159* ``shaper_profile id``: Shaper profile ID for shared shaper. 2160 2161Set port traffic management shared shaper 2162~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2163 2164Update the port traffic management shared shaper:: 2165 2166 testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \ 2167 (shaper_profile_id) 2168 2169where: 2170 2171* ``shared_shaper_id``: Shared shaper ID to be update. 2172* ``shaper_profile id``: Shaper profile ID for shared shaper. 2173 2174Delete port traffic management shared shaper 2175~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2176 2177Delete the port traffic management shared shaper:: 2178 2179 testpmd> del port tm node shared shaper (port_id) (shared_shaper_id) 2180 2181where: 2182 2183* ``shared_shaper_id``: Shared shaper ID to be deleted. 2184 2185Set port traffic management hiearchy node private shaper 2186~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2187 2188set the port traffic management hierarchy node private shaper:: 2189 2190 testpmd> set port tm node shaper profile (port_id) (node_id) \ 2191 (shaper_profile_id) 2192 2193where: 2194 2195* ``shaper_profile id``: Private shaper profile ID to be enabled on the 2196 hierarchy node. 2197 2198Add port traffic management WRED profile 2199~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2200 2201Create a new WRED profile:: 2202 2203 testpmd> add port tm node wred profile (port_id) (wred_profile_id) \ 2204 (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \ 2205 (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \ 2206 (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r) 2207 2208where: 2209 2210* ``wred_profile id``: Identifier for the newly create WRED profile 2211* ``color_g``: Packet color (green) 2212* ``min_th_g``: Minimum queue threshold for packet with green color 2213* ``max_th_g``: Minimum queue threshold for packet with green color 2214* ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp) 2215* ``wq_log2_g``: Negated log2 of queue weight (wq) 2216* ``color_y``: Packet color (yellow) 2217* ``min_th_y``: Minimum queue threshold for packet with yellow color 2218* ``max_th_y``: Minimum queue threshold for packet with yellow color 2219* ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp) 2220* ``wq_log2_y``: Negated log2 of queue weight (wq) 2221* ``color_r``: Packet color (red) 2222* ``min_th_r``: Minimum queue threshold for packet with yellow color 2223* ``max_th_r``: Minimum queue threshold for packet with yellow color 2224* ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp) 2225* ``wq_log2_r``: Negated log2 of queue weight (wq) 2226 2227Delete port traffic management WRED profile 2228~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2229 2230Delete the WRED profile:: 2231 2232 testpmd> del port tm node wred profile (port_id) (wred_profile_id) 2233 2234Add port traffic management hierarchy nonleaf node 2235~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2236 2237Add nonleaf node to port traffic management hiearchy:: 2238 2239 testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \ 2240 (priority) (weight) (level_id) (shaper_profile_id) \ 2241 (shared_shaper_id) (n_shared_shapers) (n_sp_priorities) (stats_mask) \ 2242 2243where: 2244 2245* ``parent_node_id``: Node ID of the parent. 2246* ``priority``: Node priority (highest node priority is zero). This is used by 2247 the SP algorithm running on the parent node for scheduling this node. 2248* ``weight``: Node weight (lowest weight is one). The node weight is relative 2249 to the weight sum of all siblings that have the same priority. It is used by 2250 the WFQ algorithm running on the parent node for scheduling this node. 2251* ``level_id``: Hiearchy level of the node. 2252* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by 2253 the node. 2254* ``shared_shaper_id``: Shared shaper id. 2255* ``n_shared_shapers``: Number of shared shapers. 2256* ``n_sp_priorities``: Number of strict priorities. 2257* ``stats_mask``: Mask of statistics counter types to be enabled for this node. 2258 2259Add port traffic management hierarchy leaf node 2260~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2261 2262Add leaf node to port traffic management hiearchy:: 2263 2264 testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \ 2265 (priority) (weight) (level_id) (shaper_profile_id) \ 2266 (shared_shaper_id) (n_shared_shapers) (cman_mode) \ 2267 (wred_profile_id) (stats_mask) \ 2268 2269where: 2270 2271* ``parent_node_id``: Node ID of the parent. 2272* ``priority``: Node priority (highest node priority is zero). This is used by 2273 the SP algorithm running on the parent node for scheduling this node. 2274* ``weight``: Node weight (lowest weight is one). The node weight is relative 2275 to the weight sum of all siblings that have the same priority. It is used by 2276 the WFQ algorithm running on the parent node for scheduling this node. 2277* ``level_id``: Hiearchy level of the node. 2278* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by 2279 the node. 2280* ``shared_shaper_id``: Shared shaper id. 2281* ``n_shared_shapers``: Number of shared shapers. 2282* ``cman_mode``: Congestion management mode to be enabled for this node. 2283* ``wred_profile_id``: WRED profile id to be enabled for this node. 2284* ``stats_mask``: Mask of statistics counter types to be enabled for this node. 2285 2286Delete port traffic management hierarchy node 2287~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2288 2289Delete node from port traffic management hiearchy:: 2290 2291 testpmd> del port tm node (port_id) (node_id) 2292 2293Update port traffic management hierarchy parent node 2294~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2295 2296Update port traffic management hierarchy parent node:: 2297 2298 testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \ 2299 (priority) (weight) 2300 2301This function can only be called after the hierarchy commit invocation. Its 2302success depends on the port support for this operation, as advertised through 2303the port capability set. This function is valid for all nodes of the traffic 2304management hierarchy except root node. 2305 2306Commit port traffic management hierarchy 2307~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2308 2309Commit the traffic management hierarchy on the port:: 2310 2311 testpmd> port tm hierarchy commit (port_id) (clean_on_fail) 2312 2313where: 2314 2315* ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function 2316 call failure. On the other hand, hierarchy is preserved when this parameter 2317 is equal to zero. 2318 2319Set port traffic management default hierarchy (tm forwarding mode) 2320~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2321 2322set the traffic management default hierarchy on the port:: 2323 2324 testpmd> set port tm hierarchy default (port_id) 2325 2326Filter Functions 2327---------------- 2328 2329This section details the available filter functions that are available. 2330 2331Note these functions interface the deprecated legacy filtering framework, 2332superseded by *rte_flow*. See `Flow rules management`_. 2333 2334ethertype_filter 2335~~~~~~~~~~~~~~~~~~~~ 2336 2337Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue:: 2338 2339 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \ 2340 ethertype (ether_type) (drop|fwd) queue (queue_id) 2341 2342The available information parameters are: 2343 2344* ``port_id``: The port which the Ethertype filter assigned on. 2345 2346* ``mac_addr``: Compare destination mac address. 2347 2348* ``mac_ignr``: Ignore destination mac address match. 2349 2350* ``mac_address``: Destination mac address to match. 2351 2352* ``ether_type``: The EtherType value want to match, 2353 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. 2354 2355* ``queue_id``: The receive queue associated with this EtherType filter. 2356 It is meaningless when deleting or dropping. 2357 2358Example, to add/remove an ethertype filter rule:: 2359 2360 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \ 2361 ethertype 0x0806 fwd queue 3 2362 2363 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \ 2364 ethertype 0x0806 fwd queue 3 2365 23662tuple_filter 2367~~~~~~~~~~~~~~~~~ 2368 2369Add or delete a 2-tuple filter, 2370which identifies packets by specific protocol and destination TCP/UDP port 2371and forwards packets into one of the receive queues:: 2372 2373 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \ 2374 protocol (protocol_value) mask (mask_value) \ 2375 tcp_flags (tcp_flags_value) priority (prio_value) \ 2376 queue (queue_id) 2377 2378The available information parameters are: 2379 2380* ``port_id``: The port which the 2-tuple filter assigned on. 2381 2382* ``dst_port_value``: Destination port in L4. 2383 2384* ``protocol_value``: IP L4 protocol. 2385 2386* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate. 2387 2388* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). 2389 2390* ``prio_value``: Priority of this filter. 2391 2392* ``queue_id``: The receive queue associated with this 2-tuple filter. 2393 2394Example, to add/remove an 2tuple filter rule:: 2395 2396 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \ 2397 tcp_flags 0x02 priority 3 queue 3 2398 2399 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \ 2400 tcp_flags 0x02 priority 3 queue 3 2401 24025tuple_filter 2403~~~~~~~~~~~~~~~~~ 2404 2405Add or delete a 5-tuple filter, 2406which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) 2407and routes packets into one of the receive queues:: 2408 2409 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \ 2410 (src_address) dst_port (dst_port_value) \ 2411 src_port (src_port_value) protocol (protocol_value) \ 2412 mask (mask_value) tcp_flags (tcp_flags_value) \ 2413 priority (prio_value) queue (queue_id) 2414 2415The available information parameters are: 2416 2417* ``port_id``: The port which the 5-tuple filter assigned on. 2418 2419* ``dst_address``: Destination IP address. 2420 2421* ``src_address``: Source IP address. 2422 2423* ``dst_port_value``: TCP/UDP destination port. 2424 2425* ``src_port_value``: TCP/UDP source port. 2426 2427* ``protocol_value``: L4 protocol. 2428 2429* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate 2430 2431* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). 2432 2433* ``prio_value``: The priority of this filter. 2434 2435* ``queue_id``: The receive queue associated with this 5-tuple filter. 2436 2437Example, to add/remove an 5tuple filter rule:: 2438 2439 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \ 2440 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ 2441 flags 0x0 priority 3 queue 3 2442 2443 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \ 2444 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ 2445 flags 0x0 priority 3 queue 3 2446 2447syn_filter 2448~~~~~~~~~~ 2449 2450Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue:: 2451 2452 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) 2453 2454The available information parameters are: 2455 2456* ``port_id``: The port which the SYN filter assigned on. 2457 2458* ``high``: This SYN filter has higher priority than other filters. 2459 2460* ``low``: This SYN filter has lower priority than other filters. 2461 2462* ``queue_id``: The receive queue associated with this SYN filter 2463 2464Example:: 2465 2466 testpmd> syn_filter 0 add priority high queue 3 2467 2468flex_filter 2469~~~~~~~~~~~ 2470 2471With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet 2472and routed into one of the receive queues:: 2473 2474 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \ 2475 mask (mask_value) priority (prio_value) queue (queue_id) 2476 2477The available information parameters are: 2478 2479* ``port_id``: The port which the Flex filter is assigned on. 2480 2481* ``len_value``: Filter length in bytes, no greater than 128. 2482 2483* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match. 2484 2485* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match. 2486 2487* ``prio_value``: The priority of this filter. 2488 2489* ``queue_id``: The receive queue associated with this Flex filter. 2490 2491Example:: 2492 2493 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \ 2494 mask 000C priority 3 queue 3 2495 2496 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \ 2497 mask 000C priority 3 queue 3 2498 2499 2500.. _testpmd_flow_director: 2501 2502flow_director_filter 2503~~~~~~~~~~~~~~~~~~~~ 2504 2505The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. 2506 2507Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and 2508Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter: 2509 2510* Perfect match filters. 2511 The hardware checks a match between the masked fields of the received packets and the programmed filters. 2512 The masked fields are for IP flow. 2513 2514* Signature filters. 2515 The hardware checks a match between a hash-based signature of the masked fields of the received packet. 2516 2517* Perfect-mac-vlan match filters. 2518 The hardware checks a match between the masked fields of the received packets and the programmed filters. 2519 The masked fields are for MAC VLAN flow. 2520 2521* Perfect-tunnel match filters. 2522 The hardware checks a match between the masked fields of the received packets and the programmed filters. 2523 The masked fields are for tunnel flow. 2524 2525The Flow Director filters can match the different fields for different type of packet: flow type, specific input set 2526per flow type and the flexible payload. 2527 2528The Flow Director can also mask out parts of all of these fields so that filters 2529are only applied to certain fields or parts of the fields. 2530 2531Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. 2532 2533# Commands to add flow director filters of different flow types:: 2534 2535 flow_director_filter (port_id) mode IP (add|del|update) \ 2536 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \ 2537 src (src_ip_address) dst (dst_ip_address) \ 2538 tos (tos_value) proto (proto_value) ttl (ttl_value) \ 2539 vlan (vlan_value) flexbytes (flexbytes_value) \ 2540 (drop|fwd) pf|vf(vf_id) queue (queue_id) \ 2541 fd_id (fd_id_value) 2542 2543 flow_director_filter (port_id) mode IP (add|del|update) \ 2544 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \ 2545 src (src_ip_address) (src_port) \ 2546 dst (dst_ip_address) (dst_port) \ 2547 tos (tos_value) ttl (ttl_value) \ 2548 vlan (vlan_value) flexbytes (flexbytes_value) \ 2549 (drop|fwd) queue pf|vf(vf_id) (queue_id) \ 2550 fd_id (fd_id_value) 2551 2552 flow_director_filter (port_id) mode IP (add|del|update) \ 2553 flow (ipv4-sctp|ipv6-sctp) \ 2554 src (src_ip_address) (src_port) \ 2555 dst (dst_ip_address) (dst_port) \ 2556 tos (tos_value) ttl (ttl_value) \ 2557 tag (verification_tag) vlan (vlan_value) \ 2558 flexbytes (flexbytes_value) (drop|fwd) \ 2559 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) 2560 2561 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \ 2562 ether (ethertype) flexbytes (flexbytes_value) \ 2563 (drop|fwd) pf|vf(vf_id) queue (queue_id) 2564 fd_id (fd_id_value) 2565 2566 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \ 2567 mac (mac_address) vlan (vlan_value) \ 2568 flexbytes (flexbytes_value) (drop|fwd) \ 2569 queue (queue_id) fd_id (fd_id_value) 2570 2571 flow_director_filter (port_id) mode Tunnel (add|del|update) \ 2572 mac (mac_address) vlan (vlan_value) \ 2573 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \ 2574 flexbytes (flexbytes_value) (drop|fwd) \ 2575 queue (queue_id) fd_id (fd_id_value) 2576 2577For example, to add an ipv4-udp flow type filter:: 2578 2579 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \ 2580 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \ 2581 fwd pf queue 1 fd_id 1 2582 2583For example, add an ipv4-other flow type filter:: 2584 2585 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \ 2586 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \ 2587 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 2588 2589flush_flow_director 2590~~~~~~~~~~~~~~~~~~~ 2591 2592Flush all flow director filters on a device:: 2593 2594 testpmd> flush_flow_director (port_id) 2595 2596Example, to flush all flow director filter on port 0:: 2597 2598 testpmd> flush_flow_director 0 2599 2600flow_director_mask 2601~~~~~~~~~~~~~~~~~~ 2602 2603Set flow director's input masks:: 2604 2605 flow_director_mask (port_id) mode IP vlan (vlan_value) \ 2606 src_mask (ipv4_src) (ipv6_src) (src_port) \ 2607 dst_mask (ipv4_dst) (ipv6_dst) (dst_port) 2608 2609 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) 2610 2611 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \ 2612 mac (mac_value) tunnel-type (tunnel_type_value) \ 2613 tunnel-id (tunnel_id_value) 2614 2615Example, to set flow director mask on port 0:: 2616 2617 testpmd> flow_director_mask 0 mode IP vlan 0xefff \ 2618 src_mask 255.255.255.255 \ 2619 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \ 2620 dst_mask 255.255.255.255 \ 2621 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF 2622 2623flow_director_flex_mask 2624~~~~~~~~~~~~~~~~~~~~~~~ 2625 2626set masks of flow director's flexible payload based on certain flow type:: 2627 2628 testpmd> flow_director_flex_mask (port_id) \ 2629 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 2630 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \ 2631 l2_payload|all) (mask) 2632 2633Example, to set flow director's flex mask for all flow type on port 0:: 2634 2635 testpmd> flow_director_flex_mask 0 flow all \ 2636 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 2637 2638 2639flow_director_flex_payload 2640~~~~~~~~~~~~~~~~~~~~~~~~~~ 2641 2642Configure flexible payload selection:: 2643 2644 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) 2645 2646For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload:: 2647 2648 testpmd> flow_director_flex_payload 0 l4 \ 2649 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) 2650 2651get_sym_hash_ena_per_port 2652~~~~~~~~~~~~~~~~~~~~~~~~~ 2653 2654Get symmetric hash enable configuration per port:: 2655 2656 get_sym_hash_ena_per_port (port_id) 2657 2658For example, to get symmetric hash enable configuration of port 1:: 2659 2660 testpmd> get_sym_hash_ena_per_port 1 2661 2662set_sym_hash_ena_per_port 2663~~~~~~~~~~~~~~~~~~~~~~~~~ 2664 2665Set symmetric hash enable configuration per port to enable or disable:: 2666 2667 set_sym_hash_ena_per_port (port_id) (enable|disable) 2668 2669For example, to set symmetric hash enable configuration of port 1 to enable:: 2670 2671 testpmd> set_sym_hash_ena_per_port 1 enable 2672 2673get_hash_global_config 2674~~~~~~~~~~~~~~~~~~~~~~ 2675 2676Get the global configurations of hash filters:: 2677 2678 get_hash_global_config (port_id) 2679 2680For example, to get the global configurations of hash filters of port 1:: 2681 2682 testpmd> get_hash_global_config 1 2683 2684set_hash_global_config 2685~~~~~~~~~~~~~~~~~~~~~~ 2686 2687Set the global configurations of hash filters:: 2688 2689 set_hash_global_config (port_id) (toeplitz|simple_xor|default) \ 2690 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \ 2691 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \ 2692 (enable|disable) 2693 2694For example, to enable simple_xor for flow type of ipv6 on port 2:: 2695 2696 testpmd> set_hash_global_config 2 simple_xor ipv6 enable 2697 2698set_hash_input_set 2699~~~~~~~~~~~~~~~~~~ 2700 2701Set the input set for hash:: 2702 2703 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 2704 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ 2705 l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \ 2706 ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \ 2707 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \ 2708 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \ 2709 fld-8th|none) (select|add) 2710 2711For example, to add source IP to hash input set for flow type of ipv4-udp on port 0:: 2712 2713 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add 2714 2715set_fdir_input_set 2716~~~~~~~~~~~~~~~~~~ 2717 2718The Flow Director filters can match the different fields for different type of packet, i.e. specific input set 2719on per flow type and the flexible payload. This command can be used to change input set for each flow type. 2720 2721Set the input set for flow director:: 2722 2723 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 2724 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ 2725 l2_payload) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \ 2726 ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \ 2727 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \ 2728 sctp-dst-port|sctp-veri-tag|none) (select|add) 2729 2730For example to add source IP to FD input set for flow type of ipv4-udp on port 0:: 2731 2732 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add 2733 2734global_config 2735~~~~~~~~~~~~~ 2736 2737Set different GRE key length for input set:: 2738 2739 global_config (port_id) gre-key-len (number in bytes) 2740 2741For example to set GRE key length for input set to 4 bytes on port 0:: 2742 2743 testpmd> global_config 0 gre-key-len 4 2744 2745 2746.. _testpmd_rte_flow: 2747 2748Flow rules management 2749--------------------- 2750 2751Control of the generic flow API (*rte_flow*) is fully exposed through the 2752``flow`` command (validation, creation, destruction, queries and operation 2753modes). 2754 2755Considering *rte_flow* overlaps with all `Filter Functions`_, using both 2756features simultaneously may cause undefined side-effects and is therefore 2757not recommended. 2758 2759``flow`` syntax 2760~~~~~~~~~~~~~~~ 2761 2762Because the ``flow`` command uses dynamic tokens to handle the large number 2763of possible flow rules combinations, its behavior differs slightly from 2764other commands, in particular: 2765 2766- Pressing *?* or the *<tab>* key displays contextual help for the current 2767 token, not that of the entire command. 2768 2769- Optional and repeated parameters are supported (provided they are listed 2770 in the contextual help). 2771 2772The first parameter stands for the operation mode. Possible operations and 2773their general syntax are described below. They are covered in detail in the 2774following sections. 2775 2776- Check whether a flow rule can be created:: 2777 2778 flow validate {port_id} 2779 [group {group_id}] [priority {level}] [ingress] [egress] 2780 pattern {item} [/ {item} [...]] / end 2781 actions {action} [/ {action} [...]] / end 2782 2783- Create a flow rule:: 2784 2785 flow create {port_id} 2786 [group {group_id}] [priority {level}] [ingress] [egress] 2787 pattern {item} [/ {item} [...]] / end 2788 actions {action} [/ {action} [...]] / end 2789 2790- Destroy specific flow rules:: 2791 2792 flow destroy {port_id} rule {rule_id} [...] 2793 2794- Destroy all flow rules:: 2795 2796 flow flush {port_id} 2797 2798- Query an existing flow rule:: 2799 2800 flow query {port_id} {rule_id} {action} 2801 2802- List existing flow rules sorted by priority, filtered by group 2803 identifiers:: 2804 2805 flow list {port_id} [group {group_id}] [...] 2806 2807- Restrict ingress traffic to the defined flow rules:: 2808 2809 flow isolate {port_id} {boolean} 2810 2811Validating flow rules 2812~~~~~~~~~~~~~~~~~~~~~ 2813 2814``flow validate`` reports whether a flow rule would be accepted by the 2815underlying device in its current state but stops short of creating it. It is 2816bound to ``rte_flow_validate()``:: 2817 2818 flow validate {port_id} 2819 [group {group_id}] [priority {level}] [ingress] [egress] 2820 pattern {item} [/ {item} [...]] / end 2821 actions {action} [/ {action} [...]] / end 2822 2823If successful, it will show:: 2824 2825 Flow rule validated 2826 2827Otherwise it will show an error message of the form:: 2828 2829 Caught error type [...] ([...]): [...] 2830 2831This command uses the same parameters as ``flow create``, their format is 2832described in `Creating flow rules`_. 2833 2834Check whether redirecting any Ethernet packet received on port 0 to RX queue 2835index 6 is supported:: 2836 2837 testpmd> flow validate 0 ingress pattern eth / end 2838 actions queue index 6 / end 2839 Flow rule validated 2840 testpmd> 2841 2842Port 0 does not support TCPv6 rules:: 2843 2844 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end 2845 actions drop / end 2846 Caught error type 9 (specific pattern item): Invalid argument 2847 testpmd> 2848 2849Creating flow rules 2850~~~~~~~~~~~~~~~~~~~ 2851 2852``flow create`` validates and creates the specified flow rule. It is bound 2853to ``rte_flow_create()``:: 2854 2855 flow create {port_id} 2856 [group {group_id}] [priority {level}] [ingress] [egress] 2857 pattern {item} [/ {item} [...]] / end 2858 actions {action} [/ {action} [...]] / end 2859 2860If successful, it will return a flow rule ID usable with other commands:: 2861 2862 Flow rule #[...] created 2863 2864Otherwise it will show an error message of the form:: 2865 2866 Caught error type [...] ([...]): [...] 2867 2868Parameters describe in the following order: 2869 2870- Attributes (*group*, *priority*, *ingress*, *egress* tokens). 2871- A matching pattern, starting with the *pattern* token and terminated by an 2872 *end* pattern item. 2873- Actions, starting with the *actions* token and terminated by an *end* 2874 action. 2875 2876These translate directly to *rte_flow* objects provided as-is to the 2877underlying functions. 2878 2879The shortest valid definition only comprises mandatory tokens:: 2880 2881 testpmd> flow create 0 pattern end actions end 2882 2883Note that PMDs may refuse rules that essentially do nothing such as this 2884one. 2885 2886**All unspecified object values are automatically initialized to 0.** 2887 2888Attributes 2889^^^^^^^^^^ 2890 2891These tokens affect flow rule attributes (``struct rte_flow_attr``) and are 2892specified before the ``pattern`` token. 2893 2894- ``group {group id}``: priority group. 2895- ``priority {level}``: priority level within group. 2896- ``ingress``: rule applies to ingress traffic. 2897- ``egress``: rule applies to egress traffic. 2898 2899Each instance of an attribute specified several times overrides the previous 2900value as shown below (group 4 is used):: 2901 2902 testpmd> flow create 0 group 42 group 24 group 4 [...] 2903 2904Note that once enabled, ``ingress`` and ``egress`` cannot be disabled. 2905 2906While not specifying a direction is an error, some rules may allow both 2907simultaneously. 2908 2909Most rules affect RX therefore contain the ``ingress`` token:: 2910 2911 testpmd> flow create 0 ingress pattern [...] 2912 2913Matching pattern 2914^^^^^^^^^^^^^^^^ 2915 2916A matching pattern starts after the ``pattern`` token. It is made of pattern 2917items and is terminated by a mandatory ``end`` item. 2918 2919Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum 2920rte_flow_item_type``). 2921 2922The ``/`` token is used as a separator between pattern items as shown 2923below:: 2924 2925 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...] 2926 2927Note that protocol items like these must be stacked from lowest to highest 2928layer to make sense. For instance, the following rule is either invalid or 2929unlikely to match any packet:: 2930 2931 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...] 2932 2933More information on these restrictions can be found in the *rte_flow* 2934documentation. 2935 2936Several items support additional specification structures, for example 2937``ipv4`` allows specifying source and destination addresses as follows:: 2938 2939 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1 2940 dst is 10.2.0.0 / end [...] 2941 2942This rule matches all IPv4 traffic with the specified properties. 2943 2944In this example, ``src`` and ``dst`` are field names of the underlying 2945``struct rte_flow_item_ipv4`` object. All item properties can be specified 2946in a similar fashion. 2947 2948The ``is`` token means that the subsequent value must be matched exactly, 2949and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item`` 2950accordingly. Possible assignment tokens are: 2951 2952- ``is``: match value perfectly (with full bit-mask). 2953- ``spec``: match value according to configured bit-mask. 2954- ``last``: specify upper bound to establish a range. 2955- ``mask``: specify bit-mask with relevant bits set to one. 2956- ``prefix``: generate bit-mask from a prefix length. 2957 2958These yield identical results:: 2959 2960 ipv4 src is 10.1.1.1 2961 2962:: 2963 2964 ipv4 src spec 10.1.1.1 src mask 255.255.255.255 2965 2966:: 2967 2968 ipv4 src spec 10.1.1.1 src prefix 32 2969 2970:: 2971 2972 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value 2973 2974:: 2975 2976 ipv4 src is 10.1.1.1 src last 0 # 0 disables range 2977 2978Inclusive ranges can be defined with ``last``:: 2979 2980 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4 2981 2982Note that ``mask`` affects both ``spec`` and ``last``:: 2983 2984 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0 2985 # matches 10.1.0.0 to 10.2.255.255 2986 2987Properties can be modified multiple times:: 2988 2989 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4 2990 2991:: 2992 2993 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16 2994 2995Pattern items 2996^^^^^^^^^^^^^ 2997 2998This section lists supported pattern items and their attributes, if any. 2999 3000- ``end``: end list of pattern items. 3001 3002- ``void``: no-op pattern item. 3003 3004- ``invert``: perform actions when pattern does not match. 3005 3006- ``any``: match any protocol for the current layer. 3007 3008 - ``num {unsigned}``: number of layers covered. 3009 3010- ``pf``: match packets addressed to the physical function. 3011 3012- ``vf``: match packets addressed to a virtual function ID. 3013 3014 - ``id {unsigned}``: destination VF ID. 3015 3016- ``port``: device-specific physical port index to use. 3017 3018 - ``index {unsigned}``: physical port index. 3019 3020- ``raw``: match an arbitrary byte string. 3021 3022 - ``relative {boolean}``: look for pattern after the previous item. 3023 - ``search {boolean}``: search pattern from offset (see also limit). 3024 - ``offset {integer}``: absolute or relative offset for pattern. 3025 - ``limit {unsigned}``: search area limit for start of pattern. 3026 - ``pattern {string}``: byte string to look for. 3027 3028- ``eth``: match Ethernet header. 3029 3030 - ``dst {MAC-48}``: destination MAC. 3031 - ``src {MAC-48}``: source MAC. 3032 - ``type {unsigned}``: EtherType. 3033 3034- ``vlan``: match 802.1Q/ad VLAN tag. 3035 3036 - ``tpid {unsigned}``: tag protocol identifier. 3037 - ``tci {unsigned}``: tag control information. 3038 - ``pcp {unsigned}``: priority code point. 3039 - ``dei {unsigned}``: drop eligible indicator. 3040 - ``vid {unsigned}``: VLAN identifier. 3041 3042- ``ipv4``: match IPv4 header. 3043 3044 - ``tos {unsigned}``: type of service. 3045 - ``ttl {unsigned}``: time to live. 3046 - ``proto {unsigned}``: next protocol ID. 3047 - ``src {ipv4 address}``: source address. 3048 - ``dst {ipv4 address}``: destination address. 3049 3050- ``ipv6``: match IPv6 header. 3051 3052 - ``tc {unsigned}``: traffic class. 3053 - ``flow {unsigned}``: flow label. 3054 - ``proto {unsigned}``: protocol (next header). 3055 - ``hop {unsigned}``: hop limit. 3056 - ``src {ipv6 address}``: source address. 3057 - ``dst {ipv6 address}``: destination address. 3058 3059- ``icmp``: match ICMP header. 3060 3061 - ``type {unsigned}``: ICMP packet type. 3062 - ``code {unsigned}``: ICMP packet code. 3063 3064- ``udp``: match UDP header. 3065 3066 - ``src {unsigned}``: UDP source port. 3067 - ``dst {unsigned}``: UDP destination port. 3068 3069- ``tcp``: match TCP header. 3070 3071 - ``src {unsigned}``: TCP source port. 3072 - ``dst {unsigned}``: TCP destination port. 3073 3074- ``sctp``: match SCTP header. 3075 3076 - ``src {unsigned}``: SCTP source port. 3077 - ``dst {unsigned}``: SCTP destination port. 3078 - ``tag {unsigned}``: validation tag. 3079 - ``cksum {unsigned}``: checksum. 3080 3081- ``vxlan``: match VXLAN header. 3082 3083 - ``vni {unsigned}``: VXLAN identifier. 3084 3085- ``e_tag``: match IEEE 802.1BR E-Tag header. 3086 3087 - ``grp_ecid_b {unsigned}``: GRP and E-CID base. 3088 3089- ``nvgre``: match NVGRE header. 3090 3091 - ``tni {unsigned}``: virtual subnet ID. 3092 3093- ``mpls``: match MPLS header. 3094 3095 - ``label {unsigned}``: MPLS label. 3096 3097- ``gre``: match GRE header. 3098 3099 - ``protocol {unsigned}``: protocol type. 3100 3101- ``fuzzy``: fuzzy pattern match, expect faster than default. 3102 3103 - ``thresh {unsigned}``: accuracy threshold. 3104 3105- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header. 3106 3107 - ``teid {unsigned}``: tunnel endpoint identifier. 3108 3109Actions list 3110^^^^^^^^^^^^ 3111 3112A list of actions starts after the ``actions`` token in the same fashion as 3113`Matching pattern`_; actions are separated by ``/`` tokens and the list is 3114terminated by a mandatory ``end`` action. 3115 3116Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum 3117rte_flow_action_type``). 3118 3119Dropping all incoming UDPv4 packets can be expressed as follows:: 3120 3121 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 3122 actions drop / end 3123 3124Several actions have configurable properties which must be specified when 3125there is no valid default value. For example, ``queue`` requires a target 3126queue index. 3127 3128This rule redirects incoming UDPv4 traffic to queue index 6:: 3129 3130 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 3131 actions queue index 6 / end 3132 3133While this one could be rejected by PMDs (unspecified queue index):: 3134 3135 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 3136 actions queue / end 3137 3138As defined by *rte_flow*, the list is not ordered, all actions of a given 3139rule are performed simultaneously. These are equivalent:: 3140 3141 queue index 6 / void / mark id 42 / end 3142 3143:: 3144 3145 void / mark id 42 / queue index 6 / end 3146 3147All actions in a list should have different types, otherwise only the last 3148action of a given type is taken into account:: 3149 3150 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6 3151 3152:: 3153 3154 drop / drop / drop / end # drop is performed only once 3155 3156:: 3157 3158 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24 3159 3160Considering they are performed simultaneously, opposite and overlapping 3161actions can sometimes be combined when the end result is unambiguous:: 3162 3163 drop / queue index 6 / end # drop has no effect 3164 3165:: 3166 3167 drop / dup index 6 / end # same as above 3168 3169:: 3170 3171 queue index 6 / rss queues 6 7 8 / end # queue has no effect 3172 3173:: 3174 3175 drop / passthru / end # drop has no effect 3176 3177Note that PMDs may still refuse such combinations. 3178 3179Actions 3180^^^^^^^ 3181 3182This section lists supported actions and their attributes, if any. 3183 3184- ``end``: end list of actions. 3185 3186- ``void``: no-op action. 3187 3188- ``passthru``: let subsequent rule process matched packets. 3189 3190- ``mark``: attach 32 bit value to packets. 3191 3192 - ``id {unsigned}``: 32 bit value to return with packets. 3193 3194- ``flag``: flag packets. 3195 3196- ``queue``: assign packets to a given queue index. 3197 3198 - ``index {unsigned}``: queue index to use. 3199 3200- ``drop``: drop packets (note: passthru has priority). 3201 3202- ``count``: enable counters for this rule. 3203 3204- ``dup``: duplicate packets to a given queue index. 3205 3206 - ``index {unsigned}``: queue index to duplicate packets to. 3207 3208- ``rss``: spread packets among several queues. 3209 3210 - ``queues [{unsigned} [...]] end``: queue indices to use. 3211 3212- ``pf``: redirect packets to physical device function. 3213 3214- ``vf``: redirect packets to virtual device function. 3215 3216 - ``original {boolean}``: use original VF ID if possible. 3217 - ``id {unsigned}``: VF ID to redirect packets to. 3218 3219Destroying flow rules 3220~~~~~~~~~~~~~~~~~~~~~ 3221 3222``flow destroy`` destroys one or more rules from their rule ID (as returned 3223by ``flow create``), this command calls ``rte_flow_destroy()`` as many 3224times as necessary:: 3225 3226 flow destroy {port_id} rule {rule_id} [...] 3227 3228If successful, it will show:: 3229 3230 Flow rule #[...] destroyed 3231 3232It does not report anything for rule IDs that do not exist. The usual error 3233message is shown when a rule cannot be destroyed:: 3234 3235 Caught error type [...] ([...]): [...] 3236 3237``flow flush`` destroys all rules on a device and does not take extra 3238arguments. It is bound to ``rte_flow_flush()``:: 3239 3240 flow flush {port_id} 3241 3242Any errors are reported as above. 3243 3244Creating several rules and destroying them:: 3245 3246 testpmd> flow create 0 ingress pattern eth / ipv6 / end 3247 actions queue index 2 / end 3248 Flow rule #0 created 3249 testpmd> flow create 0 ingress pattern eth / ipv4 / end 3250 actions queue index 3 / end 3251 Flow rule #1 created 3252 testpmd> flow destroy 0 rule 0 rule 1 3253 Flow rule #1 destroyed 3254 Flow rule #0 destroyed 3255 testpmd> 3256 3257The same result can be achieved using ``flow flush``:: 3258 3259 testpmd> flow create 0 ingress pattern eth / ipv6 / end 3260 actions queue index 2 / end 3261 Flow rule #0 created 3262 testpmd> flow create 0 ingress pattern eth / ipv4 / end 3263 actions queue index 3 / end 3264 Flow rule #1 created 3265 testpmd> flow flush 0 3266 testpmd> 3267 3268Non-existent rule IDs are ignored:: 3269 3270 testpmd> flow create 0 ingress pattern eth / ipv6 / end 3271 actions queue index 2 / end 3272 Flow rule #0 created 3273 testpmd> flow create 0 ingress pattern eth / ipv4 / end 3274 actions queue index 3 / end 3275 Flow rule #1 created 3276 testpmd> flow destroy 0 rule 42 rule 10 rule 2 3277 testpmd> 3278 testpmd> flow destroy 0 rule 0 3279 Flow rule #0 destroyed 3280 testpmd> 3281 3282Querying flow rules 3283~~~~~~~~~~~~~~~~~~~ 3284 3285``flow query`` queries a specific action of a flow rule having that 3286ability. Such actions collect information that can be reported using this 3287command. It is bound to ``rte_flow_query()``:: 3288 3289 flow query {port_id} {rule_id} {action} 3290 3291If successful, it will display either the retrieved data for known actions 3292or the following message:: 3293 3294 Cannot display result for action type [...] ([...]) 3295 3296Otherwise, it will complain either that the rule does not exist or that some 3297error occurred:: 3298 3299 Flow rule #[...] not found 3300 3301:: 3302 3303 Caught error type [...] ([...]): [...] 3304 3305Currently only the ``count`` action is supported. This action reports the 3306number of packets that hit the flow rule and the total number of bytes. Its 3307output has the following format:: 3308 3309 count: 3310 hits_set: [...] # whether "hits" contains a valid value 3311 bytes_set: [...] # whether "bytes" contains a valid value 3312 hits: [...] # number of packets 3313 bytes: [...] # number of bytes 3314 3315Querying counters for TCPv6 packets redirected to queue 6:: 3316 3317 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end 3318 actions queue index 6 / count / end 3319 Flow rule #4 created 3320 testpmd> flow query 0 4 count 3321 count: 3322 hits_set: 1 3323 bytes_set: 0 3324 hits: 386446 3325 bytes: 0 3326 testpmd> 3327 3328Listing flow rules 3329~~~~~~~~~~~~~~~~~~ 3330 3331``flow list`` lists existing flow rules sorted by priority and optionally 3332filtered by group identifiers:: 3333 3334 flow list {port_id} [group {group_id}] [...] 3335 3336This command only fails with the following message if the device does not 3337exist:: 3338 3339 Invalid port [...] 3340 3341Output consists of a header line followed by a short description of each 3342flow rule, one per line. There is no output at all when no flow rules are 3343configured on the device:: 3344 3345 ID Group Prio Attr Rule 3346 [...] [...] [...] [...] [...] 3347 3348``Attr`` column flags: 3349 3350- ``i`` for ``ingress``. 3351- ``e`` for ``egress``. 3352 3353Creating several flow rules and listing them:: 3354 3355 testpmd> flow create 0 ingress pattern eth / ipv4 / end 3356 actions queue index 6 / end 3357 Flow rule #0 created 3358 testpmd> flow create 0 ingress pattern eth / ipv6 / end 3359 actions queue index 2 / end 3360 Flow rule #1 created 3361 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end 3362 actions rss queues 6 7 8 end / end 3363 Flow rule #2 created 3364 testpmd> flow list 0 3365 ID Group Prio Attr Rule 3366 0 0 0 i- ETH IPV4 => QUEUE 3367 1 0 0 i- ETH IPV6 => QUEUE 3368 2 0 5 i- ETH IPV4 UDP => RSS 3369 testpmd> 3370 3371Rules are sorted by priority (i.e. group ID first, then priority level):: 3372 3373 testpmd> flow list 1 3374 ID Group Prio Attr Rule 3375 0 0 0 i- ETH => COUNT 3376 6 0 500 i- ETH IPV6 TCP => DROP COUNT 3377 5 0 1000 i- ETH IPV6 ICMP => QUEUE 3378 1 24 0 i- ETH IPV4 UDP => QUEUE 3379 4 24 10 i- ETH IPV4 TCP => DROP 3380 3 24 20 i- ETH IPV4 => DROP 3381 2 24 42 i- ETH IPV4 UDP => QUEUE 3382 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE 3383 testpmd> 3384 3385Output can be limited to specific groups:: 3386 3387 testpmd> flow list 1 group 0 group 63 3388 ID Group Prio Attr Rule 3389 0 0 0 i- ETH => COUNT 3390 6 0 500 i- ETH IPV6 TCP => DROP COUNT 3391 5 0 1000 i- ETH IPV6 ICMP => QUEUE 3392 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE 3393 testpmd> 3394 3395Toggling isolated mode 3396~~~~~~~~~~~~~~~~~~~~~~ 3397 3398``flow isolate`` can be used to tell the underlying PMD that ingress traffic 3399must only be injected from the defined flow rules; that no default traffic 3400is expected outside those rules and the driver is free to assign more 3401resources to handle them. It is bound to ``rte_flow_isolate()``:: 3402 3403 flow isolate {port_id} {boolean} 3404 3405If successful, enabling or disabling isolated mode shows either:: 3406 3407 Ingress traffic on port [...] 3408 is now restricted to the defined flow rules 3409 3410Or:: 3411 3412 Ingress traffic on port [...] 3413 is not restricted anymore to the defined flow rules 3414 3415Otherwise, in case of error:: 3416 3417 Caught error type [...] ([...]): [...] 3418 3419Mainly due to its side effects, PMDs supporting this mode may not have the 3420ability to toggle it more than once without reinitializing affected ports 3421first (e.g. by exiting testpmd). 3422 3423Enabling isolated mode:: 3424 3425 testpmd> flow isolate 0 true 3426 Ingress traffic on port 0 is now restricted to the defined flow rules 3427 testpmd> 3428 3429Disabling isolated mode:: 3430 3431 testpmd> flow isolate 0 false 3432 Ingress traffic on port 0 is not restricted anymore to the defined flow rules 3433 testpmd> 3434 3435Sample QinQ flow rules 3436~~~~~~~~~~~~~~~~~~~~~~ 3437 3438Before creating QinQ rule(s) the following commands should be issued to enable QinQ:: 3439 3440 testpmd> port stop 0 3441 testpmd> vlan set qinq on 0 3442 3443The above command sets the inner and outer TPID's to 0x8100. 3444 3445To change the TPID's the following commands should be used:: 3446 3447 testpmd> vlan set outer tpid 0xa100 0 3448 testpmd> vlan set inner tpid 0x9100 0 3449 testpmd> port start 0 3450 3451Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM. 3452 3453:: 3454 3455 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 / 3456 vlan tci is 456 / end actions vf id 1 / queue index 0 / end 3457 Flow rule #0 validated 3458 3459 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 / 3460 vlan tci is 456 / end actions vf id 123 / queue index 0 / end 3461 Flow rule #0 created 3462 3463 testpmd> flow list 0 3464 ID Group Prio Attr Rule 3465 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 3466 3467Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host. 3468 3469:: 3470 3471 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 / 3472 vlan tci is 654 / end actions pf / queue index 0 / end 3473 Flow rule #1 validated 3474 3475 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 / 3476 vlan tci is 654 / end actions pf / queue index 1 / end 3477 Flow rule #1 created 3478 3479 testpmd> flow list 0 3480 ID Group Prio Attr Rule 3481 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 3482 1 0 0 i- ETH VLAN VLAN=>PF QUEUE 3483