1.. BSD LICENSE 2 Copyright(c) 2010-2015 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, set the Flow Director and other tasks:: 39 40 testpmd> 41 42The testpmd prompt has some, limited, readline support. 43Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported 44as well as access to the command history via the up-arrow. 45 46There is also support for tab completion. 47If you type a partial command and hit ``<TAB>`` you get a list of the available completions: 48 49.. code-block:: console 50 51 testpmd> show port <TAB> 52 53 info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc X 54 info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc all 55 stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc X 56 stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap|dcb_tc all 57 ... 58 59 60.. note:: 61 62 Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes:: 63 64 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 65 (pause_time) (send_xon) (port_id) 66 67In the real ``testpmd>`` prompt these commands should be on a single line. 68 69Help Functions 70-------------- 71 72The testpmd has on-line help for the functions that are available at runtime. 73These are divided into sections and can be accessed using help, help section or help all: 74 75.. code-block:: console 76 77 testpmd> help 78 79 help control : Start and stop forwarding. 80 help display : Displaying port, stats and config information. 81 help config : Configuration information. 82 help ports : Configuring ports. 83 help registers : Reading and setting port registers. 84 help filters : Filters configuration help. 85 help all : All of the above sections. 86 87 88Control Functions 89----------------- 90 91start 92~~~~~ 93 94Start packet forwarding with current configuration:: 95 96 testpmd> start 97 98start tx_first 99~~~~~~~~~~~~~~ 100 101Start packet forwarding with current configuration after sending specified number of bursts of packets:: 102 103 testpmd> start tx_first (""|burst_num) 104 105The default burst number is 1 when ``burst_num`` not presented. 106 107stop 108~~~~ 109 110Stop packet forwarding, and display accumulated statistics:: 111 112 testpmd> stop 113 114quit 115~~~~ 116 117Quit to prompt:: 118 119 testpmd> quit 120 121 122Display Functions 123----------------- 124 125The functions in the following sections are used to display information about the 126testpmd configuration or the NIC status. 127 128show port 129~~~~~~~~~ 130 131Display information for a given port or all ports:: 132 133 testpmd> show port (info|stats|fdir|stat_qmap|dcb_tc) (port_id|all) 134 135The available information categories are: 136 137* ``info``: General port information such as MAC address. 138 139* ``stats``: RX/TX statistics. 140 141* ``fdir``: Flow Director information and statistics. 142 143* ``stat_qmap``: Queue statistics mapping. 144 145* ``dcb_tc``: DCB information such as TC mapping. 146 147For example: 148 149.. code-block:: console 150 151 testpmd> show port info 0 152 153 ********************* Infos for port 0 ********************* 154 155 MAC address: XX:XX:XX:XX:XX:XX 156 Connect to socket: 0 157 memory allocation on the socket: 0 158 Link status: up 159 Link speed: 40000 Mbps 160 Link duplex: full-duplex 161 Promiscuous mode: enabled 162 Allmulticast mode: disabled 163 Maximum number of MAC addresses: 64 164 Maximum number of MAC addresses of hash filtering: 0 165 VLAN offload: 166 strip on 167 filter on 168 qinq(extend) off 169 Redirection table size: 512 170 Supported flow types: 171 ipv4-frag 172 ipv4-tcp 173 ipv4-udp 174 ipv4-sctp 175 ipv4-other 176 ipv6-frag 177 ipv6-tcp 178 ipv6-udp 179 ipv6-sctp 180 ipv6-other 181 l2_payload 182 183show port rss reta 184~~~~~~~~~~~~~~~~~~ 185 186Display the rss redirection table entry indicated by masks on port X:: 187 188 testpmd> show port (port_id) rss reta (size) (mask0, mask1...) 189 190size is used to indicate the hardware supported reta size 191 192show port rss-hash 193~~~~~~~~~~~~~~~~~~ 194 195Display the RSS hash functions and RSS hash key of a port:: 196 197 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] 198 199clear port 200~~~~~~~~~~ 201 202Clear the port statistics for a given port or for all ports:: 203 204 testpmd> clear port (info|stats|fdir|stat_qmap) (port_id|all) 205 206For example:: 207 208 testpmd> clear port stats all 209 210show (rxq|txq) 211~~~~~~~~~~~~~~ 212 213Display information for a given port's RX/TX queue:: 214 215 testpmd> show (rxq|txq) info (port_id) (queue_id) 216 217show config 218~~~~~~~~~~~ 219 220Displays the configuration of the application. 221The configuration comes from the command-line, the runtime or the application defaults:: 222 223 testpmd> show config (rxtx|cores|fwd|txpkts) 224 225The available information categories are: 226 227* ``rxtx``: RX/TX configuration items. 228 229* ``cores``: List of forwarding cores. 230 231* ``fwd``: Packet forwarding configuration. 232 233* ``txpkts``: Packets to TX configuration. 234 235For example: 236 237.. code-block:: console 238 239 testpmd> show config rxtx 240 241 io packet forwarding - CRC stripping disabled - packets/burst=16 242 nb forwarding cores=2 - nb forwarding ports=1 243 RX queues=1 - RX desc=128 - RX free threshold=0 244 RX threshold registers: pthresh=8 hthresh=8 wthresh=4 245 TX queues=1 - TX desc=512 - TX free threshold=0 246 TX threshold registers: pthresh=36 hthresh=0 wthresh=0 247 TX RS bit threshold=0 - TXQ flags=0x0 248 249set fwd 250~~~~~~~ 251 252Set the packet forwarding mode:: 253 254 testpmd> set fwd (io|mac|macswap|flowgen| \ 255 rxonly|txonly|csum|icmpecho) (""|retry) 256 257``retry`` can be specified for forwarding engines except ``rx_only``. 258 259The available information categories are: 260 261* ``io``: Forwards packets "as-is" in I/O mode. 262 This is the fastest possible forwarding operation as it does not access packets data. 263 This is the default mode. 264 265* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them. 266 267* ``macswap``: MAC swap forwarding mode. 268 Swaps the source and the destination Ethernet addresses of packets before forwarding them. 269 270* ``flowgen``: Multi-flow generation mode. 271 Originates a number of flows (with varying destination IP addresses), and terminate receive traffic. 272 273* ``rxonly``: Receives packets but doesn't transmit them. 274 275* ``txonly``: Generates and transmits packets without receiving any. 276 277* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet. 278 279* ``icmpecho``: Receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies. 280 281* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``. 282 283Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``. 284 285Example:: 286 287 testpmd> set fwd rxonly 288 289 Set rxonly packet forwarding mode 290 291 292read rxd 293~~~~~~~~ 294 295Display an RX descriptor for a port RX queue:: 296 297 testpmd> read rxd (port_id) (queue_id) (rxd_id) 298 299For example:: 300 301 testpmd> read rxd 0 0 4 302 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180 303 304read txd 305~~~~~~~~ 306 307Display a TX descriptor for a port TX queue:: 308 309 testpmd> read txd (port_id) (queue_id) (txd_id) 310 311For example:: 312 313 testpmd> read txd 0 0 4 314 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C 315 316 317Configuration Functions 318----------------------- 319 320The testpmd application can be configured from the runtime as well as from the command-line. 321 322This section details the available configuration functions that are available. 323 324.. note:: 325 326 Configuration changes only become active when forwarding is started/restarted. 327 328set default 329~~~~~~~~~~~ 330 331Reset forwarding to the default configuration:: 332 333 testpmd> set default 334 335set verbose 336~~~~~~~~~~~ 337 338Set the debug verbosity level:: 339 340 testpmd> set verbose (level) 341 342Currently the only available levels are 0 (silent except for error) and 1 (fully verbose). 343 344set nbport 345~~~~~~~~~~ 346 347Set the number of ports used by the application: 348 349set nbport (num) 350 351This is equivalent to the ``--nb-ports`` command-line option. 352 353set nbcore 354~~~~~~~~~~ 355 356Set the number of cores used by the application:: 357 358 testpmd> set nbcore (num) 359 360This is equivalent to the ``--nb-cores`` command-line option. 361 362.. note:: 363 364 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port. 365 366set coremask 367~~~~~~~~~~~~ 368 369Set the forwarding cores hexadecimal mask:: 370 371 testpmd> set coremask (mask) 372 373This is equivalent to the ``--coremask`` command-line option. 374 375.. note:: 376 377 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. 378 379set portmask 380~~~~~~~~~~~~ 381 382Set the forwarding ports hexadecimal mask:: 383 384 testpmd> set portmask (mask) 385 386This is equivalent to the ``--portmask`` command-line option. 387 388set burst 389~~~~~~~~~ 390 391Set number of packets per burst:: 392 393 testpmd> set burst (num) 394 395This is equivalent to the ``--burst command-line`` option. 396 397When retry is enabled, the transmit delay time and number of retries can also be set:: 398 399 testpmd> set burst tx delay (microseconds) retry (num) 400 401set txpkts 402~~~~~~~~~~ 403 404Set the length of each segment of the TX-ONLY packets:: 405 406 testpmd> set txpkts (x[,y]*) 407 408Where x[,y]* represents a CSV list of values, without white space. 409 410set txsplit 411~~~~~~~~~~~ 412 413Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes:: 414 415 testpmd> set txsplit (off|on|rand) 416 417Where: 418 419* ``off`` disable packet copy & split for CSUM mode. 420 421* ``on`` split outgoing packet into multiple segments. Size of each segment 422 and number of segments per packet is determined by ``set txpkts`` command 423 (see above). 424 425* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments. 426 427set corelist 428~~~~~~~~~~~~ 429 430Set the list of forwarding cores:: 431 432 testpmd> set corelist (x[,y]*) 433 434For example, to change the forwarding cores: 435 436.. code-block:: console 437 438 testpmd> set corelist 3,1 439 testpmd> show config fwd 440 441 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled 442 Logical Core 3 (socket 0) forwards packets on 1 streams: 443 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 444 Logical Core 1 (socket 0) forwards packets on 1 streams: 445 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 446 447.. note:: 448 449 The cores are used in the same order as specified on the command line. 450 451set portlist 452~~~~~~~~~~~~ 453 454Set the list of forwarding ports:: 455 456 testpmd> set portlist (x[,y]*) 457 458For example, to change the port forwarding: 459 460.. code-block:: console 461 462 testpmd> set portlist 0,2,1,3 463 testpmd> show config fwd 464 465 io packet forwarding - ports=4 - cores=1 - streams=4 466 Logical Core 3 (socket 0) forwards packets on 4 streams: 467 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01 468 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 469 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03 470 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02 471 472vlan set strip 473~~~~~~~~~~~~~~ 474 475Set the VLAN strip on a port:: 476 477 testpmd> vlan set strip (on|off) (port_id) 478 479vlan set stripq 480~~~~~~~~~~~~~~~ 481 482Set the VLAN strip for a queue on a port:: 483 484 testpmd> vlan set stripq (on|off) (port_id,queue_id) 485 486vlan set filter 487~~~~~~~~~~~~~~~ 488 489Set the VLAN filter on a port:: 490 491 testpmd> vlan set filter (on|off) (port_id) 492 493vlan set qinq 494~~~~~~~~~~~~~ 495 496Set the VLAN QinQ (extended queue in queue) on for a port:: 497 498 testpmd> vlan set qinq (on|off) (port_id) 499 500vlan set tpid 501~~~~~~~~~~~~~ 502 503Set the inner or outer VLAN TPID for packet filtering on a port:: 504 505 testpmd> vlan set (inner|outer) tpid (value) (port_id) 506 507.. note:: 508 509 TPID value must be a 16-bit number (value <= 65536). 510 511rx_vlan add 512~~~~~~~~~~~ 513 514Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID:: 515 516 testpmd> rx_vlan add (vlan_id|all) (port_id) 517 518.. note:: 519 520 VLAN filter must be set on that port. VLAN ID < 4096. 521 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries 522 in VFTA table. This is important if enabling all vlan_ids. 523 524rx_vlan rm 525~~~~~~~~~~ 526 527Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID:: 528 529 testpmd> rx_vlan rm (vlan_id|all) (port_id) 530 531rx_vlan add (for VF) 532~~~~~~~~~~~~~~~~~~~~ 533 534Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID:: 535 536 testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask) 537 538rx_vlan rm (for VF) 539~~~~~~~~~~~~~~~~~~~ 540 541Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID:: 542 543 testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) 544 545tunnel_filter add 546~~~~~~~~~~~~~~~~~ 547 548Add a tunnel filter on a port:: 549 550 testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \ 551 (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\ 552 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id) 553 554The available information categories are: 555 556* ``vxlan``: Set tunnel type as VXLAN. 557 558* ``nvgre``: Set tunnel type as NVGRE. 559 560* ``ipingre``: Set tunnel type as IP-in-GRE. 561 562* ``imac-ivlan``: Set filter type as Inner MAC and VLAN. 563 564* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID. 565 566* ``imac-tenid``: Set filter type as Inner MAC and tenant ID. 567 568* ``imac``: Set filter type as Inner MAC. 569 570* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID. 571 572* ``oip``: Set filter type as Outer IP. 573 574* ``iip``: Set filter type as Inner IP. 575 576Example:: 577 578 testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \ 579 192.168.2.2 0 ipingre oip 1 1 580 581 Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP. 582 583tunnel_filter remove 584~~~~~~~~~~~~~~~~~~~~ 585 586Remove a tunnel filter on a port:: 587 588 testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \ 589 (inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|\ 590 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id) 591 592rx_vxlan_port add 593~~~~~~~~~~~~~~~~~ 594 595Add an UDP port for VXLAN packet filter on a port:: 596 597 testpmd> rx_vxlan_port add (udp_port) (port_id) 598 599rx_vxlan_port remove 600~~~~~~~~~~~~~~~~~~~~ 601 602Remove an UDP port for VXLAN packet filter on a port:: 603 604 testpmd> rx_vxlan_port rm (udp_port) (port_id) 605 606tx_vlan set 607~~~~~~~~~~~ 608 609Set hardware insertion of VLAN IDs in packets sent on a port:: 610 611 testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer] 612 613For example, set a single VLAN ID (5) insertion on port 0:: 614 615 tx_vlan set 0 5 616 617Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1:: 618 619 tx_vlan set 1 2 3 620 621 622tx_vlan set pvid 623~~~~~~~~~~~~~~~~ 624 625Set port based hardware insertion of VLAN ID in packets sent on a port:: 626 627 testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off) 628 629tx_vlan reset 630~~~~~~~~~~~~~ 631 632Disable hardware insertion of a VLAN header in packets sent on a port:: 633 634 testpmd> tx_vlan reset (port_id) 635 636csum set 637~~~~~~~~ 638 639Select hardware or software calculation of the checksum when 640transmitting a packet using the ``csum`` forwarding engine:: 641 642 testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id) 643 644Where: 645 646* ``ip|udp|tcp|sctp`` always relate to the inner layer. 647 648* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized 649 as a tunnel packet by the forwarding engine (vxlan, gre and ipip are 650 supported). See also the ``csum parse-tunnel`` command. 651 652.. note:: 653 654 Check the NIC Datasheet for hardware limits. 655 656csum parse-tunnel 657~~~~~~~~~~~~~~~~~ 658 659Define how tunneled packets should be handled by the csum forward 660engine:: 661 662 testpmd> csum parse-tunnel (on|off) (tx_port_id) 663 664If enabled, the csum forward engine will try to recognize supported 665tunnel headers (vxlan, gre, ipip). 666 667If disabled, treat tunnel packets as non-tunneled packets (a inner 668header is handled as a packet payload). 669 670.. note:: 671 672 The port argument is the TX port like in the ``csum set`` command. 673 674Example: 675 676Consider a packet in packet like the following:: 677 678 eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in 679 680* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` 681 command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the 682 ``outer-ip parameter`` relates to the outer headers (here ``ipv4_out``). 683 684* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` 685 command relate to the outer headers, here ``ipv4_out`` and ``udp_out``. 686 687csum show 688~~~~~~~~~ 689 690Display tx checksum offload configuration:: 691 692 testpmd> csum show (port_id) 693 694tso set 695~~~~~~~ 696 697Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine:: 698 699 testpmd> tso set (segsize) (port_id) 700 701.. note:: 702 703 Check the NIC datasheet for hardware limits. 704 705tso show 706~~~~~~~~ 707 708Display the status of TCP Segmentation Offload:: 709 710 testpmd> tso show (port_id) 711 712mac_addr add 713~~~~~~~~~~~~ 714 715Add an alternative MAC address to a port:: 716 717 testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX) 718 719mac_addr remove 720~~~~~~~~~~~~~~~ 721 722Remove a MAC address from a port:: 723 724 testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX) 725 726mac_addr add(for VF) 727~~~~~~~~~~~~~~~~~~~~ 728 729Add an alternative MAC address for a VF to a port:: 730 731 testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX) 732 733set port-uta 734~~~~~~~~~~~~ 735 736Set the unicast hash filter(s) on/off for a port:: 737 738 testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off) 739 740set promisc 741~~~~~~~~~~~ 742 743Set the promiscuous mode on for a port or for all ports. 744In promiscuous mode packets are not dropped if they aren't for the specified MAC address:: 745 746 testpmd> set promisc (port_id|all) (on|off) 747 748set allmulti 749~~~~~~~~~~~~ 750 751Set the allmulti mode for a port or for all ports:: 752 753 testpmd> set allmulti (port_id|all) (on|off) 754 755Same as the ifconfig (8) option. Controls how multicast packets are handled. 756 757set flow_ctrl rx 758~~~~~~~~~~~~~~~~ 759 760Set the link flow control parameter on a port:: 761 762 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 763 (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \ 764 autoneg (on|off) (port_id) 765 766Where: 767 768* ``high_water`` (integer): High threshold value to trigger XOFF. 769 770* ``low_water`` (integer): Low threshold value to trigger XON. 771 772* ``pause_time`` (integer): Pause quota in the Pause frame. 773 774* ``send_xon`` (0/1): Send XON frame. 775 776* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames. 777 778* ``autoneg``: Change the auto-negotiation para mete. 779 780set pfc_ctrl rx 781~~~~~~~~~~~~~~~ 782 783Set the priority flow control parameter on a port:: 784 785 testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 786 (pause_time) (priority) (port_id) 787 788Where: 789 790* ``high_water`` (integer): High threshold value. 791 792* ``low_water`` (integer): Low threshold value. 793 794* ``pause_time`` (integer): Pause quota in the Pause frame. 795 796* ``priority`` (0-7): VLAN User Priority. 797 798set stat_qmap 799~~~~~~~~~~~~~ 800 801Set statistics mapping (qmapping 0..15) for RX/TX queue on port:: 802 803 testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping) 804 805For example, to set rx queue 2 on port 0 to mapping 5:: 806 807 testpmd>set stat_qmap rx 0 2 5 808 809set port - rx/tx (for VF) 810~~~~~~~~~~~~~~~~~~~~~~~~~ 811 812Set VF receive/transmit from a port:: 813 814 testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off) 815 816set port - mac address filter (for VF) 817~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 818 819Add/Remove unicast or multicast MAC addr filter for a VF:: 820 821 testpmd> set port (port_id) vf (vf_id) (mac_addr) \ 822 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) 823 824set port - rx mode(for VF) 825~~~~~~~~~~~~~~~~~~~~~~~~~~ 826 827Set the VF receive mode of a port:: 828 829 testpmd> set port (port_id) vf (vf_id) \ 830 rxmode (AUPE|ROPE|BAM|MPE) (on|off) 831 832The available receive modes are: 833 834* ``AUPE``: Accepts untagged VLAN. 835 836* ``ROPE``: Accepts unicast hash. 837 838* ``BAM``: Accepts broadcast packets. 839 840* ``MPE``: Accepts all multicast packets. 841 842set port - tx_rate (for Queue) 843~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 844 845Set TX rate limitation for a queue on a port:: 846 847 testpmd> set port (port_id) queue (queue_id) rate (rate_value) 848 849set port - tx_rate (for VF) 850~~~~~~~~~~~~~~~~~~~~~~~~~~~ 851 852Set TX rate limitation for queues in VF on a port:: 853 854 testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) 855 856set port - mirror rule 857~~~~~~~~~~~~~~~~~~~~~~ 858 859Set pool or vlan type mirror rule for a port:: 860 861 testpmd> set port (port_id) mirror-rule (rule_id) \ 862 (pool-mirror-up|pool-mirror-down|vlan-mirror) \ 863 (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) 864 865Set link mirror rule for a port:: 866 867 testpmd> set port (port_id) mirror-rule (rule_id) \ 868 (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off) 869 870For example to enable mirror traffic with vlan 0,1 to pool 0:: 871 872 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on 873 874reset port - mirror rule 875~~~~~~~~~~~~~~~~~~~~~~~~ 876 877Reset a mirror rule for a port:: 878 879 testpmd> reset port (port_id) mirror-rule (rule_id) 880 881set flush_rx 882~~~~~~~~~~~~ 883 884Set the flush on RX streams before forwarding. 885The default is flush ``on``. 886Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams:: 887 888 testpmd> set flush_rx off 889 890set bypass mode 891~~~~~~~~~~~~~~~ 892 893Set the bypass mode for the lowest port on bypass enabled NIC:: 894 895 testpmd> set bypass mode (normal|bypass|isolate) (port_id) 896 897set bypass event 898~~~~~~~~~~~~~~~~ 899 900Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled:: 901 902 testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \ 903 mode (normal|bypass|isolate) (port_id) 904 905Where: 906 907* ``timeout``: Enable bypass after watchdog timeout. 908 909* ``os_on``: Enable bypass when OS/board is powered on. 910 911* ``os_off``: Enable bypass when OS/board is powered off. 912 913* ``power_on``: Enable bypass when power supply is turned on. 914 915* ``power_off``: Enable bypass when power supply is turned off. 916 917 918set bypass timeout 919~~~~~~~~~~~~~~~~~~ 920 921Set the bypass watchdog timeout to ``n`` seconds where 0 = instant:: 922 923 testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32) 924 925show bypass config 926~~~~~~~~~~~~~~~~~~ 927 928Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC:: 929 930 testpmd> show bypass config (port_id) 931 932set link up 933~~~~~~~~~~~ 934 935Set link up for a port:: 936 937 testpmd> set link-up port (port id) 938 939set link down 940~~~~~~~~~~~~~ 941 942Set link down for a port:: 943 944 testpmd> set link-down port (port id) 945 946E-tag set 947~~~~~~~~~ 948 949Enable E-tag insertion for a VF on a port:: 950 951 testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id) 952 953Disable E-tag insertion for a VF on a port:: 954 955 testpmd> E-tag set insertion off port (port_id) vf (vf_id) 956 957Enable/disable E-tag stripping on a port:: 958 959 testpmd> E-tag set stripping (on|off) port (port_id) 960 961Enable/disable E-tag based forwarding on a port:: 962 963 testpmd> E-tag set forwarding (on|off) port (port_id) 964 965Add an E-tag forwarding filter on a port:: 966 967 testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id) 968 969Delete an E-tag forwarding filter on a port:: 970 testpmd> E-tag set filter del e-tag-id (value) port (port_id) 971 972 973Port Functions 974-------------- 975 976The following sections show functions for configuring ports. 977 978.. note:: 979 980 Port configuration changes only become active when forwarding is started/restarted. 981 982port attach 983~~~~~~~~~~~ 984 985Attach a port specified by pci address or virtual device args:: 986 987 testpmd> port attach (identifier) 988 989To attach a new pci device, the device should be recognized by kernel first. 990Then it should be moved under DPDK management. 991Finally the port can be attached to testpmd. 992 993For example, to move a pci device using ixgbe under DPDK management: 994 995.. code-block:: console 996 997 # Check the status of the available devices. 998 ./tools/dpdk_nic_bind.py --status 999 1000 Network devices using DPDK-compatible driver 1001 ============================================ 1002 <none> 1003 1004 Network devices using kernel driver 1005 =================================== 1006 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused= 1007 1008 1009 # Bind the device to igb_uio. 1010 sudo ./tools/dpdk_nic_bind.py -b igb_uio 0000:0a:00.0 1011 1012 1013 # Recheck the status of the devices. 1014 ./tools/dpdk_nic_bind.py --status 1015 Network devices using DPDK-compatible driver 1016 ============================================ 1017 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused= 1018 1019To attach a port created by virtual device, above steps are not needed. 1020 1021For example, to attach a port whose pci address is 0000:0a:00.0. 1022 1023.. code-block:: console 1024 1025 testpmd> port attach 0000:0a:00.0 1026 Attaching a new port... 1027 EAL: PCI device 0000:0a:00.0 on NUMA socket -1 1028 EAL: probe driver: 8086:10fb rte_ixgbe_pmd 1029 EAL: PCI memory mapped at 0x7f83bfa00000 1030 EAL: PCI memory mapped at 0x7f83bfa80000 1031 PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5 1032 PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb 1033 Port 0 is attached. Now total ports is 1 1034 Done 1035 1036For example, to attach a port created by pcap PMD. 1037 1038.. code-block:: console 1039 1040 testpmd> port attach eth_pcap0 1041 Attaching a new port... 1042 PMD: Initializing pmd_pcap for eth_pcap0 1043 PMD: Creating pcap-backed ethdev on numa socket 0 1044 Port 0 is attached. Now total ports is 1 1045 Done 1046 1047In this case, identifier is ``eth_pcap0``. 1048This identifier format is the same as ``--vdev`` format of DPDK applications. 1049 1050For example, to re-attach a bonded port which has been previously detached, 1051the mode and slave parameters must be given. 1052 1053.. code-block:: console 1054 1055 testpmd> port attach eth_bond_0,mode=0,slave=1 1056 Attaching a new port... 1057 EAL: Initializing pmd_bond for eth_bond_0 1058 EAL: Create bonded device eth_bond_0 on port 0 in mode 0 on socket 0. 1059 Port 0 is attached. Now total ports is 1 1060 Done 1061 1062 1063port detach 1064~~~~~~~~~~~ 1065 1066Detach a specific port:: 1067 1068 testpmd> port detach (port_id) 1069 1070Before detaching a port, the port should be stopped and closed. 1071 1072For example, to detach a pci device port 0. 1073 1074.. code-block:: console 1075 1076 testpmd> port stop 0 1077 Stopping ports... 1078 Done 1079 testpmd> port close 0 1080 Closing ports... 1081 Done 1082 1083 testpmd> port detach 0 1084 Detaching a port... 1085 EAL: PCI device 0000:0a:00.0 on NUMA socket -1 1086 EAL: remove driver: 8086:10fb rte_ixgbe_pmd 1087 EAL: PCI memory unmapped at 0x7f83bfa00000 1088 EAL: PCI memory unmapped at 0x7f83bfa80000 1089 Done 1090 1091 1092For example, to detach a virtual device port 0. 1093 1094.. code-block:: console 1095 1096 testpmd> port stop 0 1097 Stopping ports... 1098 Done 1099 testpmd> port close 0 1100 Closing ports... 1101 Done 1102 1103 testpmd> port detach 0 1104 Detaching a port... 1105 PMD: Closing pcap ethdev on numa socket 0 1106 Port 'eth_pcap0' is detached. Now total ports is 0 1107 Done 1108 1109To remove a pci device completely from the system, first detach the port from testpmd. 1110Then the device should be moved under kernel management. 1111Finally the device can be removed using kernel pci hotplug functionality. 1112 1113For example, to move a pci device under kernel management: 1114 1115.. code-block:: console 1116 1117 sudo ./tools/dpdk_nic_bind.py -b ixgbe 0000:0a:00.0 1118 1119 ./tools/dpdk_nic_bind.py --status 1120 1121 Network devices using DPDK-compatible driver 1122 ============================================ 1123 <none> 1124 1125 Network devices using kernel driver 1126 =================================== 1127 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio 1128 1129To remove a port created by a virtual device, above steps are not needed. 1130 1131port start 1132~~~~~~~~~~ 1133 1134Start all ports or a specific port:: 1135 1136 testpmd> port start (port_id|all) 1137 1138port stop 1139~~~~~~~~~ 1140 1141Stop all ports or a specific port:: 1142 1143 testpmd> port stop (port_id|all) 1144 1145port close 1146~~~~~~~~~~ 1147 1148Close all ports or a specific port:: 1149 1150 testpmd> port close (port_id|all) 1151 1152port start/stop queue 1153~~~~~~~~~~~~~~~~~~~~~ 1154 1155Start/stop a rx/tx queue on a specific port:: 1156 1157 testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop) 1158 1159Only take effect when port is started. 1160 1161port config - speed 1162~~~~~~~~~~~~~~~~~~~ 1163 1164Set the speed and duplex mode for all ports or a specific port:: 1165 1166 testpmd> port config (port_id|all) speed (10|100|1000|10000|40000|100000|auto) \ 1167 duplex (half|full|auto) 1168 1169port config - queues/descriptors 1170~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1171 1172Set number of queues/descriptors for rxq, txq, rxd and txd:: 1173 1174 testpmd> port config all (rxq|txq|rxd|txd) (value) 1175 1176This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options. 1177 1178port config - max-pkt-len 1179~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 1181Set the maximum packet length:: 1182 1183 testpmd> port config all max-pkt-len (value) 1184 1185This is equivalent to the ``--max-pkt-len`` command-line option. 1186 1187port config - CRC Strip 1188~~~~~~~~~~~~~~~~~~~~~~~ 1189 1190Set hardware CRC stripping on or off for all ports:: 1191 1192 testpmd> port config all crc-strip (on|off) 1193 1194CRC stripping is off by default. 1195 1196The ``on`` option is equivalent to the ``--crc-strip`` command-line option. 1197 1198port config - scatter 1199~~~~~~~~~~~~~~~~~~~~~~~ 1200 1201Set RX scatter mode on or off for all ports:: 1202 1203 testpmd> port config all scatter (on|off) 1204 1205RX scatter mode is off by default. 1206 1207The ``on`` option is equivalent to the ``--enable-scatter`` command-line option. 1208 1209port config - TX queue flags 1210~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 1212Set a hexadecimal bitmap of TX queue flags for all ports:: 1213 1214 testpmd> port config all txqflags value 1215 1216This command is equivalent to the ``--txqflags`` command-line option. 1217 1218port config - RX Checksum 1219~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 1221Set hardware RX checksum offload to on or off for all ports:: 1222 1223 testpmd> port config all rx-cksum (on|off) 1224 1225Checksum offload is off by default. 1226 1227The ``on`` option is equivalent to the ``--enable-rx-cksum`` command-line option. 1228 1229port config - VLAN 1230~~~~~~~~~~~~~~~~~~ 1231 1232Set hardware VLAN on or off for all ports:: 1233 1234 testpmd> port config all hw-vlan (on|off) 1235 1236Hardware VLAN is on by default. 1237 1238The ``off`` option is equivalent to the ``--disable-hw-vlan`` command-line option. 1239 1240port config - VLAN filter 1241~~~~~~~~~~~~~~~~~~~~~~~~~ 1242 1243Set hardware VLAN filter on or off for all ports:: 1244 1245 testpmd> port config all hw-vlan-filter (on|off) 1246 1247Hardware VLAN filter is on by default. 1248 1249The ``off`` option is equivalent to the ``--disable-hw-vlan-filter`` command-line option. 1250 1251port config - VLAN strip 1252~~~~~~~~~~~~~~~~~~~~~~~~ 1253 1254Set hardware VLAN strip on or off for all ports:: 1255 1256 testpmd> port config all hw-vlan-strip (on|off) 1257 1258Hardware VLAN strip is on by default. 1259 1260The ``off`` option is equivalent to the ``--disable-hw-vlan-strip`` command-line option. 1261 1262port config - VLAN extend 1263~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 1265Set hardware VLAN extend on or off for all ports:: 1266 1267 testpmd> port config all hw-vlan-extend (on|off) 1268 1269Hardware VLAN extend is off by default. 1270 1271The ``off`` option is equivalent to the ``--disable-hw-vlan-extend`` command-line option. 1272 1273port config - Drop Packets 1274~~~~~~~~~~~~~~~~~~~~~~~~~~ 1275 1276Set packet drop for packets with no descriptors on or off for all ports:: 1277 1278 testpmd> port config all drop-en (on|off) 1279 1280Packet dropping for packets with no descriptors is off by default. 1281 1282The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option. 1283 1284port config - RSS 1285~~~~~~~~~~~~~~~~~ 1286 1287Set the RSS (Receive Side Scaling) mode on or off:: 1288 1289 testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|none) 1290 1291RSS is on by default. 1292 1293The ``none`` option is equivalent to the ``--disable-rss`` command-line option. 1294 1295port config - RSS Reta 1296~~~~~~~~~~~~~~~~~~~~~~ 1297 1298Set the RSS (Receive Side Scaling) redirection table:: 1299 1300 testpmd> port config all rss reta (hash,queue)[,(hash,queue)] 1301 1302port config - DCB 1303~~~~~~~~~~~~~~~~~ 1304 1305Set the DCB mode for an individual port:: 1306 1307 testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) 1308 1309The traffic class should be 4 or 8. 1310 1311port config - Burst 1312~~~~~~~~~~~~~~~~~~~ 1313 1314Set the number of packets per burst:: 1315 1316 testpmd> port config all burst (value) 1317 1318This is equivalent to the ``--burst`` command-line option. 1319 1320port config - Threshold 1321~~~~~~~~~~~~~~~~~~~~~~~ 1322 1323Set thresholds for TX/RX queues:: 1324 1325 testpmd> port config all (threshold) (value) 1326 1327Where the threshold type can be: 1328 1329* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255. 1330 1331* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255. 1332 1333* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255. 1334 1335* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255. 1336 1337* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255. 1338 1339* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255. 1340 1341* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd. 1342 1343* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd. 1344 1345* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. 1346 1347These threshold options are also available from the command-line. 1348 1349port config - E-tag 1350~~~~~~~~~~~~~~~~~~~ 1351 1352Set the value of ether-type for E-tag:: 1353 1354 testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value) 1355 1356Enable/disable the E-tag support:: 1357 1358 testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable) 1359 1360 1361Link Bonding Functions 1362---------------------- 1363 1364The Link Bonding functions make it possible to dynamically create and 1365manage link bonding devices from within testpmd interactive prompt. 1366 1367create bonded device 1368~~~~~~~~~~~~~~~~~~~~ 1369 1370Create a new bonding device:: 1371 1372 testpmd> create bonded device (mode) (socket) 1373 1374For example, to create a bonded device in mode 1 on socket 0:: 1375 1376 testpmd> create bonded 1 0 1377 created new bonded device (port X) 1378 1379add bonding slave 1380~~~~~~~~~~~~~~~~~ 1381 1382Adds Ethernet device to a Link Bonding device:: 1383 1384 testpmd> add bonding slave (slave id) (port id) 1385 1386For example, to add Ethernet device (port 6) to a Link Bonding device (port 10):: 1387 1388 testpmd> add bonding slave 6 10 1389 1390 1391remove bonding slave 1392~~~~~~~~~~~~~~~~~~~~ 1393 1394Removes an Ethernet slave device from a Link Bonding device:: 1395 1396 testpmd> remove bonding slave (slave id) (port id) 1397 1398For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10):: 1399 1400 testpmd> remove bonding slave 6 10 1401 1402set bonding mode 1403~~~~~~~~~~~~~~~~ 1404 1405Set the Link Bonding mode of a Link Bonding device:: 1406 1407 testpmd> set bonding mode (value) (port id) 1408 1409For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3):: 1410 1411 testpmd> set bonding mode 3 10 1412 1413set bonding primary 1414~~~~~~~~~~~~~~~~~~~ 1415 1416Set an Ethernet slave device as the primary device on a Link Bonding device:: 1417 1418 testpmd> set bonding primary (slave id) (port id) 1419 1420For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10):: 1421 1422 testpmd> set bonding primary 6 10 1423 1424set bonding mac 1425~~~~~~~~~~~~~~~ 1426 1427Set the MAC address of a Link Bonding device:: 1428 1429 testpmd> set bonding mac (port id) (mac) 1430 1431For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01:: 1432 1433 testpmd> set bonding mac 10 00:00:00:00:00:01 1434 1435set bonding xmit_balance_policy 1436~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 1438Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:: 1439 1440 testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34) 1441 1442For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports):: 1443 1444 testpmd> set bonding xmit_balance_policy 10 l34 1445 1446 1447set bonding mon_period 1448~~~~~~~~~~~~~~~~~~~~~~ 1449 1450Set the link status monitoring polling period in milliseconds for a bonding device. 1451 1452This adds support for PMD slave devices which do not support link status interrupts. 1453When the mon_period is set to a value greater than 0 then all PMD's which do not support 1454link status ISR will be queried every polling interval to check if their link status has changed:: 1455 1456 testpmd> set bonding mon_period (port_id) (value) 1457 1458For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms:: 1459 1460 testpmd> set bonding mon_period 5 150 1461 1462 1463show bonding config 1464~~~~~~~~~~~~~~~~~~~ 1465 1466Show the current configuration of a Link Bonding device:: 1467 1468 testpmd> show bonding config (port id) 1469 1470For example, 1471to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) 1472in balance mode with a transmission policy of layer 2+3:: 1473 1474 testpmd> show bonding config 9 1475 Bonding mode: 2 1476 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 1477 Slaves (3): [1 3 4] 1478 Active Slaves (3): [1 3 4] 1479 Primary: [3] 1480 1481 1482Register Functions 1483------------------ 1484 1485The Register Functions can be used to read from and write to registers on the network card referenced by a port number. 1486This is mainly useful for debugging purposes. 1487Reference should be made to the appropriate datasheet for the network card for details on the register addresses 1488and fields that can be accessed. 1489 1490read reg 1491~~~~~~~~ 1492 1493Display the value of a port register:: 1494 1495 testpmd> read reg (port_id) (address) 1496 1497For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller:: 1498 1499 testpmd> read reg 0 0xEE00 1500 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) 1501 1502read regfield 1503~~~~~~~~~~~~~ 1504 1505Display a port register bit field:: 1506 1507 testpmd> read regfield (port_id) (address) (bit_x) (bit_y) 1508 1509For example, reading the lowest two bits from the register in the example above:: 1510 1511 testpmd> read regfield 0 0xEE00 0 1 1512 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) 1513 1514read regbit 1515~~~~~~~~~~~ 1516 1517Display a single port register bit:: 1518 1519 testpmd> read regbit (port_id) (address) (bit_x) 1520 1521For example, reading the lowest bit from the register in the example above:: 1522 1523 testpmd> read regbit 0 0xEE00 0 1524 port 0 PCI register at offset 0xEE00: bit 0=1 1525 1526write reg 1527~~~~~~~~~ 1528 1529Set the value of a port register:: 1530 1531 testpmd> write reg (port_id) (address) (value) 1532 1533For example, to clear a register:: 1534 1535 testpmd> write reg 0 0xEE00 0x0 1536 port 0 PCI register at offset 0xEE00: 0x00000000 (0) 1537 1538write regfield 1539~~~~~~~~~~~~~~ 1540 1541Set bit field of a port register:: 1542 1543 testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value) 1544 1545For example, writing to the register cleared in the example above:: 1546 1547 testpmd> write regfield 0 0xEE00 0 1 2 1548 port 0 PCI register at offset 0xEE00: 0x00000002 (2) 1549 1550write regbit 1551~~~~~~~~~~~~ 1552 1553Set single bit value of a port register:: 1554 1555 testpmd> write regbit (port_id) (address) (bit_x) (value) 1556 1557For example, to set the high bit in the register from the example above:: 1558 1559 testpmd> write regbit 0 0xEE00 31 1 1560 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) 1561 1562 1563Filter Functions 1564---------------- 1565 1566This section details the available filter functions that are available. 1567 1568ethertype_filter 1569~~~~~~~~~~~~~~~~~~~~ 1570 1571Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue:: 1572 1573 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \ 1574 ethertype (ether_type) (drop|fwd) queue (queue_id) 1575 1576The available information parameters are: 1577 1578* ``port_id``: The port which the Ethertype filter assigned on. 1579 1580* ``mac_addr``: Compare destination mac address. 1581 1582* ``mac_ignr``: Ignore destination mac address match. 1583 1584* ``mac_address``: Destination mac address to match. 1585 1586* ``ether_type``: The EtherType value want to match, 1587 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. 1588 1589* ``queue_id``: The receive queue associated with this EtherType filter. 1590 It is meaningless when deleting or dropping. 1591 1592Example, to add/remove an ethertype filter rule:: 1593 1594 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \ 1595 ethertype 0x0806 fwd queue 3 1596 1597 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \ 1598 ethertype 0x0806 fwd queue 3 1599 16002tuple_filter 1601~~~~~~~~~~~~~~~~~ 1602 1603Add or delete a 2-tuple filter, 1604which identifies packets by specific protocol and destination TCP/UDP port 1605and forwards packets into one of the receive queues:: 1606 1607 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \ 1608 protocol (protocol_value) mask (mask_value) \ 1609 tcp_flags (tcp_flags_value) priority (prio_value) \ 1610 queue (queue_id) 1611 1612The available information parameters are: 1613 1614* ``port_id``: The port which the 2-tuple filter assigned on. 1615 1616* ``dst_port_value``: Destination port in L4. 1617 1618* ``protocol_value``: IP L4 protocol. 1619 1620* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate. 1621 1622* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). 1623 1624* ``prio_value``: Priority of this filter. 1625 1626* ``queue_id``: The receive queue associated with this 2-tuple filter. 1627 1628Example, to add/remove an 2tuple filter rule:: 1629 1630 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \ 1631 tcp_flags 0x02 priority 3 queue 3 1632 1633 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \ 1634 tcp_flags 0x02 priority 3 queue 3 1635 16365tuple_filter 1637~~~~~~~~~~~~~~~~~ 1638 1639Add or delete a 5-tuple filter, 1640which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) 1641and routes packets into one of the receive queues:: 1642 1643 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \ 1644 (src_address) dst_port (dst_port_value) \ 1645 src_port (src_port_value) protocol (protocol_value) \ 1646 mask (mask_value) tcp_flags (tcp_flags_value) \ 1647 priority (prio_value) queue (queue_id) 1648 1649The available information parameters are: 1650 1651* ``port_id``: The port which the 5-tuple filter assigned on. 1652 1653* ``dst_address``: Destination IP address. 1654 1655* ``src_address``: Source IP address. 1656 1657* ``dst_port_value``: TCP/UDP destination port. 1658 1659* ``src_port_value``: TCP/UDP source port. 1660 1661* ``protocol_value``: L4 protocol. 1662 1663* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate 1664 1665* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). 1666 1667* ``prio_value``: The priority of this filter. 1668 1669* ``queue_id``: The receive queue associated with this 5-tuple filter. 1670 1671Example, to add/remove an 5tuple filter rule:: 1672 1673 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \ 1674 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ 1675 flags 0x0 priority 3 queue 3 1676 1677 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \ 1678 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ 1679 flags 0x0 priority 3 queue 3 1680 1681syn_filter 1682~~~~~~~~~~ 1683 1684Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue:: 1685 1686 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) 1687 1688The available information parameters are: 1689 1690* ``port_id``: The port which the SYN filter assigned on. 1691 1692* ``high``: This SYN filter has higher priority than other filters. 1693 1694* ``low``: This SYN filter has lower priority than other filters. 1695 1696* ``queue_id``: The receive queue associated with this SYN filter 1697 1698Example:: 1699 1700 testpmd> syn_filter 0 add priority high queue 3 1701 1702flex_filter 1703~~~~~~~~~~~ 1704 1705With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet 1706and routed into one of the receive queues:: 1707 1708 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \ 1709 mask (mask_value) priority (prio_value) queue (queue_id) 1710 1711The available information parameters are: 1712 1713* ``port_id``: The port which the Flex filter is assigned on. 1714 1715* ``len_value``: Filter length in bytes, no greater than 128. 1716 1717* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match. 1718 1719* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match. 1720 1721* ``prio_value``: The priority of this filter. 1722 1723* ``queue_id``: The receive queue associated with this Flex filter. 1724 1725Example:: 1726 1727 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \ 1728 mask 000C priority 3 queue 3 1729 1730 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \ 1731 mask 000C priority 3 queue 3 1732 1733 1734.. _testpmd_flow_director: 1735 1736flow_director_filter 1737~~~~~~~~~~~~~~~~~~~~ 1738 1739The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. 1740 1741Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and 1742Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter: 1743 1744* Perfect match filters. 1745 The hardware checks a match between the masked fields of the received packets and the programmed filters. 1746 The masked fields are for IP flow. 1747 1748* Signature filters. 1749 The hardware checks a match between a hash-based signature of the masked fields of the received packet. 1750 1751* Perfect-mac-vlan match filters. 1752 The hardware checks a match between the masked fields of the received packets and the programmed filters. 1753 The masked fields are for MAC VLAN flow. 1754 1755* Perfect-tunnel match filters. 1756 The hardware checks a match between the masked fields of the received packets and the programmed filters. 1757 The masked fields are for tunnel flow. 1758 1759The Flow Director filters can match the different fields for different type of packet: flow type, specific input set 1760per flow type and the flexible payload. 1761 1762The Flow Director can also mask out parts of all of these fields so that filters 1763are only applied to certain fields or parts of the fields. 1764 1765Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. 1766 1767# Commands to add flow director filters of different flow types:: 1768 1769 flow_director_filter (port_id) mode IP (add|del|update) \ 1770 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \ 1771 src (src_ip_address) dst (dst_ip_address) \ 1772 tos (tos_value) proto (proto_value) ttl (ttl_value) \ 1773 vlan (vlan_value) flexbytes (flexbytes_value) \ 1774 (drop|fwd) pf|vf(vf_id) queue (queue_id) \ 1775 fd_id (fd_id_value) 1776 1777 flow_director_filter (port_id) mode IP (add|del|update) \ 1778 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \ 1779 src (src_ip_address) (src_port) \ 1780 dst (dst_ip_address) (dst_port) \ 1781 tos (tos_value) ttl (ttl_value) \ 1782 vlan (vlan_value) flexbytes (flexbytes_value) \ 1783 (drop|fwd) queue pf|vf(vf_id) (queue_id) \ 1784 fd_id (fd_id_value) 1785 1786 flow_director_filter (port_id) mode IP (add|del|update) \ 1787 flow (ipv4-sctp|ipv6-sctp) \ 1788 src (src_ip_address) (src_port) \ 1789 dst (dst_ip_address) (dst_port) \ 1790 tos (tos_value) ttl (ttl_value) \ 1791 tag (verification_tag) vlan (vlan_value) \ 1792 flexbytes (flexbytes_value) (drop|fwd) \ 1793 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) 1794 1795 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \ 1796 ether (ethertype) flexbytes (flexbytes_value) \ 1797 (drop|fwd) pf|vf(vf_id) queue (queue_id) 1798 fd_id (fd_id_value) 1799 1800 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \ 1801 mac (mac_address) vlan (vlan_value) \ 1802 flexbytes (flexbytes_value) (drop|fwd) \ 1803 queue (queue_id) fd_id (fd_id_value) 1804 1805 flow_director_filter (port_id) mode Tunnel (add|del|update) \ 1806 mac (mac_address) vlan (vlan_value) \ 1807 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \ 1808 flexbytes (flexbytes_value) (drop|fwd) \ 1809 queue (queue_id) fd_id (fd_id_value) 1810 1811For example, to add an ipv4-udp flow type filter:: 1812 1813 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \ 1814 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \ 1815 fwd pf queue 1 fd_id 1 1816 1817For example, add an ipv4-other flow type filter:: 1818 1819 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \ 1820 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \ 1821 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 1822 1823flush_flow_director 1824~~~~~~~~~~~~~~~~~~~ 1825 1826Flush all flow director filters on a device:: 1827 1828 testpmd> flush_flow_director (port_id) 1829 1830Example, to flush all flow director filter on port 0:: 1831 1832 testpmd> flush_flow_director 0 1833 1834flow_director_mask 1835~~~~~~~~~~~~~~~~~~ 1836 1837Set flow director's input masks:: 1838 1839 flow_director_mask (port_id) mode IP vlan (vlan_value) \ 1840 src_mask (ipv4_src) (ipv6_src) (src_port) \ 1841 dst_mask (ipv4_dst) (ipv6_dst) (dst_port) 1842 1843 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) \ 1844 mac (mac_value) 1845 1846 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \ 1847 mac (mac_value) tunnel-type (tunnel_type_value) \ 1848 tunnel-id (tunnel_id_value) 1849 1850Example, to set flow director mask on port 0:: 1851 1852 testpmd> flow_director_mask 0 mode IP vlan 0xefff \ 1853 src_mask 255.255.255.255 \ 1854 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \ 1855 dst_mask 255.255.255.255 \ 1856 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF 1857 1858flow_director_flex_mask 1859~~~~~~~~~~~~~~~~~~~~~~~ 1860 1861set masks of flow director's flexible payload based on certain flow type:: 1862 1863 testpmd> flow_director_flex_mask (port_id) \ 1864 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 1865 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \ 1866 l2_payload|all) (mask) 1867 1868Example, to set flow director's flex mask for all flow type on port 0:: 1869 1870 testpmd> flow_director_flex_mask 0 flow all \ 1871 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 1872 1873 1874flow_director_flex_payload 1875~~~~~~~~~~~~~~~~~~~~~~~~~~ 1876 1877Configure flexible payload selection:: 1878 1879 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) 1880 1881For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload:: 1882 1883 testpmd> flow_director_flex_payload 0 l4 \ 1884 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) 1885 1886get_sym_hash_ena_per_port 1887~~~~~~~~~~~~~~~~~~~~~~~~~ 1888 1889Get symmetric hash enable configuration per port:: 1890 1891 get_sym_hash_ena_per_port (port_id) 1892 1893For example, to get symmetric hash enable configuration of port 1:: 1894 1895 testpmd> get_sym_hash_ena_per_port 1 1896 1897set_sym_hash_ena_per_port 1898~~~~~~~~~~~~~~~~~~~~~~~~~ 1899 1900Set symmetric hash enable configuration per port to enable or disable:: 1901 1902 set_sym_hash_ena_per_port (port_id) (enable|disable) 1903 1904For example, to set symmetric hash enable configuration of port 1 to enable:: 1905 1906 testpmd> set_sym_hash_ena_per_port 1 enable 1907 1908get_hash_global_config 1909~~~~~~~~~~~~~~~~~~~~~~ 1910 1911Get the global configurations of hash filters:: 1912 1913 get_hash_global_config (port_id) 1914 1915For example, to get the global configurations of hash filters of port 1:: 1916 1917 testpmd> get_hash_global_config 1 1918 1919set_hash_global_config 1920~~~~~~~~~~~~~~~~~~~~~~ 1921 1922Set the global configurations of hash filters:: 1923 1924 set_hash_global_config (port_id) (toeplitz|simple_xor|default) \ 1925 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \ 1926 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) \ 1927 (enable|disable) 1928 1929For example, to enable simple_xor for flow type of ipv6 on port 2:: 1930 1931 testpmd> set_hash_global_config 2 simple_xor ipv6 enable 1932 1933set_hash_input_set 1934~~~~~~~~~~~~~~~~~~ 1935 1936Set the input set for hash:: 1937 1938 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 1939 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ 1940 l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \ 1941 ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \ 1942 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \ 1943 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \ 1944 fld-8th|none) (select|add) 1945 1946For example, to add source IP to hash input set for flow type of ipv4-udp on port 0:: 1947 1948 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add 1949 1950set_fdir_input_set 1951~~~~~~~~~~~~~~~~~~ 1952 1953The Flow Director filters can match the different fields for different type of packet, i.e. specific input set 1954on per flow type and the flexible payload. This command can be used to change input set for each flow type. 1955 1956Set the input set for flow director:: 1957 1958 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 1959 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ 1960 l2_payload) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos| \ 1961 ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \ 1962 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \ 1963 sctp-dst-port|sctp-veri-tag|none) (select|add) 1964 1965For example to add source IP to FD input set for flow type of ipv4-udp on port 0:: 1966 1967 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add 1968 1969global_config 1970~~~~~~~~~~~~~ 1971 1972Set different GRE key length for input set:: 1973 1974 global_config (port_id) gre-key-len (number in bytes) 1975 1976For example to set GRE key length for input set to 4 bytes on port 0:: 1977 1978 testpmd> global_config 0 gre-key-len 4 1979