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 - Drop Packets 958~~~~~~~~~~~~~~~~~~~~~~~~~~ 959 960Set packet drop for packets with no descriptors on or off for all ports: 961 962port config all drop-en (on|off) 963 964Packet dropping for packets with no descriptors is off by default. 965 966The on option is equivalent to the --enable-drop-en command-line option. 967 968port config - RSS 969~~~~~~~~~~~~~~~~~ 970 971Set the RSS (Receive Side Scaling) mode on or off: 972 973port config all rss (ip|udp|none) 974 975RSS is on by default. 976 977The off option is equivalent to the --disable-rss command-line option. 978 979port config - RSS Reta 980~~~~~~~~~~~~~~~~~~~~~~ 981 982Set the RSS (Receive Side Scaling) redirection table: 983 984port config all rss reta (hash,queue)[,(hash,queue)] 985 986port config - DCB 987~~~~~~~~~~~~~~~~~ 988 989Set the DCB mode for an individual port: 990 991port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) 992 993The traffic class should be 4 or 8. 994 995port config - Burst 996~~~~~~~~~~~~~~~~~~~ 997 998Set the number of packets per burst: 999 1000port config all burst (value) 1001 1002This is equivalent to the --burst command-line option. 1003 1004port config - Threshold 1005~~~~~~~~~~~~~~~~~~~~~~~ 1006 1007Set thresholds for TX/RX queues: 1008 1009port config all (threshold) (value) 1010 1011Where the threshold type can be: 1012 1013* txpt: Set the prefetch threshold register of the TX rings, 0 <= value <= 255. 1014 1015* txht: Set the host threshold register of the TX rings, 0 <= value <= 255. 1016 1017* txwt: Set the write-back threshold register of the TX rings, 0 <= value <= 255. 1018 1019* rxpt: Set the prefetch threshold register of the RX rings, 0 <= value <= 255. 1020 1021* rxht: Set the host threshold register of the RX rings, 0 <= value <= 255. 1022 1023* rxwt: Set the write-back threshold register of the RX rings, 0 <= value <= 255. 1024 1025* txfreet: Set the transmit free threshold of the TX rings, 0 <= value <= txd. 1026 1027* rxfreet: Set the transmit free threshold of the RX rings, 0 <= value <= rxd. 1028 1029* txrst: Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. 1030 These threshold options are also available from the command-line. 1031 1032Link Bonding Functions 1033---------------------- 1034 1035The Link Bonding functions make it possible to dynamically create and 1036manage link bonding devices from within testpmd interactive prompt. 1037 1038create bonded device 1039~~~~~~~~~~~~~~~~~~~~ 1040 1041Create a new bonding device: 1042 1043create bonded device (mode) (socket) 1044 1045For example, to create a bonded device in mode 1 on socket 0. 1046 1047.. code-block:: console 1048 1049 testpmd> create bonded 1 0 1050 created new bonded device (port X) 1051 1052add bonding slave 1053~~~~~~~~~~~~~~~~~ 1054 1055Adds Ethernet device to a Link Bonding device: 1056 1057add bonding slave (slave id) (port id) 1058 1059For example, to add Ethernet device (port 6) to a Link Bonding device (port 10). 1060 1061.. code-block:: console 1062 1063 testpmd> add bonding slave 6 10 1064 1065 1066remove bonding slave 1067~~~~~~~~~~~~~~~~~~~~ 1068 1069Removes an Ethernet slave device from a Link Bonding device: 1070 1071remove bonding slave (slave id) (port id) 1072 1073For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10). 1074 1075.. code-block:: console 1076 1077 testpmd> remove bonding slave 6 10 1078 1079set bonding mode 1080~~~~~~~~~~~~~~~~ 1081 1082Set the Link Bonding mode of a Link Bonding device: 1083 1084set bonding mode (value) (port id) 1085 1086For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3). 1087 1088.. code-block:: console 1089 1090 testpmd> set bonding mode 3 10 1091 1092set bonding primary 1093~~~~~~~~~~~~~~~~~~~ 1094 1095Set an Ethernet slave device as the primary device on a Link Bonding device: 1096 1097set bonding primary (slave id) (port id) 1098 1099For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10). 1100 1101.. code-block:: console 1102 1103 testpmd> set bonding primary 6 10 1104 1105set bonding mac 1106~~~~~~~~~~~~~~~ 1107 1108Set the MAC address of a Link Bonding device: 1109 1110set bonding mac (port id) (mac) 1111 1112For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01 1113 1114.. code-block:: console 1115 1116 testpmd> set bonding mac 10 00:00:00:00:00:01 1117 1118set bonding xmit_balance_policy 1119~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1120 1121Set the transmission policy for a Link Bonding device when it is in Balance XOR mode: 1122 1123set bonding xmit_balance_policy (port_id) (l2|l23|l34) 1124 1125For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports ) 1126 1127.. code-block:: console 1128 1129 testpmd> set bonding xmit_balance_policy 10 l34 1130 1131 1132set bonding mon_period 1133~~~~~~~~~~~~~~~~~~~~~~ 1134 1135Set the link status monitoring polling period in milliseconds for a bonding devicie. 1136 1137This adds support for PMD slave devices which do not support link status interrupts. 1138When the mon_period is set to a value greater than 0 then all PMD's which do not support 1139link status ISR will be queried every polling interval to check if their link status has changed. 1140 1141set bonding mon_period (port_id) (value) 1142 1143For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms 1144 1145.. code-block:: console 1146 1147 testpmd> set bonding mon_period 5 150 1148 1149 1150show bonding config 1151~~~~~~~~~~~~~~~~~~~ 1152 1153Show the current configuration of a Link Bonding device: 1154 1155show bonding config (port id) 1156 1157For example, 1158to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) 1159in balance mode with a transmission policy of layer 2+3. 1160 1161.. code-block:: console 1162 1163 testpmd> show bonding config 9 1164 Bonding mode: 2 1165 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 1166 Slaves (3): [1 3 4] 1167 Active Slaves (3): [1 3 4] 1168 Primary: [3] 1169 1170Register Functions 1171------------------ 1172 1173The Register functions can be used to read from and write to registers on the network card referenced by a port number. 1174This is mainly useful for debugging purposes. 1175Reference should be made to the appropriate datasheet for the network card for details on the register addresses 1176and fields that can be accessed. 1177 1178read reg 1179~~~~~~~~ 1180 1181Display the value of a port register: 1182 1183read reg (port_id) (address) 1184 1185For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel® 82599 10 GbE Controller: 1186 1187.. code-block:: console 1188 1189 testpmd> read reg 0 0xEE00 1190 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) 1191 1192read regfield 1193~~~~~~~~~~~~~ 1194 1195Display a port register bit field: 1196 1197read regfield (port_id) (address) (bit_x) (bit_y) 1198 1199For example, reading the lowest two bits from the register in the example above: 1200 1201.. code-block:: console 1202 1203 testpmd> read regfield 0 0xEE00 0 1 1204 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) 1205 1206read regbit 1207~~~~~~~~~~~ 1208 1209Display a single port register bit: 1210 1211read regbit (port_id) (address) (bit_x) 1212 1213For example, reading the lowest bit from the register in the example above: 1214 1215.. code-block:: console 1216 1217 testpmd> read regbit 0 0xEE00 0 1218 port 0 PCI register at offset 0xEE00: bit 0=1 1219 1220write reg 1221~~~~~~~~~ 1222 1223Set the value of a port register: 1224 1225write reg (port_id) (address) (value) 1226 1227For example, to clear a register: 1228 1229.. code-block:: console 1230 1231 testpmd> write reg 0 0xEE00 0x0 1232 port 0 PCI register at offset 0xEE00: 0x00000000 (0) 1233 1234write regfield 1235~~~~~~~~~~~~~~ 1236 1237Set bit field of a port register: 1238 1239write regfield (port_id) (address) (bit_x) (bit_y) (value) 1240 1241For example, writing to the register cleared in the example above: 1242 1243.. code-block:: console 1244 1245 testpmd> write regfield 0 0xEE00 0 1 2 1246 port 0 PCI register at offset 0xEE00: 0x00000002 (2) 1247 1248write regbit 1249~~~~~~~~~~~~ 1250 1251Set single bit value of a port register: 1252 1253write regbit (port_id) (address) (bit_x) (value) 1254 1255For example, to set the high bit in the register from the example above: 1256 1257.. code-block:: console 1258 1259 testpmd> write regbit 0 0xEE00 31 1 1260 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) 1261 1262Filter Functions 1263---------------- 1264 1265This section details the available filter functions that are available. 1266 1267ethertype_filter 1268~~~~~~~~~~~~~~~~~~~~ 1269 1270Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue. 1271 1272ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) ethertype (ether_type) (drop|fwd) queue (queue_id) 1273 1274The available information parameters are: 1275 1276* port_id: the port which the Ethertype filter assigned on. 1277 1278* mac_addr: compare destination mac address. 1279 1280* mac_ignr: ignore destination mac address match. 1281 1282* mac_address: destination mac address to match. 1283 1284* ether_type: the EtherType value want to match, 1285 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. 1286 1287* queue_id : The receive queue associated with this EtherType filter. It is meaningless when deleting or dropping. 1288 1289Example, to add/remove an ethertype filter rule: 1290 1291.. code-block:: console 1292 1293 testpmd> ethertype_filter 0 add mac_ignr ethertype 0x0806 fwd queue 3 1294 testpmd> ethertype_filter 0 del mac_ignr ethertype 0x0806 fwd queue 3 1295 12962tuple_filter 1297~~~~~~~~~~~~~~~~~ 1298 1299Add or delete a 2-tuple filter, 1300which identify packets by specific protocol and destination TCP/UDP port 1301and forwards packets into one of the receive queues. 1302 13032tuple_filter (port_id) (add|del) dst_port (dst_port_value) protocol (protocol_value) 1304mask (mask_value) tcp_flags (tcp_flags_value) priority (prio_value) queue (queue_id) 1305 1306The available information parameters are: 1307 1308* port_id: the port which the 2-tuple filter assigned on. 1309 1310* dst_port_value: destination port in L4. 1311 1312* protocol_value: IP L4 protocol. 1313 1314* mask_value: participates in the match or not by bit for field above, 1b means participate. 1315 1316* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). 1317 1318* prio_value: priority of this filter. 1319 1320* queue_id: The receive queue associated with this 2-tuple filter. 1321 1322Example, to add/remove an 2tuple filter rule: 1323 1324.. code-block:: console 1325 1326 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3 1327 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 tcp_flags 0x02 priority 3 queue 3 1328 13295tuple_filter 1330~~~~~~~~~~~~~~~~~ 1331 1332Add or delete a 5-tuple filter, 1333which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) 1334and routes packets into one of the receive queues. 1335 13365tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip (src_address) dst_port (dst_port_value) src_port (src_port_value) 1337protocol (protocol_value) mask (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 5-tuple filter assigned on. 1342 1343* dst_address: destination IP address. 1344 1345* src_address: source IP address. 1346 1347* dst_port_value: TCP/UDP destination port. 1348 1349* src_port_value: TCP/UDP source port. 1350 1351* protocol_value: L4 protocol. 1352 1353* mask_value: participates in the match or not by bit for field above, 1b means participate 1354 1355* tcp_flags_value: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). 1356 1357* prio_value: the priority of this filter. 1358 1359* queue_id: The receive queue associated with this 5-tuple filter. 1360 1361Example, to add/remove an 5tuple filter rule: 1362 1363.. code-block:: console 1364 1365 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 1366 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 1367 1368syn_filter 1369~~~~~~~~~~~~~~ 1370 1371By SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue. 1372 1373syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) 1374 1375The available information parameters are: 1376 1377* port_id: the port which the SYN filter assigned on. 1378 1379* high: this SYN filter has higher priority than other filters. 1380 1381* low: this SYN filter has lower priority than other filters. 1382 1383* queue_id: The receive queue associated with this SYN filter 1384 1385Example: 1386 1387.. code-block:: console 1388 1389 testpmd> syn_filter 0 add priority high queue 3 1390 1391flex_filter 1392~~~~~~~~~~~ 1393 1394With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet 1395and routes packets into one of the receive queues. 1396 1397flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) 1398mask (mask_value) priority (prio_value) queue (queue_id) 1399 1400The available information parameters are: 1401 1402* port_id: the port which the Flex filter is assigned on. 1403 1404* len_value: filter length in bytes, no greater than 128. 1405 1406* bytes_value: a string in hexadecimal, means the value the flex filter needs to match. 1407 1408* mask_value: a string in hexadecimal, bit 1 means corresponding byte participates in the match. 1409 1410* prio_value: the priority of this filter. 1411 1412* queue_id: the receive queue associated with this Flex filter. 1413 1414Example: 1415 1416.. code-block:: console 1417 1418 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 1419 mask 000C priority 3 queue 3 1420 1421 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 1422 mask 000C priority 3 queue 3 1423 1424flow_director_filter 1425~~~~~~~~~~~~~~~~~~~~ 1426 1427The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. 1428 1429Two types of filtering are supported which are referred to as Perfect Match and Signature filters, the match mode 1430is set by the --pkt-filter-mode command-line parameter: 1431 1432* Perfect match filters. 1433 The hardware checks a match between the masked fields of the received packets and the programmed filters. 1434 1435* Signature filters. 1436 The hardware checks a match between a hash-based signature of the masked fields of the received packet. 1437 1438The Flow Director filters can match the different fields for different type of packet: flow type, specific input set 1439per flow type and the flexible payload. The Flow Director can also mask out parts of all of these fields so that filters 1440are only applied to certain fields or parts of the fields. 1441 1442Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. 1443 1444# Commands to add flow director filters of different flow types. 1445 1446flow_director_filter (port_id) (add|del|update) flow (ip4|ip4-frag|ip6|ip6-frag) 1447src (src_ip_address) dst (dst_ip_address) vlan (vlan_value) flexbytes (flexbytes_value) 1448(drop|fwd) queue (queue_id) fd_id (fd_id_value) 1449 1450flow_director_filter (port_id) (add|del|update) flow (udp4|tcp4|udp6|tcp6) 1451src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) vlan (vlan_value) 1452flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) 1453 1454flow_director_filter (port_id) (add|del|update) flow (sctp4|sctp6) 1455src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag) 1456vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) 1457 1458For example, to add an udp flow type filter: 1459 1460.. code-block:: console 1461 1462 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 1463 1464For example, add an ip4 flow type filter: 1465 1466.. code-block:: console 1467 1468 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 1469 1470flush_flow_director 1471~~~~~~~~~~~~~~~~~~~ 1472 1473flush all flow director filters on a device: 1474 1475flush_flow_director (port_id) 1476 1477Example, to flush all flow director filter on port 0: 1478 1479.. code-block:: console 1480 1481 testpmd> flush_flow_director 0 1482 1483flow_director_mask 1484~~~~~~~~~~~~~~~~~~ 1485 1486set flow director's masks on match input set 1487 1488flow_director_mask (port_id) vlan (vlan_value) src_mask (ipv4_src) (ipv6_src) (src_port) dst_mask (ipv4_dst) (ipv6_dst) (dst_port) 1489 1490Example, to set flow director mask on port 0: 1491 1492.. code-block:: console 1493 1494 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 1495 1496 1497flow_director_flex_mask 1498~~~~~~~~~~~~~~~~~~~~~~~ 1499 1500set masks of flow director's flexible payload based on certain flow type: 1501 1502flow_director_flex_mask (port_id) flow (raw|ip4|ip4-frag|tcp4|udp4|sctp4|ip6|ip6-frag|tcp6|udp6|sctp6|all) (mask) 1503 1504Example, to set flow director's udpv4 flex mask on port 0: 1505 1506.. code-block:: console 1507 1508 testpmd> flow_director_flex_mask 0 flow all (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 1509 1510 1511flow_director_flex_payload 1512~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 1514Configure flexible payload selection. 1515 1516flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) 1517 1518For example, to select the first 16 bytes from the offset 4 (bytes) of packet’s payload as flexible payload. 1519 1520.. code-block:: console 1521 1522 testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) 1523