libyang  1.0.101
YANG data modeling language library
extensions.h
Go to the documentation of this file.
1 
15 #ifndef LY_EXTENSIONS_H_
16 #define LY_EXTENSIONS_H_
17 
18 #include "libyang.h"
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
32 #define LYEXT_API_VERSION 1
33 
38 #ifdef STATIC
39 #define LYEXT_VERSION_CHECK
40 #else
41 #define LYEXT_VERSION_CHECK int lyext_api_version = LYEXT_API_VERSION;
42 #endif
43 
47 typedef enum {
67 } LYEXT_PAR;
68 
82 typedef enum {
127 } LYEXT_SUBSTMT;
128 
142 typedef int (*lyext_check_position_clb)(const void *parent, LYEXT_PAR parent_type, LYEXT_SUBSTMT substmt_type);
143 
153 
165 typedef int (*lyext_check_inherit_clb)(struct lys_ext_instance *ext, struct lys_node *node);
166 
176 typedef int (*lyext_valid_data_clb)(struct lys_ext_instance *ext, struct lyd_node *node);
177 
178 struct lyext_plugin {
180  uint16_t flags;
190 };
191 
194  uint16_t flags;
206  size_t instance_size;
210 };
211 
213  const char *module;
214  const char *revision;
219  const char *name;
221 };
222 
226 void lyext_log(const struct ly_ctx *ctx, LY_LOG_LEVEL level, const char *plugin, const char *function, const char *format, ...);
227 
237 #define LYEXT_LOG(ctx, level, plugin, str, args...) \
238  lyext_log(ctx, level, plugin, __func__, str, ##args); \
239 
240 
244 typedef enum {
252 
256 void lyext_vlog(const struct ly_ctx *ctx, LY_VECODE vecode, const char *plugin, const char *function,
257  LYEXT_VLOG_ELEM elem_type, const void *elem, const char *format, ...);
258 
270 #define LYEXT_VLOG(ctx, vecode, plugin, elem_type, elem, str, args...) \
271  lyext_vlog(ctx, vecode, plugin, __func__, elem_type, elem, str, ##args)
272 
283 void lys_iffeature_free(struct ly_ctx *ctx, struct lys_iffeature *iffeature, uint8_t iffeature_size, int shallow,
284  void (*private_destructor)(const struct lys_node *node, void *priv));
285 
290 #ifdef __cplusplus
291 }
292 #endif
293 
294 #endif /* LY_EXTENSIONS_H_ */
LYEXT_PAR_REFINE
@ LYEXT_PAR_REFINE
Definition: extensions.h:60
LYEXT_VLOG_ELEM
LYEXT_VLOG_ELEM
Type of object concerned by a validation error. This is used to determine how to compute the path of ...
Definition: extensions.h:244
LYEXT_SUBSTMT_MAX
@ LYEXT_SUBSTMT_MAX
Definition: extensions.h:121
lyext_plugin_list::module
const char * module
Definition: extensions.h:213
LYEXT_PAR_IFFEATURE
@ LYEXT_PAR_IFFEATURE
Definition: extensions.h:66
LYEXT_SUBSTMT_ERRMSG
@ LYEXT_SUBSTMT_ERRMSG
Definition: extensions.h:95
LYEXT_PAR_EXT
@ LYEXT_PAR_EXT
Definition: extensions.h:58
LYEXT_SUBSTMT
LYEXT_SUBSTMT
List of substatement without extensions storage. If the module contains extension instances in these ...
Definition: extensions.h:82
LYEXT_SUBSTMT_UNIQUE
@ LYEXT_SUBSTMT_UNIQUE
Definition: extensions.h:126
LYEXT_SUBSTMT_PATH
@ LYEXT_SUBSTMT_PATH
Definition: extensions.h:99
lyext_check_result_clb
int(* lyext_check_result_clb)(struct lys_ext_instance *ext)
Callback to check that the extension instance is correct - have the valid argument,...
Definition: extensions.h:152
LYEXT_PAR_WHEN
@ LYEXT_PAR_WHEN
Definition: extensions.h:56
LYEXT_PAR_DEVIATE
@ LYEXT_PAR_DEVIATE
Definition: extensions.h:62
LYEXT_PAR_TPDF
@ LYEXT_PAR_TPDF
Definition: extensions.h:50
LYEXT_PAR_FEATURE
@ LYEXT_PAR_FEATURE
Definition: extensions.h:54
lyext_plugin::valid_data
lyext_valid_data_clb valid_data
Definition: extensions.h:189
LYEXT_SUBSTMT_CONFIG
@ LYEXT_SUBSTMT_CONFIG
Definition: extensions.h:114
lyext_valid_data_clb
int(* lyext_valid_data_clb)(struct lys_ext_instance *ext, struct lyd_node *node)
Callback to decide if data is valid towards to schema.
Definition: extensions.h:176
LYEXT_SUBSTMT_VERSION
@ LYEXT_SUBSTMT_VERSION
Definition: extensions.h:110
lyext_plugin_complex::instance_size
size_t instance_size
Definition: extensions.h:206
LYEXT_SUBSTMT_BASE
@ LYEXT_SUBSTMT_BASE
Definition: extensions.h:86
LYEXT_SUBSTMT_REFERENCE
@ LYEXT_SUBSTMT_REFERENCE
Definition: extensions.h:103
LYEXT_SUBSTMT_VALUE
@ LYEXT_SUBSTMT_VALUE
Definition: extensions.h:109
LYEXT_PAR_TYPE_BIT
@ LYEXT_PAR_TYPE_BIT
Definition: extensions.h:52
lyext_plugin_list::name
const char * name
Definition: extensions.h:219
lyext_substmt
Description of the extension instance substatement.
Definition: tree_schema.h:443
LYEXT_SUBSTMT_ARGUMENT
@ LYEXT_SUBSTMT_ARGUMENT
Definition: extensions.h:85
LYEXT_SUBSTMT_DEFAULT
@ LYEXT_SUBSTMT_DEFAULT
Definition: extensions.h:89
LYEXT_SUBSTMT_REQINSTANCE
@ LYEXT_SUBSTMT_REQINSTANCE
Definition: extensions.h:112
LYEXT_PAR_TYPE
@ LYEXT_PAR_TYPE
Definition: extensions.h:51
LYEXT_SUBSTMT_DESCRIPTION
@ LYEXT_SUBSTMT_DESCRIPTION
Definition: extensions.h:91
lys_ext_instance::ext
struct lys_ext_instance ** ext
Definition: tree_schema.h:494
lyext_plugin_list
Definition: extensions.h:212
LYEXT_PAR_DEVIATION
@ LYEXT_PAR_DEVIATION
Definition: extensions.h:61
LYEXT_SUBSTMT_REVISIONDATE
@ LYEXT_SUBSTMT_REVISIONDATE
Definition: extensions.h:106
LYEXT_SUBSTMT_MIN
@ LYEXT_SUBSTMT_MIN
Definition: extensions.h:123
lyext_plugin_list::revision
const char * revision
Definition: extensions.h:214
LYEXT_SUBSTMT_ORGANIZATION
@ LYEXT_SUBSTMT_ORGANIZATION
Definition: extensions.h:98
libyang.h
The main libyang public header.
lyd_node
Generic structure for a data node, directly applicable to the data nodes defined as LYS_CONTAINER,...
Definition: tree_data.h:178
lyext_plugin_list::plugin
struct lyext_plugin * plugin
Definition: extensions.h:220
ly_ctx
libyang context handler.
LYEXT_VLOG_STR
@ LYEXT_VLOG_STR
Definition: extensions.h:249
LYEXT_VLOG_XML
@ LYEXT_VLOG_XML
Definition: extensions.h:246
LY_LOG_LEVEL
LY_LOG_LEVEL
Verbosity levels of the libyang logger.
Definition: libyang.h:1860
lyext_check_position_clb
int(* lyext_check_position_clb)(const void *parent, LYEXT_PAR parent_type, LYEXT_SUBSTMT substmt_type)
Callback to check that the extension can be instantiated inside the provided node.
Definition: extensions.h:142
lyext_check_inherit_clb
int(* lyext_check_inherit_clb)(struct lys_ext_instance *ext, struct lys_node *node)
Callback to decide whether the extension will be inherited into the provided schema node....
Definition: extensions.h:165
LYEXT_PAR_EXTINST
@ LYEXT_PAR_EXTINST
Definition: extensions.h:59
LYEXT_SUBSTMT_BELONGSTO
@ LYEXT_SUBSTMT_BELONGSTO
Definition: extensions.h:87
LYEXT_SUBSTMT_DIGITS
@ LYEXT_SUBSTMT_DIGITS
Definition: extensions.h:120
LYEXT_SUBSTMT_MODIFIER
@ LYEXT_SUBSTMT_MODIFIER
Definition: extensions.h:111
LYEXT_PAR_NODE
@ LYEXT_PAR_NODE
Definition: extensions.h:49
LYEXT_PAR_IMPORT
@ LYEXT_PAR_IMPORT
Definition: extensions.h:63
LYEXT_SUBSTMT_CONTACT
@ LYEXT_SUBSTMT_CONTACT
Definition: extensions.h:88
LYEXT_VLOG_PREV
@ LYEXT_VLOG_PREV
Definition: extensions.h:250
LYEXT_VLOG_NONE
@ LYEXT_VLOG_NONE
Definition: extensions.h:245
lyext_log
void lyext_log(const struct ly_ctx *ctx, LY_LOG_LEVEL level, const char *plugin, const char *function, const char *format,...)
Logging function for extension plugins, use LYEXT_LOG macro instead!
LYEXT_SUBSTMT_YINELEM
@ LYEXT_SUBSTMT_YINELEM
Definition: extensions.h:113
LYEXT_VLOG_LYD
@ LYEXT_VLOG_LYD
Definition: extensions.h:248
lyext_plugin::type
LYEXT_TYPE type
Definition: extensions.h:179
LYEXT_PAR_MODULE
@ LYEXT_PAR_MODULE
Definition: extensions.h:48
lys_node
Common structure representing single YANG data statement describing.
Definition: tree_schema.h:1217
LY_VECODE
LY_VECODE
libyang's codes of validation error. Whenever ly_errno is set to LY_EVALID, the ly_vecode is also set...
Definition: libyang.h:1976
LYEXT_SUBSTMT_SELF
@ LYEXT_SUBSTMT_SELF
Definition: extensions.h:84
LYEXT_SUBSTMT_ALL
@ LYEXT_SUBSTMT_ALL
Definition: extensions.h:83
LYEXT_SUBSTMT_ORDEREDBY
@ LYEXT_SUBSTMT_ORDEREDBY
Definition: extensions.h:117
LYEXT_PAR_RESTR
@ LYEXT_PAR_RESTR
Definition: extensions.h:55
lyext_plugin::check_result
lyext_check_result_clb check_result
Definition: extensions.h:184
LYEXT_SUBSTMT_PRESENCE
@ LYEXT_SUBSTMT_PRESENCE
Definition: extensions.h:102
LYEXT_PAR_TYPE_ENUM
@ LYEXT_PAR_TYPE_ENUM
Definition: extensions.h:53
LYEXT_SUBSTMT_KEY
@ LYEXT_SUBSTMT_KEY
Definition: extensions.h:96
LYEXT_SUBSTMT_STATUS
@ LYEXT_SUBSTMT_STATUS
Definition: extensions.h:118
LYEXT_PAR_IDENT
@ LYEXT_PAR_IDENT
Definition: extensions.h:57
lyext_plugin::check_inherit
lyext_check_inherit_clb check_inherit
Definition: extensions.h:186
LYEXT_PAR
LYEXT_PAR
Extension instance structure parent enumeration.
Definition: extensions.h:47
LYEXT_SUBSTMT_NAMESPACE
@ LYEXT_SUBSTMT_NAMESPACE
Definition: extensions.h:97
LYEXT_SUBSTMT_UNITS
@ LYEXT_SUBSTMT_UNITS
Definition: extensions.h:107
lyext_plugin::flags
uint16_t flags
Definition: extensions.h:180
lys_iffeature
Compiled if-feature expression structure.
Definition: tree_schema.h:1078
lyext_plugin_complex
Definition: extensions.h:192
lyext_plugin_complex::substmt
struct lyext_substmt * substmt
Definition: extensions.h:204
LYEXT_VLOG_LYS
@ LYEXT_VLOG_LYS
Definition: extensions.h:247
LYEXT_SUBSTMT_MANDATORY
@ LYEXT_SUBSTMT_MANDATORY
Definition: extensions.h:115
lys_ext_instance
Generic extension instance structure.
Definition: tree_schema.h:472
LYEXT_SUBSTMT_POSITION
@ LYEXT_SUBSTMT_POSITION
Definition: extensions.h:125
LYEXT_PAR_INCLUDE
@ LYEXT_PAR_INCLUDE
Definition: extensions.h:64
lyext_plugin::check_position
lyext_check_position_clb check_position
Definition: extensions.h:182
lyext_plugin
Definition: extensions.h:178
lyext_vlog
void lyext_vlog(const struct ly_ctx *ctx, LY_VECODE vecode, const char *plugin, const char *function, LYEXT_VLOG_ELEM elem_type, const void *elem, const char *format,...)
Validation logging function for extension plugins, use LYEXT_VLOG macro instead!
LYEXT_TYPE
LYEXT_TYPE
Extension types.
Definition: tree_schema.h:392
LYEXT_SUBSTMT_ERRTAG
@ LYEXT_SUBSTMT_ERRTAG
Definition: extensions.h:94
LYEXT_SUBSTMT_PREFIX
@ LYEXT_SUBSTMT_PREFIX
Definition: extensions.h:100
LYEXT_PAR_REVISION
@ LYEXT_PAR_REVISION
Definition: extensions.h:65
lys_iffeature_free
void lys_iffeature_free(struct ly_ctx *ctx, struct lys_iffeature *iffeature, uint8_t iffeature_size, int shallow, void(*private_destructor)(const struct lys_node *node, void *priv))
Free iffeature structure. In API only for plugins that want to handle if-feature statements similarly...