libyang  2.0.194
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
plugins_exts.h
Go to the documentation of this file.
1 
15 #ifndef LY_PLUGINS_EXTS_H_
16 #define LY_PLUGINS_EXTS_H_
17 
18 #include "log.h"
19 #include "plugins.h"
20 #include "tree_data.h"
21 #include "tree_edit.h"
22 #include "tree_schema.h"
23 
24 #include "plugins_exts_compile.h"
25 #include "plugins_exts_print.h"
26 
27 struct ly_ctx;
28 struct ly_in;
29 struct lyd_node;
30 struct lysc_ext_substmt;
31 struct lysp_ext_instance;
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
103 #define LYPLG_EXT_API_VERSION 3
104 
111 #define LYPLG_EXTENSIONS \
112  uint32_t plugins_extensions_apiver__ = LYPLG_EXT_API_VERSION; \
113  const struct lyplg_ext_record plugins_extensions__[]
114 
122 LIBYANG_API_DECL void lyplg_ext_instance_substatements_free(struct ly_ctx *ctx, struct lysc_ext_substmt *substmts);
123 
139 typedef LY_ERR (*lyplg_ext_compile_clb)(struct lysc_ctx *cctx, const struct lysp_ext_instance *p_ext,
140  struct lysc_ext_instance *c_ext);
141 
151 typedef LY_ERR (*lyplg_ext_schema_printer_clb)(struct lyspr_ctx *ctx, struct lysc_ext_instance *ext, ly_bool *flag);
152 
159 typedef void (*lyplg_ext_free_clb)(struct ly_ctx *ctx, struct lysc_ext_instance *ext);
160 
179 typedef LY_ERR (*lyplg_ext_data_snode_clb)(struct lysc_ext_instance *ext, const struct lyd_node *parent,
180  const struct lysc_node *sparent, const char *prefix, size_t prefix_len, LY_VALUE_FORMAT format, void *prefix_data,
181  const char *name, size_t name_len, const struct lysc_node **snode);
182 
195 typedef LY_ERR (*lyplg_ext_data_validate_clb)(struct lysc_ext_instance *ext, struct lyd_node *sibling, uint32_t val_opts,
196  struct lyd_node **diff);
197 
201 struct lyplg_ext {
202  const char *id;
212 };
213 
215  /* plugin identification */
216  const char *module;
217  const char *revision;
222  const char *name;
224  /* runtime data */
225  struct lyplg_ext plugin;
226 };
227 
238 LIBYANG_API_DECL LY_ERR lyplg_ext_get_data(const struct ly_ctx *ctx, const struct lysc_ext_instance *ext, void **ext_data,
239  ly_bool *ext_data_free);
240 
249 LIBYANG_API_DECL LY_ERR lyd_insert_ext(struct lyd_node *parent, struct lyd_node *first);
250 
260 LIBYANG_API_DECL void lyplg_ext_log(const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err_no, const char *path,
261  const char *format, ...);
262 
265 #ifdef __cplusplus
266 }
267 #endif
268 
269 #endif /* LY_PLUGINS_EXTS_H_ */
libyang context handler.
LY_ERR
libyang's error codes returned by the libyang functions.
Definition: log.h:244
LY_LOG_LEVEL
Verbosity levels of the libyang logger.
Definition: log.h:88
lyplg_ext_free_clb free
Definition: plugins_exts.h:207
lyplg_ext_data_snode_clb snode
Definition: plugins_exts.h:209
const char * id
Definition: plugins_exts.h:202
const char * revision
Definition: plugins_exts.h:217
const char * module
Definition: plugins_exts.h:216
struct lyplg_ext plugin
Definition: plugins_exts.h:225
lyplg_ext_data_validate_clb validate
Definition: plugins_exts.h:210
lyplg_ext_schema_printer_clb sprinter
Definition: plugins_exts.h:205
lyplg_ext_compile_clb compile
Definition: plugins_exts.h:204
const char * name
Definition: plugins_exts.h:222
LY_ERR(* lyplg_ext_schema_printer_clb)(struct lyspr_ctx *ctx, struct lysc_ext_instance *ext, ly_bool *flag)
Callback to print the compiled extension instance's private data in the INFO format.
Definition: plugins_exts.h:151
void(* lyplg_ext_free_clb)(struct ly_ctx *ctx, struct lysc_ext_instance *ext)
Callback to free the extension-specific data created by its compilation.
Definition: plugins_exts.h:159
LY_ERR(* lyplg_ext_data_snode_clb)(struct lysc_ext_instance *ext, const struct lyd_node *parent, const struct lysc_node *sparent, const char *prefix, size_t prefix_len, LY_VALUE_FORMAT format, void *prefix_data, const char *name, size_t name_len, const struct lysc_node **snode)
Callback for getting a schema node for a new YANG instance data described by an extension instance....
Definition: plugins_exts.h:179
LIBYANG_API_DECL LY_ERR lyd_insert_ext(struct lyd_node *parent, struct lyd_node *first)
Insert extension instance data into a parent.
LIBYANG_API_DECL void lyplg_ext_log(const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err_no, const char *path, const char *format,...)
Provide a log message from an extension plugin.
LY_ERR(* lyplg_ext_data_validate_clb)(struct lysc_ext_instance *ext, struct lyd_node *sibling, uint32_t val_opts, struct lyd_node **diff)
Callback for validating parsed YANG instance data described by an extension instance.
Definition: plugins_exts.h:195
LY_ERR(* lyplg_ext_compile_clb)(struct lysc_ctx *cctx, const struct lysp_ext_instance *p_ext, struct lysc_ext_instance *c_ext)
Callback to compile extension from the lysp_ext_instance to the lysc_ext_instance....
Definition: plugins_exts.h:139
LIBYANG_API_DECL void lyplg_ext_instance_substatements_free(struct ly_ctx *ctx, struct lysc_ext_substmt *substmts)
Free the extension instance's data compiled with lys_compile_extension_instance().
LIBYANG_API_DECL LY_ERR lyplg_ext_get_data(const struct ly_ctx *ctx, const struct lysc_ext_instance *ext, void **ext_data, ly_bool *ext_data_free)
Get specific run-time extension instance data from a callback set by ly_ctx_set_ext_data_clb().
Extension plugin implementing various aspects of a YANG extension.
Definition: plugins_exts.h:201
const char * name
Definition: tree_schema.h:1661
YANG extension instance.
Definition: tree_schema.h:1429
Description of the extension instance substatements.
Definition: tree_schema.h:1419
Compiled YANG data node.
Definition: tree_schema.h:1650
YANG extension instance.
Definition: tree_schema.h:525
LY_VALUE_FORMAT
All kinds of supported value formats and prefix mappings to modules.
Definition: tree.h:235
Logger manipulation routines and error definitions.
uint8_t ly_bool
Type to indicate boolean value.
Definition: log.h:27
Parser input structure specifying where the data are read.
Plugins manipulation.
libyang support for YANG extensions implementation - schema compilation related items.
libyang support for YANG extensions implementation - schema print related items.
libyang representation of YANG data trees.
struct lyd_node_inner * parent
Definition: tree_data.h:805
Generic structure for a data node.
Definition: tree_data.h:798
libyang generic macros and functions to modify YANG schema or data trees. Intended for internal use a...
libyang representation of YANG schema trees.