net/ngbe: support MTU set
[dpdk.git] / doc / guides / rel_notes / release_20_11.rst
1 .. SPDX-License-Identifier: BSD-3-Clause
2    Copyright 2020 The DPDK contributors
3
4 .. include:: <isonum.txt>
5
6 DPDK Release 20.11
7 ==================
8
9 New Features
10 ------------
11
12 * **Added write combining store APIs.**
13
14   Added ``rte_write32_wc`` and ``rte_write32_wc_relaxed`` APIs
15   that enable write combining stores (depending on architecture).
16   The functions are provided as a generic stub and
17   x86 specific implementation.
18
19 * **Added prefetch with intention to write APIs.**
20
21   Added new prefetch function variants e.g. ``rte_prefetch0_write``,
22   which allow the programmer to prefetch a cache line and also indicate
23   the intention to write.
24
25 * **Added the rte_cldemote API.**
26
27   Added a hardware hint CLDEMOTE, which is similar to prefetch in reverse.
28   CLDEMOTE moves the cache line to the more remote cache, where it expects
29   sharing to be efficient. Moving the cache line to a level more distant from
30   the processor helps to accelerate core-to-core communication.
31   This API is specific to x86 and implemented as a stub for other
32   architectures.
33
34 * **Added support for limiting maximum SIMD bitwidth.**
35
36   Added a new EAL config setting ``max_simd_bitwidth`` to limit the vector
37   path selection at runtime. This value can be set by apps using the
38   ``rte_vect_set_max_simd_bitwidth`` function, or by the user with EAL flag
39   ``--force-max-simd-bitwidth``.
40
41 * **Added zero copy APIs for rte_ring.**
42
43   For rings with producer/consumer in ``RTE_RING_SYNC_ST``, ``RTE_RING_SYNC_MT_HTS``
44   modes, these APIs split enqueue/dequeue operation into three phases
45   (enqueue/dequeue start, copy data to/from ring, enqueue/dequeue finish).
46   Along with the advantages of the peek APIs, these provide the ability to
47   copy the data to the ring memory directly without the need for temporary
48   storage.
49
50 * **Updated CRC modules of the net library.**
51
52   * Added runtime selection of the optimal architecture-specific CRC path.
53   * Added optimized implementations of CRC32-Ethernet and CRC16-CCITT
54     using the AVX512 and VPCLMULQDQ instruction sets.
55
56 * **Introduced extended buffer description for receiving.**
57
58   Added the extended Rx buffer description for Rx queue setup routine
59   providing the individual settings for each Rx segment with maximal size,
60   buffer offset and memory pool to allocate data buffers from.
61
62 * **Added the FEC API, for a generic FEC query and config.**
63
64   Added the FEC API which provides functions for query FEC capabilities and
65   current FEC mode from device. An API for configuring FEC mode is also provided.
66
67 * **Added thread safety to rte_flow functions.**
68
69   Added the ``RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE`` device flag to indicate
70   whether a PMD supports thread safe operations. If the PMD doesn't set the flag,
71   the rte_flow API level functions will protect the flow operations with a mutex.
72
73 * **Added flow-based traffic sampling support.**
74
75   Added a new action ``RTE_FLOW_ACTION_TYPE_SAMPLE`` that will sample the
76   incoming traffic and send a duplicated traffic with the specified ratio to
77   the application, while the original packet will continue to the target
78   destination.
79
80   The packets sampling is '1/ratio'. A ratio value set to 1 means that the
81   packets will be completely mirrored. The sample packet can be assigned with
82   a different set of actions than the original packet.
83
84 * **Added support of shared action in flow API.**
85
86   Added shared action support to use single flow actions in multiple flow
87   rules. An update to the shared action configuration alters the behavior of all
88   flow rules using it.
89
90   * Added a new action: ``RTE_FLOW_ACTION_TYPE_SHARED`` to use shared action
91     as a flow action.
92   * Added new flow APIs to create/update/destroy/query shared actions.
93
94 * **Added support to flow rules to allow private PMD items/actions.**
95
96   * Flow rule verification has been  updated to accept private PMD
97     items and actions.
98
99 * **Added a generic API to offload tunneled traffic and restore missed packets.**
100
101   * Added a new hardware independent helper to the flow API that
102     offloads tunneled traffic and restores missed packets.
103
104 * **Updated the ethdev library to support hairpin between two ports.**
105
106   New APIs have been introduced to support binding / unbinding of 2 ports in a
107   hairpin configuration. The hairpin Tx part flow rules can be inserted
108   explicitly. A new API has been added to get the hairpin peer ports list.
109
110 * **Updated the Amazon ena driver.**
111
112   Updated the ena PMD with new features and improvements, including:
113
114   * Added network interface metrics which can be read using xstats.
115
116 * **Updated Broadcom bnxt driver.**
117
118   Updated the Broadcom bnxt driver with new features and improvements, including:
119
120   * Added support for 200G PAM4 link speed.
121   * Added support for RSS hash level selection.
122   * Updated HWRM structures to 1.10.1.70 version.
123   * Added TRUFLOW support for Stingray devices.
124   * Added support for representors on MAIA cores of SR.
125   * Added support for VXLAN decap offload using rte_flow.
126   * Added support to indicate native rte_flow API thread safety.
127
128 * **Updated Cisco enic driver.**
129
130   * Added support for VF representors with single-queue Tx/Rx and flow API
131   * Added support for egress PORT_ID action
132   * Added support for non-zero priorities for group 0 flows
133   * Added support for VXLAN decap combined with VLAN pop
134
135 * **Added hns3 FEC PMD, for supporting query and config FEC mode.**
136
137   Added the FEC PMD which provides functions for querying FEC capabilities and
138   current FEC mode from a device. A PMD for configuring FEC mode is also provided.
139
140 * **Updated the Intel iavf driver.**
141
142   Updated the iavf PMD with new features and improvements, including:
143
144   * Added support for flexible descriptor metadata extraction.
145   * Added support for outer IP hash of GTPC and GTPU.
146   * Added support of AVX512 instructions in Rx and Tx path.
147   * Added support for up to 256 queue pairs per VF.
148
149 * **Updated Intel ixgbe driver.**
150
151   Updated the Intel ixgbe driver to use write combining stores.
152
153 * **Updated Intel i40e driver.**
154
155   Updated the Intel i40e driver to use write combining stores.
156
157 * **Updated Intel ice driver.**
158
159   * Added support for write combining stores.
160   * Added ACL filter support for the Intel DCF.
161
162 * **Updated Mellanox mlx5 driver.**
163
164   Updated the Mellanox mlx5 driver with new features and improvements, including:
165
166   * Added vectorized Multi-Packet Rx Queue burst.
167   * Added support for 2 new miniCQE formats: Flow Tag and L3/L4 header.
168   * Added support for PMD level multiple-thread flow insertion.
169   * Added support for matching on fragmented/non-fragmented IPv4/IPv6 packets.
170   * Added support for QinQ packets matching.
171   * Added support for the new VLAN fields ``has_vlan`` in the Ethernet item
172     and ``has_more_vlan`` in the VLAN item.
173   * Updated the supported timeout for Age action to the maximal value supported
174     by the rte_flow API.
175   * Added support for Age action query.
176   * Added support for multi-ports hairpin.
177   * Allow unknown link speed.
178
179   Updated Mellanox mlx5 vDPA driver:
180
181   * Added support of vDPA VirtQ error handling.
182
183 * **Updated Solarflare network PMD.**
184
185   Updated the Solarflare ``sfc_efx`` driver with changes including:
186
187   * Added SR-IOV PF support
188   * Added Alveo SN1000 SmartNICs (EF100 architecture) support including
189     flow API transfer rules for switch HW offload
190   * Added ARMv8 support
191   * Claimed flow API native thread safety
192
193 * **Added Wangxun txgbe PMD.**
194
195   Added a new PMD driver for Wangxun 10 Gigabit Ethernet NICs.
196
197   See the :doc:`../nics/txgbe` for more details.
198
199 * **Updated Virtio driver.**
200
201   * Added support for Vhost-vDPA backend to the Virtio-user PMD.
202   * Changed default link speed to unknown.
203   * Added support for the 200G link speed.
204
205 * **Updated Memif PMD.**
206
207   * Added support for abstract socket addresses.
208   * Changed default socket address type to abstract.
209
210 * **Added UDP/IPv4 GRO support for VxLAN and non-VxLAN packets.**
211
212   For VxLAN packets, added inner UDP/IPv4 support.
213   For non-VxLAN packets, added UDP/IPv4 support.
214
215 * **Extended the flow-perf application.**
216
217   * Added support for user order instead of bit mask.
218     Now the user can create any structure of rte_flow
219     using the flow performance application with any order.
220     Moreover the app also now starts to support inner
221     items matching as well.
222   * Added header modify actions.
223   * Added flag action.
224   * Added raw encap/decap actions.
225   * Added VXLAN encap/decap actions.
226   * Added ICMP (code/type/identifier/sequence number) and ICMP6 (code/type) matching items.
227   * Added option to set port mask for insertion/deletion:
228     ``--portmask=N``
229     where N represents the hexadecimal bitmask of the ports used.
230
231 * **Added raw data-path APIs for cryptodev library.**
232
233   Added raw data-path APIs to Cryptodev to help accelerate external libraries
234   or applications which need to avail of fast cryptodev enqueue/dequeue
235   operations but which do not necessarily need to depend on mbufs and
236   cryptodev operation mempools.
237
238 * **Updated the aesni_mb crypto PMD.**
239
240   * Added support for intel-ipsec-mb version 0.55.
241   * Added support for AES-ECB 128, 192 and 256.
242   * Added support for ZUC-EEA3/EIA3 algorithms.
243   * Added support for SNOW3G-UEA2/UIA2 algorithms.
244   * Added support for KASUMI-F8/F9 algorithms.
245   * Added support for Chacha20-Poly1305.
246   * Added support for AES-256 CCM algorithm.
247
248 * **Updated the aesni_gcm crypto PMD.**
249
250   * Added SGL support for AES-GMAC.
251
252 * **Added Broadcom BCMFS symmetric crypto PMD.**
253
254   Added a symmetric crypto PMD for Broadcom FlexSparc crypto units.
255   See :doc:`../cryptodevs/bcmfs` guide for more details on this new PMD.
256
257 * **Updated NXP DPAA2_SEC crypto PMD.**
258
259   * Added DES-CBC support for cipher_only, chain and ipsec protocol.
260   * Added support for non-HMAC auth algorithms
261     (MD5, SHA1, SHA224, SHA256, SHA384, SHA512).
262
263 * **Updated Marvell NITROX symmetric crypto PMD.**
264
265   * Added AES-GCM support.
266   * Added cipher only offload support.
267
268 * **Updated Marvell OCTEON TX2 crypto PMD.**
269
270   * Updated the OCTEON TX2 crypto PMD lookaside protocol offload for IPsec with
271     IPv6 support.
272
273 * **Updated Intel QAT PMD.**
274
275   * Added Raw Data-path APIs support.
276   * Added support for write combining stores.
277
278 * **Added Intel ACC100 bbdev PMD.**
279
280   Added a new ``acc100`` bbdev driver for the Intel\ |reg| ACC100 accelerator
281   also known as Mount Bryce.  See the
282   :doc:`../bbdevs/acc100` BBDEV guide for more details on this new driver.
283
284 * **Updated rte_security library to support SDAP.**
285
286   ``rte_security_pdcp_xform`` in ``rte_security`` lib is updated to enable
287   5G NR processing of SDAP headers in PMDs.
288
289 * **Added Marvell OCTEON TX2 regex PMD.**
290
291   Added a new PMD driver for the hardware regex offload block for OCTEON TX2 SoC.
292
293   See the :doc:`../regexdevs/octeontx2` for more details.
294
295 * **Updated Software Eventdev driver.**
296
297   Added performance tuning arguments to allow tuning the scheduler for
298   better throughput in high core count use cases.
299
300 * **Added a new driver for the Intel Dynamic Load Balancer v1.0 device.**
301
302   Added the new ``dlb`` eventdev driver for the Intel DLB V1.0 device.
303
304 * **Added a new driver for the Intel Dynamic Load Balancer v2.0 device.**
305
306   Added the new ``dlb2`` eventdev driver for the Intel DLB V2.0 device. See the
307   :doc:`../eventdevs/dlb2` eventdev guide for more details on this new driver.
308
309 * **Added Ice Lake (Gen4) support for Intel NTB.**
310
311   Added NTB device support (4th generation) for the Intel Ice Lake platform.
312
313 * **Updated ioat rawdev driver.**
314
315   The ioat rawdev driver has been updated and enhanced. Changes include:
316
317   * Added support for Intel\ |reg| Data Streaming Accelerator hardware.  For
318     more information, see `Introducing the Intel Data Streaming Accelerator
319     (Intel DSA)
320     <https://01.org/blogs/2019/introducing-intel-data-streaming-accelerator>`_.
321   * Added support for the fill operation via the API ``rte_ioat_enqueue_fill()``,
322     where the hardware fills an area of memory with a repeating pattern.
323   * Added a per-device configuration flag to disable management
324     of user-provided completion handles.
325   * Renamed the ``rte_ioat_do_copies()`` API to ``rte_ioat_perform_ops()``,
326     and renamed the ``rte_ioat_completed_copies()`` API to ``rte_ioat_completed_ops()``
327     to better reflect the APIs' purposes, and remove the implication that
328     they are limited to copy operations only.
329     Note: The old API is still provided but marked as deprecated in the code.
330   * Added a new API ``rte_ioat_fence()`` to add a fence between operations.
331     This API replaces the ``fence`` flag parameter in the ``rte_ioat_enqueue_copies()`` function,
332     and is clearer as there is no ambiguity as to whether the flag should be
333     set on the last operation before the fence or the first operation after it.
334
335 * **Updated the pipeline library for alignment with the P4 language.**
336
337   Added a new Software Switch (SWX) pipeline type that provides more
338   flexibility through APIs and feature alignment with the P4 language.
339   Some enhancements are:
340
341   * The packet headers, meta-data, actions, tables and pipelines are
342     dynamically defined instead of selected from a pre-defined set.
343   * The actions and the pipeline are defined with instructions.
344   * Extern objects and functions can be plugged into the pipeline.
345   * Transaction-oriented table updates.
346
347 * **Added new AVX512 specific classify algorithms for ACL library.**
348
349   * Added new ``RTE_ACL_CLASSIFY_AVX512X16`` vector implementation,
350     which can process up to 16 flows in parallel. Requires AVX512 support.
351
352   * Added new ``RTE_ACL_CLASSIFY_AVX512X32`` vector implementation,
353     which can process up to 32 flows in parallel. Requires AVX512 support.
354
355 * **Added AVX512 lookup implementation for FIB.**
356
357   Added a AVX512 lookup functions implementation into FIB and FIB6 libraries.
358
359 * **Added support to update subport bandwidth dynamically.**
360
361    * Added new API ``rte_sched_port_subport_profile_add`` to add new
362      subport bandwidth profiles to the subport profile table at runtime.
363
364    * Added support to update the subport rate dynamically.
365
366 * **Updated FIPS validation sample application.**
367
368   * Added scatter gather support.
369   * Added NIST GCMVS complaint GMAC test method support.
370
371 * **Updated l3wfd-acl sample application.**
372
373   * Added new optional parameter ``--eth-dest`` for the ``l3fwd-acl`` to allow
374     the user to specify the destination mac address for each ethernet port
375     used.
376   * Replaced ``--scalar`` command-line option with ``--alg=<value>``, to allow
377     the user to select the desired classify method.
378
379 * **Updated vhost sample application.**
380
381   Added vhost asynchronous APIs support, which demonstrates how the application
382   can leverage IOAT DMA channels with vhost asynchronous APIs.
383   See the :doc:`../sample_app_ug/vhost` for more details.
384
385
386 Removed Items
387 -------------
388
389 * build: Support for the Make build system has been removed from DPDK.
390   Meson is now the primary build system.
391   Sample applications can still be built with Make standalone, using pkg-config.
392
393 * vhost: Dequeue zero-copy support has been removed.
394
395 * kernel: The module ``igb_uio`` has been moved to the git repository
396   `dpdk-kmods <https://git.dpdk.org/dpdk-kmods/>`_ in a new directory
397   ``linux/igb_uio``.
398
399 * Removed Python 2 support since it was sunsetted in January 2020. See
400   `Sunsetting Python 2 <https://www.python.org/doc/sunset-python-2/>`_
401
402 * Removed TEP termination sample application.
403
404 * Removed the deprecated ``dpdk-setup.sh`` script.
405
406
407 API Changes
408 -----------
409
410 * build macros: The macros defining ``RTE_MACHINE_CPUFLAG_*`` have been removed.
411   The information provided by these macros is now available through standard
412   compiler macros.
413
414 * eal: Replaced the function ``rte_get_master_lcore()`` with
415   ``rte_get_main_lcore()``. The old function is deprecated.
416
417   The iterator for worker lcores is also changed:
418   ``RTE_LCORE_FOREACH_SLAVE`` is replaced with
419   ``RTE_LCORE_FOREACH_WORKER``.
420
421 * eal: The definitions related to including and excluding devices
422   have been changed from blacklist/whitelist to block/allow list.
423   There are compatibility macros and command line mapping to accept
424   the old values but applications and scripts are strongly encouraged
425   to migrate to the new names.
426
427 * eal: The ``rte_logs`` struct and global symbol was made private
428   and is no longer part of the API.
429
430 * eal: Made the ``rte_dev_event`` structure private to the EAL as no public API
431   used it.
432
433 * eal: ``rte_cio_rmb()`` and ``rte_cio_wmb()`` were deprecated since 20.08
434   and are removed in this release.
435
436 * mem: Removed the unioned field ``phys_addr`` from
437   the structures ``rte_memseg`` and ``rte_memzone``.
438   The field ``iova`` remains from the old unions.
439
440 * mempool: Removed the unioned fields ``phys_addr`` and ``physaddr`` from
441   the structures ``rte_mempool_memhdr`` and ``rte_mempool_objhdr``.
442   The field ``iova`` remains from the old unions.
443   The flag name ``MEMPOOL_F_NO_PHYS_CONTIG`` is removed,
444   while the aliased flag ``MEMPOOL_F_NO_IOVA_CONTIG`` is kept.
445
446 * mbuf: Removed the functions ``rte_mbuf_data_dma_addr*``
447   and the macros ``rte_pktmbuf_mtophys*``.
448   The same functionality is still available with the functions and macros
449   having ``iova`` in their names instead of ``dma_addr`` or ``mtophys``.
450
451 * mbuf: Removed the unioned field ``buf_physaddr`` from ``rte_mbuf``.
452   The field ``buf_iova`` remains from the old union.
453
454 * mbuf: Removed the unioned field ``refcnt_atomic`` from
455   the structures ``rte_mbuf`` and ``rte_mbuf_ext_shared_info``.
456   The field ``refcnt`` remains from the old unions.
457
458 * mbuf: Removed the unioned fields ``userdata`` and ``udata64``
459   from the structure ``rte_mbuf``. It is replaced with dynamic fields.
460
461 * mbuf: Removed the field ``seqn`` from the structure ``rte_mbuf``.
462   It is replaced with dynamic fields.
463
464 * mbuf: Removed the field ``timestamp`` from the structure ``rte_mbuf``.
465   It is replaced with the dynamic field RTE_MBUF_DYNFIELD_TIMESTAMP_NAME
466   which was previously used only for Tx.
467
468 * pci: Removed the ``rte_kernel_driver`` enum defined in rte_dev.h and
469   replaced with a private enum in the PCI subsystem.
470
471 * pci: Removed the PCI resources map API from the public API
472   (``pci_map_resource`` and ``pci_unmap_resource``) and moved it to the
473   PCI bus driver along with the PCI resources lists and associated structures
474   (``pci_map``, ``pci_msix_table``, ``mapped_pci_resource`` and
475   ``mapped_pci_res_list``).
476
477 * ethdev: Removed the ``kdrv`` field in the ethdev ``rte_eth_dev_data``
478   structure as it gave no useful abstracted information to the applications.
479
480 * ethdev: ``rte_eth_rx_descriptor_done()`` API has been deprecated.
481
482 * ethdev: Renamed basic statistics per queue. An underscore is inserted
483   between the queue number and the rest of the xstat name:
484
485   * ``rx_qN*`` -> ``rx_qN_*``
486   * ``tx_qN*`` -> ``tx_qN_*``
487
488 * ethdev: Added capability to query age flow action.
489
490 * ethdev: Changed ``rte_eth_dev_stop`` return value from ``void`` to
491   ``int`` to provide a way to report various error conditions.
492
493 * ethdev: Added ``int`` return type to ``rte_eth_dev_close()``.
494
495 * ethdev: Renamed internal functions:
496
497   * ``_rte_eth_dev_callback_process()`` -> ``rte_eth_dev_callback_process()``
498   * ``_rte_eth_dev_reset`` -> ``rte_eth_dev_internal_reset()``
499
500 * ethdev: Modified field type of ``base`` and ``nb_queue`` in struct
501   ``rte_eth_dcb_tc_queue_mapping`` from ``uint8_t`` to ``uint16_t``.
502   As the data of ``uint8_t`` will be truncated when queue number in
503   a TC is greater than 256.
504
505 * ethdev: Removed the legacy filter API, including
506   ``rte_eth_dev_filter_supported()`` and ``rte_eth_dev_filter_ctrl()``.
507
508 * ethdev: Removed the legacy L2 tunnel configuration API, including
509   ``rte_eth_dev_l2_tunnel_eth_type_conf()`` and
510   ``rte_eth_dev_l2_tunnel_offload_set()``..
511
512 * vhost: Moved vDPA APIs from experimental to stable.
513
514 * vhost: Add a new function ``rte_vhost_crypto_driver_start`` to be called
515   instead of ``rte_vhost_driver_start`` by crypto applications.
516
517 * cryptodev: The structure ``rte_crypto_sym_vec`` is updated to support both
518   cpu_crypto synchronous operations and asynchronous raw data-path APIs.
519
520 * cryptodev: ``RTE_CRYPTO_AEAD_LIST_END`` from ``enum rte_crypto_aead_algorithm``,
521   ``RTE_CRYPTO_CIPHER_LIST_END`` from ``enum rte_crypto_cipher_algorithm`` and
522   ``RTE_CRYPTO_AUTH_LIST_END`` from ``enum rte_crypto_auth_algorithm``
523   are removed to avoid future ABI breakage while adding new algorithms.
524
525 * scheduler: Renamed functions ``rte_cryptodev_scheduler_slave_attach``,
526   ``rte_cryptodev_scheduler_slave_detach`` and
527   ``rte_cryptodev_scheduler_slaves_get`` to
528   ``rte_cryptodev_scheduler_worker_attach``,
529   ``rte_cryptodev_scheduler_worker_detach`` and
530   ``rte_cryptodev_scheduler_workers_get`` accordingly.
531
532 * scheduler: Renamed the configuration value
533   ``RTE_CRYPTODEV_SCHEDULER_MAX_NB_SLAVES`` to
534   ``RTE_CRYPTODEV_SCHEDULER_MAX_NB_WORKERS``.
535
536 * security: The ``hfn_ovrd`` field in ``rte_security_pdcp_xform`` is changed from
537   ``uint32_t`` to ``uint8_t`` so that a new field ``sdap_enabled`` can be added
538   to support SDAP.
539
540 * security: The API ``rte_security_session_create`` is updated to take two
541   mempool objects: one for session and other for session private data.
542   So the application need to create two mempools and get the size of session
543   private data using API ``rte_security_session_get_size`` for private session
544   mempool.
545
546 * ipsec: ``RTE_SATP_LOG2_NUM`` has been dropped from ``enum`` and
547   subsequently moved ``rte_ipsec`` lib from experimental to stable.
548
549 * baseband/fpga_lte_fec: Renamed function ``fpga_lte_fec_configure`` to
550   ``rte_fpga_lte_fec_configure`` and structure ``fpga_lte_fec_conf`` to
551   ``rte_fpga_lte_fec_conf``.
552
553 * baseband/fpga_5gnr_fec: Renamed function ``fpga_5gnr_fec_configure`` to
554   ``rte_fpga_5gnr_fec_configure`` and structure ``fpga_5gnr_fec_conf`` to
555   ``rte_fpga_5gnr_fec_conf``.
556
557 * rawdev: Added a structure size parameter to the functions
558   ``rte_rawdev_queue_setup()``, ``rte_rawdev_queue_conf_get()``,
559   ``rte_rawdev_info_get()`` and ``rte_rawdev_configure()``,
560   allowing limited driver type-checking and ABI compatibility.
561
562 * rawdev: Changed the return type of the function ``rte_dev_info_get()``
563   and the function ``rte_rawdev_queue_conf_get()``
564   from ``void`` to ``int`` allowing the return of error codes from drivers.
565
566 * rawdev: The running of a drivers ``selftest()`` function can now be done
567   using the ``rawdev_autotest`` command in the ``dpdk-test`` binary. This
568   command now calls the self-test function for each rawdev found on the
569   system, and does not require a specific command per device type.
570   Following this change, the ``ioat_rawdev_autotest`` command has been
571   removed as no longer needed.
572
573 * raw/ioat: As noted above, the ``rte_ioat_do_copies()`` and
574   ``rte_ioat_completed_copies()`` functions have been renamed to
575   ``rte_ioat_perform_ops()`` and ``rte_ioat_completed_ops()`` respectively.
576
577 * stack: the experimental tag has been dropped from the stack library, and its
578   interfaces are considered stable as of DPDK 20.11.
579
580 * bpf: ``RTE_BPF_XTYPE_NUM`` has been dropped from ``rte_bpf_xtype``.
581
582 * gso: Changed ``rte_gso_segment`` behaviour and return value:
583
584   * ``pkt`` is not saved to ``pkts_out[0]`` if not GSOed.
585   * Return 0 instead of 1 for the above case.
586   * ``pkt`` is not freed, no matter whether it is GSOed, leaving to the caller.
587
588 * acl: ``RTE_ACL_CLASSIFY_NUM`` enum value has been removed.
589   This enum value was not used inside DPDK, while it prevented the addition of new
590   classify algorithms without causing an ABI breakage.
591
592 * sched: Added ``subport_profile_id`` as an argument
593   to function ``rte_sched_subport_config``.
594
595 * sched: Removed ``tb_rate``, ``tc_rate``, ``tc_period`` and ``tb_size``
596   from ``struct rte_sched_subport_params``.
597
598
599 ABI Changes
600 -----------
601
602 * eal: Removed the unimplemented function ``rte_dump_registers()``.
603
604 * ``ethdev`` changes
605
606   * The following device operation function pointers moved
607     from ``struct eth_dev_ops`` to ``struct rte_eth_dev``:
608
609     * ``eth_rx_queue_count_t       rx_queue_count;``
610     * ``eth_rx_descriptor_done_t   rx_descriptor_done;``
611     * ``eth_rx_descriptor_status_t rx_descriptor_status;``
612     * ``eth_tx_descriptor_status_t tx_descriptor_status;``
613
614   * ``struct eth_dev_ops`` is no longer accessible by applications,
615     which was already an internal data structure.
616
617   * ``ethdev`` internal functions are marked with ``__rte_internal`` tag.
618
619   * Added extensions' attributes to struct ``rte_flow_item_ipv6``.
620     A set of additional values added to struct, indicating the existence of
621     every defined extension header type.
622     Applications should use the new values for identification of existing
623     extensions in the packet header.
624
625   * Added fields ``rx_seg`` and ``rx_nseg`` to ``rte_eth_rxconf`` structure
626     to provide extended description of the receiving buffer.
627
628   * ``struct rte_eth_hairpin_conf`` has two new members:
629
630     * ``uint32_t tx_explicit:1;``
631     * ``uint32_t manual_bind:1;``
632
633   * Added new field ``has_vlan`` to structure ``rte_flow_item_eth``,
634     indicating that packet header contains at least one VLAN.
635
636   * Added new field ``has_more_vlan`` to the structure
637     ``rte_flow_item_vlan``, indicating that packet header contains
638     at least one more VLAN, after this VLAN.
639
640 * eventdev: The following structures are modified to support DLB/DLB2 PMDs
641   and future extensions:
642
643   * ``rte_event_dev_info``
644   * ``rte_event_dev_config``
645   * ``rte_event_port_conf``
646
647 * sched: Added new fields to ``struct rte_sched_subport_port_params``.
648
649 * lpm: Removed fields other than ``tbl24`` and ``tbl8`` from the struct
650   ``rte_lpm``. The removed fields were made internal.
651
652
653 Tested Platforms
654 ----------------
655
656 * Intel\ |reg| platforms with Intel\ |reg| NICs combinations
657
658   * CPU
659
660     * Intel\ |reg| Atom\ |trade| CPU C3758 @ 2.20GHz
661     * Intel\ |reg| Atom\ |trade| CPU C3858 @ 2.00GHz
662     * Intel\ |reg| Atom\ |trade| CPU C3958 @ 2.00GHz
663     * Intel\ |reg| Xeon\ |reg| CPU D-1541 @ 2.10GHz
664     * Intel\ |reg| Xeon\ |reg| CPU D-1553N @ 2.30GHz
665     * Intel\ |reg| Xeon\ |reg| CPU E5-2680 0 @ 2.70GHz
666     * Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
667     * Intel\ |reg| Xeon\ |reg| CPU E5-2699 v3 @ 2.30GHz
668     * Intel\ |reg| Xeon\ |reg| CPU E5-2699 v4 @ 2.20GHz
669     * Intel\ |reg| Xeon\ |reg| Gold 5218N CPU @ 2.30GHz
670     * Intel\ |reg| Xeon\ |reg| Gold 6139 CPU @ 2.30GHz
671     * Intel\ |reg| Xeon\ |reg| Gold 6252N CPU @ 2.30GHz
672     * Intel\ |reg| Xeon\ |reg| Platinum 8180 CPU @ 2.50GHz
673     * Intel\ |reg| Xeon\ |reg| Platinum 8280M CPU @ 2.70GHz
674
675   * OS:
676
677     * CentOS 8.2
678     * Fedora 33
679     * FreeBSD 12.1
680     * OpenWRT 19.07.3
681     * Red Hat Enterprise Linux Server release 8.2
682     * Suse 15 SP1
683     * Ubuntu 18.04
684     * Ubuntu 20.04
685     * Ubuntu 20.10
686
687   * NICs:
688
689     * Intel\ |reg| Ethernet Controller E810-C for SFP (4x25G)
690
691       * Firmware version: 2.30 0x80004dcf 1.2839.0
692       * Device id (pf/vf): 8086:1593 / 8086:1889
693       * Driver version: 1.3.0 (ice)
694       * OS Default DDP: 1.3.20.0
695       * COMMS DDP: 1.3.24.0
696
697     * Intel\ |reg| Ethernet Controller E810-C for QSFP (2x100G)
698
699       * Firmware version: 2.30 0x80004dd0 1.2839.0
700       * Device id (pf/vf): 8086:1592 / 8086:1889
701       * Driver version: 1.3.0 (ice)
702       * OS Default DDP: 1.3.20.0
703       * COMMS DDP: 1.3.24.0
704
705     * Intel\ |reg| 82599ES 10 Gigabit Ethernet Controller
706
707       * Firmware version: 0x61bf0001
708       * Device id (pf/vf): 8086:10fb / 8086:10ed
709       * Driver version: 5.7.1 (ixgbe)
710
711     * Intel\ |reg| Corporation Ethernet Connection X552/X557-AT 10GBASE-T
712
713       * Firmware version: 0x800003e7
714       * Device id (pf/vf): 8086:15ad / 8086:15a8
715       * Driver version: 5.1.0-k (ixgbe)
716
717     * Intel\ |reg| Corporation Ethernet Controller 10G X550T
718
719       * Firmware version: 0x80000482
720       * Device id (pf): 8086:1563
721       * Driver version: 5.7.1 (ixgbe)
722
723     * Intel\ |reg| Ethernet Converged Network Adapter X710-DA4 (4x10G)
724
725       * Firmware version: 8.00 0x80008b82 1.2766.0
726       * Device id (pf/vf): 8086:1572 / 8086:154c
727       * Driver version: 2.13.10 (i40e)
728
729     * Intel\ |reg| Corporation Ethernet Connection X722 for 10GbE SFP+ (4x10G)
730
731       * Firmware version: 5.00 0x800023c3 1.2766.0
732       * Device id (pf/vf): 8086:37d0 / 8086:37cd
733       * Driver version: 2.13.10 (i40e)
734
735     * Intel\ |reg| Corporation Ethernet Connection X722 for 10GBASE-T (2x10G)
736
737       * Firmware version: 4.10 0x80001a7a
738       * Device id (pf/vf): 8086:37d2 / 8086:37cd
739       * Driver version: 2.13.10 (i40e)
740
741     * Intel\ |reg| Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
742
743       * Firmware version: 8.00 0x80008c1a 1.2766.0
744       * Device id (pf/vf): 8086:158b / 8086:154c
745       * Driver version: 2.13.10 (i40e)
746
747     * Intel\ |reg| Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
748
749       * Firmware version: 8.00 0x80008b82 1.2766.0
750       * Device id (pf/vf): 8086:1583 / 8086:154c
751       * Driver version: 2.13.10 (i40e)
752
753     * Intel\ |reg| Corporation I350 Gigabit Network Connection
754
755       * Firmware version: 1.63, 0x80000cbc
756       * Device id (pf/vf): 8086:1521 / 8086:1520
757       * Driver version: 5.4.0-k (igb)
758
759     * Intel\ |reg| Corporation I210 Gigabit Network Connection
760
761       * Firmware version: 3.25, 0x800006eb
762       * Device id (pf): 8086:1533
763       * Driver version: 5.4.0-k (igb)
764
765     * Intel\ |reg| Ethernet Controller 10-Gigabit X540-AT2
766
767       * Firmware version: 0x800005f9
768       * Device id (pf): 8086:1528
769       * Driver version: 5.1.0-k (ixgbe)
770
771     * Intel\ |reg| Ethernet Converged Network Adapter X710-T2L
772
773       * Firmware version: 8.00 0x80008d10 1.2766.0
774       * Device id (pf): 8086:15ff
775       * Driver version: 2.13.10 (i40e)
776
777 * Intel\ |reg| platforms with Mellanox\ |reg| NICs combinations
778
779   * CPU:
780
781     * Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
782     * Intel\ |reg| Xeon\ |reg| CPU E5-2697A v4 @ 2.60GHz
783     * Intel\ |reg| Xeon\ |reg| CPU E5-2697 v3 @ 2.60GHz
784     * Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
785     * Intel\ |reg| Xeon\ |reg| CPU E5-2670 0 @ 2.60GHz
786     * Intel\ |reg| Xeon\ |reg| CPU E5-2650 v4 @ 2.20GHz
787     * Intel\ |reg| Xeon\ |reg| CPU E5-2640 @ 2.50GHz
788     * Intel\ |reg| Xeon\ |reg| CPU E5-2650 0 @ 2.00GHz
789     * Intel\ |reg| Xeon\ |reg| CPU E5-2620 v4 @ 2.10GHz
790
791   * OS:
792
793     * Red Hat Enterprise Linux release 8.2 (Ootpa)
794     * Red Hat Enterprise Linux Server release 7.8 (Maipo)
795     * Red Hat Enterprise Linux Server release 7.6 (Maipo)
796     * Red Hat Enterprise Linux Server release 7.5 (Maipo)
797     * Red Hat Enterprise Linux Server release 7.4 (Maipo)
798     * Red Hat Enterprise Linux Server release 7.3 (Maipo)
799     * Red Hat Enterprise Linux Server release 7.2 (Maipo)
800     * Ubuntu 20.04
801     * Ubuntu 18.04
802     * Ubuntu 16.04
803     * SUSE Enterprise Linux 15 SP2
804     * SUSE Enterprise Linux 12 SP4
805
806   * OFED:
807
808     * MLNX_OFED 5.2-0.3.3.0 and above
809     * MLNX_OFED 5.1-2.5.8.0
810
811   * upstream kernel:
812
813     * Linux 5.10.0-rc2 and above
814
815   * rdma-core:
816
817     * rdma-core-31.0-1 and above
818
819   * NICs:
820
821     * Mellanox\ |reg| ConnectX\ |reg|-3 Pro 40G MCX354A-FCC_Ax (2x40G)
822
823       * Host interface: PCI Express 3.0 x8
824       * Device ID: 15b3:1007
825       * Firmware version: 2.42.5000
826
827     * Mellanox\ |reg| ConnectX\ |reg|-3 Pro 40G MCX354A-FCCT (2x40G)
828
829       * Host interface: PCI Express 3.0 x8
830       * Device ID: 15b3:1007
831       * Firmware version: 2.42.5000
832
833     * Mellanox\ |reg| ConnectX\ |reg|-4 Lx 25G MCX4121A-ACAT (2x25G)
834
835       * Host interface: PCI Express 3.0 x8
836       * Device ID: 15b3:1015
837       * Firmware version: 14.29.0476 and above
838
839     * Mellanox\ |reg| ConnectX\ |reg|-4 Lx 50G MCX4131A-GCAT (1x50G)
840
841       * Host interface: PCI Express 3.0 x8
842       * Device ID: 15b3:1015
843       * Firmware version: 14.29.0476 and above
844
845     * Mellanox\ |reg| ConnectX\ |reg|-5 100G MCX516A-CCAT (2x100G)
846
847       * Host interface: PCI Express 3.0 x16
848       * Device ID: 15b3:1017
849       * Firmware version: 16.29.0476 and above
850
851     * Mellanox\ |reg| ConnectX\ |reg|-5 100G MCX556A-ECAT (2x100G)
852
853       * Host interface: PCI Express 3.0 x16
854       * Device ID: 15b3:1017
855       * Firmware version: 16.29.0476 and above
856
857     * Mellanox\ |reg| ConnectX\ |reg|-5 100G MCX556A-EDAT (2x100G)
858
859       * Host interface: PCI Express 3.0 x16
860       * Device ID: 15b3:1017
861       * Firmware version: 16.29.0476 and above
862
863     * Mellanox\ |reg| ConnectX\ |reg|-5 Ex EN 100G MCX516A-CDAT (2x100G)
864
865       * Host interface: PCI Express 4.0 x16
866       * Device ID: 15b3:1019
867       * Firmware version: 16.29.0476 and above
868
869     * Mellanox\ |reg| ConnectX\ |reg|-6 Dx EN 100G MCX623106AN-CDAT (2x100G)
870
871       * Host interface: PCI Express 4.0 x16
872       * Device ID: 15b3:101d
873       * Firmware version: 22.29.0476 and above
874
875     * Mellanox\ |reg| ConnectX\ |reg|-6 Lx EN 25G MCX631102AN-ADAT (2x25G)
876
877       * Host interface: PCI Express 4.0 x8
878       * Device ID: 15b3:101f
879       * Firmware version: 26.29.0470 and above
880
881 * Mellanox\ |reg| BlueField\ |reg| SmartNIC
882
883   * Mellanox\ |reg| BlueField\ |reg| 2 SmartNIC MT41686 - MBF2H332A-AEEOT (2x25G)
884
885     * Host interface: PCI Express 3.0 x16
886     * Device ID: 15b3:a2d2
887     * Firmware version: 24.29.0476 and above
888
889   * Embedded software:
890
891     * CentOS Linux release 7.6.1810 (AltArch)
892     * MLNX_OFED 5.2-0.3.2 and above
893     * DPDK application running on Arm cores
894
895 * Intel\ |reg| platforms with Broadcom\ |reg| NICs combinations
896
897   * CPU:
898
899     * Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
900     * Intel\ |reg| Xeon\ |reg| CPU E5-2667 v3 @ 3.20GHz
901     * Intel\ |reg| Xeon\ |reg| CPU E5-2650 v2 @ 2.60GHz
902     * Intel\ |reg| Xeon\ |reg| Gold 6142 CPU @ 2.60GHz
903     * Intel\ |reg| Xeon\ |reg| Silver 4110 CPU @ 2.10GHz
904     * Intel\ |reg| Xeon\ |reg| CPU E3-1270 v3 @ 3.50GHz
905     * Intel\ |reg| Xeon\ |reg| Gold 6134M CPU @ 3.20GHz
906
907   * OS:
908
909     * Red Hat Enterprise Linux Server release 8.1
910     * Red Hat Enterprise Linux Server release 7.6
911     * Red Hat Enterprise Linux Server release 7.5
912     * Ubuntu 16.04
913     * Centos 8.1
914     * Centos 7.8
915     * Centos 7.7
916
917   * upstream kernel:
918
919     * Linux 5.3.4
920
921   * NICs:
922
923     * Broadcom\ |reg| NetXtreme-E\ |reg| Series P225p (2x25G)
924
925       * Host interface: PCI Express 3.0 x8
926       * Firmware version: 214.4.114.0 and above
927
928     * Broadcom\ |reg| NetXtreme-E\ |reg| Series P425p (4x25G)
929
930       * Host interface: PCI Express 3.0 x16
931       * Firmware version: 216.4.259.0 and above
932
933     * Broadcom\ |reg| NetXtreme-E\ |reg| Series P2100G (2x100G)
934
935       * Host interface: PCI Express 3.0 x16
936       * Firmware version: 216.1.259.0 and above
937
938     * Broadcom\ |reg| NetXtreme-E\ |reg| Series P425p (4x25G)
939
940       * Host interface: PCI Express 4.0 x16
941       * Firmware version: 216.1.259.0 and above
942
943     * Broadcom\ |reg| NetXtreme-E\ |reg| Series P2100G (2x100G)
944
945       * Host interface: PCI Express 4.0 x16
946       * Firmware version: 216.1.259.0 and above
947
948 * Broadcom\ |reg| NetXtreme-S\ |reg| Series SmartNIC
949
950   * Broadcom\ |reg| NetXtreme-S\ |reg| Series PS225-H16 SmartNIC (2x25G)
951
952     * Host interface: PCI Express 3.0 x8
953     * Firmware version: 217.0.59.0, 218.1.63.0
954
955   * Embedded software:
956
957     * Broadcom Yocto Linux
958     * Kernel version: 4.14.174
959     * DPDK application running on 8 Arm Cortex-A72 cores