aboutsummaryrefslogtreecommitdiffstats
path: root/lib/librte_eal/common/include/rte_option.h
blob: 8957b970cde5b1d1f41311be21f40fb1603bc7c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/* SPDX-License-Identifier: BSD-3-Clause
 * Copyright(c) 2018 Intel Corporation.
 */

#ifndef __INCLUDE_RTE_OPTION_H__
#define __INCLUDE_RTE_OPTION_H__

/**
 * @file
 *
 * This API offers the ability to register options to the EAL command line and
 * map those options to functions that will be executed at the end of EAL
 * initialization. These options will be available as part of the EAL command
 * line of applications and are dynamically managed.
 *
 * This is used primarily by DPDK libraries offering command line options.
 * Currently, this API is limited to registering options without argument.
 *
 * The register API can be used to resolve circular dependency issues
 * between EAL and the library. The library uses EAL, but is also initialized
 * by EAL. Hence, EAL depends on the init function of the library. The API
 * introduced in rte_option allows us to register the library init with EAL
 * (passing a function pointer) and avoid the circular dependency.
 */

#ifdef __cplusplus
extern "C" {
#endif

typedef int (*rte_option_cb)(void);

/*
 * Structure describing the EAL command line option being registered.
 */
struct rte_option {
	TAILQ_ENTRY(rte_option) next; /**< Next entry in the list. */
	char *opt_str;             /**< The option name. */
	rte_option_cb cb;          /**< Function called when option is used. */
	int enabled;               /**< Set when the option is used. */
};

/**
 * @warning
 * @b EXPERIMENTAL: this API may change without prior notice
 *
 * Register an option to the EAL command line.
 * When recognized, the associated function will be executed at the end of EAL
 * initialization.
 *
 * The associated structure must be available the whole time this option is
 * registered (i.e. not stack memory).
 *
 * @param opt
 *  Structure describing the option to parse.
 */
void __rte_experimental
rte_option_register(struct rte_option *opt);

#ifdef __cplusplus
}
#endif

#endif