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