doc: update matching versions in ice guide
[dpdk.git] / doc / guides / nics / ice.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2018 Intel Corporation.
3
4 ICE Poll Mode Driver
5 ======================
6
7 The ice PMD (**librte_net_ice**) provides poll mode driver support for
8 10/25/50/100 Gbps Intel® Ethernet 800 Series Network Adapters based on
9 the Intel Ethernet Controller E810 and Intel Ethernet Connection E822/E823.
10
11 Linux Prerequisites
12 -------------------
13
14 - Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>` to setup the basic DPDK environment.
15
16 - To get better performance on Intel platforms, please follow the "How to get best performance with NICs on Intel platforms"
17   section of the :ref:`Getting Started Guide for Linux <linux_gsg>`.
18
19 - Please follow the matching list to download specific kernel driver, firmware and DDP package from
20   `https://www.intel.com/content/www/us/en/search.html?ws=text#q=e810&t=Downloads&layout=table`.
21
22 - To understand what is DDP package and how it works, please review `Intel® Ethernet Controller E810 Dynamic
23   Device Personalization (DDP) for Telecommunications Technology Guide <https://cdrdv2.intel.com/v1/dl/getContent/617015>`_.
24
25 - To understand DDP for COMMs usage with DPDK, please review `Intel® Ethernet 800 Series Telecommunication (Comms)
26   Dynamic Device Personalization (DDP) Package <https://cdrdv2.intel.com/v1/dl/getContent/618651>`_.
27
28 Windows Prerequisites
29 ---------------------
30
31 - Follow the :doc:`guide for Windows <../windows_gsg/run_apps>`
32   to setup the basic DPDK environment.
33
34 - Identify the Intel® Ethernet adapter and get the latest NVM/FW version.
35
36 - To access any Intel® Ethernet hardware, load the NetUIO driver in place of existing built-in (inbox) driver.
37
38 - To load NetUIO driver, follow the steps mentioned in `dpdk-kmods repository
39   <https://git.dpdk.org/dpdk-kmods/tree/windows/netuio/README.rst>`_.
40
41 - Loading of private Dynamic Device Personalization (DDP) package is not supported on Windows.
42
43
44 Recommended Matching List
45 -------------------------
46
47 It is highly recommended to upgrade the ice kernel driver, firmware and DDP package
48 to avoid the compatibility issues with ice PMD.
49 Here is the suggested matching list which has been tested and verified.
50 The detailed information can refer to chapter Tested Platforms/Tested NICs in release notes.
51
52    +-----------+---------------+-----------------+-----------+--------------+-----------+
53    |    DPDK   | Kernel Driver | OS Default DDP  | COMMS DDP | Wireless DDP | Firmware  |
54    +===========+===============+=================+===========+==============+===========+
55    |    20.11  |     1.3.2     |      1.3.20     |  1.3.24   |      N/A     |    2.3    |
56    +-----------+---------------+-----------------+-----------+--------------+-----------+
57    |    21.02  |     1.4.11    |      1.3.24     |  1.3.28   |    1.3.4     |    2.4    |
58    +-----------+---------------+-----------------+-----------+--------------+-----------+
59    |    21.05  |     1.6.5     |      1.3.26     |  1.3.30   |    1.3.6     |    3.0    |
60    +-----------+---------------+-----------------+-----------+--------------+-----------+
61    |    21.08  |     1.7.16    |      1.3.27     |  1.3.31   |    1.3.7     |    3.1    |
62    +-----------+---------------+-----------------+-----------+--------------+-----------+
63    |    21.11  |     1.7.16    |      1.3.27     |  1.3.31   |    1.3.7     |    3.1    |
64    +-----------+---------------+-----------------+-----------+--------------+-----------+
65    |    22.03  |     1.8.3     |      1.3.28     |  1.3.35   |    1.3.8     |    3.2    |
66    +-----------+---------------+-----------------+-----------+--------------+-----------+
67
68 Pre-Installation Configuration
69 ------------------------------
70
71
72 Runtime Config Options
73 ~~~~~~~~~~~~~~~~~~~~~~
74
75 - ``Safe Mode Support`` (default ``0``)
76
77   If driver failed to load OS package, by default driver's initialization failed.
78   But if user intend to use the device without OS package, user can take ``devargs``
79   parameter ``safe-mode-support``, for example::
80
81     -a 80:00.0,safe-mode-support=1
82
83   Then the driver will be initialized successfully and the device will enter Safe Mode.
84   NOTE: In Safe mode, only very limited features are available, features like RSS,
85   checksum, fdir, tunneling ... are all disabled.
86
87 - ``Generic Flow Pipeline Mode Support`` (default ``0``)
88
89   In pipeline mode, a flow can be set at one specific stage by setting parameter
90   ``priority``. Currently, we support two stages: priority = 0 or !0. Flows with
91   priority 0 located at the first pipeline stage which typically be used as a firewall
92   to drop the packet on a blocklist(we called it permission stage). At this stage,
93   flow rules are created for the device's exact match engine: switch. Flows with priority
94   !0 located at the second stage, typically packets are classified here and be steered to
95   specific queue or queue group (we called it distribution stage), At this stage, flow
96   rules are created for device's flow director engine.
97   For none-pipeline mode, ``priority`` is ignored, a flow rule can be created as a flow director
98   rule or a switch rule depends on its pattern/action and the resource allocation situation,
99   all flows are virtually at the same pipeline stage.
100   By default, generic flow API is enabled in none-pipeline mode, user can choose to
101   use pipeline mode by setting ``devargs`` parameter ``pipeline-mode-support``,
102   for example::
103
104     -a 80:00.0,pipeline-mode-support=1
105
106 - ``Protocol extraction for per queue``
107
108   Configure the RX queues to do protocol extraction into mbuf for protocol
109   handling acceleration, like checking the TCP SYN packets quickly.
110
111   The argument format is::
112
113       -a 18:00.0,proto_xtr=<queues:protocol>[<queues:protocol>...]
114       -a 18:00.0,proto_xtr=<protocol>
115
116   Queues are grouped by ``(`` and ``)`` within the group. The ``-`` character
117   is used as a range separator and ``,`` is used as a single number separator.
118   The grouping ``()`` can be omitted for single element group. If no queues are
119   specified, PMD will use this protocol extraction type for all queues.
120
121   Protocol is : ``vlan, ipv4, ipv6, ipv6_flow, tcp, ip_offset``.
122
123   .. code-block:: console
124
125     dpdk-testpmd -a 18:00.0,proto_xtr='[(1,2-3,8-9):tcp,10-13:vlan]'
126
127   This setting means queues 1, 2-3, 8-9 are TCP extraction, queues 10-13 are
128   VLAN extraction, other queues run with no protocol extraction.
129
130   .. code-block:: console
131
132     dpdk-testpmd -a 18:00.0,proto_xtr=vlan,proto_xtr='[(1,2-3,8-9):tcp,10-23:ipv6]'
133
134   This setting means queues 1, 2-3, 8-9 are TCP extraction, queues 10-23 are
135   IPv6 extraction, other queues use the default VLAN extraction.
136
137   The extraction metadata is copied into the registered dynamic mbuf field, and
138   the related dynamic mbuf flags is set.
139
140   .. table:: Protocol extraction : ``vlan``
141
142    +----------------------------+----------------------------+
143    |           VLAN2            |           VLAN1            |
144    +======+===+=================+======+===+=================+
145    |  PCP | D |       VID       |  PCP | D |       VID       |
146    +------+---+-----------------+------+---+-----------------+
147
148   VLAN1 - single or EVLAN (first for QinQ).
149
150   VLAN2 - C-VLAN (second for QinQ).
151
152   .. table:: Protocol extraction : ``ipv4``
153
154    +----------------------------+----------------------------+
155    |           IPHDR2           |           IPHDR1           |
156    +======+=======+=============+==============+=============+
157    |  Ver |Hdr Len|    ToS      |      TTL     |  Protocol   |
158    +------+-------+-------------+--------------+-------------+
159
160   IPHDR1 - IPv4 header word 4, "TTL" and "Protocol" fields.
161
162   IPHDR2 - IPv4 header word 0, "Ver", "Hdr Len" and "Type of Service" fields.
163
164   .. table:: Protocol extraction : ``ipv6``
165
166    +----------------------------+----------------------------+
167    |           IPHDR2           |           IPHDR1           |
168    +=====+=============+========+=============+==============+
169    | Ver |Traffic class|  Flow  | Next Header |   Hop Limit  |
170    +-----+-------------+--------+-------------+--------------+
171
172   IPHDR1 - IPv6 header word 3, "Next Header" and "Hop Limit" fields.
173
174   IPHDR2 - IPv6 header word 0, "Ver", "Traffic class" and high 4 bits of
175   "Flow Label" fields.
176
177   .. table:: Protocol extraction : ``ipv6_flow``
178
179    +----------------------------+----------------------------+
180    |           IPHDR2           |           IPHDR1           |
181    +=====+=============+========+============================+
182    | Ver |Traffic class|            Flow Label               |
183    +-----+-------------+-------------------------------------+
184
185   IPHDR1 - IPv6 header word 1, 16 low bits of the "Flow Label" field.
186
187   IPHDR2 - IPv6 header word 0, "Ver", "Traffic class" and high 4 bits of
188   "Flow Label" fields.
189
190   .. table:: Protocol extraction : ``tcp``
191
192    +----------------------------+----------------------------+
193    |           TCPHDR2          |           TCPHDR1          |
194    +============================+======+======+==============+
195    |          Reserved          |Offset|  RSV |     Flags    |
196    +----------------------------+------+------+--------------+
197
198   TCPHDR1 - TCP header word 6, "Data Offset" and "Flags" fields.
199
200   TCPHDR2 - Reserved
201
202   .. table:: Protocol extraction : ``ip_offset``
203
204    +----------------------------+----------------------------+
205    |           IPHDR2           |           IPHDR1           |
206    +============================+============================+
207    |       IPv6 HDR Offset      |       IPv4 HDR Offset      |
208    +----------------------------+----------------------------+
209
210   IPHDR1 - Outer/Single IPv4 Header offset.
211
212   IPHDR2 - Outer/Single IPv6 Header offset.
213
214   Use ``rte_net_ice_dynf_proto_xtr_metadata_get`` to access the protocol
215   extraction metadata, and use ``RTE_PKT_RX_DYNF_PROTO_XTR_*`` to get the
216   metadata type of ``struct rte_mbuf::ol_flags``.
217
218   The ``rte_net_ice_dump_proto_xtr_metadata`` routine shows how to
219   access the protocol extraction result in ``struct rte_mbuf``.
220
221 - ``Hardware debug mask log support`` (default ``0``)
222
223   User can enable the related hardware debug mask such as ICE_DBG_NVM::
224
225     -a 0000:88:00.0,hw_debug_mask=0x80 --log-level=pmd.net.ice.driver:8
226
227   These ICE_DBG_XXX are defined in ``drivers/net/ice/base/ice_type.h``.
228
229 - ``1PPS out support``
230
231   The E810 supports four single-ended GPIO signals (SDP[20:23]). The 1PPS
232   signal outputs via SDP[20:23]. User can select GPIO pin index flexibly.
233   Pin index 0 means SDP20, 1 means SDP21 and so on. For example::
234
235     -a af:00.0,pps_out='[pin:0]'
236
237 - ``Low Rx latency`` (default ``0``)
238
239   vRAN workloads require low latency DPDK interface for the front haul
240   interface connection to Radio. By specifying ``1`` for parameter
241   ``rx_low_latency``, each completed Rx descriptor can be written immediately
242   to host memory and the Rx interrupt latency can be reduced to 2us::
243
244     -a 0000:88:00.0,rx_low_latency=1
245
246   As a trade-off, this configuration may cause the packet processing performance
247   degradation due to the PCI bandwidth limitation.
248
249 Driver compilation and testing
250 ------------------------------
251
252 Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
253 for details.
254
255 Features
256 --------
257
258 Vector PMD
259 ~~~~~~~~~~
260
261 Vector PMD for RX and TX path are selected automatically. The paths
262 are chosen based on 2 conditions.
263
264 - ``CPU``
265   On the X86 platform, the driver checks if the CPU supports AVX2.
266   If it's supported, AVX2 paths will be chosen. If not, SSE is chosen.
267   If the CPU supports AVX512 and EAL argument ``--force-max-simd-bitwidth``
268   is set to 512, AVX512 paths will be chosen.
269
270 - ``Offload features``
271   The supported HW offload features are described in the document ice.ini,
272   A value "P" means the offload feature is not supported by vector path.
273   If any not supported features are used, ICE vector PMD is disabled and the
274   normal paths are chosen.
275
276 Malicious driver detection (MDD)
277 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
278
279 It's not appropriate to send a packet, if this packet's destination MAC address
280 is just this port's MAC address. If SW tries to send such packets, HW will
281 report a MDD event and drop the packets.
282
283 The APPs based on DPDK should avoid providing such packets.
284
285 Device Config Function (DCF)
286 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
287
288 This section demonstrates ICE DCF PMD, which shares the core module with ICE
289 PMD and iAVF PMD.
290
291 A DCF (Device Config Function) PMD bounds to the device's trusted VF with ID 0,
292 it can act as a sole controlling entity to exercise advance functionality (such
293 as switch, ACL) for the rest VFs.
294
295 The DCF PMD needs to advertise and acquire DCF capability which allows DCF to
296 send AdminQ commands that it would like to execute over to the PF and receive
297 responses for the same from PF.
298
299 .. _figure_ice_dcf:
300
301 .. figure:: img/ice_dcf.*
302
303    DCF Communication flow.
304
305 #. Create the VFs::
306
307       echo 4 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs
308
309 #. Enable the VF0 trust on::
310
311       ip link set dev enp24s0f0 vf 0 trust on
312
313 #. Bind the VF0,  and run testpmd with 'cap=dcf' devarg::
314
315       dpdk-testpmd -l 22-25 -n 4 -a 18:01.0,cap=dcf -- -i
316
317 #. Monitor the VF2 interface network traffic::
318
319       tcpdump -e -nn -i enp24s1f2
320
321 #. Create one flow to redirect the traffic to VF2 by DCF::
322
323       flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 \
324       dst is 192.168.0.3 / end actions vf id 2 / end
325
326 #. Send the packet, and it should be displayed on tcpdump::
327
328       sendp(Ether(src='3c:fd:fe:aa:bb:78', dst='00:00:00:01:02:03')/IP(src=' \
329       192.168.0.2', dst="192.168.0.3")/TCP(flags='S')/Raw(load='XXXXXXXXXX'), \
330       iface="enp24s0f0", count=10)
331
332 Sample Application Notes
333 ------------------------
334
335 Vlan filter
336 ~~~~~~~~~~~
337
338 Vlan filter only works when Promiscuous mode is off.
339
340 To start ``testpmd``, and add vlan 10 to port 0:
341
342 .. code-block:: console
343
344     ./app/dpdk-testpmd -l 0-15 -n 4 -- -i
345     ...
346
347     testpmd> rx_vlan add 10 0
348
349 Limitations or Known issues
350 ---------------------------
351
352 The Intel E810 requires a programmable pipeline package be downloaded
353 by the driver to support normal operations. The E810 has a limited
354 functionality built in to allow PXE boot and other use cases, but the
355 driver must download a package file during the driver initialization
356 stage.
357
358 The default DDP package file name is ice.pkg. For a specific NIC, the
359 DDP package supposed to be loaded can have a filename: ice-xxxxxx.pkg,
360 where 'xxxxxx' is the 64-bit PCIe Device Serial Number of the NIC. For
361 example, if the NIC's device serial number is 00-CC-BB-FF-FF-AA-05-68,
362 the device-specific DDP package filename is ice-00ccbbffffaa0568.pkg
363 (in hex and all low case). During initialization, the driver searches
364 in the following paths in order: /lib/firmware/updates/intel/ice/ddp
365 and /lib/firmware/intel/ice/ddp. The corresponding device-specific DDP
366 package will be downloaded first if the file exists. If not, then the
367 driver tries to load the default package. The type of loaded package
368 is stored in ``ice_adapter->active_pkg_type``.
369
370 A symbolic link to the DDP package file is also ok. The same package
371 file is used by both the kernel driver and the DPDK PMD.
372
373    .. Note::
374
375       Windows support: The DDP package is not supported on Windows so,
376       loading of the package is disabled on Windows.