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