DPDK  24.11.0-rc3
rte_argparse.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2024 HiSilicon Limited
3  */
4 
5 #ifndef RTE_ARGPARSE_H
6 #define RTE_ARGPARSE_H
7 
30 #include <stdbool.h>
31 #include <stdint.h>
32 
33 #include <rte_bitops.h>
34 #include <rte_compat.h>
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
48 #define RTE_ARGPARSE_ARG_NO_VALUE RTE_SHIFT_VAL64(1, 0)
49 
50 #define RTE_ARGPARSE_ARG_REQUIRED_VALUE RTE_SHIFT_VAL64(2, 0)
51 
52 #define RTE_ARGPARSE_ARG_OPTIONAL_VALUE RTE_SHIFT_VAL64(3, 0)
53 
54 #define RTE_ARGPARSE_ARG_VALUE_INT RTE_SHIFT_VAL64(1, 2)
55 
56 #define RTE_ARGPARSE_ARG_VALUE_U8 RTE_SHIFT_VAL64(2, 2)
57 
58 #define RTE_ARGPARSE_ARG_VALUE_U16 RTE_SHIFT_VAL64(3, 2)
59 
60 #define RTE_ARGPARSE_ARG_VALUE_U32 RTE_SHIFT_VAL64(4, 2)
61 
62 #define RTE_ARGPARSE_ARG_VALUE_U64 RTE_SHIFT_VAL64(5, 2)
63 
64 #define RTE_ARGPARSE_ARG_VALUE_MAX RTE_SHIFT_VAL64(6, 2)
65 
70 #define RTE_ARGPARSE_ARG_SUPPORT_MULTI RTE_BIT64(10)
71 
72 #define RTE_ARGPARSE_ARG_RESERVED_FIELD RTE_GENMASK64(63, 48)
73 
76 #define RTE_ARGPARSE_HAS_VAL_BITMASK RTE_GENMASK64(1, 0)
77 
78 #define RTE_ARGPARSE_VAL_TYPE_BITMASK RTE_GENMASK64(9, 2)
79 
90  const char *name_long;
97  const char *name_short;
98 
100  const char *help;
101 
109  void *val_saver;
120  void *val_set;
121 
123  uint64_t flags;
124 };
125 
140 typedef int (*rte_arg_parser_t)(uint32_t index, const char *value, void *opaque);
141 
145 struct rte_argparse {
147  const char *prog_name;
149  const char *usage;
151  const char *descriptor;
153  const char *epilog;
159  void *opaque;
161  void *reserved[16];
163  struct rte_argparse_arg args[];
164 };
165 
166 #define ARGPARSE_ARG_END() { NULL }
167 
184 __rte_experimental
185 int rte_argparse_parse(struct rte_argparse *obj, int argc, char **argv);
186 
203 __rte_experimental
204 int rte_argparse_parse_type(const char *str, uint64_t val_type, void *val);
205 
206 #ifdef __cplusplus
207 }
208 #endif
209 
210 #endif /* RTE_ARGPARSE_H */
const char * usage
Definition: rte_argparse.h:149
const char * name_long
Definition: rte_argparse.h:90
const char * descriptor
Definition: rte_argparse.h:151
bool exit_on_error
Definition: rte_argparse.h:155
const char * name_short
Definition: rte_argparse.h:97
__rte_experimental int rte_argparse_parse_type(const char *str, uint64_t val_type, void *val)
const char * prog_name
Definition: rte_argparse.h:147
const char * epilog
Definition: rte_argparse.h:153
__rte_experimental int rte_argparse_parse(struct rte_argparse *obj, int argc, char **argv)
int(* rte_arg_parser_t)(uint32_t index, const char *value, void *opaque)
Definition: rte_argparse.h:140
const char * help
Definition: rte_argparse.h:100
rte_arg_parser_t callback
Definition: rte_argparse.h:157