Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_pmd_mlx5.h(3)		      DPDK		       rte_pmd_mlx5.h(3)

NAME
     rte_pmd_mlx5.h

SYNOPSIS
     #include <stdint.h>
     #include <rte_byteorder.h>
     #include <rte_compat.h>
     #include <rte_per_lcore.h>

   Data Structures
     struct rte_pmd_mlx5_geneve_tlv
     struct rte_pmd_mlx5_driver_event_cb_queue_info
     struct rte_pmd_mlx5_driver_event_cb_info

   Macros
     #define RTE_PMD_MLX5_DOMAIN_BIT_NIC_RX   (1 << 0)
     #define RTE_PMD_MLX5_DOMAIN_BIT_NIC_TX   (1 << 1)
     #define RTE_PMD_MLX5_DOMAIN_BIT_FDB   (1 << 2)
     #define RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN   (UINT16_MAX - 1000 + 1)
     #define MLX5_EXTERNAL_TX_QUEUE_ID_MIN   (UINT16_MAX - 1000 + 1)
     #define RTE_PMD_MLX5_LINEAR_HASH_TAG_INDEX   255
     #define RTE_PMD_MLX5_HOST_SHAPER_FLAG_AVAIL_THRESH_TRIGGERED   0
     #define RTE_PMD_MLX5_FLOW_ENGINE_FLAG_STANDBY_DUP_INGRESS	 RTE_BIT32(0)

   Typedefs
     typedef  void(*  rte_pmd_mlx5_driver_event_callback_t)  (uint16_t	port_id,
	 const	struct	rte_pmd_mlx5_driver_event_cb_info  *info,   const   void
	 *opaque)

   Enumerations
     enum	rte_pmd_mlx5_driver_event_cb_type	{      RTE_PMD_MLX5_DRI-
	 VER_EVENT_CB_TYPE_RXQ_CREATE, RTE_PMD_MLX5_DRIVER_EVENT_CB_TYPE_RXQ_DE-
	 STROY, RTE_PMD_MLX5_DRIVER_EVENT_CB_TYPE_TXQ_CREATE,  RTE_PMD_MLX5_DRI-
	 VER_EVENT_CB_TYPE_TXQ_DESTROY }

   Functions
     __rte_experimental  int rte_pmd_mlx5_get_dyn_flag_names (char *names[], un-
	 signed int n)
     __rte_experimental int rte_pmd_mlx5_sync_flow (uint16_t  port_id,	uint32_t
	 domains)
     __rte_experimental   int	rte_pmd_mlx5_external_rx_queue_id_map  (uint16_t
	 port_id, uint16_t dpdk_idx, uint32_t hw_idx)
     __rte_experimental  int  rte_pmd_mlx5_external_rx_queue_id_unmap  (uint16_t
	 port_id, uint16_t dpdk_idx)
     __rte_experimental   int	rte_pmd_mlx5_external_tx_queue_id_map  (uint16_t
	 port_id, uint16_t dpdk_idx, uint32_t hw_idx)
     __rte_experimental  int  rte_pmd_mlx5_external_tx_queue_id_unmap  (uint16_t
	 port_id, uint16_t dpdk_idx)
     __rte_experimental   int	rte_pmd_mlx5_host_shaper_config   (int	port_id,
	 uint8_t rate, uint32_t flags)
     __rte_experimental int rte_pmd_mlx5_external_sq_enable  (uint16_t	port_id,
	 uint32_t sq_num)
     __rte_experimental      int     rte_pmd_mlx5_flow_engine_set_mode	   (enum
	 rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags)
     __rte_experimental void *	rte_pmd_mlx5_create_geneve_tlv_parser  (uint16_t
	 port_id,   const  struct  rte_pmd_mlx5_geneve_tlv  tlv_list[],  uint8_t
	 nb_options)
     __rte_experimental int rte_pmd_mlx5_destroy_geneve_tlv_parser  (void  *han-
	 dle)
     __rte_experimental  int  rte_pmd_mlx5_rxq_dump_contexts  (uint16_t port_id,
	 uint16_t queue_id, const char *filename)
     __rte_experimental int  rte_pmd_mlx5_txq_dump_contexts  (uint16_t	port_id,
	 uint16_t queue_id, const char *filename)
     __rte_experimental  int rte_pmd_mlx5_external_sq_disable (uint16_t port_id,
	 uint32_t sq_num)
     __rte_experimental        int	   rte_pmd_mlx5_driver_event_cb_register
	 (rte_pmd_mlx5_driver_event_callback_t cb, void *opaque)
     __rte_experimental        int	 rte_pmd_mlx5_driver_event_cb_unregister
	 (rte_pmd_mlx5_driver_event_callback_t cb)
     __rte_experimental void rte_pmd_mlx5_disable_steering (void)
     __rte_experimental int rte_pmd_mlx5_enable_steering (void)

Detailed Description
     MLX5 public header.

     This interface provides the ability to support private PMD dynamic flags.

     Definition in file rte_pmd_mlx5.h.

Macro Definition Documentation
   #define RTE_PMD_MLX5_DOMAIN_BIT_NIC_RX   (1 << 0)
     NIC RX domain bit mask.

     Definition at line 45 of file rte_pmd_mlx5.h.

   #define RTE_PMD_MLX5_DOMAIN_BIT_NIC_TX   (1 << 1)
     NIC TX domain bit mask.

     Definition at line 46 of file rte_pmd_mlx5.h.

   #define RTE_PMD_MLX5_DOMAIN_BIT_FDB	 (1 << 2)
     FDB (TX + RX) domain bit mask.

     Definition at line 47 of file rte_pmd_mlx5.h.

   #define RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN   (UINT16_MAX - 1000 + 1)
     External Rx queue rte_flow index minimal value.

     Definition at line 73 of file rte_pmd_mlx5.h.

   #define MLX5_EXTERNAL_TX_QUEUE_ID_MIN   (UINT16_MAX - 1000 + 1)
     External Tx queue rte_flow index minimal value.

     Definition at line 78 of file rte_pmd_mlx5.h.

   #define RTE_PMD_MLX5_LINEAR_HASH_TAG_INDEX	255
     Tag level to set the linear hash index.

     Definition at line 83 of file rte_pmd_mlx5.h.

   #define RTE_PMD_MLX5_HOST_SHAPER_FLAG_AVAIL_THRESH_TRIGGERED   0
     The rate of the host port shaper will  be	updated  directly  at  the  next
     available	descriptor threshold event to the rate that comes with this flag
     set; set rate 0 to disable this rate update. Unset this flag to update  the
     rate  of  the host port shaper directly in the API call; use rate 0 to dis-
     able the current shaper.

     Definition at line 178 of file rte_pmd_mlx5.h.

   #define RTE_PMD_MLX5_FLOW_ENGINE_FLAG_STANDBY_DUP_INGRESS   RTE_BIT32(0)
     When set on the flow engine of a standby process, ingress flow  rules  will
     be effective in active and standby processes, so the ingress traffic may be
     duplicated.

     Definition at line 228 of file rte_pmd_mlx5.h.

Typedef Documentation
   typedef void(* rte_pmd_mlx5_driver_event_callback_t) (uint16_t port_id, const
     struct rte_pmd_mlx5_driver_event_cb_info *info, const void *opaque)
     Prototype of the callback called on mlx5 driver events.

     Definition at line 482 of file rte_pmd_mlx5.h.

Enumeration Type Documentation
   enum rte_pmd_mlx5_driver_event_cb_type
     Type of mlx5 driver event for which custom callback is called.

     Enumerator

     RTE_PMD_MLX5_DRIVER_EVENT_CB_TYPE_RXQ_CREATE
	    Called after HW Rx queue is created.

     RTE_PMD_MLX5_DRIVER_EVENT_CB_TYPE_RXQ_DESTROY
	    Called before HW Rx queue will be destroyed.

     RTE_PMD_MLX5_DRIVER_EVENT_CB_TYPE_TXQ_CREATE
	    Called after HW Tx queue is created.

     RTE_PMD_MLX5_DRIVER_EVENT_CB_TYPE_TXQ_DESTROY
	    Called before HW Tx queue will be destroyed.

     Definition at line 423 of file rte_pmd_mlx5.h.

Function Documentation
   __rte_experimental  int  rte_pmd_mlx5_get_dyn_flag_names (char * names[], un-
     signed int n)
     Returns the dynamic flags name, that are supported.

     Parameters
	 names Array that is used to return the supported dynamic flags names.
	 n The number of elements in the names array.

     Returns
	 The number of dynamic flags that were copied if  not  negative.  Other-
	 wise:

	 * ENOMEM - not enough entries in the array

	 * EINVAL - invalid array entry

   __rte_experimental int rte_pmd_mlx5_sync_flow (uint16_t port_id, uint32_t do-
     mains)
     Synchronize  the  flows  to make them take effort on hardware. It only sup-
     ports DR flows now. For DV and Verbs flows, there is no need to  call  this
     function, and a success will return directly in case of Verbs.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 domains Refer to '/usr/include/infiniband/mlx5dv.h'. Bitmask of domains
	 in  which  the  synchronization will be done. RTE_PMD_MLX5_DOMAIN_BIT_*
	 macros are used to specify the domains. An ADD or OR operation could be
	 used to synchronize flows in more than one domain per call.

     Returns

	 * (0) if successful.

	 * Negative value if an error.

   __rte_experimental	int   rte_pmd_mlx5_external_rx_queue_id_map    (uint16_t
     port_id, uint16_t dpdk_idx, uint32_t hw_idx)
     Update  mapping  between  rte_flow queue index (16 bits) and HW queue index
     (32 bits) for RxQs which is created outside the PMD.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 dpdk_idx Queue index in rte_flow.
	 hw_idx Queue index in hardware.

     Returns
	 0 on success, a negative errno value otherwise and  rte_errno	is  set.
	 Possible values for rte_errno:

	 * EEXIST - a mapping with the same rte_flow index already exists.

	 * EINVAL - invalid rte_flow index, out of range.

	 * ENODEV - there is no Ethernet device for this port id.

	 * ENOTSUP - the port doesn't support external RxQ.

   __rte_experimental	int   rte_pmd_mlx5_external_rx_queue_id_unmap  (uint16_t
     port_id, uint16_t dpdk_idx)
     Remove mapping between rte_flow queue index (16 bits) and	HW  queue  index
     (32 bits) for RxQs which is created outside the PMD.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 dpdk_idx Queue index in rte_flow.

     Returns
	 0  on	success,  a negative errno value otherwise and rte_errno is set.
	 Possible values for rte_errno:

	 * EINVAL - invalid index, out of range, still referenced or doesn't ex-
	   ist.

	 * ENODEV - there is no Ethernet device for this port id.

	 * ENOTSUP - the port doesn't support external RxQ.

   __rte_experimental	int   rte_pmd_mlx5_external_tx_queue_id_map    (uint16_t
     port_id, uint16_t dpdk_idx, uint32_t hw_idx)
     Update mapping between rte_flow Tx queue index (16 bits) and HW queue index
     (32 bits) for TxQs which is created outside the PMD.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 dpdk_idx Queue index in rte_flow.
	 hw_idx Queue index in hardware.

     Returns
	 0  on	success,  a negative errno value otherwise and rte_errno is set.
	 Possible values for rte_errno:

	 * EEXIST - a mapping with the same rte_flow index already exists.

	 * EINVAL - invalid rte_flow index, out of range.

	 * ENODEV - there is no Ethernet device for this port id.

	 * ENOTSUP - the port doesn't support external TxQ.

   __rte_experimental  int   rte_pmd_mlx5_external_tx_queue_id_unmap   (uint16_t
     port_id, uint16_t dpdk_idx)
     Remove mapping between rte_flow Tx queue index (16 bits) and HW queue index
     (32 bits) for TxQs which is created outside the PMD.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 dpdk_idx Queue index in rte_flow.

     Returns
	 0  on	success,  a negative errno value otherwise and rte_errno is set.
	 Possible values for rte_errno:

	 * EINVAL - invalid index, out of range, still referenced or doesn't ex-
	   ist.

	 * ENODEV - there is no Ethernet device for this port id.

	 * ENOTSUP - the port doesn't support external TxQ.

   __rte_experimental int rte_pmd_mlx5_host_shaper_config (int port_id,  uint8_t
     rate, uint32_t flags)
     Configure	a  HW shaper to limit Tx rate for a host port. The configuration
     will affect all the ethdev ports belonging to the same rte_device.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 rate Unit is 100Mbps, setting the rate to 0 disables the shaper.
	 flags Host shaper flags (see RTE_PMD_MLX5_HOST_SHAPER_FLAG_*).

     Returns
	 0 : operation success. Otherwise:

	 * ENOENT - no ibdev interface.

	 * EBUSY - the register access unit is busy.

	 * EIO - the register access command meets IO error.

   __rte_experimental  int  rte_pmd_mlx5_external_sq_enable  (uint16_t	port_id,
     uint32_t sq_num)
     Enable traffic for external SQ.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 sq_num SQ HW number.

     Returns
	 0  on	success,  a negative errno value otherwise and rte_errno is set.
	 Possible values for rte_errno:

	 * EINVAL - invalid sq_number or port type.

	 * ENODEV - there is no Ethernet device for this port id.

   __rte_experimental	   int	    rte_pmd_mlx5_flow_engine_set_mode	   (enum
     rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags)
     Warning
	 EXPERIMENTAL: this API may change without prior notice

     Set  the  flow  engine  mode of the process to active or standby, affecting
     network traffic handling.

     If one device does not support this operation or fails, the whole operation
     is failed and rolled back.

     It is forbidden to have multiple flow engines with  the  same  mode  unless
     only one of them is configured to handle the traffic.

     The  application's flow engine is active by default. The configuration from
     the active flow engine is effective  immediately  while  the  configuration
     from  the	standby  flow engine is queued by hardware. When configuring the
     device from a standby flow engine, it has no effect except for below situa-
     tions:

     * traffic not handled by the active flow engine configuration

     * no active flow engine

     When flow engine of a process is changed from a standby to an active  mode,
     all  preceding configurations that are queued by hardware should become ef-
     fective immediately. Before mode transition, all the traffic handling  con-
     figurations set by the active flow engine should be flushed first.

     In  summary,  the	operations are expected to happen in this order in 'old'
     and 'new' applications: device: already configured by the	old  application
     new:  start  as  active new: probe the same device new: set as standby new:
     configure the device device: has configurations from old and  new	applica-
     tions  old: clear its device configuration device: has only 1 configuration
     from new application new: set as active device: downtime for connecting all
     to the new application old: shutdown

     Parameters
	 mode The desired mode (see rte_pmd_mlx5_flow_engine_mode).
	 flags Mode specific flags (see RTE_PMD_MLX5_FLOW_ENGINE_FLAG_*).

     Returns
	 Positive value on success, -rte_errno value on error:

	 * (> 0) Number of switched devices.

	 * (-EINVAL) if error happen and rollback internally.

	 * (-EPERM) if operation failed and can't recover.

   __rte_experimental  void  *	rte_pmd_mlx5_create_geneve_tlv_parser  (uint16_t
     port_id,  const  struct  rte_pmd_mlx5_geneve_tlv tlv_list[], uint8_t nb_op-
     tions)
     Creates GENEVE TLV parser for the selected  port.	This  function	must  be
     called before first use of GENEVE option.

     This API is port oriented, but the configuration is done once for all ports
     under the same physical device. Each port should call this API before using
     GENEVE  OPT item, but it must use the same options in the same order inside
     the list.

     Each physical device has 7 DWs for GENEVE TLV options. Each nonzero element
     in 'match_data_mask' array consumes one DW, and choosing matchable mode for
     class consumes additional one. Calling this API for second port under  same
     physical device doesn't consume more DW, it uses same configuration.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 tlv_list A list of GENEVE TLV options to create parser for them.
	 nb_options The number of options in TLV list.

     Returns
	 A  pointer  to  TLV  handle on success, NULL otherwise and rte_errno is
	 set. Possible values for rte_errno:

	 * ENOMEM - not enough memory to create GENEVE TLV parser.

	 * EEXIST - this port already has GENEVE TLV parser or another port  un-
	   der same physical device has already prepared a different parser.

	 * EINVAL - invalid GENEVE TLV requested.

	 * ENODEV - there is no Ethernet device for this port id.

	 * ENOTSUP - the port doesn't support GENEVE TLV parsing.

   __rte_experimental int rte_pmd_mlx5_destroy_geneve_tlv_parser (void * handle)

     Destroy  GENEVE  TLV  parser  for	the selected port. This function must be
     called after last use of GENEVE option and before port closing.

     Parameters
	 handle Handle for the GENEVE TLV parser object to be destroyed.

     Returns
	 0 on success, a negative errno value otherwise and  rte_errno	is  set.
	 Possible values for rte_errno:

	 * EINVAL - invalid handle.

	 * ENOENT - there is no valid GENEVE TLV parser in this handle.

	 * EBUSY - one of options is in used by template table.

   __rte_experimental	int  rte_pmd_mlx5_rxq_dump_contexts  (uint16_t	port_id,
     uint16_t queue_id, const char * filename)
     Dump Rx Queue Context for a given port/queue

     Parameters
	 port_id Port ID
	 queue_id Queue ID
	 filename Name of file to dump the Rx Queue Context

     Returns
	 0 for success, non-zero value depending on failure type

   __rte_experimental  int  rte_pmd_mlx5_txq_dump_contexts  (uint16_t	port_id,
     uint16_t queue_id, const char * filename)
     Dump Tx Queue Context for a given port/queue

     Parameters
	 port_id Port ID
	 queue_id Queue ID
	 filename Name of file to dump the Tx Queue Context

     Returns
	 0 for success, non-zero value depending on failure type

   __rte_experimental  int  rte_pmd_mlx5_external_sq_disable  (uint16_t port_id,
     uint32_t sq_num)
     Disable traffic for external SQ. Should be invoked  by  application  before
     destroying the external SQ.

     Parameters
	 port_id The port identifier of the Ethernet device.
	 sq_num SQ HW number.

     Returns
	 0  on	success,  a negative errno value otherwise and rte_errno is set.
	 Possible values for rte_errno:

	 * EINVAL - invalid sq_number or port type.

	 * ENODEV - there is no Ethernet device for this port id.

   __rte_experimental	      int	   rte_pmd_mlx5_driver_event_cb_register
     (rte_pmd_mlx5_driver_event_callback_t cb, void * opaque)
     Register mlx5 driver event callback.

     mlx5  PMD	configures  HW	through interfaces exposed by rdma-core and mlx5
     kernel driver. Any HW object created this way may	be  used  by  other  li-
     braries  or  applications.  This  function allows application to register a
     custom callback which will be called whenever mlx5 PMD performs some opera-
     tion  (driver  event)  on	 a   managed   HW   objects.   rte_pmd_mlx5_dri-
     ver_event_cb_type defines exposed driver events.

     This  function  can be called multiple times with different callbacks. mlx5
     PMD will register all of them and all of them will be called for  triggered
     driver events.

     This function can be called:

     * before  or  after  rte_eal_init (potentially in a constructor function as
       well),

     * before or after any mlx5 port is probed.

     If this function is called when mlx5 ports (at least one) exist, then  pro-
     vided callback will be immediately called for all applicable driver events,
     for all existing mlx5 ports.

     This  function  is lock-free and it is assumed that it won't be called con-
     currently with other functions from ethdev API used to configure any of the
     mlx5 ports. It is the responsibility of the application to enforce this.

     Registered callbacks might be  called  during  control  path  configuration
     triggered	by  DPDK API. It is the user's responsibility to prevent calling
     more configurations by the DPDK API from the callback itself.

     mlx5 PMD registers a destructor (through RTE_FINI)  which	will  unregister
     all known callbacks.

     Parameters
	 cb Pointer to callback.
	 opaque Opaque pointer which will be passed as an argument to cb on each
	 event.

     Returns

	 * 0 if callback was successfully registered.

	 * (-EINVAL) if cb is NULL.

	 * (-EEXIST) if cb was already registered.

	 * (-ENOMEM) if failed to allocate memory for callback entry.

   __rte_experimental	      int	 rte_pmd_mlx5_driver_event_cb_unregister
     (rte_pmd_mlx5_driver_event_callback_t cb)
     Unregister driver event callback.

     Unregisters a mlx5 driver event callback which  was  previously  registered
     through rte_pmd_mlx5_driver_event_cb_unregister.

     This  function  is lock-free and it is assumed that it won't be called con-
     currently with other functions from ethdev API used to configure any of the
     mlx5 ports. It is the responsibility of the application to enforce this.

     Parameters
	 cb Pointer to callback.

     Returns

	 * 0 if callback was successfully unregistered or if  no  such	callback
	   was registered.

	 * (-EINVAL) if cb is NULL.

   __rte_experimental void rte_pmd_mlx5_disable_steering (void)
     Disable flow steering for all mlx5 ports.

     In mlx5 PMD, HW flow rules are generally used in 2 ways:

     *

     *

     In  mlx5  PMD language, configuring flow rules is known as configuring flow
     steering.

     If an application wants to use any other  library	compatible  with  NVIDIA
     hardware  to  configure  flow steering or delegate flow steering to another
     process, the application can call this function to  disable  flow	steering
     globally for all mlx5 ports.

     Information  required  to configure flow steering in such a way that exter-
     nally created flow rules would forward/match traffic to DPDK-managed  Rx/Tx
     queues can be extracted through rte_pmd_mlx5_driver_event_cb_register API.

     This function can be called:

     * before or after rte_eal_init.

     * before or after any mlx5 port is probed.

     If  this  function  is  called  when  mlx5 ports (at least one) exist, then
     steering will be disabled for all existing mlx5 port. This will  invalidate
     ALL  handles  to  objects return from flow API for these ports (for example
     handles to flow rules, indirect actions, template tables).

     This function is lock-free and it is assumed that it won't be  called  con-
     currently with other functions from ethdev API used to configure any of the
     mlx5 ports. It is the responsibility of the application to enforce this.

   __rte_experimental int rte_pmd_mlx5_enable_steering (void)
     Enable flow steering for mlx5 ports.

     This function reverses the effects of rte_pmd_mlx5_disable_steering.

     It  can  be called if and only if there are no mlx5 ports known by DPDK, so
     in case if rte_pmd_mlx5_disable_steering was previously called the applica-
     tion has to remove mlx5 devices, call this function and re-probe  the  mlx5
     devices.

     Returns

	 * 0  -  Flow  steering was successfully enabled or it flow steering was
	   never disabled.

	 * (-EBUSY) - There are mlx5 ports probed and re-enabling steering  can-
	   not be done safely.

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026	       rte_pmd_mlx5.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_PMD_MLX5_DOMAIN_BIT_FDB&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help