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 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries 427 in VFTA table. This is important if enabling all vlan_ids. 428 429rx_vlan rm 430~~~~~~~~~~ 431 432Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID: 433 434rx_vlan rm (vlan_id|all) (port_id) 435 436rx_vlan add(for VF) 437~~~~~~~~~~~~~~~~~~~ 438 439Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID: 440 441rx_vlan add (vlan_id) port (port_id) vf (vf_mask) 442 443rx_vlan rm(for VF) 444~~~~~~~~~~~~~~~~~~ 445 446Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID: 447 448rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) 449 450rx_vlan set tpid 451~~~~~~~~~~~~~~~~ 452 453Set the outer VLAN TPID for packet filtering on a port: 454 455rx_vlan set tpid (value) (port_id) 456 457tunnel_filter add 458~~~~~~~~~~~~~~~~~ 459 460Add a tunnel filter on a port: 461 462tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan) 463 (tunnel_type) (filter_type) (tenant_id) (queue_id) 464 465tunnel_filter remove 466~~~~~~~~~~~~~~~~~~~~ 467 468Remove a tunnel filter on a port: 469 470tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) (inner_vlan) 471 (tunnel_type) (filter_type) (tenant_id) (queue_id) 472 473rx_vxlan_port add 474~~~~~~~~~~~~~~~~~ 475 476Add an UDP port for VXLAN packet filter on a port: 477 478rx_vxlan_port add (udp_port) (port_id) 479 480rx_vxlan_port remove 481~~~~~~~~~~~~~~~~~~~~ 482 483Remove an UDP port for VXLAN packet filter on a port: 484 485rx_vxlan_port rm (udp_port) (port_id) 486 487tx_vlan set 488~~~~~~~~~~~ 489 490Set hardware insertion of VLAN ID in packets sent on a port: 491 492tx_vlan set (vlan_id) (port_id) 493 494tx_vlan set pvid 495~~~~~~~~~~~~~~~~ 496 497Set port based hardware insertion of VLAN ID in pacekts sent on a port: 498 499tx_vlan set pvid (port_id) (vlan_id) (on|off) 500 501tx_vlan reset 502~~~~~~~~~~~~~ 503 504Disable hardware insertion of a VLAN header in packets sent on a port: 505 506tx_vlan reset (port_id) 507 508tx_checksum set 509~~~~~~~~~~~~~~~ 510 511Select hardware or software calculation of the checksum when 512transmitting a packet using the csum forward engine: 513 514tx_cksum set (ip|udp|tcp|sctp|vxlan) 515 516ip|udp|tcp|sctp always concern the inner layer. 517vxlan concerns the outer IP and UDP layer (in case the packet 518is recognized as a vxlan packet by the forward engine) 519 520.. note:: 521 522 Check the NIC Datasheet for hardware limits. 523 524tx_checksum show 525~~~~~~~~~~~~~~~~ 526 527Display tx checksum offload configuration: 528 529tx_checksum show (port_id) 530 531tso set 532~~~~~~~ 533 534Enable TCP Segmentation Offload in csum forward engine: 535 536tso set (segsize) (port_id) 537 538.. note:: 539 Please check the NIC datasheet for HW limits 540 541tso show 542~~~~~~~~ 543 544Display the status of TCP Segmentation Offload: 545 546tso show (port_id) 547 548set fwd 549~~~~~~~ 550 551Set the packet forwarding mode: 552 553set fwd (io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho) 554 555The available information categories are: 556 557* io: forwards packets "as-is" in I/O mode. 558 This is the fastest possible forwarding operation as it does not access packets data. 559 This is the default mode. 560 561* mac: changes the source and the destination Ethernet addresses of packets before forwarding them. 562 563* mac_retry: same as "mac" forwarding mode, but includes retries if the destination queue is full. 564 565* macswap: MAC swap forwarding mode. 566 Swaps the source and the destination Ethernet addresses of packets before forwarding them. 567 568* flowgen: multi-flow generation mode. 569 Originates a bunch of flows (varying destination IP addresses), and terminate receive traffic. 570 571* rxonly: receives packets but doesn't transmit them. 572 573* txonly: generates and transmits packets without receiving any. 574 575* csum: changes the checksum field with HW or SW methods depending on the offload flags on the packet. 576 577* icmpecho: receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies. 578 579 580Example: 581 582.. code-block:: console 583 584 testpmd> set fwd rxonly 585 586 Set rxonly packet forwarding mode 587 588mac_addr add 589~~~~~~~~~~~~ 590 591Add an alternative MAC address to a port: 592 593mac_addr add (port_id) (XX:XX:XX:XX:XX:XX) 594 595mac_addr remove 596~~~~~~~~~~~~~~~ 597 598Remove a MAC address from a port: 599 600mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX) 601 602mac_addr add(for VF) 603~~~~~~~~~~~~~~~~~~~~ 604 605Add an alternative MAC address for a VF to a port: 606 607mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX) 608 609set port-uta 610~~~~~~~~~~~~ 611 612Set the unicast hash filter(s) on/off for a port X: 613 614set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off) 615 616set promisc 617~~~~~~~~~~~ 618 619Set the promiscuous mode on for a port or for all ports. 620In promiscuous mode packets are not dropped if they aren't for the specified MAC address: 621 622set promisc (port_id|all) (on|off) 623 624set allmulti 625~~~~~~~~~~~~ 626 627Set the allmulti mode for a port or for all ports: 628 629set allmulti (port_id|all) (on|off) 630 631Same as the ifconfig (8) option. Controls how multicast packets are handled. 632 633set flow_ctrl rx 634~~~~~~~~~~~~~~~~ 635 636Set the link flow control parameter on a port: 637 638set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 639(pause_time) (send_xon) (port_id) 640 641Where: 642 643high_water (integer): High threshold value to trigger XOFF. 644 645low_water (integer) : Low threshold value to trigger XON. 646 647pause_time (integer): Pause quota in the Pause frame. 648 649send_xon (0/1) : Send XON frame. 650 651mac_ctrl_frame_fwd : Enable receiving MAC control frames 652 653set pfc_ctrl rx 654~~~~~~~~~~~~~~~ 655 656Set the priority flow control parameter on a port: 657 658set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ (pause_time) (priority) (port_id) 659 660Where: 661 662priority (0-7): VLAN User Priority. 663 664set stat_qmap 665~~~~~~~~~~~~~ 666 667Set statistics mapping (qmapping 0..15) for RX/TX queue on port: 668 669set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping) 670 671For example, to set rx queue 2 on port 0 to mapping 5: 672 673.. code-block:: console 674 675 testpmd>set stat_qmap rx 0 2 5 676 677set port - rx/tx(for VF) 678~~~~~~~~~~~~~~~~~~~~~~~~ 679 680Set VF receive/transmit from a port: 681 682set port (port_id) vf (vf_id) (rx|tx) (on|off) 683 684set port - mac address filter (for VF) 685~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 686 687Add/Remove unicast or multicast MAC addr filter for a VF: 688 689set port (port_id) vf (vf_id) (mac_addr) 690 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) 691 692set port - rx mode(for VF) 693~~~~~~~~~~~~~~~~~~~~~~~~~~ 694 695Set the VF receive mode of a port: 696 697set port (port_id) vf (vf_id) rxmode (AUPE|ROPE|BAM|MPE) (on|off) 698 699The available receive modes are: 700 701* AUPE: accepts untagged VLAN. 702 703* ROPE: accepts unicast hash. 704 705* BAM: accepts broadcast packets 706 707* MPE: accepts all multicast packets 708 709set port - tx_rate (for Queue) 710~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 711 712Set TX rate limitation for queue of a port ID: 713 714set port (port_id) queue (queue_id) rate (rate_value) 715 716set port - tx_rate (for VF) 717~~~~~~~~~~~~~~~~~~~~~~~~~~~ 718 719Set TX rate limitation for queues in VF of a port ID: 720 721set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) 722 723set port - mirror rule 724~~~~~~~~~~~~~~~~~~~~~~ 725 726Set port or vlan type mirror rule for a port. 727 728set port (port_id) mirror-rule (rule_id) (pool-mirror|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) 729 730For example to enable mirror traffic with vlan 0,1 to pool 0: 731 732.. code-block:: console 733 734 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on 735 736reset port - mirror rule 737~~~~~~~~~~~~~~~~~~~~~~~~ 738 739Reset a mirror rule for a port. 740 741reset port (port_id) mirror-rule (rule_id) 742 743set flush_rx 744~~~~~~~~~~~~ 745 746Flush (default) or don't flush RX streams before forwarding. 747Mainly used with PCAP drivers to avoid the default behavior of flushing the first 512 packets on RX streams. 748 749set flush_rx off 750 751set bypass mode 752~~~~~~~~~~~~~~~ 753 754Set the bypass mode for the lowest port on bypass enabled NIC. 755 756set bypass mode (normal|bypass|isolate) (port_id) 757 758set bypass event 759~~~~~~~~~~~~~~~~ 760 761Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled NIC where: 762 763* timeout: enable bypass after watchdog timeout. 764 765* os_on: enable bypass when OS/board is powered on. 766 767* os_off: enable bypass when OS/board is powered off. 768 769* power_on: enable bypass when power supply is turned on. 770 771* power_off: enable bypass when power supply is turned off. 772 773set bypass event (timeout|os_on|os_off|power_on|power_off) mode (normal|bypass|isolate) (port_id) 774 775set bypass timeout 776~~~~~~~~~~~~~~~~~~ 777 778Set the bypass watchdog timeout to 'n' seconds where 0 = instant. 779 780set bypass timeout (0|1.5|2|3|4|8|16|32) 781 782show bypass config 783~~~~~~~~~~~~~~~~~~ 784 785Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC. 786 787show bypass config (port_id) 788 789set link up 790~~~~~~~~~~~ 791 792Set link up for a port. 793 794set link-up port (port id) 795 796set link down 797~~~~~~~~~~~~~ 798 799Set link down for a port. 800 801set link-down port (port id) 802 803Port Functions 804-------------- 805 806The following sections show functions for configuring ports. 807 808.. note:: 809 810 Port configuration changes only become active when forwarding is started/restarted. 811 812port attach 813~~~~~~~~~~~ 814 815Attach a port specified by pci address or virtual device args. 816 817To attach a new pci device, the device should be recognized by kernel first. 818Then it should be moved under DPDK management. 819Finally the port can be attached to testpmd. 820On the other hand, to attach a port created by virtual device, above steps are not needed. 821 822port attach (identifier) 823 824For example, to attach a port whose pci address is 0000:02:00.0. 825 826.. code-block:: console 827 828 testpmd> port attach 0000:02:00.0 829 Attaching a new port... 830 ... snip ... 831 Port 0 is attached. Now total ports is 1 832 Done 833 834For example, to attach a port created by pcap PMD. 835 836.. code-block:: console 837 838 testpmd> port attach eth_pcap0,iface=eth0 839 Attaching a new port... 840 ... snip ... 841 Port 0 is attached. Now total ports is 1 842 Done 843 844In this case, identifier is "eth_pcap0,iface=eth0". 845This identifier format is the same as "--vdev" format of DPDK applications. 846 847port detach 848~~~~~~~~~~~ 849 850Detach a specific port. 851 852Before detaching a port, the port should be closed. 853Also to remove a pci device completely from the system, first detach the port from testpmd. 854Then the device should be moved under kernel management. 855Finally the device can be removed using kernel pci hotplug functionality. 856On the other hand, to remove a port created by a virtual device, above steps are not needed. 857 858port detach (port_id) 859 860For example, to detach a port 0. 861 862.. code-block:: console 863 864 testpmd> port detach 0 865 Detaching a port... 866 ... snip ... 867 Done 868 869port start 870~~~~~~~~~~ 871 872Start all ports or a specific port: 873 874port start (port_id|all) 875 876port stop 877~~~~~~~~~ 878 879Stop all ports or a specific port: 880 881port stop (port_id|all) 882 883port close 884~~~~~~~~~~ 885 886Close all ports or a specific port: 887 888port close (port_id|all) 889 890port start/stop queue 891~~~~~~~~~~~~~~~~~~~~~ 892 893Start/stop a rx/tx queue on a specific port: 894 895port (port_id) (rxq|txq) (queue_id) (start|stop) 896 897Only take effect when port is started. 898 899port config - speed 900~~~~~~~~~~~~~~~~~~~ 901 902Set the speed and duplex mode for all ports or a specific port: 903 904port config (port_id|all) speed (10|100|1000|10000|auto) duplex (half|full|auto) 905 906port config - queues/descriptors 907~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 908 909Set number of queues/descriptors for rxq, txq, rxd and txd: 910 911port config all (rxq|txq|rxd|txd) (value) 912 913This is equivalent to the --rxq, --txq, --rxd and --txd command-line options. 914 915port config - max-pkt-len 916~~~~~~~~~~~~~~~~~~~~~~~~~ 917 918Set the maximum packet length: 919 920port config all max-pkt-len (value) 921 922This is equivalent to the --max-pkt-len command-line option. 923 924port config - CRC Strip 925~~~~~~~~~~~~~~~~~~~~~~~ 926 927Set hardware CRC stripping on or off for all ports: 928 929port config all crc-strip (on|off) 930 931CRC stripping is off by default. 932 933The on option is equivalent to the --crc-strip command-line option. 934 935port config - RX Checksum 936~~~~~~~~~~~~~~~~~~~~~~~~~ 937 938Set hardware RX checksum offload to on or off for all ports: 939 940port config all rx-cksum (on|off) 941 942Checksum offload is off by default. 943 944The on option is equivalent to the --enable-rx-cksum command-line option. 945 946port config - VLAN 947~~~~~~~~~~~~~~~~~~ 948 949Set hardware VLAN on or off for all ports: 950 951port config all hw-vlan (on|off) 952 953Hardware VLAN is on by default. 954 955The off option is equivalent to the --disable-hw-vlan command-line option. 956 957port config - VLAN filter 958~~~~~~~~~~~~~~~~~~~~~~~~~ 959 960Set hardware VLAN filter on or off for all ports: 961 962port config all hw-vlan-filter (on|off) 963 964Hardware VLAN filter is on by default. 965 966The off option is equivalent to the --disable-hw-vlan-filter command-line option. 967 968port config - VLAN strip 969~~~~~~~~~~~~~~~~~~~~~~~~ 970 971Set hardware VLAN strip on or off for all ports: 972 973port config all hw-vlan-strip (on|off) 974 975Hardware VLAN strip is on by default. 976 977The off option is equivalent to the --disable-hw-vlan-strip command-line option. 978 979port config - VLAN extend 980~~~~~~~~~~~~~~~~~~~~~~~~~ 981 982Set hardware VLAN extend on or off for all ports: 983 984port config all hw-vlan-extend (on|off) 985 986Hardware VLAN extend is off by default. 987 988The off option is equivalent to the --disable-hw-vlan-extend command-line option. 989 990port config - Drop Packets 991~~~~~~~~~~~~~~~~~~~~~~~~~~ 992 993Set packet drop for packets with no descriptors on or off for all ports: 994 995port config all drop-en (on|off) 996 997Packet dropping for packets with no descriptors is off by default. 998 999The on option is equivalent to the --enable-drop-en command-line option. 1000 1001port config - RSS 1002~~~~~~~~~~~~~~~~~ 1003 1004Set the RSS (Receive Side Scaling) mode on or off: 1005 1006port config all rss (ip|udp|none) 1007 1008RSS is on by default. 1009 1010The off option is equivalent to the --disable-rss command-line option. 1011 1012port config - RSS Reta 1013~~~~~~~~~~~~~~~~~~~~~~ 1014 1015Set the RSS (Receive Side Scaling) redirection table: 1016 1017port config all rss reta (hash,queue)[,(hash,queue)] 1018 1019port config - DCB 1020~~~~~~~~~~~~~~~~~ 1021 1022Set the DCB mode for an individual port: 1023 1024port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) 1025 1026The traffic class should be 4 or 8. 1027 1028port config - Burst 1029~~~~~~~~~~~~~~~~~~~ 1030 1031Set the number of packets per burst: 1032 1033port config all burst (value) 1034 1035This is equivalent to the --burst command-line option. 1036 1037port config - Threshold 1038~~~~~~~~~~~~~~~~~~~~~~~ 1039 1040Set thresholds for TX/RX queues: 1041 1042port config all (threshold) (value) 1043 1044Where the threshold type can be: 1045 1046* txpt: Set the prefetch threshold register of the TX rings, 0 <= value <= 255. 1047 1048* txht: Set the host threshold register of the TX rings, 0 <= value <= 255. 1049 1050* txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255. 1051 1052* rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255. 1053 1054* rxht: Set the host threshold register of the RX rings, 0 <= value <= 255. 1055 1056* rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255. 1057 1058* txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd. 1059 1060* rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd. 1061 1062* txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. 1063 These threshold options are also available from the command-line. 1064 1065Link Bonding Functions 1066---------------------- 1067 1068The Link Bonding functions make it possible to dynamically create and 1069manage link bonding devices from within testpmd interactive prompt. 1070 1071create bonded device 1072~~~~~~~~~~~~~~~~~~~~ 1073 1074Create a new bonding device: 1075 1076create bonded device (mode) (socket) 1077 1078For example, to create a bonded device in mode 1 on socket 0. 1079 1080.. code-block:: console 1081 1082 testpmd> create bonded 1 0 1083 created new bonded device (port X) 1084 1085add bonding slave 1086~~~~~~~~~~~~~~~~~ 1087 1088Adds Ethernet device to a Link Bonding device: 1089 1090add bonding slave (slave id) (port id) 1091 1092For example, to add Ethernet device (port 6) to a Link Bonding device (port 10). 1093 1094.. code-block:: console 1095 1096 testpmd> add bonding slave 6 10 1097 1098 1099remove bonding slave 1100~~~~~~~~~~~~~~~~~~~~ 1101 1102Removes an Ethernet slave device from a Link Bonding device: 1103 1104remove bonding slave (slave id) (port id) 1105 1106For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10). 1107 1108.. code-block:: console 1109 1110 testpmd> remove bonding slave 6 10 1111 1112set bonding mode 1113~~~~~~~~~~~~~~~~ 1114 1115Set the Link Bonding mode of a Link Bonding device: 1116 1117set bonding mode (value) (port id) 1118 1119For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3). 1120 1121.. code-block:: console 1122 1123 testpmd> set bonding mode 3 10 1124 1125set bonding primary 1126~~~~~~~~~~~~~~~~~~~ 1127 1128Set an Ethernet slave device as the primary device on a Link Bonding device: 1129 1130set bonding primary (slave id) (port id) 1131 1132For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10). 1133 1134.. code-block:: console 1135 1136 testpmd> set bonding primary 6 10 1137 1138set bonding mac 1139~~~~~~~~~~~~~~~ 1140 1141Set the MAC address of a Link Bonding device: 1142 1143set bonding mac (port id) (mac) 1144 1145For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01 1146 1147.. code-block:: console 1148 1149 testpmd> set bonding mac 10 00:00:00:00:00:01 1150 1151set bonding xmit_balance_policy 1152~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 1154Set the transmission policy for a Link Bonding device when it is in Balance XOR mode: 1155 1156set bonding xmit_balance_policy (port_id) (l2|l23|l34) 1157 1158For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports ) 1159 1160.. code-block:: console 1161 1162 testpmd> set bonding xmit_balance_policy 10 l34 1163 1164 1165set bonding mon_period 1166~~~~~~~~~~~~~~~~~~~~~~ 1167 1168Set the link status monitoring polling period in milliseconds for a bonding devicie. 1169 1170This adds support for PMD slave devices which do not support link status interrupts. 1171When the mon_period is set to a value greater than 0 then all PMD's which do not support 1172link status ISR will be queried every polling interval to check if their link status has changed. 1173 1174set bonding mon_period (port_id) (value) 1175 1176For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms 1177 1178.. code-block:: console 1179 1180 testpmd> set bonding mon_period 5 150 1181 1182 1183show bonding config 1184~~~~~~~~~~~~~~~~~~~ 1185 1186Show the current configuration of a Link Bonding device: 1187 1188show bonding config (port id) 1189 1190For example, 1191to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) 1192in balance mode with a transmission policy of layer 2+3. 1193 1194.. code-block:: console 1195 1196 testpmd> show bonding config 9 1197 Bonding mode: 2 1198 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 1199 Slaves (3): [1 3 4] 1200 Active Slaves (3): [1 3 4] 1201 Primary: [3] 1202 1203Register Functions 1204------------------ 1205 1206The Register functions can be used to read from and write to registers on the network card referenced by a port number. 1207This is mainly useful for debugging purposes. 1208Reference should be made to the appropriate datasheet for the network card for details on the register addresses 1209and fields that can be accessed. 1210 1211read reg 1212~~~~~~~~ 1213 1214Display the value of a port register: 1215 1216read reg (port_id) (address) 1217 1218For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel® 82599 10 GbE Controller: 1219 1220.. code-block:: console 1221 1222 testpmd> read reg 0 0xEE00 1223 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) 1224 1225read regfield 1226~~~~~~~~~~~~~ 1227 1228Display a port register bit field: 1229 1230read regfield (port_id) (address) (bit_x) (bit_y) 1231 1232For example, reading the lowest two bits from the register in the example above: 1233 1234.. code-block:: console 1235 1236 testpmd> read regfield 0 0xEE00 0 1 1237 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) 1238 1239read regbit 1240~~~~~~~~~~~ 1241 1242Display a single port register bit: 1243 1244read regbit (port_id) (address) (bit_x) 1245 1246For example, reading the lowest bit from the register in the example above: 1247 1248.. code-block:: console 1249 1250 testpmd> read regbit 0 0xEE00 0 1251 port 0 PCI register at offset 0xEE00: bit 0=1 1252 1253write reg 1254~~~~~~~~~ 1255 1256Set the value of a port register: 1257 1258write reg (port_id) (address) (value) 1259 1260For example, to clear a register: 1261 1262.. code-block:: console 1263 1264 testpmd> write reg 0 0xEE00 0x0 1265 port 0 PCI register at offset 0xEE00: 0x00000000 (0) 1266 1267write regfield 1268~~~~~~~~~~~~~~ 1269 1270Set bit field of a port register: 1271 1272write regfield (port_id) (address) (bit_x) (bit_y) (value) 1273 1274For example, writing to the register cleared in the example above: 1275 1276.. code-block:: console 1277 1278 testpmd> write regfield 0 0xEE00 0 1 2 1279 port 0 PCI register at offset 0xEE00: 0x00000002 (2) 1280 1281write regbit 1282~~~~~~~~~~~~ 1283 1284Set single bit value of a port register: 1285 1286write regbit (port_id) (address) (bit_x) (value) 1287 1288For example, to set the high bit in the register from the example above: 1289 1290.. code-block:: console 1291 1292 testpmd> write regbit 0 0xEE00 31 1 1293 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) 1294 1295Filter Functions 1296---------------- 1297 1298This section details the available filter functions that are available. 1299 1300ethertype_filter 1301~~~~~~~~~~~~~~~~~~~~ 1302 1303Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue. 1304 1305ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) ethertype (ether_type) (drop|fwd) queue (queue_id) 1306 1307The available information parameters are: 1308 1309* port_id: the port which the Ethertype filter assigned on. 1310 1311* mac_addr: compare destination mac address. 1312 1313* mac_ignr: ignore destination mac address match. 1314 1315* mac_address: destination mac address to match. 1316 1317* ether_type: the EtherType value want to match, 1318 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. 1319 1320* queue_id : The receive queue associated with this EtherType filter. It is meaningless when deleting or dropping. 1321 1322Example, to add/remove an ethertype filter rule: 1323 1324.. code-block:: console 1325 1326 testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3 1327 testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3 1328 13292tuple_filter 1330~~~~~~~~~~~~~~~~~ 1331 1332Add or delete a 2-tuple filter, 1333which identify packets by specific protocol and destination TCP/UDP port 1334and forwards packets into one of the receive queues. 1335 13362tuple_filter (port_id) (add|del) dst_port (dst_port_value) protocol (protocol_value) 1337mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id) 1338 1339The available information parameters are: 1340 1341* port_id: the port which the 2-tuple filter assigned on. 1342 1343* dst_port_value: destination port in L4. 1344 1345* protocol_value: IP L4 protocol. 1346 1347* mask_value: participates in the match or not by bit for field above, 1b means participate. 1348 1349* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). 1350 1351* prio_value: priority of this filter. 1352 1353* queue_id: The receive queue associated with this 2-tuple filter. 1354 1355Example, to add/remove an 2tuple filter rule: 1356 1357.. code-block:: console 1358 1359 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3 1360 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3 1361 13625tuple_filter 1363~~~~~~~~~~~~~~~~~ 1364 1365Add or delete a 5-tuple filter, 1366which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) 1367and routes packets into one of the receive queues. 1368 13695tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip (src_address) dst_port (dst_port_value) src_port (src_port_value) 1370protocol (protocol_value) mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id) 1371 1372The available information parameters are: 1373 1374* port_id: the port which the 5-tuple filter assigned on. 1375 1376* dst_address: destination IP address. 1377 1378* src_address: source IP address. 1379 1380* dst_port_value: TCP/UDP destination port. 1381 1382* src_port_value: TCP/UDP source port. 1383 1384* protocol_value: L4 protocol. 1385 1386* mask_value: participates in the match or not by bit for field above, 1b means participate 1387 1388* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). 1389 1390* prio_value: the priority of this filter. 1391 1392* queue_id: The receive queue associated with this 5-tuple filter. 1393 1394Example, to add/remove an 5tuple filter rule: 1395 1396.. code-block:: console 1397 1398 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 1399 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 1400 1401syn_filter 1402~~~~~~~~~~~~~~ 1403 1404By SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue. 1405 1406syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) 1407 1408The available information parameters are: 1409 1410* port_id: the port which the SYN filter assigned on. 1411 1412* high: this SYN filter has higher priority than other filters. 1413 1414* low: this SYN filter has lower priority than other filters. 1415 1416* queue_id: The receive queue associated with this SYN filter 1417 1418Example: 1419 1420.. code-block:: console 1421 1422 testpmd> syn_filter 0 add priority high queue 3 1423 1424flex_filter 1425~~~~~~~~~~~ 1426 1427With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet 1428and routes packets into one of the receive queues. 1429 1430flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) 1431mask (mask_value) priority (prio_value) queue (queue_id) 1432 1433The available information parameters are: 1434 1435* port_id: the port which the Flex filter is assigned on. 1436 1437* len_value: filter length in bytes, no greater than 128. 1438 1439* bytes_value: a string in hexadecimal, means the value the flex filter needs to match. 1440 1441* mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match. 1442 1443* prio_value: the priority of this filter. 1444 1445* queue_id: the receive queue associated with this Flex filter. 1446 1447Example: 1448 1449.. code-block:: console 1450 1451 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 1452 mask 000C priority 3 queue 3 1453 1454 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 1455 mask 000C priority 3 queue 3 1456 1457flow_director_filter 1458~~~~~~~~~~~~~~~~~~~~ 1459 1460The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. 1461 1462Two types of filtering are supported which are referred to as Perfect Match and Signature filters, the match mode 1463is set by the --pkt-filter-mode command-line parameter: 1464 1465* Perfect match filters. 1466 The hardware checks a match between the masked fields of the received packets and the programmed filters. 1467 1468* Signature filters. 1469 The hardware checks a match between a hash-based signature of the masked fields of the received packet. 1470 1471The Flow Director filters can match the different fields for different type of packet: flow type, specific input set 1472per flow type and the flexible payload. The Flow Director can also mask out parts of all of these fields so that filters 1473are only applied to certain fields or parts of the fields. 1474 1475Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. 1476 1477# Commands to add flow director filters of different flow types. 1478 1479flow_director_filter (port_id) (add|del|update) flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) 1480src (src_ip_address) dst (dst_ip_address) vlan (vlan_value) flexbytes (flexbytes_value) 1481(drop|fwd) queue (queue_id) fd_id (fd_id_value) 1482 1483flow_director_filter (port_id) (add|del|update) flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) 1484src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) vlan (vlan_value) 1485flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) 1486 1487flow_director_filter (port_id) (add|del|update) flow (ipv4-sctp|ipv6-sctp) 1488src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag) 1489vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) 1490 1491For example, to add an ipv4-udp flow type filter: 1492 1493.. code-block:: console 1494 1495 testpmd> flow_director_filter 0 add flow ipv4-udp src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 1496 1497For example, add an ipv4-other flow type filter: 1498 1499.. code-block:: console 1500 1501 testpmd> flow_director_filter 0 add flow ipv4-other src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 1502 1503flush_flow_director 1504~~~~~~~~~~~~~~~~~~~ 1505 1506flush all flow director filters on a device: 1507 1508flush_flow_director (port_id) 1509 1510Example, to flush all flow director filter on port 0: 1511 1512.. code-block:: console 1513 1514 testpmd> flush_flow_director 0 1515 1516flow_director_mask 1517~~~~~~~~~~~~~~~~~~ 1518 1519set flow director's masks on match input set 1520 1521flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port) 1522 1523Example, to set flow director mask on port 0: 1524 1525.. code-block:: console 1526 1527 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 1528 1529 1530flow_director_flex_mask 1531~~~~~~~~~~~~~~~~~~~~~~~ 1532 1533set masks of flow director's flexible payload based on certain flow type: 1534 1535flow_director_flex_mask (port_id) flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| 1536ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|all) (mask) 1537 1538Example, to set flow director's flex mask for all flow type on port 0: 1539 1540.. code-block:: console 1541 1542 testpmd> flow_director_flex_mask 0 flow all (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 1543 1544 1545flow_director_flex_payload 1546~~~~~~~~~~~~~~~~~~~~~~~~~~ 1547 1548Configure flexible payload selection. 1549 1550flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) 1551 1552For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload. 1553 1554.. code-block:: console 1555 1556 testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) 1557