1.. BSD LICENSE 2 Copyright(c) 2010-2014 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 31Testpmd Runtime Functions 32========================= 33 34Where the testpmd application is started in interactive mode, (-i|--interactive), 35it displays a prompt that can be used to start and stop forwarding, 36configure the application, display statistics, set the Flow Director and other tasks. 37 38.. code-block:: console 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 X 54 info [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap all 55 stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap X 56 stats [Mul-choice STRING]: show|clear port info|stats|fdir|stat_qmap all 57 ... 58 59Help Functions 60-------------- 61 62The testpmd has on-line help for the functions that are available at runtime. 63These are divided into sections and can be accessed using help, help section or help all: 64 65.. code-block:: console 66 67 testpmd> help 68 69 Help is available for the following sections: 70 help control : Start and stop forwarding. 71 help display : Displaying port, stats and config information. 72 help config : Configuration information. 73 help ports : Configuring ports. 74 help registers : Reading and setting port registers. 75 help filters : Filters configuration help. 76 help all : All of the above sections. 77 78Control Functions 79----------------- 80 81start 82~~~~~ 83 84Start packet forwarding with current configuration: 85 86start 87 88start tx_first 89~~~~~~~~~~~~~~ 90 91Start packet forwarding with current configuration after sending one burst of packets: 92 93start tx_first 94 95stop 96~~~~ 97 98Stop packet forwarding, and display accumulated statistics: 99 100stop 101 102quit 103~~~~ 104 105Quit to prompt: 106 107quit 108 109Display Functions 110----------------- 111 112The functions in the following sections are used to display information about the 113testpmd configuration or the NIC status. 114 115show port 116~~~~~~~~~ 117 118Display information for a given port or all ports: 119 120show port (info|stats|fdir|stat_qmap) (port_id|all) 121 122The available information categories are: 123 124info : General port information such as MAC address. 125 126stats : RX/TX statistics. 127 128fdir : Flow Director information and statistics. 129 130stat_qmap : Queue statistics mapping. 131 132For example: 133 134.. code-block:: console 135 136 testpmd> show port info 0 137 138 ********************* Infos for port 0 ********************* 139 140 MAC address: XX:XX:XX:XX:XX:XX 141 Link status: up 142 Link speed: 10000 Mbps 143 Link duplex: full-duplex 144 Promiscuous mode: enabled 145 Allmulticast mode: disabled 146 Maximum number of MAC addresses: 127 147 VLAN offload: 148 strip on 149 filter on 150 qinq(extend) off 151 152show port rss reta 153~~~~~~~~~~~~~~~~~~ 154 155Display the rss redirection table entry indicated by masks on port X: 156 157show port (port_id) rss reta (size) (mask0, mask1...) 158 159size is used to indicate the hardware supported reta size 160 161show port rss-hash 162~~~~~~~~~~~~~~~~~~ 163 164Display the RSS hash functions and RSS hash key of a port: 165 166show port (port_id) rss-hash [key] 167 168clear port 169~~~~~~~~~~ 170 171Clear the port statistics for a given port or for all ports: 172 173clear port (info|stats|fdir|stat_qmap) (port_id|all) 174 175For example: 176 177.. code-block:: console 178 179 testpmd> clear port stats all 180 181show config 182~~~~~~~~~~~ 183 184Displays the configuration of the application. 185The configuration comes from the command-line, the runtime or the application defaults: 186 187show config (rxtx|cores|fwd) 188 189The available information categories are: 190 191rxtx : RX/TX configuration items. 192 193cores : List of forwarding cores. 194 195fwd : Packet forwarding configuration. 196 197For example: 198 199.. code-block:: console 200 201 testpmd> show config rxtx 202 203 io packet forwarding - CRC stripping disabled - packets/burst=16 204 nb forwarding cores=2 - nb forwarding ports=1 205 RX queues=1 - RX desc=128 - RX free threshold=0 206 RX threshold registers: pthresh=8 hthresh=8 wthresh=4 207 TX queues=1 - TX desc=512 - TX free threshold=0 208 TX threshold registers: pthresh=36 hthresh=0 wthresh=0 209 TX RS bit threshold=0 - TXQ flags=0x0 210 211read rxd 212~~~~~~~~ 213 214Display an RX descriptor for a port RX queue: 215 216read rxd (port_id) (queue_id) (rxd_id) 217 218For example: 219 220.. code-block:: console 221 222 testpmd> read rxd 0 0 4 223 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180 224 225read txd 226~~~~~~~~ 227 228Display a TX descriptor for a port TX queue: 229 230read txd (port_id) (queue_id) (txd_id) 231 232For example: 233 234.. code-block:: console 235 236 testpmd> read txd 0 0 4 237 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C 238 239Configuration Functions 240----------------------- 241 242The testpmd application can be configured from the runtime as well as from the command-line. 243 244This section details the available configuration functions that are available. 245 246.. note:: 247 248 Configuration changes only become active when forwarding is started/restarted. 249 250set default 251~~~~~~~~~~~ 252 253Reset forwarding to the default configuration: 254 255set default 256 257set verbose 258~~~~~~~~~~~ 259 260Set the debug verbosity level: 261 262set verbose (level) 263 264Currently the only available levels are 0 (silent except for error) and 1 (fully verbose). 265 266set nbport 267~~~~~~~~~~ 268 269Set the number of ports used by the application: 270 271set nbport (num) 272 273This is equivalent to the --nb-ports command-line option. 274 275set nbcore 276~~~~~~~~~~ 277 278Set the number of cores used by the application: 279 280set nbcore (num) 281 282This is equivalent to the --nb-cores command-line option. 283 284.. note:: 285 286 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port. 287 288set coremask 289~~~~~~~~~~~~ 290 291Set the forwarding cores hexadecimal mask: 292 293set coremask (mask) 294 295This is equivalent to the --coremask command-line option. 296 297.. note:: 298 299 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. 300 301set portmask 302~~~~~~~~~~~~ 303 304Set the forwarding ports hexadecimal mask: 305 306set portmask (mask) 307 308This is equivalent to the --portmask command-line option. 309 310set burst 311~~~~~~~~~ 312 313Set number of packets per burst: 314 315set burst (num) 316 317This is equivalent to the --burst command-line option. 318 319In mac_retry forwarding mode, the transmit delay time and number of retries can also be set. 320 321set burst tx delay (micrseconds) retry (num) 322 323set txpkts 324~~~~~~~~~~ 325 326Set the length of each segment of the TX-ONLY packets: 327 328set txpkts (x[,y]*) 329 330Where x[,y]* represents a CSV list of values, without white space. 331 332set corelist 333~~~~~~~~~~~~ 334 335Set the list of forwarding cores: 336 337set corelist (x[,y]*) 338 339For example, to change the forwarding cores: 340 341.. code-block:: console 342 343 testpmd> set corelist 3,1 344 testpmd> show config fwd 345 346 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled 347 Logical Core 3 (socket 0) forwards packets on 1 streams: 348 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 349 Logical Core 1 (socket 0) forwards packets on 1 streams: 350 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 351 352.. note:: 353 354 The cores are used in the same order as specified on the command line. 355 356set portlist 357~~~~~~~~~~~~ 358 359Set the list of forwarding ports: 360 361set portlist (x[,y]*) 362 363For example, to change the port forwarding: 364 365.. code-block:: console 366 367 testpmd> set portlist 0,2,1,3 368 testpmd> show config fwd 369 370 io packet forwarding - ports=4 - cores=1 - streams=4 371 Logical Core 3 (socket 0) forwards packets on 4 streams: 372 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01 373 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 374 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03 375 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02 376 377vlan set strip 378~~~~~~~~~~~~~~ 379 380Set the VLAN strip on a port: 381 382vlan set strip (on|off) (port_id) 383 384vlan set stripq 385~~~~~~~~~~~~~~~ 386 387Set the VLAN strip for a queue on a port: 388 389vlan set stripq (on|off) (port_id,queue_id) 390 391vlan set filter 392~~~~~~~~~~~~~~~ 393 394Set the VLAN filter on a port: 395 396vlan set filter (on|off) (port_id) 397 398vlan set qinq 399~~~~~~~~~~~~~ 400 401Set the VLAN QinQ (extended queue in queue) on for a port: 402 403vlan set qinq (on|off) (port_id) 404 405vlan set tpid 406~~~~~~~~~~~~~ 407 408Set the outer VLAN TPID for packet filtering on a port: 409 410vlan set tpid (value) (port_id) 411 412.. note:: 413 414 TPID value must be a 16-bit number (value <= 65536). 415 416rx_vlan add 417~~~~~~~~~~~ 418 419Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID: 420 421rx_vlan add (vlan_id|all) (port_id) 422 423.. note:: 424 425 VLAN filter must be set on that port. VLAN ID < 4096. 426 427rx_vlan rm 428~~~~~~~~~~ 429 430Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID: 431 432rx_vlan rm (vlan_id|all) (port_id) 433 434rx_vlan add(for VF) 435~~~~~~~~~~~~~~~~~~~ 436 437Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID: 438 439rx_vlan add (vlan_id) port (port_id) vf (vf_mask) 440 441rx_vlan rm(for VF) 442~~~~~~~~~~~~~~~~~~ 443 444Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID: 445 446rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) 447 448rx_vlan set tpid 449~~~~~~~~~~~~~~~~ 450 451Set the outer VLAN TPID for packet filtering on a port: 452 453rx_vlan set tpid (value) (port_id) 454 455tunnel_filter add 456~~~~~~~~~~~~~~~~~ 457 458Add a tunnel filter on a port: 459 460tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan) 461 (tunnel_type) (filter_type) (tenant_id) (queue_id) 462 463tunnel_filter remove 464~~~~~~~~~~~~~~~~~~~~ 465 466Remove a tunnel filter on a port: 467 468tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan) 469 (tunnel_type) (filter_type) (tenant_id) (queue_id) 470 471rx_vxlan_port add 472~~~~~~~~~~~~~~~~~ 473 474Add an UDP port for VXLAN packet filter on a port: 475 476rx_vxlan_port add (udp_port) (port_id) 477 478rx_vxlan_port remove 479~~~~~~~~~~~~~~~~~~~~ 480 481Remove an UDP port for VXLAN packet filter on a port: 482 483rx_vxlan_port rm (udp_port) (port_id) 484 485tx_vlan set 486~~~~~~~~~~~ 487 488Set hardware insertion of VLAN ID in packets sent on a port: 489 490tx_vlan set (vlan_id) (port_id) 491 492tx_vlan set pvid 493~~~~~~~~~~~~~~~~ 494 495Set port based hardware insertion of VLAN ID in pacekts sent on a port: 496 497tx_vlan set pvid (port_id) (vlan_id) (on|off) 498 499tx_vlan reset 500~~~~~~~~~~~~~ 501 502Disable hardware insertion of a VLAN header in packets sent on a port: 503 504tx_vlan reset (port_id) 505 506tx_checksum set 507~~~~~~~~~~~~~~~ 508 509Select hardware or software calculation of the checksum when 510transmitting a packet using the csum forward engine: 511 512tx_cksum set (ip|udp|tcp|sctp|vxlan) 513 514ip|udp|tcp|sctp always concern the inner layer. 515vxlan concerns the outer IP and UDP layer (in case the packet 516is recognized as a vxlan packet by the forward engine) 517 518.. note:: 519 520 Check the NIC Datasheet for hardware limits. 521 522tx_checksum show 523~~~~~~~~~~~~~~~~ 524 525Display tx checksum offload configuration: 526 527tx_checksum show (port_id) 528 529tso set 530~~~~~~~ 531 532Enable TCP Segmentation Offload in csum forward engine: 533 534tso set (segsize) (port_id) 535 536.. note:: 537 Please check the NIC datasheet for HW limits 538 539tso show 540~~~~~~~~ 541 542Display the status of TCP Segmentation Offload: 543 544tso show (port_id) 545 546set fwd 547~~~~~~~ 548 549Set the packet forwarding mode: 550 551set fwd (io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho) 552 553The available information categories are: 554 555* io: forwards packets "as-is" in I/O mode. 556 This is the fastest possible forwarding operation as it does not access packets data. 557 This is the default mode. 558 559* mac: changes the source and the destination Ethernet addresses of packets before forwarding them. 560 561* mac_retry: same as "mac" forwarding mode, but includes retries if the destination queue is full. 562 563* macswap: MAC swap forwarding mode. 564 Swaps the source and the destination Ethernet addresses of packets before forwarding them. 565 566* flowgen: multi-flow generation mode. 567 Originates a bunch of flows (varying destination IP addresses), and terminate receive traffic. 568 569* rxonly: receives packets but doesn't transmit them. 570 571* txonly: generates and transmits packets without receiving any. 572 573* csum: changes the checksum field with HW or SW methods depending on the offload flags on the packet. 574 575* icmpecho: receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies. 576 577 578Example: 579 580.. code-block:: console 581 582 testpmd> set fwd rxonly 583 584 Set rxonly packet forwarding mode 585 586mac_addr add 587~~~~~~~~~~~~ 588 589Add an alternative MAC address to a port: 590 591mac_addr add (port_id) (XX:XX:XX:XX:XX:XX) 592 593mac_addr remove 594~~~~~~~~~~~~~~~ 595 596Remove a MAC address from a port: 597 598mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX) 599 600mac_addr add(for VF) 601~~~~~~~~~~~~~~~~~~~~ 602 603Add an alternative MAC address for a VF to a port: 604 605mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX) 606 607set port-uta 608~~~~~~~~~~~~ 609 610Set the unicast hash filter(s) on/off for a port X: 611 612set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off) 613 614set promisc 615~~~~~~~~~~~ 616 617Set the promiscuous mode on for a port or for all ports. 618In promiscuous mode packets are not dropped if they aren't for the specified MAC address: 619 620set promisc (port_id|all) (on|off) 621 622set allmulti 623~~~~~~~~~~~~ 624 625Set the allmulti mode for a port or for all ports: 626 627set allmulti (port_id|all) (on|off) 628 629Same as the ifconfig (8) option. Controls how multicast packets are handled. 630 631set flow_ctrl rx 632~~~~~~~~~~~~~~~~ 633 634Set the link flow control parameter on a port: 635 636set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 637(pause_time) (send_xon) (port_id) 638 639Where: 640 641high_water (integer): High threshold value to trigger XOFF. 642 643low_water (integer) : Low threshold value to trigger XON. 644 645pause_time (integer): Pause quota in the Pause frame. 646 647send_xon (0/1) : Send XON frame. 648 649mac_ctrl_frame_fwd : Enable receiving MAC control frames 650 651set pfc_ctrl rx 652~~~~~~~~~~~~~~~ 653 654Set the priority flow control parameter on a port: 655 656set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ (pause_time) (priority) (port_id) 657 658Where: 659 660priority (0-7): VLAN User Priority. 661 662set stat_qmap 663~~~~~~~~~~~~~ 664 665Set statistics mapping (qmapping 0..15) for RX/TX queue on port: 666 667set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping) 668 669For example, to set rx queue 2 on port 0 to mapping 5: 670 671.. code-block:: console 672 673 testpmd>set stat_qmap rx 0 2 5 674 675set port - rx/tx(for VF) 676~~~~~~~~~~~~~~~~~~~~~~~~ 677 678Set VF receive/transmit from a port: 679 680set port (port_id) vf (vf_id) (rx|tx) (on|off) 681 682set port - mac address filter (for VF) 683~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 684 685Add/Remove unicast or multicast MAC addr filter for a VF: 686 687set port (port_id) vf (vf_id) (mac_addr) 688 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) 689 690set port - rx mode(for VF) 691~~~~~~~~~~~~~~~~~~~~~~~~~~ 692 693Set the VF receive mode of a port: 694 695set port (port_id) vf (vf_id) rxmode (AUPE|ROPE|BAM|MPE) (on|off) 696 697The available receive modes are: 698 699* AUPE: accepts untagged VLAN. 700 701* ROPE: accepts unicast hash. 702 703* BAM: accepts broadcast packets 704 705* MPE: accepts all multicast packets 706 707set port - tx_rate (for Queue) 708~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 709 710Set TX rate limitation for queue of a port ID: 711 712set port (port_id) queue (queue_id) rate (rate_value) 713 714set port - tx_rate (for VF) 715~~~~~~~~~~~~~~~~~~~~~~~~~~~ 716 717Set TX rate limitation for queues in VF of a port ID: 718 719set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) 720 721set port - mirror rule 722~~~~~~~~~~~~~~~~~~~~~~ 723 724Set port or vlan type mirror rule for a port. 725 726set port (port_id) mirror-rule (rule_id) (pool-mirror|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) 727 728For example to enable mirror traffic with vlan 0,1 to pool 0: 729 730.. code-block:: console 731 732 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on 733 734reset port - mirror rule 735~~~~~~~~~~~~~~~~~~~~~~~~ 736 737Reset a mirror rule for a port. 738 739reset port (port_id) mirror-rule (rule_id) 740 741set flush_rx 742~~~~~~~~~~~~ 743 744Flush (default) or don't flush RX streams before forwarding. 745Mainly used with PCAP drivers to avoid the default behavior of flushing the first 512 packets on RX streams. 746 747set flush_rx off 748 749set bypass mode 750~~~~~~~~~~~~~~~ 751 752Set the bypass mode for the lowest port on bypass enabled NIC. 753 754set bypass mode (normal|bypass|isolate) (port_id) 755 756set bypass event 757~~~~~~~~~~~~~~~~ 758 759Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled NIC where: 760 761* timeout: enable bypass after watchdog timeout. 762 763* os_on: enable bypass when OS/board is powered on. 764 765* os_off: enable bypass when OS/board is powered off. 766 767* power_on: enable bypass when power supply is turned on. 768 769* power_off: enable bypass when power supply is turned off. 770 771set bypass event (timeout|os_on|os_off|power_on|power_off) mode (normal|bypass|isolate) (port_id) 772 773set bypass timeout 774~~~~~~~~~~~~~~~~~~ 775 776Set the bypass watchdog timeout to 'n' seconds where 0 = instant. 777 778set bypass timeout (0|1.5|2|3|4|8|16|32) 779 780show bypass config 781~~~~~~~~~~~~~~~~~~ 782 783Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC. 784 785show bypass config (port_id) 786 787set link up 788~~~~~~~~~~~ 789 790Set link up for a port. 791 792set link-up port (port id) 793 794set link down 795~~~~~~~~~~~~~ 796 797Set link down for a port. 798 799set link-down port (port id) 800 801Port Functions 802-------------- 803 804The following sections show functions for configuring ports. 805 806.. note:: 807 808 Port configuration changes only become active when forwarding is started/restarted. 809 810port attach 811~~~~~~~~~~~ 812 813Attach a port specified by pci address or virtual device args. 814 815To attach a new pci device, the device should be recognized by kernel first. 816Then it should be moved under DPDK management. 817Finally the port can be attached to testpmd. 818On the other hand, to attach a port created by virtual device, above steps are not needed. 819 820port attach (identifier) 821 822For example, to attach a port whose pci address is 0000:02:00.0. 823 824.. code-block:: console 825 826 testpmd> port attach 0000:02:00.0 827 Attaching a new port... 828 ... snip ... 829 Port 0 is attached. Now total ports is 1 830 Done 831 832For example, to attach a port created by pcap PMD. 833 834.. code-block:: console 835 836 testpmd> port attach eth_pcap0,iface=eth0 837 Attaching a new port... 838 ... snip ... 839 Port 0 is attached. Now total ports is 1 840 Done 841 842In this case, identifier is "eth_pcap0,iface=eth0". 843This identifier format is the same as "--vdev" format of DPDK applications. 844 845port detach 846~~~~~~~~~~~ 847 848Detach a specific port. 849 850Before detaching a port, the port should be closed. 851Also to remove a pci device completely from the system, first detach the port from testpmd. 852Then the device should be moved under kernel management. 853Finally the device can be removed using kernel pci hotplug functionality. 854On the other hand, to remove a port created by a virtual device, above steps are not needed. 855 856port detach (port_id) 857 858For example, to detach a port 0. 859 860.. code-block:: console 861 862 testpmd> port detach 0 863 Detaching a port... 864 ... snip ... 865 Done 866 867port start 868~~~~~~~~~~ 869 870Start all ports or a specific port: 871 872port start (port_id|all) 873 874port stop 875~~~~~~~~~ 876 877Stop all ports or a specific port: 878 879port stop (port_id|all) 880 881port close 882~~~~~~~~~~ 883 884Close all ports or a specific port: 885 886port close (port_id|all) 887 888port start/stop queue 889~~~~~~~~~~~~~~~~~~~~~ 890 891Start/stop a rx/tx queue on a specific port: 892 893port (port_id) (rxq|txq) (queue_id) (start|stop) 894 895Only take effect when port is started. 896 897port config - speed 898~~~~~~~~~~~~~~~~~~~ 899 900Set the speed and duplex mode for all ports or a specific port: 901 902port config (port_id|all) speed (10|100|1000|10000|auto) duplex (half|full|auto) 903 904port config - queues/descriptors 905~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 906 907Set number of queues/descriptors for rxq, txq, rxd and txd: 908 909port config all (rxq|txq|rxd|txd) (value) 910 911This is equivalent to the --rxq, --txq, --rxd and --txd command-line options. 912 913port config - max-pkt-len 914~~~~~~~~~~~~~~~~~~~~~~~~~ 915 916Set the maximum packet length: 917 918port config all max-pkt-len (value) 919 920This is equivalent to the --max-pkt-len command-line option. 921 922port config - CRC Strip 923~~~~~~~~~~~~~~~~~~~~~~~ 924 925Set hardware CRC stripping on or off for all ports: 926 927port config all crc-strip (on|off) 928 929CRC stripping is off by default. 930 931The on option is equivalent to the --crc-strip command-line option. 932 933port config - RX Checksum 934~~~~~~~~~~~~~~~~~~~~~~~~~ 935 936Set hardware RX checksum offload to on or off for all ports: 937 938port config all rx-cksum (on|off) 939 940Checksum offload is off by default. 941 942The on option is equivalent to the --enable-rx-cksum command-line option. 943 944port config - VLAN 945~~~~~~~~~~~~~~~~~~ 946 947Set hardware VLAN on or off for all ports: 948 949port config all hw-vlan (on|off) 950 951Hardware VLAN is on by default. 952 953The off option is equivalent to the --disable-hw-vlan command-line option. 954 955port config - Drop Packets 956~~~~~~~~~~~~~~~~~~~~~~~~~~ 957 958Set packet drop for packets with no descriptors on or off for all ports: 959 960port config all drop-en (on|off) 961 962Packet dropping for packets with no descriptors is off by default. 963 964The on option is equivalent to the --enable-drop-en command-line option. 965 966port config - RSS 967~~~~~~~~~~~~~~~~~ 968 969Set the RSS (Receive Side Scaling) mode on or off: 970 971port config all rss (ip|udp|none) 972 973RSS is on by default. 974 975The off option is equivalent to the --disable-rss command-line option. 976 977port config - RSS Reta 978~~~~~~~~~~~~~~~~~~~~~~ 979 980Set the RSS (Receive Side Scaling) redirection table: 981 982port config all rss reta (hash,queue)[,(hash,queue)] 983 984port config - DCB 985~~~~~~~~~~~~~~~~~ 986 987Set the DCB mode for an individual port: 988 989port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) 990 991The traffic class should be 4 or 8. 992 993port config - Burst 994~~~~~~~~~~~~~~~~~~~ 995 996Set the number of packets per burst: 997 998port config all burst (value) 999 1000This is equivalent to the --burst command-line option. 1001 1002port config - Threshold 1003~~~~~~~~~~~~~~~~~~~~~~~ 1004 1005Set thresholds for TX/RX queues: 1006 1007port config all (threshold) (value) 1008 1009Where the threshold type can be: 1010 1011* txpt: Set the prefetch threshold register of the TX rings, 0 <= value <= 255. 1012 1013* txht: Set the host threshold register of the TX rings, 0 <= value <= 255. 1014 1015* txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255. 1016 1017* rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255. 1018 1019* rxht: Set the host threshold register of the RX rings, 0 <= value <= 255. 1020 1021* rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255. 1022 1023* txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd. 1024 1025* rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd. 1026 1027* txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. 1028 These threshold options are also available from the command-line. 1029 1030Link Bonding Functions 1031---------------------- 1032 1033The Link Bonding functions make it possible to dynamically create and 1034manage link bonding devices from within testpmd interactive prompt. 1035 1036create bonded device 1037~~~~~~~~~~~~~~~~~~~~ 1038 1039Create a new bonding device: 1040 1041create bonded device (mode) (socket) 1042 1043For example, to create a bonded device in mode 1 on socket 0. 1044 1045.. code-block:: console 1046 1047 testpmd> create bonded 1 0 1048 created new bonded device (port X) 1049 1050add bonding slave 1051~~~~~~~~~~~~~~~~~ 1052 1053Adds Ethernet device to a Link Bonding device: 1054 1055add bonding slave (slave id) (port id) 1056 1057For example, to add Ethernet device (port 6) to a Link Bonding device (port 10). 1058 1059.. code-block:: console 1060 1061 testpmd> add bonding slave 6 10 1062 1063 1064remove bonding slave 1065~~~~~~~~~~~~~~~~~~~~ 1066 1067Removes an Ethernet slave device from a Link Bonding device: 1068 1069remove bonding slave (slave id) (port id) 1070 1071For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10). 1072 1073.. code-block:: console 1074 1075 testpmd> remove bonding slave 6 10 1076 1077set bonding mode 1078~~~~~~~~~~~~~~~~ 1079 1080Set the Link Bonding mode of a Link Bonding device: 1081 1082set bonding mode (value) (port id) 1083 1084For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3). 1085 1086.. code-block:: console 1087 1088 testpmd> set bonding mode 3 10 1089 1090set bonding primary 1091~~~~~~~~~~~~~~~~~~~ 1092 1093Set an Ethernet slave device as the primary device on a Link Bonding device: 1094 1095set bonding primary (slave id) (port id) 1096 1097For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10). 1098 1099.. code-block:: console 1100 1101 testpmd> set bonding primary 6 10 1102 1103set bonding mac 1104~~~~~~~~~~~~~~~ 1105 1106Set the MAC address of a Link Bonding device: 1107 1108set bonding mac (port id) (mac) 1109 1110For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01 1111 1112.. code-block:: console 1113 1114 testpmd> set bonding mac 10 00:00:00:00:00:01 1115 1116set bonding xmit_balance_policy 1117~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 1119Set the transmission policy for a Link Bonding device when it is in Balance XOR mode: 1120 1121set bonding xmit_balance_policy (port_id) (l2|l23|l34) 1122 1123For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports ) 1124 1125.. code-block:: console 1126 1127 testpmd> set bonding xmit_balance_policy 10 l34 1128 1129 1130set bonding mon_period 1131~~~~~~~~~~~~~~~~~~~~~~ 1132 1133Set the link status monitoring polling period in milliseconds for a bonding devicie. 1134 1135This adds support for PMD slave devices which do not support link status interrupts. 1136When the mon_period is set to a value greater than 0 then all PMD's which do not support 1137link status ISR will be queried every polling interval to check if their link status has changed. 1138 1139set bonding mon_period (port_id) (value) 1140 1141For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms 1142 1143.. code-block:: console 1144 1145 testpmd> set bonding mon_period 5 150 1146 1147 1148show bonding config 1149~~~~~~~~~~~~~~~~~~~ 1150 1151Show the current configuration of a Link Bonding device: 1152 1153show bonding config (port id) 1154 1155For example, 1156to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) 1157in balance mode with a transmission policy of layer 2+3. 1158 1159.. code-block:: console 1160 1161 testpmd> show bonding config 9 1162 Bonding mode: 2 1163 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 1164 Slaves (3): [1 3 4] 1165 Active Slaves (3): [1 3 4] 1166 Primary: [3] 1167 1168Register Functions 1169------------------ 1170 1171The Register functions can be used to read from and write to registers on the network card referenced by a port number. 1172This is mainly useful for debugging purposes. 1173Reference should be made to the appropriate datasheet for the network card for details on the register addresses 1174and fields that can be accessed. 1175 1176read reg 1177~~~~~~~~ 1178 1179Display the value of a port register: 1180 1181read reg (port_id) (address) 1182 1183For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel® 82599 10 GbE Controller: 1184 1185.. code-block:: console 1186 1187 testpmd> read reg 0 0xEE00 1188 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) 1189 1190read regfield 1191~~~~~~~~~~~~~ 1192 1193Display a port register bit field: 1194 1195read regfield (port_id) (address) (bit_x) (bit_y) 1196 1197For example, reading the lowest two bits from the register in the example above: 1198 1199.. code-block:: console 1200 1201 testpmd> read regfield 0 0xEE00 0 1 1202 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) 1203 1204read regbit 1205~~~~~~~~~~~ 1206 1207Display a single port register bit: 1208 1209read regbit (port_id) (address) (bit_x) 1210 1211For example, reading the lowest bit from the register in the example above: 1212 1213.. code-block:: console 1214 1215 testpmd> read regbit 0 0xEE00 0 1216 port 0 PCI register at offset 0xEE00: bit 0=1 1217 1218write reg 1219~~~~~~~~~ 1220 1221Set the value of a port register: 1222 1223write reg (port_id) (address) (value) 1224 1225For example, to clear a register: 1226 1227.. code-block:: console 1228 1229 testpmd> write reg 0 0xEE00 0x0 1230 port 0 PCI register at offset 0xEE00: 0x00000000 (0) 1231 1232write regfield 1233~~~~~~~~~~~~~~ 1234 1235Set bit field of a port register: 1236 1237write regfield (port_id) (address) (bit_x) (bit_y) (value) 1238 1239For example, writing to the register cleared in the example above: 1240 1241.. code-block:: console 1242 1243 testpmd> write regfield 0 0xEE00 0 1 2 1244 port 0 PCI register at offset 0xEE00: 0x00000002 (2) 1245 1246write regbit 1247~~~~~~~~~~~~ 1248 1249Set single bit value of a port register: 1250 1251write regbit (port_id) (address) (bit_x) (value) 1252 1253For example, to set the high bit in the register from the example above: 1254 1255.. code-block:: console 1256 1257 testpmd> write regbit 0 0xEE00 31 1 1258 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) 1259 1260Filter Functions 1261---------------- 1262 1263This section details the available filter functions that are available. 1264 1265ethertype_filter 1266~~~~~~~~~~~~~~~~~~~~ 1267 1268Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue. 1269 1270ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) ethertype (ether_type) (drop|fwd) queue (queue_id) 1271 1272The available information parameters are: 1273 1274* port_id: the port which the Ethertype filter assigned on. 1275 1276* mac_addr: compare destination mac address. 1277 1278* mac_ignr: ignore destination mac address match. 1279 1280* mac_address: destination mac address to match. 1281 1282* ether_type: the EtherType value want to match, 1283 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. 1284 1285* queue_id : The receive queue associated with this EtherType filter. It is meaningless when deleting or dropping. 1286 1287Example, to add/remove an ethertype filter rule: 1288 1289.. code-block:: console 1290 1291 testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3 1292 testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3 1293 12942tuple_filter 1295~~~~~~~~~~~~~~~~~ 1296 1297Add or delete a 2-tuple filter, 1298which identify packets by specific protocol and destination TCP/UDP port 1299and forwards packets into one of the receive queues. 1300 13012tuple_filter (port_id) (add|del) dst_port (dst_port_value) protocol (protocol_value) 1302mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id) 1303 1304The available information parameters are: 1305 1306* port_id: the port which the 2-tuple filter assigned on. 1307 1308* dst_port_value: destination port in L4. 1309 1310* protocol_value: IP L4 protocol. 1311 1312* mask_value: participates in the match or not by bit for field above, 1b means participate. 1313 1314* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). 1315 1316* prio_value: priority of this filter. 1317 1318* queue_id: The receive queue associated with this 2-tuple filter. 1319 1320Example, to add/remove an 2tuple filter rule: 1321 1322.. code-block:: console 1323 1324 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3 1325 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3 1326 13275tuple_filter 1328~~~~~~~~~~~~~~~~~ 1329 1330Add or delete a 5-tuple filter, 1331which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) 1332and routes packets into one of the receive queues. 1333 13345tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip (src_address) dst_port (dst_port_value) src_port (src_port_value) 1335protocol (protocol_value) mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id) 1336 1337The available information parameters are: 1338 1339* port_id: the port which the 5-tuple filter assigned on. 1340 1341* dst_address: destination IP address. 1342 1343* src_address: source IP address. 1344 1345* dst_port_value: TCP/UDP destination port. 1346 1347* src_port_value: TCP/UDP source port. 1348 1349* protocol_value: L4 protocol. 1350 1351* mask_value: participates in the match or not by bit for field above, 1b means participate 1352 1353* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). 1354 1355* prio_value: the priority of this filter. 1356 1357* queue_id: The receive queue associated with this 5-tuple filter. 1358 1359Example, to add/remove an 5tuple filter rule: 1360 1361.. code-block:: console 1362 1363 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 dst_port 64 src_port 32 protocol 0x06 mask 0x1F flags 0x0 priority 3 queue 3 1364 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 dst_port 64 src_port 32 protocol 0x06 mask 0x1F flags 0x0 priority 3 queue 3 1365 1366syn_filter 1367~~~~~~~~~~~~~~ 1368 1369By SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue. 1370 1371syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) 1372 1373The available information parameters are: 1374 1375* port_id: the port which the SYN filter assigned on. 1376 1377* high: this SYN filter has higher priority than other filters. 1378 1379* low: this SYN filter has lower priority than other filters. 1380 1381* queue_id: The receive queue associated with this SYN filter 1382 1383Example: 1384 1385.. code-block:: console 1386 1387 testpmd> syn_filter 0 add priority high queue 3 1388 1389flex_filter 1390~~~~~~~~~~~ 1391 1392With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet 1393and routes packets into one of the receive queues. 1394 1395flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) 1396mask (mask_value) priority (prio_value) queue (queue_id) 1397 1398The available information parameters are: 1399 1400* port_id: the port which the Flex filter is assigned on. 1401 1402* len_value: filter length in bytes, no greater than 128. 1403 1404* bytes_value: a string in hexadecimal, means the value the flex filter needs to match. 1405 1406* mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match. 1407 1408* prio_value: the priority of this filter. 1409 1410* queue_id: the receive queue associated with this Flex filter. 1411 1412Example: 1413 1414.. code-block:: console 1415 1416 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 1417 mask 000C priority 3 queue 3 1418 1419 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 1420 mask 000C priority 3 queue 3 1421 1422flow_director_filter 1423~~~~~~~~~~~~~~~~~~~~ 1424 1425The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. 1426 1427Two types of filtering are supported which are referred to as Perfect Match and Signature filters, the match mode 1428is set by the --pkt-filter-mode command-line parameter: 1429 1430* Perfect match filters. 1431 The hardware checks a match between the masked fields of the received packets and the programmed filters. 1432 1433* Signature filters. 1434 The hardware checks a match between a hash-based signature of the masked fields of the received packet. 1435 1436The Flow Director filters can match the different fields for different type of packet: flow type, specific input set 1437per flow type and the flexible payload. The Flow Director can also mask out parts of all of these fields so that filters 1438are only applied to certain fields or parts of the fields. 1439 1440Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. 1441 1442# Commands to add flow director filters of different flow types. 1443 1444flow_director_filter (port_id) (add|del|update) flow (ip4|ip4-frag|ip6|ip6-frag) 1445src (src_ip_address) dst (dst_ip_address) vlan (vlan_value) flexbytes (flexbytes_value) 1446(drop|fwd) queue (queue_id) fd_id (fd_id_value) 1447 1448flow_director_filter (port_id) (add|del|update) flow (udp4|tcp4|udp6|tcp6) 1449src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) vlan (vlan_value) 1450flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) 1451 1452flow_director_filter (port_id) (add|del|update) flow (sctp4|sctp6) 1453src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag) 1454vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) 1455 1456For example, to add an udp flow type filter: 1457 1458.. code-block:: console 1459 1460 testpmd> flow_director_filter 0 add flow udp4 src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 1461 1462For example, add an ip4 flow type filter: 1463 1464.. code-block:: console 1465 1466 testpmd> flow_director_filter 0 add flow ip4 src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 1467 1468flush_flow_director 1469~~~~~~~~~~~~~~~~~~~ 1470 1471flush all flow director filters on a device: 1472 1473flush_flow_director (port_id) 1474 1475Example, to flush all flow director filter on port 0: 1476 1477.. code-block:: console 1478 1479 testpmd> flush_flow_director 0 1480 1481flow_director_mask 1482~~~~~~~~~~~~~~~~~~ 1483 1484set flow director's masks on match input set 1485 1486flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port) 1487 1488Example, to set flow director mask on port 0: 1489 1490.. code-block:: console 1491 1492 testpmd> flow_director_mask 0 vlan 0xefff src_mask 255.255.255.255 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF dst_mask 255.255.255.255 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF 1493 1494 1495flow_director_flex_mask 1496~~~~~~~~~~~~~~~~~~~~~~~ 1497 1498set masks of flow director's flexible payload based on certain flow type: 1499 1500flow_director_flex_mask (port_id) flow (raw|ip4|ip4-frag|tcp4|udp4|sctp4|ip6|ip6-frag|tcp6|udp6|sctp6|all) (mask) 1501 1502Example, to set flow director's udpv4 flex mask on port 0: 1503 1504.. code-block:: console 1505 1506 testpmd> flow_director_flex_mask 0 flow all (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 1507 1508 1509flow_director_flex_payload 1510~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 1512Configure flexible payload selection. 1513 1514flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) 1515 1516For example, to select the first 16 bytes from the offset 4 (bytes) of packet’s payload as flexible payload. 1517 1518.. code-block:: console 1519 1520 testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) 1521