1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2010-2016 Intel Corporation. 3 4.. _testpmd_runtime: 5 6Testpmd Runtime Functions 7========================= 8 9Where the testpmd application is started in interactive mode, (``-i|--interactive``), 10it displays a prompt that can be used to start and stop forwarding, 11configure the application, display statistics (including the extended NIC 12statistics aka xstats) , set the Flow Director and other tasks:: 13 14 testpmd> 15 16The testpmd prompt has some, limited, readline support. 17Common bash command-line functions such as ``Ctrl+a`` and ``Ctrl+e`` to go to the start and end of the prompt line are supported 18as well as access to the command history via the up-arrow. 19 20There is also support for tab completion. 21If you type a partial command and hit ``<TAB>`` you get a list of the available completions: 22 23.. code-block:: console 24 25 testpmd> show port <TAB> 26 27 info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X 28 info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all 29 stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X 30 stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all 31 ... 32 33 34.. note:: 35 36 Some examples in this document are too long to fit on one line are are shown wrapped at `"\\"` for display purposes:: 37 38 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 39 (pause_time) (send_xon) (port_id) 40 41In the real ``testpmd>`` prompt these commands should be on a single line. 42 43Help Functions 44-------------- 45 46The testpmd has on-line help for the functions that are available at runtime. 47These are divided into sections and can be accessed using help, help section or help all: 48 49.. code-block:: console 50 51 testpmd> help 52 53 help control : Start and stop forwarding. 54 help display : Displaying port, stats and config information. 55 help config : Configuration information. 56 help ports : Configuring ports. 57 help registers : Reading and setting port registers. 58 help filters : Filters configuration help. 59 help all : All of the above sections. 60 61 62Command File Functions 63---------------------- 64 65To facilitate loading large number of commands or to avoid cutting and pasting where not 66practical or possible testpmd supports alternative methods for executing commands. 67 68* If started with the ``--cmdline-file=FILENAME`` command line argument testpmd 69 will execute all CLI commands contained within the file immediately before 70 starting packet forwarding or entering interactive mode. 71 72.. code-block:: console 73 74 ./testpmd -n4 -r2 ... -- -i --cmdline-file=/home/ubuntu/flow-create-commands.txt 75 Interactive-mode selected 76 CLI commands to be read from /home/ubuntu/flow-create-commands.txt 77 Configuring Port 0 (socket 0) 78 Port 0: 7C:FE:90:CB:74:CE 79 Configuring Port 1 (socket 0) 80 Port 1: 7C:FE:90:CB:74:CA 81 Checking link statuses... 82 Port 0 Link Up - speed 10000 Mbps - full-duplex 83 Port 1 Link Up - speed 10000 Mbps - full-duplex 84 Done 85 Flow rule #0 created 86 Flow rule #1 created 87 ... 88 ... 89 Flow rule #498 created 90 Flow rule #499 created 91 Read all CLI commands from /home/ubuntu/flow-create-commands.txt 92 testpmd> 93 94 95* At run-time additional commands can be loaded in bulk by invoking the ``load FILENAME`` 96 command. 97 98.. code-block:: console 99 100 testpmd> load /home/ubuntu/flow-create-commands.txt 101 Flow rule #0 created 102 Flow rule #1 created 103 ... 104 ... 105 Flow rule #498 created 106 Flow rule #499 created 107 Read all CLI commands from /home/ubuntu/flow-create-commands.txt 108 testpmd> 109 110 111In all cases output from any included command will be displayed as standard output. 112Execution will continue until the end of the file is reached regardless of 113whether any errors occur. The end user must examine the output to determine if 114any failures occurred. 115 116 117Control Functions 118----------------- 119 120start 121~~~~~ 122 123Start packet forwarding with current configuration:: 124 125 testpmd> start 126 127start tx_first 128~~~~~~~~~~~~~~ 129 130Start packet forwarding with current configuration after sending specified number of bursts of packets:: 131 132 testpmd> start tx_first (""|burst_num) 133 134The default burst number is 1 when ``burst_num`` not presented. 135 136stop 137~~~~ 138 139Stop packet forwarding, and display accumulated statistics:: 140 141 testpmd> stop 142 143quit 144~~~~ 145 146Quit to prompt:: 147 148 testpmd> quit 149 150 151Display Functions 152----------------- 153 154The functions in the following sections are used to display information about the 155testpmd configuration or the NIC status. 156 157show port 158~~~~~~~~~ 159 160Display information for a given port or all ports:: 161 162 testpmd> show port (info|summary|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all) 163 164The available information categories are: 165 166* ``info``: General port information such as MAC address. 167 168* ``summary``: Brief port summary such as Device Name, Driver Name etc. 169 170* ``stats``: RX/TX statistics. 171 172* ``xstats``: RX/TX extended NIC statistics. 173 174* ``fdir``: Flow Director information and statistics. 175 176* ``stat_qmap``: Queue statistics mapping. 177 178* ``dcb_tc``: DCB information such as TC mapping. 179 180* ``cap``: Supported offload capabilities. 181 182For example: 183 184.. code-block:: console 185 186 testpmd> show port info 0 187 188 ********************* Infos for port 0 ********************* 189 190 MAC address: XX:XX:XX:XX:XX:XX 191 Connect to socket: 0 192 memory allocation on the socket: 0 193 Link status: up 194 Link speed: 40000 Mbps 195 Link duplex: full-duplex 196 Promiscuous mode: enabled 197 Allmulticast mode: disabled 198 Maximum number of MAC addresses: 64 199 Maximum number of MAC addresses of hash filtering: 0 200 VLAN offload: 201 strip on, filter on, extend off, qinq strip off 202 Redirection table size: 512 203 Supported flow types: 204 ipv4-frag 205 ipv4-tcp 206 ipv4-udp 207 ipv4-sctp 208 ipv4-other 209 ipv6-frag 210 ipv6-tcp 211 ipv6-udp 212 ipv6-sctp 213 ipv6-other 214 l2_payload 215 port 216 vxlan 217 geneve 218 nvgre 219 vxlan-gpe 220 221show port rss reta 222~~~~~~~~~~~~~~~~~~ 223 224Display the rss redirection table entry indicated by masks on port X:: 225 226 testpmd> show port (port_id) rss reta (size) (mask0, mask1...) 227 228size is used to indicate the hardware supported reta size 229 230show port rss-hash 231~~~~~~~~~~~~~~~~~~ 232 233Display the RSS hash functions and RSS hash key of a port:: 234 235 testpmd> show port (port_id) rss-hash [key] 236 237clear port 238~~~~~~~~~~ 239 240Clear the port statistics for a given port or for all ports:: 241 242 testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all) 243 244For example:: 245 246 testpmd> clear port stats all 247 248show (rxq|txq) 249~~~~~~~~~~~~~~ 250 251Display information for a given port's RX/TX queue:: 252 253 testpmd> show (rxq|txq) info (port_id) (queue_id) 254 255show config 256~~~~~~~~~~~ 257 258Displays the configuration of the application. 259The configuration comes from the command-line, the runtime or the application defaults:: 260 261 testpmd> show config (rxtx|cores|fwd|txpkts) 262 263The available information categories are: 264 265* ``rxtx``: RX/TX configuration items. 266 267* ``cores``: List of forwarding cores. 268 269* ``fwd``: Packet forwarding configuration. 270 271* ``txpkts``: Packets to TX configuration. 272 273For example: 274 275.. code-block:: console 276 277 testpmd> show config rxtx 278 279 io packet forwarding - CRC stripping disabled - packets/burst=16 280 nb forwarding cores=2 - nb forwarding ports=1 281 RX queues=1 - RX desc=128 - RX free threshold=0 282 RX threshold registers: pthresh=8 hthresh=8 wthresh=4 283 TX queues=1 - TX desc=512 - TX free threshold=0 284 TX threshold registers: pthresh=36 hthresh=0 wthresh=0 285 TX RS bit threshold=0 - TXQ flags=0x0 286 287set fwd 288~~~~~~~ 289 290Set the packet forwarding mode:: 291 292 testpmd> set fwd (io|mac|macswap|flowgen| \ 293 rxonly|txonly|csum|icmpecho|noisy) (""|retry) 294 295``retry`` can be specified for forwarding engines except ``rx_only``. 296 297The available information categories are: 298 299* ``io``: Forwards packets "as-is" in I/O mode. 300 This is the fastest possible forwarding operation as it does not access packets data. 301 This is the default mode. 302 303* ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them. 304 Default application behavior is to set source Ethernet address to that of the transmitting interface, and destination 305 address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or 306 'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address. 307 308* ``macswap``: MAC swap forwarding mode. 309 Swaps the source and the destination Ethernet addresses of packets before forwarding them. 310 311* ``flowgen``: Multi-flow generation mode. 312 Originates a number of flows (with varying destination IP addresses), and terminate receive traffic. 313 314* ``rxonly``: Receives packets but doesn't transmit them. 315 316* ``txonly``: Generates and transmits packets without receiving any. 317 318* ``csum``: Changes the checksum field with hardware or software methods depending on the offload flags on the packet. 319 320* ``icmpecho``: Receives a burst of packets, lookup for ICMP echo requests and, if any, send back ICMP echo replies. 321 322* ``ieee1588``: Demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``. 323 324* ``softnic``: Demonstrates the softnic forwarding operation. In this mode, packet forwarding is 325 similar to I/O mode except for the fact that packets are loopback to the softnic ports only. Therefore, portmask parameter should be set to softnic port only. The various software based custom NIC pipelines specified through the softnic firmware (DPDK packet framework script) can be tested in this mode. Furthermore, it allows to build 5-level hierarchical QoS scheduler as a default option that can be enabled through CLI once testpmd application is initialised. The user can modify the default scheduler hierarchy or can specify the new QoS Scheduler hierarchy through CLI. Requires ``CONFIG_RTE_LIBRTE_PMD_SOFTNIC=y``. 326 327* ``noisy``: Noisy neighbor simulation. 328 Simulate more realistic behavior of a guest machine engaged in receiving 329 and sending packets performing Virtual Network Function (VNF). 330 331Example:: 332 333 testpmd> set fwd rxonly 334 335 Set rxonly packet forwarding mode 336 337 338show fwd 339~~~~~~~~ 340 341When running, forwarding engines maintain statistics from the time they have been started. 342Example for the io forwarding engine, with some packet drops on the tx side:: 343 344 testpmd> show fwd stats all 345 346 ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 1/Queue= 0 ------- 347 RX-packets: 274293770 TX-packets: 274293642 TX-dropped: 128 348 349 ------- Forward Stats for RX Port= 1/Queue= 0 -> TX Port= 0/Queue= 0 ------- 350 RX-packets: 274301850 TX-packets: 274301850 TX-dropped: 0 351 352 ---------------------- Forward statistics for port 0 ---------------------- 353 RX-packets: 274293802 RX-dropped: 0 RX-total: 274293802 354 TX-packets: 274301862 TX-dropped: 0 TX-total: 274301862 355 ---------------------------------------------------------------------------- 356 357 ---------------------- Forward statistics for port 1 ---------------------- 358 RX-packets: 274301894 RX-dropped: 0 RX-total: 274301894 359 TX-packets: 274293706 TX-dropped: 128 TX-total: 274293834 360 ---------------------------------------------------------------------------- 361 362 +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++ 363 RX-packets: 548595696 RX-dropped: 0 RX-total: 548595696 364 TX-packets: 548595568 TX-dropped: 128 TX-total: 548595696 365 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 366 367clear fwd 368~~~~~~~~~ 369 370Clear the forwarding engines statistics:: 371 372 testpmd> clear fwd stats all 373 374read rxd 375~~~~~~~~ 376 377Display an RX descriptor for a port RX queue:: 378 379 testpmd> read rxd (port_id) (queue_id) (rxd_id) 380 381For example:: 382 383 testpmd> read rxd 0 0 4 384 0x0000000B - 0x001D0180 / 0x0000000B - 0x001D0180 385 386read txd 387~~~~~~~~ 388 389Display a TX descriptor for a port TX queue:: 390 391 testpmd> read txd (port_id) (queue_id) (txd_id) 392 393For example:: 394 395 testpmd> read txd 0 0 4 396 0x00000001 - 0x24C3C440 / 0x000F0000 - 0x2330003C 397 398ddp get list 399~~~~~~~~~~~~ 400 401Get loaded dynamic device personalization (DDP) package info list:: 402 403 testpmd> ddp get list (port_id) 404 405ddp get info 406~~~~~~~~~~~~ 407 408Display information about dynamic device personalization (DDP) profile:: 409 410 testpmd> ddp get info (profile_path) 411 412show vf stats 413~~~~~~~~~~~~~ 414 415Display VF statistics:: 416 417 testpmd> show vf stats (port_id) (vf_id) 418 419clear vf stats 420~~~~~~~~~~~~~~ 421 422Reset VF statistics:: 423 424 testpmd> clear vf stats (port_id) (vf_id) 425 426show port pctype mapping 427~~~~~~~~~~~~~~~~~~~~~~~~ 428 429List all items from the pctype mapping table:: 430 431 testpmd> show port (port_id) pctype mapping 432 433show rx offloading capabilities 434~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 435 436List all per queue and per port Rx offloading capabilities of a port:: 437 438 testpmd> show port (port_id) rx_offload capabilities 439 440show rx offloading configuration 441~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 442 443List port level and all queue level Rx offloading configuration:: 444 445 testpmd> show port (port_id) rx_offload configuration 446 447show tx offloading capabilities 448~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 449 450List all per queue and per port Tx offloading capabilities of a port:: 451 452 testpmd> show port (port_id) tx_offload capabilities 453 454show tx offloading configuration 455~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 456 457List port level and all queue level Tx offloading configuration:: 458 459 testpmd> show port (port_id) tx_offload configuration 460 461show tx metadata setting 462~~~~~~~~~~~~~~~~~~~~~~~~ 463 464Show Tx metadata value set for a specific port:: 465 466 testpmd> show port (port_id) tx_metadata 467 468show port supported ptypes 469~~~~~~~~~~~~~~~~~~~~~~~~~~ 470 471Show ptypes supported for a specific port:: 472 473 testpmd> show port (port_id) ptypes 474 475show device info 476~~~~~~~~~~~~~~~~ 477 478Show general information about devices probed:: 479 480 testpmd> show device info (<identifier>|all) 481 482For example: 483 484.. code-block:: console 485 486 testpmd> show device info net_pcap0 487 488 ********************* Infos for device net_pcap0 ********************* 489 Bus name: vdev 490 Driver name: net_pcap 491 Devargs: iface=enP2p6s0,phy_mac=1 492 Connect to socket: -1 493 494 Port id: 2 495 MAC address: 1E:37:93:28:04:B8 496 Device name: net_pcap0 497 498dump physmem 499~~~~~~~~~~~~ 500 501Dumps all physical memory segment layouts:: 502 503 testpmd> dump_physmem 504 505dump memzone 506~~~~~~~~~~~~ 507 508Dumps the layout of all memory zones:: 509 510 testpmd> dump_memzone 511 512 513dump struct size 514~~~~~~~~~~~~~~~~ 515 516Dumps the size of all memory structures:: 517 518 testpmd> dump_struct_sizes 519 520dump ring 521~~~~~~~~~ 522 523Dumps the status of all or specific element in DPDK rings:: 524 525 testpmd> dump_ring [ring_name] 526 527dump mempool 528~~~~~~~~~~~~ 529 530Dumps the statistics of all or specific memory pool:: 531 532 testpmd> dump_mempool [mempool_name] 533 534dump devargs 535~~~~~~~~~~~~ 536 537Dumps the user device list:: 538 539 testpmd> dump_devargs 540 541dump log types 542~~~~~~~~~~~~~~ 543 544Dumps the log level for all the dpdk modules:: 545 546 testpmd> dump_log_types 547 548Configuration Functions 549----------------------- 550 551The testpmd application can be configured from the runtime as well as from the command-line. 552 553This section details the available configuration functions that are available. 554 555.. note:: 556 557 Configuration changes only become active when forwarding is started/restarted. 558 559set default 560~~~~~~~~~~~ 561 562Reset forwarding to the default configuration:: 563 564 testpmd> set default 565 566set verbose 567~~~~~~~~~~~ 568 569Set the debug verbosity level:: 570 571 testpmd> set verbose (level) 572 573Available levels are as following: 574 575* ``0`` silent except for error. 576* ``1`` fully verbose except for Tx packets. 577* ``2`` fully verbose except for Rx packets. 578* ``> 2`` fully verbose. 579 580set log 581~~~~~~~ 582 583Set the log level for a log type:: 584 585 testpmd> set log global|(type) (level) 586 587Where: 588 589* ``type`` is the log name. 590 591* ``level`` is the log level. 592 593For example, to change the global log level:: 594 595 testpmd> set log global (level) 596 597Regexes can also be used for type. To change log level of user1, user2 and user3:: 598 599 testpmd> set log user[1-3] (level) 600 601set nbport 602~~~~~~~~~~ 603 604Set the number of ports used by the application: 605 606set nbport (num) 607 608This is equivalent to the ``--nb-ports`` command-line option. 609 610set nbcore 611~~~~~~~~~~ 612 613Set the number of cores used by the application:: 614 615 testpmd> set nbcore (num) 616 617This is equivalent to the ``--nb-cores`` command-line option. 618 619.. note:: 620 621 The number of cores used must not be greater than number of ports used multiplied by the number of queues per port. 622 623set coremask 624~~~~~~~~~~~~ 625 626Set the forwarding cores hexadecimal mask:: 627 628 testpmd> set coremask (mask) 629 630This is equivalent to the ``--coremask`` command-line option. 631 632.. note:: 633 634 The master lcore is reserved for command line parsing only and cannot be masked on for packet forwarding. 635 636set portmask 637~~~~~~~~~~~~ 638 639Set the forwarding ports hexadecimal mask:: 640 641 testpmd> set portmask (mask) 642 643This is equivalent to the ``--portmask`` command-line option. 644 645set burst 646~~~~~~~~~ 647 648Set number of packets per burst:: 649 650 testpmd> set burst (num) 651 652This is equivalent to the ``--burst command-line`` option. 653 654When retry is enabled, the transmit delay time and number of retries can also be set:: 655 656 testpmd> set burst tx delay (microseconds) retry (num) 657 658set txpkts 659~~~~~~~~~~ 660 661Set the length of each segment of the TX-ONLY packets or length of packet for FLOWGEN mode:: 662 663 testpmd> set txpkts (x[,y]*) 664 665Where x[,y]* represents a CSV list of values, without white space. 666 667set txsplit 668~~~~~~~~~~~ 669 670Set the split policy for the TX packets, applicable for TX-ONLY and CSUM forwarding modes:: 671 672 testpmd> set txsplit (off|on|rand) 673 674Where: 675 676* ``off`` disable packet copy & split for CSUM mode. 677 678* ``on`` split outgoing packet into multiple segments. Size of each segment 679 and number of segments per packet is determined by ``set txpkts`` command 680 (see above). 681 682* ``rand`` same as 'on', but number of segments per each packet is a random value between 1 and total number of segments. 683 684set corelist 685~~~~~~~~~~~~ 686 687Set the list of forwarding cores:: 688 689 testpmd> set corelist (x[,y]*) 690 691For example, to change the forwarding cores: 692 693.. code-block:: console 694 695 testpmd> set corelist 3,1 696 testpmd> show config fwd 697 698 io packet forwarding - ports=2 - cores=2 - streams=2 - NUMA support disabled 699 Logical Core 3 (socket 0) forwards packets on 1 streams: 700 RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 701 Logical Core 1 (socket 0) forwards packets on 1 streams: 702 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 703 704.. note:: 705 706 The cores are used in the same order as specified on the command line. 707 708set portlist 709~~~~~~~~~~~~ 710 711Set the list of forwarding ports:: 712 713 testpmd> set portlist (x[,y]*) 714 715For example, to change the port forwarding: 716 717.. code-block:: console 718 719 testpmd> set portlist 0,2,1,3 720 testpmd> show config fwd 721 722 io packet forwarding - ports=4 - cores=1 - streams=4 723 Logical Core 3 (socket 0) forwards packets on 4 streams: 724 RX P=0/Q=0 (socket 0) -> TX P=2/Q=0 (socket 0) peer=02:00:00:00:00:01 725 RX P=2/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 726 RX P=1/Q=0 (socket 0) -> TX P=3/Q=0 (socket 0) peer=02:00:00:00:00:03 727 RX P=3/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:02 728 729set port setup on 730~~~~~~~~~~~~~~~~~ 731 732Select how to retrieve new ports created after "port attach" command:: 733 734 testpmd> set port setup on (iterator|event) 735 736For each new port, a setup is done. 737It will find the probed ports via RTE_ETH_FOREACH_MATCHING_DEV loop 738in iterator mode, or via RTE_ETH_EVENT_NEW in event mode. 739 740set tx loopback 741~~~~~~~~~~~~~~~ 742 743Enable/disable tx loopback:: 744 745 testpmd> set tx loopback (port_id) (on|off) 746 747set drop enable 748~~~~~~~~~~~~~~~ 749 750set drop enable bit for all queues:: 751 752 testpmd> set all queues drop (port_id) (on|off) 753 754set split drop enable (for VF) 755~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 756 757set split drop enable bit for VF from PF:: 758 759 testpmd> set vf split drop (port_id) (vf_id) (on|off) 760 761set mac antispoof (for VF) 762~~~~~~~~~~~~~~~~~~~~~~~~~~ 763 764Set mac antispoof for a VF from the PF:: 765 766 testpmd> set vf mac antispoof (port_id) (vf_id) (on|off) 767 768set macsec offload 769~~~~~~~~~~~~~~~~~~ 770 771Enable/disable MACsec offload:: 772 773 testpmd> set macsec offload (port_id) on encrypt (on|off) replay-protect (on|off) 774 testpmd> set macsec offload (port_id) off 775 776set macsec sc 777~~~~~~~~~~~~~ 778 779Configure MACsec secure connection (SC):: 780 781 testpmd> set macsec sc (tx|rx) (port_id) (mac) (pi) 782 783.. note:: 784 785 The pi argument is ignored for tx. 786 Check the NIC Datasheet for hardware limits. 787 788set macsec sa 789~~~~~~~~~~~~~ 790 791Configure MACsec secure association (SA):: 792 793 testpmd> set macsec sa (tx|rx) (port_id) (idx) (an) (pn) (key) 794 795.. note:: 796 797 The IDX value must be 0 or 1. 798 Check the NIC Datasheet for hardware limits. 799 800set broadcast mode (for VF) 801~~~~~~~~~~~~~~~~~~~~~~~~~~~ 802 803Set broadcast mode for a VF from the PF:: 804 805 testpmd> set vf broadcast (port_id) (vf_id) (on|off) 806 807vlan set stripq 808~~~~~~~~~~~~~~~ 809 810Set the VLAN strip for a queue on a port:: 811 812 testpmd> vlan set stripq (on|off) (port_id,queue_id) 813 814vlan set stripq (for VF) 815~~~~~~~~~~~~~~~~~~~~~~~~ 816 817Set VLAN strip for all queues in a pool for a VF from the PF:: 818 819 testpmd> set vf vlan stripq (port_id) (vf_id) (on|off) 820 821vlan set insert (for VF) 822~~~~~~~~~~~~~~~~~~~~~~~~ 823 824Set VLAN insert for a VF from the PF:: 825 826 testpmd> set vf vlan insert (port_id) (vf_id) (vlan_id) 827 828vlan set tag (for VF) 829~~~~~~~~~~~~~~~~~~~~~ 830 831Set VLAN tag for a VF from the PF:: 832 833 testpmd> set vf vlan tag (port_id) (vf_id) (on|off) 834 835vlan set antispoof (for VF) 836~~~~~~~~~~~~~~~~~~~~~~~~~~~ 837 838Set VLAN antispoof for a VF from the PF:: 839 840 testpmd> set vf vlan antispoof (port_id) (vf_id) (on|off) 841 842vlan set (strip|filter|qinq_strip|extend) 843~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 844Set the VLAN strip/filter/QinQ strip/extend on for a port:: 845 846 testpmd> vlan set (strip|filter|qinq_strip|extend) (on|off) (port_id) 847 848vlan set tpid 849~~~~~~~~~~~~~ 850 851Set the inner or outer VLAN TPID for packet filtering on a port:: 852 853 testpmd> vlan set (inner|outer) tpid (value) (port_id) 854 855.. note:: 856 857 TPID value must be a 16-bit number (value <= 65536). 858 859rx_vlan add 860~~~~~~~~~~~ 861 862Add a VLAN ID, or all identifiers, to the set of VLAN identifiers filtered by port ID:: 863 864 testpmd> rx_vlan add (vlan_id|all) (port_id) 865 866.. note:: 867 868 VLAN filter must be set on that port. VLAN ID < 4096. 869 Depending on the NIC used, number of vlan_ids may be limited to the maximum entries 870 in VFTA table. This is important if enabling all vlan_ids. 871 872rx_vlan rm 873~~~~~~~~~~ 874 875Remove a VLAN ID, or all identifiers, from the set of VLAN identifiers filtered by port ID:: 876 877 testpmd> rx_vlan rm (vlan_id|all) (port_id) 878 879rx_vlan add (for VF) 880~~~~~~~~~~~~~~~~~~~~ 881 882Add a VLAN ID, to the set of VLAN identifiers filtered for VF(s) for port ID:: 883 884 testpmd> rx_vlan add (vlan_id) port (port_id) vf (vf_mask) 885 886rx_vlan rm (for VF) 887~~~~~~~~~~~~~~~~~~~ 888 889Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port ID:: 890 891 testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask) 892 893tunnel_filter add 894~~~~~~~~~~~~~~~~~ 895 896Add a tunnel filter on a port:: 897 898 testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \ 899 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\ 900 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id) 901 902The available information categories are: 903 904* ``vxlan``: Set tunnel type as VXLAN. 905 906* ``nvgre``: Set tunnel type as NVGRE. 907 908* ``ipingre``: Set tunnel type as IP-in-GRE. 909 910* ``vxlan-gpe``: Set tunnel type as VXLAN-GPE 911 912* ``imac-ivlan``: Set filter type as Inner MAC and VLAN. 913 914* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID. 915 916* ``imac-tenid``: Set filter type as Inner MAC and tenant ID. 917 918* ``imac``: Set filter type as Inner MAC. 919 920* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID. 921 922* ``oip``: Set filter type as Outer IP. 923 924* ``iip``: Set filter type as Inner IP. 925 926Example:: 927 928 testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \ 929 192.168.2.2 0 ipingre oip 1 1 930 931 Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP. 932 933tunnel_filter remove 934~~~~~~~~~~~~~~~~~~~~ 935 936Remove a tunnel filter on a port:: 937 938 testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \ 939 (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\ 940 imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id) 941 942rx_vxlan_port add 943~~~~~~~~~~~~~~~~~ 944 945Add an UDP port for VXLAN packet filter on a port:: 946 947 testpmd> rx_vxlan_port add (udp_port) (port_id) 948 949rx_vxlan_port remove 950~~~~~~~~~~~~~~~~~~~~ 951 952Remove an UDP port for VXLAN packet filter on a port:: 953 954 testpmd> rx_vxlan_port rm (udp_port) (port_id) 955 956tx_vlan set 957~~~~~~~~~~~ 958 959Set hardware insertion of VLAN IDs in packets sent on a port:: 960 961 testpmd> tx_vlan set (port_id) vlan_id[, vlan_id_outer] 962 963For example, set a single VLAN ID (5) insertion on port 0:: 964 965 tx_vlan set 0 5 966 967Or, set double VLAN ID (inner: 2, outer: 3) insertion on port 1:: 968 969 tx_vlan set 1 2 3 970 971 972tx_vlan set pvid 973~~~~~~~~~~~~~~~~ 974 975Set port based hardware insertion of VLAN ID in packets sent on a port:: 976 977 testpmd> tx_vlan set pvid (port_id) (vlan_id) (on|off) 978 979tx_vlan reset 980~~~~~~~~~~~~~ 981 982Disable hardware insertion of a VLAN header in packets sent on a port:: 983 984 testpmd> tx_vlan reset (port_id) 985 986csum set 987~~~~~~~~ 988 989Select hardware or software calculation of the checksum when 990transmitting a packet using the ``csum`` forwarding engine:: 991 992 testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id) 993 994Where: 995 996* ``ip|udp|tcp|sctp`` always relate to the inner layer. 997 998* ``outer-ip`` relates to the outer IP layer (only for IPv4) in the case where the packet is recognized 999 as a tunnel packet by the forwarding engine (vxlan, gre and ipip are 1000 supported). See also the ``csum parse-tunnel`` command. 1001 1002* ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized 1003 as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are 1004 supported). See also the ``csum parse-tunnel`` command. 1005 1006.. note:: 1007 1008 Check the NIC Datasheet for hardware limits. 1009 1010RSS queue region 1011~~~~~~~~~~~~~~~~ 1012 1013Set RSS queue region span on a port:: 1014 1015 testpmd> set port (port_id) queue-region region_id (value) \ 1016 queue_start_index (value) queue_num (value) 1017 1018Set flowtype mapping on a RSS queue region on a port:: 1019 1020 testpmd> set port (port_id) queue-region region_id (value) flowtype (value) 1021 1022where: 1023 1024* For the flowtype(pctype) of packet,the specific index for each type has 1025 been defined in file i40e_type.h as enum i40e_filter_pctype. 1026 1027Set user priority mapping on a RSS queue region on a port:: 1028 1029 testpmd> set port (port_id) queue-region UP (value) region_id (value) 1030 1031Flush all queue region related configuration on a port:: 1032 1033 testpmd> set port (port_id) queue-region flush (on|off) 1034 1035where: 1036 1037* ``on``: is just an enable function which server for other configuration, 1038 it is for all configuration about queue region from up layer, 1039 at first will only keep in DPDK software stored in driver, 1040 only after "flush on", it commit all configuration to HW. 1041 1042* ``"off``: is just clean all configuration about queue region just now, 1043 and restore all to DPDK i40e driver default config when start up. 1044 1045Show all queue region related configuration info on a port:: 1046 1047 testpmd> show port (port_id) queue-region 1048 1049.. note:: 1050 1051 Queue region only support on PF by now, so these command is 1052 only for configuration of queue region on PF port. 1053 1054csum parse-tunnel 1055~~~~~~~~~~~~~~~~~ 1056 1057Define how tunneled packets should be handled by the csum forward 1058engine:: 1059 1060 testpmd> csum parse-tunnel (on|off) (tx_port_id) 1061 1062If enabled, the csum forward engine will try to recognize supported 1063tunnel headers (vxlan, gre, ipip). 1064 1065If disabled, treat tunnel packets as non-tunneled packets (a inner 1066header is handled as a packet payload). 1067 1068.. note:: 1069 1070 The port argument is the TX port like in the ``csum set`` command. 1071 1072Example: 1073 1074Consider a packet in packet like the following:: 1075 1076 eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in 1077 1078* If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` 1079 command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the 1080 ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``). 1081 1082* If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` 1083 command relate to the outer headers, here ``ipv4_out`` and ``udp_out``. 1084 1085csum show 1086~~~~~~~~~ 1087 1088Display tx checksum offload configuration:: 1089 1090 testpmd> csum show (port_id) 1091 1092tso set 1093~~~~~~~ 1094 1095Enable TCP Segmentation Offload (TSO) in the ``csum`` forwarding engine:: 1096 1097 testpmd> tso set (segsize) (port_id) 1098 1099.. note:: 1100 1101 Check the NIC datasheet for hardware limits. 1102 1103tso show 1104~~~~~~~~ 1105 1106Display the status of TCP Segmentation Offload:: 1107 1108 testpmd> tso show (port_id) 1109 1110tunnel tso set 1111~~~~~~~~~~~~~~ 1112 1113Set tso segment size of tunneled packets for a port in csum engine:: 1114 1115 testpmd> tunnel_tso set (tso_segsz) (port_id) 1116 1117tunnel tso show 1118~~~~~~~~~~~~~~~ 1119 1120Display the status of tunneled TCP Segmentation Offload for a port:: 1121 1122 testpmd> tunnel_tso show (port_id) 1123 1124set port - gro 1125~~~~~~~~~~~~~~ 1126 1127Enable or disable GRO in ``csum`` forwarding engine:: 1128 1129 testpmd> set port <port_id> gro on|off 1130 1131If enabled, the csum forwarding engine will perform GRO on the TCP/IPv4 1132packets received from the given port. 1133 1134If disabled, packets received from the given port won't be performed 1135GRO. By default, GRO is disabled for all ports. 1136 1137.. note:: 1138 1139 When enable GRO for a port, TCP/IPv4 packets received from the port 1140 will be performed GRO. After GRO, all merged packets have bad 1141 checksums, since the GRO library doesn't re-calculate checksums for 1142 the merged packets. Therefore, if users want the merged packets to 1143 have correct checksums, please select HW IP checksum calculation and 1144 HW TCP checksum calculation for the port which the merged packets are 1145 transmitted to. 1146 1147show port - gro 1148~~~~~~~~~~~~~~~ 1149 1150Display GRO configuration for a given port:: 1151 1152 testpmd> show port <port_id> gro 1153 1154set gro flush 1155~~~~~~~~~~~~~ 1156 1157Set the cycle to flush the GROed packets from reassembly tables:: 1158 1159 testpmd> set gro flush <cycles> 1160 1161When enable GRO, the csum forwarding engine performs GRO on received 1162packets, and the GROed packets are stored in reassembly tables. Users 1163can use this command to determine when the GROed packets are flushed 1164from the reassembly tables. 1165 1166The ``cycles`` is measured in GRO operation times. The csum forwarding 1167engine flushes the GROed packets from the tables every ``cycles`` GRO 1168operations. 1169 1170By default, the value of ``cycles`` is 1, which means flush GROed packets 1171from the reassembly tables as soon as one GRO operation finishes. The value 1172of ``cycles`` should be in the range of 1 to ``GRO_MAX_FLUSH_CYCLES``. 1173 1174Please note that the large value of ``cycles`` may cause the poor TCP/IP 1175stack performance. Because the GROed packets are delayed to arrive the 1176stack, thus causing more duplicated ACKs and TCP retransmissions. 1177 1178set port - gso 1179~~~~~~~~~~~~~~ 1180 1181Toggle per-port GSO support in ``csum`` forwarding engine:: 1182 1183 testpmd> set port <port_id> gso on|off 1184 1185If enabled, the csum forwarding engine will perform GSO on supported IPv4 1186packets, transmitted on the given port. 1187 1188If disabled, packets transmitted on the given port will not undergo GSO. 1189By default, GSO is disabled for all ports. 1190 1191.. note:: 1192 1193 When GSO is enabled on a port, supported IPv4 packets transmitted on that 1194 port undergo GSO. Afterwards, the segmented packets are represented by 1195 multi-segment mbufs; however, the csum forwarding engine doesn't calculation 1196 of checksums for GSO'd segments in SW. As a result, if users want correct 1197 checksums in GSO segments, they should enable HW checksum calculation for 1198 GSO-enabled ports. 1199 1200 For example, HW checksum calculation for VxLAN GSO'd packets may be enabled 1201 by setting the following options in the csum forwarding engine: 1202 1203 testpmd> csum set outer_ip hw <port_id> 1204 1205 testpmd> csum set ip hw <port_id> 1206 1207 testpmd> csum set tcp hw <port_id> 1208 1209 UDP GSO is the same as IP fragmentation, which treats the UDP header 1210 as the payload and does not modify it during segmentation. That is, 1211 after UDP GSO, only the first output fragment has the original UDP 1212 header. Therefore, users need to enable HW IP checksum calculation 1213 and SW UDP checksum calculation for GSO-enabled ports, if they want 1214 correct checksums for UDP/IPv4 packets. 1215 1216set gso segsz 1217~~~~~~~~~~~~~ 1218 1219Set the maximum GSO segment size (measured in bytes), which includes the 1220packet header and the packet payload for GSO-enabled ports (global):: 1221 1222 testpmd> set gso segsz <length> 1223 1224show port - gso 1225~~~~~~~~~~~~~~~ 1226 1227Display the status of Generic Segmentation Offload for a given port:: 1228 1229 testpmd> show port <port_id> gso 1230 1231mac_addr add 1232~~~~~~~~~~~~ 1233 1234Add an alternative MAC address to a port:: 1235 1236 testpmd> mac_addr add (port_id) (XX:XX:XX:XX:XX:XX) 1237 1238mac_addr remove 1239~~~~~~~~~~~~~~~ 1240 1241Remove a MAC address from a port:: 1242 1243 testpmd> mac_addr remove (port_id) (XX:XX:XX:XX:XX:XX) 1244 1245mcast_addr add 1246~~~~~~~~~~~~~~ 1247 1248To add the multicast MAC address to/from the set of multicast addresses 1249filtered by port:: 1250 1251 testpmd> mcast_addr add (port_id) (mcast_addr) 1252 1253mcast_addr remove 1254~~~~~~~~~~~~~~~~~ 1255 1256To remove the multicast MAC address to/from the set of multicast addresses 1257filtered by port:: 1258 1259 testpmd> mcast_addr remove (port_id) (mcast_addr) 1260 1261mac_addr add (for VF) 1262~~~~~~~~~~~~~~~~~~~~~ 1263 1264Add an alternative MAC address for a VF to a port:: 1265 1266 testpmd> mac_add add port (port_id) vf (vf_id) (XX:XX:XX:XX:XX:XX) 1267 1268mac_addr set 1269~~~~~~~~~~~~ 1270 1271Set the default MAC address for a port:: 1272 1273 testpmd> mac_addr set (port_id) (XX:XX:XX:XX:XX:XX) 1274 1275mac_addr set (for VF) 1276~~~~~~~~~~~~~~~~~~~~~ 1277 1278Set the MAC address for a VF from the PF:: 1279 1280 testpmd> set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX) 1281 1282set eth-peer 1283~~~~~~~~~~~~ 1284 1285Set the forwarding peer address for certain port:: 1286 1287 testpmd> set eth-peer (port_id) (peer_addr) 1288 1289This is equivalent to the ``--eth-peer`` command-line option. 1290 1291set port-uta 1292~~~~~~~~~~~~ 1293 1294Set the unicast hash filter(s) on/off for a port:: 1295 1296 testpmd> set port (port_id) uta (XX:XX:XX:XX:XX:XX|all) (on|off) 1297 1298set promisc 1299~~~~~~~~~~~ 1300 1301Set the promiscuous mode on for a port or for all ports. 1302In promiscuous mode packets are not dropped if they aren't for the specified MAC address:: 1303 1304 testpmd> set promisc (port_id|all) (on|off) 1305 1306set allmulti 1307~~~~~~~~~~~~ 1308 1309Set the allmulti mode for a port or for all ports:: 1310 1311 testpmd> set allmulti (port_id|all) (on|off) 1312 1313Same as the ifconfig (8) option. Controls how multicast packets are handled. 1314 1315set promisc (for VF) 1316~~~~~~~~~~~~~~~~~~~~ 1317 1318Set the unicast promiscuous mode for a VF from PF. 1319It's supported by Intel i40e NICs now. 1320In promiscuous mode packets are not dropped if they aren't for the specified MAC address:: 1321 1322 testpmd> set vf promisc (port_id) (vf_id) (on|off) 1323 1324set allmulticast (for VF) 1325~~~~~~~~~~~~~~~~~~~~~~~~~ 1326 1327Set the multicast promiscuous mode for a VF from PF. 1328It's supported by Intel i40e NICs now. 1329In promiscuous mode packets are not dropped if they aren't for the specified MAC address:: 1330 1331 testpmd> set vf allmulti (port_id) (vf_id) (on|off) 1332 1333set tx max bandwidth (for VF) 1334~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 1336Set TX max absolute bandwidth (Mbps) for a VF from PF:: 1337 1338 testpmd> set vf tx max-bandwidth (port_id) (vf_id) (max_bandwidth) 1339 1340set tc tx min bandwidth (for VF) 1341~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 1343Set all TCs' TX min relative bandwidth (%) for a VF from PF:: 1344 1345 testpmd> set vf tc tx min-bandwidth (port_id) (vf_id) (bw1, bw2, ...) 1346 1347set tc tx max bandwidth (for VF) 1348~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1349 1350Set a TC's TX max absolute bandwidth (Mbps) for a VF from PF:: 1351 1352 testpmd> set vf tc tx max-bandwidth (port_id) (vf_id) (tc_no) (max_bandwidth) 1353 1354set tc strict link priority mode 1355~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1356 1357Set some TCs' strict link priority mode on a physical port:: 1358 1359 testpmd> set tx strict-link-priority (port_id) (tc_bitmap) 1360 1361set tc tx min bandwidth 1362~~~~~~~~~~~~~~~~~~~~~~~ 1363 1364Set all TCs' TX min relative bandwidth (%) globally for all PF and VFs:: 1365 1366 testpmd> set tc tx min-bandwidth (port_id) (bw1, bw2, ...) 1367 1368set flow_ctrl rx 1369~~~~~~~~~~~~~~~~ 1370 1371Set the link flow control parameter on a port:: 1372 1373 testpmd> set flow_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 1374 (pause_time) (send_xon) mac_ctrl_frame_fwd (on|off) \ 1375 autoneg (on|off) (port_id) 1376 1377Where: 1378 1379* ``high_water`` (integer): High threshold value to trigger XOFF. 1380 1381* ``low_water`` (integer): Low threshold value to trigger XON. 1382 1383* ``pause_time`` (integer): Pause quota in the Pause frame. 1384 1385* ``send_xon`` (0/1): Send XON frame. 1386 1387* ``mac_ctrl_frame_fwd``: Enable receiving MAC control frames. 1388 1389* ``autoneg``: Change the auto-negotiation parameter. 1390 1391set pfc_ctrl rx 1392~~~~~~~~~~~~~~~ 1393 1394Set the priority flow control parameter on a port:: 1395 1396 testpmd> set pfc_ctrl rx (on|off) tx (on|off) (high_water) (low_water) \ 1397 (pause_time) (priority) (port_id) 1398 1399Where: 1400 1401* ``high_water`` (integer): High threshold value. 1402 1403* ``low_water`` (integer): Low threshold value. 1404 1405* ``pause_time`` (integer): Pause quota in the Pause frame. 1406 1407* ``priority`` (0-7): VLAN User Priority. 1408 1409set stat_qmap 1410~~~~~~~~~~~~~ 1411 1412Set statistics mapping (qmapping 0..15) for RX/TX queue on port:: 1413 1414 testpmd> set stat_qmap (tx|rx) (port_id) (queue_id) (qmapping) 1415 1416For example, to set rx queue 2 on port 0 to mapping 5:: 1417 1418 testpmd>set stat_qmap rx 0 2 5 1419 1420set xstats-hide-zero 1421~~~~~~~~~~~~~~~~~~~~ 1422 1423Set the option to hide zero values for xstats display:: 1424 1425 testpmd> set xstats-hide-zero on|off 1426 1427.. note:: 1428 1429 By default, the zero values are displayed for xstats. 1430 1431set port - rx/tx (for VF) 1432~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 1434Set VF receive/transmit from a port:: 1435 1436 testpmd> set port (port_id) vf (vf_id) (rx|tx) (on|off) 1437 1438set port - mac address filter (for VF) 1439~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 1441Add/Remove unicast or multicast MAC addr filter for a VF:: 1442 1443 testpmd> set port (port_id) vf (vf_id) (mac_addr) \ 1444 (exact-mac|exact-mac-vlan|hashmac|hashmac-vlan) (on|off) 1445 1446set port - rx mode(for VF) 1447~~~~~~~~~~~~~~~~~~~~~~~~~~ 1448 1449Set the VF receive mode of a port:: 1450 1451 testpmd> set port (port_id) vf (vf_id) \ 1452 rxmode (AUPE|ROPE|BAM|MPE) (on|off) 1453 1454The available receive modes are: 1455 1456* ``AUPE``: Accepts untagged VLAN. 1457 1458* ``ROPE``: Accepts unicast hash. 1459 1460* ``BAM``: Accepts broadcast packets. 1461 1462* ``MPE``: Accepts all multicast packets. 1463 1464set port - tx_rate (for Queue) 1465~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 1467Set TX rate limitation for a queue on a port:: 1468 1469 testpmd> set port (port_id) queue (queue_id) rate (rate_value) 1470 1471set port - tx_rate (for VF) 1472~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 1474Set TX rate limitation for queues in VF on a port:: 1475 1476 testpmd> set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) 1477 1478set port - mirror rule 1479~~~~~~~~~~~~~~~~~~~~~~ 1480 1481Set pool or vlan type mirror rule for a port:: 1482 1483 testpmd> set port (port_id) mirror-rule (rule_id) \ 1484 (pool-mirror-up|pool-mirror-down|vlan-mirror) \ 1485 (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) 1486 1487Set link mirror rule for a port:: 1488 1489 testpmd> set port (port_id) mirror-rule (rule_id) \ 1490 (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off) 1491 1492For example to enable mirror traffic with vlan 0,1 to pool 0:: 1493 1494 set port 0 mirror-rule 0 vlan-mirror 0,1 dst-pool 0 on 1495 1496reset port - mirror rule 1497~~~~~~~~~~~~~~~~~~~~~~~~ 1498 1499Reset a mirror rule for a port:: 1500 1501 testpmd> reset port (port_id) mirror-rule (rule_id) 1502 1503set flush_rx 1504~~~~~~~~~~~~ 1505 1506Set the flush on RX streams before forwarding. 1507The default is flush ``on``. 1508Mainly used with PCAP drivers to turn off the default behavior of flushing the first 512 packets on RX streams:: 1509 1510 testpmd> set flush_rx off 1511 1512set bypass mode 1513~~~~~~~~~~~~~~~ 1514 1515Set the bypass mode for the lowest port on bypass enabled NIC:: 1516 1517 testpmd> set bypass mode (normal|bypass|isolate) (port_id) 1518 1519set bypass event 1520~~~~~~~~~~~~~~~~ 1521 1522Set the event required to initiate specified bypass mode for the lowest port on a bypass enabled:: 1523 1524 testpmd> set bypass event (timeout|os_on|os_off|power_on|power_off) \ 1525 mode (normal|bypass|isolate) (port_id) 1526 1527Where: 1528 1529* ``timeout``: Enable bypass after watchdog timeout. 1530 1531* ``os_on``: Enable bypass when OS/board is powered on. 1532 1533* ``os_off``: Enable bypass when OS/board is powered off. 1534 1535* ``power_on``: Enable bypass when power supply is turned on. 1536 1537* ``power_off``: Enable bypass when power supply is turned off. 1538 1539 1540set bypass timeout 1541~~~~~~~~~~~~~~~~~~ 1542 1543Set the bypass watchdog timeout to ``n`` seconds where 0 = instant:: 1544 1545 testpmd> set bypass timeout (0|1.5|2|3|4|8|16|32) 1546 1547show bypass config 1548~~~~~~~~~~~~~~~~~~ 1549 1550Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC:: 1551 1552 testpmd> show bypass config (port_id) 1553 1554set link up 1555~~~~~~~~~~~ 1556 1557Set link up for a port:: 1558 1559 testpmd> set link-up port (port id) 1560 1561set link down 1562~~~~~~~~~~~~~ 1563 1564Set link down for a port:: 1565 1566 testpmd> set link-down port (port id) 1567 1568E-tag set 1569~~~~~~~~~ 1570 1571Enable E-tag insertion for a VF on a port:: 1572 1573 testpmd> E-tag set insertion on port-tag-id (value) port (port_id) vf (vf_id) 1574 1575Disable E-tag insertion for a VF on a port:: 1576 1577 testpmd> E-tag set insertion off port (port_id) vf (vf_id) 1578 1579Enable/disable E-tag stripping on a port:: 1580 1581 testpmd> E-tag set stripping (on|off) port (port_id) 1582 1583Enable/disable E-tag based forwarding on a port:: 1584 1585 testpmd> E-tag set forwarding (on|off) port (port_id) 1586 1587Add an E-tag forwarding filter on a port:: 1588 1589 testpmd> E-tag set filter add e-tag-id (value) dst-pool (pool_id) port (port_id) 1590 1591Delete an E-tag forwarding filter on a port:: 1592 testpmd> E-tag set filter del e-tag-id (value) port (port_id) 1593 1594ddp add 1595~~~~~~~ 1596 1597Load a dynamic device personalization (DDP) profile and store backup profile:: 1598 1599 testpmd> ddp add (port_id) (profile_path[,backup_profile_path]) 1600 1601ddp del 1602~~~~~~~ 1603 1604Delete a dynamic device personalization profile and restore backup profile:: 1605 1606 testpmd> ddp del (port_id) (backup_profile_path) 1607 1608ptype mapping 1609~~~~~~~~~~~~~ 1610 1611List all items from the ptype mapping table:: 1612 1613 testpmd> ptype mapping get (port_id) (valid_only) 1614 1615Where: 1616 1617* ``valid_only``: A flag indicates if only list valid items(=1) or all itemss(=0). 1618 1619Replace a specific or a group of software defined ptype with a new one:: 1620 1621 testpmd> ptype mapping replace (port_id) (target) (mask) (pkt_type) 1622 1623where: 1624 1625* ``target``: A specific software ptype or a mask to represent a group of software ptypes. 1626 1627* ``mask``: A flag indicate if "target" is a specific software ptype(=0) or a ptype mask(=1). 1628 1629* ``pkt_type``: The new software ptype to replace the old ones. 1630 1631Update hardware defined ptype to software defined packet type mapping table:: 1632 1633 testpmd> ptype mapping update (port_id) (hw_ptype) (sw_ptype) 1634 1635where: 1636 1637* ``hw_ptype``: hardware ptype as the index of the ptype mapping table. 1638 1639* ``sw_ptype``: software ptype as the value of the ptype mapping table. 1640 1641Reset ptype mapping table:: 1642 1643 testpmd> ptype mapping reset (port_id) 1644 1645config per port Rx offloading 1646~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1647 1648Enable or disable a per port Rx offloading on all Rx queues of a port:: 1649 1650 testpmd> port config (port_id) rx_offload (offloading) on|off 1651 1652* ``offloading``: can be any of these offloading capability: 1653 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro, 1654 qinq_strip, outer_ipv4_cksum, macsec_strip, 1655 header_split, vlan_filter, vlan_extend, jumbo_frame, 1656 scatter, timestamp, security, keep_crc 1657 1658This command should be run when the port is stopped, or else it will fail. 1659 1660config per queue Rx offloading 1661~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1662 1663Enable or disable a per queue Rx offloading only on a specific Rx queue:: 1664 1665 testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off 1666 1667* ``offloading``: can be any of these offloading capability: 1668 vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro, 1669 qinq_strip, outer_ipv4_cksum, macsec_strip, 1670 header_split, vlan_filter, vlan_extend, jumbo_frame, 1671 scatter, timestamp, security, keep_crc 1672 1673This command should be run when the port is stopped, or else it will fail. 1674 1675config per port Tx offloading 1676~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1677 1678Enable or disable a per port Tx offloading on all Tx queues of a port:: 1679 1680 testpmd> port config (port_id) tx_offload (offloading) on|off 1681 1682* ``offloading``: can be any of these offloading capability: 1683 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum, 1684 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum, 1685 qinq_insert, vxlan_tnl_tso, gre_tnl_tso, 1686 ipip_tnl_tso, geneve_tnl_tso, macsec_insert, 1687 mt_lockfree, multi_segs, mbuf_fast_free, security, 1688 match_metadata 1689 1690This command should be run when the port is stopped, or else it will fail. 1691 1692config per queue Tx offloading 1693~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1694 1695Enable or disable a per queue Tx offloading only on a specific Tx queue:: 1696 1697 testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off 1698 1699* ``offloading``: can be any of these offloading capability: 1700 vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum, 1701 sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum, 1702 qinq_insert, vxlan_tnl_tso, gre_tnl_tso, 1703 ipip_tnl_tso, geneve_tnl_tso, macsec_insert, 1704 mt_lockfree, multi_segs, mbuf_fast_free, security 1705 1706This command should be run when the port is stopped, or else it will fail. 1707 1708Config VXLAN Encap outer layers 1709~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1710 1711Configure the outer layer to encapsulate a packet inside a VXLAN tunnel:: 1712 1713 set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \ 1714 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) \ 1715 eth-dst (eth-dst) 1716 1717 set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \ 1718 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \ 1719 eth-src (eth-src) eth-dst (eth-dst) 1720 1721 set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) \ 1722 udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) \ 1723 ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst) 1724 1725These commands will set an internal configuration inside testpmd, any following 1726flow rule using the action vxlan_encap will use the last configuration set. 1727To have a different encapsulation header, one of those commands must be called 1728before the flow rule creation. 1729 1730Config NVGRE Encap outer layers 1731~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1732 1733Configure the outer layer to encapsulate a packet inside a NVGRE tunnel:: 1734 1735 set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) ip-dst (ip-dst) \ 1736 eth-src (eth-src) eth-dst (eth-dst) 1737 set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni) ip-src (ip-src) \ 1738 ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst) 1739 1740These commands will set an internal configuration inside testpmd, any following 1741flow rule using the action nvgre_encap will use the last configuration set. 1742To have a different encapsulation header, one of those commands must be called 1743before the flow rule creation. 1744 1745Config L2 Encap 1746~~~~~~~~~~~~~~~ 1747 1748Configure the l2 to be used when encapsulating a packet with L2:: 1749 1750 set l2_encap ip-version (ipv4|ipv6) eth-src (eth-src) eth-dst (eth-dst) 1751 set l2_encap-with-vlan ip-version (ipv4|ipv6) vlan-tci (vlan-tci) \ 1752 eth-src (eth-src) eth-dst (eth-dst) 1753 1754Those commands will set an internal configuration inside testpmd, any following 1755flow rule using the action l2_encap will use the last configuration set. 1756To have a different encapsulation header, one of those commands must be called 1757before the flow rule creation. 1758 1759Config L2 Decap 1760~~~~~~~~~~~~~~~ 1761 1762Configure the l2 to be removed when decapsulating a packet with L2:: 1763 1764 set l2_decap ip-version (ipv4|ipv6) 1765 set l2_decap-with-vlan ip-version (ipv4|ipv6) 1766 1767Those commands will set an internal configuration inside testpmd, any following 1768flow rule using the action l2_decap will use the last configuration set. 1769To have a different encapsulation header, one of those commands must be called 1770before the flow rule creation. 1771 1772Config MPLSoGRE Encap outer layers 1773~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1774 1775Configure the outer layer to encapsulate a packet inside a MPLSoGRE tunnel:: 1776 1777 set mplsogre_encap ip-version (ipv4|ipv6) label (label) \ 1778 ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst) 1779 set mplsogre_encap-with-vlan ip-version (ipv4|ipv6) label (label) \ 1780 ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci) \ 1781 eth-src (eth-src) eth-dst (eth-dst) 1782 1783These commands will set an internal configuration inside testpmd, any following 1784flow rule using the action mplsogre_encap will use the last configuration set. 1785To have a different encapsulation header, one of those commands must be called 1786before the flow rule creation. 1787 1788Config MPLSoGRE Decap outer layers 1789~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1790 1791Configure the outer layer to decapsulate MPLSoGRE packet:: 1792 1793 set mplsogre_decap ip-version (ipv4|ipv6) 1794 set mplsogre_decap-with-vlan ip-version (ipv4|ipv6) 1795 1796These commands will set an internal configuration inside testpmd, any following 1797flow rule using the action mplsogre_decap will use the last configuration set. 1798To have a different decapsulation header, one of those commands must be called 1799before the flow rule creation. 1800 1801Config MPLSoUDP Encap outer layers 1802~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1803 1804Configure the outer layer to encapsulate a packet inside a MPLSoUDP tunnel:: 1805 1806 set mplsoudp_encap ip-version (ipv4|ipv6) label (label) udp-src (udp-src) \ 1807 udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \ 1808 eth-src (eth-src) eth-dst (eth-dst) 1809 set mplsoudp_encap-with-vlan ip-version (ipv4|ipv6) label (label) \ 1810 udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) \ 1811 vlan-tci (vlan-tci) eth-src (eth-src) eth-dst (eth-dst) 1812 1813These commands will set an internal configuration inside testpmd, any following 1814flow rule using the action mplsoudp_encap will use the last configuration set. 1815To have a different encapsulation header, one of those commands must be called 1816before the flow rule creation. 1817 1818Config MPLSoUDP Decap outer layers 1819~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1820 1821Configure the outer layer to decapsulate MPLSoUDP packet:: 1822 1823 set mplsoudp_decap ip-version (ipv4|ipv6) 1824 set mplsoudp_decap-with-vlan ip-version (ipv4|ipv6) 1825 1826These commands will set an internal configuration inside testpmd, any following 1827flow rule using the action mplsoudp_decap will use the last configuration set. 1828To have a different decapsulation header, one of those commands must be called 1829before the flow rule creation. 1830 1831Config Raw Encapsulation 1832~~~~~~~~~~~~~~~~~~~~~~~~~ 1833 1834Configure the raw data to be used when encapsulating a packet by 1835rte_flow_action_raw_encap:: 1836 1837 set raw_encap {item} [/ {item} [...]] / end_set 1838 1839This command will set an internal buffer inside testpmd, any following flow rule 1840using the action raw_encap will use the last configuration set. 1841To have a different encapsulation header, this command must be called before the 1842flow rule creation. 1843 1844Config Raw Decapsulation 1845~~~~~~~~~~~~~~~~~~~~~~~~ 1846 1847Configure the raw data to be used when decapsulating a packet by 1848rte_flow_action_raw_decap:: 1849 1850 set raw_decap {item} [/ {item} [...]] / end_set 1851 1852This command will set an internal buffer inside testpmd, any following flow rule 1853using the action raw_decap will use the last configuration set. 1854 1855Port Functions 1856-------------- 1857 1858The following sections show functions for configuring ports. 1859 1860.. note:: 1861 1862 Port configuration changes only become active when forwarding is started/restarted. 1863 1864port attach 1865~~~~~~~~~~~ 1866 1867Attach a port specified by pci address or virtual device args:: 1868 1869 testpmd> port attach (identifier) 1870 1871To attach a new pci device, the device should be recognized by kernel first. 1872Then it should be moved under DPDK management. 1873Finally the port can be attached to testpmd. 1874 1875For example, to move a pci device using ixgbe under DPDK management: 1876 1877.. code-block:: console 1878 1879 # Check the status of the available devices. 1880 ./usertools/dpdk-devbind.py --status 1881 1882 Network devices using DPDK-compatible driver 1883 ============================================ 1884 <none> 1885 1886 Network devices using kernel driver 1887 =================================== 1888 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused= 1889 1890 1891 # Bind the device to igb_uio. 1892 sudo ./usertools/dpdk-devbind.py -b igb_uio 0000:0a:00.0 1893 1894 1895 # Recheck the status of the devices. 1896 ./usertools/dpdk-devbind.py --status 1897 Network devices using DPDK-compatible driver 1898 ============================================ 1899 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused= 1900 1901To attach a port created by virtual device, above steps are not needed. 1902 1903For example, to attach a port whose pci address is 0000:0a:00.0. 1904 1905.. code-block:: console 1906 1907 testpmd> port attach 0000:0a:00.0 1908 Attaching a new port... 1909 EAL: PCI device 0000:0a:00.0 on NUMA socket -1 1910 EAL: probe driver: 8086:10fb rte_ixgbe_pmd 1911 EAL: PCI memory mapped at 0x7f83bfa00000 1912 EAL: PCI memory mapped at 0x7f83bfa80000 1913 PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5 1914 PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb 1915 Port 0 is attached. Now total ports is 1 1916 Done 1917 1918For example, to attach a port created by pcap PMD. 1919 1920.. code-block:: console 1921 1922 testpmd> port attach net_pcap0 1923 Attaching a new port... 1924 PMD: Initializing pmd_pcap for net_pcap0 1925 PMD: Creating pcap-backed ethdev on numa socket 0 1926 Port 0 is attached. Now total ports is 1 1927 Done 1928 1929In this case, identifier is ``net_pcap0``. 1930This identifier format is the same as ``--vdev`` format of DPDK applications. 1931 1932For example, to re-attach a bonded port which has been previously detached, 1933the mode and slave parameters must be given. 1934 1935.. code-block:: console 1936 1937 testpmd> port attach net_bond_0,mode=0,slave=1 1938 Attaching a new port... 1939 EAL: Initializing pmd_bond for net_bond_0 1940 EAL: Create bonded device net_bond_0 on port 0 in mode 0 on socket 0. 1941 Port 0 is attached. Now total ports is 1 1942 Done 1943 1944 1945port detach 1946~~~~~~~~~~~ 1947 1948Detach a specific port:: 1949 1950 testpmd> port detach (port_id) 1951 1952Before detaching a port, the port should be stopped and closed. 1953 1954For example, to detach a pci device port 0. 1955 1956.. code-block:: console 1957 1958 testpmd> port stop 0 1959 Stopping ports... 1960 Done 1961 testpmd> port close 0 1962 Closing ports... 1963 Done 1964 1965 testpmd> port detach 0 1966 Detaching a port... 1967 EAL: PCI device 0000:0a:00.0 on NUMA socket -1 1968 EAL: remove driver: 8086:10fb rte_ixgbe_pmd 1969 EAL: PCI memory unmapped at 0x7f83bfa00000 1970 EAL: PCI memory unmapped at 0x7f83bfa80000 1971 Done 1972 1973 1974For example, to detach a virtual device port 0. 1975 1976.. code-block:: console 1977 1978 testpmd> port stop 0 1979 Stopping ports... 1980 Done 1981 testpmd> port close 0 1982 Closing ports... 1983 Done 1984 1985 testpmd> port detach 0 1986 Detaching a port... 1987 PMD: Closing pcap ethdev on numa socket 0 1988 Port 'net_pcap0' is detached. Now total ports is 0 1989 Done 1990 1991To remove a pci device completely from the system, first detach the port from testpmd. 1992Then the device should be moved under kernel management. 1993Finally the device can be removed using kernel pci hotplug functionality. 1994 1995For example, to move a pci device under kernel management: 1996 1997.. code-block:: console 1998 1999 sudo ./usertools/dpdk-devbind.py -b ixgbe 0000:0a:00.0 2000 2001 ./usertools/dpdk-devbind.py --status 2002 2003 Network devices using DPDK-compatible driver 2004 ============================================ 2005 <none> 2006 2007 Network devices using kernel driver 2008 =================================== 2009 0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=igb_uio 2010 2011To remove a port created by a virtual device, above steps are not needed. 2012 2013port start 2014~~~~~~~~~~ 2015 2016Start all ports or a specific port:: 2017 2018 testpmd> port start (port_id|all) 2019 2020port stop 2021~~~~~~~~~ 2022 2023Stop all ports or a specific port:: 2024 2025 testpmd> port stop (port_id|all) 2026 2027port close 2028~~~~~~~~~~ 2029 2030Close all ports or a specific port:: 2031 2032 testpmd> port close (port_id|all) 2033 2034port reset 2035~~~~~~~~~~ 2036 2037Reset all ports or a specific port:: 2038 2039 testpmd> port reset (port_id|all) 2040 2041User should stop port(s) before resetting and (re-)start after reset. 2042 2043port config - queue ring size 2044~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2045 2046Configure a rx/tx queue ring size:: 2047 2048 testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value) 2049 2050Only take effect after command that (re-)start the port or command that setup specific queue. 2051 2052port start/stop queue 2053~~~~~~~~~~~~~~~~~~~~~ 2054 2055Start/stop a rx/tx queue on a specific port:: 2056 2057 testpmd> port (port_id) (rxq|txq) (queue_id) (start|stop) 2058 2059port config - queue deferred start 2060~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2061 2062Switch on/off deferred start of a specific port queue:: 2063 2064 testpmd> port (port_id) (rxq|txq) (queue_id) deferred_start (on|off) 2065 2066port setup queue 2067~~~~~~~~~~~~~~~~~~~~~ 2068 2069Setup a rx/tx queue on a specific port:: 2070 2071 testpmd> port (port_id) (rxq|txq) (queue_id) setup 2072 2073Only take effect when port is started. 2074 2075port config - speed 2076~~~~~~~~~~~~~~~~~~~ 2077 2078Set the speed and duplex mode for all ports or a specific port:: 2079 2080 testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|auto) \ 2081 duplex (half|full|auto) 2082 2083port config - queues/descriptors 2084~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2085 2086Set number of queues/descriptors for rxq, txq, rxd and txd:: 2087 2088 testpmd> port config all (rxq|txq|rxd|txd) (value) 2089 2090This is equivalent to the ``--rxq``, ``--txq``, ``--rxd`` and ``--txd`` command-line options. 2091 2092port config - max-pkt-len 2093~~~~~~~~~~~~~~~~~~~~~~~~~ 2094 2095Set the maximum packet length:: 2096 2097 testpmd> port config all max-pkt-len (value) 2098 2099This is equivalent to the ``--max-pkt-len`` command-line option. 2100 2101port config - Drop Packets 2102~~~~~~~~~~~~~~~~~~~~~~~~~~ 2103 2104Enable or disable packet drop on all RX queues of all ports when no receive buffers available:: 2105 2106 testpmd> port config all drop-en (on|off) 2107 2108Packet dropping when no receive buffers available is off by default. 2109 2110The ``on`` option is equivalent to the ``--enable-drop-en`` command-line option. 2111 2112port config - RSS 2113~~~~~~~~~~~~~~~~~ 2114 2115Set the RSS (Receive Side Scaling) mode on or off:: 2116 2117 testpmd> port config all rss (all|default|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|vxlan-gpe|none) 2118 2119RSS is on by default. 2120 2121The ``all`` option is equivalent to ip|tcp|udp|sctp|ether. 2122The ``default`` option enables all supported RSS types reported by device info. 2123The ``none`` option is equivalent to the ``--disable-rss`` command-line option. 2124 2125port config - RSS Reta 2126~~~~~~~~~~~~~~~~~~~~~~ 2127 2128Set the RSS (Receive Side Scaling) redirection table:: 2129 2130 testpmd> port config all rss reta (hash,queue)[,(hash,queue)] 2131 2132port config - DCB 2133~~~~~~~~~~~~~~~~~ 2134 2135Set the DCB mode for an individual port:: 2136 2137 testpmd> port config (port_id) dcb vt (on|off) (traffic_class) pfc (on|off) 2138 2139The traffic class should be 4 or 8. 2140 2141port config - Burst 2142~~~~~~~~~~~~~~~~~~~ 2143 2144Set the number of packets per burst:: 2145 2146 testpmd> port config all burst (value) 2147 2148This is equivalent to the ``--burst`` command-line option. 2149 2150port config - Threshold 2151~~~~~~~~~~~~~~~~~~~~~~~ 2152 2153Set thresholds for TX/RX queues:: 2154 2155 testpmd> port config all (threshold) (value) 2156 2157Where the threshold type can be: 2158 2159* ``txpt:`` Set the prefetch threshold register of the TX rings, 0 <= value <= 255. 2160 2161* ``txht:`` Set the host threshold register of the TX rings, 0 <= value <= 255. 2162 2163* ``txwt:`` Set the write-back threshold register of the TX rings, 0 <= value <= 255. 2164 2165* ``rxpt:`` Set the prefetch threshold register of the RX rings, 0 <= value <= 255. 2166 2167* ``rxht:`` Set the host threshold register of the RX rings, 0 <= value <= 255. 2168 2169* ``rxwt:`` Set the write-back threshold register of the RX rings, 0 <= value <= 255. 2170 2171* ``txfreet:`` Set the transmit free threshold of the TX rings, 0 <= value <= txd. 2172 2173* ``rxfreet:`` Set the transmit free threshold of the RX rings, 0 <= value <= rxd. 2174 2175* ``txrst:`` Set the transmit RS bit threshold of TX rings, 0 <= value <= txd. 2176 2177These threshold options are also available from the command-line. 2178 2179port config - E-tag 2180~~~~~~~~~~~~~~~~~~~ 2181 2182Set the value of ether-type for E-tag:: 2183 2184 testpmd> port config (port_id|all) l2-tunnel E-tag ether-type (value) 2185 2186Enable/disable the E-tag support:: 2187 2188 testpmd> port config (port_id|all) l2-tunnel E-tag (enable|disable) 2189 2190port config pctype mapping 2191~~~~~~~~~~~~~~~~~~~~~~~~~~ 2192 2193Reset pctype mapping table:: 2194 2195 testpmd> port config (port_id) pctype mapping reset 2196 2197Update hardware defined pctype to software defined flow type mapping table:: 2198 2199 testpmd> port config (port_id) pctype mapping update (pctype_id_0[,pctype_id_1]*) (flow_type_id) 2200 2201where: 2202 2203* ``pctype_id_x``: hardware pctype id as index of bit in bitmask value of the pctype mapping table. 2204 2205* ``flow_type_id``: software flow type id as the index of the pctype mapping table. 2206 2207port config input set 2208~~~~~~~~~~~~~~~~~~~~~ 2209 2210Config RSS/FDIR/FDIR flexible payload input set for some pctype:: 2211 2212 testpmd> port config (port_id) pctype (pctype_id) \ 2213 (hash_inset|fdir_inset|fdir_flx_inset) \ 2214 (get|set|clear) field (field_idx) 2215 2216Clear RSS/FDIR/FDIR flexible payload input set for some pctype:: 2217 2218 testpmd> port config (port_id) pctype (pctype_id) \ 2219 (hash_inset|fdir_inset|fdir_flx_inset) clear all 2220 2221where: 2222 2223* ``pctype_id``: hardware packet classification types. 2224* ``field_idx``: hardware field index. 2225 2226port config udp_tunnel_port 2227~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2228 2229Add/remove UDP tunnel port for VXLAN/GENEVE tunneling protocols:: 2230 2231 testpmd> port config (port_id) udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe (udp_port) 2232 2233port config tx_metadata 2234~~~~~~~~~~~~~~~~~~~~~~~ 2235 2236Set Tx metadata value per port. 2237testpmd will add this value to any Tx packet sent from this port:: 2238 2239 testpmd> port config (port_id) tx_metadata (value) 2240 2241port config mtu 2242~~~~~~~~~~~~~~~ 2243 2244To configure MTU(Maximum Transmission Unit) on devices using testpmd:: 2245 2246 testpmd> port config mtu (port_id) (value) 2247 2248port config rss hash key 2249~~~~~~~~~~~~~~~~~~~~~~~~ 2250 2251To configure the RSS hash key used to compute the RSS 2252hash of input [IP] packets received on port:: 2253 2254 testpmd> port config <port_id> rss-hash-key (ipv4|ipv4-frag|\ 2255 ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\ 2256 ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|\ 2257 ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|\ 2258 ipv6-udp-ex <string of hex digits \ 2259 (variable length, NIC dependent)>) 2260 2261Device Functions 2262---------------- 2263 2264The following sections show functions for device operations. 2265 2266device detach 2267~~~~~~~~~~~~~ 2268 2269Detach a device specified by pci address or virtual device args:: 2270 2271 testpmd> device detach (identifier) 2272 2273Before detaching a device associated with ports, the ports should be stopped and closed. 2274 2275For example, to detach a pci device whose address is 0002:03:00.0. 2276 2277.. code-block:: console 2278 2279 testpmd> device detach 0002:03:00.0 2280 Removing a device... 2281 Port 1 is now closed 2282 EAL: Releasing pci mapped resource for 0002:03:00.0 2283 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218a050000 2284 EAL: Calling pci_unmap_resource for 0002:03:00.0 at 0x218c050000 2285 Device 0002:03:00.0 is detached 2286 Now total ports is 1 2287 2288For example, to detach a port created by pcap PMD. 2289 2290.. code-block:: console 2291 2292 testpmd> device detach net_pcap0 2293 Removing a device... 2294 Port 0 is now closed 2295 Device net_pcap0 is detached 2296 Now total ports is 0 2297 Done 2298 2299In this case, identifier is ``net_pcap0``. 2300This identifier format is the same as ``--vdev`` format of DPDK applications. 2301 2302Link Bonding Functions 2303---------------------- 2304 2305The Link Bonding functions make it possible to dynamically create and 2306manage link bonding devices from within testpmd interactive prompt. 2307 2308create bonded device 2309~~~~~~~~~~~~~~~~~~~~ 2310 2311Create a new bonding device:: 2312 2313 testpmd> create bonded device (mode) (socket) 2314 2315For example, to create a bonded device in mode 1 on socket 0:: 2316 2317 testpmd> create bonded device 1 0 2318 created new bonded device (port X) 2319 2320add bonding slave 2321~~~~~~~~~~~~~~~~~ 2322 2323Adds Ethernet device to a Link Bonding device:: 2324 2325 testpmd> add bonding slave (slave id) (port id) 2326 2327For example, to add Ethernet device (port 6) to a Link Bonding device (port 10):: 2328 2329 testpmd> add bonding slave 6 10 2330 2331 2332remove bonding slave 2333~~~~~~~~~~~~~~~~~~~~ 2334 2335Removes an Ethernet slave device from a Link Bonding device:: 2336 2337 testpmd> remove bonding slave (slave id) (port id) 2338 2339For example, to remove Ethernet slave device (port 6) to a Link Bonding device (port 10):: 2340 2341 testpmd> remove bonding slave 6 10 2342 2343set bonding mode 2344~~~~~~~~~~~~~~~~ 2345 2346Set the Link Bonding mode of a Link Bonding device:: 2347 2348 testpmd> set bonding mode (value) (port id) 2349 2350For example, to set the bonding mode of a Link Bonding device (port 10) to broadcast (mode 3):: 2351 2352 testpmd> set bonding mode 3 10 2353 2354set bonding primary 2355~~~~~~~~~~~~~~~~~~~ 2356 2357Set an Ethernet slave device as the primary device on a Link Bonding device:: 2358 2359 testpmd> set bonding primary (slave id) (port id) 2360 2361For example, to set the Ethernet slave device (port 6) as the primary port of a Link Bonding device (port 10):: 2362 2363 testpmd> set bonding primary 6 10 2364 2365set bonding mac 2366~~~~~~~~~~~~~~~ 2367 2368Set the MAC address of a Link Bonding device:: 2369 2370 testpmd> set bonding mac (port id) (mac) 2371 2372For example, to set the MAC address of a Link Bonding device (port 10) to 00:00:00:00:00:01:: 2373 2374 testpmd> set bonding mac 10 00:00:00:00:00:01 2375 2376set bonding xmit_balance_policy 2377~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2378 2379Set the transmission policy for a Link Bonding device when it is in Balance XOR mode:: 2380 2381 testpmd> set bonding xmit_balance_policy (port_id) (l2|l23|l34) 2382 2383For example, set a Link Bonding device (port 10) to use a balance policy of layer 3+4 (IP addresses & UDP ports):: 2384 2385 testpmd> set bonding xmit_balance_policy 10 l34 2386 2387 2388set bonding mon_period 2389~~~~~~~~~~~~~~~~~~~~~~ 2390 2391Set the link status monitoring polling period in milliseconds for a bonding device. 2392 2393This adds support for PMD slave devices which do not support link status interrupts. 2394When the mon_period is set to a value greater than 0 then all PMD's which do not support 2395link status ISR will be queried every polling interval to check if their link status has changed:: 2396 2397 testpmd> set bonding mon_period (port_id) (value) 2398 2399For example, to set the link status monitoring polling period of bonded device (port 5) to 150ms:: 2400 2401 testpmd> set bonding mon_period 5 150 2402 2403 2404set bonding lacp dedicated_queue 2405~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2406 2407Enable dedicated tx/rx queues on bonding devices slaves to handle LACP control plane traffic 2408when in mode 4 (link-aggregation-802.3ad):: 2409 2410 testpmd> set bonding lacp dedicated_queues (port_id) (enable|disable) 2411 2412 2413set bonding agg_mode 2414~~~~~~~~~~~~~~~~~~~~ 2415 2416Enable one of the specific aggregators mode when in mode 4 (link-aggregation-802.3ad):: 2417 2418 testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable) 2419 2420 2421show bonding config 2422~~~~~~~~~~~~~~~~~~~ 2423 2424Show the current configuration of a Link Bonding device:: 2425 2426 testpmd> show bonding config (port id) 2427 2428For example, 2429to show the configuration a Link Bonding device (port 9) with 3 slave devices (1, 3, 4) 2430in balance mode with a transmission policy of layer 2+3:: 2431 2432 testpmd> show bonding config 9 2433 Bonding mode: 2 2434 Balance Xmit Policy: BALANCE_XMIT_POLICY_LAYER23 2435 Slaves (3): [1 3 4] 2436 Active Slaves (3): [1 3 4] 2437 Primary: [3] 2438 2439 2440Register Functions 2441------------------ 2442 2443The Register Functions can be used to read from and write to registers on the network card referenced by a port number. 2444This is mainly useful for debugging purposes. 2445Reference should be made to the appropriate datasheet for the network card for details on the register addresses 2446and fields that can be accessed. 2447 2448read reg 2449~~~~~~~~ 2450 2451Display the value of a port register:: 2452 2453 testpmd> read reg (port_id) (address) 2454 2455For example, to examine the Flow Director control register (FDIRCTL, 0x0000EE000) on an Intel 82599 10 GbE Controller:: 2456 2457 testpmd> read reg 0 0xEE00 2458 port 0 PCI register at offset 0xEE00: 0x4A060029 (1241907241) 2459 2460read regfield 2461~~~~~~~~~~~~~ 2462 2463Display a port register bit field:: 2464 2465 testpmd> read regfield (port_id) (address) (bit_x) (bit_y) 2466 2467For example, reading the lowest two bits from the register in the example above:: 2468 2469 testpmd> read regfield 0 0xEE00 0 1 2470 port 0 PCI register at offset 0xEE00: bits[0, 1]=0x1 (1) 2471 2472read regbit 2473~~~~~~~~~~~ 2474 2475Display a single port register bit:: 2476 2477 testpmd> read regbit (port_id) (address) (bit_x) 2478 2479For example, reading the lowest bit from the register in the example above:: 2480 2481 testpmd> read regbit 0 0xEE00 0 2482 port 0 PCI register at offset 0xEE00: bit 0=1 2483 2484write reg 2485~~~~~~~~~ 2486 2487Set the value of a port register:: 2488 2489 testpmd> write reg (port_id) (address) (value) 2490 2491For example, to clear a register:: 2492 2493 testpmd> write reg 0 0xEE00 0x0 2494 port 0 PCI register at offset 0xEE00: 0x00000000 (0) 2495 2496write regfield 2497~~~~~~~~~~~~~~ 2498 2499Set bit field of a port register:: 2500 2501 testpmd> write regfield (port_id) (address) (bit_x) (bit_y) (value) 2502 2503For example, writing to the register cleared in the example above:: 2504 2505 testpmd> write regfield 0 0xEE00 0 1 2 2506 port 0 PCI register at offset 0xEE00: 0x00000002 (2) 2507 2508write regbit 2509~~~~~~~~~~~~ 2510 2511Set single bit value of a port register:: 2512 2513 testpmd> write regbit (port_id) (address) (bit_x) (value) 2514 2515For example, to set the high bit in the register from the example above:: 2516 2517 testpmd> write regbit 0 0xEE00 31 1 2518 port 0 PCI register at offset 0xEE00: 0x8000000A (2147483658) 2519 2520Traffic Metering and Policing 2521----------------------------- 2522 2523The following section shows functions for configuring traffic metering and 2524policing on the ethernet device through the use of generic ethdev API. 2525 2526show port traffic management capability 2527~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2528 2529Show traffic metering and policing capability of the port:: 2530 2531 testpmd> show port meter cap (port_id) 2532 2533add port meter profile (srTCM rfc2967) 2534~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2535 2536Add meter profile (srTCM rfc2697) to the ethernet device:: 2537 2538 testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \ 2539 (cir) (cbs) (ebs) 2540 2541where: 2542 2543* ``profile_id``: ID for the meter profile. 2544* ``cir``: Committed Information Rate (CIR) (bytes/second). 2545* ``cbs``: Committed Burst Size (CBS) (bytes). 2546* ``ebs``: Excess Burst Size (EBS) (bytes). 2547 2548add port meter profile (trTCM rfc2968) 2549~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2550 2551Add meter profile (srTCM rfc2698) to the ethernet device:: 2552 2553 testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \ 2554 (cir) (pir) (cbs) (pbs) 2555 2556where: 2557 2558* ``profile_id``: ID for the meter profile. 2559* ``cir``: Committed information rate (bytes/second). 2560* ``pir``: Peak information rate (bytes/second). 2561* ``cbs``: Committed burst size (bytes). 2562* ``pbs``: Peak burst size (bytes). 2563 2564add port meter profile (trTCM rfc4115) 2565~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2566 2567Add meter profile (trTCM rfc4115) to the ethernet device:: 2568 2569 testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \ 2570 (cir) (eir) (cbs) (ebs) 2571 2572where: 2573 2574* ``profile_id``: ID for the meter profile. 2575* ``cir``: Committed information rate (bytes/second). 2576* ``eir``: Excess information rate (bytes/second). 2577* ``cbs``: Committed burst size (bytes). 2578* ``ebs``: Excess burst size (bytes). 2579 2580delete port meter profile 2581~~~~~~~~~~~~~~~~~~~~~~~~~ 2582 2583Delete meter profile from the ethernet device:: 2584 2585 testpmd> del port meter profile (port_id) (profile_id) 2586 2587create port meter 2588~~~~~~~~~~~~~~~~~ 2589 2590Create new meter object for the ethernet device:: 2591 2592 testpmd> create port meter (port_id) (mtr_id) (profile_id) \ 2593 (meter_enable) (g_action) (y_action) (r_action) (stats_mask) (shared) \ 2594 (use_pre_meter_color) [(dscp_tbl_entry0) (dscp_tbl_entry1)...\ 2595 (dscp_tbl_entry63)] 2596 2597where: 2598 2599* ``mtr_id``: meter object ID. 2600* ``profile_id``: ID for the meter profile. 2601* ``meter_enable``: When this parameter has a non-zero value, the meter object 2602 gets enabled at the time of creation, otherwise remains disabled. 2603* ``g_action``: Policer action for the packet with green color. 2604* ``y_action``: Policer action for the packet with yellow color. 2605* ``r_action``: Policer action for the packet with red color. 2606* ``stats_mask``: Mask of statistics counter types to be enabled for the 2607 meter object. 2608* ``shared``: When this parameter has a non-zero value, the meter object is 2609 shared by multiple flows. Otherwise, meter object is used by single flow. 2610* ``use_pre_meter_color``: When this parameter has a non-zero value, the 2611 input color for the current meter object is determined by the latest meter 2612 object in the same flow. Otherwise, the current meter object uses the 2613 *dscp_table* to determine the input color. 2614* ``dscp_tbl_entryx``: DSCP table entry x providing meter providing input 2615 color, 0 <= x <= 63. 2616 2617enable port meter 2618~~~~~~~~~~~~~~~~~ 2619 2620Enable meter for the ethernet device:: 2621 2622 testpmd> enable port meter (port_id) (mtr_id) 2623 2624disable port meter 2625~~~~~~~~~~~~~~~~~~ 2626 2627Disable meter for the ethernet device:: 2628 2629 testpmd> disable port meter (port_id) (mtr_id) 2630 2631delete port meter 2632~~~~~~~~~~~~~~~~~ 2633 2634Delete meter for the ethernet device:: 2635 2636 testpmd> del port meter (port_id) (mtr_id) 2637 2638Set port meter profile 2639~~~~~~~~~~~~~~~~~~~~~~ 2640 2641Set meter profile for the ethernet device:: 2642 2643 testpmd> set port meter profile (port_id) (mtr_id) (profile_id) 2644 2645set port meter dscp table 2646~~~~~~~~~~~~~~~~~~~~~~~~~ 2647 2648Set meter dscp table for the ethernet device:: 2649 2650 testpmd> set port meter dscp table (port_id) (mtr_id) [(dscp_tbl_entry0) \ 2651 (dscp_tbl_entry1)...(dscp_tbl_entry63)] 2652 2653set port meter policer action 2654~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2655 2656Set meter policer action for the ethernet device:: 2657 2658 testpmd> set port meter policer action (port_id) (mtr_id) (action_mask) \ 2659 (action0) [(action1) (action1)] 2660 2661where: 2662 2663* ``action_mask``: Bit mask indicating which policer actions need to be 2664 updated. One or more policer actions can be updated in a single function 2665 invocation. To update the policer action associated with color C, bit 2666 (1 << C) needs to be set in *action_mask* and element at position C 2667 in the *actions* array needs to be valid. 2668* ``actionx``: Policer action for the color x, 2669 RTE_MTR_GREEN <= x < RTE_MTR_COLORS 2670 2671set port meter stats mask 2672~~~~~~~~~~~~~~~~~~~~~~~~~ 2673 2674Set meter stats mask for the ethernet device:: 2675 2676 testpmd> set port meter stats mask (port_id) (mtr_id) (stats_mask) 2677 2678where: 2679 2680* ``stats_mask``: Bit mask indicating statistics counter types to be enabled. 2681 2682show port meter stats 2683~~~~~~~~~~~~~~~~~~~~~ 2684 2685Show meter stats of the ethernet device:: 2686 2687 testpmd> show port meter stats (port_id) (mtr_id) (clear) 2688 2689where: 2690 2691* ``clear``: Flag that indicates whether the statistics counters should 2692 be cleared (i.e. set to zero) immediately after they have been read or not. 2693 2694Traffic Management 2695------------------ 2696 2697The following section shows functions for configuring traffic management on 2698on the ethernet device through the use of generic TM API. 2699 2700show port traffic management capability 2701~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2702 2703Show traffic management capability of the port:: 2704 2705 testpmd> show port tm cap (port_id) 2706 2707show port traffic management capability (hierarchy level) 2708~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2709 2710Show traffic management hierarchy level capability of the port:: 2711 2712 testpmd> show port tm level cap (port_id) (level_id) 2713 2714show port traffic management capability (hierarchy node level) 2715~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2716 2717Show the traffic management hierarchy node capability of the port:: 2718 2719 testpmd> show port tm node cap (port_id) (node_id) 2720 2721show port traffic management hierarchy node type 2722~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2723 2724Show the port traffic management hierarchy node type:: 2725 2726 testpmd> show port tm node type (port_id) (node_id) 2727 2728show port traffic management hierarchy node stats 2729~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2730 2731Show the port traffic management hierarchy node statistics:: 2732 2733 testpmd> show port tm node stats (port_id) (node_id) (clear) 2734 2735where: 2736 2737* ``clear``: When this parameter has a non-zero value, the statistics counters 2738 are cleared (i.e. set to zero) immediately after they have been read, 2739 otherwise the statistics counters are left untouched. 2740 2741Add port traffic management private shaper profile 2742~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2743 2744Add the port traffic management private shaper profile:: 2745 2746 testpmd> add port tm node shaper profile (port_id) (shaper_profile_id) \ 2747 (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size) \ 2748 (packet_length_adjust) 2749 2750where: 2751 2752* ``shaper_profile id``: Shaper profile ID for the new profile. 2753* ``cmit_tb_rate``: Committed token bucket rate (bytes per second). 2754* ``cmit_tb_size``: Committed token bucket size (bytes). 2755* ``peak_tb_rate``: Peak token bucket rate (bytes per second). 2756* ``peak_tb_size``: Peak token bucket size (bytes). 2757* ``packet_length_adjust``: The value (bytes) to be added to the length of 2758 each packet for the purpose of shaping. This parameter value can be used to 2759 correct the packet length with the framing overhead bytes that are consumed 2760 on the wire. 2761 2762Delete port traffic management private shaper profile 2763~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2764 2765Delete the port traffic management private shaper:: 2766 2767 testpmd> del port tm node shaper profile (port_id) (shaper_profile_id) 2768 2769where: 2770 2771* ``shaper_profile id``: Shaper profile ID that needs to be deleted. 2772 2773Add port traffic management shared shaper 2774~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2775 2776Create the port traffic management shared shaper:: 2777 2778 testpmd> add port tm node shared shaper (port_id) (shared_shaper_id) \ 2779 (shaper_profile_id) 2780 2781where: 2782 2783* ``shared_shaper_id``: Shared shaper ID to be created. 2784* ``shaper_profile id``: Shaper profile ID for shared shaper. 2785 2786Set port traffic management shared shaper 2787~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2788 2789Update the port traffic management shared shaper:: 2790 2791 testpmd> set port tm node shared shaper (port_id) (shared_shaper_id) \ 2792 (shaper_profile_id) 2793 2794where: 2795 2796* ``shared_shaper_id``: Shared shaper ID to be update. 2797* ``shaper_profile id``: Shaper profile ID for shared shaper. 2798 2799Delete port traffic management shared shaper 2800~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2801 2802Delete the port traffic management shared shaper:: 2803 2804 testpmd> del port tm node shared shaper (port_id) (shared_shaper_id) 2805 2806where: 2807 2808* ``shared_shaper_id``: Shared shaper ID to be deleted. 2809 2810Set port traffic management hierarchy node private shaper 2811~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2812 2813set the port traffic management hierarchy node private shaper:: 2814 2815 testpmd> set port tm node shaper profile (port_id) (node_id) \ 2816 (shaper_profile_id) 2817 2818where: 2819 2820* ``shaper_profile id``: Private shaper profile ID to be enabled on the 2821 hierarchy node. 2822 2823Add port traffic management WRED profile 2824~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2825 2826Create a new WRED profile:: 2827 2828 testpmd> add port tm node wred profile (port_id) (wred_profile_id) \ 2829 (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g) \ 2830 (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y) \ 2831 (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r) 2832 2833where: 2834 2835* ``wred_profile id``: Identifier for the newly create WRED profile 2836* ``color_g``: Packet color (green) 2837* ``min_th_g``: Minimum queue threshold for packet with green color 2838* ``max_th_g``: Minimum queue threshold for packet with green color 2839* ``maxp_inv_g``: Inverse of packet marking probability maximum value (maxp) 2840* ``wq_log2_g``: Negated log2 of queue weight (wq) 2841* ``color_y``: Packet color (yellow) 2842* ``min_th_y``: Minimum queue threshold for packet with yellow color 2843* ``max_th_y``: Minimum queue threshold for packet with yellow color 2844* ``maxp_inv_y``: Inverse of packet marking probability maximum value (maxp) 2845* ``wq_log2_y``: Negated log2 of queue weight (wq) 2846* ``color_r``: Packet color (red) 2847* ``min_th_r``: Minimum queue threshold for packet with yellow color 2848* ``max_th_r``: Minimum queue threshold for packet with yellow color 2849* ``maxp_inv_r``: Inverse of packet marking probability maximum value (maxp) 2850* ``wq_log2_r``: Negated log2 of queue weight (wq) 2851 2852Delete port traffic management WRED profile 2853~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2854 2855Delete the WRED profile:: 2856 2857 testpmd> del port tm node wred profile (port_id) (wred_profile_id) 2858 2859Add port traffic management hierarchy nonleaf node 2860~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2861 2862Add nonleaf node to port traffic management hierarchy:: 2863 2864 testpmd> add port tm nonleaf node (port_id) (node_id) (parent_node_id) \ 2865 (priority) (weight) (level_id) (shaper_profile_id) \ 2866 (n_sp_priorities) (stats_mask) (n_shared_shapers) \ 2867 [(shared_shaper_0) (shared_shaper_1) ...] \ 2868 2869where: 2870 2871* ``parent_node_id``: Node ID of the parent. 2872* ``priority``: Node priority (highest node priority is zero). This is used by 2873 the SP algorithm running on the parent node for scheduling this node. 2874* ``weight``: Node weight (lowest weight is one). The node weight is relative 2875 to the weight sum of all siblings that have the same priority. It is used by 2876 the WFQ algorithm running on the parent node for scheduling this node. 2877* ``level_id``: Hierarchy level of the node. 2878* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by 2879 the node. 2880* ``n_sp_priorities``: Number of strict priorities. 2881* ``stats_mask``: Mask of statistics counter types to be enabled for this node. 2882* ``n_shared_shapers``: Number of shared shapers. 2883* ``shared_shaper_id``: Shared shaper id. 2884 2885Add port traffic management hierarchy leaf node 2886~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2887 2888Add leaf node to port traffic management hierarchy:: 2889 2890 testpmd> add port tm leaf node (port_id) (node_id) (parent_node_id) \ 2891 (priority) (weight) (level_id) (shaper_profile_id) \ 2892 (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers) \ 2893 [(shared_shaper_id) (shared_shaper_id) ...] \ 2894 2895where: 2896 2897* ``parent_node_id``: Node ID of the parent. 2898* ``priority``: Node priority (highest node priority is zero). This is used by 2899 the SP algorithm running on the parent node for scheduling this node. 2900* ``weight``: Node weight (lowest weight is one). The node weight is relative 2901 to the weight sum of all siblings that have the same priority. It is used by 2902 the WFQ algorithm running on the parent node for scheduling this node. 2903* ``level_id``: Hierarchy level of the node. 2904* ``shaper_profile_id``: Shaper profile ID of the private shaper to be used by 2905 the node. 2906* ``cman_mode``: Congestion management mode to be enabled for this node. 2907* ``wred_profile_id``: WRED profile id to be enabled for this node. 2908* ``stats_mask``: Mask of statistics counter types to be enabled for this node. 2909* ``n_shared_shapers``: Number of shared shapers. 2910* ``shared_shaper_id``: Shared shaper id. 2911 2912Delete port traffic management hierarchy node 2913~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2914 2915Delete node from port traffic management hierarchy:: 2916 2917 testpmd> del port tm node (port_id) (node_id) 2918 2919Update port traffic management hierarchy parent node 2920~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2921 2922Update port traffic management hierarchy parent node:: 2923 2924 testpmd> set port tm node parent (port_id) (node_id) (parent_node_id) \ 2925 (priority) (weight) 2926 2927This function can only be called after the hierarchy commit invocation. Its 2928success depends on the port support for this operation, as advertised through 2929the port capability set. This function is valid for all nodes of the traffic 2930management hierarchy except root node. 2931 2932Suspend port traffic management hierarchy node 2933~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2934 2935 testpmd> suspend port tm node (port_id) (node_id) 2936 2937Resume port traffic management hierarchy node 2938~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2939 2940 testpmd> resume port tm node (port_id) (node_id) 2941 2942Commit port traffic management hierarchy 2943~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2944 2945Commit the traffic management hierarchy on the port:: 2946 2947 testpmd> port tm hierarchy commit (port_id) (clean_on_fail) 2948 2949where: 2950 2951* ``clean_on_fail``: When set to non-zero, hierarchy is cleared on function 2952 call failure. On the other hand, hierarchy is preserved when this parameter 2953 is equal to zero. 2954 2955Set port traffic management mark VLAN dei 2956~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2957 2958Enables/Disables the traffic management marking on the port for VLAN packets:: 2959 2960 testpmd> set port tm mark vlan_dei <port_id> <green> <yellow> <red> 2961 2962where: 2963 2964* ``port_id``: The port which on which VLAN packets marked as ``green`` or 2965 ``yellow`` or ``red`` will have dei bit enabled 2966 2967* ``green`` enable 1, disable 0 marking for dei bit of VLAN packets marked as green 2968 2969* ``yellow`` enable 1, disable 0 marking for dei bit of VLAN packets marked as yellow 2970 2971* ``red`` enable 1, disable 0 marking for dei bit of VLAN packets marked as red 2972 2973Set port traffic management mark IP dscp 2974~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2975 2976Enables/Disables the traffic management marking on the port for IP dscp packets:: 2977 2978 testpmd> set port tm mark ip_dscp <port_id> <green> <yellow> <red> 2979 2980where: 2981 2982* ``port_id``: The port which on which IP packets marked as ``green`` or 2983 ``yellow`` or ``red`` will have IP dscp bits updated 2984 2985* ``green`` enable 1, disable 0 marking IP dscp to low drop precedence for green packets 2986 2987* ``yellow`` enable 1, disable 0 marking IP dscp to medium drop precedence for yellow packets 2988 2989* ``red`` enable 1, disable 0 marking IP dscp to high drop precedence for red packets 2990 2991Set port traffic management mark IP ecn 2992~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2993 2994Enables/Disables the traffic management marking on the port for IP ecn packets:: 2995 2996 testpmd> set port tm mark ip_ecn <port_id> <green> <yellow> <red> 2997 2998where: 2999 3000* ``port_id``: The port which on which IP packets marked as ``green`` or 3001 ``yellow`` or ``red`` will have IP ecn bits updated 3002 3003* ``green`` enable 1, disable 0 marking IP ecn for green marked packets with ecn of 2'b01 or 2'b10 3004 to ecn of 2'b11 when IP is caring TCP or SCTP 3005 3006* ``yellow`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10 3007 to ecn of 2'b11 when IP is caring TCP or SCTP 3008 3009* ``red`` enable 1, disable 0 marking IP ecn for yellow marked packets with ecn of 2'b01 or 2'b10 3010 to ecn of 2'b11 when IP is caring TCP or SCTP 3011 3012Set port traffic management default hierarchy (softnic forwarding mode) 3013~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3014 3015set the traffic management default hierarchy on the port:: 3016 3017 testpmd> set port tm hierarchy default (port_id) 3018 3019Filter Functions 3020---------------- 3021 3022This section details the available filter functions that are available. 3023 3024Note these functions interface the deprecated legacy filtering framework, 3025superseded by *rte_flow*. See `Flow rules management`_. 3026 3027ethertype_filter 3028~~~~~~~~~~~~~~~~~~~~ 3029 3030Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue:: 3031 3032 ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \ 3033 ethertype (ether_type) (drop|fwd) queue (queue_id) 3034 3035The available information parameters are: 3036 3037* ``port_id``: The port which the Ethertype filter assigned on. 3038 3039* ``mac_addr``: Compare destination mac address. 3040 3041* ``mac_ignr``: Ignore destination mac address match. 3042 3043* ``mac_address``: Destination mac address to match. 3044 3045* ``ether_type``: The EtherType value want to match, 3046 for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid. 3047 3048* ``queue_id``: The receive queue associated with this EtherType filter. 3049 It is meaningless when deleting or dropping. 3050 3051Example, to add/remove an ethertype filter rule:: 3052 3053 testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \ 3054 ethertype 0x0806 fwd queue 3 3055 3056 testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \ 3057 ethertype 0x0806 fwd queue 3 3058 30592tuple_filter 3060~~~~~~~~~~~~~~~~~ 3061 3062Add or delete a 2-tuple filter, 3063which identifies packets by specific protocol and destination TCP/UDP port 3064and forwards packets into one of the receive queues:: 3065 3066 2tuple_filter (port_id) (add|del) dst_port (dst_port_value) \ 3067 protocol (protocol_value) mask (mask_value) \ 3068 tcp_flags (tcp_flags_value) priority (prio_value) \ 3069 queue (queue_id) 3070 3071The available information parameters are: 3072 3073* ``port_id``: The port which the 2-tuple filter assigned on. 3074 3075* ``dst_port_value``: Destination port in L4. 3076 3077* ``protocol_value``: IP L4 protocol. 3078 3079* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate. 3080 3081* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the pro_value is not set to 0x06 (TCP). 3082 3083* ``prio_value``: Priority of this filter. 3084 3085* ``queue_id``: The receive queue associated with this 2-tuple filter. 3086 3087Example, to add/remove an 2tuple filter rule:: 3088 3089 testpmd> 2tuple_filter 0 add dst_port 32 protocol 0x06 mask 0x03 \ 3090 tcp_flags 0x02 priority 3 queue 3 3091 3092 testpmd> 2tuple_filter 0 del dst_port 32 protocol 0x06 mask 0x03 \ 3093 tcp_flags 0x02 priority 3 queue 3 3094 30955tuple_filter 3096~~~~~~~~~~~~~~~~~ 3097 3098Add or delete a 5-tuple filter, 3099which consists of a 5-tuple (protocol, source and destination IP addresses, source and destination TCP/UDP/SCTP port) 3100and routes packets into one of the receive queues:: 3101 3102 5tuple_filter (port_id) (add|del) dst_ip (dst_address) src_ip \ 3103 (src_address) dst_port (dst_port_value) \ 3104 src_port (src_port_value) protocol (protocol_value) \ 3105 mask (mask_value) tcp_flags (tcp_flags_value) \ 3106 priority (prio_value) queue (queue_id) 3107 3108The available information parameters are: 3109 3110* ``port_id``: The port which the 5-tuple filter assigned on. 3111 3112* ``dst_address``: Destination IP address. 3113 3114* ``src_address``: Source IP address. 3115 3116* ``dst_port_value``: TCP/UDP destination port. 3117 3118* ``src_port_value``: TCP/UDP source port. 3119 3120* ``protocol_value``: L4 protocol. 3121 3122* ``mask_value``: Participates in the match or not by bit for field above, 1b means participate 3123 3124* ``tcp_flags_value``: TCP control bits. The non-zero value is invalid, when the protocol_value is not set to 0x06 (TCP). 3125 3126* ``prio_value``: The priority of this filter. 3127 3128* ``queue_id``: The receive queue associated with this 5-tuple filter. 3129 3130Example, to add/remove an 5tuple filter rule:: 3131 3132 testpmd> 5tuple_filter 0 add dst_ip 2.2.2.5 src_ip 2.2.2.4 \ 3133 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ 3134 flags 0x0 priority 3 queue 3 3135 3136 testpmd> 5tuple_filter 0 del dst_ip 2.2.2.5 src_ip 2.2.2.4 \ 3137 dst_port 64 src_port 32 protocol 0x06 mask 0x1F \ 3138 flags 0x0 priority 3 queue 3 3139 3140syn_filter 3141~~~~~~~~~~ 3142 3143Using the SYN filter, TCP packets whose *SYN* flag is set can be forwarded to a separate queue:: 3144 3145 syn_filter (port_id) (add|del) priority (high|low) queue (queue_id) 3146 3147The available information parameters are: 3148 3149* ``port_id``: The port which the SYN filter assigned on. 3150 3151* ``high``: This SYN filter has higher priority than other filters. 3152 3153* ``low``: This SYN filter has lower priority than other filters. 3154 3155* ``queue_id``: The receive queue associated with this SYN filter 3156 3157Example:: 3158 3159 testpmd> syn_filter 0 add priority high queue 3 3160 3161flex_filter 3162~~~~~~~~~~~ 3163 3164With flex filter, packets can be recognized by any arbitrary pattern within the first 128 bytes of the packet 3165and routed into one of the receive queues:: 3166 3167 flex_filter (port_id) (add|del) len (len_value) bytes (bytes_value) \ 3168 mask (mask_value) priority (prio_value) queue (queue_id) 3169 3170The available information parameters are: 3171 3172* ``port_id``: The port which the Flex filter is assigned on. 3173 3174* ``len_value``: Filter length in bytes, no greater than 128. 3175 3176* ``bytes_value``: A string in hexadecimal, means the value the flex filter needs to match. 3177 3178* ``mask_value``: A string in hexadecimal, bit 1 means corresponding byte participates in the match. 3179 3180* ``prio_value``: The priority of this filter. 3181 3182* ``queue_id``: The receive queue associated with this Flex filter. 3183 3184Example:: 3185 3186 testpmd> flex_filter 0 add len 16 bytes 0x00000000000000000000000008060000 \ 3187 mask 000C priority 3 queue 3 3188 3189 testpmd> flex_filter 0 del len 16 bytes 0x00000000000000000000000008060000 \ 3190 mask 000C priority 3 queue 3 3191 3192 3193.. _testpmd_flow_director: 3194 3195flow_director_filter 3196~~~~~~~~~~~~~~~~~~~~ 3197 3198The Flow Director works in receive mode to identify specific flows or sets of flows and route them to specific queues. 3199 3200Four types of filtering are supported which are referred to as Perfect Match, Signature, Perfect-mac-vlan and 3201Perfect-tunnel filters, the match mode is set by the ``--pkt-filter-mode`` command-line parameter: 3202 3203* Perfect match filters. 3204 The hardware checks a match between the masked fields of the received packets and the programmed filters. 3205 The masked fields are for IP flow. 3206 3207* Signature filters. 3208 The hardware checks a match between a hash-based signature of the masked fields of the received packet. 3209 3210* Perfect-mac-vlan match filters. 3211 The hardware checks a match between the masked fields of the received packets and the programmed filters. 3212 The masked fields are for MAC VLAN flow. 3213 3214* Perfect-tunnel match filters. 3215 The hardware checks a match between the masked fields of the received packets and the programmed filters. 3216 The masked fields are for tunnel flow. 3217 3218* Perfect-raw-flow-type match filters. 3219 The hardware checks a match between the masked fields of the received packets and pre-loaded raw (template) packet. 3220 The masked fields are specified by input sets. 3221 3222The Flow Director filters can match the different fields for different type of packet: flow type, specific input set 3223per flow type and the flexible payload. 3224 3225The Flow Director can also mask out parts of all of these fields so that filters 3226are only applied to certain fields or parts of the fields. 3227 3228Note that for raw flow type mode the source and destination fields in the 3229raw packet buffer need to be presented in a reversed order with respect 3230to the expected received packets. 3231For example: IP source and destination addresses or TCP/UDP/SCTP 3232source and destination ports 3233 3234Different NICs may have different capabilities, command show port fdir (port_id) can be used to acquire the information. 3235 3236# Commands to add flow director filters of different flow types:: 3237 3238 flow_director_filter (port_id) mode IP (add|del|update) \ 3239 flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) \ 3240 src (src_ip_address) dst (dst_ip_address) \ 3241 tos (tos_value) proto (proto_value) ttl (ttl_value) \ 3242 vlan (vlan_value) flexbytes (flexbytes_value) \ 3243 (drop|fwd) pf|vf(vf_id) queue (queue_id) \ 3244 fd_id (fd_id_value) 3245 3246 flow_director_filter (port_id) mode IP (add|del|update) \ 3247 flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) \ 3248 src (src_ip_address) (src_port) \ 3249 dst (dst_ip_address) (dst_port) \ 3250 tos (tos_value) ttl (ttl_value) \ 3251 vlan (vlan_value) flexbytes (flexbytes_value) \ 3252 (drop|fwd) queue pf|vf(vf_id) (queue_id) \ 3253 fd_id (fd_id_value) 3254 3255 flow_director_filter (port_id) mode IP (add|del|update) \ 3256 flow (ipv4-sctp|ipv6-sctp) \ 3257 src (src_ip_address) (src_port) \ 3258 dst (dst_ip_address) (dst_port) \ 3259 tos (tos_value) ttl (ttl_value) \ 3260 tag (verification_tag) vlan (vlan_value) \ 3261 flexbytes (flexbytes_value) (drop|fwd) \ 3262 pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value) 3263 3264 flow_director_filter (port_id) mode IP (add|del|update) flow l2_payload \ 3265 ether (ethertype) flexbytes (flexbytes_value) \ 3266 (drop|fwd) pf|vf(vf_id) queue (queue_id) 3267 fd_id (fd_id_value) 3268 3269 flow_director_filter (port_id) mode MAC-VLAN (add|del|update) \ 3270 mac (mac_address) vlan (vlan_value) \ 3271 flexbytes (flexbytes_value) (drop|fwd) \ 3272 queue (queue_id) fd_id (fd_id_value) 3273 3274 flow_director_filter (port_id) mode Tunnel (add|del|update) \ 3275 mac (mac_address) vlan (vlan_value) \ 3276 tunnel (NVGRE|VxLAN) tunnel-id (tunnel_id_value) \ 3277 flexbytes (flexbytes_value) (drop|fwd) \ 3278 queue (queue_id) fd_id (fd_id_value) 3279 3280 flow_director_filter (port_id) mode raw (add|del|update) flow (flow_id) \ 3281 (drop|fwd) queue (queue_id) fd_id (fd_id_value) \ 3282 packet (packet file name) 3283 3284For example, to add an ipv4-udp flow type filter:: 3285 3286 testpmd> flow_director_filter 0 mode IP add flow ipv4-udp src 2.2.2.3 32 \ 3287 dst 2.2.2.5 33 tos 2 ttl 40 vlan 0x1 flexbytes (0x88,0x48) \ 3288 fwd pf queue 1 fd_id 1 3289 3290For example, add an ipv4-other flow type filter:: 3291 3292 testpmd> flow_director_filter 0 mode IP add flow ipv4-other src 2.2.2.3 \ 3293 dst 2.2.2.5 tos 2 proto 20 ttl 40 vlan 0x1 \ 3294 flexbytes (0x88,0x48) fwd pf queue 1 fd_id 1 3295 3296flush_flow_director 3297~~~~~~~~~~~~~~~~~~~ 3298 3299Flush all flow director filters on a device:: 3300 3301 testpmd> flush_flow_director (port_id) 3302 3303Example, to flush all flow director filter on port 0:: 3304 3305 testpmd> flush_flow_director 0 3306 3307flow_director_mask 3308~~~~~~~~~~~~~~~~~~ 3309 3310Set flow director's input masks:: 3311 3312 flow_director_mask (port_id) mode IP vlan (vlan_value) \ 3313 src_mask (ipv4_src) (ipv6_src) (src_port) \ 3314 dst_mask (ipv4_dst) (ipv6_dst) (dst_port) 3315 3316 flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) 3317 3318 flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \ 3319 mac (mac_value) tunnel-type (tunnel_type_value) \ 3320 tunnel-id (tunnel_id_value) 3321 3322Example, to set flow director mask on port 0:: 3323 3324 testpmd> flow_director_mask 0 mode IP vlan 0xefff \ 3325 src_mask 255.255.255.255 \ 3326 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \ 3327 dst_mask 255.255.255.255 \ 3328 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF 3329 3330flow_director_flex_mask 3331~~~~~~~~~~~~~~~~~~~~~~~ 3332 3333set masks of flow director's flexible payload based on certain flow type:: 3334 3335 testpmd> flow_director_flex_mask (port_id) \ 3336 flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 3337 ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp| \ 3338 l2_payload|all) (mask) 3339 3340Example, to set flow director's flex mask for all flow type on port 0:: 3341 3342 testpmd> flow_director_flex_mask 0 flow all \ 3343 (0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 3344 3345 3346flow_director_flex_payload 3347~~~~~~~~~~~~~~~~~~~~~~~~~~ 3348 3349Configure flexible payload selection:: 3350 3351 flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) 3352 3353For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload:: 3354 3355 testpmd> flow_director_flex_payload 0 l4 \ 3356 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) 3357 3358get_sym_hash_ena_per_port 3359~~~~~~~~~~~~~~~~~~~~~~~~~ 3360 3361Get symmetric hash enable configuration per port:: 3362 3363 get_sym_hash_ena_per_port (port_id) 3364 3365For example, to get symmetric hash enable configuration of port 1:: 3366 3367 testpmd> get_sym_hash_ena_per_port 1 3368 3369set_sym_hash_ena_per_port 3370~~~~~~~~~~~~~~~~~~~~~~~~~ 3371 3372Set symmetric hash enable configuration per port to enable or disable:: 3373 3374 set_sym_hash_ena_per_port (port_id) (enable|disable) 3375 3376For example, to set symmetric hash enable configuration of port 1 to enable:: 3377 3378 testpmd> set_sym_hash_ena_per_port 1 enable 3379 3380get_hash_global_config 3381~~~~~~~~~~~~~~~~~~~~~~ 3382 3383Get the global configurations of hash filters:: 3384 3385 get_hash_global_config (port_id) 3386 3387For example, to get the global configurations of hash filters of port 1:: 3388 3389 testpmd> get_hash_global_config 1 3390 3391set_hash_global_config 3392~~~~~~~~~~~~~~~~~~~~~~ 3393 3394Set the global configurations of hash filters:: 3395 3396 set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default) \ 3397 (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag| \ 3398 ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload|<flow_id>) \ 3399 (enable|disable) 3400 3401For example, to enable simple_xor for flow type of ipv6 on port 2:: 3402 3403 testpmd> set_hash_global_config 2 simple_xor ipv6 enable 3404 3405set_hash_input_set 3406~~~~~~~~~~~~~~~~~~ 3407 3408Set the input set for hash:: 3409 3410 set_hash_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 3411 ipv4-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ 3412 l2_payload|<flow_id>) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \ 3413 ipv4-tos|ipv4-proto|ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port| \ 3414 tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag| \ 3415 udp-key|gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th| \ 3416 fld-8th|none) (select|add) 3417 3418For example, to add source IP to hash input set for flow type of ipv4-udp on port 0:: 3419 3420 testpmd> set_hash_input_set 0 ipv4-udp src-ipv4 add 3421 3422set_fdir_input_set 3423~~~~~~~~~~~~~~~~~~ 3424 3425The Flow Director filters can match the different fields for different type of packet, i.e. specific input set 3426on per flow type and the flexible payload. This command can be used to change input set for each flow type. 3427 3428Set the input set for flow director:: 3429 3430 set_fdir_input_set (port_id) (ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| \ 3431 ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other| \ 3432 l2_payload|<flow_id>) (ivlan|ethertype|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6| \ 3433 ipv4-tos|ipv4-proto|ipv4-ttl|ipv6-tc|ipv6-next-header|ipv6-hop-limits| \ 3434 tudp-src-port|udp-dst-port|cp-src-port|tcp-dst-port|sctp-src-port| \ 3435 sctp-dst-port|sctp-veri-tag|none) (select|add) 3436 3437For example to add source IP to FD input set for flow type of ipv4-udp on port 0:: 3438 3439 testpmd> set_fdir_input_set 0 ipv4-udp src-ipv4 add 3440 3441global_config 3442~~~~~~~~~~~~~ 3443 3444Set different GRE key length for input set:: 3445 3446 global_config (port_id) gre-key-len (number in bytes) 3447 3448For example to set GRE key length for input set to 4 bytes on port 0:: 3449 3450 testpmd> global_config 0 gre-key-len 4 3451 3452 3453.. _testpmd_rte_flow: 3454 3455Flow rules management 3456--------------------- 3457 3458Control of the generic flow API (*rte_flow*) is fully exposed through the 3459``flow`` command (validation, creation, destruction, queries and operation 3460modes). 3461 3462Considering *rte_flow* overlaps with all `Filter Functions`_, using both 3463features simultaneously may cause undefined side-effects and is therefore 3464not recommended. 3465 3466``flow`` syntax 3467~~~~~~~~~~~~~~~ 3468 3469Because the ``flow`` command uses dynamic tokens to handle the large number 3470of possible flow rules combinations, its behavior differs slightly from 3471other commands, in particular: 3472 3473- Pressing *?* or the *<tab>* key displays contextual help for the current 3474 token, not that of the entire command. 3475 3476- Optional and repeated parameters are supported (provided they are listed 3477 in the contextual help). 3478 3479The first parameter stands for the operation mode. Possible operations and 3480their general syntax are described below. They are covered in detail in the 3481following sections. 3482 3483- Check whether a flow rule can be created:: 3484 3485 flow validate {port_id} 3486 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3487 pattern {item} [/ {item} [...]] / end 3488 actions {action} [/ {action} [...]] / end 3489 3490- Create a flow rule:: 3491 3492 flow create {port_id} 3493 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3494 pattern {item} [/ {item} [...]] / end 3495 actions {action} [/ {action} [...]] / end 3496 3497- Destroy specific flow rules:: 3498 3499 flow destroy {port_id} rule {rule_id} [...] 3500 3501- Destroy all flow rules:: 3502 3503 flow flush {port_id} 3504 3505- Query an existing flow rule:: 3506 3507 flow query {port_id} {rule_id} {action} 3508 3509- List existing flow rules sorted by priority, filtered by group 3510 identifiers:: 3511 3512 flow list {port_id} [group {group_id}] [...] 3513 3514- Restrict ingress traffic to the defined flow rules:: 3515 3516 flow isolate {port_id} {boolean} 3517 3518Validating flow rules 3519~~~~~~~~~~~~~~~~~~~~~ 3520 3521``flow validate`` reports whether a flow rule would be accepted by the 3522underlying device in its current state but stops short of creating it. It is 3523bound to ``rte_flow_validate()``:: 3524 3525 flow validate {port_id} 3526 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3527 pattern {item} [/ {item} [...]] / end 3528 actions {action} [/ {action} [...]] / end 3529 3530If successful, it will show:: 3531 3532 Flow rule validated 3533 3534Otherwise it will show an error message of the form:: 3535 3536 Caught error type [...] ([...]): [...] 3537 3538This command uses the same parameters as ``flow create``, their format is 3539described in `Creating flow rules`_. 3540 3541Check whether redirecting any Ethernet packet received on port 0 to RX queue 3542index 6 is supported:: 3543 3544 testpmd> flow validate 0 ingress pattern eth / end 3545 actions queue index 6 / end 3546 Flow rule validated 3547 testpmd> 3548 3549Port 0 does not support TCPv6 rules:: 3550 3551 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end 3552 actions drop / end 3553 Caught error type 9 (specific pattern item): Invalid argument 3554 testpmd> 3555 3556Creating flow rules 3557~~~~~~~~~~~~~~~~~~~ 3558 3559``flow create`` validates and creates the specified flow rule. It is bound 3560to ``rte_flow_create()``:: 3561 3562 flow create {port_id} 3563 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3564 pattern {item} [/ {item} [...]] / end 3565 actions {action} [/ {action} [...]] / end 3566 3567If successful, it will return a flow rule ID usable with other commands:: 3568 3569 Flow rule #[...] created 3570 3571Otherwise it will show an error message of the form:: 3572 3573 Caught error type [...] ([...]): [...] 3574 3575Parameters describe in the following order: 3576 3577- Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens). 3578- A matching pattern, starting with the *pattern* token and terminated by an 3579 *end* pattern item. 3580- Actions, starting with the *actions* token and terminated by an *end* 3581 action. 3582 3583These translate directly to *rte_flow* objects provided as-is to the 3584underlying functions. 3585 3586The shortest valid definition only comprises mandatory tokens:: 3587 3588 testpmd> flow create 0 pattern end actions end 3589 3590Note that PMDs may refuse rules that essentially do nothing such as this 3591one. 3592 3593**All unspecified object values are automatically initialized to 0.** 3594 3595Attributes 3596^^^^^^^^^^ 3597 3598These tokens affect flow rule attributes (``struct rte_flow_attr``) and are 3599specified before the ``pattern`` token. 3600 3601- ``group {group id}``: priority group. 3602- ``priority {level}``: priority level within group. 3603- ``ingress``: rule applies to ingress traffic. 3604- ``egress``: rule applies to egress traffic. 3605- ``transfer``: apply rule directly to endpoints found in pattern. 3606 3607Each instance of an attribute specified several times overrides the previous 3608value as shown below (group 4 is used):: 3609 3610 testpmd> flow create 0 group 42 group 24 group 4 [...] 3611 3612Note that once enabled, ``ingress`` and ``egress`` cannot be disabled. 3613 3614While not specifying a direction is an error, some rules may allow both 3615simultaneously. 3616 3617Most rules affect RX therefore contain the ``ingress`` token:: 3618 3619 testpmd> flow create 0 ingress pattern [...] 3620 3621Matching pattern 3622^^^^^^^^^^^^^^^^ 3623 3624A matching pattern starts after the ``pattern`` token. It is made of pattern 3625items and is terminated by a mandatory ``end`` item. 3626 3627Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum 3628rte_flow_item_type``). 3629 3630The ``/`` token is used as a separator between pattern items as shown 3631below:: 3632 3633 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...] 3634 3635Note that protocol items like these must be stacked from lowest to highest 3636layer to make sense. For instance, the following rule is either invalid or 3637unlikely to match any packet:: 3638 3639 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...] 3640 3641More information on these restrictions can be found in the *rte_flow* 3642documentation. 3643 3644Several items support additional specification structures, for example 3645``ipv4`` allows specifying source and destination addresses as follows:: 3646 3647 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1 3648 dst is 10.2.0.0 / end [...] 3649 3650This rule matches all IPv4 traffic with the specified properties. 3651 3652In this example, ``src`` and ``dst`` are field names of the underlying 3653``struct rte_flow_item_ipv4`` object. All item properties can be specified 3654in a similar fashion. 3655 3656The ``is`` token means that the subsequent value must be matched exactly, 3657and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item`` 3658accordingly. Possible assignment tokens are: 3659 3660- ``is``: match value perfectly (with full bit-mask). 3661- ``spec``: match value according to configured bit-mask. 3662- ``last``: specify upper bound to establish a range. 3663- ``mask``: specify bit-mask with relevant bits set to one. 3664- ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one. 3665 3666These yield identical results:: 3667 3668 ipv4 src is 10.1.1.1 3669 3670:: 3671 3672 ipv4 src spec 10.1.1.1 src mask 255.255.255.255 3673 3674:: 3675 3676 ipv4 src spec 10.1.1.1 src prefix 32 3677 3678:: 3679 3680 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value 3681 3682:: 3683 3684 ipv4 src is 10.1.1.1 src last 0 # 0 disables range 3685 3686Inclusive ranges can be defined with ``last``:: 3687 3688 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4 3689 3690Note that ``mask`` affects both ``spec`` and ``last``:: 3691 3692 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0 3693 # matches 10.1.0.0 to 10.2.255.255 3694 3695Properties can be modified multiple times:: 3696 3697 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4 3698 3699:: 3700 3701 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16 3702 3703Pattern items 3704^^^^^^^^^^^^^ 3705 3706This section lists supported pattern items and their attributes, if any. 3707 3708- ``end``: end list of pattern items. 3709 3710- ``void``: no-op pattern item. 3711 3712- ``invert``: perform actions when pattern does not match. 3713 3714- ``any``: match any protocol for the current layer. 3715 3716 - ``num {unsigned}``: number of layers covered. 3717 3718- ``pf``: match traffic from/to the physical function. 3719 3720- ``vf``: match traffic from/to a virtual function ID. 3721 3722 - ``id {unsigned}``: VF ID. 3723 3724- ``phy_port``: match traffic from/to a specific physical port. 3725 3726 - ``index {unsigned}``: physical port index. 3727 3728- ``port_id``: match traffic from/to a given DPDK port ID. 3729 3730 - ``id {unsigned}``: DPDK port ID. 3731 3732- ``mark``: match value set in previously matched flow rule using the mark action. 3733 3734 - ``id {unsigned}``: arbitrary integer value. 3735 3736- ``raw``: match an arbitrary byte string. 3737 3738 - ``relative {boolean}``: look for pattern after the previous item. 3739 - ``search {boolean}``: search pattern from offset (see also limit). 3740 - ``offset {integer}``: absolute or relative offset for pattern. 3741 - ``limit {unsigned}``: search area limit for start of pattern. 3742 - ``pattern {string}``: byte string to look for. 3743 3744- ``eth``: match Ethernet header. 3745 3746 - ``dst {MAC-48}``: destination MAC. 3747 - ``src {MAC-48}``: source MAC. 3748 - ``type {unsigned}``: EtherType or TPID. 3749 3750- ``vlan``: match 802.1Q/ad VLAN tag. 3751 3752 - ``tci {unsigned}``: tag control information. 3753 - ``pcp {unsigned}``: priority code point. 3754 - ``dei {unsigned}``: drop eligible indicator. 3755 - ``vid {unsigned}``: VLAN identifier. 3756 - ``inner_type {unsigned}``: inner EtherType or TPID. 3757 3758- ``ipv4``: match IPv4 header. 3759 3760 - ``tos {unsigned}``: type of service. 3761 - ``ttl {unsigned}``: time to live. 3762 - ``proto {unsigned}``: next protocol ID. 3763 - ``src {ipv4 address}``: source address. 3764 - ``dst {ipv4 address}``: destination address. 3765 3766- ``ipv6``: match IPv6 header. 3767 3768 - ``tc {unsigned}``: traffic class. 3769 - ``flow {unsigned}``: flow label. 3770 - ``proto {unsigned}``: protocol (next header). 3771 - ``hop {unsigned}``: hop limit. 3772 - ``src {ipv6 address}``: source address. 3773 - ``dst {ipv6 address}``: destination address. 3774 3775- ``icmp``: match ICMP header. 3776 3777 - ``type {unsigned}``: ICMP packet type. 3778 - ``code {unsigned}``: ICMP packet code. 3779 3780- ``udp``: match UDP header. 3781 3782 - ``src {unsigned}``: UDP source port. 3783 - ``dst {unsigned}``: UDP destination port. 3784 3785- ``tcp``: match TCP header. 3786 3787 - ``src {unsigned}``: TCP source port. 3788 - ``dst {unsigned}``: TCP destination port. 3789 3790- ``sctp``: match SCTP header. 3791 3792 - ``src {unsigned}``: SCTP source port. 3793 - ``dst {unsigned}``: SCTP destination port. 3794 - ``tag {unsigned}``: validation tag. 3795 - ``cksum {unsigned}``: checksum. 3796 3797- ``vxlan``: match VXLAN header. 3798 3799 - ``vni {unsigned}``: VXLAN identifier. 3800 3801- ``e_tag``: match IEEE 802.1BR E-Tag header. 3802 3803 - ``grp_ecid_b {unsigned}``: GRP and E-CID base. 3804 3805- ``nvgre``: match NVGRE header. 3806 3807 - ``tni {unsigned}``: virtual subnet ID. 3808 3809- ``mpls``: match MPLS header. 3810 3811 - ``label {unsigned}``: MPLS label. 3812 3813- ``gre``: match GRE header. 3814 3815 - ``protocol {unsigned}``: protocol type. 3816 3817- ``gre_key``: match GRE optional key field. 3818 3819 - ``value {unsigned}``: key value. 3820 3821- ``fuzzy``: fuzzy pattern match, expect faster than default. 3822 3823 - ``thresh {unsigned}``: accuracy threshold. 3824 3825- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header. 3826 3827 - ``teid {unsigned}``: tunnel endpoint identifier. 3828 3829- ``geneve``: match GENEVE header. 3830 3831 - ``vni {unsigned}``: virtual network identifier. 3832 - ``protocol {unsigned}``: protocol type. 3833 3834- ``vxlan-gpe``: match VXLAN-GPE header. 3835 3836 - ``vni {unsigned}``: VXLAN-GPE identifier. 3837 3838- ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4. 3839 3840 - ``sha {MAC-48}``: sender hardware address. 3841 - ``spa {ipv4 address}``: sender IPv4 address. 3842 - ``tha {MAC-48}``: target hardware address. 3843 - ``tpa {ipv4 address}``: target IPv4 address. 3844 3845- ``ipv6_ext``: match presence of any IPv6 extension header. 3846 3847 - ``next_hdr {unsigned}``: next header. 3848 3849- ``icmp6``: match any ICMPv6 header. 3850 3851 - ``type {unsigned}``: ICMPv6 type. 3852 - ``code {unsigned}``: ICMPv6 code. 3853 3854- ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation. 3855 3856 - ``target_addr {ipv6 address}``: target address. 3857 3858- ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement. 3859 3860 - ``target_addr {ipv6 address}``: target address. 3861 3862- ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option. 3863 3864 - ``type {unsigned}``: ND option type. 3865 3866- ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet 3867 link-layer address option. 3868 3869 - ``sla {MAC-48}``: source Ethernet LLA. 3870 3871- ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet 3872 link-layer address option. 3873 3874 - ``tla {MAC-48}``: target Ethernet LLA. 3875 3876- ``meta``: match application specific metadata. 3877 3878 - ``data {unsigned}``: metadata value. 3879 3880- ``gtp_psc``: match GTP PDU extension header with type 0x85. 3881 3882 - ``pdu_type {unsigned}``: PDU type. 3883 - ``qfi {unsigned}``: QoS flow identifier. 3884 3885- ``pppoes``, ``pppoed``: match PPPoE header. 3886 3887 - ``session_id {unsigned}``: session identifier. 3888 3889- ``pppoe_proto_id``: match PPPoE session protocol identifier. 3890 3891 - ``proto_id {unsigned}``: PPP protocol identifier. 3892 3893Actions list 3894^^^^^^^^^^^^ 3895 3896A list of actions starts after the ``actions`` token in the same fashion as 3897`Matching pattern`_; actions are separated by ``/`` tokens and the list is 3898terminated by a mandatory ``end`` action. 3899 3900Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum 3901rte_flow_action_type``). 3902 3903Dropping all incoming UDPv4 packets can be expressed as follows:: 3904 3905 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 3906 actions drop / end 3907 3908Several actions have configurable properties which must be specified when 3909there is no valid default value. For example, ``queue`` requires a target 3910queue index. 3911 3912This rule redirects incoming UDPv4 traffic to queue index 6:: 3913 3914 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 3915 actions queue index 6 / end 3916 3917While this one could be rejected by PMDs (unspecified queue index):: 3918 3919 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 3920 actions queue / end 3921 3922As defined by *rte_flow*, the list is not ordered, all actions of a given 3923rule are performed simultaneously. These are equivalent:: 3924 3925 queue index 6 / void / mark id 42 / end 3926 3927:: 3928 3929 void / mark id 42 / queue index 6 / end 3930 3931All actions in a list should have different types, otherwise only the last 3932action of a given type is taken into account:: 3933 3934 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6 3935 3936:: 3937 3938 drop / drop / drop / end # drop is performed only once 3939 3940:: 3941 3942 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24 3943 3944Considering they are performed simultaneously, opposite and overlapping 3945actions can sometimes be combined when the end result is unambiguous:: 3946 3947 drop / queue index 6 / end # drop has no effect 3948 3949:: 3950 3951 queue index 6 / rss queues 6 7 8 / end # queue has no effect 3952 3953:: 3954 3955 drop / passthru / end # drop has no effect 3956 3957Note that PMDs may still refuse such combinations. 3958 3959Actions 3960^^^^^^^ 3961 3962This section lists supported actions and their attributes, if any. 3963 3964- ``end``: end list of actions. 3965 3966- ``void``: no-op action. 3967 3968- ``passthru``: let subsequent rule process matched packets. 3969 3970- ``jump``: redirect traffic to group on device. 3971 3972 - ``group {unsigned}``: group to redirect to. 3973 3974- ``mark``: attach 32 bit value to packets. 3975 3976 - ``id {unsigned}``: 32 bit value to return with packets. 3977 3978- ``flag``: flag packets. 3979 3980- ``queue``: assign packets to a given queue index. 3981 3982 - ``index {unsigned}``: queue index to use. 3983 3984- ``drop``: drop packets (note: passthru has priority). 3985 3986- ``count``: enable counters for this rule. 3987 3988- ``rss``: spread packets among several queues. 3989 3990 - ``func {hash function}``: RSS hash function to apply, allowed tokens are 3991 the same as `set_hash_global_config`_. 3992 3993 - ``level {unsigned}``: encapsulation level for ``types``. 3994 3995 - ``types [{RSS hash type} [...]] end``: specific RSS hash types, allowed 3996 tokens are the same as `set_hash_input_set`_, except that an empty list 3997 does not disable RSS but instead requests unspecified "best-effort" 3998 settings. 3999 4000 - ``key {string}``: RSS hash key, overrides ``key_len``. 4001 4002 - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in 4003 conjunction with ``key`` to pad or truncate it. 4004 4005 - ``queues [{unsigned} [...]] end``: queue indices to use. 4006 4007- ``pf``: direct traffic to physical function. 4008 4009- ``vf``: direct traffic to a virtual function ID. 4010 4011 - ``original {boolean}``: use original VF ID if possible. 4012 - ``id {unsigned}``: VF ID. 4013 4014- ``phy_port``: direct packets to physical port index. 4015 4016 - ``original {boolean}``: use original port index if possible. 4017 - ``index {unsigned}``: physical port index. 4018 4019- ``port_id``: direct matching traffic to a given DPDK port ID. 4020 4021 - ``original {boolean}``: use original DPDK port ID if possible. 4022 - ``id {unsigned}``: DPDK port ID. 4023 4024- ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``. 4025 4026 - ``mpls_ttl``: MPLS TTL. 4027 4028- ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``. 4029 4030- ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``. 4031 4032 - ``nw_ttl``: IP TTL. 4033 4034- ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``. 4035 4036- ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``. 4037 4038- ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``. 4039 4040- ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``. 4041 4042- ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``. 4043 4044 - ``ethertype``: Ethertype. 4045 4046- ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``. 4047 4048 - ``vlan_vid``: VLAN id. 4049 4050- ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``. 4051 4052 - ``vlan_pcp``: VLAN priority. 4053 4054- ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``. 4055 4056 - ``ethertype``: Ethertype. 4057 4058- ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``. 4059 4060 - ``ethertype``: Ethertype. 4061 4062- ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration 4063 is done through `Config VXLAN Encap outer layers`_. 4064 4065- ``vxlan_decap``: Performs a decapsulation action by stripping all headers of 4066 the VXLAN tunnel network overlay from the matched flow. 4067 4068- ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration 4069 is done through `Config NVGRE Encap outer layers`_. 4070 4071- ``nvgre_decap``: Performs a decapsulation action by stripping all headers of 4072 the NVGRE tunnel network overlay from the matched flow. 4073 4074- ``l2_encap``: Performs a L2 encapsulation, L2 configuration 4075 is done through `Config L2 Encap`_. 4076 4077- ``l2_decap``: Performs a L2 decapsulation, L2 configuration 4078 is done through `Config L2 Decap`_. 4079 4080- ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer 4081 configuration is done through `Config MPLSoGRE Encap outer layers`_. 4082 4083- ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer 4084 configuration is done through `Config MPLSoGRE Decap outer layers`_. 4085 4086- ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer 4087 configuration is done through `Config MPLSoUDP Encap outer layers`_. 4088 4089- ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer 4090 configuration is done through `Config MPLSoUDP Decap outer layers`_. 4091 4092- ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header. 4093 4094 - ``ipv4_addr``: New IPv4 source address. 4095 4096- ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4 4097 header. 4098 4099 - ``ipv4_addr``: New IPv4 destination address. 4100 4101- ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header. 4102 4103 - ``ipv6_addr``: New IPv6 source address. 4104 4105- ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6 4106 header. 4107 4108 - ``ipv6_addr``: New IPv6 destination address. 4109 4110- ``set_tp_src``: Set a new source port number in the outermost TCP/UDP 4111 header. 4112 4113 - ``port``: New TCP/UDP source port number. 4114 4115- ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP 4116 header. 4117 4118 - ``port``: New TCP/UDP destination port number. 4119 4120- ``mac_swap``: Swap the source and destination MAC addresses in the outermost 4121 Ethernet header. 4122 4123- ``dec_ttl``: Performs a decrease TTL value action 4124 4125- ``set_ttl``: Set TTL value with specified value 4126 - ``ttl_value {unsigned}``: The new TTL value to be set 4127 4128- ``set_mac_src``: set source MAC address 4129 4130 - ``mac_addr {MAC-48}``: new source MAC address 4131 4132- ``set_mac_dst``: set destination MAC address 4133 4134 - ``mac_addr {MAC-48}``: new destination MAC address 4135 4136- ``inc_tcp_seq``: Increase sequence number in the outermost TCP header. 4137 4138 - ``value {unsigned}``: Value to increase TCP sequence number by. 4139 4140- ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header. 4141 4142 - ``value {unsigned}``: Value to decrease TCP sequence number by. 4143 4144- ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP header. 4145 4146 - ``value {unsigned}``: Value to increase TCP acknowledgment number by. 4147 4148- ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP header. 4149 4150 - ``value {unsigned}``: Value to decrease TCP acknowledgment number by. 4151 4152Destroying flow rules 4153~~~~~~~~~~~~~~~~~~~~~ 4154 4155``flow destroy`` destroys one or more rules from their rule ID (as returned 4156by ``flow create``), this command calls ``rte_flow_destroy()`` as many 4157times as necessary:: 4158 4159 flow destroy {port_id} rule {rule_id} [...] 4160 4161If successful, it will show:: 4162 4163 Flow rule #[...] destroyed 4164 4165It does not report anything for rule IDs that do not exist. The usual error 4166message is shown when a rule cannot be destroyed:: 4167 4168 Caught error type [...] ([...]): [...] 4169 4170``flow flush`` destroys all rules on a device and does not take extra 4171arguments. It is bound to ``rte_flow_flush()``:: 4172 4173 flow flush {port_id} 4174 4175Any errors are reported as above. 4176 4177Creating several rules and destroying them:: 4178 4179 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4180 actions queue index 2 / end 4181 Flow rule #0 created 4182 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4183 actions queue index 3 / end 4184 Flow rule #1 created 4185 testpmd> flow destroy 0 rule 0 rule 1 4186 Flow rule #1 destroyed 4187 Flow rule #0 destroyed 4188 testpmd> 4189 4190The same result can be achieved using ``flow flush``:: 4191 4192 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4193 actions queue index 2 / end 4194 Flow rule #0 created 4195 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4196 actions queue index 3 / end 4197 Flow rule #1 created 4198 testpmd> flow flush 0 4199 testpmd> 4200 4201Non-existent rule IDs are ignored:: 4202 4203 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4204 actions queue index 2 / end 4205 Flow rule #0 created 4206 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4207 actions queue index 3 / end 4208 Flow rule #1 created 4209 testpmd> flow destroy 0 rule 42 rule 10 rule 2 4210 testpmd> 4211 testpmd> flow destroy 0 rule 0 4212 Flow rule #0 destroyed 4213 testpmd> 4214 4215Querying flow rules 4216~~~~~~~~~~~~~~~~~~~ 4217 4218``flow query`` queries a specific action of a flow rule having that 4219ability. Such actions collect information that can be reported using this 4220command. It is bound to ``rte_flow_query()``:: 4221 4222 flow query {port_id} {rule_id} {action} 4223 4224If successful, it will display either the retrieved data for known actions 4225or the following message:: 4226 4227 Cannot display result for action type [...] ([...]) 4228 4229Otherwise, it will complain either that the rule does not exist or that some 4230error occurred:: 4231 4232 Flow rule #[...] not found 4233 4234:: 4235 4236 Caught error type [...] ([...]): [...] 4237 4238Currently only the ``count`` action is supported. This action reports the 4239number of packets that hit the flow rule and the total number of bytes. Its 4240output has the following format:: 4241 4242 count: 4243 hits_set: [...] # whether "hits" contains a valid value 4244 bytes_set: [...] # whether "bytes" contains a valid value 4245 hits: [...] # number of packets 4246 bytes: [...] # number of bytes 4247 4248Querying counters for TCPv6 packets redirected to queue 6:: 4249 4250 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end 4251 actions queue index 6 / count / end 4252 Flow rule #4 created 4253 testpmd> flow query 0 4 count 4254 count: 4255 hits_set: 1 4256 bytes_set: 0 4257 hits: 386446 4258 bytes: 0 4259 testpmd> 4260 4261Listing flow rules 4262~~~~~~~~~~~~~~~~~~ 4263 4264``flow list`` lists existing flow rules sorted by priority and optionally 4265filtered by group identifiers:: 4266 4267 flow list {port_id} [group {group_id}] [...] 4268 4269This command only fails with the following message if the device does not 4270exist:: 4271 4272 Invalid port [...] 4273 4274Output consists of a header line followed by a short description of each 4275flow rule, one per line. There is no output at all when no flow rules are 4276configured on the device:: 4277 4278 ID Group Prio Attr Rule 4279 [...] [...] [...] [...] [...] 4280 4281``Attr`` column flags: 4282 4283- ``i`` for ``ingress``. 4284- ``e`` for ``egress``. 4285 4286Creating several flow rules and listing them:: 4287 4288 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4289 actions queue index 6 / end 4290 Flow rule #0 created 4291 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4292 actions queue index 2 / end 4293 Flow rule #1 created 4294 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end 4295 actions rss queues 6 7 8 end / end 4296 Flow rule #2 created 4297 testpmd> flow list 0 4298 ID Group Prio Attr Rule 4299 0 0 0 i- ETH IPV4 => QUEUE 4300 1 0 0 i- ETH IPV6 => QUEUE 4301 2 0 5 i- ETH IPV4 UDP => RSS 4302 testpmd> 4303 4304Rules are sorted by priority (i.e. group ID first, then priority level):: 4305 4306 testpmd> flow list 1 4307 ID Group Prio Attr Rule 4308 0 0 0 i- ETH => COUNT 4309 6 0 500 i- ETH IPV6 TCP => DROP COUNT 4310 5 0 1000 i- ETH IPV6 ICMP => QUEUE 4311 1 24 0 i- ETH IPV4 UDP => QUEUE 4312 4 24 10 i- ETH IPV4 TCP => DROP 4313 3 24 20 i- ETH IPV4 => DROP 4314 2 24 42 i- ETH IPV4 UDP => QUEUE 4315 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE 4316 testpmd> 4317 4318Output can be limited to specific groups:: 4319 4320 testpmd> flow list 1 group 0 group 63 4321 ID Group Prio Attr Rule 4322 0 0 0 i- ETH => COUNT 4323 6 0 500 i- ETH IPV6 TCP => DROP COUNT 4324 5 0 1000 i- ETH IPV6 ICMP => QUEUE 4325 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE 4326 testpmd> 4327 4328Toggling isolated mode 4329~~~~~~~~~~~~~~~~~~~~~~ 4330 4331``flow isolate`` can be used to tell the underlying PMD that ingress traffic 4332must only be injected from the defined flow rules; that no default traffic 4333is expected outside those rules and the driver is free to assign more 4334resources to handle them. It is bound to ``rte_flow_isolate()``:: 4335 4336 flow isolate {port_id} {boolean} 4337 4338If successful, enabling or disabling isolated mode shows either:: 4339 4340 Ingress traffic on port [...] 4341 is now restricted to the defined flow rules 4342 4343Or:: 4344 4345 Ingress traffic on port [...] 4346 is not restricted anymore to the defined flow rules 4347 4348Otherwise, in case of error:: 4349 4350 Caught error type [...] ([...]): [...] 4351 4352Mainly due to its side effects, PMDs supporting this mode may not have the 4353ability to toggle it more than once without reinitializing affected ports 4354first (e.g. by exiting testpmd). 4355 4356Enabling isolated mode:: 4357 4358 testpmd> flow isolate 0 true 4359 Ingress traffic on port 0 is now restricted to the defined flow rules 4360 testpmd> 4361 4362Disabling isolated mode:: 4363 4364 testpmd> flow isolate 0 false 4365 Ingress traffic on port 0 is not restricted anymore to the defined flow rules 4366 testpmd> 4367 4368Sample QinQ flow rules 4369~~~~~~~~~~~~~~~~~~~~~~ 4370 4371Before creating QinQ rule(s) the following commands should be issued to enable QinQ:: 4372 4373 testpmd> port stop 0 4374 testpmd> vlan set qinq_strip on 0 4375 4376The above command sets the inner and outer TPID's to 0x8100. 4377 4378To change the TPID's the following commands should be used:: 4379 4380 testpmd> vlan set outer tpid 0xa100 0 4381 testpmd> vlan set inner tpid 0x9100 0 4382 testpmd> port start 0 4383 4384Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM. 4385 4386:: 4387 4388 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 / 4389 vlan tci is 456 / end actions vf id 1 / queue index 0 / end 4390 Flow rule #0 validated 4391 4392 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 / 4393 vlan tci is 456 / end actions vf id 123 / queue index 0 / end 4394 Flow rule #0 created 4395 4396 testpmd> flow list 0 4397 ID Group Prio Attr Rule 4398 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 4399 4400Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host. 4401 4402:: 4403 4404 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 / 4405 vlan tci is 654 / end actions pf / queue index 0 / end 4406 Flow rule #1 validated 4407 4408 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 / 4409 vlan tci is 654 / end actions pf / queue index 1 / end 4410 Flow rule #1 created 4411 4412 testpmd> flow list 0 4413 ID Group Prio Attr Rule 4414 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 4415 1 0 0 i- ETH VLAN VLAN=>PF QUEUE 4416 4417Sample VXLAN encapsulation rule 4418~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4419 4420VXLAN encapsulation outer layer has default value pre-configured in testpmd 4421source code, those can be changed by using the following commands 4422 4423IPv4 VXLAN outer header:: 4424 4425 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1 4426 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4427 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4428 queue index 0 / end 4429 4430 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 4431 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11 4432 eth-dst 22:22:22:22:22:22 4433 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4434 queue index 0 / end 4435 4436 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0 4437 ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 4438 eth-dst 22:22:22:22:22:22 4439 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4440 queue index 0 / end 4441 4442IPv6 VXLAN outer header:: 4443 4444 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1 4445 ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4446 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4447 queue index 0 / end 4448 4449 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 4450 ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11 4451 eth-dst 22:22:22:22:22:22 4452 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4453 queue index 0 / end 4454 4455 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4 4456 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11 4457 eth-dst 22:22:22:22:22:22 4458 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4459 queue index 0 / end 4460 4461Sample NVGRE encapsulation rule 4462~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4463 4464NVGRE encapsulation outer layer has default value pre-configured in testpmd 4465source code, those can be changed by using the following commands 4466 4467IPv4 NVGRE outer header:: 4468 4469 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1 4470 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4471 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4472 queue index 0 / end 4473 4474 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1 4475 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11 4476 eth-dst 22:22:22:22:22:22 4477 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4478 queue index 0 / end 4479 4480IPv6 NVGRE outer header:: 4481 4482 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222 4483 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4484 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4485 queue index 0 / end 4486 4487 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222 4488 vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4489 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4490 queue index 0 / end 4491 4492Sample L2 encapsulation rule 4493~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4494 4495L2 encapsulation has default value pre-configured in testpmd 4496source code, those can be changed by using the following commands 4497 4498L2 header:: 4499 4500 testpmd> set l2_encap ip-version ipv4 4501 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4502 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions 4503 mplsoudp_decap / l2_encap / end 4504 4505L2 with VXLAN header:: 4506 4507 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34 4508 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4509 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions 4510 mplsoudp_decap / l2_encap / end 4511 4512Sample L2 decapsulation rule 4513~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4514 4515L2 decapsulation has default value pre-configured in testpmd 4516source code, those can be changed by using the following commands 4517 4518L2 header:: 4519 4520 testpmd> set l2_decap 4521 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap / 4522 queue index 0 / end 4523 4524L2 with VXLAN header:: 4525 4526 testpmd> set l2_encap-with-vlan 4527 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap / 4528 queue index 0 / end 4529 4530Sample MPLSoGRE encapsulation rule 4531~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4532 4533MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd 4534source code, those can be changed by using the following commands 4535 4536IPv4 MPLSoGRE outer header:: 4537 4538 testpmd> set mplsogre_encap ip-version ipv4 label 4 4539 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 4540 eth-dst 22:22:22:22:22:22 4541 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4542 mplsogre_encap / end 4543 4544IPv4 MPLSoGRE with VLAN outer header:: 4545 4546 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4 4547 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 4548 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4549 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4550 mplsogre_encap / end 4551 4552IPv6 MPLSoGRE outer header:: 4553 4554 testpmd> set mplsogre_encap ip-version ipv6 mask 4 4555 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11 4556 eth-dst 22:22:22:22:22:22 4557 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4558 mplsogre_encap / end 4559 4560IPv6 MPLSoGRE with VLAN outer header:: 4561 4562 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4 4563 ip-src ::1 ip-dst ::2222 vlan-tci 34 4564 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4565 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4566 mplsogre_encap / end 4567 4568Sample MPLSoGRE decapsulation rule 4569~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4570 4571MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd 4572source code, those can be changed by using the following commands 4573 4574IPv4 MPLSoGRE outer header:: 4575 4576 testpmd> set mplsogre_decap ip-version ipv4 4577 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions 4578 mplsogre_decap / l2_encap / end 4579 4580IPv4 MPLSoGRE with VLAN outer header:: 4581 4582 testpmd> set mplsogre_decap-with-vlan ip-version ipv4 4583 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end 4584 actions mplsogre_decap / l2_encap / end 4585 4586IPv6 MPLSoGRE outer header:: 4587 4588 testpmd> set mplsogre_decap ip-version ipv6 4589 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end 4590 actions mplsogre_decap / l2_encap / end 4591 4592IPv6 MPLSoGRE with VLAN outer header:: 4593 4594 testpmd> set mplsogre_decap-with-vlan ip-version ipv6 4595 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end 4596 actions mplsogre_decap / l2_encap / end 4597 4598Sample MPLSoUDP encapsulation rule 4599~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4600 4601MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd 4602source code, those can be changed by using the following commands 4603 4604IPv4 MPLSoUDP outer header:: 4605 4606 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10 4607 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 4608 eth-dst 22:22:22:22:22:22 4609 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4610 mplsoudp_encap / end 4611 4612IPv4 MPLSoUDP with VLAN outer header:: 4613 4614 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5 4615 udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 4616 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4617 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4618 mplsoudp_encap / end 4619 4620IPv6 MPLSoUDP outer header:: 4621 4622 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10 4623 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11 4624 eth-dst 22:22:22:22:22:22 4625 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4626 mplsoudp_encap / end 4627 4628IPv6 MPLSoUDP with VLAN outer header:: 4629 4630 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5 4631 udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34 4632 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4633 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4634 mplsoudp_encap / end 4635 4636Sample MPLSoUDP decapsulation rule 4637~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4638 4639MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd 4640source code, those can be changed by using the following commands 4641 4642IPv4 MPLSoUDP outer header:: 4643 4644 testpmd> set mplsoudp_decap ip-version ipv4 4645 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions 4646 mplsoudp_decap / l2_encap / end 4647 4648IPv4 MPLSoUDP with VLAN outer header:: 4649 4650 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4 4651 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end 4652 actions mplsoudp_decap / l2_encap / end 4653 4654IPv6 MPLSoUDP outer header:: 4655 4656 testpmd> set mplsoudp_decap ip-version ipv6 4657 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end 4658 actions mplsoudp_decap / l2_encap / end 4659 4660IPv6 MPLSoUDP with VLAN outer header:: 4661 4662 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6 4663 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end 4664 actions mplsoudp_decap / l2_encap / end 4665 4666Sample Raw encapsulation rule 4667~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4668 4669Raw encapsulation configuration can be set by the following commands 4670 4671Eecapsulating VxLAN:: 4672 4673 testpmd> set raw_encap eth src is 10:11:22:33:44:55 / vlan tci is 1 4674 inner_type is 0x0800 / ipv4 / udp dst is 4789 / vxlan vni 4675 is 2 / end_set 4676 testpmd> flow create 0 egress pattern eth / ipv4 / end actions 4677 raw_encap / end 4678 4679Sample Raw decapsulation rule 4680~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4681 4682Raw decapsulation configuration can be set by the following commands 4683 4684Decapsulating VxLAN:: 4685 4686 testpmd> set raw_decap eth / ipv4 / udp / vxlan / end_set 4687 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / 4688 end actions raw_decap / queue index 0 / end 4689 4690BPF Functions 4691-------------- 4692 4693The following sections show functions to load/unload eBPF based filters. 4694 4695bpf-load 4696~~~~~~~~ 4697 4698Load an eBPF program as a callback for particular RX/TX queue:: 4699 4700 testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename) 4701 4702The available load-flags are: 4703 4704* ``J``: use JIT generated native code, otherwise BPF interpreter will be used. 4705 4706* ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data. 4707 4708* ``-``: none. 4709 4710.. note:: 4711 4712 You'll need clang v3.7 or above to build bpf program you'd like to load 4713 4714For example: 4715 4716.. code-block:: console 4717 4718 cd examples/bpf 4719 clang -O2 -target bpf -c t1.c 4720 4721Then to load (and JIT compile) t1.o at RX queue 0, port 1: 4722 4723.. code-block:: console 4724 4725 testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o 4726 4727To load (not JITed) t1.o at TX queue 0, port 0: 4728 4729.. code-block:: console 4730 4731 testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o 4732 4733bpf-unload 4734~~~~~~~~~~ 4735 4736Unload previously loaded eBPF program for particular RX/TX queue:: 4737 4738 testpmd> bpf-unload rx|tx (portid) (queueid) 4739 4740For example to unload BPF filter from TX queue 0, port 0: 4741 4742.. code-block:: console 4743 4744 testpmd> bpf-unload tx 0 0 4745