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