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

  
 
  

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

NAME
     rte_mbuf_dyn.h

SYNOPSIS
     #include <stdio.h>
     #include <stdint.h>
     #include <rte_stdatomic.h>

   Data Structures
     struct rte_mbuf_dynfield
     struct rte_mbuf_dynflag

   Macros
     #define RTE_MBUF_DYN_NAMESIZE   64
     #define  RTE_MBUF_DYNFIELD(m,   offset,   type)	((type)((uintptr_t)(m) +
	 (offset)))
     #define RTE_MBUF_DYNFIELD_HISTORY_NAME   'rte_mbuf_dynfield_history'
     #define RTE_MBUF_DYNFIELD_TIMESTAMP_NAME	'rte_dynfield_timestamp'
     #define RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME   'rte_dynflag_rx_timestamp'
     #define RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME   'rte_dynflag_tx_timestamp'
     #define RTE_MBUF_DYNFIELD_IP_REASSEMBLY_NAME   'rte_dynfield_ip_reassembly'

   Functions
     int rte_mbuf_dynfield_register (const struct rte_mbuf_dynfield *params)
     int  rte_mbuf_dynfield_register_offset  (const   struct   rte_mbuf_dynfield
	 *params, size_t offset)
     int  rte_mbuf_dynfield_lookup  (const  char *name, struct rte_mbuf_dynfield
	 *params)
     int rte_mbuf_dynflag_register (const struct rte_mbuf_dynflag *params)
     int   rte_mbuf_dynflag_register_bitnum   (const   struct	rte_mbuf_dynflag
	 *params, unsigned int bitnum)
     int  rte_mbuf_dynflag_lookup  (const  char  *name,  struct rte_mbuf_dynflag
	 *params)
     void rte_mbuf_dyn_dump (FILE *out)
     typedef (uint64_t) rte_mbuf_history_t
     int   rte_mbuf_dyn_rx_timestamp_register	(int   *field_offset,	uint64_t
	 *rx_flag)
     int   rte_mbuf_dyn_tx_timestamp_register	(int   *field_offset,	uint64_t
	 *tx_flag)

Detailed Description
     RTE Mbuf dynamic fields and flags

     Many DPDK features require to store data inside the mbuf. As  the	room  in
     mbuf structure is limited, it is not possible to have a field for each fea-
     ture. Also, changing fields in the mbuf structure can break the API or ABI.

     This  module  addresses this issue, by enabling the dynamic registration of
     fields or flags:

     * a dynamic field is a named area in the rte_mbuf structure, with	a  given
       size (>= 1 byte) and alignment constraint.

     * a  dynamic  flag  is  a	named  bit  in the rte_mbuf structure, stored in
       mbuf->ol_flags.

     The placement of the field or flag can be automatic, in this case the zones
     that have the smallest size and alignment constraint are selected in prior-
     ity. Else, a specific field offset or flag  bit  number  can  be  requested
     through the API.

     The  typical use case is when a specific offload feature requires to regis-
     ter a dedicated offload field in the mbuf structure, and  adding  a  static
     field or flag is not justified.

     Example of use:

     * A  rte_mbuf_dynfield  structure	is defined, containing the parameters of
       the dynamic  field  to  be  registered:	const  struct  rte_mbuf_dynfield
       rte_dynfield_my_feature = { ... };

     * The  application  initializes  the PMD, and asks for this feature at port
       initialization by passing RTE_ETH_RX_OFFLOAD_MY_FEATURE in  rxconf.  This
       will make the PMD to register the field by calling rte_mbuf_dynfield_reg-
       ister(&rte_dynfield_my_feature). The PMD stores the returned offset.

     * The application that uses the offload feature also registers the field to
       retrieve the same offset.

     * When  the  PMD  receives  a  packet, it can set the field: *RTE_MBUF_DYN-
       FIELD(m, offset, <type *>) = value;

     * In the main loop, the application can retrieve the value  with  the  same
       macro.

     To  avoid	wasting space, the dynamic fields or flags must only be reserved
     on demand, when an application asks for the related feature.

     The registration can be done at any moment, but it is not possible  to  un-
     register fields or flags for now.

     A dynamic field can be reserved and used by an application only. It can for
     instance be a packet mark.

     To avoid namespace collisions, the dynamic mbuf field or flag names have to
     be  chosen  with care. It is advised to use the same conventions than func-
     tion names in dpdk:

     *

     *

     *

     * any name that does not start with 'rte_' in an application

     Definition in file rte_mbuf_dyn.h.

Macro Definition Documentation
   #define RTE_MBUF_DYN_NAMESIZE   64
     Maximum length of the dynamic field or flag string.

     Definition at line 81 of file rte_mbuf_dyn.h.

   #define RTE_MBUF_DYNFIELD(m, offset, type)	((type)((uintptr_t)(m)	+  (off-
     set)))
     Helper macro to access to a dynamic field.

     Definition at line 228 of file rte_mbuf_dyn.h.

   #define RTE_MBUF_DYNFIELD_HISTORY_NAME   'rte_mbuf_dynfield_history'
     The mbuf history dynamic field provides lifecycle tracking for mbuf objects
     through the system. It records a fixed set of predefined operations for de-
     bugging.

     Definition at line 249 of file rte_mbuf_dyn.h.

   #define RTE_MBUF_DYNFIELD_TIMESTAMP_NAME   'rte_dynfield_timestamp'
     The timestamp dynamic field provides some timing information, the units and
     time  references  (initial  phase) are not explicitly defined but are main-
     tained always the same for a  given  port.  Some  devices	allow  to  query
     rte_eth_read_clock() that will return the current device timestamp. The dy-
     namic  Tx	timestamp flag tells whether the field contains actual timestamp
     value for the packets being sent, this value can be used by PMD to schedule
     packet sending.

     Definition at line 280 of file rte_mbuf_dyn.h.

   #define RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME	'rte_dynflag_rx_timestamp'
     Indicate that the timestamp field in the mbuf was filled by the driver.

     Definition at line 286 of file rte_mbuf_dyn.h.

   #define RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME	'rte_dynflag_tx_timestamp'
     When PMD sees the RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME flag set on the packet
     being sent it tries to synchronize the time of packet appearing on the wire
     with the specified packet timestamp. If the specified one is in the past it
     should be ignored, if one is in the distant future it should be capped with
     some reasonable value (in range of seconds).

     There is no any packet reordering according to timestamps is supposed, nei-
     ther for packet within the burst, nor for the whole bursts, it  is  an  en-
     tirely application responsibility to generate packets and its timestamps in
     desired  order. The timestamps might be put only in the first packet in the
     burst providing the entire burst scheduling.

     Definition at line 319 of file rte_mbuf_dyn.h.

   #define RTE_MBUF_DYNFIELD_IP_REASSEMBLY_NAME   'rte_dynfield_ip_reassembly'
     For the PMDs which support IP reassembly of packets, PMD  will  update  the
     packet  with  RTE_MBUF_DYNFLAG_IP_REASSEMBLY_INCOMPLETE_NAME to denote that
     IP reassembly is incomplete and application can retrieve the  packets  back
     using RTE_MBUF_DYNFIELD_IP_REASSEMBLY_NAME.

     Definition at line 345 of file rte_mbuf_dyn.h.

Function Documentation
   int rte_mbuf_dynfield_register (const struct rte_mbuf_dynfield * params)
     Register space for a dynamic field in the mbuf structure.

     If  the  field is already registered (same name and parameters), its offset
     is returned.

     Parameters
	 params A structure containing the  requested  parameters  (name,  size,
	 alignment constraint and flags).

     Returns
	 The  offset  in the mbuf structure, or -1 on error. Possible values for
	 rte_errno:

	 * EINVAL: invalid parameters (size, align, or flags).

	 * EEXIST: this name is already register with different parameters.

	 * EPERM: called from a secondary process.

	 * ENOENT: not enough room in mbuf.

	 * ENOMEM: allocation failure.

	 * ENAMETOOLONG: name does not ends with \0.

   int	rte_mbuf_dynfield_register_offset  (const  struct  rte_mbuf_dynfield   *
     params, size_t offset)
     Register space for a dynamic field in the mbuf structure at offset.

     If  the field is already registered (same name, parameters and offset), the
     offset is returned.

     Parameters
	 params A structure containing the  requested  parameters  (name,  size,
	 alignment constraint and flags).
	 offset The requested offset. Ignored if SIZE_MAX is passed.

     Returns
	 The  offset  in the mbuf structure, or -1 on error. Possible values for
	 rte_errno:

	 * EINVAL: invalid parameters (size, align, flags, or offset).

	 * EEXIST: this name is already register with different parameters.

	 * EBUSY: the requested offset cannot be used.

	 * EPERM: called from a secondary process.

	 * ENOENT: not enough room in mbuf.

	 * ENOMEM: allocation failure.

	 * ENAMETOOLONG: name does not ends with \0.

   int rte_mbuf_dynfield_lookup (const char * name, struct  rte_mbuf_dynfield  *
     params)
     Lookup for a registered dynamic mbuf field.

     Parameters
	 name A string identifying the dynamic field.
	 params  If  not NULL, and if the lookup is successful, the structure is
	 filled with the parameters of the dynamic field.

     Returns
	 The offset of this field in the mbuf structure, or -1 on error.  Possi-
	 ble values for rte_errno:

	 * ENOENT: no dynamic field matches this name.

   int rte_mbuf_dynflag_register (const struct rte_mbuf_dynflag * params)
     Register a dynamic flag in the mbuf structure.

     If the flag is already registered (same name and parameters), its bitnum is
     returned.

     Parameters
	 params  A  structure containing the requested parameters of the dynamic
	 flag (name and options).

     Returns
	 The number of the reserved bit, or -1 on  error.  Possible  values  for
	 rte_errno:

	 * EINVAL: invalid parameters (size, align, or flags).

	 * EEXIST: this name is already register with different parameters.

	 * EPERM: called from a secondary process.

	 * ENOENT: no more flag available.

	 * ENOMEM: allocation failure.

	 * ENAMETOOLONG: name is longer than RTE_MBUF_DYN_NAMESIZE - 1.

   int rte_mbuf_dynflag_register_bitnum (const struct rte_mbuf_dynflag * params,
     unsigned int bitnum)
     Register a dynamic flag in the mbuf structure specifying bitnum.

     If  the  flag is already registered (same name, parameters and bitnum), the
     bitnum is returned.

     Parameters
	 params A structure containing the requested parameters of  the  dynamic
	 flag (name and options).
	 bitnum The requested bitnum. Ignored if UINT_MAX is passed.

     Returns
	 The  number  of  the  reserved bit, or -1 on error. Possible values for
	 rte_errno:

	 * EINVAL: invalid parameters (size, align, or flags).

	 * EEXIST: this name is already register with different parameters.

	 * EBUSY: the requested bitnum cannot be used.

	 * EPERM: called from a secondary process.

	 * ENOENT: no more flag available.

	 * ENOMEM: allocation failure.

	 * ENAMETOOLONG: name is longer than RTE_MBUF_DYN_NAMESIZE - 1.

   int rte_mbuf_dynflag_lookup (const char *  name,  struct  rte_mbuf_dynflag  *
     params)
     Lookup for a registered dynamic mbuf flag.

     Parameters
	 name A string identifying the dynamic flag.
	 params  If  not NULL, and if the lookup is successful, the structure is
	 filled with the parameters of the dynamic flag.

     Returns
	 The offset of this flag in the mbuf structure, or -1 on error. Possible
	 values for rte_errno:

	 * ENOENT: no dynamic flag matches this name.

   void rte_mbuf_dyn_dump (FILE * out)
     Dump the status of dynamic fields and flags.

     Parameters
	 out The stream where the status is displayed.

   typedef (uint64_t)
     Type for mbuf history dynamic field.

     Use atomic operations to support cloned mbufs  accessed  simultaneously  by
     multiple lcores.

     The size is 64-bit for better performance on modern systems.

   int	 rte_mbuf_dyn_rx_timestamp_register  (int  *  field_offset,  uint64_t  *
     rx_flag)
     Register dynamic mbuf field and flag for Rx timestamp.

     Parameters
	 field_offset Pointer to the offset of the registered mbuf field, can be
	 NULL. The same field is shared for Rx and Tx timestamp.
	 rx_flag Pointer to the mask of the  registered  offload  flag,  can  be
	 NULL.

     Returns
	 0 on success, -1 otherwise. Possible values for rte_errno:

	 * EEXIST: already registered with different parameters.

	 * EPERM: called from a secondary process.

	 * ENOENT: no more field or flag available.

	 * ENOMEM: allocation failure.

   int	 rte_mbuf_dyn_tx_timestamp_register  (int  *  field_offset,  uint64_t  *
     tx_flag)
     Register dynamic mbuf field and flag for Tx timestamp.

     Parameters
	 field_offset Pointer to the offset of the registered mbuf field, can be
	 NULL. The same field is shared for Rx and Tx timestamp.
	 tx_flag Pointer to the mask of the  registered  offload  flag,  can  be
	 NULL.

     Returns
	 0 on success, -1 otherwise. Possible values for rte_errno:

	 * EEXIST: already registered with different parameters.

	 * EPERM: called from a secondary process.

	 * ENOENT: no more field or flag available.

	 * ENOMEM: allocation failure.

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

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

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

home | help