libyang  4.6.0
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
context.h
Go to the documentation of this file.
1 
16 #ifndef LY_CONTEXT_H_
17 #define LY_CONTEXT_H_
18 
19 #include <stdint.h>
20 
21 #include "log.h"
22 #include "parser_schema.h"
23 #include "tree_data.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 struct lys_module;
30 
170 struct ly_ctx;
171 
181 #define LY_CTX_ALL_IMPLEMENTED 0x01
182 #define LY_CTX_REF_IMPLEMENTED 0x02
188 #define LY_CTX_NO_YANGLIBRARY 0x04
194 #define LY_CTX_DISABLE_SEARCHDIRS 0x08
198 #define LY_CTX_DISABLE_SEARCHDIR_CWD 0x10
201 #define LY_CTX_PREFER_SEARCHDIRS 0x20
202 #define LY_CTX_SET_PRIV_PARSED 0x40
210 #define LY_CTX_EXPLICIT_COMPILE 0x80
216 #define LY_CTX_ENABLE_IMP_FEATURES 0x0100
219 #define LY_CTX_COMPILE_OBSOLETE 0x0200
222 #define LY_CTX_LYB_HASHES 0x0400
224 #define LY_CTX_LEAFREF_EXTENDED 0x0800
226 #define LY_CTX_LEAFREF_LINKING 0x1000
230 #define LY_CTX_BUILTIN_PLUGINS_ONLY 0x2000
236 #define LY_CTX_STATIC_PLUGINS_ONLY 0x4000
242 /* 0x80000000 reserved for internal use */
268 LIBYANG_API_DECL LY_ERR ly_ctx_new(const char *search_dir, uint32_t options, struct ly_ctx **new_ctx);
269 
292 LIBYANG_API_DECL LY_ERR ly_ctx_new_ylpath(const char *search_dir, const char *path, LYD_FORMAT format, int options,
293  struct ly_ctx **ctx);
294 
309 LIBYANG_API_DECL LY_ERR ly_ctx_new_ylmem(const char *search_dir, const char *data, LYD_FORMAT format, int options,
310  struct ly_ctx **ctx);
311 
325 LIBYANG_API_DECL LY_ERR ly_ctx_new_yldata(const char *search_dir, const struct lyd_node *tree, int options,
326  struct ly_ctx **ctx);
327 
335 LIBYANG_API_DECL LY_ERR ly_ctx_compile(struct ly_ctx *ctx);
336 
347 LIBYANG_API_DECL LY_ERR ly_ctx_set_searchdir(struct ly_ctx *ctx, const char *search_dir);
348 
358 LIBYANG_API_DECL LY_ERR ly_ctx_unset_searchdir(struct ly_ctx *ctx, const char *value);
359 
371 LIBYANG_API_DECL LY_ERR ly_ctx_unset_searchdir_last(struct ly_ctx *ctx, uint32_t count);
372 
380 LIBYANG_API_DECL const char * const *ly_ctx_get_searchdirs(const struct ly_ctx *ctx);
381 
388 LIBYANG_API_DECL uint32_t ly_ctx_get_options(const struct ly_ctx *ctx);
389 
398 LIBYANG_API_DECL LY_ERR ly_ctx_set_options(struct ly_ctx *ctx, uint32_t option);
399 
406 LIBYANG_API_DECL LY_ERR ly_ctx_unset_options(struct ly_ctx *ctx, uint32_t option);
407 
414 LIBYANG_API_DECL uint16_t ly_ctx_get_change_count(const struct ly_ctx *ctx);
415 
429 LIBYANG_API_DECL uint32_t ly_ctx_get_modules_hash(const struct ly_ctx *ctx);
430 
437 typedef void (*ly_module_imp_data_free_clb)(void *module_data, void *user_data);
438 
461 typedef LY_ERR (*ly_module_imp_clb)(const char *mod_name, const char *mod_rev, const char *submod_name, const char *submod_rev,
462  void *user_data, LYS_INFORMAT *format, const char **module_data, ly_module_imp_data_free_clb *free_module_data);
463 
471 LIBYANG_API_DECL ly_module_imp_clb ly_ctx_get_module_imp_clb(const struct ly_ctx *ctx, void **user_data);
472 
482 LIBYANG_API_DECL void ly_ctx_set_module_imp_clb(struct ly_ctx *ctx, ly_module_imp_clb clb, void *user_data);
483 
495 typedef LY_ERR (*ly_ext_data_clb)(const struct lysc_ext_instance *ext, const struct lyd_node *parent, void *user_data,
496  void **ext_data, ly_bool *ext_data_free);
497 
511 LIBYANG_API_DECL ly_ext_data_clb ly_ctx_set_ext_data_clb(const struct ly_ctx *ctx, ly_ext_data_clb clb, void *user_data);
512 
522 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module(const struct ly_ctx *ctx, const char *name, const char *revision);
523 
534 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module_latest(const struct ly_ctx *ctx, const char *name);
535 
544 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module_implemented(const struct ly_ctx *ctx, const char *name);
545 
555 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module_iter(const struct ly_ctx *ctx, uint32_t *index);
556 
566 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module_ns(const struct ly_ctx *ctx, const char *ns, const char *revision);
567 
578 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module_latest_ns(const struct ly_ctx *ctx, const char *ns);
579 
588 LIBYANG_API_DECL struct lys_module *ly_ctx_get_module_implemented_ns(const struct ly_ctx *ctx, const char *ns);
589 
598 LIBYANG_API_DECL const struct lysp_submodule *ly_ctx_get_submodule(const struct ly_ctx *ctx, const char *submodule,
599  const char *revision);
600 
609 LIBYANG_API_DECL const struct lysp_submodule *ly_ctx_get_submodule_latest(const struct ly_ctx *ctx, const char *submodule);
610 
619 LIBYANG_API_DECL const struct lysp_submodule *ly_ctx_get_submodule2(const struct lys_module *module, const char *submodule,
620  const char *revision);
621 
630 LIBYANG_API_DECL const struct lysp_submodule *ly_ctx_get_submodule2_latest(const struct lys_module *module,
631  const char *submodule);
632 
640 LIBYANG_API_DECL uint32_t ly_ctx_internal_modules_count(const struct ly_ctx *ctx);
641 
661 LIBYANG_API_DECL struct lys_module *ly_ctx_load_module(struct ly_ctx *ctx, const char *name, const char *revision,
662  const char **features);
663 
685 LIBYANG_API_DECL LY_ERR ly_ctx_get_yanglib_data(const struct ly_ctx *ctx, struct lyd_node **root,
686  const char *content_id_format, ...);
687 
694 LIBYANG_API_DECL void ly_ctx_free_parsed(struct ly_ctx *ctx);
695 
703 LIBYANG_API_DECL int ly_ctx_compiled_size(const struct ly_ctx *ctx);
704 
713 LIBYANG_API_DECL LY_ERR ly_ctx_compiled_print(const struct ly_ctx *ctx, void *mem, void **mem_end);
714 
725 LIBYANG_API_DECL LY_ERR ly_ctx_new_printed(const void *mem, struct ly_ctx **ctx);
726 
733 LIBYANG_API_DECL ly_bool ly_ctx_is_printed(const struct ly_ctx *ctx);
734 
750 LIBYANG_API_DECL void ly_ctx_destroy(struct ly_ctx *ctx);
751 
754 #ifdef __cplusplus
755 }
756 #endif
757 
758 #endif /* LY_CONTEXT_H_ */
LIBYANG_API_DECL LY_ERR ly_ctx_set_options(struct ly_ctx *ctx, uint32_t option)
Set some of the context&#39;s options, see Context options.
struct ly_ctx * ctx
Definition: tree_schema.h:2186
LIBYANG_API_DECL uint32_t ly_ctx_internal_modules_count(const struct ly_ctx *ctx)
Learn the number of internal modules of a context. Internal modules is considered one that was loaded...
LIBYANG_API_DECL LY_ERR ly_ctx_compiled_print(const struct ly_ctx *ctx, void *mem, void **mem_end)
Print (serialize) a compiled context (without any parsed modules) into a pre-allocated memory chunk...
LIBYANG_API_DECL ly_ext_data_clb ly_ctx_set_ext_data_clb(const struct ly_ctx *ctx, ly_ext_data_clb clb, void *user_data)
Set callback providing run-time extension instance data. The expected data depend on the extension...
Generic structure for a data node.
Definition: tree_data.h:824
YANG extension compiled instance.
Definition: plugins_exts.h:436
LIBYANG_API_DECL void ly_ctx_free_parsed(struct ly_ctx *ctx)
Free all the parsed modules in a context. Any data manipulation will be possible but some schema func...
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module_iter(const struct ly_ctx *ctx, uint32_t *index)
Iterate over all modules in the given context.
Schema parsers for libyang.
LY_ERR
libyang&#39;s error codes returned by the libyang functions.
Definition: log.h:254
uint8_t ly_bool
Type to indicate boolean value.
Definition: log.h:28
LIBYANG_API_DECL uint32_t ly_ctx_get_modules_hash(const struct ly_ctx *ctx)
Get the hash of all the modules in the context. Since order of the modules is significant, even when 2 contexts have the same modules but loaded in a different order, the hash will differ.
LIBYANG_API_DECL int ly_ctx_compiled_size(const struct ly_ctx *ctx)
Get the total size a compiled context requires for serialization.
LIBYANG_API_DECL LY_ERR ly_ctx_set_searchdir(struct ly_ctx *ctx, const char *search_dir)
Add the search path into libyang context.
LIBYANG_API_DECL LY_ERR ly_ctx_new(const char *search_dir, uint32_t options, struct ly_ctx **new_ctx)
Create libyang context.
LIBYANG_API_DECL LY_ERR ly_ctx_unset_options(struct ly_ctx *ctx, uint32_t option)
Unset some of the context&#39;s options, see Context options.
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module_implemented_ns(const struct ly_ctx *ctx, const char *ns)
Get the (only) implemented YANG module specified by its namespace.
const char * ns
Definition: tree_schema.h:2189
LY_ERR(* ly_module_imp_clb)(const char *mod_name, const char *mod_rev, const char *submod_name, const char *submod_rev, void *user_data, LYS_INFORMAT *format, const char **module_data, ly_module_imp_data_free_clb *free_module_data)
Callback for retrieving missing included or imported modules in a custom way.
Definition: context.h:506
LIBYANG_API_DECL LY_ERR ly_ctx_unset_searchdir(struct ly_ctx *ctx, const char *value)
Clean the search path(s) from the libyang context.
struct lyd_node_inner * parent
Definition: tree_data.h:831
LIBYANG_API_DECL void ly_ctx_set_module_imp_clb(struct ly_ctx *ctx, ly_module_imp_clb clb, void *user_data)
Set missing include or import module callback. It is meant to be used when the modules are not locall...
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module_implemented(const struct ly_ctx *ctx, const char *name)
Get the (only) implemented YANG module specified by its name.
libyang representation of YANG data trees.
LIBYANG_API_DECL struct lysp_submodule * ly_ctx_get_submodule2(const struct lys_module *module, const char *submodule, const char *revision)
Get a specific submodule from a module. If the belongs-to module is not known, use ly_ctx_get_submodu...
LY_ERR(* ly_ext_data_clb)(const struct lysc_ext_instance *ext, const struct lyd_node *parent, void *user_data, void **ext_data, ly_bool *ext_data_free)
Callback for getting arbitrary run-time data required by an extension instance.
Definition: context.h:540
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
Definition: tree_data.h:536
LIBYANG_API_DECL LY_ERR ly_ctx_new_ylpath(const char *search_dir, const char *path, LYD_FORMAT format, int options, struct ly_ctx **ctx)
Create libyang context according to the provided yang-library data in a file.
LIBYANG_API_DECL ly_bool ly_ctx_is_printed(const struct ly_ctx *ctx)
Check if the context was created from a printed (immutable) context.
LYS_INFORMAT
Schema input formats accepted by libyang parser functions.
Definition: parser_schema.h:91
LIBYANG_API_DECL LY_ERR ly_ctx_new_ylmem(const char *search_dir, const char *data, LYD_FORMAT format, int options, struct ly_ctx **ctx)
Create libyang context according to the provided yang-library data in a string.
void(* ly_module_imp_data_free_clb)(void *module_data, void *user_data)
Callback for freeing returned module data in ly_module_imp_clb.
Definition: context.h:482
Available YANG schema tree structures representing YANG module.
Definition: tree_schema.h:2185
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module_ns(const struct ly_ctx *ctx, const char *ns, const char *revision)
Get YANG module of the given namespace and revision.
LIBYANG_API_DECL LY_ERR ly_ctx_new_printed(const void *mem, struct ly_ctx **ctx)
Create a (immutable) context that was printed into a memory chunk.
LIBYANG_API_DECL const char *const * ly_ctx_get_searchdirs(const struct ly_ctx *ctx)
Get the NULL-terminated list of the search paths in libyang context. Do not modify the result! ...
LIBYANG_API_DECL struct lysp_submodule * ly_ctx_get_submodule_latest(const struct ly_ctx *ctx, const char *submodule)
Get the latests revision of a submodule from context. If its belongs-to module is known...
LIBYANG_API_DECL struct lysp_submodule * ly_ctx_get_submodule(const struct ly_ctx *ctx, const char *submodule, const char *revision)
Get a specific submodule from context. If its belongs-to module is known, use ly_ctx_get_submodule2()...
LIBYANG_API_DECL ly_module_imp_clb ly_ctx_get_module_imp_clb(const struct ly_ctx *ctx, void **user_data)
Get the custom callback for missing import/include module retrieval.
LIBYANG_API_DECL uint32_t ly_ctx_get_options(const struct ly_ctx *ctx)
Get the currently set context&#39;s options.
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module_latest_ns(const struct ly_ctx *ctx, const char *ns)
Get the latest revision of the YANG module specified by its namespace.
LIBYANG_API_DECL LY_ERR ly_ctx_compile(struct ly_ctx *ctx)
Compile (recompile) the context applying all the performed changes after the last context compilation...
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module(const struct ly_ctx *ctx, const char *name, const char *revision)
Get YANG module of the given name and revision.
LIBYANG_API_DECL LY_ERR ly_ctx_get_yanglib_data(const struct ly_ctx *ctx, struct lyd_node **root, const char *content_id_format,...)
Get data of the internal ietf-yang-library module with information about all the loaded modules...
LIBYANG_API_DECL LY_ERR ly_ctx_new_yldata(const char *search_dir, const struct lyd_node *tree, int options, struct ly_ctx **ctx)
Create libyang context according to the provided yang-library data in a data tree.
LIBYANG_API_DECL struct lys_module * ly_ctx_load_module(struct ly_ctx *ctx, const char *name, const char *revision, const char **features)
Try to find the module in the searchpaths of ctx and load it into it. If custom missing module callba...
Logger manipulation routines and error definitions.
LIBYANG_API_DECL uint16_t ly_ctx_get_change_count(const struct ly_ctx *ctx)
Get the change count of the context (module set) during its life-time.
const char * revision
Definition: tree_schema.h:2188
libyang context handler.
const char * name
Definition: tree_schema.h:2187
LIBYANG_API_DECL void ly_ctx_destroy(struct ly_ctx *ctx)
Free all internal structures of the specified context.
LIBYANG_API_DECL struct lys_module * ly_ctx_get_module_latest(const struct ly_ctx *ctx, const char *name)
Get the latest revision of the YANG module specified by its name.
LIBYANG_API_DECL LY_ERR ly_ctx_unset_searchdir_last(struct ly_ctx *ctx, uint32_t count)
Remove the least recently added search path(s) from the libyang context.
LIBYANG_API_DECL struct lysp_submodule * ly_ctx_get_submodule2_latest(const struct lys_module *module, const char *submodule)
Get the latest revision of a submodule from a module. If the belongs-to module is not known...