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