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

  
 
  

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

NAME
     rte_lcore.h

SYNOPSIS
     #include <stdio.h>
     #include <rte_compat.h>
     #include <rte_config.h>
     #include <rte_per_lcore.h>
     #include <rte_eal.h>
     #include <rte_launch.h>
     #include <rte_thread.h>

   Data Structures
     struct rte_lcore_usage

   Macros
     #define LCORE_ID_ANY   UINT32_MAX
     #define RTE_LCORE_FOREACH(i)
     #define RTE_LCORE_FOREACH_WORKER(i)

   Typedefs
     typedef int(* rte_lcore_init_cb) (unsigned int lcore_id, void *arg)
     typedef void(* rte_lcore_uninit_cb) (unsigned int lcore_id, void *arg)
     typedef int(* rte_lcore_iterate_cb) (unsigned int lcore_id, void *arg)
     typedef   int(*   rte_lcore_usage_cb)   (unsigned	 int   lcore_id,  struct
	 rte_lcore_usage *usage)

   Enumerations
     enum rte_lcore_role_t

   Functions
     RTE_DECLARE_PER_LCORE (unsigned, _lcore_id)
     enum rte_lcore_role_t rte_eal_lcore_role (unsigned int lcore_id)
     int rte_lcore_has_role (unsigned int lcore_id, enum rte_lcore_role_t role)
     static unsigned rte_lcore_id (void)
     unsigned int rte_get_main_lcore (void)
     unsigned int rte_lcore_count (void)
     int rte_lcore_index (int lcore_id)
     unsigned int rte_socket_id (void)
     unsigned int rte_socket_count (void)
     int rte_socket_id_by_idx (unsigned int idx)
     unsigned int rte_lcore_to_socket_id (unsigned int lcore_id)
     int rte_lcore_to_cpu_id (int lcore_id)
     rte_cpuset_t rte_lcore_cpuset (unsigned int lcore_id)
     int rte_lcore_is_enabled (unsigned int lcore_id)
     unsigned int rte_get_next_lcore (unsigned int i, int skip_main, int wrap)
     void * rte_lcore_callback_register  (const  char  *name,  rte_lcore_init_cb
	 init, rte_lcore_uninit_cb uninit, void *arg)
     void rte_lcore_callback_unregister (void *handle)
     int rte_lcore_iterate (rte_lcore_iterate_cb cb, void *arg)
     void rte_lcore_register_usage_cb (rte_lcore_usage_cb cb)
     void rte_lcore_dump (FILE *f)
     int rte_thread_register (void)
     void rte_thread_unregister (void)

Detailed Description
     API for lcore and socket manipulation

     Definition in file rte_lcore.h.

Macro Definition Documentation
   #define LCORE_ID_ANY   UINT32_MAX
     Any lcore.

     Definition at line 26 of file rte_lcore.h.

   #define RTE_LCORE_FOREACH(i)
     Value:.PP
	 for (i = rte_get_next_lcore(-1, 0, 0); 	      \
	      i < RTE_MAX_LCORE;		     \
	      i = rte_get_next_lcore(i, 0, 0))
     Macro to browse all running lcores.

     Definition at line 216 of file rte_lcore.h.

   #define RTE_LCORE_FOREACH_WORKER(i)
     Value:.PP
	 for (i = rte_get_next_lcore(-1, 1, 0); 	      \
	      i < RTE_MAX_LCORE;		     \
	      i = rte_get_next_lcore(i, 1, 0))
     Macro to browse all running lcores except the main lcore.

     Definition at line 224 of file rte_lcore.h.

Typedef Documentation
   typedef int(* rte_lcore_init_cb) (unsigned int lcore_id, void *arg)
     Callback prototype for initializing lcores.

     Parameters
	 lcore_id The lcore to consider.
	 arg An opaque pointer passed at callback registration.

     Returns

	 * -1 when refusing this operation,

	 * 0 otherwise.

     Definition at line 240 of file rte_lcore.h.

   typedef void(* rte_lcore_uninit_cb) (unsigned int lcore_id, void *arg)
     Callback prototype for uninitializing lcores.

     Parameters
	 lcore_id The lcore to consider.
	 arg An opaque pointer passed at callback registration.

     Definition at line 250 of file rte_lcore.h.

   typedef int(* rte_lcore_iterate_cb) (unsigned int lcore_id, void *arg)
     Callback prototype for iterating over lcores.

     Parameters
	 lcore_id The lcore to consider.
	 arg An opaque pointer coming from the caller.

     Returns

	 * 0 lets the iteration continue.

	 * !0 makes the iteration stop.

     Definition at line 308 of file rte_lcore.h.

   typedef    int(*   rte_lcore_usage_cb)   (unsigned	int   lcore_id,   struct
     rte_lcore_usage *usage)
     Callback to allow applications to report lcore usage.

     Parameters
	 lcore_id The lcore to consider.
	 usage Counters representing this lcore usage. This can never be NULL.

     Returns

	 * 0 if fields in usage were updated successfully. The fields  that  the
	   application does not support must not be modified.

	 * a  negative value if the information is not available or if any error
	   occurred.

     Definition at line 358 of file rte_lcore.h.

Enumeration Type Documentation
   enum rte_lcore_role_t
     The lcore role (used in RTE or not).

     Definition at line 33 of file rte_lcore.h.

Function Documentation
   RTE_DECLARE_PER_LCORE (unsigned, _lcore_id)
     Per thread 'lcore id'.

   enum rte_lcore_role_t rte_eal_lcore_role (unsigned int lcore_id)
     Get a lcore's role.

     Parameters
	 lcore_id The identifier of the lcore,	which  MUST  be  between  0  and
	 RTE_MAX_LCORE-1.

     Returns
	 The role of the lcore.

   int rte_lcore_has_role (unsigned int lcore_id, enum rte_lcore_role_t role)
     Test if the core supplied has a specific role

     Parameters
	 lcore_id  The	identifier  of	the  lcore,  which MUST be between 0 and
	 RTE_MAX_LCORE-1.
	 role The role to be checked against.

     Returns
	 Boolean value: positive if test is true; otherwise returns 0.

   static unsigned rte_lcore_id (void) [inline],  [static]
     Return the Application thread ID of the execution unit.

     Note: in most cases the lcore id returned here will also correspond to  the
     processor id of the CPU on which the thread is pinned, this will not be the
     case if the user has explicitly changed the thread to core affinities using
     --lcores  EAL  argument  e.g. --lcores '(0-3)@10' to run threads with lcore
     IDs 0, 1, 2 and 3 on physical core 10..

     Returns
	 Logical core ID  (in  EAL  thread  or	registered  non-EAL  thread)  or
	 LCORE_ID_ANY (in unregistered non-EAL thread)

     Definition at line 78 of file rte_lcore.h.

   unsigned int rte_get_main_lcore (void)
     Get the id of the main lcore

     Returns
	 the id of the main lcore

   unsigned int rte_lcore_count (void)
     Return the number of execution units (lcores) on the system.

     Returns
	 the number of execution units (lcores) on the system.

   int rte_lcore_index (int lcore_id)
     Return the index of the lcore starting from zero.

     When  option  -c  or -l is given, the index corresponds to the order in the
     list. For example: -l 22,18 lcore 22 has index 0, and 18 has index 1.

     Parameters
	 lcore_id The targeted lcore, or -1 for the current one.

     Returns
	 The relative index, or -1 if not enabled.

   unsigned int rte_socket_id (void)
     Return the ID of NUMA node of the logical core we are running on.

     Returns
	 the ID of current lcoreid's NUMA node

   unsigned int rte_socket_count (void)
     Return number of NUMA nodes detected on the system.

     Note that number of nodes may not be correspondent to their NUMA ID's:  for
     example, a system may report two NUMA ID's, but the actual NUMA ID's may be
     0 and 8.

     Returns
	 the number of NUMA ID's as recognized by EAL

   int rte_socket_id_by_idx (unsigned int idx)
     Return socket id with a particular index.

     This will return socket id at a particular position in list of all detected
     NUMA node ID's. For example, on a machine with NUMA nodes [0, 8], passing 1
     as a parameter will return 8.

     Parameters
	 idx index of NUMA node ID to return

     Returns

	 * NUMA node ID as recognized by EAL

	 * -1 on error, with errno set to EINVAL

   unsigned int rte_lcore_to_socket_id (unsigned int lcore_id)
     Get the ID of the NUMA node of the specified lcore

     Parameters
	 lcore_id   the   targeted   lcore,   which   MUST   be  between  0  and
	 RTE_MAX_LCORE-1.

     Returns
	 the ID of lcoreid's NUMA node

   int rte_lcore_to_cpu_id (int lcore_id)
     Return the id of the lcore on a socket starting from zero.

     Parameters
	 lcore_id The targeted lcore, or -1 for the current one.

     Returns
	 The relative index, or -1 if not enabled.

   rte_cpuset_t rte_lcore_cpuset (unsigned int lcore_id)
     Return the cpuset for a given lcore.

     Parameters
	 lcore_id  the	targeted  lcore,   which   MUST   be   between	 0   and
	 RTE_MAX_LCORE-1.

     Returns
	 The cpuset of that lcore

   int rte_lcore_is_enabled (unsigned int lcore_id)
     Test if an lcore is enabled.

     Parameters
	 lcore_id  The	identifier  of	the  lcore,  which MUST be between 0 and
	 RTE_MAX_LCORE-1.

     Returns
	 True if the given lcore is enabled; false otherwise.

   unsigned int rte_get_next_lcore (unsigned int i, int skip_main, int wrap)
     Get the next enabled lcore ID.

     Parameters
	 i The current lcore (reference).
	 skip_main If true, do not return the ID of the main lcore.
	 wrap If true, go back to 0 when RTE_MAX_LCORE	is  reached;  otherwise,
	 return RTE_MAX_LCORE.

     Returns
	 The next lcore_id or RTE_MAX_LCORE if not found.

   void  *  rte_lcore_callback_register  (const  char  * name, rte_lcore_init_cb
     init, rte_lcore_uninit_cb uninit, void * arg)
     Register callbacks invoked when initializing and uninitializing a lcore.

     This function calls the init callback with all initialized lcores. Any  er-
     ror  reported  by	the init callback triggers a rollback calling the uninit
     callback for each lcore. If this step succeeds, the callbacks  are  put  in
     the lcore callbacks list that will get called for each lcore allocation/re-
     lease.

     Note:  callbacks  execution is serialised under a write lock protecting the
     lcores and callbacks list.

     Parameters
	 name A name serving as a small description for this callback.
	 init The callback invoked when a lcore_id is initialized. init  can  be
	 NULL.
	 uninit  The  callback	invoked when a lcore_id is uninitialized. uninit
	 can be NULL.
	 arg An optional argument that gets passed to the callback when it  gets
	 invoked.

     Returns
	 On  success,  returns	an  opaque pointer for the registered object. On
	 failure (either memory allocation issue in the function  itself  or  an
	 error is returned by the init callback itself), returns NULL.

   void rte_lcore_callback_unregister (void * handle)
     Unregister  callbacks  previously registered with rte_lcore_callback_regis-
     ter.

     This function calls the uninit callback with all  initialized  lcores.  The
     callbacks are then removed from the lcore callbacks list.

     Parameters
	 handle  The  handle  pointer  returned  by  a former successful call to
	 rte_lcore_callback_register.

   int rte_lcore_iterate (rte_lcore_iterate_cb cb, void * arg)
     Iterate on all active lcores (ROLE_RTE, ROLE_SERVICE and ROLE_NON_EAL).  No
     modification on the lcore states is allowed in the callback.

     Note:  as	opposed to init/uninit callbacks, iteration callbacks can be in-
     voked in parallel as they are run under a read lock protecting  the  lcores
     and callbacks list.

     Parameters
	 cb The callback that gets passed each lcore.
	 arg An opaque pointer passed to cb.

     Returns
	 Same  return  code as the callback last invocation (see rte_lcore_iter-
	 ate_cb description).

   void rte_lcore_register_usage_cb (rte_lcore_usage_cb cb)
     Register a callback from an application to be  called  in	rte_lcore_dump()
     and  the  /eal/lcore/info	telemetry endpoint handler. Applications are ex-
     pected to report lcore usage statistics via this callback.

     If a callback was already registered, it can be replaced with another call-
     back or unregistered with NULL. The previously registered callback may  re-
     main in use for an undetermined period of time.

     Parameters
	 cb The callback function.

   void rte_lcore_dump (FILE * f)
     List all lcores.

     Parameters
	 f The output stream where the dump should be sent.

   int rte_thread_register (void)
     Register current non-EAL thread as a lcore.

     Note
	 This API is not compatible with the multi-process feature:

	 * if  a  primary  process registers a non-EAL thread, then no secondary
	   process will initialise.

	 * if a secondary process initialises successfully, trying to register a
	   non-EAL thread from either primary or secondary processes will always
	   end up with the thread getting LCORE_ID_ANY as lcore.

     Returns
	 On success, return 0; otherwise return -1 with rte_errno set.

   void rte_thread_unregister (void)
     Unregister current thread and release lcore if one was associated.

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

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

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

home | help