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