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- Create a flow rule:: 3388 3389 flow create {port_id} 3390 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3391 pattern {item} [/ {item} [...]] / end 3392 actions {action} [/ {action} [...]] / end 3393 3394- Destroy specific flow rules:: 3395 3396 flow destroy {port_id} rule {rule_id} [...] 3397 3398- Destroy all flow rules:: 3399 3400 flow flush {port_id} 3401 3402- Query an existing flow rule:: 3403 3404 flow query {port_id} {rule_id} {action} 3405 3406- List existing flow rules sorted by priority, filtered by group 3407 identifiers:: 3408 3409 flow list {port_id} [group {group_id}] [...] 3410 3411- Restrict ingress traffic to the defined flow rules:: 3412 3413 flow isolate {port_id} {boolean} 3414 3415- Dump internal representation information of all flows in hardware:: 3416 3417 flow dump {port_id} all {output_file} 3418 3419 for one flow:: 3420 3421 flow dump {port_id} rule {rule_id} {output_file} 3422 3423- List and destroy aged flow rules:: 3424 3425 flow aged {port_id} [destroy] 3426 3427- Tunnel offload - create a tunnel stub:: 3428 3429 flow tunnel create {port_id} type {tunnel_type} 3430 3431- Tunnel offload - destroy a tunnel stub:: 3432 3433 flow tunnel destroy {port_id} id {tunnel_id} 3434 3435- Tunnel offload - list port tunnel stubs:: 3436 3437 flow tunnel list {port_id} 3438 3439Retrieving info about flow management engine 3440~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3441 3442``flow info`` retrieves info on pre-configurable resources in the underlying 3443device to give a hint of possible values for flow engine configuration. 3444 3445``rte_flow_info_get()``:: 3446 3447 flow info {port_id} 3448 3449If successful, it will show:: 3450 3451 Flow engine resources on port #[...]: 3452 Number of queues: #[...] 3453 Size of queues: #[...] 3454 Number of counters: #[...] 3455 Number of aging objects: #[...] 3456 Number of meters: #[...] 3457 3458Otherwise it will show an error message of the form:: 3459 3460 Caught error type [...] ([...]): [...] 3461 3462Configuring flow management engine 3463~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3464 3465``flow configure`` pre-allocates all the needed resources in the underlying 3466device to be used later at the flow creation. Flow queues are allocated as well 3467for asynchronous flow creation/destruction operations. It is bound to 3468``rte_flow_configure()``:: 3469 3470 flow configure {port_id} 3471 [queues_number {number}] [queues_size {size}] 3472 [counters_number {number}] 3473 [aging_counters_number {number}] 3474 [meters_number {number}] 3475 3476If successful, it will show:: 3477 3478 Configure flows on port #[...]: number of queues #[...] with #[...] elements 3479 3480Otherwise it will show an error message of the form:: 3481 3482 Caught error type [...] ([...]): [...] 3483 3484Creating pattern templates 3485~~~~~~~~~~~~~~~~~~~~~~~~~~ 3486 3487``flow pattern_template create`` creates the specified pattern template. 3488It is bound to ``rte_flow_pattern_template_create()``:: 3489 3490 flow pattern_template {port_id} create [pattern_template_id {id}] 3491 [relaxed {boolean}] [ingress] [egress] [transfer] 3492 template {item} [/ {item} [...]] / end 3493 3494If successful, it will show:: 3495 3496 Pattern template #[...] created 3497 3498Otherwise it will show an error message of the form:: 3499 3500 Caught error type [...] ([...]): [...] 3501 3502This command uses the same pattern items as ``flow create``, 3503their format is described in `Creating flow rules`_. 3504 3505Destroying pattern templates 3506~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3507 3508``flow pattern_template destroy`` destroys one or more pattern templates 3509from their template ID (as returned by ``flow pattern_template create``), 3510this command calls ``rte_flow_pattern_template_destroy()`` as many 3511times as necessary:: 3512 3513 flow pattern_template {port_id} destroy pattern_template {id} [...] 3514 3515If successful, it will show:: 3516 3517 Pattern template #[...] destroyed 3518 3519It does not report anything for pattern template IDs that do not exist. 3520The usual error message is shown when a pattern template cannot be destroyed:: 3521 3522 Caught error type [...] ([...]): [...] 3523 3524Creating actions templates 3525~~~~~~~~~~~~~~~~~~~~~~~~~~ 3526 3527``flow actions_template create`` creates the specified actions template. 3528It is bound to ``rte_flow_actions_template_create()``:: 3529 3530 flow actions_template {port_id} create [actions_template_id {id}] 3531 [ingress] [egress] [transfer] 3532 template {action} [/ {action} [...]] / end 3533 mask {action} [/ {action} [...]] / end 3534 3535If successful, it will show:: 3536 3537 Actions template #[...] created 3538 3539Otherwise it will show an error message of the form:: 3540 3541 Caught error type [...] ([...]): [...] 3542 3543This command uses the same actions as ``flow create``, 3544their format is described in `Creating flow rules`_. 3545 3546Destroying actions templates 3547~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3548 3549``flow actions_template destroy`` destroys one or more actions templates 3550from their template ID (as returned by ``flow actions_template create``), 3551this command calls ``rte_flow_actions_template_destroy()`` as many 3552times as necessary:: 3553 3554 flow actions_template {port_id} destroy actions_template {id} [...] 3555 3556If successful, it will show:: 3557 3558 Actions template #[...] destroyed 3559 3560It does not report anything for actions template IDs that do not exist. 3561The usual error message is shown when an actions template cannot be destroyed:: 3562 3563 Caught error type [...] ([...]): [...] 3564 3565Creating template table 3566~~~~~~~~~~~~~~~~~~~~~~~ 3567 3568``flow template_table create`` creates the specified template table. 3569It is bound to ``rte_flow_template_table_create()``:: 3570 3571 flow template_table {port_id} create 3572 [table_id {id}] [group {group_id}] 3573 [priority {level}] [ingress] [egress] [transfer] 3574 rules_number {number} 3575 pattern_template {pattern_template_id} 3576 actions_template {actions_template_id} 3577 3578If successful, it will show:: 3579 3580 Template table #[...] created 3581 3582Otherwise it will show an error message of the form:: 3583 3584 Caught error type [...] ([...]): [...] 3585 3586Destroying flow table 3587~~~~~~~~~~~~~~~~~~~~~ 3588 3589``flow template_table destroy`` destroys one or more template tables 3590from their table ID (as returned by ``flow template_table create``), 3591this command calls ``rte_flow_template_table_destroy()`` as many 3592times as necessary:: 3593 3594 flow template_table {port_id} destroy table {id} [...] 3595 3596If successful, it will show:: 3597 3598 Template table #[...] destroyed 3599 3600It does not report anything for table IDs that do not exist. 3601The usual error message is shown when a table cannot be destroyed:: 3602 3603 Caught error type [...] ([...]): [...] 3604 3605Creating a tunnel stub for offload 3606~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3607 3608``flow tunnel create`` setup a tunnel stub for tunnel offload flow rules:: 3609 3610 flow tunnel create {port_id} type {tunnel_type} 3611 3612If successful, it will return a tunnel stub ID usable with other commands:: 3613 3614 port [...]: flow tunnel #[...] type [...] 3615 3616Tunnel stub ID is relative to a port. 3617 3618Destroying tunnel offload stub 3619~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3620 3621``flow tunnel destroy`` destroy port tunnel stub:: 3622 3623 flow tunnel destroy {port_id} id {tunnel_id} 3624 3625Listing tunnel offload stubs 3626~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3627 3628``flow tunnel list`` list port tunnel offload stubs:: 3629 3630 flow tunnel list {port_id} 3631 3632Validating flow rules 3633~~~~~~~~~~~~~~~~~~~~~ 3634 3635``flow validate`` reports whether a flow rule would be accepted by the 3636underlying device in its current state but stops short of creating it. It is 3637bound to ``rte_flow_validate()``:: 3638 3639 flow validate {port_id} 3640 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3641 pattern {item} [/ {item} [...]] / end 3642 actions {action} [/ {action} [...]] / end 3643 3644If successful, it will show:: 3645 3646 Flow rule validated 3647 3648Otherwise it will show an error message of the form:: 3649 3650 Caught error type [...] ([...]): [...] 3651 3652This command uses the same parameters as ``flow create``, their format is 3653described in `Creating flow rules`_. 3654 3655Check whether redirecting any Ethernet packet received on port 0 to RX queue 3656index 6 is supported:: 3657 3658 testpmd> flow validate 0 ingress pattern eth / end 3659 actions queue index 6 / end 3660 Flow rule validated 3661 testpmd> 3662 3663Port 0 does not support TCPv6 rules:: 3664 3665 testpmd> flow validate 0 ingress pattern eth / ipv6 / tcp / end 3666 actions drop / end 3667 Caught error type 9 (specific pattern item): Invalid argument 3668 testpmd> 3669 3670Creating flow rules 3671~~~~~~~~~~~~~~~~~~~ 3672 3673``flow create`` validates and creates the specified flow rule. It is bound 3674to ``rte_flow_create()``:: 3675 3676 flow create {port_id} 3677 [group {group_id}] [priority {level}] [ingress] [egress] [transfer] 3678 [tunnel_set {tunnel_id}] [tunnel_match {tunnel_id}] 3679 pattern {item} [/ {item} [...]] / end 3680 actions {action} [/ {action} [...]] / end 3681 3682If successful, it will return a flow rule ID usable with other commands:: 3683 3684 Flow rule #[...] created 3685 3686Otherwise it will show an error message of the form:: 3687 3688 Caught error type [...] ([...]): [...] 3689 3690Parameters describe in the following order: 3691 3692- Attributes (*group*, *priority*, *ingress*, *egress*, *transfer* tokens). 3693- Tunnel offload specification (tunnel_set, tunnel_match) 3694- A matching pattern, starting with the *pattern* token and terminated by an 3695 *end* pattern item. 3696- Actions, starting with the *actions* token and terminated by an *end* 3697 action. 3698 3699These translate directly to *rte_flow* objects provided as-is to the 3700underlying functions. 3701 3702The shortest valid definition only comprises mandatory tokens:: 3703 3704 testpmd> flow create 0 pattern end actions end 3705 3706Note that PMDs may refuse rules that essentially do nothing such as this 3707one. 3708 3709**All unspecified object values are automatically initialized to 0.** 3710 3711Attributes 3712^^^^^^^^^^ 3713 3714These tokens affect flow rule attributes (``struct rte_flow_attr``) and are 3715specified before the ``pattern`` token. 3716 3717- ``group {group id}``: priority group. 3718- ``priority {level}``: priority level within group. 3719- ``ingress``: rule applies to ingress traffic. 3720- ``egress``: rule applies to egress traffic. 3721- ``transfer``: apply rule directly to endpoints found in pattern. 3722 3723Please note that use of ``transfer`` attribute requires that the flow and 3724its indirect components be managed via so-called ``transfer`` proxy port. 3725See `show flow transfer proxy port ID for the given port`_ for details. 3726 3727Each instance of an attribute specified several times overrides the previous 3728value as shown below (group 4 is used):: 3729 3730 testpmd> flow create 0 group 42 group 24 group 4 [...] 3731 3732Note that once enabled, ``ingress`` and ``egress`` cannot be disabled. 3733 3734While not specifying a direction is an error, some rules may allow both 3735simultaneously. 3736 3737Most rules affect RX therefore contain the ``ingress`` token:: 3738 3739 testpmd> flow create 0 ingress pattern [...] 3740 3741Tunnel offload 3742^^^^^^^^^^^^^^ 3743 3744Indicate tunnel offload rule type 3745 3746- ``tunnel_set {tunnel_id}``: mark rule as tunnel offload decap_set type. 3747- ``tunnel_match {tunnel_id}``: mark rule as tunnel offload match type. 3748 3749Matching pattern 3750^^^^^^^^^^^^^^^^ 3751 3752A matching pattern starts after the ``pattern`` token. It is made of pattern 3753items and is terminated by a mandatory ``end`` item. 3754 3755Items are named after their type (*RTE_FLOW_ITEM_TYPE_* from ``enum 3756rte_flow_item_type``). 3757 3758The ``/`` token is used as a separator between pattern items as shown 3759below:: 3760 3761 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end [...] 3762 3763Note that protocol items like these must be stacked from lowest to highest 3764layer to make sense. For instance, the following rule is either invalid or 3765unlikely to match any packet:: 3766 3767 testpmd> flow create 0 ingress pattern eth / udp / ipv4 / end [...] 3768 3769More information on these restrictions can be found in the *rte_flow* 3770documentation. 3771 3772Several items support additional specification structures, for example 3773``ipv4`` allows specifying source and destination addresses as follows:: 3774 3775 testpmd> flow create 0 ingress pattern eth / ipv4 src is 10.1.1.1 3776 dst is 10.2.0.0 / end [...] 3777 3778This rule matches all IPv4 traffic with the specified properties. 3779 3780In this example, ``src`` and ``dst`` are field names of the underlying 3781``struct rte_flow_item_ipv4`` object. All item properties can be specified 3782in a similar fashion. 3783 3784The ``is`` token means that the subsequent value must be matched exactly, 3785and assigns ``spec`` and ``mask`` fields in ``struct rte_flow_item`` 3786accordingly. Possible assignment tokens are: 3787 3788- ``is``: match value perfectly (with full bit-mask). 3789- ``spec``: match value according to configured bit-mask. 3790- ``last``: specify upper bound to establish a range. 3791- ``mask``: specify bit-mask with relevant bits set to one. 3792- ``prefix``: generate bit-mask with <prefix-length> most-significant bits set to one. 3793 3794These yield identical results:: 3795 3796 ipv4 src is 10.1.1.1 3797 3798:: 3799 3800 ipv4 src spec 10.1.1.1 src mask 255.255.255.255 3801 3802:: 3803 3804 ipv4 src spec 10.1.1.1 src prefix 32 3805 3806:: 3807 3808 ipv4 src is 10.1.1.1 src last 10.1.1.1 # range with a single value 3809 3810:: 3811 3812 ipv4 src is 10.1.1.1 src last 0 # 0 disables range 3813 3814Inclusive ranges can be defined with ``last``:: 3815 3816 ipv4 src is 10.1.1.1 src last 10.2.3.4 # 10.1.1.1 to 10.2.3.4 3817 3818Note that ``mask`` affects both ``spec`` and ``last``:: 3819 3820 ipv4 src is 10.1.1.1 src last 10.2.3.4 src mask 255.255.0.0 3821 # matches 10.1.0.0 to 10.2.255.255 3822 3823Properties can be modified multiple times:: 3824 3825 ipv4 src is 10.1.1.1 src is 10.1.2.3 src is 10.2.3.4 # matches 10.2.3.4 3826 3827:: 3828 3829 ipv4 src is 10.1.1.1 src prefix 24 src prefix 16 # matches 10.1.0.0/16 3830 3831Pattern items 3832^^^^^^^^^^^^^ 3833 3834This section lists supported pattern items and their attributes, if any. 3835 3836- ``end``: end list of pattern items. 3837 3838- ``void``: no-op pattern item. 3839 3840- ``invert``: perform actions when pattern does not match. 3841 3842- ``any``: match any protocol for the current layer. 3843 3844 - ``num {unsigned}``: number of layers covered. 3845 3846- ``pf``: match traffic from/to the physical function. 3847 3848- ``vf``: match traffic from/to a virtual function ID. 3849 3850 - ``id {unsigned}``: VF ID. 3851 3852- ``phy_port``: match traffic from/to a specific physical port. 3853 3854 - ``index {unsigned}``: physical port index. 3855 3856- ``port_id``: match traffic from/to a given DPDK port ID. 3857 3858 - ``id {unsigned}``: DPDK port ID. 3859 3860- ``mark``: match value set in previously matched flow rule using the mark action. 3861 3862 - ``id {unsigned}``: arbitrary integer value. 3863 3864- ``raw``: match an arbitrary byte string. 3865 3866 - ``relative {boolean}``: look for pattern after the previous item. 3867 - ``search {boolean}``: search pattern from offset (see also limit). 3868 - ``offset {integer}``: absolute or relative offset for pattern. 3869 - ``limit {unsigned}``: search area limit for start of pattern. 3870 - ``pattern {string}``: byte string to look for. 3871 - ``pattern_hex {string}``: byte string (provided in hexadecimal) to look for. 3872 3873- ``eth``: match Ethernet header. 3874 3875 - ``dst {MAC-48}``: destination MAC. 3876 - ``src {MAC-48}``: source MAC. 3877 - ``type {unsigned}``: EtherType or TPID. 3878 3879- ``vlan``: match 802.1Q/ad VLAN tag. 3880 3881 - ``tci {unsigned}``: tag control information. 3882 - ``pcp {unsigned}``: priority code point. 3883 - ``dei {unsigned}``: drop eligible indicator. 3884 - ``vid {unsigned}``: VLAN identifier. 3885 - ``inner_type {unsigned}``: inner EtherType or TPID. 3886 3887- ``ipv4``: match IPv4 header. 3888 3889 - ``version_ihl {unsigned}``: IPv4 version and IP header length. 3890 - ``tos {unsigned}``: type of service. 3891 - ``ttl {unsigned}``: time to live. 3892 - ``proto {unsigned}``: next protocol ID. 3893 - ``src {ipv4 address}``: source address. 3894 - ``dst {ipv4 address}``: destination address. 3895 3896- ``ipv6``: match IPv6 header. 3897 3898 - ``tc {unsigned}``: traffic class. 3899 - ``flow {unsigned}``: flow label. 3900 - ``proto {unsigned}``: protocol (next header). 3901 - ``hop {unsigned}``: hop limit. 3902 - ``src {ipv6 address}``: source address. 3903 - ``dst {ipv6 address}``: destination address. 3904 3905- ``icmp``: match ICMP header. 3906 3907 - ``type {unsigned}``: ICMP packet type. 3908 - ``code {unsigned}``: ICMP packet code. 3909 3910- ``udp``: match UDP header. 3911 3912 - ``src {unsigned}``: UDP source port. 3913 - ``dst {unsigned}``: UDP destination port. 3914 3915- ``tcp``: match TCP header. 3916 3917 - ``src {unsigned}``: TCP source port. 3918 - ``dst {unsigned}``: TCP destination port. 3919 3920- ``sctp``: match SCTP header. 3921 3922 - ``src {unsigned}``: SCTP source port. 3923 - ``dst {unsigned}``: SCTP destination port. 3924 - ``tag {unsigned}``: validation tag. 3925 - ``cksum {unsigned}``: checksum. 3926 3927- ``vxlan``: match VXLAN header. 3928 3929 - ``vni {unsigned}``: VXLAN identifier. 3930 - ``last_rsvd {unsigned}``: VXLAN last reserved 8-bits. 3931 3932- ``e_tag``: match IEEE 802.1BR E-Tag header. 3933 3934 - ``grp_ecid_b {unsigned}``: GRP and E-CID base. 3935 3936- ``nvgre``: match NVGRE header. 3937 3938 - ``tni {unsigned}``: virtual subnet ID. 3939 3940- ``mpls``: match MPLS header. 3941 3942 - ``label {unsigned}``: MPLS label. 3943 3944- ``gre``: match GRE header. 3945 3946 - ``protocol {unsigned}``: protocol type. 3947 3948- ``gre_key``: match GRE optional key field. 3949 3950 - ``value {unsigned}``: key value. 3951 3952- ``gre_option``: match GRE optional fields(checksum/key/sequence). 3953 3954 - ``checksum {unsigned}``: checksum value. 3955 - ``key {unsigned}``: key value. 3956 - ``sequence {unsigned}``: sequence number value. 3957 3958- ``fuzzy``: fuzzy pattern match, expect faster than default. 3959 3960 - ``thresh {unsigned}``: accuracy threshold. 3961 3962- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header. 3963 3964 - ``teid {unsigned}``: tunnel endpoint identifier. 3965 3966- ``geneve``: match GENEVE header. 3967 3968 - ``vni {unsigned}``: virtual network identifier. 3969 - ``protocol {unsigned}``: protocol type. 3970 3971- ``geneve-opt``: match GENEVE header option. 3972 3973 - ``class {unsigned}``: GENEVE option class. 3974 - ``type {unsigned}``: GENEVE option type. 3975 - ``length {unsigned}``: GENEVE option length in 32-bit words. 3976 - ``data {hex string}``: GENEVE option data, the length is defined by 3977 ``length`` field. 3978 3979- ``vxlan-gpe``: match VXLAN-GPE header. 3980 3981 - ``vni {unsigned}``: VXLAN-GPE identifier. 3982 3983- ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4. 3984 3985 - ``sha {MAC-48}``: sender hardware address. 3986 - ``spa {ipv4 address}``: sender IPv4 address. 3987 - ``tha {MAC-48}``: target hardware address. 3988 - ``tpa {ipv4 address}``: target IPv4 address. 3989 3990- ``ipv6_ext``: match presence of any IPv6 extension header. 3991 3992 - ``next_hdr {unsigned}``: next header. 3993 3994- ``icmp6``: match any ICMPv6 header. 3995 3996 - ``type {unsigned}``: ICMPv6 type. 3997 - ``code {unsigned}``: ICMPv6 code. 3998 3999- ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation. 4000 4001 - ``target_addr {ipv6 address}``: target address. 4002 4003- ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement. 4004 4005 - ``target_addr {ipv6 address}``: target address. 4006 4007- ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option. 4008 4009 - ``type {unsigned}``: ND option type. 4010 4011- ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet 4012 link-layer address option. 4013 4014 - ``sla {MAC-48}``: source Ethernet LLA. 4015 4016- ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet 4017 link-layer address option. 4018 4019 - ``tla {MAC-48}``: target Ethernet LLA. 4020 4021- ``meta``: match application specific metadata. 4022 4023 - ``data {unsigned}``: metadata value. 4024 4025- ``gtp_psc``: match GTP PDU extension header with type 0x85. 4026 4027 - ``pdu_type {unsigned}``: PDU type. 4028 4029 - ``qfi {unsigned}``: QoS flow identifier. 4030 4031- ``pppoes``, ``pppoed``: match PPPoE header. 4032 4033 - ``session_id {unsigned}``: session identifier. 4034 4035- ``pppoe_proto_id``: match PPPoE session protocol identifier. 4036 4037 - ``proto_id {unsigned}``: PPP protocol identifier. 4038 4039- ``l2tpv3oip``: match L2TPv3 over IP header. 4040 4041 - ``session_id {unsigned}``: L2TPv3 over IP session identifier. 4042 4043- ``ah``: match AH header. 4044 4045 - ``spi {unsigned}``: security parameters index. 4046 4047- ``pfcp``: match PFCP header. 4048 4049 - ``s_field {unsigned}``: S field. 4050 - ``seid {unsigned}``: session endpoint identifier. 4051 4052- ``integrity``: match packet integrity. 4053 4054 - ``level {unsigned}``: Packet encapsulation level the item should 4055 apply to. See rte_flow_action_rss for details. 4056 - ``value {unsigned}``: A bitmask that specify what packet elements 4057 must be matched for integrity. 4058 4059- ``conntrack``: match conntrack state. 4060 4061- ``port_representor``: match traffic entering the embedded switch from the given ethdev 4062 4063 - ``port_id {unsigned}``: ethdev port ID 4064 4065- ``represented_port``: match traffic entering the embedded switch from 4066 the entity represented by the given ethdev 4067 4068 - ``ethdev_port_id {unsigned}``: ethdev port ID 4069 4070- ``l2tpv2``: match L2TPv2 header. 4071 4072 - ``length {unsigned}``: L2TPv2 option length. 4073 - ``tunnel_id {unsigned}``: L2TPv2 tunnel identifier. 4074 - ``session_id {unsigned}``: L2TPv2 session identifier. 4075 - ``ns {unsigned}``: L2TPv2 option ns. 4076 - ``nr {unsigned}``: L2TPv2 option nr. 4077 - ``offset_size {unsigned}``: L2TPv2 option offset. 4078 4079- ``ppp``: match PPP header. 4080 4081 - ``addr {unsigned}``: PPP address. 4082 - ``ctrl {unsigned}``: PPP control. 4083 - ``proto_id {unsigned}``: PPP protocol identifier. 4084 4085Actions list 4086^^^^^^^^^^^^ 4087 4088A list of actions starts after the ``actions`` token in the same fashion as 4089`Matching pattern`_; actions are separated by ``/`` tokens and the list is 4090terminated by a mandatory ``end`` action. 4091 4092Actions are named after their type (*RTE_FLOW_ACTION_TYPE_* from ``enum 4093rte_flow_action_type``). 4094 4095Dropping all incoming UDPv4 packets can be expressed as follows:: 4096 4097 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 4098 actions drop / end 4099 4100Several actions have configurable properties which must be specified when 4101there is no valid default value. For example, ``queue`` requires a target 4102queue index. 4103 4104This rule redirects incoming UDPv4 traffic to queue index 6:: 4105 4106 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 4107 actions queue index 6 / end 4108 4109While this one could be rejected by PMDs (unspecified queue index):: 4110 4111 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end 4112 actions queue / end 4113 4114As defined by *rte_flow*, the list is not ordered, all actions of a given 4115rule are performed simultaneously. These are equivalent:: 4116 4117 queue index 6 / void / mark id 42 / end 4118 4119:: 4120 4121 void / mark id 42 / queue index 6 / end 4122 4123All actions in a list should have different types, otherwise only the last 4124action of a given type is taken into account:: 4125 4126 queue index 4 / queue index 5 / queue index 6 / end # will use queue 6 4127 4128:: 4129 4130 drop / drop / drop / end # drop is performed only once 4131 4132:: 4133 4134 mark id 42 / queue index 3 / mark id 24 / end # mark will be 24 4135 4136Considering they are performed simultaneously, opposite and overlapping 4137actions can sometimes be combined when the end result is unambiguous:: 4138 4139 drop / queue index 6 / end # drop has no effect 4140 4141:: 4142 4143 queue index 6 / rss queues 6 7 8 / end # queue has no effect 4144 4145:: 4146 4147 drop / passthru / end # drop has no effect 4148 4149Note that PMDs may still refuse such combinations. 4150 4151Actions 4152^^^^^^^ 4153 4154This section lists supported actions and their attributes, if any. 4155 4156- ``end``: end list of actions. 4157 4158- ``void``: no-op action. 4159 4160- ``passthru``: let subsequent rule process matched packets. 4161 4162- ``jump``: redirect traffic to group on device. 4163 4164 - ``group {unsigned}``: group to redirect to. 4165 4166- ``mark``: attach 32 bit value to packets. 4167 4168 - ``id {unsigned}``: 32 bit value to return with packets. 4169 4170- ``flag``: flag packets. 4171 4172- ``queue``: assign packets to a given queue index. 4173 4174 - ``index {unsigned}``: queue index to use. 4175 4176- ``drop``: drop packets (note: passthru has priority). 4177 4178- ``count``: enable counters for this rule. 4179 4180- ``rss``: spread packets among several queues. 4181 4182 - ``func {hash function}``: RSS hash function to apply, allowed tokens are 4183 ``toeplitz``, ``simple_xor``, ``symmetric_toeplitz`` and ``default``. 4184 4185 - ``level {unsigned}``: encapsulation level for ``types``. 4186 4187 - ``types [{RSS hash type} [...]] end``: specific RSS hash types. 4188 Note that an empty list does not disable RSS but instead requests 4189 unspecified "best-effort" settings. 4190 4191 - ``key {string}``: RSS hash key, overrides ``key_len``. 4192 4193 - ``key_len {unsigned}``: RSS hash key length in bytes, can be used in 4194 conjunction with ``key`` to pad or truncate it. 4195 4196 - ``queues [{unsigned} [...]] end``: queue indices to use. 4197 4198- ``pf``: direct traffic to physical function. 4199 4200- ``vf``: direct traffic to a virtual function ID. 4201 4202 - ``original {boolean}``: use original VF ID if possible. 4203 - ``id {unsigned}``: VF ID. 4204 4205- ``phy_port``: direct packets to physical port index. 4206 4207 - ``original {boolean}``: use original port index if possible. 4208 - ``index {unsigned}``: physical port index. 4209 4210- ``port_id``: direct matching traffic to a given DPDK port ID. 4211 4212 - ``original {boolean}``: use original DPDK port ID if possible. 4213 - ``id {unsigned}``: DPDK port ID. 4214 4215- ``of_set_mpls_ttl``: OpenFlow's ``OFPAT_SET_MPLS_TTL``. 4216 4217 - ``mpls_ttl``: MPLS TTL. 4218 4219- ``of_dec_mpls_ttl``: OpenFlow's ``OFPAT_DEC_MPLS_TTL``. 4220 4221- ``of_set_nw_ttl``: OpenFlow's ``OFPAT_SET_NW_TTL``. 4222 4223 - ``nw_ttl``: IP TTL. 4224 4225- ``of_dec_nw_ttl``: OpenFlow's ``OFPAT_DEC_NW_TTL``. 4226 4227- ``of_copy_ttl_out``: OpenFlow's ``OFPAT_COPY_TTL_OUT``. 4228 4229- ``of_copy_ttl_in``: OpenFlow's ``OFPAT_COPY_TTL_IN``. 4230 4231- ``of_pop_vlan``: OpenFlow's ``OFPAT_POP_VLAN``. 4232 4233- ``of_push_vlan``: OpenFlow's ``OFPAT_PUSH_VLAN``. 4234 4235 - ``ethertype``: Ethertype. 4236 4237- ``of_set_vlan_vid``: OpenFlow's ``OFPAT_SET_VLAN_VID``. 4238 4239 - ``vlan_vid``: VLAN id. 4240 4241- ``of_set_vlan_pcp``: OpenFlow's ``OFPAT_SET_VLAN_PCP``. 4242 4243 - ``vlan_pcp``: VLAN priority. 4244 4245- ``of_pop_mpls``: OpenFlow's ``OFPAT_POP_MPLS``. 4246 4247 - ``ethertype``: Ethertype. 4248 4249- ``of_push_mpls``: OpenFlow's ``OFPAT_PUSH_MPLS``. 4250 4251 - ``ethertype``: Ethertype. 4252 4253- ``vxlan_encap``: Performs a VXLAN encapsulation, outer layer configuration 4254 is done through `Config VXLAN Encap outer layers`_. 4255 4256- ``vxlan_decap``: Performs a decapsulation action by stripping all headers of 4257 the VXLAN tunnel network overlay from the matched flow. 4258 4259- ``nvgre_encap``: Performs a NVGRE encapsulation, outer layer configuration 4260 is done through `Config NVGRE Encap outer layers`_. 4261 4262- ``nvgre_decap``: Performs a decapsulation action by stripping all headers of 4263 the NVGRE tunnel network overlay from the matched flow. 4264 4265- ``l2_encap``: Performs a L2 encapsulation, L2 configuration 4266 is done through `Config L2 Encap`_. 4267 4268- ``l2_decap``: Performs a L2 decapsulation, L2 configuration 4269 is done through `Config L2 Decap`_. 4270 4271- ``mplsogre_encap``: Performs a MPLSoGRE encapsulation, outer layer 4272 configuration is done through `Config MPLSoGRE Encap outer layers`_. 4273 4274- ``mplsogre_decap``: Performs a MPLSoGRE decapsulation, outer layer 4275 configuration is done through `Config MPLSoGRE Decap outer layers`_. 4276 4277- ``mplsoudp_encap``: Performs a MPLSoUDP encapsulation, outer layer 4278 configuration is done through `Config MPLSoUDP Encap outer layers`_. 4279 4280- ``mplsoudp_decap``: Performs a MPLSoUDP decapsulation, outer layer 4281 configuration is done through `Config MPLSoUDP Decap outer layers`_. 4282 4283- ``set_ipv4_src``: Set a new IPv4 source address in the outermost IPv4 header. 4284 4285 - ``ipv4_addr``: New IPv4 source address. 4286 4287- ``set_ipv4_dst``: Set a new IPv4 destination address in the outermost IPv4 4288 header. 4289 4290 - ``ipv4_addr``: New IPv4 destination address. 4291 4292- ``set_ipv6_src``: Set a new IPv6 source address in the outermost IPv6 header. 4293 4294 - ``ipv6_addr``: New IPv6 source address. 4295 4296- ``set_ipv6_dst``: Set a new IPv6 destination address in the outermost IPv6 4297 header. 4298 4299 - ``ipv6_addr``: New IPv6 destination address. 4300 4301- ``set_tp_src``: Set a new source port number in the outermost TCP/UDP 4302 header. 4303 4304 - ``port``: New TCP/UDP source port number. 4305 4306- ``set_tp_dst``: Set a new destination port number in the outermost TCP/UDP 4307 header. 4308 4309 - ``port``: New TCP/UDP destination port number. 4310 4311- ``mac_swap``: Swap the source and destination MAC addresses in the outermost 4312 Ethernet header. 4313 4314- ``dec_ttl``: Performs a decrease TTL value action 4315 4316- ``set_ttl``: Set TTL value with specified value 4317 - ``ttl_value {unsigned}``: The new TTL value to be set 4318 4319- ``set_mac_src``: set source MAC address 4320 4321 - ``mac_addr {MAC-48}``: new source MAC address 4322 4323- ``set_mac_dst``: set destination MAC address 4324 4325 - ``mac_addr {MAC-48}``: new destination MAC address 4326 4327- ``inc_tcp_seq``: Increase sequence number in the outermost TCP header. 4328 4329 - ``value {unsigned}``: Value to increase TCP sequence number by. 4330 4331- ``dec_tcp_seq``: Decrease sequence number in the outermost TCP header. 4332 4333 - ``value {unsigned}``: Value to decrease TCP sequence number by. 4334 4335- ``inc_tcp_ack``: Increase acknowledgment number in the outermost TCP header. 4336 4337 - ``value {unsigned}``: Value to increase TCP acknowledgment number by. 4338 4339- ``dec_tcp_ack``: Decrease acknowledgment number in the outermost TCP header. 4340 4341 - ``value {unsigned}``: Value to decrease TCP acknowledgment number by. 4342 4343- ``set_ipv4_dscp``: Set IPv4 DSCP value with specified value 4344 4345 - ``dscp_value {unsigned}``: The new DSCP value to be set 4346 4347- ``set_ipv6_dscp``: Set IPv6 DSCP value with specified value 4348 4349 - ``dscp_value {unsigned}``: The new DSCP value to be set 4350 4351- ``indirect``: Use indirect action created via 4352 ``flow indirect_action {port_id} create`` 4353 4354 - ``indirect_action_id {unsigned}``: Indirect action ID to use 4355 4356- ``color``: Color the packet to reflect the meter color result 4357 4358 - ``type {value}``: Set color type with specified value(green/yellow/red) 4359 4360- ``port_representor``: at embedded switch level, send matching traffic to 4361 the given ethdev 4362 4363 - ``port_id {unsigned}``: ethdev port ID 4364 4365- ``represented_port``: at embedded switch level, send matching traffic to 4366 the entity represented by the given ethdev 4367 4368 - ``ethdev_port_id {unsigned}``: ethdev port ID 4369 4370Destroying flow rules 4371~~~~~~~~~~~~~~~~~~~~~ 4372 4373``flow destroy`` destroys one or more rules from their rule ID (as returned 4374by ``flow create``), this command calls ``rte_flow_destroy()`` as many 4375times as necessary:: 4376 4377 flow destroy {port_id} rule {rule_id} [...] 4378 4379If successful, it will show:: 4380 4381 Flow rule #[...] destroyed 4382 4383It does not report anything for rule IDs that do not exist. The usual error 4384message is shown when a rule cannot be destroyed:: 4385 4386 Caught error type [...] ([...]): [...] 4387 4388``flow flush`` destroys all rules on a device and does not take extra 4389arguments. It is bound to ``rte_flow_flush()``:: 4390 4391 flow flush {port_id} 4392 4393Any errors are reported as above. 4394 4395Creating several rules and destroying them:: 4396 4397 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4398 actions queue index 2 / end 4399 Flow rule #0 created 4400 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4401 actions queue index 3 / end 4402 Flow rule #1 created 4403 testpmd> flow destroy 0 rule 0 rule 1 4404 Flow rule #1 destroyed 4405 Flow rule #0 destroyed 4406 testpmd> 4407 4408The same result can be achieved using ``flow flush``:: 4409 4410 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4411 actions queue index 2 / end 4412 Flow rule #0 created 4413 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4414 actions queue index 3 / end 4415 Flow rule #1 created 4416 testpmd> flow flush 0 4417 testpmd> 4418 4419Non-existent rule IDs are ignored:: 4420 4421 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4422 actions queue index 2 / end 4423 Flow rule #0 created 4424 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4425 actions queue index 3 / end 4426 Flow rule #1 created 4427 testpmd> flow destroy 0 rule 42 rule 10 rule 2 4428 testpmd> 4429 testpmd> flow destroy 0 rule 0 4430 Flow rule #0 destroyed 4431 testpmd> 4432 4433Querying flow rules 4434~~~~~~~~~~~~~~~~~~~ 4435 4436``flow query`` queries a specific action of a flow rule having that 4437ability. Such actions collect information that can be reported using this 4438command. It is bound to ``rte_flow_query()``:: 4439 4440 flow query {port_id} {rule_id} {action} 4441 4442If successful, it will display either the retrieved data for known actions 4443or the following message:: 4444 4445 Cannot display result for action type [...] ([...]) 4446 4447Otherwise, it will complain either that the rule does not exist or that some 4448error occurred:: 4449 4450 Flow rule #[...] not found 4451 4452:: 4453 4454 Caught error type [...] ([...]): [...] 4455 4456Currently only the ``count`` action is supported. This action reports the 4457number of packets that hit the flow rule and the total number of bytes. Its 4458output has the following format:: 4459 4460 count: 4461 hits_set: [...] # whether "hits" contains a valid value 4462 bytes_set: [...] # whether "bytes" contains a valid value 4463 hits: [...] # number of packets 4464 bytes: [...] # number of bytes 4465 4466Querying counters for TCPv6 packets redirected to queue 6:: 4467 4468 testpmd> flow create 0 ingress pattern eth / ipv6 / tcp / end 4469 actions queue index 6 / count / end 4470 Flow rule #4 created 4471 testpmd> flow query 0 4 count 4472 count: 4473 hits_set: 1 4474 bytes_set: 0 4475 hits: 386446 4476 bytes: 0 4477 testpmd> 4478 4479Listing flow rules 4480~~~~~~~~~~~~~~~~~~ 4481 4482``flow list`` lists existing flow rules sorted by priority and optionally 4483filtered by group identifiers:: 4484 4485 flow list {port_id} [group {group_id}] [...] 4486 4487This command only fails with the following message if the device does not 4488exist:: 4489 4490 Invalid port [...] 4491 4492Output consists of a header line followed by a short description of each 4493flow rule, one per line. There is no output at all when no flow rules are 4494configured on the device:: 4495 4496 ID Group Prio Attr Rule 4497 [...] [...] [...] [...] [...] 4498 4499``Attr`` column flags: 4500 4501- ``i`` for ``ingress``. 4502- ``e`` for ``egress``. 4503 4504Creating several flow rules and listing them:: 4505 4506 testpmd> flow create 0 ingress pattern eth / ipv4 / end 4507 actions queue index 6 / end 4508 Flow rule #0 created 4509 testpmd> flow create 0 ingress pattern eth / ipv6 / end 4510 actions queue index 2 / end 4511 Flow rule #1 created 4512 testpmd> flow create 0 priority 5 ingress pattern eth / ipv4 / udp / end 4513 actions rss queues 6 7 8 end / end 4514 Flow rule #2 created 4515 testpmd> flow list 0 4516 ID Group Prio Attr Rule 4517 0 0 0 i- ETH IPV4 => QUEUE 4518 1 0 0 i- ETH IPV6 => QUEUE 4519 2 0 5 i- ETH IPV4 UDP => RSS 4520 testpmd> 4521 4522Rules are sorted by priority (i.e. group ID first, then priority level):: 4523 4524 testpmd> flow list 1 4525 ID Group Prio Attr Rule 4526 0 0 0 i- ETH => COUNT 4527 6 0 500 i- ETH IPV6 TCP => DROP COUNT 4528 5 0 1000 i- ETH IPV6 ICMP => QUEUE 4529 1 24 0 i- ETH IPV4 UDP => QUEUE 4530 4 24 10 i- ETH IPV4 TCP => DROP 4531 3 24 20 i- ETH IPV4 => DROP 4532 2 24 42 i- ETH IPV4 UDP => QUEUE 4533 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE 4534 testpmd> 4535 4536Output can be limited to specific groups:: 4537 4538 testpmd> flow list 1 group 0 group 63 4539 ID Group Prio Attr Rule 4540 0 0 0 i- ETH => COUNT 4541 6 0 500 i- ETH IPV6 TCP => DROP COUNT 4542 5 0 1000 i- ETH IPV6 ICMP => QUEUE 4543 7 63 0 i- ETH IPV6 UDP VXLAN => MARK QUEUE 4544 testpmd> 4545 4546Toggling isolated mode 4547~~~~~~~~~~~~~~~~~~~~~~ 4548 4549``flow isolate`` can be used to tell the underlying PMD that ingress traffic 4550must only be injected from the defined flow rules; that no default traffic 4551is expected outside those rules and the driver is free to assign more 4552resources to handle them. It is bound to ``rte_flow_isolate()``:: 4553 4554 flow isolate {port_id} {boolean} 4555 4556If successful, enabling or disabling isolated mode shows either:: 4557 4558 Ingress traffic on port [...] 4559 is now restricted to the defined flow rules 4560 4561Or:: 4562 4563 Ingress traffic on port [...] 4564 is not restricted anymore to the defined flow rules 4565 4566Otherwise, in case of error:: 4567 4568 Caught error type [...] ([...]): [...] 4569 4570Mainly due to its side effects, PMDs supporting this mode may not have the 4571ability to toggle it more than once without reinitializing affected ports 4572first (e.g. by exiting testpmd). 4573 4574Enabling isolated mode:: 4575 4576 testpmd> flow isolate 0 true 4577 Ingress traffic on port 0 is now restricted to the defined flow rules 4578 testpmd> 4579 4580Disabling isolated mode:: 4581 4582 testpmd> flow isolate 0 false 4583 Ingress traffic on port 0 is not restricted anymore to the defined flow rules 4584 testpmd> 4585 4586Dumping HW internal information 4587~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4588 4589``flow dump`` dumps the hardware's internal representation information of 4590all flows. It is bound to ``rte_flow_dev_dump()``:: 4591 4592 flow dump {port_id} {output_file} 4593 4594If successful, it will show:: 4595 4596 Flow dump finished 4597 4598Otherwise, it will complain error occurred:: 4599 4600 Caught error type [...] ([...]): [...] 4601 4602Listing and destroying aged flow rules 4603~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4604 4605``flow aged`` simply lists aged flow rules be get from api ``rte_flow_get_aged_flows``, 4606and ``destroy`` parameter can be used to destroy those flow rules in PMD. 4607 4608 flow aged {port_id} [destroy] 4609 4610Listing current aged flow rules:: 4611 4612 testpmd> flow aged 0 4613 Port 0 total aged flows: 0 4614 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.14 / end 4615 actions age timeout 5 / queue index 0 / end 4616 Flow rule #0 created 4617 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.15 / end 4618 actions age timeout 4 / queue index 0 / end 4619 Flow rule #1 created 4620 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.16 / end 4621 actions age timeout 2 / queue index 0 / end 4622 Flow rule #2 created 4623 testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.17 / end 4624 actions age timeout 3 / queue index 0 / end 4625 Flow rule #3 created 4626 4627 4628Aged Rules are simply list as command ``flow list {port_id}``, but strip the detail rule 4629information, all the aged flows are sorted by the longest timeout time. For example, if 4630those rules be configured in the same time, ID 2 will be the first aged out rule, the next 4631will be ID 3, ID 1, ID 0:: 4632 4633 testpmd> flow aged 0 4634 Port 0 total aged flows: 4 4635 ID Group Prio Attr 4636 2 0 0 i-- 4637 3 0 0 i-- 4638 1 0 0 i-- 4639 0 0 0 i-- 4640 4641If attach ``destroy`` parameter, the command will destroy all the list aged flow rules. 4642 4643 testpmd> flow aged 0 destroy 4644 Port 0 total aged flows: 4 4645 ID Group Prio Attr 4646 2 0 0 i-- 4647 3 0 0 i-- 4648 1 0 0 i-- 4649 0 0 0 i-- 4650 4651 Flow rule #2 destroyed 4652 Flow rule #3 destroyed 4653 Flow rule #1 destroyed 4654 Flow rule #0 destroyed 4655 4 flows be destroyed 4656 testpmd> flow aged 0 4657 Port 0 total aged flows: 0 4658 4659Creating indirect actions 4660~~~~~~~~~~~~~~~~~~~~~~~~~ 4661 4662``flow indirect_action {port_id} create`` creates indirect action with optional 4663indirect action ID. It is bound to ``rte_flow_action_handle_create()``:: 4664 4665 flow indirect_action {port_id} create [action_id {indirect_action_id}] 4666 [ingress] [egress] [transfer] action {action} / end 4667 4668If successful, it will show:: 4669 4670 Indirect action #[...] created 4671 4672Otherwise, it will complain either that indirect action already exists or that 4673some error occurred:: 4674 4675 Indirect action #[...] is already assigned, delete it first 4676 4677:: 4678 4679 Caught error type [...] ([...]): [...] 4680 4681Create indirect rss action with id 100 to queues 1 and 2 on port 0:: 4682 4683 testpmd> flow indirect_action 0 create action_id 100 \ 4684 ingress action rss queues 1 2 end / end 4685 4686Create indirect rss action with id assigned by testpmd to queues 1 and 2 on 4687port 0:: 4688 4689 testpmd> flow indirect_action 0 create action_id \ 4690 ingress action rss queues 0 1 end / end 4691 4692Updating indirect actions 4693~~~~~~~~~~~~~~~~~~~~~~~~~ 4694 4695``flow indirect_action {port_id} update`` updates configuration of the indirect 4696action from its indirect action ID (as returned by 4697``flow indirect_action {port_id} create``). It is bound to 4698``rte_flow_action_handle_update()``:: 4699 4700 flow indirect_action {port_id} update {indirect_action_id} 4701 action {action} / end 4702 4703If successful, it will show:: 4704 4705 Indirect action #[...] updated 4706 4707Otherwise, it will complain either that indirect action not found or that some 4708error occurred:: 4709 4710 Failed to find indirect action #[...] on port [...] 4711 4712:: 4713 4714 Caught error type [...] ([...]): [...] 4715 4716Update indirect rss action having id 100 on port 0 with rss to queues 0 and 3 4717(in create example above rss queues were 1 and 2):: 4718 4719 testpmd> flow indirect_action 0 update 100 action rss queues 0 3 end / end 4720 4721Destroying indirect actions 4722~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4723 4724``flow indirect_action {port_id} destroy`` destroys one or more indirect actions 4725from their indirect action IDs (as returned by 4726``flow indirect_action {port_id} create``). It is bound to 4727``rte_flow_action_handle_destroy()``:: 4728 4729 flow indirect_action {port_id} destroy action_id {indirect_action_id} [...] 4730 4731If successful, it will show:: 4732 4733 Indirect action #[...] destroyed 4734 4735It does not report anything for indirect action IDs that do not exist. 4736The usual error message is shown when a indirect action cannot be destroyed:: 4737 4738 Caught error type [...] ([...]): [...] 4739 4740Destroy indirect actions having id 100 & 101:: 4741 4742 testpmd> flow indirect_action 0 destroy action_id 100 action_id 101 4743 4744Query indirect actions 4745~~~~~~~~~~~~~~~~~~~~~~ 4746 4747``flow indirect_action {port_id} query`` queries the indirect action from its 4748indirect action ID (as returned by ``flow indirect_action {port_id} create``). 4749It is bound to ``rte_flow_action_handle_query()``:: 4750 4751 flow indirect_action {port_id} query {indirect_action_id} 4752 4753Currently only rss indirect action supported. If successful, it will show:: 4754 4755 Indirect RSS action: 4756 refs:[...] 4757 4758Otherwise, it will complain either that indirect action not found or that some 4759error occurred:: 4760 4761 Failed to find indirect action #[...] on port [...] 4762 4763:: 4764 4765 Caught error type [...] ([...]): [...] 4766 4767Query indirect action having id 100:: 4768 4769 testpmd> flow indirect_action 0 query 100 4770 4771Sample QinQ flow rules 4772~~~~~~~~~~~~~~~~~~~~~~ 4773 4774Before creating QinQ rule(s) the following commands should be issued to enable QinQ:: 4775 4776 testpmd> port stop 0 4777 testpmd> vlan set extend on 0 4778 4779The above command sets the inner and outer TPID's to 0x8100. 4780 4781To change the TPID's the following commands should be used:: 4782 4783 testpmd> vlan set outer tpid 0x88A8 0 4784 testpmd> vlan set inner tpid 0x8100 0 4785 testpmd> port start 0 4786 4787Validate and create a QinQ rule on port 0 to steer traffic to a VF queue in a VM. 4788 4789:: 4790 4791 testpmd> flow validate 0 ingress pattern eth / vlan tci is 123 / 4792 vlan tci is 456 / end actions vf id 1 / queue index 0 / end 4793 Flow rule #0 validated 4794 4795 testpmd> flow create 0 ingress pattern eth / vlan tci is 4 / 4796 vlan tci is 456 / end actions vf id 123 / queue index 0 / end 4797 Flow rule #0 created 4798 4799 testpmd> flow list 0 4800 ID Group Prio Attr Rule 4801 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 4802 4803Validate and create a QinQ rule on port 0 to steer traffic to a queue on the host. 4804 4805:: 4806 4807 testpmd> flow validate 0 ingress pattern eth / vlan tci is 321 / 4808 vlan tci is 654 / end actions pf / queue index 0 / end 4809 Flow rule #1 validated 4810 4811 testpmd> flow create 0 ingress pattern eth / vlan tci is 321 / 4812 vlan tci is 654 / end actions pf / queue index 1 / end 4813 Flow rule #1 created 4814 4815 testpmd> flow list 0 4816 ID Group Prio Attr Rule 4817 0 0 0 i- ETH VLAN VLAN=>VF QUEUE 4818 1 0 0 i- ETH VLAN VLAN=>PF QUEUE 4819 4820Sample VXLAN flow rules 4821~~~~~~~~~~~~~~~~~~~~~~~ 4822 4823Before creating VXLAN rule(s), the UDP port should be added for VXLAN packet 4824filter on a port:: 4825 4826 testpmd> rx_vxlan_port add 4789 0 4827 4828Create VXLAN rules on port 0 to steer traffic to PF queues. 4829 4830:: 4831 4832 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / 4833 eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end 4834 Flow rule #0 created 4835 4836 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 3 / 4837 eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end 4838 Flow rule #1 created 4839 4840 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / 4841 eth dst is 00:11:22:33:44:55 / vlan tci is 10 / end actions pf / 4842 queue index 3 / end 4843 Flow rule #2 created 4844 4845 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 5 / 4846 eth dst is 00:11:22:33:44:55 / vlan tci is 20 / end actions pf / 4847 queue index 4 / end 4848 Flow rule #3 created 4849 4850 testpmd> flow create 0 ingress pattern eth dst is 00:00:00:00:01:00 / ipv4 / 4851 udp / vxlan vni is 6 / eth dst is 00:11:22:33:44:55 / end actions pf / 4852 queue index 5 / end 4853 Flow rule #4 created 4854 4855 testpmd> flow list 0 4856 ID Group Prio Attr Rule 4857 0 0 0 i- ETH IPV4 UDP VXLAN ETH => QUEUE 4858 1 0 0 i- ETH IPV4 UDP VXLAN ETH => QUEUE 4859 2 0 0 i- ETH IPV4 UDP VXLAN ETH VLAN => QUEUE 4860 3 0 0 i- ETH IPV4 UDP VXLAN ETH VLAN => QUEUE 4861 4 0 0 i- ETH IPV4 UDP VXLAN ETH => QUEUE 4862 4863Sample VXLAN encapsulation rule 4864~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4865 4866VXLAN encapsulation outer layer has default value pre-configured in testpmd 4867source code, those can be changed by using the following commands 4868 4869IPv4 VXLAN outer header:: 4870 4871 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1 4872 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4873 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4874 queue index 0 / end 4875 4876 testpmd> set vxlan-with-vlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 4877 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11 4878 eth-dst 22:22:22:22:22:22 4879 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4880 queue index 0 / end 4881 4882 testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-tos 0 4883 ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 4884 eth-dst 22:22:22:22:22:22 4885 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4886 queue index 0 / end 4887 4888IPv6 VXLAN outer header:: 4889 4890 testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src ::1 4891 ip-dst ::2222 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4892 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4893 queue index 0 / end 4894 4895 testpmd> set vxlan-with-vlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 4896 ip-src ::1 ip-dst ::2222 vlan-tci 34 eth-src 11:11:11:11:11:11 4897 eth-dst 22:22:22:22:22:22 4898 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4899 queue index 0 / end 4900 4901 testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4 4902 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11 4903 eth-dst 22:22:22:22:22:22 4904 testpmd> flow create 0 ingress pattern end actions vxlan_encap / 4905 queue index 0 / end 4906 4907Sample NVGRE encapsulation rule 4908~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4909 4910NVGRE encapsulation outer layer has default value pre-configured in testpmd 4911source code, those can be changed by using the following commands 4912 4913IPv4 NVGRE outer header:: 4914 4915 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1 4916 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4917 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4918 queue index 0 / end 4919 4920 testpmd> set nvgre-with-vlan ip-version ipv4 tni 4 ip-src 127.0.0.1 4921 ip-dst 128.0.0.1 vlan-tci 34 eth-src 11:11:11:11:11:11 4922 eth-dst 22:22:22:22:22:22 4923 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4924 queue index 0 / end 4925 4926IPv6 NVGRE outer header:: 4927 4928 testpmd> set nvgre ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222 4929 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4930 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4931 queue index 0 / end 4932 4933 testpmd> set nvgre-with-vlan ip-version ipv6 tni 4 ip-src ::1 ip-dst ::2222 4934 vlan-tci 34 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4935 testpmd> flow create 0 ingress pattern end actions nvgre_encap / 4936 queue index 0 / end 4937 4938Sample L2 encapsulation rule 4939~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4940 4941L2 encapsulation has default value pre-configured in testpmd 4942source code, those can be changed by using the following commands 4943 4944L2 header:: 4945 4946 testpmd> set l2_encap ip-version ipv4 4947 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4948 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions 4949 mplsoudp_decap / l2_encap / end 4950 4951L2 with VXLAN header:: 4952 4953 testpmd> set l2_encap-with-vlan ip-version ipv4 vlan-tci 34 4954 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4955 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions 4956 mplsoudp_decap / l2_encap / end 4957 4958Sample L2 decapsulation rule 4959~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4960 4961L2 decapsulation has default value pre-configured in testpmd 4962source code, those can be changed by using the following commands 4963 4964L2 header:: 4965 4966 testpmd> set l2_decap 4967 testpmd> flow create 0 egress pattern eth / end actions l2_decap / mplsoudp_encap / 4968 queue index 0 / end 4969 4970L2 with VXLAN header:: 4971 4972 testpmd> set l2_encap-with-vlan 4973 testpmd> flow create 0 egress pattern eth / end actions l2_encap / mplsoudp_encap / 4974 queue index 0 / end 4975 4976Sample MPLSoGRE encapsulation rule 4977~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4978 4979MPLSoGRE encapsulation outer layer has default value pre-configured in testpmd 4980source code, those can be changed by using the following commands 4981 4982IPv4 MPLSoGRE outer header:: 4983 4984 testpmd> set mplsogre_encap ip-version ipv4 label 4 4985 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 4986 eth-dst 22:22:22:22:22:22 4987 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4988 mplsogre_encap / end 4989 4990IPv4 MPLSoGRE with VLAN outer header:: 4991 4992 testpmd> set mplsogre_encap-with-vlan ip-version ipv4 label 4 4993 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 4994 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 4995 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 4996 mplsogre_encap / end 4997 4998IPv6 MPLSoGRE outer header:: 4999 5000 testpmd> set mplsogre_encap ip-version ipv6 mask 4 5001 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11 5002 eth-dst 22:22:22:22:22:22 5003 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 5004 mplsogre_encap / end 5005 5006IPv6 MPLSoGRE with VLAN outer header:: 5007 5008 testpmd> set mplsogre_encap-with-vlan ip-version ipv6 mask 4 5009 ip-src ::1 ip-dst ::2222 vlan-tci 34 5010 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 5011 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 5012 mplsogre_encap / end 5013 5014Sample MPLSoGRE decapsulation rule 5015~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5016 5017MPLSoGRE decapsulation outer layer has default value pre-configured in testpmd 5018source code, those can be changed by using the following commands 5019 5020IPv4 MPLSoGRE outer header:: 5021 5022 testpmd> set mplsogre_decap ip-version ipv4 5023 testpmd> flow create 0 ingress pattern eth / ipv4 / gre / mpls / end actions 5024 mplsogre_decap / l2_encap / end 5025 5026IPv4 MPLSoGRE with VLAN outer header:: 5027 5028 testpmd> set mplsogre_decap-with-vlan ip-version ipv4 5029 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / gre / mpls / end 5030 actions mplsogre_decap / l2_encap / end 5031 5032IPv6 MPLSoGRE outer header:: 5033 5034 testpmd> set mplsogre_decap ip-version ipv6 5035 testpmd> flow create 0 ingress pattern eth / ipv6 / gre / mpls / end 5036 actions mplsogre_decap / l2_encap / end 5037 5038IPv6 MPLSoGRE with VLAN outer header:: 5039 5040 testpmd> set mplsogre_decap-with-vlan ip-version ipv6 5041 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / gre / mpls / end 5042 actions mplsogre_decap / l2_encap / end 5043 5044Sample MPLSoUDP encapsulation rule 5045~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5046 5047MPLSoUDP encapsulation outer layer has default value pre-configured in testpmd 5048source code, those can be changed by using the following commands 5049 5050IPv4 MPLSoUDP outer header:: 5051 5052 testpmd> set mplsoudp_encap ip-version ipv4 label 4 udp-src 5 udp-dst 10 5053 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 5054 eth-dst 22:22:22:22:22:22 5055 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 5056 mplsoudp_encap / end 5057 5058IPv4 MPLSoUDP with VLAN outer header:: 5059 5060 testpmd> set mplsoudp_encap-with-vlan ip-version ipv4 label 4 udp-src 5 5061 udp-dst 10 ip-src 127.0.0.1 ip-dst 128.0.0.1 vlan-tci 34 5062 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 5063 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 5064 mplsoudp_encap / end 5065 5066IPv6 MPLSoUDP outer header:: 5067 5068 testpmd> set mplsoudp_encap ip-version ipv6 mask 4 udp-src 5 udp-dst 10 5069 ip-src ::1 ip-dst ::2222 eth-src 11:11:11:11:11:11 5070 eth-dst 22:22:22:22:22:22 5071 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 5072 mplsoudp_encap / end 5073 5074IPv6 MPLSoUDP with VLAN outer header:: 5075 5076 testpmd> set mplsoudp_encap-with-vlan ip-version ipv6 mask 4 udp-src 5 5077 udp-dst 10 ip-src ::1 ip-dst ::2222 vlan-tci 34 5078 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 5079 testpmd> flow create 0 egress pattern eth / end actions l2_decap / 5080 mplsoudp_encap / end 5081 5082Sample MPLSoUDP decapsulation rule 5083~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5084 5085MPLSoUDP decapsulation outer layer has default value pre-configured in testpmd 5086source code, those can be changed by using the following commands 5087 5088IPv4 MPLSoUDP outer header:: 5089 5090 testpmd> set mplsoudp_decap ip-version ipv4 5091 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / mpls / end actions 5092 mplsoudp_decap / l2_encap / end 5093 5094IPv4 MPLSoUDP with VLAN outer header:: 5095 5096 testpmd> set mplsoudp_decap-with-vlan ip-version ipv4 5097 testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / mpls / end 5098 actions mplsoudp_decap / l2_encap / end 5099 5100IPv6 MPLSoUDP outer header:: 5101 5102 testpmd> set mplsoudp_decap ip-version ipv6 5103 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / mpls / end 5104 actions mplsoudp_decap / l2_encap / end 5105 5106IPv6 MPLSoUDP with VLAN outer header:: 5107 5108 testpmd> set mplsoudp_decap-with-vlan ip-version ipv6 5109 testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / mpls / end 5110 actions mplsoudp_decap / l2_encap / end 5111 5112Sample Raw encapsulation rule 5113~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5114 5115Raw encapsulation configuration can be set by the following commands 5116 5117Encapsulating VxLAN:: 5118 5119 testpmd> set raw_encap 4 eth src is 10:11:22:33:44:55 / vlan tci is 1 5120 inner_type is 0x0800 / ipv4 / udp dst is 4789 / vxlan vni 5121 is 2 / end_set 5122 testpmd> flow create 0 egress pattern eth / ipv4 / end actions 5123 raw_encap index 4 / end 5124 5125Sample Raw decapsulation rule 5126~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5127 5128Raw decapsulation configuration can be set by the following commands 5129 5130Decapsulating VxLAN:: 5131 5132 testpmd> set raw_decap eth / ipv4 / udp / vxlan / end_set 5133 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / 5134 end actions raw_decap / queue index 0 / end 5135 5136Sample ESP rules 5137~~~~~~~~~~~~~~~~ 5138 5139ESP rules can be created by the following commands:: 5140 5141 testpmd> flow create 0 ingress pattern eth / ipv4 / esp spi is 1 / end actions 5142 queue index 3 / end 5143 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp spi is 1 / end 5144 actions queue index 3 / end 5145 testpmd> flow create 0 ingress pattern eth / ipv6 / esp spi is 1 / end actions 5146 queue index 3 / end 5147 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp spi is 1 / end 5148 actions queue index 3 / end 5149 5150Sample AH rules 5151~~~~~~~~~~~~~~~~ 5152 5153AH rules can be created by the following commands:: 5154 5155 testpmd> flow create 0 ingress pattern eth / ipv4 / ah spi is 1 / end actions 5156 queue index 3 / end 5157 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / ah spi is 1 / end 5158 actions queue index 3 / end 5159 testpmd> flow create 0 ingress pattern eth / ipv6 / ah spi is 1 / end actions 5160 queue index 3 / end 5161 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / ah spi is 1 / end 5162 actions queue index 3 / end 5163 5164Sample PFCP rules 5165~~~~~~~~~~~~~~~~~ 5166 5167PFCP rules can be created by the following commands(s_field need to be 1 5168if seid is set):: 5169 5170 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 0 / end 5171 actions queue index 3 / end 5172 testpmd> flow create 0 ingress pattern eth / ipv4 / pfcp s_field is 1 5173 seid is 1 / end actions queue index 3 / end 5174 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 0 / end 5175 actions queue index 3 / end 5176 testpmd> flow create 0 ingress pattern eth / ipv6 / pfcp s_field is 1 5177 seid is 1 / end actions queue index 3 / end 5178 5179Sample Sampling/Mirroring rules 5180~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5181 5182Sample/Mirroring rules can be set by the following commands 5183 5184NIC-RX Sampling rule, the matched ingress packets and sent to the queue 1, 5185and 50% packets are duplicated and marked with 0x1234 and sent to queue 0. 5186 5187:: 5188 5189 testpmd> set sample_actions 0 mark id 0x1234 / queue index 0 / end 5190 testpmd> flow create 0 ingress group 1 pattern eth / end actions 5191 sample ratio 2 index 0 / queue index 1 / end 5192 5193Mirroring rule with port representors (with "transfer" attribute), the matched 5194ingress packets with encapsulation header are sent to port id 0, and also 5195mirrored the packets and sent to port id 2. 5196 5197:: 5198 5199 testpmd> set sample_actions 0 port_id id 2 / end 5200 testpmd> flow create 1 ingress transfer pattern eth / end actions 5201 sample ratio 1 index 0 / raw_encap / port_id id 0 / end 5202 5203Mirroring rule with port representors (with "transfer" attribute), the matched 5204ingress packets are sent to port id 2, and also mirrored the packets with 5205encapsulation header and sent to port id 0. 5206 5207:: 5208 5209 testpmd> set sample_actions 0 raw_encap / port_id id 0 / end 5210 testpmd> flow create 0 ingress transfer pattern eth / end actions 5211 sample ratio 1 index 0 / port_id id 2 / end 5212 5213Mirroring rule with port representors (with "transfer" attribute), the matched 5214ingress packets are sent to port id 2, and also mirrored the packets with 5215VXLAN encapsulation header and sent to port id 0. 5216 5217:: 5218 5219 testpmd> set vxlan ip-version ipv4 vni 4 udp-src 4 udp-dst 4 ip-src 127.0.0.1 5220 ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 5221 testpmd> set sample_actions 0 vxlan_encap / port_id id 0 / end 5222 testpmd> flow create 0 ingress transfer pattern eth / end actions 5223 sample ratio 1 index 0 / port_id id 2 / end 5224 5225Mirroring rule with port representors (with "transfer" attribute), the matched 5226ingress packets are sent to port id 2, and also mirrored the packets with 5227NVGRE encapsulation header and sent to port id 0. 5228 5229:: 5230 5231 testpmd> set nvgre ip-version ipv4 tni 4 ip-src 127.0.0.1 ip-dst 128.0.0.1 5232 eth-src 11:11:11:11:11:11 eth-dst 22:22:22:22:22:22 5233 testpmd> set sample_actions 0 nvgre_encap / port_id id 0 / end 5234 testpmd> flow create 0 ingress transfer pattern eth / end actions 5235 sample ratio 1 index 0 / port_id id 2 / end 5236 5237Sample integrity rules 5238~~~~~~~~~~~~~~~~~~~~~~ 5239 5240Integrity rules can be created by the following commands: 5241 5242Integrity rule that forwards valid TCP packets to group 1. 5243TCP packet integrity is matched with the ``l4_ok`` bit 3. 5244 5245:: 5246 5247 testpmd> flow create 0 ingress 5248 pattern eth / ipv4 / tcp / integrity value mask 8 value spec 8 / end 5249 actions jump group 1 / end 5250 5251Integrity rule that forwards invalid packets to application. 5252General packet integrity is matched with the ``packet_ok`` bit 0. 5253 5254:: 5255 5256 testpmd> flow create 0 ingress pattern integrity value mask 1 value spec 0 / end actions queue index 0 / end 5257 5258Sample conntrack rules 5259~~~~~~~~~~~~~~~~~~~~~~ 5260 5261Conntrack rules can be set by the following commands 5262 5263Need to construct the connection context with provided information. 5264In the first table, create a flow rule by using conntrack action and jump to 5265the next table. In the next table, create a rule to check the state. 5266 5267:: 5268 5269 testpmd> set conntrack com peer 1 is_orig 1 enable 1 live 1 sack 1 cack 0 5270 last_dir 0 liberal 0 state 1 max_ack_win 7 r_lim 5 last_win 510 5271 last_seq 2632987379 last_ack 2532480967 last_end 2632987379 5272 last_index 0x8 5273 testpmd> set conntrack orig scale 7 fin 0 acked 1 unack_data 0 5274 sent_end 2632987379 reply_end 2633016339 max_win 28960 5275 max_ack 2632987379 5276 testpmd> set conntrack rply scale 7 fin 0 acked 1 unack_data 0 5277 sent_end 2532480967 reply_end 2532546247 max_win 65280 5278 max_ack 2532480967 5279 testpmd> flow indirect_action 0 create ingress action conntrack / end 5280 testpmd> flow create 0 group 3 ingress pattern eth / ipv4 / tcp / end actions indirect 0 / jump group 5 / end 5281 testpmd> flow create 0 group 5 ingress pattern eth / ipv4 / tcp / conntrack is 1 / end actions queue index 5 / end 5282 5283Construct the conntrack again with only "is_orig" set to 0 (other fields are 5284ignored), then use "update" interface to update the direction. Create flow 5285rules like above for the peer port. 5286 5287:: 5288 5289 testpmd> flow indirect_action 0 update 0 action conntrack_update dir / end 5290 5291Sample meter with policy rules 5292~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5293 5294Meter with policy rules can be created by the following commands: 5295 5296Need to create policy first and actions are set for green/yellow/red colors. 5297Create meter with policy id. Create flow with meter id. 5298 5299Example for policy with meter color action. The purpose is to color the packet 5300to reflect the meter color result. 5301The meter policy action list: ``green -> green, yellow -> yellow, red -> red``. 5302 5303:: 5304 5305 testpmd> add port meter profile srtcm_rfc2697 0 13 21504 2688 0 0 5306 testpmd> add port meter policy 0 1 g_actions color type green / end y_actions color type yellow / end 5307 r_actions color type red / end 5308 testpmd> create port meter 0 1 13 1 yes 0xffff 0 0 5309 testpmd> flow create 0 priority 0 ingress group 1 pattern eth / end actions meter mtr_id 1 / end 5310 5311Sample L2TPv2 RSS rules 5312~~~~~~~~~~~~~~~~~~~~~~~ 5313 5314L2TPv2 RSS rules can be created by the following commands:: 5315 5316 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type control 5317 / end actions rss types l2tpv2 end queues end / end 5318 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / end 5319 actions rss types eth l2-src-only end queues end / end 5320 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / end 5321 actions rss types l2tpv2 end queues end / end 5322 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4 5323 / end actions rss types ipv4 end queues end / end 5324 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv6 5325 / udp / end actions rss types ipv6-udp end queues end / end 5326 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 / ppp / ipv4 5327 / tcp / end actions rss types ipv4-tcp end queues end / end 5328 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 / ppp / ipv6 5329 / end actions rss types ipv6 end queues end / end 5330 5331Sample L2TPv2 FDIR rules 5332~~~~~~~~~~~~~~~~~~~~~~~~ 5333 5334L2TPv2 FDIR rules can be created by the following commands:: 5335 5336 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type control 5337 session_id is 0x1111 / end actions queue index 3 / end 5338 testpmd> flow create 0 ingress pattern eth src is 00:00:00:00:00:01 / ipv4 5339 / udp / l2tpv2 type data / end actions queue index 3 / end 5340 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 type data 5341 session_id is 0x1111 / ppp / end actions queue index 3 / end 5342 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4 5343 src is 10.0.0.1 / end actions queue index 3 / end 5344 testpmd> flow create 0 ingress pattern eth / ipv6 / udp / l2tpv2 / ppp / ipv6 5345 dst is ABAB:910B:6666:3457:8295:3333:1800:2929 / end actions queue index 3 / end 5346 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4 5347 / udp src is 22 / end actions queue index 3 / end 5348 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / l2tpv2 / ppp / ipv4 5349 / tcp dst is 23 / end actions queue index 3 / end 5350 5351Sample RAW rule 5352~~~~~~~~~~~~~~~ 5353 5354A RAW rule can be created as following using ``pattern_hex`` key and mask. 5355 5356:: 5357 5358 testpmd> flow create 0 group 0 priority 1 ingress pattern raw relative is 0 search is 0 offset 5359 is 0 limit is 0 pattern_hex spec 00000000000000000000000000000000000000000000000000000a0a0a0a 5360 pattern_hex mask 0000000000000000000000000000000000000000000000000000ffffffff / end actions 5361 queue index 4 / end 5362 5363BPF Functions 5364-------------- 5365 5366The following sections show functions to load/unload eBPF based filters. 5367 5368bpf-load 5369~~~~~~~~ 5370 5371Load an eBPF program as a callback for particular RX/TX queue:: 5372 5373 testpmd> bpf-load rx|tx (portid) (queueid) (load-flags) (bpf-prog-filename) 5374 5375The available load-flags are: 5376 5377* ``J``: use JIT generated native code, otherwise BPF interpreter will be used. 5378 5379* ``M``: assume input parameter is a pointer to rte_mbuf, otherwise assume it is a pointer to first segment's data. 5380 5381* ``-``: none. 5382 5383.. note:: 5384 5385 You'll need clang v3.7 or above to build bpf program you'd like to load 5386 5387For example: 5388 5389.. code-block:: console 5390 5391 cd examples/bpf 5392 clang -O2 -target bpf -c t1.c 5393 5394Then to load (and JIT compile) t1.o at RX queue 0, port 1: 5395 5396.. code-block:: console 5397 5398 testpmd> bpf-load rx 1 0 J ./dpdk.org/examples/bpf/t1.o 5399 5400To load (not JITed) t1.o at TX queue 0, port 0: 5401 5402.. code-block:: console 5403 5404 testpmd> bpf-load tx 0 0 - ./dpdk.org/examples/bpf/t1.o 5405 5406bpf-unload 5407~~~~~~~~~~ 5408 5409Unload previously loaded eBPF program for particular RX/TX queue:: 5410 5411 testpmd> bpf-unload rx|tx (portid) (queueid) 5412 5413For example to unload BPF filter from TX queue 0, port 0: 5414 5415.. code-block:: console 5416 5417 testpmd> bpf-unload tx 0 0 5418 5419Flex Item Functions 5420------------------- 5421 5422The following sections show functions that configure and create flex item object, 5423create flex pattern and use it in a flow rule. 5424The commands will use 20 bytes IPv4 header for examples: 5425 5426:: 5427 5428 0 1 2 3 5429 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 5430 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5431 | ver | IHL | TOS | length | +0 5432 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5433 | identification | flg | frag. offset | +4 5434 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5435 | TTL | protocol | checksum | +8 5436 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5437 | source IP address | +12 5438 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5439 | destination IP address | +16 5440 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 5441 5442 5443Create flex item 5444~~~~~~~~~~~~~~~~ 5445 5446Flex item object is created by PMD according to a new header configuration. The 5447header configuration is compiled by the testpmd and stored in 5448``rte_flow_item_flex_conf`` type variable. 5449 5450:: 5451 5452 # flow flex_item create <port> <flex id> <configuration file> 5453 testpmd> flow flex_item init 0 3 ipv4_flex_config.json 5454 port-0: created flex item #3 5455 5456Flex item configuration is kept in external JSON file. 5457It describes the following header elements: 5458 5459**New header length.** 5460 5461Specify whether the new header has fixed or variable length and the basic/minimal 5462header length value. 5463 5464If header length is not fixed, header location with a value that completes header 5465length calculation and scale/offset function must be added. 5466 5467Scale function depends on port hardware. 5468 5469**Next protocol.** 5470 5471Describes location in the new header that specify following network header type. 5472 5473**Flow match samples.** 5474 5475Describes locations in the new header that will be used in flow rules. 5476 5477Number of flow samples and sample maximal length depend of port hardware. 5478 5479**Input trigger.** 5480 5481Describes preceding network header configuration. 5482 5483**Output trigger.** 5484 5485Describes conditions that trigger transfer to following network header 5486 5487.. code-block:: json 5488 5489 { 5490 "next_header": { "field_mode": "FIELD_MODE_FIXED", "field_size": 20}, 5491 "next_protocol": {"field_size": 8, "field_base": 72}, 5492 "sample_data": [ 5493 { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 0}, 5494 { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 32}, 5495 { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 64}, 5496 { "field_mode": "FIELD_MODE_FIXED", "field_size": 32, "field_base": 96} 5497 ], 5498 "input_link": [ 5499 {"item": "eth type is 0x0800"}, 5500 {"item": "vlan inner_type is 0x0800"} 5501 ], 5502 "output_link": [ 5503 {"item": "udp", "next": 17}, 5504 {"item": "tcp", "next": 6}, 5505 {"item": "icmp", "next": 1} 5506 ] 5507 } 5508 5509 5510Flex pattern and flow rules 5511~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5512 5513Flex pattern describe parts of network header that will trigger flex flow item hit in a flow rule. 5514Flex pattern directly related to flex item samples configuration. 5515Flex pattern can be shared between ports. 5516 5517**Flex pattern and flow rule to match IPv4 version and 20 bytes length** 5518 5519:: 5520 5521 # set flex_pattern <pattern_id> is <hex bytes sequence> 5522 testpmd> flow flex_item pattern 5 is 45FF 5523 created pattern #5 5524 5525 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 5526 Flow rule #0 created 5527 5528**Flex pattern and flow rule to match packets with source address 1.2.3.4** 5529 5530:: 5531 5532 testpmd> flow flex_item pattern 2 spec 45000000000000000000000001020304 mask FF0000000000000000000000FFFFFFFF 5533 created pattern #2 5534 5535 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 5536 Flow rule #0 created 5537