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