libyang  5.7.2
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
plugins_exts.h
Go to the documentation of this file.
1 
16 #ifndef LY_PLUGINS_EXTS_H_
17 #define LY_PLUGINS_EXTS_H_
18 
19 #include "log.h"
20 #include "parser_data.h"
21 #include "plugins.h"
22 #include "tree_data.h"
23 #include "tree_edit.h"
24 #include "tree_schema.h"
25 
26 struct ly_ctx;
27 struct ly_in;
28 struct lyd_node;
29 struct lysc_ctx;
30 struct lysc_ext_substmt;
31 struct lysp_ctx;
32 struct lyspr_ctx;
33 struct lyspr_tree_ctx;
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
105 #define LYPLG_EXT_API_VERSION 12
106 
112 #define LY_STMT_OP_MASK (LY_STMT_ACTION | LY_STMT_RPC)
113 
119 #define LY_STMT_DATA_NODE_MASK (LY_STMT_ANYDATA | LY_STMT_ANYXML | LY_STMT_CASE | LY_STMT_CHOICE | LY_STMT_CONTAINER |\
120  LY_STMT_LEAF | LY_STMT_LEAF_LIST | LY_STMT_LIST)
121 
128 #define LY_STMT_NODE_MASK 0xFFFF
129 
136 enum ly_stmt {
138 
141  LY_STMT_INPUT = 0x0002,
143  LY_STMT_OUTPUT = 0x0004,
145  LY_STMT_ACTION = 0x0008,
147  LY_STMT_RPC = 0x0010,
149  LY_STMT_ANYDATA = 0x0020,
151  LY_STMT_ANYXML = 0x0040,
153  LY_STMT_AUGMENT = 0x0080,
156  LY_STMT_CASE = 0x0100,
158  LY_STMT_CHOICE = 0x0200,
160  LY_STMT_CONTAINER = 0x0400,
162  LY_STMT_GROUPING = 0x0800,
165  LY_STMT_LEAF = 0x1000,
167  LY_STMT_LEAF_LIST = 0x2000,
169  LY_STMT_LIST = 0x4000,
171  LY_STMT_USES = 0x8000,
174  LY_STMT_ARGUMENT = 0x10000,
178  LY_STMT_BASE = 0x20000,
181  LY_STMT_BELONGS_TO = 0x30000,
185  LY_STMT_BIT = 0x40000,
189  LY_STMT_CONFIG = 0x50000,
192  LY_STMT_CONTACT = 0x60000,
196  LY_STMT_DEFAULT = 0x70000,
202  LY_STMT_DEVIATE = 0x90000,
205  LY_STMT_DEVIATION = 0xA0000,
209  LY_STMT_ENUM = 0xB0000,
221  LY_STMT_EXTENSION = 0xE0000,
227  LY_STMT_FEATURE = 0x100000,
234  LY_STMT_IDENTITY = 0x120000,
238  LY_STMT_IF_FEATURE = 0x130000,
241  LY_STMT_IMPORT = 0x140000,
244  LY_STMT_INCLUDE = 0x150000,
247  LY_STMT_KEY = 0x160000,
251  LY_STMT_LENGTH = 0x170000,
253  LY_STMT_MANDATORY = 0x180000,
256  LY_STMT_MAX_ELEMENTS = 0x190000,
259  LY_STMT_MIN_ELEMENTS = 0x1A0000,
262  LY_STMT_MODIFIER = 0x1B0000,
266  LY_STMT_MODULE = 0x1C0000,
269  LY_STMT_MUST = 0x1D0000,
273  LY_STMT_NAMESPACE = 0x1E0000,
277  LY_STMT_ORDERED_BY = 0x1F0000,
281  LY_STMT_ORGANIZATION = 0x200000,
285  LY_STMT_PATH = 0x210000,
289  LY_STMT_PATTERN = 0x220000,
293  LY_STMT_POSITION = 0x230000,
297  LY_STMT_PREFIX = 0x240000,
300  LY_STMT_PRESENCE = 0x250000,
303  LY_STMT_RANGE = 0x260000,
305  LY_STMT_REFERENCE = 0x270000,
308  LY_STMT_REFINE = 0x280000,
316  LY_STMT_REVISION = 0x2A0000,
321  LY_STMT_STATUS = 0x2C0000,
324  LY_STMT_SUBMODULE = 0x2D0000,
327  LY_STMT_TYPE = 0x2E0000,
329  LY_STMT_TYPEDEF = 0x2F0000,
333  LY_STMT_UNIQUE = 0x300000,
336  LY_STMT_UNITS = 0x310000,
339  LY_STMT_VALUE = 0x320000,
343  LY_STMT_WHEN = 0x330000,
345  LY_STMT_YANG_VERSION = 0x340000,
349  LY_STMT_YIN_ELEMENT = 0x350000,
354  /* separated from the list of statements
355  * the following tokens are part of the syntax and parsers have to work
356  * with them, but they are not a standard YANG statements
357  */
361 
362  /*
363  * YIN-specific tokens, still they are part of the syntax, but not the standard statements
364  */
367 };
368 
372 struct lysp_stmt {
373  const char *stmt;
374  const char *arg;
376  void *prefix_data;
378  struct lysp_stmt *next;
379  struct lysp_stmt *child;
380  uint16_t flags;
381  enum ly_stmt kw;
382 };
383 
388  enum ly_stmt stmt;
389  void **storage_p;
391 };
392 
397  const char *name;
398  const char *argument;
400  void *prefix_data;
401  uintptr_t plugin_ref;
403  void *parent;
408  uint16_t flags;
413  void *parsed;
414  struct lysp_stmt *child;
416 };
417 
422  enum ly_stmt stmt;
423  void **storage_p;
425 };
426 
431  struct lysc_ext *def;
432  const char *argument;
433  struct lys_module *module;
436  void *parent;
444  void *compiled;
445 };
446 
453 #define LYPLG_EXTENSIONS \
454  uint32_t plugins_extensions_apiver__ = LYPLG_EXT_API_VERSION; \
455  const struct lyplg_ext_record plugins_extensions__[]
456 
477 typedef LY_ERR (*lyplg_ext_parse_clb)(struct lysp_ctx *pctx, struct lysp_ext_instance *ext);
478 
489 LIBYANG_API_DECL void lyplg_ext_parse_log(const struct lysp_ctx *pctx, const struct lysp_ext_instance *ext,
490  LY_LOG_LEVEL level, LY_ERR err, const char *format, ...);
491 
498 LIBYANG_API_DECL const struct lysp_module *lyplg_ext_parse_get_cur_pmod(const struct lysp_ctx *pctx);
499 
512 LIBYANG_API_DECL LY_ERR lyplg_ext_parse_extension_instance(struct lysp_ctx *pctx, struct lysp_ext_instance *ext);
513 
531 #define LYS_COMPILE_GROUPING 0x01
536 #define LYS_COMPILE_DISABLED 0x02
539 #define LYS_COMPILE_NO_CONFIG 0x04
540 #define LYS_COMPILE_NO_DISABLED 0x08
542 #define LYS_COMPILE_RPC_INPUT (LYS_IS_INPUT | LYS_COMPILE_NO_CONFIG)
543 #define LYS_COMPILE_RPC_OUTPUT (LYS_IS_OUTPUT | LYS_COMPILE_NO_CONFIG)
544 #define LYS_COMPILE_NOTIFICATION (LYS_IS_NOTIF | LYS_COMPILE_NO_CONFIG)
563 typedef LY_ERR (*lyplg_ext_compile_clb)(struct lysc_ctx *cctx, const struct lysp_ext_instance *extp,
564  struct lysc_ext_instance *ext);
565 
575 LIBYANG_API_DECL void lyplg_ext_compile_log(const struct lysc_ctx *cctx, const struct lysc_ext_instance *ext,
576  LY_LOG_LEVEL level, LY_ERR err, const char *format, ...);
577 
587 LIBYANG_API_DECL void lyplg_ext_compile_log_path(const char *path, const struct lysc_ext_instance *ext,
588  LY_LOG_LEVEL level, LY_ERR err, const char *format, ...);
589 
596 LIBYANG_API_DEF void lyplg_ext_compile_log_err(const struct ly_err_item *eitem, const struct lysc_ext_instance *ext);
597 
604 LIBYANG_API_DECL struct ly_ctx *lyplg_ext_compile_get_ctx(const struct lysc_ctx *ctx);
605 
612 LIBYANG_API_DECL uint32_t *lyplg_ext_compile_get_options(const struct lysc_ctx *ctx);
613 
620 LIBYANG_API_DECL const struct lys_module *lyplg_ext_compile_get_cur_mod(const struct lysc_ctx *ctx);
621 
628 LIBYANG_API_DECL struct lysp_module *lyplg_ext_compile_get_pmod(const struct lysc_ctx *ctx);
629 
646 LIBYANG_API_DECL LY_ERR lyplg_ext_compile_extension_instance(struct lysc_ctx *ctx, const struct lysp_ext_instance *extp,
647  struct lysc_ext_instance *ext, struct lysc_node *parent);
648 
660 LIBYANG_API_DECL LY_ERR lyplg_ext_compiled_node_augments(struct lysc_ctx *ctx, struct lysc_ext_instance *ext,
661  struct lysc_node *node);
662 
683 typedef LY_ERR (*lyplg_ext_sprinter_info_clb)(struct lyspr_ctx *ctx, struct lysc_ext_instance *ext, ly_bool *flag);
684 
692 LIBYANG_API_DECL struct ly_out **lyplg_ext_print_get_out(const struct lyspr_ctx *ctx);
693 
700 LIBYANG_API_DECL uint32_t *lyplg_ext_print_get_options(const struct lyspr_ctx *ctx);
701 
708 LIBYANG_API_DECL uint16_t *lyplg_ext_print_get_level(const struct lyspr_ctx *ctx);
709 
720 LIBYANG_API_DECL void lyplg_ext_print_info_extension_instance(struct lyspr_ctx *ctx, const struct lysc_ext_instance *ext,
721  ly_bool *flag);
722 
725 /*
726  * node xpath
727  */
728 
736 typedef void (*lyplg_ext_node_xpath_clb)(struct lysc_ext_instance *ext, const struct lyd_node *cur_node,
737  const struct lyd_node **node);
738 
739 /*
740  * snode xpath
741  */
755 typedef LY_ERR (*lyplg_ext_snode_xpath_clb)(struct lysc_ext_instance *ext, const char *prefix, uint32_t prefix_len,
756  LY_VALUE_FORMAT format, void *prefix_data, const char *name, uint32_t name_len, const struct lysc_node **snode);
757 
758 /*
759  * data snode
760  */
791 typedef LY_ERR (*lyplg_ext_data_snode_clb)(struct lysc_ext_instance *ext, const struct lyd_node *parent,
792  const struct lysc_node *sparent, const char *prefix, uint32_t prefix_len, LY_VALUE_FORMAT format, void *prefix_data,
793  const char *name, uint32_t name_len, const struct lysc_node **snode);
794 
795 /*
796  * data validate
797  */
798 
819 typedef LY_ERR (*lyplg_ext_data_validate_clb)(struct lysc_ext_instance *ext, struct lyd_node *node,
820  const struct lyd_node *dep_tree, enum lyd_type data_type, uint32_t val_opts, struct lyd_node **diff);
821 
822 /*
823  * parse free
824  */
832 typedef void (*lyplg_ext_parse_free_clb)(const struct ly_ctx *ctx, struct lysp_ext_instance *ext);
833 
840 LIBYANG_API_DECL void lyplg_ext_pfree_instance_substatements(const struct ly_ctx *ctx, struct lysp_ext_substmt *substmts);
841 
842 /*
843  * compile free
844  */
845 
852 typedef void (*lyplg_ext_compile_free_clb)(const struct ly_ctx *ctx, struct lysc_ext_instance *ext);
853 
860 LIBYANG_API_DECL void lyplg_ext_cfree_instance_substatements(const struct ly_ctx *ctx, struct lysc_ext_substmt *substmts);
861 
862 /*
863  * compiled size
864  */
865 
869 #define LY_CTXP_MEM_ALIGN 8
870 
876 #define LY_CTXP_MEM_SIZE(SIZE) ((SIZE) + ((~(SIZE) + 1) & (LY_CTXP_MEM_ALIGN - 1)))
877 
888 typedef int (*lyplg_ext_compiled_size_clb)(const struct lysc_ext_instance *ext, struct ly_ht *addr_ht);
889 
898 LIBYANG_API_DECL int lyplg_ext_compiled_stmts_storage_size(const struct lysc_ext_substmt *substmts, struct ly_ht *addr_ht);
899 
900 /*
901  * compiled print
902  */
903 
917 typedef LY_ERR (*lyplg_ext_compiled_print_clb)(const struct lysc_ext_instance *orig_ext, struct lysc_ext_instance *ext,
918  struct ly_ht *addr_ht, struct ly_set *ptr_set, void **mem);
919 
932 LIBYANG_API_DECL LY_ERR lyplg_ext_compiled_stmts_storage_print(const struct lysc_ext_substmt *orig_substmts,
933  struct lysc_ext_substmt *substmts, struct ly_ht *addr_ht, struct ly_set *ptr_set, void **mem);
934 
943 LIBYANG_API_DECL void *lyplg_ext_compiled_print_get_addr(const struct ly_ht *addr_ht, const void *addr);
944 
955 LIBYANG_API_DECL LY_ERR lyplg_ext_compiled_print_add_addr(struct ly_ht *addr_ht, const void *orig_addr,
956  const void *addr);
957 
964 struct lyplg_ext {
965  const char *id;
980 };
983  /* plugin identification */
984  const char *module;
985  const char *revision;
990  const char *name;
992  /* runtime data */
993  struct lyplg_ext plugin;
994 };
995 
1002 LIBYANG_API_DECL const char *lyplg_ext_stmt2str(enum ly_stmt stmt);
1003 
1010 LIBYANG_API_DECL enum ly_stmt lyplg_ext_nodetype2stmt(uint16_t nodetype);
1011 
1023 LIBYANG_API_DECL LY_ERR lyplg_ext_get_storage(const struct lysc_ext_instance *ext, int stmt, uint32_t storage_size,
1024  const void **storage);
1025 
1037 LIBYANG_API_DECL LY_ERR lyplg_ext_parsed_get_storage(const struct lysc_ext_instance *ext, int stmt,
1038  uint32_t storage_size, const void **storage);
1039 
1051 LIBYANG_API_DECL LY_ERR lyplg_ext_get_data(const struct ly_ctx *ctx, const struct lysc_ext_instance *ext,
1052  const struct lyd_node *parent, void **ext_data, ly_bool *ext_data_free);
1053 
1062 LIBYANG_API_DECL LY_ERR lyplg_ext_set_parent_ctx(struct ly_ctx *ctx, const struct ly_ctx *parent_ctx);
1063 
1072 LIBYANG_API_DECL LY_ERR lyplg_ext_schema_mount_get_parent_ref(const struct lysc_ext_instance *ext,
1073  const struct lyd_node *parent, struct ly_set **refs);
1074 
1084 LIBYANG_API_DECL LY_ERR lyplg_ext_schema_mount_create_context(const struct lysc_ext_instance *ext,
1085  const struct lyd_node *parent, struct ly_ctx **ctx);
1086 
1100  const struct lyd_node *ext_data);
1101 
1113 LIBYANG_API_DECL void lyplg_ext_schema_mount_destroy_shared_contexts(struct lysc_ext_instance *ext);
1114 
1127 LIBYANG_API_DECL void lyplg_ext_schema_mount_destroy_inline_contexts(struct lysc_ext_instance *ext);
1128 
1131 #ifdef __cplusplus
1132 }
1133 #endif
1134 
1135 #endif /* LY_PLUGINS_EXTS_H_ */
const char * module
Definition: plugins_exts.h:990
Compiled YANG data node.
Definition: tree_schema.h:1430
Parser input structure specifying the type of data input.
LIBYANG_API_DECL void lyplg_ext_pfree_instance_substatements(const struct ly_ctx *ctx, struct lysp_ext_substmt *substmts)
Free the extension instance's data parsed with lyplg_ext_parse_extension_instance().
lyplg_ext_snode_xpath_clb snode_xpath
Definition: plugins_exts.h:977
LY_ERR(* lyplg_ext_sprinter_info_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:689
struct ly_ctx * ctx
Definition: tree_schema.h:2265
const char * name
Definition: plugins_exts.h:996
struct lysp_stmt * next
Definition: plugins_exts.h:378
const char * revision
Definition: plugins_exts.h:991
lyplg_ext_sprinter_info_clb printer_info
Definition: plugins_exts.h:975
LIBYANG_API_DECL struct lysp_module * lyplg_ext_compile_get_pmod(const struct lysc_ctx *ctx)
YANG schema compilation context getter for currently processed module.
Extension plugin implementing various aspects of a YANG extension.
Definition: plugins_exts.h:970
enum ly_stmt kw
Definition: plugins_exts.h:381
Generic structure for a data node.
Definition: tree_data.h:783
Structure representing a compiled known YANG substatement in an extension instance.
Definition: plugins_exts.h:421
uint16_t flags
Definition: plugins_exts.h:380
LIBYANG_API_DECL struct ly_ctx * lyplg_ext_compile_get_ctx(const struct lysc_ctx *ctx)
YANG schema compilation context getter for libyang context.
YANG extension compiled instance.
Definition: plugins_exts.h:430
void(* lyplg_ext_parse_free_clb)(const struct ly_ctx *ctx, struct lysp_ext_instance *ext)
Callback to free the extension-specific data created by its parsing.
Definition: plugins_exts.h:838
uint64_t parent_stmt_index
Definition: plugins_exts.h:439
lyplg_ext_parse_clb parse
Definition: plugins_exts.h:973
LY_ERR
libyang's error codes returned by the libyang functions.
Definition: log.h:255
enum ly_stmt stmt
Definition: plugins_exts.h:388
uint8_t ly_bool
Type to indicate boolean value.
Definition: log.h:29
Compiled YANG extension-stmt.
Definition: tree_schema.h:1195
LIBYANG_API_DECL LY_ERR lyplg_ext_schema_mount_get_parent_ref(const struct lysc_ext_instance *ext, const struct lyd_node *parent, struct ly_set **refs)
Expand parent-reference xpath expressions.
struct lysp_ext_instance * exts
Definition: plugins_exts.h:415
ly_stmt
List of YANG statements.
Definition: plugins_exts.h:136
Structure representing a parsed known YANG substatement in an extension instance. ...
Definition: plugins_exts.h:387
const char * stmt
Definition: plugins_exts.h:373
struct lysp_ext_substmt * substmts
Definition: plugins_exts.h:411
LY_ERR(* lyplg_ext_parse_clb)(struct lysp_ctx *pctx, struct lysp_ext_instance *ext)
Callback for parsing extension instance substatements.
Definition: plugins_exts.h:477
const char * name
Definition: tree_schema.h:1441
LY_ERR(* lyplg_ext_compiled_print_clb)(const struct lysc_ext_instance *orig_ext, struct lysc_ext_instance *ext, struct ly_ht *addr_ht, struct ly_set *ptr_set, void **mem)
Callback to print (serialize) the custom compiled structure and substmts array storage.
Definition: plugins_exts.h:923
LIBYANG_API_DECL LY_ERR lyplg_ext_parse_extension_instance(struct lysp_ctx *pctx, struct lysp_ext_instance *ext)
Parse substatements of an extension instance.
libyang representation of YANG schema trees.
LIBYANG_API_DECL void lyplg_ext_schema_mount_destroy_inline_contexts(struct lysc_ext_instance *ext)
Destroy all the inline contexts for a given libyang context.
struct lysc_ext_instance * exts
Definition: plugins_exts.h:434
uint64_t parent_stmt_index
Definition: plugins_exts.h:406
LIBYANG_API_DECL LY_ERR lyplg_ext_compiled_stmts_storage_print(const struct lysc_ext_substmt *orig_substmts, struct lysc_ext_substmt *substmts, struct ly_ht *addr_ht, struct ly_set *ptr_set, void **mem)
Print the substatements array storage and assign it to the serialized extension instance substatement...
LIBYANG_API_DECL struct lys_module * lyplg_ext_compile_get_cur_mod(const struct lysc_ctx *ctx)
YANG schema compilation context getter for current module.
LIBYANG_API_DECL uint16_t * lyplg_ext_print_get_level(const struct lyspr_ctx *ctx)
YANG printer context getter for printer indentation level.
LIBYANG_API_DECL void lyplg_ext_compile_log(const struct lysc_ctx *cctx, const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err, const char *format,...)
Log a message from an extension plugin using the compiled extension instance.
struct lysc_ext_substmt * substmts
Definition: plugins_exts.h:442
LIBYANG_API_DECL void * lyplg_ext_compiled_print_get_addr(const struct ly_ht *addr_ht, const void *addr)
Get the printed address of a shared structure, in case it has already been printed.
lyplg_ext_data_validate_clb validate
Definition: plugins_exts.h:979
LIBYANG_API_DECL LY_ERR lyplg_ext_get_storage(const struct lysc_ext_instance *ext, int stmt, uint32_t storage_size, const void **storage)
Get compiled ext instance storage for a specific statement.
LIBYANG_API_DECL void lyplg_ext_print_info_extension_instance(struct lyspr_ctx *ctx, const struct lysc_ext_instance *ext, ly_bool *flag)
Print substatements of an extension instance in info format (compiled YANG).
enum ly_stmt parent_stmt
Definition: plugins_exts.h:405
LIBYANG_API_DECL LY_ERR lyplg_ext_get_data(const struct ly_ctx *ctx, const struct lysc_ext_instance *ext, const struct lyd_node *parent, 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().
LIBYANG_API_DECL void lyplg_ext_schema_mount_destroy_shared_contexts(struct lysc_ext_instance *ext)
Destroy all the shared schema mount contexts for a given libyang context.
struct lysp_stmt * child
Definition: plugins_exts.h:414
Data parsers for libyang.
const char * id
Definition: plugins_exts.h:971
LY_ERR(* lyplg_ext_compile_clb)(struct lysc_ctx *cctx, const struct lysp_ext_instance *extp, struct lysc_ext_instance *ext)
Callback to compile extension from the lysp_ext_instance to the lysc_ext_instance. The later structure is generally prepared and only the extension specific data are supposed to be added (if any).
Definition: plugins_exts.h:569
libyang representation of YANG data trees.
LIBYANG_API_DECL LY_ERR lyplg_ext_compile_extension_instance(struct lysc_ctx *ctx, const struct lysp_ext_instance *extp, struct lysc_ext_instance *ext, struct lysc_node *parent)
Compile substatements of an extension instance.
LIBYANG_API_DECL void lyplg_ext_parse_log(const struct lysp_ctx *pctx, const struct lysp_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err, const char *format,...)
Log a message from an extension plugin using the parsed extension instance.
const char * name
Definition: plugins_exts.h:397
LY_VALUE_FORMAT format
Definition: plugins_exts.h:399
libyang hash table.
Printer output structure specifying the type of data output.
enum ly_stmt stmt
Definition: plugins_exts.h:422
Libyang full error structure.
Definition: log.h:300
LY_LOG_LEVEL
Verbosity levels of the libyang logger.
Definition: log.h:89
struct lyplg_ext plugin
Definition: plugins_exts.h:999
lyplg_ext_compile_clb compile
Definition: plugins_exts.h:974
LIBYANG_API_DECL enum ly_stmt lyplg_ext_nodetype2stmt(uint16_t nodetype)
Convert nodetype to statement identifier.
LY_ERR(* lyplg_ext_snode_xpath_clb)(struct lysc_ext_instance *ext, const char *prefix, uint32_t prefix_len, LY_VALUE_FORMAT format, void *prefix_data, const char *name, uint32_t name_len, const struct lysc_node **snode)
Callback for getting the first child schema node of an XPath document root of the extension instance...
Definition: plugins_exts.h:761
LIBYANG_API_DECL LY_ERR lyplg_ext_schema_mount_create_context(const struct lysc_ext_instance *ext, const struct lyd_node *parent, struct ly_ctx **ctx)
Allocate a new context for a particular instance of the yangmnt:mount-point extension. Caller is responsible for freeing the created context.
const char * argument
Definition: plugins_exts.h:398
struct lys_module * module
Definition: plugins_exts.h:433
LIBYANG_API_DECL LY_ERR lyplg_ext_parsed_get_storage(const struct lysc_ext_instance *ext, int stmt, uint32_t storage_size, const void **storage)
Get parsed ext instance storage for a specific statement.
LIBYANG_API_DECL void lyplg_ext_cfree_instance_substatements(const struct ly_ctx *ctx, struct lysc_ext_substmt *substmts)
Free the extension instance's data compiled with lyplg_ext_compile_extension_instance().
lyplg_ext_compile_free_clb cfree
Definition: plugins_exts.h:982
lyd_type
Definition: parser_data.h:364
Structure to hold a set of (not necessary somehow connected) objects. Usually used for lyd_node...
Definition: set.h:47
Printable YANG schema tree structure representing YANG module.
Definition: tree_schema.h:1112
struct lysp_stmt * child
Definition: plugins_exts.h:379
Available YANG schema tree structures representing YANG module.
Definition: tree_schema.h:2264
void(* lyplg_ext_node_xpath_clb)(struct lysc_ext_instance *ext, const struct lyd_node *cur_node, const struct lyd_node **node)
Callback for getting the first child data node of an XPath document root of the extension instance...
Definition: plugins_exts.h:742
lyplg_ext_node_xpath_clb node_xpath
Definition: plugins_exts.h:976
LIBYANG_API_DECL struct ly_out ** lyplg_ext_print_get_out(const struct lyspr_ctx *ctx)
YANG printer context getter for output handler.
lyplg_ext_compiled_size_clb compiled_size
Definition: plugins_exts.h:983
LIBYANG_API_DECL LY_ERR lyplg_ext_compiled_node_augments(struct lysc_ctx *ctx, struct lysc_ext_instance *ext, struct lysc_node *node)
Compile augments for a specific node in an extension instance.
enum ly_stmt parent_stmt
Definition: plugins_exts.h:438
LIBYANG_API_DECL struct lysp_module * lyplg_ext_parse_get_cur_pmod(const struct lysp_ctx *pctx)
Get current parsed module from a parse context.
LIBYANG_API_DEF void lyplg_ext_compile_log_err(const struct ly_err_item *eitem, const struct lysc_ext_instance *ext)
Log a message from an extension plugin using the compiled extension instance and a generated error it...
int(* lyplg_ext_compiled_size_clb)(const struct lysc_ext_instance *ext, struct ly_ht *addr_ht)
Callback to return the size of the custom compiled structure and substmts array. If there are none...
Definition: plugins_exts.h:894
LIBYANG_API_DECL uint32_t * lyplg_ext_print_get_options(const struct lyspr_ctx *ctx)
YANG printer context getter for printer options.
lyplg_ext_data_snode_clb snode
Definition: plugins_exts.h:978
const char * argument
Definition: plugins_exts.h:432
#define LY_ARRAY_COUNT_TYPE
Type (i.e. size) of the sized array's size counter.
Definition: tree.h:104
uintptr_t plugin_ref
Definition: plugins_exts.h:401
struct lysc_ext * def
Definition: plugins_exts.h:431
const char * arg
Definition: plugins_exts.h:374
libyang generic macros and functions to modify YANG schema or data trees. Intended for internal use a...
lyplg_ext_parse_free_clb pfree
Definition: plugins_exts.h:981
LY_ERR(* lyplg_ext_data_validate_clb)(struct lysc_ext_instance *ext, struct lyd_node *node, const struct lyd_node *dep_tree, enum lyd_type data_type, uint32_t val_opts, struct lyd_node **diff)
Callback for validating parsed YANG instance data described by an extension instance.
Definition: plugins_exts.h:825
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, uint32_t prefix_len, LY_VALUE_FORMAT format, void *prefix_data, const char *name, uint32_t name_len, const struct lysc_node **snode)
Callback for getting a schema node for new YANG instance data described by an extension instance...
Definition: plugins_exts.h:797
void(* lyplg_ext_compile_free_clb)(const struct ly_ctx *ctx, struct lysc_ext_instance *ext)
Callback to free the extension-specific data created by its compilation.
Definition: plugins_exts.h:858
LY_VALUE_FORMAT
All kinds of supported value formats and prefix mappings to modules.
Definition: tree.h:234
LIBYANG_API_DECL LY_ERR lyplg_ext_compiled_print_add_addr(struct ly_ht *addr_ht, const void *orig_addr, const void *addr)
Add a printed address of a shared structure to be reused by later prints.
Plugins manipulation.
LIBYANG_API_DECL const char * lyplg_ext_stmt2str(enum ly_stmt stmt)
Stringify statement identifier.
Structure representing a generic parsed YANG substatement in an extension instance.
Definition: plugins_exts.h:372
LIBYANG_API_DECL LY_ERR lyplg_ext_set_parent_ctx(struct ly_ctx *ctx, const struct ly_ctx *parent_ctx)
Set parent context of a context. Errors and callbacks of the parent context will then always be used...
LIBYANG_API_DECL uint32_t * lyplg_ext_compile_get_options(const struct lysc_ctx *ctx)
YANG schema compilation context getter for compilation options.
lyplg_ext_compiled_print_clb compiled_print
Definition: plugins_exts.h:984
Logger manipulation routines and error definitions.
LIBYANG_API_DECL LY_ERR lyplg_ext_schema_mount_create_shared_context(struct lysc_ext_instance *ext, const struct lyd_node *ext_data)
Create a shared schema mount context for a schema mount point.
LIBYANG_API_DECL int lyplg_ext_compiled_stmts_storage_size(const struct lysc_ext_substmt *substmts, struct ly_ht *addr_ht)
Get the size of the compiled substatements storage.
LIBYANG_API_DECL void lyplg_ext_compile_log_path(const char *path, const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err, const char *format,...)
Log a message from an extension plugin using the compiled extension instance with an explicit error p...
libyang context handler.
LY_VALUE_FORMAT format
Definition: plugins_exts.h:375
void * prefix_data
Definition: plugins_exts.h:376
struct lyd_node * parent
Definition: tree_data.h:790
YANG extension parsed instance.
Definition: plugins_exts.h:396