blob: e561a4ab709ac38404b9e71635d5d6da943791be [file] [log] [blame]
Radek Krejci9b4ca392015-04-10 08:31:27 +02001/**
Radek Krejci3045cf32015-05-28 10:58:52 +02002 * @file libyang.h
Radek Krejci9b4ca392015-04-10 08:31:27 +02003 * @author Radek Krejci <rkrejci@cesnet.cz>
Radek Krejci3045cf32015-05-28 10:58:52 +02004 * @brief The main libyang public header.
Radek Krejci9b4ca392015-04-10 08:31:27 +02005 *
Radek Krejcidef50022016-02-01 16:38:32 +01006 * Copyright (c) 2015-2016 CESNET, z.s.p.o.
Radek Krejci9b4ca392015-04-10 08:31:27 +02007 *
Radek Krejci54f6fb32016-02-24 12:56:39 +01008 * This source code is licensed under BSD 3-Clause License (the "License").
9 * You may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
Michal Vasko8de098c2016-02-26 10:00:25 +010011 *
Radek Krejci54f6fb32016-02-24 12:56:39 +010012 * https://opensource.org/licenses/BSD-3-Clause
Radek Krejci9b4ca392015-04-10 08:31:27 +020013 */
14
15#ifndef LY_LIBYANG_H_
16#define LY_LIBYANG_H_
17
Radek Krejcida04f4a2015-05-21 12:54:09 +020018#include <stdio.h>
19
Michal Vasko2d162e12015-09-24 14:33:29 +020020#include "tree_schema.h"
21#include "tree_data.h"
Radek Krejcic6704c82015-10-06 11:12:45 +020022#include "xml.h"
Radek Krejci41912fe2015-10-22 10:22:12 +020023#include "dict.h"
Radek Krejcida04f4a2015-05-21 12:54:09 +020024
Radek Krejci39d8d0d2015-08-17 13:42:45 +020025#ifdef __cplusplus
26extern "C" {
27#endif
28
Radek Krejci60cdf282016-10-10 16:22:22 +020029#define LY_VERSION_MAJOR @LIBYANG_MAJOR_VERSION@ /**< libyang major version number */
30#define LY_VERSION_MINOR @LIBYANG_MINOR_VERSION@ /**< libyang minor version number */
31#define LY_VERSION_MICRO @LIBYANG_MICRO_VERSION@ /**< libyang micro version number */
32
Radek Krejci26715a42015-07-29 14:10:45 +020033/**
Radek Krejcidef50022016-02-01 16:38:32 +010034 * @mainpage About
35 *
36 * libyang is a library implementing processing of the YANG schemas and data modeled by the YANG language. The
37 * library is implemented in C for GNU/Linux and provides C API.
38 *
39 * @section about-features Main Features
40 *
Radek Krejcib4e72e52016-04-13 15:10:51 +020041 * - Parsing (and validating) schemas in YANG format.
Radek Krejcidef50022016-02-01 16:38:32 +010042 * - Parsing (and validating) schemas in YIN format.
43 * - Parsing, validating and printing instance data in XML format.
Radek Krejci3c73f492016-09-20 16:29:30 +020044 * - Parsing, validating and printing instance data in JSON format ([RFC 7951](https://tools.ietf.org/html/rfc7951)).
Radek Krejcidef50022016-02-01 16:38:32 +010045 * - Manipulation with the instance data.
Radek Krejci3c73f492016-09-20 16:29:30 +020046 * - Support for default values in the instance data ([RFC 6243](https://tools.ietf.org/html/rfc6243)).
Radek Krejcidef50022016-02-01 16:38:32 +010047 *
Radek Krejcidaa080f2016-10-05 08:38:09 +020048 * The current implementation covers YANG 1.0 ([RFC 6020](https://tools.ietf.org/html/rfc6020)) as well as
49 * YANG 1.1 ([RFC 7950](https://tools.ietf.org/html/rfc7950)).
Radek Krejci8b13fc02016-04-18 13:08:04 +020050 *
Radek Krejcidef50022016-02-01 16:38:32 +010051 * @subsection about-features-others Extra (side-effect) Features
52 *
53 * - XML parser.
54 * - Optimized string storage (dictionary).
55 *
56 * @section about-license License
57 *
58 * Copyright (c) 2015-2016 CESNET, z.s.p.o.
59 *
60 * (The BSD 3-Clause License)
61 *
62 * Redistribution and use in source and binary forms, with or without
63 * modification, are permitted provided that the following conditions
64 * are met:
65 * 1. Redistributions of source code must retain the above copyright
66 * notice, this list of conditions and the following disclaimer.
67 * 2. Redistributions in binary form must reproduce the above copyright
68 * notice, this list of conditions and the following disclaimer in
69 * the documentation and/or other materials provided with the
70 * distribution.
71 * 3. Neither the name of the Company nor the names of its contributors
72 * may be used to endorse or promote products derived from this
73 * software without specific prior written permission.
74 */
75
76/**
Radek Krejci26715a42015-07-29 14:10:45 +020077 * @page howto How To ...
78 *
79 * - @subpage howtocontext
Radek Krejcid9ba3e32015-07-30 15:08:18 +020080 * - @subpage howtoschemas
81 * - @subpage howtodata
Michal Vasko0f14ba62016-03-21 15:38:11 +010082 * - @subpage howtoxpath
Radek Krejcidef50022016-02-01 16:38:32 +010083 * - @subpage howtoxml
84 * - @subpage howtothreads
Radek Krejci26715a42015-07-29 14:10:45 +020085 * - @subpage howtologger
86 */
Radek Krejcida04f4a2015-05-21 12:54:09 +020087
Radek Krejci26715a42015-07-29 14:10:45 +020088/** @page howtocontext Context
89 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +020090 * The context concept allows callers to work in environments with different sets of YANG schemas.
Radek Krejci26715a42015-07-29 14:10:45 +020091 *
92 * The first step in libyang is to create a new context using ly_ctx_new(). It returns a handler
93 * used in the following work.
94 *
95 * When creating a new context, search dir can be specified (NULL is accepted) to provide directory
96 * where libyang will automatically search for schemas being imported or included. The search path
Radek Krejci1fbe8582016-09-15 09:40:11 +020097 * can be later changed via ly_ctx_set_searchdir() function. If the search dir is specified, it is explored
98 * first. In case the module is not found, libyang tries to find the (sub)module also in current working working
99 * directory. This automatic searching can be completely avoided when the caller sets module searching callback
Radek Krejcidef50022016-02-01 16:38:32 +0100100 * (#ly_module_clb) via ly_ctx_set_module_clb().
Radek Krejci26715a42015-07-29 14:10:45 +0200101 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200102 * Schemas are added into the context using [parser functions](@ref howtoschemasparsers) - \b lys_parse_*().
Radek Krejcidef50022016-02-01 16:38:32 +0100103 * In case of schemas, also ly_ctx_load_module() can be used - in that case the #ly_module_clb or automatic
Radek Krejci1fbe8582016-09-15 09:40:11 +0200104 * search in search dir and in the current working directory is used.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200105 *
106 * Similarly, data trees can be parsed by \b lyd_parse_*() functions. Note, that functions for schemas have \b lys_
Radek Krejcidef50022016-02-01 16:38:32 +0100107 * prefix while functions for instance data have \b lyd_ prefix.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200108 *
Radek Krejciee674072016-09-15 10:37:40 +0200109 * Context can hold multiple revisions of the same schema, but only one of them can be implemented. The schema is not
110 * implemented in case it is automatically loaded as import for another module and it is not referenced in such
111 * a module (and no other) as target of leafref, augment or deviation. All modules with deviation definition are always
112 * marked as implemented. The imported (not implemented) module can be set implemented by lys_set_implemented(). But
113 * the implemented module cannot be changed back to just imported module. The imported modules are used only as a
114 * source of definitions for types (including identities) and uses statements. The data in such a modules are
115 * ignored - caller is not allowed to create the data defined in the model via data parsers, the default nodes are
116 * not added into any data tree and mandatory nodes are not checked in the data trees.
Radek Krejci26715a42015-07-29 14:10:45 +0200117 *
Radek Krejci31fb8be2016-06-23 15:26:26 +0200118 * Context holds all modules and their submodules internally. To get
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200119 * a specific module or submodule, use ly_ctx_get_module() and ly_ctx_get_submodule(). There are some additional
Radek Krejci31fb8be2016-06-23 15:26:26 +0200120 * alternatives to these functions (with different parameters). If you need to do something with all the modules or
Michal Vasko462be9a2016-04-05 11:24:08 +0200121 * submodules in the context, it is advised to iterate over them using ly_ctx_get_module_iter(), it is
122 * the most efficient way. Alternatively, the ly_ctx_info() function can be used to get complex information
123 * about the schemas in the context in the form of data tree defined by
Radek Krejcibd9e8d22016-02-03 14:11:48 +0100124 * <a href="https://tools.ietf.org/html/draft-ietf-netconf-yang-library-04">ietf-yang-library</a> schema.
Michal Vaskoac7f4222016-09-21 09:02:29 +0200125 * To get a specific node defined in a module in the context, ly_ctx_get_node() can be used.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200126 *
127 * Modules held by a context cannot be removed one after one. The only way how to \em change modules in the
128 * context is to create a new context and remove the old one. To remove a context, there is ly_ctx_destroy()
129 * function.
130 *
Radek Krejcidef50022016-02-01 16:38:32 +0100131 * - @subpage howtocontextdict
132 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200133 * \note API for this group of functions is available in the [context module](@ref context).
134 *
Radek Krejcidef50022016-02-01 16:38:32 +0100135 * Functions List
136 * --------------
137 * - ly_ctx_new()
138 * - ly_ctx_set_searchdir()
139 * - ly_ctx_get_searchdir()
140 * - ly_ctx_set_module_clb()
141 * - ly_ctx_get_module_clb()
142 * - ly_ctx_load_module()
143 * - ly_ctx_info()
Michal Vaskod7957c02016-04-01 10:27:26 +0200144 * - ly_ctx_get_module_iter()
Radek Krejcidef50022016-02-01 16:38:32 +0100145 * - ly_ctx_get_module()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200146 * - ly_ctx_get_module_older()
Radek Krejcidef50022016-02-01 16:38:32 +0100147 * - ly_ctx_get_module_by_ns()
Radek Krejcidef50022016-02-01 16:38:32 +0100148 * - ly_ctx_get_submodule()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200149 * - ly_ctx_get_submodule2()
Michal Vasko3edeaf72016-02-11 13:17:43 +0100150 * - ly_ctx_get_node()
Radek Krejcidef50022016-02-01 16:38:32 +0100151 * - ly_ctx_destroy()
Radek Krejciee674072016-09-15 10:37:40 +0200152 * - lys_set_implemented()
Radek Krejcidef50022016-02-01 16:38:32 +0100153 */
154
155/**
156 * @page howtocontextdict Context Dictionary
157 *
158 * Context includes dictionary to store strings more effectively. The most of strings repeats quite often in schema
159 * as well as data trees. Therefore, instead of allocating those strings each time they appear, libyang stores them
160 * as records in the dictionary. The basic API to the context dictionary is public, so even a caller application can
161 * use the dictionary.
162 *
163 * To insert a string into the dictionary, caller can use lydict_insert() (adding a constant string) or
164 * lydict_insert_zc() (for dynamically allocated strings that won't be used by the caller after its insertion into
165 * the dictionary). Both functions return the pointer to the inserted string in the dictionary record.
166 *
167 * To remove (reference of the) string from the context dictionary, lydict_remove() is supposed to be used.
168 *
169 * \note Incorrect usage of the dictionary can break libyang functionality.
170 *
171 * \note API for this group of functions is described in the [XML Parser module](@ref dict).
172 *
173 * Functions List
174 * --------------
175 * - lydict_insert()
176 * - lydict_insert_zc()
177 * - lydict_remove()
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200178 */
179
180/**
181 * @page howtoschemas Schemas
182 *
Radek Krejcidef50022016-02-01 16:38:32 +0100183 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200184 * Schema is an internal libyang's representation of a YANG data model. Each schema is connected with
Radek Krejcidef50022016-02-01 16:38:32 +0100185 * its [context](@ref howtocontext) and loaded using [parser functions](@ref howtoschemasparsers). It means, that
186 * the schema cannot be created (nor changed) programmatically. In libyang, schemas are used only to
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200187 * access data model definitions.
188 *
Radek Krejcidef50022016-02-01 16:38:32 +0100189 * Schema tree nodes are able to hold private objects (via a pointer to a structure, function, variable, ...) used by
190 * a caller application. Such an object can be assigned to a specific node using lys_set_private() function.
191 * Note that the object is not freed by libyang when the context is being destroyed. So the caller is responsible
192 * for freeing the provided structure after the context is destroyed or the private pointer is set to NULL in
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200193 * appropriate schema nodes where the object was previously set. This can be automated via destructor function
194 * to free these private objects. The destructor is passed to the ly_ctx_destroy() function. On the other hand,
195 * freeing the object while the schema tree is still in use can lead to a segmentation fault.
Radek Krejcidef50022016-02-01 16:38:32 +0100196 *
197 * - @subpage howtoschemasparsers
198 * - @subpage howtoschemasfeatures
199 * - @subpage howtoschemasprinters
200 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200201 * \note There are many functions to access information from the schema trees. Details are available in
202 * the [Schema Tree module](@ref schematree).
203 *
Radek Krejciee674072016-09-15 10:37:40 +0200204 * For information about difference between implemented and imported modules, see the
205 * [context description](@ref howtocontext).
206 *
Radek Krejcidef50022016-02-01 16:38:32 +0100207 * Functions List (not assigned to above subsections)
208 * --------------------------------------------------
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200209 * - lys_getnext()
Radek Krejcidef50022016-02-01 16:38:32 +0100210 * - lys_parent()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200211 * - lys_module()
212 * - lys_node_module()
Radek Krejcidef50022016-02-01 16:38:32 +0100213 * - lys_set_private()
Radek Krejciee674072016-09-15 10:37:40 +0200214 * - lys_set_implemented()
Radek Krejcidef50022016-02-01 16:38:32 +0100215 */
216
217/**
218 * @page howtoschemasparsers Parsing Schemas
219 *
220 * Schema parser allows to read schema from a specific format. libyang supports the following schema formats:
221 *
222 * - YANG
223 *
224 * Basic YANG schemas format described in [RFC 6020](http://tools.ietf.org/html/rfc6020).
225 * Currently, only YANG 1.0 is supported.
226 *
Radek Krejcidef50022016-02-01 16:38:32 +0100227 * - YIN
228 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200229 * Alternative XML-based format to YANG - YANG Independent Notation. The details can be found in
Radek Krejcidef50022016-02-01 16:38:32 +0100230 * [RFC 6020](http://tools.ietf.org/html/rfc6020#section-11).
231 *
232 * When the [context](@ref howtocontext) is created, it already contains the following three schemas, which
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200233 * are implemented internally by libyang:
Radek Krejcidef50022016-02-01 16:38:32 +0100234 * - ietf-inet-types@2013-07-15
235 * - ietf-yang-types@2013-07-15
236 * - ietf-yang-library@2015-07-03
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200237 * - yang@2016-02-11
238 *
239 * The last one is libyang's internal module to provide namespace for various YANG attributes defined in RFC 6020
240 * (such as `insert` attribute for edit-config's data).
Radek Krejcidef50022016-02-01 16:38:32 +0100241 *
242 * Other schemas can be added to the context manually as described in [context page](@ref howtocontext) by the functions
243 * listed below. Besides the schema parser functions, it is also possible to use ly_ctx_load_module() which tries to
244 * find the required schema automatically - using #ly_module_clb or automatic search in working directory and in the
245 * context's searchpath.
246 *
247 * Functions List
248 * --------------
Radek Krejci722b0072016-02-01 17:09:45 +0100249 * - lys_parse_mem()
Radek Krejcidef50022016-02-01 16:38:32 +0100250 * - lys_parse_fd()
251 * - lys_parse_path()
252 * - ly_ctx_set_module_clb()
253 * - ly_ctx_load_module()
254 */
255
256/**
257 * @page howtoschemasfeatures YANG Features Manipulation
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200258 *
259 * The group of functions prefixed by \b lys_features_ are used to access and manipulate with the schema's
260 * features.
261 *
262 * The first two functions are used to access information about the features in the schema.
263 * lys_features_list() provides list of all features defined in the specific schema and its
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200264 * submodules. Optionally, it can also provide information about the state of all features.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200265 * Alternatively, caller can use lys_features_state() function to get state of one specific
266 * feature.
267 *
268 * The remaining two functions, lys_features_enable() and lys_features_disable(), are used
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200269 * to enable and disable the specific feature (or all via the '`*`' value). By default, when the module
Radek Krejcidef50022016-02-01 16:38:32 +0100270 * is loaded by libyang parser, all features are disabled.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200271 *
Radek Krejcidef50022016-02-01 16:38:32 +0100272 * To get know, if a specific schema node is currently disabled or enable, the lys_is_disabled() function can be used.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200273 *
Radek Krejcidef50022016-02-01 16:38:32 +0100274 * Note, that the feature's state can affect some of the output formats (e.g. Tree format).
275 *
276 * Functions List
277 * --------------
278 * - lys_features_list()
279 * - lys_features_enable()
280 * - lys_features_disable()
281 * - lys_features_state()
282 * - lys_is_disabled()
283 */
284
285/**
286 * @page howtoschemasprinters Printing Schemas
287 *
288 * Schema printers allows to serialize internal representation of a schema module in a specific format. libyang
289 * supports the following schema formats for printing:
290 *
291 * - YANG
292 *
293 * Basic YANG schemas format described in [RFC 6020](http://tools.ietf.org/html/rfc6020).
294 * Currently, only YANG 1.0 is supported.
295 *
296 * - YIN
297 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200298 * Alternative XML-based format to YANG - YANG Independent Notation. The details can be found in
Radek Krejcidef50022016-02-01 16:38:32 +0100299 * [RFC 6020](http://tools.ietf.org/html/rfc6020#section-11).
300 *
Radek Krejcidef50022016-02-01 16:38:32 +0100301 * - Tree
302 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200303 * Simple tree structure of the module where each node is printed as:
304 *
305 * <status> <flags> <name> <opts> <type> <if-features>
306 *
307 * - `<status>` is one of:
308 * - `+` for current
309 * - `x` for deprecated
310 * - `o` for obsolete
311 *
312 * - `<flags>` is one of:
313 * - `rw` for configuration data
314 * - `ro` for status data
315 * - `-x` for RPCs
316 * - `-n` for Notification
317 *
318 * - `<name>` is the name of the node
319 * - `(<name>)` means that the node is a choice node
320 * - `:(<name>)` means that the node is a case node
321 * - if the node is augmented into the tree from another module, it is printed with the module name as
322 * `<module-name>:<name>`.
323 *
324 * - `<opts>` is one of:
325 * - `?` for an optional leaf or choice
326 * - `!` for a presence container
327 * - `*` for a leaf-list or list
328 * - `[<keys>]` for a list's keys
329 *
330 * - `<type>` is the name of the type for leafs and leaf-lists
331 * - if there is a default value defined, it is printed within angle brackets `<default-value>`
332 * - if the type is a leafref, the type is printed as -> TARGET`
333 *
334 * - `<if-features>` is the list of features this node depends on, printed within curly brackets and
335 * a question mark `{...}?`
336 *
Radek Krejcidef50022016-02-01 16:38:32 +0100337 *
338 * - Info
339 *
340 * Detailed information about the specific node in the schema tree.
341 * It allows to print information not only about a specific module, but also about its specific part:
342 *
343 * - absolute-schema-nodeid
344 *
345 * e.g. \a `/modules/module-set-id` in \a `ietf-yang-library` module
346 *
347 * - <b>typedef/</b>typedef-name
348 *
349 * e.g. \a `typedef/revision-identifier` in \a `ietf-yang-library` module
350 *
351 * - <b>feature/</b>feature-name
352 *
353 * e.g. \a `feature/ssh` in \a `ietf-netconf-server` module
354 *
355 * - <b>grouping/</b>grouping-name/descendant-schema-nodeid
356 *
357 * e.g. \a `grouping/module` or \a `grouping/module/module/submodules` in \a `ietf-yang-library` module
358 *
359 * - <b>type/</b>leaf-or-leaflist
360 *
361 * e.g. \a `type/modules/module-set-id` in \a `ietf-yang-library` module
362 *
363 * Printer functions allow to print to the different outputs including a callback function which allows caller
364 * to have a full control of the output data - libyang passes to the callback a private argument (some internal
365 * data provided by a caller of lys_print_clb()), string buffer and number of characters to print. Note that the
366 * callback is supposed to be called multiple times during the lys_print_clb() execution.
367 *
368 * Functions List
369 * --------------
370 * - lys_print_mem()
371 * - lys_print_fd()
372 * - lys_print_file()
373 * - lys_print_clb()
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200374 */
375
376/**
377 * @page howtodata Data Instances
Radek Krejci26715a42015-07-29 14:10:45 +0200378 *
Radek Krejcidef50022016-02-01 16:38:32 +0100379 * All data nodes in data trees are connected with their schema node - libyang is not able to represent data of an
380 * unknown schema.
381 *
Michal Vasko1ec579e2016-09-13 11:24:28 +0200382 * Please, continue reading a specific subsection or go through all the subsections if you are a new user of libyang.
Radek Krejcidef50022016-02-01 16:38:32 +0100383 *
384 * - @subpage howtodataparsers
385 * - @subpage howtodatamanipulators
Michal Vasko1ec579e2016-09-13 11:24:28 +0200386 * - @subpage howtodatavalidation
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200387 * - @subpage howtodatawd
Radek Krejcidef50022016-02-01 16:38:32 +0100388 * - @subpage howtodataprinters
389 *
390 * \note API for this group of functions is described in the [Data Instances module](@ref datatree).
391 *
392 * Functions List (not assigned to above subsections)
393 * --------------------------------------------------
Michal Vaskof06fb5b2016-09-08 10:05:56 +0200394 * - lyd_find_instance()
395 * - lyd_find_xpath()
Radek Krejciae1c3b12016-09-20 16:30:32 +0200396 * - lyd_leaf_type()
Radek Krejcidef50022016-02-01 16:38:32 +0100397 */
398
399/**
400 * @page howtodataparsers Parsing Data
401 *
402 * Data parser allows to read instances from a specific format. libyang supports the following data formats:
403 *
404 * - XML
405 *
406 * Original data format used in NETCONF protocol. XML mapping is part of the YANG specification
407 * ([RFC 6020](http://tools.ietf.org/html/rfc6020)).
408 *
409 * - JSON
410 *
411 * The alternative data format available in RESTCONF protocol. Specification of JSON encoding of data modeled by YANG
412 * can be found in [this draft](https://tools.ietf.org/html/draft-ietf-netmod-yang-json-05).
413 *
414 * Besides the format of input data, the parser functions accepts additional [options](@ref parseroptions) to specify
415 * how the input data should be processed.
416 *
417 * In contrast to the schema parser, data parser also accepts empty input data if such an empty data tree is valid
418 * according to the schemas in the libyang context.
419 *
420 * In case of XML input data, there is one additional way to parse input data. Besides parsing the data from a string
421 * in memory or a file, caller is able to build an XML tree using [libyang XML parser](@ref howtoxml) and then use
422 * this tree (or a part of it) as input to the lyd_parse_xml() function.
423 *
424 * Functions List
425 * --------------
Radek Krejci722b0072016-02-01 17:09:45 +0100426 * - lyd_parse_mem()
Radek Krejcidef50022016-02-01 16:38:32 +0100427 * - lyd_parse_fd()
428 * - lyd_parse_path()
429 * - lyd_parse_xml()
430 */
431
432/**
433 * @page howtodatamanipulators Manipulating Data
434 *
435 * There are many functions to create or modify an existing data tree. You can add new nodes, reconnect nodes from
436 * one tree to another (or e.g. from one list instance to another) or remove nodes. The functions doesn't allow you
437 * to put a node to a wrong place (by checking the module), but not all validation checks can be made directly
438 * (or you have to make a valid change by multiple tree modifications) when the tree is being changed. Therefore,
Michal Vasko58f74f12016-03-24 13:26:06 +0100439 * there is lyd_validate() function supposed to be called to make sure that the current data tree is valid. If
440 * working with RPCs, they are invalid also in case the data nodes are not ordered according to the schema, which
441 * you can fix easily with lyd_schema_sort(). Note, that not performing validation after some data tree changes
442 * can cause failure of various libyang functions later.
Radek Krejcidef50022016-02-01 16:38:32 +0100443 *
Michal Vasko0f14ba62016-03-21 15:38:11 +0100444 * Creating data is generally possible in two ways, they can be combined. You can add nodes one-by-one based on
Michal Vasko1ec579e2016-09-13 11:24:28 +0200445 * the node name and/or its parent (lyd_new(), \b lyd_new_anydata_*(), lyd_new_leaf(), and their output variants) or
Michal Vasko58f74f12016-03-24 13:26:06 +0100446 * address the nodes using a simple XPath addressing (lyd_new_path()). The latter enables to create a whole path
447 * of nodes, requires less information about the modified data, and is generally simpler to use. The path format
448 * specifics can be found [here](@ref howtoxpath).
Michal Vasko0f14ba62016-03-21 15:38:11 +0100449 *
Michal Vasko3c126822016-09-22 13:48:42 +0200450 * Working with two data subtrees can also be performed two ways. Usually, you would use lyd_insert*() functions.
451 * They are generally meant for simple inserts of a node into a data tree. For more complicated inserts and when
452 * merging 2 trees use lyd_merge(). It offers additional options and is basically a more powerful insert.
Michal Vasko45fb2822016-04-18 13:32:17 +0200453 *
Radek Krejcidef50022016-02-01 16:38:32 +0100454 * Also remember, that when you are creating/inserting a node, all the objects in that operation must belong to the
455 * same context.
456 *
457 * Modifying the single data tree in multiple threads is not safe.
458 *
459 * Functions List
460 * --------------
461 * - lyd_dup()
462 * - lyd_change_leaf()
463 * - lyd_insert()
Radek Krejcidb6b1662016-09-15 10:40:16 +0200464 * - lyd_insert_sibling()
Radek Krejcidef50022016-02-01 16:38:32 +0100465 * - lyd_insert_before()
466 * - lyd_insert_after()
467 * - lyd_insert_attr()
Michal Vasko45fb2822016-04-18 13:32:17 +0200468 * - lyd_merge()
Radek Krejcidef50022016-02-01 16:38:32 +0100469 * - lyd_new()
Michal Vasko0845b112016-09-08 10:07:08 +0200470 * - lyd_new_anydata()
Radek Krejcidef50022016-02-01 16:38:32 +0100471 * - lyd_new_leaf()
Michal Vaskof5299282016-03-16 13:32:02 +0100472 * - lyd_new_path()
Michal Vasko0ba46152016-05-11 14:16:55 +0200473 * - lyd_new_output()
Michal Vasko0845b112016-09-08 10:07:08 +0200474 * - lyd_new_output_anydata()
Michal Vasko0ba46152016-05-11 14:16:55 +0200475 * - lyd_new_output_leaf()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200476 * - lyd_schema_sort()
Radek Krejcidef50022016-02-01 16:38:32 +0100477 * - lyd_unlink()
478 * - lyd_free()
479 * - lyd_free_attr()
480 * - lyd_free_withsiblings()
Michal Vasko1ec579e2016-09-13 11:24:28 +0200481 */
482
483/**
484 * @page howtodatavalidation Validating Data
485 *
486 * By default, the represented data are supposed to represent a full YANG datastore content. So if a schema declares
487 * some mandatory nodes, despite configuration or status, the data are supposed to be present in the data tree being
488 * loaded or validated. However, it is possible to specify other kinds of data (see @ref parseroptions) allowing some
489 * exceptions to the validation process.
490 *
491 * Data validation is performed implicitly to the input data processed by the parser (\b lyd_parse_*() functions) and
492 * on demand via the lyd_validate() function. The lyd_validate() is supposed to be used when a (complex or simple)
493 * change is done on the data tree (via a combination of \b lyd_change_*(), \b lyd_insert*(), \b lyd_new*(),
494 * lyd_unlink() and lyd_free() functions).
495 *
496 * Must And When Conditions Accessible Tree
497 * ----------------------------------------
498 *
499 * In YANG 1.1, there can be \b must and/or \b when expressions in RPC/action input or output, or in notifications that
500 * require access to the configuration datastore and/or state data. Normally, when working with any of the aforementioned
501 * data trees, they must contain only the RPC/action/notification itself, without any additional configuration or state
502 * data. So how can then these conditions be verified during validation?
503 *
504 * There is an option to pass this additional data tree to all the functions that perform \b must and \b when condition
505 * checking (\b lyd_parse_*() and lyd_validate()). Also, there is a flag #LYS_XPATH_DEP of \b struct lys_node that
506 * marks schema nodes that include conditions that require foreign nodes (outside their subtree) for their evaluation.
507 * The subtree root is always the particular operation data node (for RPC it is the RPC data node and all
508 * the input or output nodes as its children and similarly for action and notification). Note that for action and
509 * not-top-level notification this means that all their parents are not considered as belonging to their subtree even though
510 * they are included in their data tree and must be present for the operation validation to pass. The reason for this is that if
511 * there are any lists in those parents, we cannot know if there are not some other instances of them in the standard
512 * data tree in addition to the one used in the action/notification invocation.
513 *
514 * There were 2 ways of using this mechanism envisioned (explained below), but you can combine or modify them.
515 *
516 * ### Fine-grained Data Retrieval ###
517 *
518 * This approach is recommended when you do not maintain a full configuration data tree with state data at all times.
519 *
520 * Firstly, you should somehow learn that the operation data tree you are currently working with includes some schema
521 * node instances that have conditions that require foreign data. You can either know this about every operation beforehand
522 * or you go through all the schema nodes looking for the flag #LYS_XPATH_DEP. Then you should use lys_node_xpath_atomize()
523 * to retrieve all XPath condition dependencies (in the form of schema nodes) outside the operation subtree. You will likely
524 * want to use the flag #LYXP_NO_LOCAL to get rid of all the nodes from inside the subtree (you should already have those).
525 * The last thing to do is to build a data tree that includes at least all the instances of the nodes obtained from lys_node_xpath_atomize()
526 * (it will be expected). Then you pass this tree to the validation and it should now have access to all the nodes that
527 * can potentially affect the XPath evaluation and no other.
528 *
529 * ### Maintaining Configuration And State Data Tree ###
530 *
531 * If you have a full data tree with state data available for the validation process then it is quite simple (compared
532 * to the first approach). You can simply always pass it to validation of these operations and in cases it is not required
533 * (no nodes with conditions traversing foreign nodes) only a negligible amount of redundant work is performed and you can
534 * skip the process of learning whether it is required or not.
535 *
536 * Functions List
537 * --------------
Radek Krejcidef50022016-02-01 16:38:32 +0100538 * - lyd_validate()
539 */
540
541/**
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200542 * @page howtodatawd Default Values
543 *
Radek Krejcidb6b1662016-09-15 10:40:16 +0200544 * libyang provides support for work with default values as defined in [RFC 6243](https://tools.ietf.org/html/rfc6243).
Radek Krejci46180b52016-08-31 16:01:32 +0200545 * This document defines 4 modes for handling default nodes in a data tree, libyang adds the fifth mode:
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200546 * - \b explicit - Only the explicitly set configuration data. But in the case of status data, missing default
Radek Krejci46180b52016-08-31 16:01:32 +0200547 * data are added into the tree. In libyang, this mode is represented by #LYP_WD_EXPLICIT option.
548 * - \b trim - Data nodes containing the schema default value are removed. This mode is applied using #LYP_WD_TRIM option.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200549 * - \b report-all - All the missing default data are added into the data tree. This mode is represented by
Radek Krejci46180b52016-08-31 16:01:32 +0200550 * #LYP_WD_ALL option.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200551 * - \b report-all-tagged - In this case, all the missing default data are added as in case of the `report-all` mode,
552 * but additionally all the nodes (existing as well as added) containing the schema default value
Radek Krejci46180b52016-08-31 16:01:32 +0200553 * are tagged (see the note below). libyang uses #LYP_WD_ALL_TAG option for this mode.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200554 * - \b report-implicit-tagged - The last mode is similar to the previous one, except only the added nodes are tagged.
Radek Krejci46180b52016-08-31 16:01:32 +0200555 * This is the libyang's extension and it is represented by #LYP_WD_IMPL_TAG option.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200556 *
Radek Krejci46180b52016-08-31 16:01:32 +0200557 * libyang automatically adds/maintain the default nodes when a data tree is being parsed or validated. Note, that in a
558 * modified data tree (via e.g. lys_insert() or lys_free()), some of the default nodes can be missing or they can be
559 * present by mistake. Such a data tree is again corrected during the next lyd_validate() call.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200560 *
Radek Krejci46180b52016-08-31 16:01:32 +0200561 * The implicit (default) nodes, created by libyang, are marked with the ::lyd_node#dflt flag which applies to the
Radek Krejcid3cfbc92016-09-15 10:39:33 +0200562 * leafs and leaf-lists. In case of containers, the flag means that the container holds only a default node(s) or it
563 * is an empty container (according to YANG 1.1 spec, all such containers are part of the accessible data tree).
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200564 *
Radek Krejci46180b52016-08-31 16:01:32 +0200565 * The presence of the default nodes during the data tree lifetime is affected by the LYD_OPT_ flag used to
566 * parse/validate the tree:
567 * - #LYD_OPT_DATA - all the default nodes are present despite they are configuration or status nodes
568 * - #LYD_OPT_CONFIG - only the configuration data nodes are added into the tree
569 * - #LYD_OPT_GET, #LYD_OPT_GETCONFIG, #LYD_OPT_EDIT - no default nodes are added
570 * - #LYD_OPT_RPC, #LYD_OPT_RPCREPLY, #LYD_OPT_NOTIF - the default nodes from the particular subtree are added
571 *
Radek Krejcidb6b1662016-09-15 10:40:16 +0200572 * The with-default modes described above are supported when the data tree is being printed with the
Radek Krejci46180b52016-08-31 16:01:32 +0200573 * [LYP_WD_ printer flags](@ref printerflags). Note, that in case of #LYP_WD_ALL_TAG and #LYP_WD_IMPL_TAG modes,
574 * the XML/JSON attributes are printed only if the context includes the ietf-netconf-with-defaults schema. Otherwise,
Radek Krejcid3cfbc92016-09-15 10:39:33 +0200575 * these modes have the same result as #LYP_WD_ALL. The presence of empty containers (despite they were added explicitly
576 * or implicitly as part of accessible data tree) depends on #LYP_KEEPEMPTYCONT option.
Radek Krejci46180b52016-08-31 16:01:32 +0200577 *
578 * To get know if the particular leaf or leaf-list node contains default value (despite implicit or explicit), you can
Radek Krejcidb6b1662016-09-15 10:40:16 +0200579 * use lyd_wd_default() function.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200580 *
581 * Functions List
582 * --------------
Radek Krejci46180b52016-08-31 16:01:32 +0200583 * - lyd_wd_default()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200584 *
585 * - lyd_parse_mem()
586 * - lyd_parse_fd()
587 * - lyd_parse_path()
588 * - lyd_parse_xml()
589 * - lyd_validate()
Radek Krejci46180b52016-08-31 16:01:32 +0200590 * - lyd_print_mem()
591 * - lyd_print_fd()
592 * - lyd_print_file()
593 * - lyd_print_clb()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200594 */
595
596/**
Radek Krejcidef50022016-02-01 16:38:32 +0100597 * @page howtodataprinters Printing Data
598 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200599 * Data printers allows to serialize internal representation of a data tree in a specific format. libyang
600 * supports the following data formats for printing:
Radek Krejcidef50022016-02-01 16:38:32 +0100601 *
602 * - XML
603 *
604 * Basic format as specified in rules of mapping YANG modeled data to XML in
605 * [RFC 6020](http://tools.ietf.org/html/rfc6020). It is possible to specify if
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200606 * the indentation (formatting) will be used (by #LYP_FORMAT @ref printerflags "printer option").
Radek Krejcidef50022016-02-01 16:38:32 +0100607 *
608 * - JSON
609 *
610 * The alternative data format available in RESTCONF protocol. Specification of JSON encoding of data modeled by YANG
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200611 * can be found in [this draft](https://tools.ietf.org/html/draft-ietf-netmod-yang-json-05).It is possible to specify
612 * if the indentation (formatting) will be used (by #LYP_FORMAT @ref printerflags "printer option").
Radek Krejcidef50022016-02-01 16:38:32 +0100613 *
614 * Printer functions allow to print to the different outputs including a callback function which allows caller
615 * to have a full control of the output data - libyang passes to the callback a private argument (some internal
616 * data provided by a caller of lyd_print_clb()), string buffer and number of characters to print. Note that the
617 * callback is supposed to be called multiple times during the lyd_print_clb() execution.
618 *
Radek Krejci46180b52016-08-31 16:01:32 +0200619 * To print the data tree with default nodes according to the with-defaults capability defined in
620 * [RFC 6243](https://tools.ietf.org/html/rfc6243), check the [page about the default values](@ref howtodatawd).
621 *
Radek Krejcidef50022016-02-01 16:38:32 +0100622 * Functions List
623 * --------------
624 * - lyd_print_mem()
625 * - lyd_print_fd()
626 * - lyd_print_file()
627 * - lyd_print_clb()
628 */
629
630/**
Radek Krejcib50551c2016-04-19 09:15:38 +0200631 * @page howtoxpath XPath Addressing
632 *
633 * Internally, XPath evaluation is performed on \b when and \b must conditions in the schema. For that almost
Michal Vasko88aae042016-09-08 08:57:09 +0200634 * a full XPath 1.0 evaluator was implemented except that only node sets are returned. This XPath implementation
Michal Vaskof06fb5b2016-09-08 10:05:56 +0200635 * is available on data trees by calling lyd_find_xpath() and on schema trees by calling lys_find_xpath().
Michal Vasko46a4bf92016-09-08 08:23:49 +0200636 * This XPath conforms to the YANG specification (RFC 6020 section 6.4). Some useful examples:
Michal Vasko8e627692016-04-19 12:15:47 +0200637 *
Michal Vaskoebea7012016-04-19 14:15:22 +0200638 * - get all top-level nodes of the __module-name__
639 *
640 * /module-name:*
641 *
642 * - get all the descendants of __container__ (excluding __container__)
643 *
644 * /module-name:container//\asterisk
645 *
646 * - get __list__ instance with __key1__ of value __1__ and __key2__ of value __2__ (this can return more __list__ instances if there are more keys than __key1__ and __key2__)
647 *
648 * /module-name:container/list[key1='1'][key2='2']
649 *
650 * - get __leaf-list__ instance with the value __val__
651 *
652 * /module-name:container/leaf-list[.='val']
653 *
654 * - get __aug-leaf__, which was added to __module-name__ from an augment module __augment-module__
655 *
656 * /module-name:container/container2/augment-module:aug-cont/aug-leaf
657 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200658 *
659 * A very small subset of this full XPath is recognized by lyd_new_path(). Basically, only a relative or absolute
660 * path can be specified to identify a new data node. However, lists must be identified by all their keys and created
661 * with all of them, so for those cases predicates are allowed. Predicates must be ordered the way the keys are ordered
Michal Vasko1acf8502016-05-05 09:14:07 +0200662 * and all the keys must be specified. Every predicate includes a single key with its value. Optionally, leaves and
663 * leaf-lists can have predicates specifying their value in the path itself. All these paths are valid XPath
Radek Krejcib50551c2016-04-19 09:15:38 +0200664 * expressions. Example:
665 *
Michal Vasko1acf8502016-05-05 09:14:07 +0200666 * /ietf-yang-library:modules-state/module[name='ietf-yang-library'][revision='']/conformance[.='implement']
Radek Krejcib50551c2016-04-19 09:15:38 +0200667 *
668 * Almost the same XPath is accepted by ly_ctx_get_node(). The difference is that it is not used on data, but schema,
669 * which means there are no key values and only one node matches one path. In effect, lists do not have to have any
670 * predicates. If they do, they do not need to have all the keys specified and if values are included, they are ignored.
671 * Nevertheless, any such expression is still a valid XPath, but can return more nodes if executed on a data tree.
672 * Examples (all returning the same node):
673 *
674 * /ietf-yang-library:modules-state/module/submodules
675 * /ietf-yang-library:modules-state/module[name]/submodules
676 * /ietf-yang-library:modules-state/module[name][revision]/submodules
677 * /ietf-yang-library:modules-state/module[name='ietf-yang-library'][revision]/submodules
678 *
679 * Also, `choice`, `case`, `input`, and `output` nodes need to be specified and cannot be skipped in schema XPaths. Use
Michal Vasko8d26e5c2016-09-08 10:03:49 +0200680 * lys_find_xpath() if you want to search based on a data XPath.
Radek Krejcib50551c2016-04-19 09:15:38 +0200681 *
682 * Also note, that in all cases the node's prefix is specified as the name of the appropriate YANG schema. Any node
683 * can be prefixed by the module name. However, if the prefix is omitted, the module name is inherited from the previous
684 * (parent) node. It means, that the first node in the path is always supposed to have a prefix.
685 *
686 * Functions List
687 * --------------
Michal Vaskof06fb5b2016-09-08 10:05:56 +0200688 * - lyd_find_xpath()
689 * - lys_find_xpath()
Radek Krejcib50551c2016-04-19 09:15:38 +0200690 * - lyd_new_path()
691 * - ly_ctx_get_node()
Radek Krejcib50551c2016-04-19 09:15:38 +0200692 */
693
694/**
Radek Krejcidef50022016-02-01 16:38:32 +0100695 * @page howtoxml libyang XML Support
696 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200697 * libyang XML parser is able to parse XML documents. The main purpose is to load data modeled by YANG. However, it can
698 * be used as a standalone XML parser with the following limitations in comparison to a full-featured XML parsers:
Radek Krejcidef50022016-02-01 16:38:32 +0100699 * - comments are ignored
700 * - Doctype declaration is ignored
701 * - CData sections are ignored
702 * - Process Instructions (PI) are ignored
703 *
704 * The API is designed to almost only read-only access. You can simply load XML document, go through the tree as
705 * you wish and dump the tree to an output. The only "write" functions are lyxml_free() and lyxml_unlink() to remove
706 * part of the tree or to unlink (separate) a subtree.
707 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200708 * XML parser is used internally by libyang for parsing YIN schemas and data instances in XML format.
Radek Krejcidef50022016-02-01 16:38:32 +0100709 *
710 * \note API for this group of functions is described in the [XML Parser module](@ref xmlparser).
711 *
712 * Functions List
713 * --------------
Radek Krejci722b0072016-02-01 17:09:45 +0100714 * - lyxml_parse_mem()
715 * - lyxml_parse_path()
Radek Krejcidef50022016-02-01 16:38:32 +0100716 * - lyxml_get_attr()
717 * - lyxml_get_ns()
Radek Krejci722b0072016-02-01 17:09:45 +0100718 * - lyxml_print_mem()
719 * - lyxml_print_fd()
720 * - lyxml_print_file()
721 * - lyxml_print_clb()
Radek Krejcidef50022016-02-01 16:38:32 +0100722 * - lyxml_unlink()
723 * - lyxml_free()
724 */
725
726/**
727 * @page howtothreads libyang in Threads
728 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200729 * libyang can be used in multithreaded applications keeping in mind the following rules:
Radek Krejcidef50022016-02-01 16:38:32 +0100730 * - libyang context manipulation (adding new schemas) is not thread safe and it is supposed to be done in a main
Radek Krejcib50551c2016-04-19 09:15:38 +0200731 * thread before any other work with context, schemas or data instances. Destroying the context is supposed to
Radek Krejcidef50022016-02-01 16:38:32 +0100732 * be done when no other thread accesses context, schemas nor data trees
733 * - Data parser (\b lyd_parse*() functions) can be used simultaneously in multiple threads (also the returned
734 * #ly_errno is thread safe).
735 * - Modifying (lyd_new(), lyd_insert(), lyd_unlink(), lyd_free() and many other functions) a single data tree is not
736 * thread safe.
Radek Krejci26715a42015-07-29 14:10:45 +0200737 */
Radek Krejci94ca54b2015-07-08 15:48:47 +0200738
Radek Krejcida04f4a2015-05-21 12:54:09 +0200739/**
Radek Krejci26715a42015-07-29 14:10:45 +0200740 *
741 * @page howtologger Logger
742 *
743 * There are 4 verbosity levels defined as ::LY_LOG_LEVEL. The level can be
744 * changed by the ly_verb() function. By default, the verbosity level is
745 * set to #LY_LLERR value.
746 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200747 * When an error is encountered, the error message and error number are stored for
748 * later use. Caller is able to access the last error message via ly_errmsg() and the
749 * corresponding last error code via #ly_errno. If that was a validation error (#ly_errno
750 * is set to #LY_EVALID), also validation error code (via #ly_vecode) and path to the
751 * error node (via ly_errpath()) are available.
752 *
753 * For some specific cases, a YANG schema can define error message and/or error tag (mainly for
Michal Vaskoebea7012016-04-19 14:15:22 +0200754 * use in NETCONF). If a message is set, it is provided via ly_errmsg(). If a tag is set in schema,
Radek Krejcib50551c2016-04-19 09:15:38 +0200755 * it is available via ly_erraptag() (if not set, the returned string is empty).
756 *
Michal Vaskoebea7012016-04-19 14:15:22 +0200757 * By default, all libyang messages are printed to `stderr`. However, the caller is able to set their own logging
Radek Krejcib50551c2016-04-19 09:15:38 +0200758 * callback function. In that case, instead of printing messages, libyang passes error level, message and path
759 * (if any) to the caller's callback function. In case of error level, the message and path are still
760 * automatically stored and available via the functions and macros described above.
Radek Krejci26715a42015-07-29 14:10:45 +0200761 *
Radek Krejcidef50022016-02-01 16:38:32 +0100762 * \note API for this group of functions is described in the [logger module](@ref logger).
763 *
764 * Functions List
765 * --------------
766 * - ly_verb()
767 * - ly_set_log_clb()
768 * - ly_get_log_clb()
Radek Krejcib50551c2016-04-19 09:15:38 +0200769 * - ly_errmsg()
770 * - ly_errpath()
771 * - ly_errapptag()
772 * - #ly_errno
773 * - #ly_vecode
Radek Krejci26715a42015-07-29 14:10:45 +0200774 */
775
776/**
777 * @defgroup context Context
Radek Krejci3045cf32015-05-28 10:58:52 +0200778 * @{
779 *
Radek Krejci26715a42015-07-29 14:10:45 +0200780 * Structures and functions to manipulate with the libyang "containers". The \em context concept allows callers
781 * to work in environments with different sets of YANG schemas. More detailed information can be found at
782 * @ref howtocontext page.
Radek Krejci3045cf32015-05-28 10:58:52 +0200783 */
784
785/**
Radek Krejcida04f4a2015-05-21 12:54:09 +0200786 * @brief libyang context handler.
787 */
788struct ly_ctx;
789
790/**
791 * @brief Create libyang context
792 *
Radek Krejci26715a42015-07-29 14:10:45 +0200793 * Context is used to hold all information about schemas. Usually, the application is supposed
Radek Krejci91b833c2015-09-04 11:49:43 +0200794 * to work with a single context in which libyang is holding all schemas (and other internal
795 * information) according to which the data trees will be processed and validated. So, the schema
796 * trees are tightly connected with the specific context and they are held by the context internally
797 * - caller does not need to keep pointers to the schemas returned by lys_parse(), context knows
798 * about them. The data trees created with lyd_parse() are still connected with the specific context,
799 * but they are not internally held by the context. The data tree just points and lean on some data
800 * held by the context (schema tree, string dictionary, etc.). Therefore, in case of data trees, caller
801 * is supposed to keep pointers returned by the lyd_parse() and manage the data tree on its own. This
802 * also affects the number of instances of both tree types. While you can have only one instance of
803 * specific schema connected with a single context, number of data tree instances is not connected.
Radek Krejcida04f4a2015-05-21 12:54:09 +0200804 *
Radek Krejci26715a42015-07-29 14:10:45 +0200805 * @param[in] search_dir Directory where libyang will search for the imported or included modules
806 * and submodules. If no such directory is available, NULL is accepted.
Radek Krejcida04f4a2015-05-21 12:54:09 +0200807 *
Radek Krejci3045cf32015-05-28 10:58:52 +0200808 * @return Pointer to the created libyang context, NULL in case of error.
Radek Krejcida04f4a2015-05-21 12:54:09 +0200809 */
810struct ly_ctx *ly_ctx_new(const char *search_dir);
811
812/**
Michal Vasko60ba9a62015-07-03 14:42:31 +0200813 * @brief Change the search path in libyang context
814 *
815 * @param[in] ctx Context to be modified.
816 * @param[in] search_dir New search path to replace the current one in ctx.
817 */
818void ly_ctx_set_searchdir(struct ly_ctx *ctx, const char *search_dir);
819
820/**
Radek Krejci5a797572015-10-21 15:45:45 +0200821 * @brief Get current value of the search path in libyang context
822 *
823 * @param[in] ctx Context to query.
824 * @return Current value of the search path.
825 */
Michal Vasko1e62a092015-12-01 12:27:20 +0100826const char *ly_ctx_get_searchdir(const struct ly_ctx *ctx);
Radek Krejci5a797572015-10-21 15:45:45 +0200827
828/**
Radek Krejci7ab25152015-08-07 14:48:45 +0200829 * @brief Get data of an internal ietf-yang-library module.
830 *
831 * @param[in] ctx Context with the modules.
832 * @return Root data node corresponding to the model, NULL on error.
833 * Caller is responsible for freeing the returned data tree using lyd_free().
834 */
835struct lyd_node *ly_ctx_info(struct ly_ctx *ctx);
836
837/**
Michal Vaskod7957c02016-04-01 10:27:26 +0200838 * @brief Iterate over all modules in a context.
839 *
840 * @param[in] ctx Context with the modules.
841 * @param[in,out] idx Index of the next module to be returned. Value of 0 starts from the beginning.
842 * @return Next context module, NULL if the last was already returned.
843 */
844const struct lys_module *ly_ctx_get_module_iter(const struct ly_ctx *ctx, uint32_t *idx);
845
846/**
Radek Krejcifd4e6e32015-08-10 15:00:51 +0200847 * @brief Get pointer to the schema tree of the module of the specified name.
Radek Krejcida04f4a2015-05-21 12:54:09 +0200848 *
Radek Krejcida04f4a2015-05-21 12:54:09 +0200849 * @param[in] ctx Context to work in.
850 * @param[in] name Name of the YANG module to get.
Radek Krejcif647e612015-07-30 11:36:07 +0200851 * @param[in] revision Optional revision date of the YANG module to get. If not specified,
852 * the schema in the newest revision is returned if any.
853 * @return Pointer to the data model structure, NULL if no schema following the name and
Radek Krejcifd4e6e32015-08-10 15:00:51 +0200854 * revision requirements is present in the context.
Radek Krejcida04f4a2015-05-21 12:54:09 +0200855 */
Michal Vasko1e62a092015-12-01 12:27:20 +0100856const struct lys_module *ly_ctx_get_module(const struct ly_ctx *ctx, const char *name, const char *revision);
Radek Krejcida04f4a2015-05-21 12:54:09 +0200857
858/**
Radek Krejci21601a32016-03-07 11:39:27 +0100859 * @brief Get pointer to the older schema tree to the specified one in the provided context.
860 *
861 * The module is not necessarily from the provided \p ctx. If there are multiple schemas older than the
862 * provided one, the newest of them is returned.
863 *
864 * The function can be used in combination with ly_ctx_get_module() to get all revisions of a module in a context:
865 * \code{.c}
866 * for (mod = ly_ctx_get_module(ctx, name, NULL); mod; mod = ly_ctx_get_module_older(ctx, mod)) {
867 * ...
868 * }
869 * \endcode
870 *
871 * @param[in] ctx Context to work in.
872 * @param[in] module YANG module to compare with
873 * @return Pointer to the data model structure, NULL if no older schema is present in the context.
874 */
875const struct lys_module *ly_ctx_get_module_older(const struct ly_ctx *ctx, const struct lys_module *module);
876
877/**
Michal Vasko99b0aad2015-12-01 12:28:51 +0100878 * @brief Try to find the model in the searchpath of \p ctx and load it into it. If custom missing
879 * module callback is set, it is used instead.
Michal Vasko82465962015-11-10 11:03:11 +0100880 *
Radek Krejci31fb8be2016-06-23 15:26:26 +0200881 * If there is a possibility that the requested module is already in the context, you should call
882 * the ly_ctx_get_module() first to avoid a lot of work performed by ly_ctx_load_module().
883 *
Michal Vasko82465962015-11-10 11:03:11 +0100884 * @param[in] ctx Context to add to.
Michal Vasko82465962015-11-10 11:03:11 +0100885 * @param[in] name Name of the module to load.
886 * @param[in] revision Optional revision date of the module. If not specified, it is
887 * assumed that there is only one model revision in the searchpath (the first matching file
888 * is parsed).
889 * @return Pointer to the data model structure, NULL if not found or some error occured.
890 */
Michal Vasko99b0aad2015-12-01 12:28:51 +0100891const struct lys_module *ly_ctx_load_module(struct ly_ctx *ctx, const char *name, const char *revision);
892
893/**
894 * @brief Callback for retrieving missing included or imported models in a custom way.
895 *
Michal Vasko84475152016-07-25 16:16:25 +0200896 * @param[in] mod_name Missing module name.
897 * @param[in] mod_rev Optional missing module revision.
898 * @param[in] submod_name Optional missing submodule name.
899 * @param[in] submod_rev Optional missing submodule revision.
Michal Vasko99b0aad2015-12-01 12:28:51 +0100900 * @param[in] user_data User-supplied callback data.
901 * @param[out] format Format of the returned module data.
Michal Vasko880dceb2016-03-03 15:44:56 +0100902 * @param[out] free_module_data Callback for freeing the returned module data. If not set, the data will be left untouched.
Radek Krejci31fb8be2016-06-23 15:26:26 +0200903 * @return Requested module data or NULL if the callback is not able to provide the requested schema content for any reason.
Michal Vasko99b0aad2015-12-01 12:28:51 +0100904 */
Michal Vasko84475152016-07-25 16:16:25 +0200905typedef char *(*ly_module_clb)(const char *mod_name, const char *mod_rev, const char *submod_name, const char *sub_rev,
906 void *user_data, LYS_INFORMAT *format, void (**free_module_data)(void *model_data));
Michal Vasko99b0aad2015-12-01 12:28:51 +0100907
908/**
909 * @brief Set missing include or import model callback.
910 *
911 * @param[in] ctx Context that will use this callback.
912 * @param[in] clb Callback responsible for returning a missing model.
913 * @param[in] user_data Arbitrary data that will always be passed to the callback \p clb.
914 */
915void ly_ctx_set_module_clb(struct ly_ctx *ctx, ly_module_clb clb, void *user_data);
916
917/**
918 * @brief Get the custom callback for missing module retrieval.
919 *
920 * @param[in] ctx Context to read from.
921 * @param[in] user_data Optional pointer for getting the user-supplied callbck data.
922 * @return Custom user missing module callback or NULL if not set.
923 */
924ly_module_clb ly_ctx_get_module_clb(const struct ly_ctx *ctx, void **user_data);
Michal Vasko82465962015-11-10 11:03:11 +0100925
926/**
Radek Krejcifd4e6e32015-08-10 15:00:51 +0200927 * @brief Get pointer to the schema tree of the module of the specified namespace
928 *
929 * @param[in] ctx Context to work in.
930 * @param[in] ns Namespace of the YANG module to get.
931 * @param[in] revision Optional revision date of the YANG module to get. If not specified,
932 * the schema in the newest revision is returned if any.
933 * @return Pointer to the data model structure, NULL if no schema following the namespace and
934 * revision requirements is present in the context.
935 */
Michal Vasko1e62a092015-12-01 12:27:20 +0100936const struct lys_module *ly_ctx_get_module_by_ns(const struct ly_ctx *ctx, const char *ns, const char *revision);
Radek Krejcifd4e6e32015-08-10 15:00:51 +0200937
938/**
Radek Krejci62f0da72016-03-07 11:35:43 +0100939 * @brief Get submodule of a main module.
940 *
941 * If you already have the pointer to the submodule's main module, use ly_ctx_get_submodule2() instead.
Michal Vasko7bf06882015-07-03 15:33:56 +0200942 *
Radek Krejcia7533f22016-03-07 07:37:45 +0100943 * @param[in] ctx Context to work in.
Michal Vaskof6d94c62016-04-05 11:21:54 +0200944 * @param[in] module Name of the main (belongs-to) module. If NULL, all module submodules are searched.
945 * @param[in] revision Optional revision date of \p module. If NULL, all revisions of \p module
946 * are searched. If set, \p module must also be set.
Radek Krejcia7533f22016-03-07 07:37:45 +0100947 * @param[in] submodule Name of the submodule to get.
Michal Vaskof6d94c62016-04-05 11:21:54 +0200948 * @param[in] sub_revision Optional revision date of \p submodule. If NULL, the newest revision of \p submodule
949 * is returned.
Michal Vasko7bf06882015-07-03 15:33:56 +0200950 * @return Pointer to the data model structure.
951 */
Radek Krejcia7533f22016-03-07 07:37:45 +0100952const struct lys_submodule *ly_ctx_get_submodule(const struct ly_ctx *ctx, const char *module, const char *revision,
Michal Vaskof6d94c62016-04-05 11:21:54 +0200953 const char *submodule, const char *sub_revision);
Michal Vasko7bf06882015-07-03 15:33:56 +0200954
955/**
Radek Krejci62f0da72016-03-07 11:35:43 +0100956 * @brief Get submodule of a main module.
957 *
958 * If you have only the name (and optionally revision) of the submodule's main module, use ly_ctx_get_submodule()
959 * instead.
960 *
961 * @param[in] main_module Main module (belongs to) of the searched submodule.
962 * @param[in] submodule Name of the submodule to get.
963 * @return Pointer to the data model structure.
964 */
965const struct lys_submodule *ly_ctx_get_submodule2(const struct lys_module *main_module, const char *submodule);
966
967/**
Michal Vasko3547c532016-03-14 09:40:50 +0100968 * @brief Get schema node according to the given schema node identifier in JSON format.
Michal Vasko3edeaf72016-02-11 13:17:43 +0100969 *
Michal Vasko3547c532016-03-14 09:40:50 +0100970 * If the \p nodeid is absolute, the first node identifier must be prefixed with
971 * the module name. Then every other identifier either has an explicit module name or
972 * the module name of the previous node is assumed. Examples:
Michal Vasko3edeaf72016-02-11 13:17:43 +0100973 *
974 * /ietf-netconf-monitoring:get-schema/input/identifier
975 * /ietf-interfaces:interfaces/interface/ietf-ip:ipv4/address/ip
976 *
Michal Vasko3547c532016-03-14 09:40:50 +0100977 * If the \p nodeid is relative, \p start is mandatory and is the starting point
978 * for the resolution. The first node identifier does not need a module name.
979 *
Michal Vasko7b54f7e2016-05-03 15:07:31 +0200980 * Predicates on lists are accepted (ignored) in the form of "<key>(=<value>)"
981 * and on leaves/leaf-lists ".(=<value>)".
982 *
Michal Vasko3edeaf72016-02-11 13:17:43 +0100983 * @param[in] ctx Context to work in.
Michal Vasko3547c532016-03-14 09:40:50 +0100984 * @param[in] start Starting node for a relative schema node identifier, in which
985 * case it is mandatory.
986 * @param[in] nodeid JSON schema node identifier.
Michal Vasko3edeaf72016-02-11 13:17:43 +0100987 * @return Resolved schema node or NULL.
988 */
Michal Vasko3547c532016-03-14 09:40:50 +0100989const struct lys_node *ly_ctx_get_node(struct ly_ctx *ctx, const struct lys_node *start, const char *nodeid);
Michal Vasko3edeaf72016-02-11 13:17:43 +0100990
991/**
Radek Krejci8c107fe2016-10-17 16:00:18 +0200992 * @brief Remove the specified module from the context.
993 *
994 * The module to remove is selected the same way as ly_ctx_get_module() does it. Beside the selected
995 * module, also all other modules depending on all the modules being removed will be removed as well.
996 *
997 * libyang internal modules (those present when the context is created) cannot be removed.
998 *
999 * @param[in] ctx Context to work in.
1000 * @param[in] name Name of the YANG module to remove.
1001 * @param[in] revision Optional revision date of the YANG module to remove. If not specified,
1002 * the schema in the newest revision is selected.
1003 * @param[in] private_destructor Optional destructor function for private objects assigned
1004 * to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
1005 * @return EXIT_SUCCESS or EXIT_FAILURE if the module is not present in the context.
1006 */
1007int ly_ctx_remove_module(struct ly_ctx *ctx, const char *name, const char *revision,
1008 void (*private_destructor)(const struct lys_node *node, void *priv));
1009
1010/**
1011 * @brief Remove all the modules from the context except the internal modules. Also the addition data in
1012 * dictionary are kept.
1013 *
1014 * @param[in] ctx Context to work in.
1015 * @param[in] private_destructor Optional destructor function for private objects assigned
1016 * to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
1017 */
1018void ly_ctx_clean(struct ly_ctx *ctx, void (*private_destructor)(const struct lys_node *node, void *priv));
1019
1020/**
Radek Krejci3045cf32015-05-28 10:58:52 +02001021 * @brief Free all internal structures of the specified context.
1022 *
1023 * The function should be used before terminating the application to destroy
1024 * and free all structures internally used by libyang. If the caller uses
1025 * multiple contexts, the function should be called for each used context.
1026 *
1027 * All instance data are supposed to be freed before destroying the context.
1028 * Data models are destroyed automatically as part of ly_ctx_destroy() call.
1029 *
1030 * @param[in] ctx libyang context to destroy
Radek Krejcifa0b5e02016-02-04 13:57:03 +01001031 * @param[in] private_destructor Optional destructor function for private objects assigned
1032 * to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001033 */
Radek Krejcifa0b5e02016-02-04 13:57:03 +01001034void ly_ctx_destroy(struct ly_ctx *ctx, void (*private_destructor)(const struct lys_node *node, void *priv));
Radek Krejcida04f4a2015-05-21 12:54:09 +02001035
Radek Krejci26715a42015-07-29 14:10:45 +02001036/**@} context */
1037
1038/**
Radek Krejcidef50022016-02-01 16:38:32 +01001039 * @defgroup nodeset Tree nodes set
Radek Krejcidc154432016-01-21 11:10:59 +01001040 * @ingroup datatree
1041 * @ingroup schematree
1042 * @{
1043 *
Radek Krejcidef50022016-02-01 16:38:32 +01001044 * Structure and functions to hold and manipulate with sets of nodes from schema or data trees.
1045 */
1046
1047/**
Radek Krejci8f08df12016-03-21 11:11:30 +01001048 * @brief set array of ::ly_set
1049 * It is kept in union to keep ::ly_set generic for data as well as schema trees
1050 */
1051union ly_set_set {
1052 struct lys_node **s; /**< array of pointers to a ::lys_node objects */
1053 struct lyd_node **d; /**< array of pointers to a ::lyd_node objects */
1054 void **g; /**< dummy array for generic work */
1055};
1056
1057/**
Radek Krejcidc154432016-01-21 11:10:59 +01001058 * @brief Structure to hold a set of (not necessary somehow connected) ::lyd_node or ::lys_node objects.
1059 * Caller is supposed to not mix the type of objects added to the set and according to its knowledge about
1060 * the set content, it is supposed to access the set via the sset, dset or set members of the structure.
1061 *
Radek Krejci09891a22016-06-10 10:59:22 +02001062 * Until ly_set_rm() or ly_set_rm_index() is used, the set keeps the order of the inserted items as they
1063 * were added into the set, so the first added item is on array index 0.
1064 *
Radek Krejcidef50022016-02-01 16:38:32 +01001065 * To free the structure, use ly_set_free() function, to manipulate with the structure, use other
1066 * ly_set_* functions.
Radek Krejcidc154432016-01-21 11:10:59 +01001067 */
1068struct ly_set {
1069 unsigned int size; /**< allocated size of the set array */
1070 unsigned int number; /**< number of elements in (used size of) the set array */
Radek Krejci8f08df12016-03-21 11:11:30 +01001071 union ly_set_set set; /**< set array - union to keep ::ly_set generic for data as well as schema trees */
Radek Krejcidc154432016-01-21 11:10:59 +01001072};
1073
1074/**
Radek Krejci09891a22016-06-10 10:59:22 +02001075 * @brief Option for ly_set_add() to allow duplicities in the ly_set structure so the
1076 * set is not used as a set, but as a list of (container for) items.
1077 */
1078#define LY_SET_OPT_USEASLIST 0x01
1079
1080/**
Radek Krejcidef50022016-02-01 16:38:32 +01001081 * @brief Create and initiate new ::ly_set structure.
Radek Krejcidc154432016-01-21 11:10:59 +01001082 *
Radek Krejcidef50022016-02-01 16:38:32 +01001083 * @return Created ::ly_set structure or NULL in case of error.
Radek Krejcidc154432016-01-21 11:10:59 +01001084 */
1085struct ly_set *ly_set_new(void);
1086
1087/**
Radek Krejcie8c1b572016-07-26 15:09:52 +02001088 * @brief Duplicate the existing set.
1089 *
1090 * @param[in] set Original set to duplicate
1091 * @return Duplication of the original set.
1092 */
1093struct ly_set *ly_set_dup(const struct ly_set *set);
1094
1095/**
Radek Krejcidc154432016-01-21 11:10:59 +01001096 * @brief Add a ::lyd_node or ::lys_node object into the set
1097 *
Radek Krejci29cb50d2016-05-09 16:31:13 +02001098 * Since it is a set, the function checks for duplicity and if the
1099 * node is already in the set, the index of the previously added
1100 * node is returned.
1101 *
Radek Krejcidc154432016-01-21 11:10:59 +01001102 * @param[in] set Set where the \p node will be added.
1103 * @param[in] node The ::lyd_node or ::lys_node object to be added into the \p set;
Radek Krejci09891a22016-06-10 10:59:22 +02001104 * @param[in] options Options to change behavior of the function. Accepted options are:
1105 * - #LY_SET_OPT_USEASLIST - do not check for duplicities
Radek Krejci29cb50d2016-05-09 16:31:13 +02001106 * @return -1 on failure, index of the \p node in the set on success
Radek Krejcidc154432016-01-21 11:10:59 +01001107 */
Radek Krejci09891a22016-06-10 10:59:22 +02001108int ly_set_add(struct ly_set *set, void *node, int options);
Radek Krejcidc154432016-01-21 11:10:59 +01001109
1110/**
Radek Krejci99e6d9a2016-10-20 13:01:43 +02001111 * @brief Get know if the set contains the specified object.
1112 * @param[in] set Set to explore.
1113 * @param[in] node Object to be found in the set.
1114 * @return Index of the object in the set or -1 if the object is not present in the set.
1115int ly_set_contains(const struct ly_set *set, void *node);
1116
1117/**
Radek Krejci29ed4082016-05-09 14:25:56 +02001118 * @brief Remove all objects from the set, but keep the set container for further use.
1119 *
1120 * @param[in] set Set to clean.
1121 * @return 0 on success
1122 */
1123int ly_set_clean(struct ly_set *set);
1124
1125/**
Radek Krejcidc154432016-01-21 11:10:59 +01001126 * @brief Remove a ::lyd_node or ::lys_node object from the set.
1127 *
1128 * Note that after removing a node from a set, indexes of other nodes in the set can change
1129 * (the last object is placed instead of the removed object).
1130 *
1131 * @param[in] set Set from which the \p node will be removed.
1132 * @param[in] node The ::lyd_node or ::lys_node object to be removed from the \p set;
1133 * @return 0 on success
1134 */
1135int ly_set_rm(struct ly_set *set, void *node);
1136
1137/**
1138 * @brief Remove a ::lyd_node or ::lys_node object from the set index.
1139 *
1140 * Note that after removing a node from a set, indexes of other nodes in the set can change
1141 * (the last object is placed instead of the removed object).
1142 *
1143 * @param[in] set Set from which a node will be removed.
1144 * @param[in] index Index of the ::lyd_node or ::lys_node object in the \p set to be removed from the \p set;
1145 * @return 0 on success
1146 */
1147int ly_set_rm_index(struct ly_set *set, unsigned int index);
1148
1149/**
Radek Krejcidef50022016-02-01 16:38:32 +01001150 * @brief Free the ::ly_set data. Frees only the set structure content, not the referred data.
Radek Krejcidc154432016-01-21 11:10:59 +01001151 *
1152 * @param[in] set The set to be freed.
1153 */
1154void ly_set_free(struct ly_set *set);
1155
Radek Krejcidef50022016-02-01 16:38:32 +01001156/**@} nodeset */
Radek Krejci6140e4e2015-10-09 15:50:55 +02001157
1158/**
Radek Krejci5044be32016-01-18 17:05:51 +01001159 * @defgroup printerflags Printer flags
Radek Krejcidef50022016-02-01 16:38:32 +01001160 * @ingroup datatree
Radek Krejci5044be32016-01-18 17:05:51 +01001161 *
1162 * Validity flags for data nodes.
1163 *
1164 * @{
1165 */
Michal Vasko6216f272016-10-18 11:49:47 +02001166#define LYP_WITHSIBLINGS 0x01 /**< Flag for printing also the (following) sibling nodes of the data node. */
1167#define LYP_FORMAT 0x02 /**< Flag for formatted output. */
1168#define LYP_KEEPEMPTYCONT 0x04 /**< Preserve empty non-presence containers */
1169#define LYP_WD_MASK 0xF0 /**< Mask for with-defaults modes */
1170#define LYP_WD_EXPLICIT 0x00 /**< Explicit mode - print only data explicitly being present in the data tree.
1171 Note that this is the default value when no WD option is specified. */
1172#define LYP_WD_TRIM 0x10 /**< Do not print the nodes with the value equal to their default value */
1173#define LYP_WD_ALL 0x20 /**< Include implicit default nodes */
1174#define LYP_WD_ALL_TAG 0x40 /**< Same as #LYP_WD_ALL but also adds attribute 'default' with value 'true' to
1175 all nodes that has its default value. The 'default' attribute has namespace:
1176 urn:ietf:params:xml:ns:netconf:default:1.0 and thus the attributes are
1177 printed only when the ietf-netconf-with-defaults module is present in libyang
1178 context. */
1179#define LYP_WD_IMPL_TAG 0x80 /**< Same as LYP_WD_ALL_TAG but the attributes are added only to the nodes that
1180 are not explicitly present in the original data tree despite their
1181 value is equal to their default value. There is the same limitation regarding
1182 the presence of ietf-netconf-with-defaults module in libyang context. */
Michal Vaskoafa7a642016-10-18 15:11:38 +02001183#define LYP_NETCONF 0x100 /**< Print the data tree for use in NETCONF meaning:
Michal Vasko6216f272016-10-18 11:49:47 +02001184 - for RPC output - skip the top-level RPC node,
1185 - for action output - skip all the parents of and the action node itself,
1186 - for action input - enclose the data in an action element in the base YANG namespace,
1187 - for all other data - print the whole data tree normally. */
Radek Krejci5044be32016-01-18 17:05:51 +01001188
1189/**
1190 * @}
1191 */
1192
1193/**
Radek Krejci3045cf32015-05-28 10:58:52 +02001194 * @defgroup logger Logger
1195 * @{
1196 *
1197 * Publicly visible functions and values of the libyang logger. For more
1198 * information, see \ref howtologger.
1199 */
1200
1201/**
1202 * @typedef LY_LOG_LEVEL
1203 * @brief Verbosity levels of the libyang logger.
1204 */
1205typedef enum {
Michal Vasko8f7e8d92016-07-01 11:33:58 +02001206 LY_LLSILENT = -1, /**< Print no messages. */
1207 LY_LLERR = 0, /**< Print only error messages, default value. */
1208 LY_LLWRN, /**< Print error and warning messages. */
1209 LY_LLVRB, /**< Besides errors and warnings, print some other verbose messages. */
1210 LY_LLDBG /**< Print all messages including some development debug messages. */
Radek Krejci3045cf32015-05-28 10:58:52 +02001211} LY_LOG_LEVEL;
1212
1213/**
1214 * @brief Set logger verbosity level.
1215 * @param[in] level Verbosity level.
1216 */
1217void ly_verb(LY_LOG_LEVEL level);
1218
1219/**
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001220 * @brief Set logger callback.
Michal Vasko13661142016-04-11 10:53:53 +02001221 *
1222 * !IMPORTANT! If an error has a specific error-app-tag defined in the model, it will NOT be set
1223 * at the time of calling this callback. It will be set right after, so to retrieve it
1224 * it must be checked afterwards with ly_errapptag().
1225 *
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001226 * @param[in] clb Logging callback.
Radek Krejciadb57612016-02-16 13:34:34 +01001227 * @param[in] path flag to resolve and provide path as the third parameter of the callback function. In case of
1228 * validation and some other errors, it can be useful to get the path to the problematic element. Note,
1229 * that according to the tree type and the specific situation, the path can slightly differs (keys
1230 * presence) or it can be NULL, so consider it as an optional parameter. If the flag is 0, libyang will
1231 * not bother with resolving the path.
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001232 */
Radek Krejciadb57612016-02-16 13:34:34 +01001233void ly_set_log_clb(void (*clb)(LY_LOG_LEVEL level, const char *msg, const char *path), int path);
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001234
1235/**
1236 * @brief Get logger callback.
1237 * @return Logger callback (can be NULL).
1238 */
Radek Krejciadb57612016-02-16 13:34:34 +01001239void (*ly_get_log_clb(void))(LY_LOG_LEVEL, const char *, const char *);
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001240
1241/**
Radek Krejci3045cf32015-05-28 10:58:52 +02001242 * @typedef LY_ERR
Radek Krejci26715a42015-07-29 14:10:45 +02001243 * @brief libyang's error codes available via ly_errno extern variable.
Radek Krejci9b4ca392015-04-10 08:31:27 +02001244 * @ingroup logger
1245 */
1246typedef enum {
Radek Krejciae6817a2015-08-10 14:02:06 +02001247 LY_SUCCESS, /**< no error, not set by functions, included just to complete #LY_ERR enumeration */
Radek Krejci6e4ffbb2015-06-16 10:34:41 +02001248 LY_EMEM, /**< Memory allocation failure */
1249 LY_ESYS, /**< System call failure */
1250 LY_EINVAL, /**< Invalid value */
1251 LY_EINT, /**< Internal error */
1252 LY_EVALID /**< Validation failure */
Radek Krejci3045cf32015-05-28 10:58:52 +02001253} LY_ERR;
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001254
Radek Krejci26715a42015-07-29 14:10:45 +02001255/**
Michal Vaskof5035ce2016-03-11 10:21:31 +01001256 * @typedef LY_VECODE
1257 * @brief libyang's codes of validation error. Whenever ly_errno is set to LY_EVALID, the ly_vecode is also set
1258 * to the appropriate LY_VECODE value.
Radek Krejcia37b39c2016-03-09 16:38:18 +01001259 * @ingroup logger
1260 */
1261typedef enum {
Michal Vaskof5035ce2016-03-11 10:21:31 +01001262 LYVE_SUCCESS = 0, /**< no error */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001263
Michal Vaskof5035ce2016-03-11 10:21:31 +01001264 LYVE_XML_MISS, /**< missing XML object */
1265 LYVE_XML_INVAL, /**< invalid XML object */
1266 LYVE_XML_INCHAR, /**< invalid XML character */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001267
Michal Vaskof5035ce2016-03-11 10:21:31 +01001268 LYVE_EOF, /**< unexpected end of input data */
1269 LYVE_INSTMT, /**< invalid statement (schema) */
1270 /* */
Michal Vaskoca7cbc42016-07-01 11:36:53 +02001271 LYVE_INPAR, /**< invalid (in)direct parent (schema) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001272 LYVE_INID, /**< invalid identifier (schema) */
1273 LYVE_INDATE, /**< invalid date format */
1274 LYVE_INARG, /**< invalid value of a statement argument (schema) */
1275 LYVE_MISSSTMT, /**< missing required statement (schema) */
1276 /* */
1277 LYVE_MISSARG, /**< missing required statement argument (schema) */
1278 LYVE_TOOMANY, /**< too many instances of some object */
1279 LYVE_DUPID, /**< duplicated identifier (schema) */
1280 LYVE_DUPLEAFLIST, /**< multiple instances of leaf-list */
1281 LYVE_DUPLIST, /**< multiple instances of list */
Michal Vaskoa540df22016-04-11 16:14:35 +02001282 LYVE_NOUNIQ, /**< unique leaves match on 2 list instances (data) */
Radek Krejcie663e012016-08-01 17:12:34 +02001283 LYVE_ENUM_INVAL, /**< invalid enum value (schema) */
1284 LYVE_ENUM_INNAME, /**< invalid enum name (schema) */
1285 /* */
1286 /* */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001287 LYVE_ENUM_WS, /**< enum name with leading/trailing whitespaces (schema) */
Radek Krejcie663e012016-08-01 17:12:34 +02001288 LYVE_BITS_INVAL, /**< invalid bits value (schema) */
1289 LYVE_BITS_INNAME, /**< invalid bits name (schema) */
1290 /* */
1291 /* */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001292 LYVE_INMOD, /**< invalid module name */
1293 /* */
1294 LYVE_KEY_NLEAF, /**< list key is not a leaf (schema) */
1295 LYVE_KEY_TYPE, /**< invalid list key type (schema) */
1296 LYVE_KEY_CONFIG, /**< key config value differs from the list config value */
1297 LYVE_KEY_MISS, /**< list key not found (schema) */
1298 LYVE_KEY_DUP, /**< duplicated key identifier (schema) */
1299 LYVE_INREGEX, /**< invalid regular expression (schema) */
1300 LYVE_INRESOLV, /**< no resolvents found (schema) */
1301 LYVE_INSTATUS, /**< invalid derivation because of status (schema) */
Radek Krejcid8fb03c2016-06-13 15:52:22 +02001302 LYVE_CIRC_LEAFREFS,/**< circular chain of leafrefs detected (schema) */
Radek Krejcie8c1b572016-07-26 15:09:52 +02001303 LYVE_CIRC_FEATURES,/**< circular chain of features detected (schema) */
Radek Krejci151b8cc2016-06-22 10:14:21 +02001304 LYVE_CIRC_IMPORTS, /**< circular chain of imports detected (schema) */
1305 LYVE_CIRC_INCLUDES,/**< circular chain of includes detected (schema) */
Michal Vasko88de3e42016-06-29 11:05:32 +02001306 LYVE_INVER, /**< non-matching YANG versions of module and its submodules (schema) */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001307
Michal Vaskof5035ce2016-03-11 10:21:31 +01001308 LYVE_OBSDATA, /**< obsolete data instantiation (data) */
1309 /* */
1310 LYVE_NORESOLV, /**< no resolvents found for an expression (data) */
1311 LYVE_INELEM, /**< invalid element (data) */
1312 /* */
1313 LYVE_MISSELEM, /**< missing required element (data) */
1314 LYVE_INVAL, /**< invalid value of an element (data) */
Radek Krejci9bfcbde2016-04-07 16:30:15 +02001315 LYVE_INVALATTR, /**< invalid attribute value (data) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001316 LYVE_INATTR, /**< invalid attribute in an element (data) */
1317 LYVE_MISSATTR, /**< missing attribute in an element (data) */
Michal Vasko6ac68282016-04-11 10:56:47 +02001318 LYVE_NOCONSTR, /**< value out of range/length/pattern (data) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001319 LYVE_INCHAR, /**< unexpected characters (data) */
1320 LYVE_INPRED, /**< predicate resolution fail (data) */
1321 LYVE_MCASEDATA, /**< data for more cases of a choice (data) */
Michal Vasko6ac68282016-04-11 10:56:47 +02001322 LYVE_NOMUST, /**< unsatisfied must condition (data) */
1323 LYVE_NOWHEN, /**< unsatisfied when condition (data) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001324 LYVE_INORDER, /**< invalid order of elements (data) */
Radek Krejci03b71f72016-03-16 11:10:09 +01001325 LYVE_INWHEN, /**< irresolvable when condition (data) */
Michal Vasko6ac68282016-04-11 10:56:47 +02001326 LYVE_NOMIN, /**< min-elements constraint not honored (data) */
1327 LYVE_NOMAX, /**< max-elements constraint not honored (data) */
1328 LYVE_NOREQINS, /**< required instance does not exits (data) */
1329 LYVE_NOLEAFREF, /**< leaf pointed to by leafref does not exist (data) */
1330 LYVE_NOMANDCHOICE, /**< no mandatory choice case branch exists (data) */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001331
Michal Vasko5b3492c2016-07-20 09:37:40 +02001332 LYVE_XPATH_INSNODE,/**< schema node not found */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001333 LYVE_XPATH_INTOK, /**< unexpected XPath token */
1334 LYVE_XPATH_EOF, /**< unexpected end of an XPath expression */
1335 LYVE_XPATH_INOP, /**< invalid XPath operation operands */
1336 /* */
1337 LYVE_XPATH_INCTX, /**< invalid XPath context type */
1338 LYVE_XPATH_INARGCOUNT, /**< invalid number of arguments for an XPath function */
Michal Vasko6fae1362016-03-11 15:10:00 +01001339 LYVE_XPATH_INARGTYPE, /**< invalid type of arguments for an XPath function */
Michal Vasko11f8da72016-08-24 15:54:57 +02001340 LYVE_XPATH_DUMMY, /**< invaid use of the XPath dummy node */
Michal Vasko6fae1362016-03-11 15:10:00 +01001341
1342 LYVE_PATH_INCHAR, /**< invalid characters (path) */
Michal Vaskoe733d682016-03-14 09:08:27 +01001343 LYVE_PATH_INMOD, /**< invalid module name (path) */
1344 LYVE_PATH_MISSMOD, /**< missing module name (path) */
Michal Vasko6fae1362016-03-11 15:10:00 +01001345 LYVE_PATH_INNODE, /**< invalid node name (path) */
Michal Vasko6fae1362016-03-11 15:10:00 +01001346 LYVE_PATH_INKEY, /**< invalid key name (path) */
1347 LYVE_PATH_MISSKEY, /**< missing some list keys (path) */
1348 LYVE_PATH_EXISTS, /**< target node already exists (path) */
1349 LYVE_PATH_MISSPAR, /**< some parent of the target node is missing (path) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001350} LY_VECODE;
Radek Krejcia37b39c2016-03-09 16:38:18 +01001351
1352/**
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001353 * @cond INTERNAL
Radek Krejci386714d2016-02-15 10:24:30 +01001354 * Get address of (thread-specific) `ly_errno' variable.
Radek Krejci26715a42015-07-29 14:10:45 +02001355 */
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001356LY_ERR *ly_errno_location(void);
1357
Michal Vaskof5035ce2016-03-11 10:21:31 +01001358LY_VECODE *ly_vecode_location(void);
Radek Krejcia37b39c2016-03-09 16:38:18 +01001359
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001360/**
1361 * @endcond INTERNAL
Radek Krejcidef50022016-02-01 16:38:32 +01001362 * @brief libyang specific (thread-safe) errno (see #LY_ERR for the list of possible values and their meaning).
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001363 */
1364#define ly_errno (*ly_errno_location())
Radek Krejci9b4ca392015-04-10 08:31:27 +02001365
Radek Krejci386714d2016-02-15 10:24:30 +01001366/**
Radek Krejcia37b39c2016-03-09 16:38:18 +01001367 * @brief libyang's validation error code
1368 */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001369#define ly_vecode (*ly_vecode_location())
Radek Krejcia37b39c2016-03-09 16:38:18 +01001370
1371/**
Michal Vasko13661142016-04-11 10:53:53 +02001372 * @brief Get the last (thread-specific) error message. If the coresponding module defined
1373 * a specific error message, it will be used instead the default one.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001374 *
1375 * Sometimes, the error message is extended with path of the element where is the problem.
1376 * The path is available via ly_errpath().
1377 *
Radek Krejcib50551c2016-04-19 09:15:38 +02001378 * @return Text of the last error message, empty string if there is no error.
Radek Krejci386714d2016-02-15 10:24:30 +01001379 */
1380const char *ly_errmsg(void);
1381
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001382/**
1383 * @brief Get the last (thread-specific) path of the element where was an error.
1384 *
1385 * The path always corresponds to the error message available via ly_errmsg(), so
1386 * whenever a subsequent error message is printed, the path is erased or rewritten.
Radek Krejci3cc10962016-04-13 15:03:27 +02001387 * The path reflects the type of the processed tree - data path for data tree functions
1388 * and schema path in case of schema tree functions. In case of processing YIN schema
1389 * or XML data, the path can be just XML path. In such a case, the corresponding
1390 * ly_vecode (value 1-3) is set.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001391 *
Radek Krejcib50551c2016-04-19 09:15:38 +02001392 * @return Path of the error element, empty string if error path does not apply to the last error.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001393 */
1394const char *ly_errpath(void);
1395
Michal Vasko13661142016-04-11 10:53:53 +02001396/**
1397 * @brief Get the last (thread-specific) error-app-tag if there was a specific one defined
1398 * in the module for the last error.
1399 *
1400 * The app-tag always corresponds to the error message available via ly_errmsg(), so
1401 * whenever a subsequent error message is printed, the app-tag is erased or rewritten.
1402 *
Radek Krejcib50551c2016-04-19 09:15:38 +02001403 * @return Error-app-tag of the last error, empty string if the error-app-tag does not apply to the last error.
Michal Vasko13661142016-04-11 10:53:53 +02001404 */
1405const char *ly_errapptag(void);
1406
Radek Krejci3045cf32015-05-28 10:58:52 +02001407/**@} logger */
Radek Krejci9b4ca392015-04-10 08:31:27 +02001408
Radek Krejci39d8d0d2015-08-17 13:42:45 +02001409#ifdef __cplusplus
1410}
1411#endif
1412
Radek Krejci9b4ca392015-04-10 08:31:27 +02001413#endif /* LY_LIBYANG_H_ */