---
name: "rte_launch.h"
section: "3"
platform: "linux"
package: "dpdk-doc"
version: "24.11.4-0+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/rte_launch.h"
---

# rte\_launch.h(3)

## NAME

rte\_launch.h

## SYNOPSIS

### Typedefs

**typedef** int() **lcore\_function\_t**(void \*)\

### Enumerations

enum **rte\_lcore\_state\_t** { **WAIT**, **RUNNING** }\
 enum **rte\_rmt\_call\_main\_t** { **SKIP\_MAIN** = 0, **CALL\_MAIN** }\

### Functions

int **rte\_eal\_remote\_launch** (**lcore\_function\_t** \*f, void \*arg, unsigned worker\_id)\
 int **rte\_eal\_mp\_remote\_launch** (**lcore\_function\_t** \*f, void \*arg, enum **rte\_rmt\_call\_main\_t** call\_main)\
 enum **rte\_lcore\_state\_t** **rte\_eal\_get\_lcore\_state** (unsigned int worker\_id)\
 int **rte\_eal\_wait\_lcore** (unsigned worker\_id)\
 void **rte\_eal\_mp\_wait\_lcore** (void)\

## Detailed Description

Launch tasks on other lcores

Definition in file **rte\_launch.h**.

## Typedef Documentation

### typedef int() lcore\_function\_t(void \*)

Definition of a remote launch function.

Definition at line **31** of file **rte\_launch.h**.

## Enumeration Type Documentation

### enum rte\_lcore\_state\_t

State of an lcore.

**Enumerator**

- *WAIT*

  *waiting for new command*

- *RUNNING*

  *executing command*

*Definition at line* **21** *of file* **rte\_launch.h***.*

### enum rte\_rmt\_call\_main\_t

*This enum indicates whether the main core must execute the handler launched on all logical cores.*

**Enumerator**

- *SKIP\_MAIN*

  *lcore handler not executed by main core.*

- *CALL\_MAIN*

  *lcore handler executed by main core.*

*Definition at line* **73** *of file* **rte\_launch.h***.*

## Function Documentation

### int rte\_eal\_remote\_launch (lcore\_function\_t \* f, void \* arg, unsigned worker\_id)

*Launch a function on another lcore.*

*To be executed on the MAIN lcore only.*

*Sends a message to a worker lcore (identified by the worker\_id) that is in the WAIT state (this is true after the first call to* **rte\_eal\_init()***). This can be checked by first calling rte\_eal\_wait\_lcore(worker\_id).*

*When the remote lcore receives the message, it switches to the RUNNING state, then calls the function f with argument arg. Once the execution is done, the remote lcore switches to WAIT state and the return value of f is stored in a local variable to be read using* **rte\_eal\_wait\_lcore()***.*

*The MAIN lcore returns as soon as the message is sent and knows nothing about the completion of f.*

*Note: This function is not designed to offer optimum performance. It is just a practical way to launch a function on another lcore at initialization time.*

**Parameters**

*f The function to be called.* \
 *arg The argument for the function.* \
 *worker\_id The identifier of the lcore on which the function should be executed.*

**Returns**

- •

  *0: Success. Execution of function f started on the remote lcore.*

- •

  *(-EBUSY): The remote lcore is not in a WAIT state.*

- •

  *(-EPIPE): Error reading or writing pipe to worker thread*

### int rte\_eal\_mp\_remote\_launch (lcore\_function\_t \* f, void \* arg, enum rte\_rmt\_call\_main\_t call\_main)

*Launch a function on all lcores.*

*Check that each WORKER lcore is in a WAIT state, then call* **rte\_eal\_remote\_launch()** *for each lcore.*

**Parameters**

*f The function to be called.* \
 *arg The argument for the function.* \
 *call\_main If call\_main set to SKIP\_MAIN, the MAIN lcore does not call the function. If call\_main is set to CALL\_MAIN, the function is also called on main before returning. In any case, the main lcore returns as soon as it finished its job and knows nothing about the completion of f on the other lcores.*

**Returns**

- •

  *0: Success. Execution of function f started on all remote lcores.*

- •

  *(-EBUSY): At least one remote lcore is not in a WAIT state. In this case, no message is sent to any of the lcores.*

### enum rte\_lcore\_state\_t rte\_eal\_get\_lcore\_state (unsigned int worker\_id)

*Get the state of the lcore identified by worker\_id.*

*To be executed on the MAIN lcore only.*

**Parameters**

*worker\_id The identifier of the lcore.*

**Returns**

*The state of the lcore.*

### int rte\_eal\_wait\_lcore (unsigned worker\_id)

*Wait until an lcore finishes its job.*

*To be executed on the MAIN lcore only.*

*If the lcore identified by the worker\_id is in RUNNING state, wait until the lcore finishes its job and moves to the WAIT state.*

**Parameters**

*worker\_id The identifier of the lcore.*

**Returns**

- •

  *0: If the remote launch function was never called on the lcore identified by the worker\_id.*

- •

  *The value that was returned by the previous remote launch function call.*

### void rte\_eal\_mp\_wait\_lcore (void)

*Wait until all lcores finish their jobs.*

*To be executed on the MAIN lcore only. Issue an* **rte\_eal\_wait\_lcore()** *for every lcore. The return values are ignored.*

*After a call to* **rte\_eal\_mp\_wait\_lcore()***, the caller can assume that all worker lcores are in a WAIT state.*

## Author

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