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