net/txgbe: support Rx
[dpdk.git] / doc / guides / nics / mlx5.rst
index a174cdd..69bb4fc 100644 (file)
@@ -7,7 +7,7 @@
 MLX5 poll mode driver
 =====================
 
-The MLX5 poll mode driver library (**librte_pmd_mlx5**) provides support
+The MLX5 poll mode driver library (**librte_net_mlx5**) provides support
 for **Mellanox ConnectX-4**, **Mellanox ConnectX-4 Lx** , **Mellanox
 ConnectX-5**, **Mellanox ConnectX-6**, **Mellanox ConnectX-6 Dx** and
 **Mellanox BlueField** families of 10/25/40/50/100/200 Gb/s adapters
@@ -20,17 +20,12 @@ Information and documentation about these adapters can be found on the
 There is also a `section dedicated to this poll mode driver
 <http://www.mellanox.com/page/products_dyn?product_family=209&mtag=pmd_for_dpdk>`__.
 
-.. note::
-
-   Due to external dependencies, this driver is disabled in default configuration
-   of the "make" build. It can be enabled with ``CONFIG_RTE_LIBRTE_MLX5_PMD=y``
-   or by using "meson" build system which will detect dependencies.
 
 Design
 ------
 
 Besides its dependency on libibverbs (that implies libmlx5 and associated
-kernel support), librte_pmd_mlx5 relies heavily on system calls for control
+kernel support), librte_net_mlx5 relies heavily on system calls for control
 operations such as querying/updating the MTU and flow control parameters.
 
 For security reasons and robustness, this driver only deals with virtual
@@ -56,7 +51,7 @@ to get the best performances:
 - DevX allows to access firmware objects
 - Direct Rules manages flow steering at low-level hardware layer
 
-Enabling librte_pmd_mlx5 causes DPDK applications to be linked against
+Enabling librte_net_mlx5 causes DPDK applications to be linked against
 libibverbs.
 
 Features
@@ -242,9 +237,8 @@ Limitations
   ``txq_inline_max`` and ``txq_inline_mpw`` devargs keys.
 
 - To provide the packet send scheduling on mbuf timestamps the ``tx_pp``
-  parameter should be specified, RTE_MBUF_DYNFIELD_TIMESTAMP_NAME and
-  RTE_MBUF_DYNFLAG_TIMESTAMP_NAME should be registered by application.
-  When PMD sees the RTE_MBUF_DYNFLAG_TIMESTAMP_NAME set on the packet
+  parameter should be specified.
+  When PMD sees the RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME set on the packet
   being sent it tries to synchronize the time of packet appearing on
   the wire with the specified packet timestamp. It the specified one
   is in the past it should be ignored, if one is in the distant future
@@ -304,6 +298,9 @@ Limitations
         eth (with or without vlan) / ipv4 or ipv6 / tcp / payload
 
     Other TCP packets (e.g. with MPLS label) received on Rx queue with LRO enabled, will be received with bad checksum.
+  - LRO packet aggregation is performed by HW only for packet size larger than
+    ``lro_min_mss_size``. This value is reported on device start, when debug
+    mode is enabled.
 
 - CRC:
 
@@ -311,6 +308,19 @@ Limitations
     for some NICs (such as ConnectX-6 Dx and BlueField 2).
     The capability bit ``scatter_fcs_w_decap_disable`` shows NIC support.
 
+- Sample flow:
+
+  - Supports ``RTE_FLOW_ACTION_TYPE_SAMPLE`` action only within NIC Rx and E-Switch steering domain.
+  - The E-Switch Sample flow must have the eswitch_manager VPORT destination (PF or ECPF) and no additional actions.
+  - For ConnectX-5, the ``RTE_FLOW_ACTION_TYPE_SAMPLE`` is typically used as first action in the E-Switch egress flow if with header modify or encapsulation actions.
+
+- IPv6 header item 'proto' field, indicating the next header protocol, should
+  not be set as extension header.
+  In case the next header is an extension header, it should not be specified in
+  IPv6 header item 'proto' field.
+  The last extension header item 'next header' field can specify the following
+  header protocol type.
+
 Statistics
 ----------
 
@@ -328,53 +338,19 @@ Configuration
 Compilation options
 ~~~~~~~~~~~~~~~~~~~
 
-These options can be modified in the ``.config`` file.
-
-- ``CONFIG_RTE_LIBRTE_MLX5_PMD`` (default **n**)
-
-  Toggle compilation of librte_pmd_mlx5 itself.
-
-- ``CONFIG_RTE_IBVERBS_LINK_DLOPEN`` (default **n**)
-
-  Build PMD with additional code to make it loadable without hard
-  dependencies on **libibverbs** nor **libmlx5**, which may not be installed
-  on the target system.
-
-  In this mode, their presence is still required for it to run properly,
-  however their absence won't prevent a DPDK application from starting (with
-  ``CONFIG_RTE_BUILD_SHARED_LIB`` disabled) and they won't show up as
-  missing with ``ldd(1)``.
-
-  It works by moving these dependencies to a purpose-built rdma-core "glue"
-  plug-in which must either be installed in a directory whose name is based
-  on ``CONFIG_RTE_EAL_PMD_PATH`` suffixed with ``-glue`` if set, or in a
-  standard location for the dynamic linker (e.g. ``/lib``) if left to the
-  default empty string (``""``).
+The ibverbs libraries can be linked with this PMD in a number of ways,
+configured by the ``ibverbs_link`` build option:
 
-  This option has no performance impact.
+- ``shared`` (default): the PMD depends on some .so files.
 
-- ``CONFIG_RTE_IBVERBS_LINK_STATIC`` (default **n**)
+- ``dlopen``: Split the dependencies glue in a separate library
+  loaded when needed by dlopen.
+  It make dependencies on libibverbs and libmlx4 optional,
+  and has no performance impact.
 
-  Embed static flavor of the dependencies **libibverbs** and **libmlx5**
+- ``static``: Embed static flavor of the dependencies libibverbs and libmlx4
   in the PMD shared library or the executable static binary.
 
-- ``CONFIG_RTE_LIBRTE_MLX5_DEBUG`` (default **n**)
-
-  Toggle debugging code and stricter compilation flags. Enabling this option
-  adds additional run-time checks and debugging messages at the cost of
-  lower performance.
-
-.. note::
-
-   For BlueField, target should be set to ``arm64-bluefield-linux-gcc``. This
-   will enable ``CONFIG_RTE_LIBRTE_MLX5_PMD`` and set ``RTE_CACHE_LINE_SIZE`` to
-   64. Default armv8a configuration of make build and meson build set it to 128
-   then brings performance degradation.
-
-This option is available in meson:
-
-- ``ibverbs_link`` can be ``static``, ``shared``, or ``dlopen``.
-
 Environment variables
 ~~~~~~~~~~~~~~~~~~~~~
 
@@ -383,10 +359,6 @@ Environment variables
   A list of directories in which to search for the rdma-core "glue" plug-in,
   separated by colons or semi-colons.
 
-  Only matters when compiled with ``CONFIG_RTE_IBVERBS_LINK_DLOPEN``
-  enabled and most useful when ``CONFIG_RTE_EAL_PMD_PATH`` is also set,
-  since ``LD_LIBRARY_PATH`` has no effect in this case.
-
 - ``MLX5_SHUT_UP_BF``
 
   Configures HW Tx doorbell register as IO-mapped.
@@ -407,7 +379,7 @@ Environment variables
 Run-time configuration
 ~~~~~~~~~~~~~~~~~~~~~~
 
-- librte_pmd_mlx5 brings kernel network interfaces up during initialization
+- librte_net_mlx5 brings kernel network interfaces up during initialization
   because it is affected by their state. Forcing them down prevents packets
   reception.
 
@@ -1037,7 +1009,7 @@ DPDK and must be installed separately:
 
 - **libibverbs**
 
-  User space Verbs framework used by librte_pmd_mlx5. This library provides
+  User space Verbs framework used by librte_net_mlx5. This library provides
   a generic interface between the kernel and low-level user space drivers
   such as libmlx5.
 
@@ -1109,12 +1081,6 @@ RDMA Core with Linux Kernel
 .. _`Linux installation documentation`: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/plain/Documentation/admin-guide/README.rst
 .. _`RDMA Core installation documentation`: https://raw.githubusercontent.com/linux-rdma/rdma-core/master/README.md
 
-If rdma-core libraries are built but not installed, DPDK makefile can link them,
-thanks to these environment variables:
-
-   - ``EXTRA_CFLAGS=-I/path/to/rdma-core/build/include``
-   - ``EXTRA_LDFLAGS=-L/path/to/rdma-core/build/lib``
-   - ``PKG_CONFIG_PATH=/path/to/rdma-core/build/lib/pkgconfig``
 
 Mellanox OFED/EN
 ^^^^^^^^^^^^^^^^
@@ -1452,6 +1418,11 @@ Supported hardware offloads
    |                       | |  rdma-core 26 | | rdma-core 26  |
    |                       | |  ConnectX-5   | | ConnectX-5    |
    +-----------------------+-----------------+-----------------+
+   | Sampling              | |  DPDK 20.11   | | DPDK 20.11    |
+   |                       | |  OFED 5.2     | | OFED 5.2      |
+   |                       | |  rdma-core 32 | | rdma-core 32  |
+   |                       | |  ConnectX-5   | | ConnectX-5    |
+   +-----------------------+-----------------+-----------------+
 
 Notes for metadata
 ------------------
@@ -1482,13 +1453,13 @@ The application should re-create the flows as required after the port restart.
 Notes for testpmd
 -----------------
 
-Compared to librte_pmd_mlx4 that implements a single RSS configuration per
-port, librte_pmd_mlx5 supports per-protocol RSS configuration.
+Compared to librte_net_mlx4 that implements a single RSS configuration per
+port, librte_net_mlx5 supports per-protocol RSS configuration.
 
 Since ``testpmd`` defaults to IP RSS mode and there is currently no
 command-line parameter to enable additional protocols (UDP and TCP as well
 as IP), the following commands must be entered from its CLI to get the same
-behavior as librte_pmd_mlx4::
+behavior as librte_net_mlx4::
 
    > port stop all
    > port config all rss all
@@ -1498,7 +1469,7 @@ Usage example
 -------------
 
 This section demonstrates how to launch **testpmd** with Mellanox
-ConnectX-4/ConnectX-5/ConnectX-6/BlueField devices managed by librte_pmd_mlx5.
+ConnectX-4/ConnectX-5/ConnectX-6/BlueField devices managed by librte_net_mlx5.
 
 #. Load the kernel modules::
 
@@ -1555,41 +1526,41 @@ ConnectX-4/ConnectX-5/ConnectX-6/BlueField devices managed by librte_pmd_mlx5.
 
       [...]
       EAL: PCI device 0000:05:00.0 on NUMA socket 0
-      EAL:   probe driver: 15b3:1013 librte_pmd_mlx5
-      PMD: librte_pmd_mlx5: PCI information matches, using device "mlx5_0" (VF: false)
-      PMD: librte_pmd_mlx5: 1 port(s) detected
-      PMD: librte_pmd_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:fe
+      EAL:   probe driver: 15b3:1013 librte_net_mlx5
+      PMD: librte_net_mlx5: PCI information matches, using device "mlx5_0" (VF: false)
+      PMD: librte_net_mlx5: 1 port(s) detected
+      PMD: librte_net_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:fe
       EAL: PCI device 0000:05:00.1 on NUMA socket 0
-      EAL:   probe driver: 15b3:1013 librte_pmd_mlx5
-      PMD: librte_pmd_mlx5: PCI information matches, using device "mlx5_1" (VF: false)
-      PMD: librte_pmd_mlx5: 1 port(s) detected
-      PMD: librte_pmd_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:ff
+      EAL:   probe driver: 15b3:1013 librte_net_mlx5
+      PMD: librte_net_mlx5: PCI information matches, using device "mlx5_1" (VF: false)
+      PMD: librte_net_mlx5: 1 port(s) detected
+      PMD: librte_net_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:ff
       EAL: PCI device 0000:06:00.0 on NUMA socket 0
-      EAL:   probe driver: 15b3:1013 librte_pmd_mlx5
-      PMD: librte_pmd_mlx5: PCI information matches, using device "mlx5_2" (VF: false)
-      PMD: librte_pmd_mlx5: 1 port(s) detected
-      PMD: librte_pmd_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:fa
+      EAL:   probe driver: 15b3:1013 librte_net_mlx5
+      PMD: librte_net_mlx5: PCI information matches, using device "mlx5_2" (VF: false)
+      PMD: librte_net_mlx5: 1 port(s) detected
+      PMD: librte_net_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:fa
       EAL: PCI device 0000:06:00.1 on NUMA socket 0
-      EAL:   probe driver: 15b3:1013 librte_pmd_mlx5
-      PMD: librte_pmd_mlx5: PCI information matches, using device "mlx5_3" (VF: false)
-      PMD: librte_pmd_mlx5: 1 port(s) detected
-      PMD: librte_pmd_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:fb
+      EAL:   probe driver: 15b3:1013 librte_net_mlx5
+      PMD: librte_net_mlx5: PCI information matches, using device "mlx5_3" (VF: false)
+      PMD: librte_net_mlx5: 1 port(s) detected
+      PMD: librte_net_mlx5: port 1 MAC address is e4:1d:2d:e7:0c:fb
       Interactive-mode selected
       Configuring Port 0 (socket 0)
-      PMD: librte_pmd_mlx5: 0x8cba80: TX queues number update: 0 -> 2
-      PMD: librte_pmd_mlx5: 0x8cba80: RX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8cba80: TX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8cba80: RX queues number update: 0 -> 2
       Port 0: E4:1D:2D:E7:0C:FE
       Configuring Port 1 (socket 0)
-      PMD: librte_pmd_mlx5: 0x8ccac8: TX queues number update: 0 -> 2
-      PMD: librte_pmd_mlx5: 0x8ccac8: RX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8ccac8: TX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8ccac8: RX queues number update: 0 -> 2
       Port 1: E4:1D:2D:E7:0C:FF
       Configuring Port 2 (socket 0)
-      PMD: librte_pmd_mlx5: 0x8cdb10: TX queues number update: 0 -> 2
-      PMD: librte_pmd_mlx5: 0x8cdb10: RX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8cdb10: TX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8cdb10: RX queues number update: 0 -> 2
       Port 2: E4:1D:2D:E7:0C:FA
       Configuring Port 3 (socket 0)
-      PMD: librte_pmd_mlx5: 0x8ceb58: TX queues number update: 0 -> 2
-      PMD: librte_pmd_mlx5: 0x8ceb58: RX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8ceb58: TX queues number update: 0 -> 2
+      PMD: librte_net_mlx5: 0x8ceb58: RX queues number update: 0 -> 2
       Port 3: E4:1D:2D:E7:0C:FB
       Checking link statuses...
       Port 0 Link Up - speed 40000 Mbps - full-duplex