1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2014-2018 Chelsio Communications. 3 All rights reserved. 4 5CXGBE Poll Mode Driver 6====================== 7 8The CXGBE PMD (**librte_net_cxgbe**) provides poll mode driver support 9for **Chelsio Terminator** 10/25/40/100 Gbps family of adapters. CXGBE PMD 10has support for the latest Linux and FreeBSD operating systems. 11 12CXGBEVF PMD provides poll mode driver support for SR-IOV Virtual functions 13and has support for the latest Linux operating systems. 14 15More information can be found at `Chelsio Communications Official Website 16<http://www.chelsio.com>`_. 17 18Features 19-------- 20 21CXGBE and CXGBEVF PMD has support for: 22 23- Multiple queues for TX and RX 24- Receiver Side Steering (RSS) 25 Receiver Side Steering (RSS) on IPv4, IPv6, IPv4-TCP/UDP, IPv6-TCP/UDP. 26 For 4-tuple, enabling 'RSS on TCP' and 'RSS on TCP + UDP' is supported. 27- VLAN filtering 28- Checksum offload 29- Promiscuous mode 30- All multicast mode 31- Port hardware statistics 32- Jumbo frames 33- Flow API - Support for both Wildcard (LE-TCAM) and Exact (HASH) match filters. 34 35Limitations 36----------- 37 38The Chelsio Terminator series of devices provide two/four ports but 39expose a single PCI bus address, thus, librte_net_cxgbe registers 40itself as a PCI driver that allocates one Ethernet device per detected 41port. 42 43For this reason, one cannot allow/block a single port without 44allowing/blocking the other ports on the same device. 45 46.. _t5-nics: 47 48Supported Chelsio T5 NICs 49------------------------- 50 51- 1G NICs: T502-BT 52- 10G NICs: T520-BT, T520-CR, T520-LL-CR, T520-SO-CR, T540-CR 53- 40G NICs: T580-CR, T580-LP-CR, T580-SO-CR 54- Other T5 NICs: T522-CR 55 56.. _t6-nics: 57 58Supported Chelsio T6 NICs 59------------------------- 60 61- 25G NICs: T6425-CR, T6225-CR, T6225-LL-CR, T6225-SO-CR 62- 100G NICs: T62100-CR, T62100-LP-CR, T62100-SO-CR 63 64Supported SR-IOV Chelsio NICs 65----------------------------- 66 67SR-IOV virtual functions are supported on all the Chelsio NICs listed 68in :ref:`t5-nics` and :ref:`t6-nics`. 69 70Prerequisites 71------------- 72 73- Requires firmware version **1.25.4.0** and higher. Visit 74 `Chelsio Download Center <http://service.chelsio.com>`_ to get latest firmware 75 bundled with the latest Chelsio Unified Wire package. 76 77 For Linux, installing and loading the latest cxgb4 kernel driver from the 78 Chelsio Unified Wire package should get you the latest firmware. More 79 information can be obtained from the User Guide that is bundled with the 80 Chelsio Unified Wire package. 81 82 For FreeBSD, the latest firmware obtained from the Chelsio Unified Wire 83 package must be manually flashed via cxgbetool available in FreeBSD source 84 repository. 85 86 Instructions on how to manually flash the firmware are given in section 87 :ref:`linux-installation` for Linux and section :ref:`freebsd-installation` 88 for FreeBSD. 89 90 91Runtime Options 92--------------- 93 94The following ``devargs`` options can be enabled at runtime. They must 95be passed as part of EAL arguments. For example, 96 97.. code-block:: console 98 99 dpdk-testpmd -a 02:00.4,keep_ovlan=1 -- -i 100 101Common Runtime Options 102~~~~~~~~~~~~~~~~~~~~~~ 103 104- ``keep_ovlan`` (default **0**) 105 106 Toggle behavior to keep/strip outer VLAN in Q-in-Q packets. If 107 enabled, the outer VLAN tag is preserved in Q-in-Q packets. Otherwise, 108 the outer VLAN tag is stripped in Q-in-Q packets. 109 110- ``tx_mode_latency`` (default **0**) 111 112 When set to 1, Tx doesn't wait for max number of packets to get 113 coalesced and sends the packets immediately at the end of the 114 current Tx burst. When set to 0, Tx waits across multiple Tx bursts 115 until the max number of packets have been coalesced. In this case, 116 Tx only sends the coalesced packets to hardware once the max 117 coalesce limit has been reached. 118 119CXGBE VF Only Runtime Options 120~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 121 122- ``force_link_up`` (default **0**) 123 124 When set to 1, CXGBEVF PMD always forces link as up for all VFs on 125 underlying Chelsio NICs. This enables multiple VFs on the same NIC 126 to send traffic to each other even when the physical link is down. 127 128CXGBE PF Only Runtime Options 129~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 130 131- ``filtermode`` (default **0**) 132 133 Apart from the 4-tuple (IP src/dst addresses and TCP/UDP src/dst port 134 addresses), there are only 40-bits available to match other fields in 135 packet headers. So, ``filtermode`` devarg allows user to dynamically 136 select a 40-bit supported match field combination for LETCAM (wildcard) 137 filters. 138 139 Default value of **0** makes driver pick the combination configured in 140 the firmware configuration file on the adapter. 141 142 The supported flags and their corresponding values are shown in table below. 143 These flags can be OR'd to create 1 of the multiple supported combinations 144 for LETCAM filters. 145 146 ================== ====== 147 FLAG VALUE 148 ================== ====== 149 Physical Port 0x1 150 PFVF 0x2 151 Destination MAC 0x4 152 Ethertype 0x8 153 Inner VLAN 0x10 154 Outer VLAN 0x20 155 IP TOS 0x40 156 IP Protocol 0x80 157 ================== ====== 158 159 The supported ``filtermode`` combinations and their corresponding OR'd 160 values are shown in table below. 161 162 +-----------------------------------+-----------+ 163 | FILTERMODE COMBINATIONS | VALUE | 164 +===================================+===========+ 165 | Protocol, TOS, Outer VLAN, Port | 0xE1 | 166 +-----------------------------------+-----------+ 167 | Protocol, TOS, Outer VLAN | 0xE0 | 168 +-----------------------------------+-----------+ 169 | Protocol, TOS, Inner VLAN, Port | 0xD1 | 170 +-----------------------------------+-----------+ 171 | Protocol, TOS, Inner VLAN | 0xD0 | 172 +-----------------------------------+-----------+ 173 | Protocol, TOS, PFVF, Port | 0xC3 | 174 +-----------------------------------+-----------+ 175 | Protocol, TOS, PFVF | 0xC2 | 176 +-----------------------------------+-----------+ 177 | Protocol, TOS, Port | 0xC1 | 178 +-----------------------------------+-----------+ 179 | Protocol, TOS | 0xC0 | 180 +-----------------------------------+-----------+ 181 | Protocol, Outer VLAN, Port | 0xA1 | 182 +-----------------------------------+-----------+ 183 | Protocol, Outer VLAN | 0xA0 | 184 +-----------------------------------+-----------+ 185 | Protocol, Inner VLAN, Port | 0x91 | 186 +-----------------------------------+-----------+ 187 | Protocol, Inner VLAN | 0x90 | 188 +-----------------------------------+-----------+ 189 | Protocol, Ethertype, DstMAC, Port | 0x8D | 190 +-----------------------------------+-----------+ 191 | Protocol, Ethertype, DstMAC | 0x8C | 192 +-----------------------------------+-----------+ 193 | Protocol, Ethertype, Port | 0x89 | 194 +-----------------------------------+-----------+ 195 | Protocol, Ethertype | 0x88 | 196 +-----------------------------------+-----------+ 197 | Protocol, DstMAC, PFVF, Port | 0x87 | 198 +-----------------------------------+-----------+ 199 | Protocol, DstMAC, PFVF | 0x86 | 200 +-----------------------------------+-----------+ 201 | Protocol, DstMAC, Port | 0x85 | 202 +-----------------------------------+-----------+ 203 | Protocol, DstMAC | 0x84 | 204 +-----------------------------------+-----------+ 205 | Protocol, PFVF, Port | 0x83 | 206 +-----------------------------------+-----------+ 207 | Protocol, PFVF | 0x82 | 208 +-----------------------------------+-----------+ 209 | Protocol, Port | 0x81 | 210 +-----------------------------------+-----------+ 211 | Protocol | 0x80 | 212 +-----------------------------------+-----------+ 213 | TOS, Outer VLAN, Port | 0x61 | 214 +-----------------------------------+-----------+ 215 | TOS, Outer VLAN | 0x60 | 216 +-----------------------------------+-----------+ 217 | TOS, Inner VLAN, Port | 0x51 | 218 +-----------------------------------+-----------+ 219 | TOS, Inner VLAN | 0x50 | 220 +-----------------------------------+-----------+ 221 | TOS, Ethertype, DstMAC, Port | 0x4D | 222 +-----------------------------------+-----------+ 223 | TOS, Ethertype, DstMAC | 0x4C | 224 +-----------------------------------+-----------+ 225 | TOS, Ethertype, Port | 0x49 | 226 +-----------------------------------+-----------+ 227 | TOS, Ethertype | 0x48 | 228 +-----------------------------------+-----------+ 229 | TOS, DstMAC, PFVF, Port | 0x47 | 230 +-----------------------------------+-----------+ 231 | TOS, DstMAC, PFVF | 0x46 | 232 +-----------------------------------+-----------+ 233 | TOS, DstMAC, Port | 0x45 | 234 +-----------------------------------+-----------+ 235 | TOS, DstMAC | 0x44 | 236 +-----------------------------------+-----------+ 237 | TOS, PFVF, Port | 0x43 | 238 +-----------------------------------+-----------+ 239 | TOS, PFVF | 0x42 | 240 +-----------------------------------+-----------+ 241 | TOS, Port | 0x41 | 242 +-----------------------------------+-----------+ 243 | TOS | 0x40 | 244 +-----------------------------------+-----------+ 245 | Outer VLAN, Inner VLAN, Port | 0x31 | 246 +-----------------------------------+-----------+ 247 | Outer VLAN, Ethertype, Port | 0x29 | 248 +-----------------------------------+-----------+ 249 | Outer VLAN, Ethertype | 0x28 | 250 +-----------------------------------+-----------+ 251 | Outer VLAN, DstMAC, Port | 0x25 | 252 +-----------------------------------+-----------+ 253 | Outer VLAN, DstMAC | 0x24 | 254 +-----------------------------------+-----------+ 255 | Outer VLAN, Port | 0x21 | 256 +-----------------------------------+-----------+ 257 | Outer VLAN | 0x20 | 258 +-----------------------------------+-----------+ 259 | Inner VLAN, Ethertype, Port | 0x19 | 260 +-----------------------------------+-----------+ 261 | Inner VLAN, Ethertype | 0x18 | 262 +-----------------------------------+-----------+ 263 | Inner VLAN, DstMAC, Port | 0x15 | 264 +-----------------------------------+-----------+ 265 | Inner VLAN, DstMAC | 0x14 | 266 +-----------------------------------+-----------+ 267 | Inner VLAN, Port | 0x11 | 268 +-----------------------------------+-----------+ 269 | Inner VLAN | 0x10 | 270 +-----------------------------------+-----------+ 271 | Ethertype, DstMAC, Port | 0xD | 272 +-----------------------------------+-----------+ 273 | Ethertype, DstMAC | 0xC | 274 +-----------------------------------+-----------+ 275 | Ethertype, PFVF, Port | 0xB | 276 +-----------------------------------+-----------+ 277 | Ethertype, PFVF | 0xA | 278 +-----------------------------------+-----------+ 279 | Ethertype, Port | 0x9 | 280 +-----------------------------------+-----------+ 281 | Ethertype | 0x8 | 282 +-----------------------------------+-----------+ 283 | DstMAC, PFVF, Port | 0x7 | 284 +-----------------------------------+-----------+ 285 | DstMAC, PFVF | 0x6 | 286 +-----------------------------------+-----------+ 287 | DstMAC, Port | 0x5 | 288 +-----------------------------------+-----------+ 289 | Destination MAC | 0x4 | 290 +-----------------------------------+-----------+ 291 | PFVF, Port | 0x3 | 292 +-----------------------------------+-----------+ 293 | PFVF | 0x2 | 294 +-----------------------------------+-----------+ 295 | Physical Port | 0x1 + 296 +-----------------------------------+-----------+ 297 298 For example, to enable matching ``ethertype`` field in Ethernet 299 header, and ``protocol`` field in IPv4 header, the ``filtermode`` 300 combination must be given as: 301 302 .. code-block:: console 303 304 dpdk-testpmd -a 02:00.4,filtermode=0x88 -- -i 305 306- ``filtermask`` (default **0**) 307 308 ``filtermask`` devarg works similar to ``filtermode``, but is used 309 to configure a filter mode combination for HASH (exact-match) filters. 310 311 .. note:: 312 313 The combination chosen for ``filtermask`` devarg **must be a subset** of 314 the combination chosen for ``filtermode`` devarg. 315 316 Default value of **0** makes driver pick the combination configured in 317 the firmware configuration file on the adapter. 318 319 Note that the filter rule will only be inserted in HASH region, if the 320 rule contains **all** the fields specified in the ``filtermask`` combination. 321 Otherwise, the filter rule will get inserted in LETCAM region. 322 323 The same combination list explained in the tables in ``filtermode`` devarg 324 section earlier applies for ``filtermask`` devarg, as well. 325 326 For example, to enable matching only protocol field in IPv4 header, the 327 ``filtermask`` combination must be given as: 328 329 .. code-block:: console 330 331 dpdk-testpmd -a 02:00.4,filtermode=0x88,filtermask=0x80 -- -i 332 333.. _driver-compilation: 334 335Driver compilation and testing 336------------------------------ 337 338Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 339for details. 340 341Linux 342----- 343 344.. _linux-installation: 345 346Linux Installation 347~~~~~~~~~~~~~~~~~~ 348 349Steps to manually install the latest firmware from the downloaded Chelsio 350Unified Wire package for Linux operating system are as follows: 351 352#. Load the kernel module: 353 354 .. code-block:: console 355 356 modprobe cxgb4 357 358#. Use ifconfig to get the interface name assigned to Chelsio card: 359 360 .. code-block:: console 361 362 ifconfig -a | grep "00:07:43" 363 364 Example output: 365 366 .. code-block:: console 367 368 p1p1 Link encap:Ethernet HWaddr 00:07:43:2D:EA:C0 369 p1p2 Link encap:Ethernet HWaddr 00:07:43:2D:EA:C8 370 371#. Install cxgbtool: 372 373 .. code-block:: console 374 375 cd <path_to_uwire>/tools/cxgbtool 376 make install 377 378#. Use cxgbtool to load the firmware config file onto the card: 379 380 .. code-block:: console 381 382 cxgbtool p1p1 loadcfg <path_to_uwire>/src/network/firmware/t5-config.txt 383 384#. Use cxgbtool to load the firmware image onto the card: 385 386 .. code-block:: console 387 388 cxgbtool p1p1 loadfw <path_to_uwire>/src/network/firmware/t5fw-*.bin 389 390#. Unload and reload the kernel module: 391 392 .. code-block:: console 393 394 modprobe -r cxgb4 395 modprobe cxgb4 396 397#. Verify with ethtool: 398 399 .. code-block:: console 400 401 ethtool -i p1p1 | grep "firmware" 402 403 Example output: 404 405 .. code-block:: console 406 407 firmware-version: 1.25.4.0, TP 0.1.23.2 408 409Running testpmd 410~~~~~~~~~~~~~~~ 411 412This section demonstrates how to launch **testpmd** with Chelsio 413devices managed by librte_net_cxgbe in Linux operating system. 414 415#. Load the kernel module: 416 417 .. code-block:: console 418 419 modprobe cxgb4 420 421#. Get the PCI bus addresses of the interfaces bound to cxgb4 driver: 422 423 .. code-block:: console 424 425 dmesg | tail -2 426 427 Example output: 428 429 .. code-block:: console 430 431 cxgb4 0000:02:00.4 p1p1: renamed from eth0 432 cxgb4 0000:02:00.4 p1p2: renamed from eth1 433 434 .. note:: 435 436 Both the interfaces of a Chelsio 2-port adapter are bound to the 437 same PCI bus address. 438 439#. Unload the kernel module: 440 441 .. code-block:: console 442 443 modprobe -ar cxgb4 csiostor 444 445#. Running testpmd 446 447 Follow instructions available in the document 448 :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 449 to run testpmd. 450 451 .. note:: 452 453 Currently, CXGBE PMD only supports the binding of PF4 for Chelsio NICs. 454 455 Example output: 456 457 .. code-block:: console 458 459 [...] 460 EAL: PCI device 0000:02:00.4 on NUMA socket -1 461 EAL: probe driver: 1425:5401 rte_cxgbe_pmd 462 EAL: PCI memory mapped at 0x7fd7c0200000 463 EAL: PCI memory mapped at 0x7fd77cdfd000 464 EAL: PCI memory mapped at 0x7fd7c10b7000 465 PMD: rte_cxgbe_pmd: fw: 1.25.4.0, TP: 0.1.23.2 466 PMD: rte_cxgbe_pmd: Coming up as MASTER: Initializing adapter 467 Interactive-mode selected 468 Configuring Port 0 (socket 0) 469 Port 0: 00:07:43:2D:EA:C0 470 Configuring Port 1 (socket 0) 471 Port 1: 00:07:43:2D:EA:C8 472 Checking link statuses... 473 PMD: rte_cxgbe_pmd: Port0: passive DA port module inserted 474 PMD: rte_cxgbe_pmd: Port1: passive DA port module inserted 475 Port 0 Link Up - speed 10000 Mbps - full-duplex 476 Port 1 Link Up - speed 10000 Mbps - full-duplex 477 Done 478 testpmd> 479 480 .. note:: 481 482 Flow control pause TX/RX is disabled by default and can be enabled via 483 testpmd. Refer section :ref:`flow-control` for more details. 484 485Configuring SR-IOV Virtual Functions 486~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 487 488This section demonstrates how to enable SR-IOV virtual functions 489on Chelsio NICs and demonstrates how to run testpmd with SR-IOV 490virtual functions. 491 492#. Load the kernel module: 493 494 .. code-block:: console 495 496 modprobe cxgb4 497 498#. Get the PCI bus addresses of the interfaces bound to cxgb4 driver: 499 500 .. code-block:: console 501 502 dmesg | tail -2 503 504 Example output: 505 506 .. code-block:: console 507 508 cxgb4 0000:02:00.4 p1p1: renamed from eth0 509 cxgb4 0000:02:00.4 p1p2: renamed from eth1 510 511 .. note:: 512 513 Both the interfaces of a Chelsio 2-port adapter are bound to the 514 same PCI bus address. 515 516#. Use ifconfig to get the interface name assigned to Chelsio card: 517 518 .. code-block:: console 519 520 ifconfig -a | grep "00:07:43" 521 522 Example output: 523 524 .. code-block:: console 525 526 p1p1 Link encap:Ethernet HWaddr 00:07:43:2D:EA:C0 527 p1p2 Link encap:Ethernet HWaddr 00:07:43:2D:EA:C8 528 529#. Bring up the interfaces: 530 531 .. code-block:: console 532 533 ifconfig p1p1 up 534 ifconfig p1p2 up 535 536#. Instantiate SR-IOV Virtual Functions. PF0..3 can be used for 537 SR-IOV VFs. Multiple VFs can be instantiated on each of PF0..3. 538 To instantiate one SR-IOV VF on each PF0 and PF1: 539 540 .. code-block:: console 541 542 echo 1 > /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs 543 echo 1 > /sys/bus/pci/devices/0000\:02\:00.1/sriov_numvfs 544 545#. Get the PCI bus addresses of the virtual functions: 546 547 .. code-block:: console 548 549 lspci | grep -i "Chelsio" | grep -i "VF" 550 551 Example output: 552 553 .. code-block:: console 554 555 02:01.0 Ethernet controller: Chelsio Communications Inc T540-CR Unified Wire Ethernet Controller [VF] 556 02:01.1 Ethernet controller: Chelsio Communications Inc T540-CR Unified Wire Ethernet Controller [VF] 557 558#. Running testpmd 559 560 Follow instructions available in the document 561 :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 562 to bind virtual functions and run testpmd. 563 564 Example output: 565 566 .. code-block:: console 567 568 [...] 569 EAL: PCI device 0000:02:01.0 on NUMA socket 0 570 EAL: probe driver: 1425:5803 net_cxgbevf 571 PMD: rte_cxgbe_pmd: Firmware version: 1.25.4.0 572 PMD: rte_cxgbe_pmd: TP Microcode version: 0.1.23.2 573 PMD: rte_cxgbe_pmd: Chelsio rev 0 574 PMD: rte_cxgbe_pmd: No bootstrap loaded 575 PMD: rte_cxgbe_pmd: No Expansion ROM loaded 576 PMD: rte_cxgbe_pmd: 0000:02:01.0 Chelsio rev 0 1G/10GBASE-SFP 577 EAL: PCI device 0000:02:01.1 on NUMA socket 0 578 EAL: probe driver: 1425:5803 net_cxgbevf 579 PMD: rte_cxgbe_pmd: Firmware version: 1.25.4.0 580 PMD: rte_cxgbe_pmd: TP Microcode version: 0.1.23.2 581 PMD: rte_cxgbe_pmd: Chelsio rev 0 582 PMD: rte_cxgbe_pmd: No bootstrap loaded 583 PMD: rte_cxgbe_pmd: No Expansion ROM loaded 584 PMD: rte_cxgbe_pmd: 0000:02:01.1 Chelsio rev 0 1G/10GBASE-SFP 585 Configuring Port 0 (socket 0) 586 Port 0: 06:44:29:44:40:00 587 Configuring Port 1 (socket 0) 588 Port 1: 06:44:29:44:40:10 589 Checking link statuses... 590 Done 591 testpmd> 592 593FreeBSD 594------- 595 596.. _freebsd-installation: 597 598FreeBSD Installation 599~~~~~~~~~~~~~~~~~~~~ 600 601Steps to manually install the latest firmware from the downloaded Chelsio 602Unified Wire package for FreeBSD operating system are as follows: 603 604#. Load the kernel module: 605 606 .. code-block:: console 607 608 kldload if_cxgbe 609 610#. Use dmesg to get the t5nex instance assigned to the Chelsio card: 611 612 .. code-block:: console 613 614 dmesg | grep "t5nex" 615 616 Example output: 617 618 .. code-block:: console 619 620 t5nex0: <Chelsio T520-CR> irq 16 at device 0.4 on pci2 621 cxl0: <port 0> on t5nex0 622 cxl1: <port 1> on t5nex0 623 t5nex0: PCIe x8, 2 ports, 14 MSI-X interrupts, 31 eq, 13 iq 624 625 In the example above, a Chelsio T520-CR card is bound to a t5nex0 instance. 626 627#. Install cxgbetool from FreeBSD source repository: 628 629 .. code-block:: console 630 631 cd <path_to_FreeBSD_source>/tools/tools/cxgbetool/ 632 make && make install 633 634#. Use cxgbetool to load the firmware image onto the card: 635 636 .. code-block:: console 637 638 cxgbetool t5nex0 loadfw <path_to_uwire>/src/network/firmware/t5fw-*.bin 639 640#. Unload and reload the kernel module: 641 642 .. code-block:: console 643 644 kldunload if_cxgbe 645 kldload if_cxgbe 646 647#. Verify with sysctl: 648 649 .. code-block:: console 650 651 sysctl -a | grep "t5nex" | grep "firmware" 652 653 Example output: 654 655 .. code-block:: console 656 657 dev.t5nex.0.firmware_version: 1.25.4.0 658 659Running testpmd 660~~~~~~~~~~~~~~~ 661 662This section demonstrates how to launch **testpmd** with Chelsio 663devices managed by librte_net_cxgbe in FreeBSD operating system. 664 665#. Change to DPDK source directory where the target has been compiled in 666 section :ref:`driver-compilation`: 667 668 .. code-block:: console 669 670 cd <DPDK-source-directory> 671 672#. Copy the contigmem kernel module to /boot/kernel directory: 673 674 .. code-block:: console 675 676 cp <build_dir>/kernel/freebsd/contigmem.ko /boot/kernel/ 677 678#. Add the following lines to /boot/loader.conf: 679 680 .. code-block:: console 681 682 # reserve 2 x 1G blocks of contiguous memory using contigmem driver 683 hw.contigmem.num_buffers=2 684 hw.contigmem.buffer_size=1073741824 685 # load contigmem module during boot process 686 contigmem_load="YES" 687 688 The above lines load the contigmem kernel module during boot process and 689 allocate 2 x 1G blocks of contiguous memory to be used for DPDK later on. 690 This is to avoid issues with potential memory fragmentation during later 691 system up time, which may result in failure of allocating the contiguous 692 memory required for the contigmem kernel module. 693 694#. Restart the system and ensure the contigmem module is loaded successfully: 695 696 .. code-block:: console 697 698 reboot 699 kldstat | grep "contigmem" 700 701 Example output: 702 703 .. code-block:: console 704 705 2 1 0xffffffff817f1000 3118 contigmem.ko 706 707#. Repeat step 1 to ensure that you are in the DPDK source directory. 708 709#. Load the cxgbe kernel module: 710 711 .. code-block:: console 712 713 kldload if_cxgbe 714 715#. Get the PCI bus addresses of the interfaces bound to t5nex driver: 716 717 .. code-block:: console 718 719 pciconf -l | grep "t5nex" 720 721 Example output: 722 723 .. code-block:: console 724 725 t5nex0@pci0:2:0:4: class=0x020000 card=0x00001425 chip=0x54011425 rev=0x00 726 727 In the above example, the t5nex0 is bound to 2:0:4 bus address. 728 729 .. note:: 730 731 Both the interfaces of a Chelsio 2-port adapter are bound to the 732 same PCI bus address. 733 734#. Unload the kernel module: 735 736 .. code-block:: console 737 738 kldunload if_cxgbe 739 740#. Set the PCI bus addresses to hw.nic_uio.bdfs kernel environment parameter: 741 742 .. code-block:: console 743 744 kenv hw.nic_uio.bdfs="2:0:4" 745 746 This automatically binds 2:0:4 to nic_uio kernel driver when it is loaded in 747 the next step. 748 749 .. note:: 750 751 Currently, CXGBE PMD only supports the binding of PF4 for Chelsio NICs. 752 753#. Load nic_uio kernel driver: 754 755 .. code-block:: console 756 757 kldload <build_dir>/kernel/freebsd/nic_uio.ko 758 759#. Start testpmd with basic parameters: 760 761 .. code-block:: console 762 763 ./<build_dir>/app/dpdk-testpmd -l 0-3 -n 4 -a 0000:02:00.4 -- -i 764 765 Example output: 766 767 .. code-block:: console 768 769 [...] 770 EAL: PCI device 0000:02:00.4 on NUMA socket 0 771 EAL: probe driver: 1425:5401 rte_cxgbe_pmd 772 EAL: PCI memory mapped at 0x8007ec000 773 EAL: PCI memory mapped at 0x842800000 774 EAL: PCI memory mapped at 0x80086c000 775 PMD: rte_cxgbe_pmd: fw: 1.25.4.0, TP: 0.1.23.2 776 PMD: rte_cxgbe_pmd: Coming up as MASTER: Initializing adapter 777 Interactive-mode selected 778 Configuring Port 0 (socket 0) 779 Port 0: 00:07:43:2D:EA:C0 780 Configuring Port 1 (socket 0) 781 Port 1: 00:07:43:2D:EA:C8 782 Checking link statuses... 783 PMD: rte_cxgbe_pmd: Port0: passive DA port module inserted 784 PMD: rte_cxgbe_pmd: Port1: passive DA port module inserted 785 Port 0 Link Up - speed 10000 Mbps - full-duplex 786 Port 1 Link Up - speed 10000 Mbps - full-duplex 787 Done 788 testpmd> 789 790.. note:: 791 792 Flow control pause TX/RX is disabled by default and can be enabled via 793 testpmd. Refer section :ref:`flow-control` for more details. 794 795Sample Application Notes 796------------------------ 797 798.. _flow-control: 799 800Enable/Disable Flow Control 801~~~~~~~~~~~~~~~~~~~~~~~~~~~ 802 803Flow control pause TX/RX is disabled by default and can be enabled via 804testpmd as follows: 805 806.. code-block:: console 807 808 testpmd> set flow_ctrl rx on tx on 0 0 0 0 mac_ctrl_frame_fwd off autoneg on 0 809 testpmd> set flow_ctrl rx on tx on 0 0 0 0 mac_ctrl_frame_fwd off autoneg on 1 810 811To disable again, run: 812 813.. code-block:: console 814 815 testpmd> set flow_ctrl rx off tx off 0 0 0 0 mac_ctrl_frame_fwd off autoneg off 0 816 testpmd> set flow_ctrl rx off tx off 0 0 0 0 mac_ctrl_frame_fwd off autoneg off 1 817 818Jumbo Mode 819~~~~~~~~~~ 820 821There are two ways to enable sending and receiving of jumbo frames via testpmd. 822One method involves using the **mtu** command, which changes the mtu of an 823individual port without having to stop the selected port. Another method 824involves stopping all the ports first and then running **max-pkt-len** command 825to configure the mtu of all the ports with a single command. 826 827- To configure each port individually, run the mtu command as follows: 828 829 .. code-block:: console 830 831 testpmd> port config mtu 0 9000 832 testpmd> port config mtu 1 9000 833 834- To configure all the ports at once, stop all the ports first and run the 835 max-pkt-len command as follows: 836 837 .. code-block:: console 838 839 testpmd> port stop all 840 testpmd> port config all max-pkt-len 9000 841