blob: 9994482eae7e5409ad58522b4b3346c57d37cbcf [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 Krejci792f52f2017-02-28 16:36:31 +01006 * Copyright (c) 2015-2017 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 Vaskofcd974b2017-08-22 10:17:49 +020020@ENABLE_CACHE_MACRO@
21
Michal Vasko8f3160e2017-09-27 11:25:26 +020022@ENABLE_LATEST_REVISIONS_MACRO@
23
Michal Vasko70bf8e52018-03-26 11:32:33 +020024/**
25 * @brief Compiler flag for packed data types.
26 */
27#define _PACKED @COMPILER_PACKED_ATTR@
28
Michal Vasko2d162e12015-09-24 14:33:29 +020029#include "tree_schema.h"
30#include "tree_data.h"
Radek Krejcic6704c82015-10-06 11:12:45 +020031#include "xml.h"
Radek Krejci41912fe2015-10-22 10:22:12 +020032#include "dict.h"
Radek Krejcida04f4a2015-05-21 12:54:09 +020033
Radek Krejci39d8d0d2015-08-17 13:42:45 +020034#ifdef __cplusplus
35extern "C" {
36#endif
37
Radek Krejci60cdf282016-10-10 16:22:22 +020038#define LY_VERSION_MAJOR @LIBYANG_MAJOR_VERSION@ /**< libyang major version number */
39#define LY_VERSION_MINOR @LIBYANG_MINOR_VERSION@ /**< libyang minor version number */
40#define LY_VERSION_MICRO @LIBYANG_MICRO_VERSION@ /**< libyang micro version number */
41
Radek Krejci26715a42015-07-29 14:10:45 +020042/**
Radek Krejcidef50022016-02-01 16:38:32 +010043 * @mainpage About
44 *
45 * libyang is a library implementing processing of the YANG schemas and data modeled by the YANG language. The
46 * library is implemented in C for GNU/Linux and provides C API.
47 *
48 * @section about-features Main Features
49 *
Radek Krejci89db0592017-02-16 15:07:13 +010050 * - [Parsing (and validating) schemas](@ref howtoschemasparsers) in YANG format.
51 * - [Parsing (and validating) schemas](@ref howtoschemasparsers) in YIN format.
52 * - [Parsing, validating and printing instance data](@ref howtodata) in XML format.
53 * - [Parsing, validating and printing instance data](@ref howtodata) in JSON format
54 * ([RFC 7951](https://tools.ietf.org/html/rfc7951)).
55 * - [Manipulation with the instance data](@ref howtodatamanipulators).
Radek Krejci89db0592017-02-16 15:07:13 +010056 * - Support for [default values in the instance data](@ref howtodatawd) ([RFC 6243](https://tools.ietf.org/html/rfc6243)).
Michal Vaskoc6cd3f02018-03-02 14:07:42 +010057 * - Support for [YANG extensions and user types](@ref howtoschemaplugins).
Radek Krejci792f52f2017-02-28 16:36:31 +010058 * - Support for [YANG Metadata](@ref howtoschemametadata) ([RFC 7952](https://tools.ietf.org/html/rfc6243)).
Radek Krejcidef50022016-02-01 16:38:32 +010059 *
Radek Krejcidaa080f2016-10-05 08:38:09 +020060 * The current implementation covers YANG 1.0 ([RFC 6020](https://tools.ietf.org/html/rfc6020)) as well as
61 * YANG 1.1 ([RFC 7950](https://tools.ietf.org/html/rfc7950)).
Radek Krejci8b13fc02016-04-18 13:08:04 +020062 *
Radek Krejcidef50022016-02-01 16:38:32 +010063 * @subsection about-features-others Extra (side-effect) Features
64 *
65 * - XML parser.
66 * - Optimized string storage (dictionary).
67 *
68 * @section about-license License
69 *
Radek Krejci792f52f2017-02-28 16:36:31 +010070 * Copyright (c) 2015-2017 CESNET, z.s.p.o.
Radek Krejcidef50022016-02-01 16:38:32 +010071 *
72 * (The BSD 3-Clause License)
73 *
74 * Redistribution and use in source and binary forms, with or without
75 * modification, are permitted provided that the following conditions
76 * are met:
77 * 1. Redistributions of source code must retain the above copyright
78 * notice, this list of conditions and the following disclaimer.
79 * 2. Redistributions in binary form must reproduce the above copyright
80 * notice, this list of conditions and the following disclaimer in
81 * the documentation and/or other materials provided with the
82 * distribution.
83 * 3. Neither the name of the Company nor the names of its contributors
84 * may be used to endorse or promote products derived from this
85 * software without specific prior written permission.
86 */
87
88/**
Radek Krejci26715a42015-07-29 14:10:45 +020089 * @page howto How To ...
90 *
91 * - @subpage howtocontext
Radek Krejcid9ba3e32015-07-30 15:08:18 +020092 * - @subpage howtoschemas
93 * - @subpage howtodata
Michal Vasko0f14ba62016-03-21 15:38:11 +010094 * - @subpage howtoxpath
Radek Krejcidef50022016-02-01 16:38:32 +010095 * - @subpage howtoxml
96 * - @subpage howtothreads
Radek Krejci26715a42015-07-29 14:10:45 +020097 * - @subpage howtologger
98 */
Radek Krejcida04f4a2015-05-21 12:54:09 +020099
Radek Krejci26715a42015-07-29 14:10:45 +0200100/** @page howtocontext Context
101 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200102 * The context concept allows callers to work in environments with different sets of YANG schemas.
Radek Krejci26715a42015-07-29 14:10:45 +0200103 *
104 * The first step in libyang is to create a new context using ly_ctx_new(). It returns a handler
105 * used in the following work.
106 *
107 * When creating a new context, search dir can be specified (NULL is accepted) to provide directory
108 * where libyang will automatically search for schemas being imported or included. The search path
Radek Krejciabacdb52017-06-12 16:40:58 +0200109 * can be later changed via ly_ctx_set_searchdir() and ly_ctx_unset_searchdrs() functions. If the search dir
Michal Vasko2d051a12017-04-21 09:28:57 +0200110 * is specified, it is explored first. Except the searchpath, also all its subdirectories (and symlinks) are
Michal Vasko8f3160e2017-09-27 11:25:26 +0200111 * taken into account. In case the module is not found, libyang tries to find the (sub)module also in the current
Radek Krejcida9f8392017-03-25 19:40:56 -0500112 * working working directory. Note, that in this case only the current directory without any other subdirectory
Radek Krejciabacdb52017-06-12 16:40:58 +0200113 * is examined. This automatic searching can be completely avoided when the caller sets module searching callback
Michal Vasko8f3160e2017-09-27 11:25:26 +0200114 * (#ly_module_imp_clb) via ly_ctx_set_module_imp_clb(), but both approaches can also be combined.
Radek Krejci26715a42015-07-29 14:10:45 +0200115 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200116 * Schemas are added into the context using [parser functions](@ref howtoschemasparsers) - \b lys_parse_*().
Michal Vaskof53187d2017-01-13 13:23:14 +0100117 * In case of schemas, also ly_ctx_load_module() can be used - in that case the #ly_module_imp_clb or automatic
Radek Krejci1fbe8582016-09-15 09:40:11 +0200118 * search in search dir and in the current working directory is used.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200119 *
120 * Similarly, data trees can be parsed by \b lyd_parse_*() functions. Note, that functions for schemas have \b lys_
Michal Vasko346b5f32017-03-07 10:42:40 +0100121 * prefix while functions for instance data have \b lyd_ prefix. It can happen during data parsing that a schema is
122 * required and __not found__ in the context or the schema is found, but is __only imported__, not implemented (so the
123 * data cannot actually be instantiated). In these cases, a callback is called, which should add this schema into
124 * the context or change its conformance to implemented. You can set the callback using ly_ctx_set_module_data_clb()
125 * (more in @ref howtodataparsers and @ref howtodatavalidation).
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200126 *
Radek Krejciee674072016-09-15 10:37:40 +0200127 * Context can hold multiple revisions of the same schema, but only one of them can be implemented. The schema is not
128 * implemented in case it is automatically loaded as import for another module and it is not referenced in such
129 * a module (and no other) as target of leafref, augment or deviation. All modules with deviation definition are always
130 * marked as implemented. The imported (not implemented) module can be set implemented by lys_set_implemented(). But
131 * the implemented module cannot be changed back to just imported module. The imported modules are used only as a
Michal Vasko8f3160e2017-09-27 11:25:26 +0200132 * source of definitions for types and groupings for uses statements. The data in such modules are ignored - caller
133 * is not allowed to create the data (including instantiating identities) defined in the model via data parsers,
134 * the default nodes are not added into any data tree and mandatory nodes are not checked in the data trees. This
135 * can be changed by ly_ctx_set_allimplemented() function, which causes that all the imported modules are automatically
136 * set to be implemented.
137 *
138 * When loading/importing a module without revision, the latest revision of the required module is supposed to load.
139 * For a context, the first time the latest revision of a module is requested, it is properly searched for and loaded.
140 * However, when this module is requested (without revision) the second time, the one found previously is returned.
141 * This has the advantage of not searching for the module repeatedly but the drawback that if a later revision
142 * of the module is later made available, this context will not use it. If you are aware of a case when this
143 * optimization could cause problems, you can disable it using a cmake(1) build option (variable).
Radek Krejci26715a42015-07-29 14:10:45 +0200144 *
Radek Krejci31fb8be2016-06-23 15:26:26 +0200145 * Context holds all modules and their submodules internally. To get
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200146 * 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 +0200147 * 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 +0200148 * submodules in the context, it is advised to iterate over them using ly_ctx_get_module_iter(), it is
149 * the most efficient way. Alternatively, the ly_ctx_info() function can be used to get complex information
150 * about the schemas in the context in the form of data tree defined by
Radek Krejcibd9e8d22016-02-03 14:11:48 +0100151 * <a href="https://tools.ietf.org/html/draft-ietf-netconf-yang-library-04">ietf-yang-library</a> schema.
Radek Krejcic683acd2018-01-22 14:51:52 +0100152 * To get a specific node defined in a module in the context, ly_ctx_find_path() or ly_ctx_get_node() can be used.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200153 *
Radek Krejci0ec51da2016-12-14 16:42:03 +0100154 * Modules held by a context can be removed by ly_ctx_remove_module(). Besides removing the module, it is possible
155 * just to disable it with lys_set_disabled(). In this case the module is hidden in the context (disabled modules can
156 * be iterated via ly_ctx_get_disabled_module_iter()) and not used during the common work with the context. The module
157 * is enabled explicitly by calling lys_set_enabled() or implicitly by the request to load the schema (directly or
158 * indirectly via import of another module) into the context.
159 *
160 * To clean the context from all the loaded modules (except the [internal modules](@ref howtoschemasparsers)), the
161 * ly_ctx_clean() function can be used. To remove the context, there is ly_ctx_destroy() function.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200162 *
Radek Krejcidef50022016-02-01 16:38:32 +0100163 * - @subpage howtocontextdict
164 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200165 * \note API for this group of functions is available in the [context module](@ref context).
166 *
Radek Krejcidef50022016-02-01 16:38:32 +0100167 * Functions List
168 * --------------
169 * - ly_ctx_new()
170 * - ly_ctx_set_searchdir()
Radek Krejcida9f8392017-03-25 19:40:56 -0500171 * - ly_ctx_unset_searchdirs()
Radek Krejci14116592018-05-16 12:26:06 +0200172 * - ly_ctx_get_searchdirs()
Michal Vaskof53187d2017-01-13 13:23:14 +0100173 * - ly_ctx_set_module_imp_clb()
174 * - ly_ctx_get_module_imp_clb()
175 * - ly_ctx_set_module_data_clb()
176 * - ly_ctx_get_module_data_clb()
Radek Krejci819dd4b2017-03-07 15:35:48 +0100177 * - ly_ctx_set_allimplemented()
178 * - ly_ctx_unset_allimplemented()
Radek Krejcidef50022016-02-01 16:38:32 +0100179 * - ly_ctx_load_module()
180 * - ly_ctx_info()
Radek Krejci14116592018-05-16 12:26:06 +0200181 * - ly_ctx_get_module_set_id()
Michal Vaskod7957c02016-04-01 10:27:26 +0200182 * - ly_ctx_get_module_iter()
Radek Krejci0ec51da2016-12-14 16:42:03 +0100183 * - ly_ctx_get_disabled_module_iter()
Radek Krejcidef50022016-02-01 16:38:32 +0100184 * - ly_ctx_get_module()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200185 * - ly_ctx_get_module_older()
Radek Krejcidef50022016-02-01 16:38:32 +0100186 * - ly_ctx_get_module_by_ns()
Radek Krejcidef50022016-02-01 16:38:32 +0100187 * - ly_ctx_get_submodule()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200188 * - ly_ctx_get_submodule2()
Michal Vasko3edeaf72016-02-11 13:17:43 +0100189 * - ly_ctx_get_node()
Radek Krejcic683acd2018-01-22 14:51:52 +0100190 * - ly_ctx_find_path()
Radek Krejci0ec51da2016-12-14 16:42:03 +0100191 * - ly_ctx_remove_module()
192 * - ly_ctx_clean()
Radek Krejcidef50022016-02-01 16:38:32 +0100193 * - ly_ctx_destroy()
Radek Krejciee674072016-09-15 10:37:40 +0200194 * - lys_set_implemented()
Radek Krejci0ec51da2016-12-14 16:42:03 +0100195 * - lys_set_disabled()
196 * - lys_set_enabled()
Radek Krejcidef50022016-02-01 16:38:32 +0100197 */
198
199/**
200 * @page howtocontextdict Context Dictionary
201 *
202 * Context includes dictionary to store strings more effectively. The most of strings repeats quite often in schema
203 * as well as data trees. Therefore, instead of allocating those strings each time they appear, libyang stores them
204 * as records in the dictionary. The basic API to the context dictionary is public, so even a caller application can
205 * use the dictionary.
206 *
207 * To insert a string into the dictionary, caller can use lydict_insert() (adding a constant string) or
208 * lydict_insert_zc() (for dynamically allocated strings that won't be used by the caller after its insertion into
209 * the dictionary). Both functions return the pointer to the inserted string in the dictionary record.
210 *
211 * To remove (reference of the) string from the context dictionary, lydict_remove() is supposed to be used.
212 *
213 * \note Incorrect usage of the dictionary can break libyang functionality.
214 *
215 * \note API for this group of functions is described in the [XML Parser module](@ref dict).
216 *
217 * Functions List
218 * --------------
219 * - lydict_insert()
220 * - lydict_insert_zc()
221 * - lydict_remove()
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200222 */
223
224/**
225 * @page howtoschemas Schemas
226 *
Radek Krejcidef50022016-02-01 16:38:32 +0100227 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200228 * Schema is an internal libyang's representation of a YANG data model. Each schema is connected with
Radek Krejcidef50022016-02-01 16:38:32 +0100229 * its [context](@ref howtocontext) and loaded using [parser functions](@ref howtoschemasparsers). It means, that
230 * the schema cannot be created (nor changed) programmatically. In libyang, schemas are used only to
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200231 * access data model definitions.
232 *
Radek Krejcidef50022016-02-01 16:38:32 +0100233 * Schema tree nodes are able to hold private objects (via a pointer to a structure, function, variable, ...) used by
234 * a caller application. Such an object can be assigned to a specific node using lys_set_private() function.
235 * Note that the object is not freed by libyang when the context is being destroyed. So the caller is responsible
236 * 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 +0200237 * appropriate schema nodes where the object was previously set. This can be automated via destructor function
238 * to free these private objects. The destructor is passed to the ly_ctx_destroy() function. On the other hand,
239 * freeing the object while the schema tree is still in use can lead to a segmentation fault.
Radek Krejcidef50022016-02-01 16:38:32 +0100240 *
241 * - @subpage howtoschemasparsers
242 * - @subpage howtoschemasfeatures
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100243 * - @subpage howtoschemaplugins
Radek Krejcidef50022016-02-01 16:38:32 +0100244 * - @subpage howtoschemasprinters
245 *
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200246 * \note There are many functions to access information from the schema trees. Details are available in
247 * the [Schema Tree module](@ref schematree).
248 *
Radek Krejciee674072016-09-15 10:37:40 +0200249 * For information about difference between implemented and imported modules, see the
250 * [context description](@ref howtocontext).
251 *
Radek Krejcidef50022016-02-01 16:38:32 +0100252 * Functions List (not assigned to above subsections)
253 * --------------------------------------------------
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200254 * - lys_getnext()
Radek Krejcidef50022016-02-01 16:38:32 +0100255 * - lys_parent()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200256 * - lys_module()
257 * - lys_node_module()
Radek Krejcidef50022016-02-01 16:38:32 +0100258 * - lys_set_private()
Radek Krejciee674072016-09-15 10:37:40 +0200259 * - lys_set_implemented()
Radek Krejci0ec51da2016-12-14 16:42:03 +0100260 * - lys_set_disabled()
261 * - lys_set_enabled()
Radek Krejcidef50022016-02-01 16:38:32 +0100262 */
263
264/**
265 * @page howtoschemasparsers Parsing Schemas
266 *
267 * Schema parser allows to read schema from a specific format. libyang supports the following schema formats:
268 *
269 * - YANG
270 *
Radek Krejci792f52f2017-02-28 16:36:31 +0100271 * Basic YANG schemas format described in [RFC 6020](http://tools.ietf.org/html/rfc6020) and
272 * [RFC 7951](http://tools.ietf.org/html/rfc7951) (so both YANG 1.0 and YANG 1.1 versions are supported).
Radek Krejcidef50022016-02-01 16:38:32 +0100273 *
Radek Krejcidef50022016-02-01 16:38:32 +0100274 * - YIN
275 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200276 * Alternative XML-based format to YANG - YANG Independent Notation. The details can be found in
Radek Krejci792f52f2017-02-28 16:36:31 +0100277 * [RFC 6020](http://tools.ietf.org/html/rfc6020#section-11) and
278 * [RFC 7951](http://tools.ietf.org/html/rfc7951#section-13).
Radek Krejcidef50022016-02-01 16:38:32 +0100279 *
Radek Krejci792f52f2017-02-28 16:36:31 +0100280 * When the [context](@ref howtocontext) is created, it already contains the following schemas, which
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200281 * are implemented internally by libyang:
Radek Krejci792f52f2017-02-28 16:36:31 +0100282 * - ietf-yang-metadata@2016-08-05
283 * - yang@2017-02-20
Radek Krejcidef50022016-02-01 16:38:32 +0100284 * - ietf-inet-types@2013-07-15
285 * - ietf-yang-types@2013-07-15
Radek Krejci792f52f2017-02-28 16:36:31 +0100286 * - ietf-yang-library@2016-06-21
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200287 *
Radek Krejci792f52f2017-02-28 16:36:31 +0100288 * The `yang` schema is the libyang's internal module to provide namespace and definitions of for various YANG
289 * attributes described in [RFC 7951](https://tools.ietf.org/html/rfc6243) (such as `insert` attribute for
290 * edit-config's data).
Radek Krejcidef50022016-02-01 16:38:32 +0100291 *
292 * Other schemas can be added to the context manually as described in [context page](@ref howtocontext) by the functions
293 * listed below. Besides the schema parser functions, it is also possible to use ly_ctx_load_module() which tries to
Michal Vaskof53187d2017-01-13 13:23:14 +0100294 * find the required schema automatically - using #ly_module_imp_clb or automatic search in working directory and in the
Radek Krejcidef50022016-02-01 16:38:32 +0100295 * context's searchpath.
296 *
297 * Functions List
298 * --------------
Radek Krejci722b0072016-02-01 17:09:45 +0100299 * - lys_parse_mem()
Radek Krejcidef50022016-02-01 16:38:32 +0100300 * - lys_parse_fd()
301 * - lys_parse_path()
Michal Vaskof53187d2017-01-13 13:23:14 +0100302 * - ly_ctx_set_module_imp_clb()
Radek Krejcidef50022016-02-01 16:38:32 +0100303 * - ly_ctx_load_module()
304 */
305
306/**
307 * @page howtoschemasfeatures YANG Features Manipulation
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200308 *
309 * The group of functions prefixed by \b lys_features_ are used to access and manipulate with the schema's
310 * features.
311 *
312 * The first two functions are used to access information about the features in the schema.
313 * lys_features_list() provides list of all features defined in the specific schema and its
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200314 * submodules. Optionally, it can also provide information about the state of all features.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200315 * Alternatively, caller can use lys_features_state() function to get state of one specific
316 * feature.
317 *
318 * The remaining two functions, lys_features_enable() and lys_features_disable(), are used
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200319 * to enable and disable the specific feature (or all via the '`*`' value). By default, when the module
Radek Krejcidef50022016-02-01 16:38:32 +0100320 * is loaded by libyang parser, all features are disabled.
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200321 *
Radek Krejcidef50022016-02-01 16:38:32 +0100322 * 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 +0200323 *
Radek Krejcidef50022016-02-01 16:38:32 +0100324 * Note, that the feature's state can affect some of the output formats (e.g. Tree format).
325 *
326 * Functions List
327 * --------------
328 * - lys_features_list()
329 * - lys_features_enable()
330 * - lys_features_disable()
331 * - lys_features_state()
332 * - lys_is_disabled()
333 */
334
335/**
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100336 * @page howtoschemaplugins YANG Extension and User Type Support
337 *
338 * Extensions and user types are supported in the form of **plugins**. These are loaded from the plugin directory
339 * (`LIBDIR/libyang/`) whenever a context is created. However, the list of plugins can be refreshed manually by ly_load_plugins().
340 * The extension plugin directory path (default `LIBDIR/libyang/extensions/`) can be change via the
341 * `LIBYANG_EXTENSIONS_PLUGINS_DIR` environment variable and similarly the user type directory (default `LIBDIR/libyang/user_types/`)
342 * via `LIBYANG_USER_TYPES_PLUGINS_DIR`. Note, that unavailable plugins are not removed, only
343 * any new plugins are loaded. Also note that the availability of new plugins does not affect the current schemas in the
344 * contexts, they are applied only to the newly parsed schemas.
345 *
346 * The plugins list can be cleaned by ly_clean_plugins(). However, since various contexts (respectively their
347 * schemas) can link to the plugins, the cleanup is successful only when there is no remaining context.
348 *
349 * @section extensions Extensions
Radek Krejci16d64a52017-01-31 14:10:15 +0100350 *
351 * YANG provides extensions as a mechanism how to add new statements into the language. Since they are very generic -
352 * extension instance can appear anywhere, they can contain any other YANG statement including extension instances and
353 * their specification has a form of the description text, it is very challenging for libyang to provide working and
354 * useful implementation. Therefore, you can reach some limitation regarding the extensions support, but the common
355 * use cases should be covered and supported.
356 *
357 * Since libyang does not understand human text, it is not possible to get the complete defintion of the extension from
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100358 * its description statement. Therefore, libyang allows the schema authors to provide @link extplugins extension
Radek Krejci89db0592017-02-16 15:07:13 +0100359 * plugin@endlink that provides information from the extension description to libyang.
Radek Krejci16d64a52017-01-31 14:10:15 +0100360 *
361 * Here are some notes about the implementation of the particular YANG extensions features
362 *
363 * - Extension instance can appear anywhere
364 * This is completely supported. In addition, the extension plugins are allowed to provide callback function to
365 * check if the extension instance is actually allowed to be instantiated as a substatement of the particular node.
Radek Krejci89db0592017-02-16 15:07:13 +0100366 * In some case the extension instance is not stored in the libyang structures inside the statement it is
367 * instantiated since some statements (such as description, position and several others listed as #LYEXT_SUBSTMT) are
368 * not stored as a structure, but directly as a value. The extension instances of such statements are then actually
369 * stored besides the extension instances of the parent structure (e.g. in ::lys_type_bit in case of position's
370 * extension instances). These extension instances are indicated by the ::lys_ext_instance#insubstmt value which
371 * refers (sometimes in combination with ::lys_ext_instance#insubstmt_index) to the substatement where the particular
372 * extension is actually instantiated.
Radek Krejci16d64a52017-01-31 14:10:15 +0100373 *
374 * - Extension instance can contain any other YANG statement
Radek Krejci89db0592017-02-16 15:07:13 +0100375 * This is supported with exceptions - the list of YANG statements is defined as #LY_STMT enumeration with the
376 * description if the specific statement can appear as an extension instance substatement or if there is some
377 * limitation regarding its cardinality. It also specifies how the specific statement is stored in the extension
378 * instance (which data type or structure is used). In some cases, like `include` or `yang-version` statements, it
379 * make no sense to have them inside an extension instance, so they are not supported by libyang.
Radek Krejci16d64a52017-01-31 14:10:15 +0100380 *
Radek Krejci89db0592017-02-16 15:07:13 +0100381 * The list of allowed substatement for the specific extension instances is provided by the extension plugin. Besides
382 * the list of substatement, the plugin also specifies where the data are stored and the cardinality for each
383 * substatement. Other extension instances as an extension instance substatements are always allowed. Note, that if
384 * there is no extension plugin defined or if the list of the allowed substatements is empty, no substatement (except
385 * extension instances) is allowed.
386 *
387 * There are several extension types (enumerated as #LYEXT_TYPE) according to their purpose and content:
388 *
389 * - #LYEXT_FLAG - simple extension with no content (no substatement is allowed). The extension instance serves just as
390 * a flag with or without an argument and its value. The example of such an extension is NACM's __default-deny-write__
391 * or __default-deny-all__. This is the default type of extension for the case there is no extension plugin available
392 * for the specific extension. Extension instances of this type are represented as ::lys_ext_instance.
393 *
394 * - #LYEXT_COMPLEX - complex extension with content. The specific rules for the content and how it is stored in the
395 * extension instance structure is specified by the plugin. Extension instances of this type are represented as
396 * ::lys_ext_instance_complex.
397 *
398 * Note that the ::lys_ext_instance structure serves as a generic structure for all extension instances. In case the
399 * ::lys_ext_instance#ext_type is set to a different value than #LYEXT_FLAG, the structure can be cast to the particular
400 * extension instance structure to access the type-specific members.
Radek Krejci16d64a52017-01-31 14:10:15 +0100401 *
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100402 * @subsection extplugins Extension Plugins
403 *
Radek Krejci16d64a52017-01-31 14:10:15 +0100404 * Extension plugins provide more detailed information about the extension in a understandable form for libyang. These
405 * information is usually provided in a text form in the extension's description statement. libyang provides several
406 * plugins for the common IETF extensions (NACM, Metadata, ...) that can be used as a code examples for other
407 * extensions.
408 *
Radek Krejci89db0592017-02-16 15:07:13 +0100409 * There are several types of extension plugins which corresponds to the extension types:
410 *
411 * - ::lyext_plugin - the plugin for a simple extensions of type #LYEXT_FLAG. The plugin is supposed to provide
412 * callbacks for:
413 * + @link lyext_check_position_clb checking extension position @endlink (if the extension instance can be instantiated
414 * in a particular parent)
415 * + @link lyext_check_inherit_clb deciding if the extension is supposed to be inherited @endlink
416 * (see #LYEXT_OPT_INHERIT). Note that the inherited extension instances are available in the libyang data
417 * structures, but they are not part of the schema so they are not printed into the schema output formats.
418 * + @link lyext_check_result_clb checking the result @endlink, the callback is called when the schema is completely
419 * parsed and all the data are available for the final (possibly complex) checking (or modification)
420 * - ::lyext_plugin_complex - the plugin for the complex extension instances (#LYEXT_COMPLEX). The structure extends
421 * the ::lyext_plugin structure by:
422 * + instance_size - the overall size of the ::lyext_plugin_complex structure to allocate.
423 * The substatement list is flexible array, so the size of the plugin structure depends on the content of the array.
424 * + substmt - the list of the allowed substatements to the extension instance, besides the substatement id, it
425 * also specifies its cardinality and the specific position in the ::lys_ext_instance_complex where the data are
426 * stored (as offset to the ::lys_ext_instance_complex#content member). The way how the data are stored is
427 * specified descriptions of #LY_STMT values.
428 *
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100429 * @subsection howtoschemametadata Metadata Support
Radek Krejci792f52f2017-02-28 16:36:31 +0100430 *
431 * YANG Metadata annotations are defined in [RFC 7952](https://tools.ietf.org/html/rfc6243) as YANG extension. In
432 * practice, it allows to have XML attributes (there is also a special encoding for JSON) in YANG modeled data.
433 * libyang does not allow to have any XML attribute without the appropriate annotation definition describing the
434 * data as it is done e.g. for leafs. When an attribute without a matching annotation definition is found in the
435 * input data, it is silently dropped (with warning) or an error is reported in case the #LYD_OPT_STRICT parser
436 * option is provided to the [parser function](@ref howtodataparsers).
437 *
438 * There are some XML attributes, described by [YANG](https://tools.ietf.org/html/rfc7951) and
439 * [NETCONF](https://tools.ietf.org/html/rfc6241) specifications, which are not defined as annotations, but libyang
440 * implements them this way. In case of attributes in the YANG namespace (`insert`, `value` and `key` attributes
441 * for the NETCONF edit-config operation), they are defined in special libyang's internal module `yang`, which is
442 * available in each context and the content of this schema can be printed via
443 * [schema printers](@ref howtoschemasprinters).
444 *
445 * In case of the attributes described in [NETCONF specification](https://tools.ietf.org/html/rfc6241), the libyang's
446 * annotations structures are hidden and cannot be printed despite, internally, they are part of the `ietf-netconf`'s
447 * schema structure. Therefore, these attributes are available only when the `ietf-netconf` schema is loaded in the
448 * context. The definitions of these annotations are as follows:
449 *
450 * md:annotation operation {
451 * type enumeration {
452 * enum merge;
453 * enum replace;
454 * enum create;
455 * enum delete;
456 * enum remove;
457 * }
458 * }
459 *
460 * md:annotation type {
461 * type enumeration {
462 * enum subtree;
463 * enum xpath {
464 * if-feature "nc:xpath";
465 * }
466 * }
467 * }
468 *
469 * md:annotation select {
470 * type string;
471 * }
472 *
473 * Note, that, following the specification,
474 * - the `type` and `select` XML attributes are supposed to be unqualified (without namespace) and that
475 * - the `select`'s content is XPath and it is internally transformed by libyang into the format where the
476 * XML namespace prefixes are replaced by the YANG module names.
477 *
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100478 * @section usertypes User Types
479 *
480 * Using this plugin mechanism, it is also possible to define what can be called **user types**. Values are
481 * always stored as a string in addition to being in a #lyd_val union. It is possible to customize how
482 * the value is stored in the union using a #lytype_store_clb callback.
483 *
484 * Generally, it is meant for storing certain types more effectively. For instance, when working with **ipv4-address**
485 * from the *ietf-inet-types* model, an application will most likely use the address in a binary form, not as a string.
486 * So, in the callback the value is simply transformed into the desired format and saved into #lyd_val value. However,
487 * the callback is allowed to store anything in the union. Another example, if there are many strings being created and
488 * handled, is to store the string length instead having 2 pointers to the same string.
489 *
Michal Vasko25b59c72018-03-21 11:49:23 +0100490 * Also, it is possible to perform some additional validation of the value except for the standard YANG one. Even if
491 * the value should only be validated, this callback can be defined and used, it will just keep the #lyd_val value
492 * unchanged.
493 *
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100494 * @subsection typeplugins User Type Plugins
495 *
Michal Vasko25b59c72018-03-21 11:49:23 +0100496 * There are simple example user type plugins in `src/user_types`.
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100497 *
498 * - ::lytype_plugin_list - plugin is supposed to provide callbacks for:
499 * + @link lytype_store_clb storing the value itself @endlink
500 * + freeing the stored value (optionally, if the store callback allocates memory)
501 *
Radek Krejci16d64a52017-01-31 14:10:15 +0100502 * Functions List
503 * --------------
Radek Krejci16d64a52017-01-31 14:10:15 +0100504 * - lys_ext_instance_presence()
505 * - lys_ext_instance_substmt()
Michal Vaskoc6cd3f02018-03-02 14:07:42 +0100506 * - ly_load_plugins()
507 * - ly_clean_plugins()
Radek Krejci16d64a52017-01-31 14:10:15 +0100508 */
509
510/**
Radek Krejcidef50022016-02-01 16:38:32 +0100511 * @page howtoschemasprinters Printing Schemas
512 *
513 * Schema printers allows to serialize internal representation of a schema module in a specific format. libyang
514 * supports the following schema formats for printing:
515 *
516 * - YANG
517 *
Radek Krejci792f52f2017-02-28 16:36:31 +0100518 * Basic YANG schemas format described in [RFC 6020](http://tools.ietf.org/html/rfc6020) and
519 * [RFC 7951](http://tools.ietf.org/html/rfc7951) (so both YANG 1.0 and YANG 1.1 versions are supported).
Radek Krejcidef50022016-02-01 16:38:32 +0100520 *
521 * - YIN
522 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200523 * Alternative XML-based format to YANG - YANG Independent Notation. The details can be found in
Radek Krejci792f52f2017-02-28 16:36:31 +0100524 * [RFC 6020](http://tools.ietf.org/html/rfc6020#section-11) and
525 * [RFC 7951](http://tools.ietf.org/html/rfc7951#section-13).
Radek Krejcidef50022016-02-01 16:38:32 +0100526 *
Radek Krejcidef50022016-02-01 16:38:32 +0100527 * - Tree
528 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200529 * Simple tree structure of the module where each node is printed as:
530 *
531 * <status> <flags> <name> <opts> <type> <if-features>
532 *
533 * - `<status>` is one of:
534 * - `+` for current
535 * - `x` for deprecated
536 * - `o` for obsolete
537 *
538 * - `<flags>` is one of:
539 * - `rw` for configuration data
540 * - `ro` for status data
541 * - `-x` for RPCs
542 * - `-n` for Notification
543 *
544 * - `<name>` is the name of the node
545 * - `(<name>)` means that the node is a choice node
546 * - `:(<name>)` means that the node is a case node
547 * - if the node is augmented into the tree from another module, it is printed with the module name as
548 * `<module-name>:<name>`.
549 *
550 * - `<opts>` is one of:
551 * - `?` for an optional leaf or choice
552 * - `!` for a presence container
553 * - `*` for a leaf-list or list
554 * - `[<keys>]` for a list's keys
555 *
556 * - `<type>` is the name of the type for leafs and leaf-lists
557 * - if there is a default value defined, it is printed within angle brackets `<default-value>`
558 * - if the type is a leafref, the type is printed as -> TARGET`
559 *
560 * - `<if-features>` is the list of features this node depends on, printed within curly brackets and
561 * a question mark `{...}?`
562 *
Radek Krejcidef50022016-02-01 16:38:32 +0100563 *
564 * - Info
565 *
566 * Detailed information about the specific node in the schema tree.
567 * It allows to print information not only about a specific module, but also about its specific part:
568 *
569 * - absolute-schema-nodeid
570 *
571 * e.g. \a `/modules/module-set-id` in \a `ietf-yang-library` module
572 *
573 * - <b>typedef/</b>typedef-name
574 *
575 * e.g. \a `typedef/revision-identifier` in \a `ietf-yang-library` module
576 *
577 * - <b>feature/</b>feature-name
578 *
579 * e.g. \a `feature/ssh` in \a `ietf-netconf-server` module
580 *
581 * - <b>grouping/</b>grouping-name/descendant-schema-nodeid
582 *
583 * e.g. \a `grouping/module` or \a `grouping/module/module/submodules` in \a `ietf-yang-library` module
584 *
585 * - <b>type/</b>leaf-or-leaflist
586 *
587 * e.g. \a `type/modules/module-set-id` in \a `ietf-yang-library` module
588 *
589 * Printer functions allow to print to the different outputs including a callback function which allows caller
590 * to have a full control of the output data - libyang passes to the callback a private argument (some internal
591 * data provided by a caller of lys_print_clb()), string buffer and number of characters to print. Note that the
592 * callback is supposed to be called multiple times during the lys_print_clb() execution.
593 *
594 * Functions List
595 * --------------
596 * - lys_print_mem()
597 * - lys_print_fd()
598 * - lys_print_file()
599 * - lys_print_clb()
Radek Krejcid9ba3e32015-07-30 15:08:18 +0200600 */
601
602/**
603 * @page howtodata Data Instances
Radek Krejci26715a42015-07-29 14:10:45 +0200604 *
Radek Krejcidef50022016-02-01 16:38:32 +0100605 * All data nodes in data trees are connected with their schema node - libyang is not able to represent data of an
606 * unknown schema.
607 *
Michal Vasko42aa0ab2016-10-25 15:09:32 +0200608 * Connected to the aforementioned, it is important to mention that there are several kinds of data trees libyang
609 * can work with. Except for a standard full data tree and configuration data tree, there are trees specific for use
610 * in NETCONF, which are \<get\> or \<get-config\> replies, \<edit-config\> input content, generic RPC/action request,
611 * RPC/action reply, or a notification.
612 *
613 * Special care is needed when working with action input and RPC/action output, because in these cases the libyang data
614 * tree does not match the actual data tree NETCONF expects.
615 *
616 * <b>Action input</b> differentiates from a standard RPC that the child of \<rpc\> element is not the specific RPC
617 * request being sent, but a special \<action\> element in the base YANG namespace. It is expected to be present when
618 * parsing an action input and can optionally be included when the action is printed.
619 *
620 * As for <b>RPC output</b>, NETCONF expects the output parameters as direct children of the \<rpc-reply\> element.
621 * However, libyang encapsulates these parameters in the specific RPC request container. Same as before, it is expected
622 * to be without this container when parsing and can be printed out.
623 *
624 * Lastly, <b>action output</b> is almost similar to RPC output and in NETCONF you actually cannot distinguish them,
625 * but in case of action output, libyang puts all the output parameters under the action container, which is also
626 * just a child to all the schema tree ancestors up to the schema top-level, just like in an action input. Same applies
627 * even in this case, parsed data should be only the output parameters, you can decide how to print it.
628 *
629 * So, you do not have to use any special flag when you want to print the data tree the way libyang internally stores
630 * it, although you will not be able to parse it back, as was mentioned in the paragraphs above. To print data in the
631 * way NETCONF and libyang expects them to be, use #LYP_NETCONF flag for any printing function.
632 *
Michal Vasko1ec579e2016-09-13 11:24:28 +0200633 * 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 +0100634 *
635 * - @subpage howtodataparsers
636 * - @subpage howtodatamanipulators
Michal Vasko1ec579e2016-09-13 11:24:28 +0200637 * - @subpage howtodatavalidation
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200638 * - @subpage howtodatawd
Radek Krejcidef50022016-02-01 16:38:32 +0100639 * - @subpage howtodataprinters
640 *
641 * \note API for this group of functions is described in the [Data Instances module](@ref datatree).
642 *
643 * Functions List (not assigned to above subsections)
644 * --------------------------------------------------
Michal Vaskof06fb5b2016-09-08 10:05:56 +0200645 * - lyd_find_instance()
646 * - lyd_find_xpath()
Radek Krejciae1c3b12016-09-20 16:30:32 +0200647 * - lyd_leaf_type()
Radek Krejcidef50022016-02-01 16:38:32 +0100648 */
649
650/**
651 * @page howtodataparsers Parsing Data
652 *
653 * Data parser allows to read instances from a specific format. libyang supports the following data formats:
654 *
655 * - XML
656 *
657 * Original data format used in NETCONF protocol. XML mapping is part of the YANG specification
658 * ([RFC 6020](http://tools.ietf.org/html/rfc6020)).
659 *
660 * - JSON
661 *
662 * The alternative data format available in RESTCONF protocol. Specification of JSON encoding of data modeled by YANG
663 * can be found in [this draft](https://tools.ietf.org/html/draft-ietf-netmod-yang-json-05).
664 *
665 * Besides the format of input data, the parser functions accepts additional [options](@ref parseroptions) to specify
666 * how the input data should be processed.
667 *
668 * In contrast to the schema parser, data parser also accepts empty input data if such an empty data tree is valid
669 * according to the schemas in the libyang context.
670 *
Michal Vasko346b5f32017-03-07 10:42:40 +0100671 * If a node from a schema, which is not present in the context or is not implemented, is parsed, a callback set by
672 * ly_ctx_set_module_data_clb() is called and this way the application is given the opportunity to add this schema into
673 * the context or change its conformance before the parsing would fail.
Michal Vaskof53187d2017-01-13 13:23:14 +0100674 *
Radek Krejcidef50022016-02-01 16:38:32 +0100675 * In case of XML input data, there is one additional way to parse input data. Besides parsing the data from a string
676 * in memory or a file, caller is able to build an XML tree using [libyang XML parser](@ref howtoxml) and then use
677 * this tree (or a part of it) as input to the lyd_parse_xml() function.
678 *
679 * Functions List
680 * --------------
Radek Krejci722b0072016-02-01 17:09:45 +0100681 * - lyd_parse_mem()
Radek Krejcidef50022016-02-01 16:38:32 +0100682 * - lyd_parse_fd()
683 * - lyd_parse_path()
684 * - lyd_parse_xml()
685 */
686
687/**
688 * @page howtodatamanipulators Manipulating Data
689 *
690 * There are many functions to create or modify an existing data tree. You can add new nodes, reconnect nodes from
691 * one tree to another (or e.g. from one list instance to another) or remove nodes. The functions doesn't allow you
692 * to put a node to a wrong place (by checking the module), but not all validation checks can be made directly
693 * (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 +0100694 * there is lyd_validate() function supposed to be called to make sure that the current data tree is valid. If
695 * working with RPCs, they are invalid also in case the data nodes are not ordered according to the schema, which
696 * you can fix easily with lyd_schema_sort(). Note, that not performing validation after some data tree changes
Michal Vasko299f9832017-01-06 13:29:22 +0100697 * can cause failure of various libyang functions later. All functions performing data tree changes are marked
698 * with the __PARTIAL CHANGE__ flag in their documentation meaning they leave at least partly non-validated data tree.
Radek Krejcidef50022016-02-01 16:38:32 +0100699 *
Michal Vasko0f14ba62016-03-21 15:38:11 +0100700 * 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 +0200701 * 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 +0100702 * address the nodes using a simple XPath addressing (lyd_new_path()). The latter enables to create a whole path
703 * of nodes, requires less information about the modified data, and is generally simpler to use. The path format
704 * specifics can be found [here](@ref howtoxpath).
Michal Vasko0f14ba62016-03-21 15:38:11 +0100705 *
Michal Vasko3c126822016-09-22 13:48:42 +0200706 * Working with two data subtrees can also be performed two ways. Usually, you would use lyd_insert*() functions.
707 * They are generally meant for simple inserts of a node into a data tree. For more complicated inserts and when
708 * merging 2 trees use lyd_merge(). It offers additional options and is basically a more powerful insert.
Michal Vasko45fb2822016-04-18 13:32:17 +0200709 *
Radek Krejcidef50022016-02-01 16:38:32 +0100710 * Also remember, that when you are creating/inserting a node, all the objects in that operation must belong to the
711 * same context.
712 *
713 * Modifying the single data tree in multiple threads is not safe.
714 *
715 * Functions List
716 * --------------
717 * - lyd_dup()
Radek Krejciab80e3a2017-01-09 13:07:31 +0100718 * - lyd_dup_to_ctx()
Radek Krejcidef50022016-02-01 16:38:32 +0100719 * - lyd_change_leaf()
720 * - lyd_insert()
Radek Krejcidb6b1662016-09-15 10:40:16 +0200721 * - lyd_insert_sibling()
Radek Krejcidef50022016-02-01 16:38:32 +0100722 * - lyd_insert_before()
723 * - lyd_insert_after()
724 * - lyd_insert_attr()
Michal Vasko45fb2822016-04-18 13:32:17 +0200725 * - lyd_merge()
Radek Krejciab80e3a2017-01-09 13:07:31 +0100726 * - lyd_merge_to_ctx()
Radek Krejcidef50022016-02-01 16:38:32 +0100727 * - lyd_new()
Michal Vasko0845b112016-09-08 10:07:08 +0200728 * - lyd_new_anydata()
Radek Krejcidef50022016-02-01 16:38:32 +0100729 * - lyd_new_leaf()
Michal Vaskof5299282016-03-16 13:32:02 +0100730 * - lyd_new_path()
Michal Vasko0ba46152016-05-11 14:16:55 +0200731 * - lyd_new_output()
Michal Vasko0845b112016-09-08 10:07:08 +0200732 * - lyd_new_output_anydata()
Michal Vasko0ba46152016-05-11 14:16:55 +0200733 * - lyd_new_output_leaf()
Michal Vaskoae5a53e2017-01-05 10:33:41 +0100734 * - lyd_list_pos()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200735 * - lyd_schema_sort()
Radek Krejcidef50022016-02-01 16:38:32 +0100736 * - lyd_unlink()
737 * - lyd_free()
738 * - lyd_free_attr()
739 * - lyd_free_withsiblings()
Michal Vasko1ec579e2016-09-13 11:24:28 +0200740 */
741
742/**
743 * @page howtodatavalidation Validating Data
744 *
745 * By default, the represented data are supposed to represent a full YANG datastore content. So if a schema declares
746 * some mandatory nodes, despite configuration or status, the data are supposed to be present in the data tree being
747 * loaded or validated. However, it is possible to specify other kinds of data (see @ref parseroptions) allowing some
748 * exceptions to the validation process.
749 *
750 * Data validation is performed implicitly to the input data processed by the parser (\b lyd_parse_*() functions) and
751 * on demand via the lyd_validate() function. The lyd_validate() is supposed to be used when a (complex or simple)
752 * change is done on the data tree (via a combination of \b lyd_change_*(), \b lyd_insert*(), \b lyd_new*(),
753 * lyd_unlink() and lyd_free() functions).
754 *
Michal Vaskof53187d2017-01-13 13:23:14 +0100755 * Part of data validation is resolving leafrefs and instance-identifiers. Leafrefs are resolved only when a change occured
756 * in the data tree that could have broken the link. However, as instance-identifiers can point to any node whatsoever
757 * without an import, it would not be effective to store metadata as in the case of leafrefs. That is why they are resolved
758 * during every validation. Also, for the same reason, it can easily happen that when parsing/validating data with
759 * an instance-identifier, it will target a remote node, whose schema is not currently present in the context. To handle
760 * this case, a callback should be set using ly_ctx_set_module_data_clb(), which can load the schema when required.
761 *
Michal Vasko1ec579e2016-09-13 11:24:28 +0200762 * Must And When Conditions Accessible Tree
763 * ----------------------------------------
764 *
765 * In YANG 1.1, there can be \b must and/or \b when expressions in RPC/action input or output, or in notifications that
766 * require access to the configuration datastore and/or state data. Normally, when working with any of the aforementioned
767 * data trees, they must contain only the RPC/action/notification itself, without any additional configuration or state
768 * data. So how can then these conditions be verified during validation?
769 *
770 * There is an option to pass this additional data tree to all the functions that perform \b must and \b when condition
Michal Vasko3c4cf902017-01-03 14:43:38 +0100771 * checking (\b lyd_parse_*() and lyd_validate()). Also, there are 2 flags of \b struct lys_node that
772 * mark schema nodes that include paths that require foreign nodes (outside their subtree) for their evaluation. #LYS_XPATH_DEP
773 * marks nodes with such must and/or when expressions, #LYS_LEAFREF_DEP with such a leafref.
Michal Vasko1ec579e2016-09-13 11:24:28 +0200774 * The subtree root is always the particular operation data node (for RPC it is the RPC data node and all
775 * the input or output nodes as its children and similarly for action and notification). Note that for action and
776 * not-top-level notification this means that all their parents are not considered as belonging to their subtree even though
777 * they are included in their data tree and must be present for the operation validation to pass. The reason for this is that if
778 * there are any lists in those parents, we cannot know if there are not some other instances of them in the standard
779 * data tree in addition to the one used in the action/notification invocation.
780 *
781 * There were 2 ways of using this mechanism envisioned (explained below), but you can combine or modify them.
782 *
783 * ### Fine-grained Data Retrieval ###
784 *
785 * This approach is recommended when you do not maintain a full configuration data tree with state data at all times.
786 *
787 * Firstly, you should somehow learn that the operation data tree you are currently working with includes some schema
788 * node instances that have conditions that require foreign data. You can either know this about every operation beforehand
Michal Vasko3c4cf902017-01-03 14:43:38 +0100789 * or you go through all the schema nodes looking for the flags #LYS_XPATH_DEP and #LYS_LEAFREF_DEP. Then you should use lys_node_xpath_atomize()
Michal Vasko1ec579e2016-09-13 11:24:28 +0200790 * to retrieve all XPath condition dependencies (in the form of schema nodes) outside the operation subtree. You will likely
791 * want to use the flag #LYXP_NO_LOCAL to get rid of all the nodes from inside the subtree (you should already have those).
792 * 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()
793 * (it will be expected). Then you pass this tree to the validation and it should now have access to all the nodes that
794 * can potentially affect the XPath evaluation and no other.
795 *
796 * ### Maintaining Configuration And State Data Tree ###
797 *
798 * If you have a full data tree with state data available for the validation process then it is quite simple (compared
799 * to the first approach). You can simply always pass it to validation of these operations and in cases it is not required
800 * (no nodes with conditions traversing foreign nodes) only a negligible amount of redundant work is performed and you can
801 * skip the process of learning whether it is required or not.
802 *
803 * Functions List
804 * --------------
Radek Krejcidef50022016-02-01 16:38:32 +0100805 * - lyd_validate()
806 */
807
808/**
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200809 * @page howtodatawd Default Values
810 *
Radek Krejcidb6b1662016-09-15 10:40:16 +0200811 * 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 +0200812 * 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 +0200813 * - \b explicit - Only the explicitly set configuration data. But in the case of status data, missing default
Radek Krejci46180b52016-08-31 16:01:32 +0200814 * data are added into the tree. In libyang, this mode is represented by #LYP_WD_EXPLICIT option.
815 * - \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 +0200816 * - \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 +0200817 * #LYP_WD_ALL option.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200818 * - \b report-all-tagged - In this case, all the missing default data are added as in case of the `report-all` mode,
819 * but additionally all the nodes (existing as well as added) containing the schema default value
Radek Krejci46180b52016-08-31 16:01:32 +0200820 * are tagged (see the note below). libyang uses #LYP_WD_ALL_TAG option for this mode.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200821 * - \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 +0200822 * This is the libyang's extension and it is represented by #LYP_WD_IMPL_TAG option.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200823 *
Radek Krejci46180b52016-08-31 16:01:32 +0200824 * libyang automatically adds/maintain the default nodes when a data tree is being parsed or validated. Note, that in a
Michal Vasko5a078f82018-03-02 15:58:35 +0100825 * modified data tree (via e.g. lyd_insert() or lyd_free()), some of the default nodes can be missing or they can be
Radek Krejci46180b52016-08-31 16:01:32 +0200826 * present by mistake. Such a data tree is again corrected during the next lyd_validate() call.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200827 *
Radek Krejci46180b52016-08-31 16:01:32 +0200828 * 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 +0200829 * leafs and leaf-lists. In case of containers, the flag means that the container holds only a default node(s) or it
830 * 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 +0200831 *
Radek Krejci46180b52016-08-31 16:01:32 +0200832 * The presence of the default nodes during the data tree lifetime is affected by the LYD_OPT_ flag used to
833 * parse/validate the tree:
834 * - #LYD_OPT_DATA - all the default nodes are present despite they are configuration or status nodes
835 * - #LYD_OPT_CONFIG - only the configuration data nodes are added into the tree
836 * - #LYD_OPT_GET, #LYD_OPT_GETCONFIG, #LYD_OPT_EDIT - no default nodes are added
837 * - #LYD_OPT_RPC, #LYD_OPT_RPCREPLY, #LYD_OPT_NOTIF - the default nodes from the particular subtree are added
838 *
Radek Krejcidb6b1662016-09-15 10:40:16 +0200839 * The with-default modes described above are supported when the data tree is being printed with the
Radek Krejci46180b52016-08-31 16:01:32 +0200840 * [LYP_WD_ printer flags](@ref printerflags). Note, that in case of #LYP_WD_ALL_TAG and #LYP_WD_IMPL_TAG modes,
841 * 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 +0200842 * these modes have the same result as #LYP_WD_ALL. The presence of empty containers (despite they were added explicitly
843 * or implicitly as part of accessible data tree) depends on #LYP_KEEPEMPTYCONT option.
Radek Krejci46180b52016-08-31 16:01:32 +0200844 *
845 * 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 +0200846 * use lyd_wd_default() function.
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200847 *
848 * Functions List
849 * --------------
Radek Krejci46180b52016-08-31 16:01:32 +0200850 * - lyd_wd_default()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200851 *
852 * - lyd_parse_mem()
853 * - lyd_parse_fd()
854 * - lyd_parse_path()
855 * - lyd_parse_xml()
856 * - lyd_validate()
Radek Krejci46180b52016-08-31 16:01:32 +0200857 * - lyd_print_mem()
858 * - lyd_print_fd()
859 * - lyd_print_file()
860 * - lyd_print_clb()
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200861 */
862
863/**
Radek Krejcidef50022016-02-01 16:38:32 +0100864 * @page howtodataprinters Printing Data
865 *
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200866 * Data printers allows to serialize internal representation of a data tree in a specific format. libyang
867 * supports the following data formats for printing:
Radek Krejcidef50022016-02-01 16:38:32 +0100868 *
869 * - XML
870 *
871 * Basic format as specified in rules of mapping YANG modeled data to XML in
872 * [RFC 6020](http://tools.ietf.org/html/rfc6020). It is possible to specify if
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200873 * the indentation (formatting) will be used (by #LYP_FORMAT @ref printerflags "printer option").
Radek Krejcidef50022016-02-01 16:38:32 +0100874 *
875 * - JSON
876 *
877 * The alternative data format available in RESTCONF protocol. Specification of JSON encoding of data modeled by YANG
Radek Krejcif6ab2cd2016-04-18 17:15:26 +0200878 * can be found in [this draft](https://tools.ietf.org/html/draft-ietf-netmod-yang-json-05).It is possible to specify
879 * if the indentation (formatting) will be used (by #LYP_FORMAT @ref printerflags "printer option").
Radek Krejcidef50022016-02-01 16:38:32 +0100880 *
881 * Printer functions allow to print to the different outputs including a callback function which allows caller
882 * to have a full control of the output data - libyang passes to the callback a private argument (some internal
883 * data provided by a caller of lyd_print_clb()), string buffer and number of characters to print. Note that the
884 * callback is supposed to be called multiple times during the lyd_print_clb() execution.
885 *
Radek Krejci46180b52016-08-31 16:01:32 +0200886 * To print the data tree with default nodes according to the with-defaults capability defined in
887 * [RFC 6243](https://tools.ietf.org/html/rfc6243), check the [page about the default values](@ref howtodatawd).
888 *
Michal Vasko42aa0ab2016-10-25 15:09:32 +0200889 * Also, to print the data in NETCONF format, use the #LYP_NETCONF flag. More information can be found on the page
890 * @ref howtodata.
891 *
Radek Krejcidef50022016-02-01 16:38:32 +0100892 * Functions List
893 * --------------
894 * - lyd_print_mem()
895 * - lyd_print_fd()
896 * - lyd_print_file()
897 * - lyd_print_clb()
898 */
899
900/**
Radek Krejcib50551c2016-04-19 09:15:38 +0200901 * @page howtoxpath XPath Addressing
902 *
Michal Vasko50576712017-07-28 12:28:33 +0200903 * Internally, XPath evaluation is performed on __when__ and __must__ conditions in the schema. For that almost
904 * a full XPath 1.0 evaluator was implemented. In YANG models you can also find paths identifying __augment__
905 * targets, __leafref__ targets, and trivial paths in __choice default__ and __unique__ statements argument.
906 * The exact format of all those paths can be found in the relevant RFCs. Further will only be discussed
907 * paths that are used directly in libyang API functions.
908 *
909 * Schema
910 * ======
911 *
912 * Regarding identifying schema nodes, we use a slightly modified version of YANG __augment__ target path:
913 * - strictly speaking, most XPath expressions are not accepted, only simple paths (no predicates,
914 * numbers, literals, operators, ...),
915 * - whenever a prefix is used for a node, it is not the import prefix, but the __module name__ itself,
916 * - __current module__ is specified separately for _absolute_ paths and is the module of the start
917 * (current) node for _relative_ paths,
918 * - unprefixed nodes all use the prefix of the __current module__ so all nodes from other modules than
919 * the __current module__ _MUST_ have prefixes,
920 * - nodes from the __current module__ _MAY_ have prefixes,
921 *
922 * Examples
923 * --------
Michal Vasko8e627692016-04-19 12:15:47 +0200924 *
Michal Vaskoebea7012016-04-19 14:15:22 +0200925 * - get all top-level nodes of the __module-name__
926 *
927 * /module-name:*
928 *
929 * - get all the descendants of __container__ (excluding __container__)
930 *
931 * /module-name:container//\asterisk
932 *
Michal Vaskoebea7012016-04-19 14:15:22 +0200933 * - get __aug-leaf__, which was added to __module-name__ from an augment module __augment-module__
934 *
Michal Vasko50576712017-07-28 12:28:33 +0200935 * /module-name:container/container2/augment-module:aug-cont/augment-module:aug-leaf
Radek Krejcib50551c2016-04-19 09:15:38 +0200936 *
937 * Functions List
938 * --------------
Michal Vasko50576712017-07-28 12:28:33 +0200939 * - lys_find_path()
940 * - lys_path()
Michal Vasko40702732017-10-25 11:43:23 +0200941 * - ly_path_data2schema()
Michal Vasko50576712017-07-28 12:28:33 +0200942 *
943 *
944 * Data
945 * ====
946 *
947 * As for paths evaluated on YANG data, we opted for standardized JSON paths ([RFC 7951](https://tools.ietf.org/html/rfc7951#section-6.11)). Summarized, it follows these conventions:
948 * - generally, you can use almost a full XPath in these paths where it makes sense, but only data nodes (node sets)
949 * will always be returned (except for paths, predicates are mostly used),
950 * - as per the specification, prefixes are actually __module names__,
951 * - also in the specification, for _absolute_ paths, the first (leftmost) node _MUST_ have a prefix,
952 * - for _relative_ paths, you specify the __context node__, which then acts as a parent for the first node in the path,
953 * - nodes always inherit their module (prefix) from their __parent node__ so whenever a node is from a different
954 * module than its parent, it _MUST_ have a prefix,
955 * - nodes from the same module as their __parent__ _MUST NOT_ have a prefix,
956 * - different from schema paths, non-data nodes (choice, case, uses, input, output) are skipped and not included
957 * in the path.
958 *
959 * Examples
960 * --------
961 *
962 * - 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__)
963 *
964 * /module-name:container/list[key1='1'][key2='2']
965 *
966 * - get __leaf-list__ instance with the value __val__
967 *
968 * /module-name:container/leaf-list[.='val']
969 *
970 * - get __aug-list__ with __aug-list-key__, which was added to __module-name__ from an augment module __augment-module__
971 *
972 * /module-name:container/container2/augment-module:aug-cont/aug-list[aug-list-key='value']
973 *
974 * Functions List
975 * --------------
976 * - lyd_find_path()
Radek Krejcib50551c2016-04-19 09:15:38 +0200977 * - lyd_new_path()
Michal Vasko50576712017-07-28 12:28:33 +0200978 * - lyd_path()
979 * - lys_data_path()
Michal Vaskob3744402017-08-03 14:23:58 +0200980 * - ly_ctx_get_node()
Radek Krejcic683acd2018-01-22 14:51:52 +0100981 * - ly_ctx_find_path()
Michal Vasko50576712017-07-28 12:28:33 +0200982 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200983 */
984
985/**
Radek Krejcidef50022016-02-01 16:38:32 +0100986 * @page howtoxml libyang XML Support
987 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200988 * libyang XML parser is able to parse XML documents. The main purpose is to load data modeled by YANG. However, it can
989 * 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 +0100990 * - comments are ignored
991 * - Doctype declaration is ignored
992 * - CData sections are ignored
993 * - Process Instructions (PI) are ignored
994 *
995 * The API is designed to almost only read-only access. You can simply load XML document, go through the tree as
996 * you wish and dump the tree to an output. The only "write" functions are lyxml_free() and lyxml_unlink() to remove
997 * part of the tree or to unlink (separate) a subtree.
998 *
Radek Krejcib50551c2016-04-19 09:15:38 +0200999 * XML parser is used internally by libyang for parsing YIN schemas and data instances in XML format.
Radek Krejcidef50022016-02-01 16:38:32 +01001000 *
1001 * \note API for this group of functions is described in the [XML Parser module](@ref xmlparser).
1002 *
1003 * Functions List
1004 * --------------
Radek Krejci722b0072016-02-01 17:09:45 +01001005 * - lyxml_parse_mem()
1006 * - lyxml_parse_path()
Radek Krejcidef50022016-02-01 16:38:32 +01001007 * - lyxml_get_attr()
1008 * - lyxml_get_ns()
Radek Krejci722b0072016-02-01 17:09:45 +01001009 * - lyxml_print_mem()
1010 * - lyxml_print_fd()
1011 * - lyxml_print_file()
1012 * - lyxml_print_clb()
Radek Krejcidef50022016-02-01 16:38:32 +01001013 * - lyxml_unlink()
1014 * - lyxml_free()
1015 */
1016
1017/**
1018 * @page howtothreads libyang in Threads
1019 *
Radek Krejcib50551c2016-04-19 09:15:38 +02001020 * libyang can be used in multithreaded applications keeping in mind the following rules:
Radek Krejcidef50022016-02-01 16:38:32 +01001021 * - 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 +02001022 * thread before any other work with context, schemas or data instances. Destroying the context is supposed to
Michal Vaskoe77dc992017-01-18 12:09:42 +01001023 * be done when no other thread accesses context, schemas nor data trees,
1024 * - data parser (\b lyd_parse*() functions) can be used simultaneously in multiple threads (also the returned
1025 * #ly_errno is thread safe),
1026 * - data manipulation (lyd_new(), lyd_insert(), lyd_unlink(), lyd_free() and many other
1027 * functions) a single data tree is not thread safe,
1028 * - data printing of a single data tree is thread-safe.
Radek Krejci26715a42015-07-29 14:10:45 +02001029 */
Radek Krejci94ca54b2015-07-08 15:48:47 +02001030
Radek Krejcida04f4a2015-05-21 12:54:09 +02001031/**
Radek Krejci26715a42015-07-29 14:10:45 +02001032 * @page howtologger Logger
1033 *
1034 * There are 4 verbosity levels defined as ::LY_LOG_LEVEL. The level can be
1035 * changed by the ly_verb() function. By default, the verbosity level is
1036 * set to #LY_LLERR value.
1037 *
Michal Vasko53b7da02018-02-13 15:28:42 +01001038 * All the logging operations are tied to the specific **thread** and **context**.
1039 * The default behaviour is that the last message (error or warning, verbose and debug
1040 * messages are never stored) is always stored and can be accessed using ly_errmsg(). On error,
1041 * #ly_errno is set. If that was a validation error (#ly_errno is set to #LY_EVALID),
1042 * also validation error code (via ly_vecode()) and path to the error node (via ly_errpath()) are available.
Radek Krejcib50551c2016-04-19 09:15:38 +02001043 *
1044 * For some specific cases, a YANG schema can define error message and/or error tag (mainly for
Michal Vaskoebea7012016-04-19 14:15:22 +02001045 * use in NETCONF). If a message is set, it is provided via ly_errmsg(). If a tag is set in schema,
Michal Vaskoe378c0e2017-10-31 13:29:53 +01001046 * it is available via ly_errapptag() (if not set, the returned string is empty).
Radek Krejcib50551c2016-04-19 09:15:38 +02001047 *
Michal Vaskoebea7012016-04-19 14:15:22 +02001048 * 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 +02001049 * callback function. In that case, instead of printing messages, libyang passes error level, message and path
1050 * (if any) to the caller's callback function. In case of error level, the message and path are still
1051 * automatically stored and available via the functions and macros described above.
Radek Krejci26715a42015-07-29 14:10:45 +02001052 *
Michal Vasko53b7da02018-02-13 15:28:42 +01001053 * This is the basic way of working with errors but another, more sophisticated is also available. With ly_log_options()
1054 * you can modify what is done with all the messages. Default flags are #LY_LOLOG and #LY_LOSTORE_LAST so that messages
1055 * are logged and the last one is stored. If you set the flag #LY_LOSTORE, all the messages will be stored. Be careful
Michal Vasko10d6f2f2018-02-14 10:56:01 +01001056 * because unless you regularly clean them, the error list will grow indefinitely. With ly_err_first() you can retrieve
1057 * the first generated error structure ly_err_item. It is a linked-list so you can get next errors using the **next** pointer.
Michal Vasko20fadd52018-02-14 09:33:22 +01001058 * Being processed (for instance printed with ly_err_print()), you can then free them with ly_err_clean().
Michal Vasko53b7da02018-02-13 15:28:42 +01001059 *
Radek Krejcidef50022016-02-01 16:38:32 +01001060 * \note API for this group of functions is described in the [logger module](@ref logger).
1061 *
1062 * Functions List
1063 * --------------
1064 * - ly_verb()
1065 * - ly_set_log_clb()
1066 * - ly_get_log_clb()
Michal Vasko53b7da02018-02-13 15:28:42 +01001067 * - ly_log_options()
1068 * - #ly_errno
1069 * - ly_vecode()
Radek Krejcib50551c2016-04-19 09:15:38 +02001070 * - ly_errmsg()
1071 * - ly_errpath()
1072 * - ly_errapptag()
Michal Vasko10d6f2f2018-02-14 10:56:01 +01001073 * - ly_err_first()
Michal Vasko20fadd52018-02-14 09:33:22 +01001074 * - ly_err_print()
Michal Vasko53b7da02018-02-13 15:28:42 +01001075 * - ly_err_clean()
Radek Krejci26715a42015-07-29 14:10:45 +02001076 */
1077
1078/**
1079 * @defgroup context Context
Radek Krejci3045cf32015-05-28 10:58:52 +02001080 * @{
1081 *
Radek Krejci26715a42015-07-29 14:10:45 +02001082 * Structures and functions to manipulate with the libyang "containers". The \em context concept allows callers
1083 * to work in environments with different sets of YANG schemas. More detailed information can be found at
1084 * @ref howtocontext page.
Radek Krejci3045cf32015-05-28 10:58:52 +02001085 */
1086
1087/**
Radek Krejcida04f4a2015-05-21 12:54:09 +02001088 * @brief libyang context handler.
1089 */
1090struct ly_ctx;
1091
1092/**
Radek Krejcidd3263a2017-07-15 11:50:09 +02001093 * @defgroup contextoptions Context options
1094 * @ingroup context
1095 *
1096 * Options to change context behavior.
1097 */
1098
1099#define LY_CTX_ALLIMPLEMENTED 0x01 /**< All the imports of the schema being parsed are treated implemented. */
1100#define LY_CTX_TRUSTED 0x02 /**< Handle the schema being parsed as trusted and skip its validation
1101 tests. Note that while this option improves performance, it can
1102 lead to an undefined behavior if the schema is not correct. */
Radek Krejcidfb00d62017-09-06 09:39:35 +02001103#define LY_CTX_NOYANGLIBRARY 0x04 /**< Do not internally implement ietf-yang-library module. The option
1104 causes that function ly_ctx_info() does not work (returns NULL) until
1105 the ietf-yang-library module is loaded manually. While any revision
1106 of this schema can be loaded with this option, note that the only
Michal Vaskoeb3bd0e2018-01-26 11:52:11 +01001107 revisions implemented by ly_ctx_info() are 2016-04-09 and 2018-01-17.
Radek Krejcidfb00d62017-09-06 09:39:35 +02001108 This option cannot be used with ly_ctx_new_yl*() functions. */
Radek Krejcidd3263a2017-07-15 11:50:09 +02001109
1110/**@} contextoptions */
1111
1112/**
Radek Krejcida04f4a2015-05-21 12:54:09 +02001113 * @brief Create libyang context
1114 *
Radek Krejci26715a42015-07-29 14:10:45 +02001115 * Context is used to hold all information about schemas. Usually, the application is supposed
Radek Krejci91b833c2015-09-04 11:49:43 +02001116 * to work with a single context in which libyang is holding all schemas (and other internal
1117 * information) according to which the data trees will be processed and validated. So, the schema
1118 * trees are tightly connected with the specific context and they are held by the context internally
1119 * - caller does not need to keep pointers to the schemas returned by lys_parse(), context knows
1120 * about them. The data trees created with lyd_parse() are still connected with the specific context,
1121 * but they are not internally held by the context. The data tree just points and lean on some data
1122 * held by the context (schema tree, string dictionary, etc.). Therefore, in case of data trees, caller
1123 * is supposed to keep pointers returned by the lyd_parse() and manage the data tree on its own. This
1124 * also affects the number of instances of both tree types. While you can have only one instance of
1125 * specific schema connected with a single context, number of data tree instances is not connected.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001126 *
Radek Krejci26715a42015-07-29 14:10:45 +02001127 * @param[in] search_dir Directory where libyang will search for the imported or included modules
1128 * and submodules. If no such directory is available, NULL is accepted.
Radek Krejcidd3263a2017-07-15 11:50:09 +02001129 * @param[in] options Context options, see @ref contextoptions.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001130 *
Radek Krejci3045cf32015-05-28 10:58:52 +02001131 * @return Pointer to the created libyang context, NULL in case of error.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001132 */
Radek Krejcidd3263a2017-07-15 11:50:09 +02001133struct ly_ctx *ly_ctx_new(const char *search_dir, int options);
Radek Krejcida04f4a2015-05-21 12:54:09 +02001134
1135/**
Radek Krejci69333c92017-03-17 16:14:43 +01001136 * @brief Create libyang context according to the content of the given yang-library data.
1137 *
1138 * This function loads the yang-library data from the file at the given path. If you need
1139 * to pass the data as string, use ly_ctx_new_ylmem(). Both functions extend functionality of
1140 * ly_ctx_new() by loading modules specified in the ietf-yang-library form into the context
1141 * being created.
1142 *
Michal Vaskoeb3bd0e2018-01-26 11:52:11 +01001143 * The preferred tree model revision is 2018-01-17. However, only the first module-set is processed
1144 * and loaded into the context. If there are no matching nodes from this tree, the legacy tree
1145 * (originally from model revision 2016-04-09) is processed.
1146 *
Radek Krejci69333c92017-03-17 16:14:43 +01001147 * Note, that the modules are loaded the same way as in case of ly_ctx_load_module(), so the schema
1148 * paths in the yang-library data are ignored and the modules are loaded from the context's search
1149 * locations. On the other hand, YANG features of the modules are set as specified in the yang-library
1150 * data.
1151 *
1152 * To get yang library data from a libyang context, use ly_ctx_info().
1153 *
1154 * @param[in] search_dir Directory where libyang will search for the imported or included modules
1155 * and submodules. If no such directory is available, NULL is accepted.
1156 * @param[in] path Path to the file containing yang-library data in the specified \p format.
1157 * @param[in] format Format of the data in the provided file.
Radek Krejcidd3263a2017-07-15 11:50:09 +02001158 * @param[in] options Context options, see @ref contextoptions.
Radek Krejci69333c92017-03-17 16:14:43 +01001159 * @return Pointer to the created libyang context, NULL in case of error.
1160 */
Radek Krejcidd3263a2017-07-15 11:50:09 +02001161struct ly_ctx *ly_ctx_new_ylpath(const char *search_dir, const char *path, LYD_FORMAT format, int options);
Radek Krejci69333c92017-03-17 16:14:43 +01001162
1163/**
1164 * @brief Create libyang context according to the content of the given yang-library data.
1165 *
1166 * This function loads the yang-library data from the given string. If you need to pass the data
1167 * as path to a file holding the data, use ly_ctx_new_ylpath(). Both functions extend functionality of
1168 * ly_ctx_new() by loading modules specified in the ietf-yang-library form into the context
1169 * being created.
1170 *
Michal Vaskoeb3bd0e2018-01-26 11:52:11 +01001171 * The preferred tree model revision is 2018-01-17. However, only the first module-set is processed
1172 * and loaded into the context. If there are no matching nodes from this tree, the legacy tree
1173 * (originally from model revision 2016-04-09) is processed.
1174 *
Radek Krejci69333c92017-03-17 16:14:43 +01001175 * Note, that the modules are loaded the same way as in case of ly_ctx_load_module(), so the schema
1176 * paths in the yang-library data are ignored and the modules are loaded from the context's search
1177 * locations. On the other hand, YANG features of the modules are set as specified in the yang-library
1178 * data.
1179 *
1180 * To get yang library data from a libyang context, use ly_ctx_info().
1181 *
1182 * @param[in] search_dir Directory where libyang will search for the imported or included modules
1183 * and submodules. If no such directory is available, NULL is accepted.
1184 * @param[in] data String containing yang-library data in the specified \p format.
1185 * @param[in] format Format of the data in the provided file.
Radek Krejcidd3263a2017-07-15 11:50:09 +02001186 * @param[in] options Context options, see @ref contextoptions.
Radek Krejci69333c92017-03-17 16:14:43 +01001187 * @return Pointer to the created libyang context, NULL in case of error.
1188 */
Radek Krejcidd3263a2017-07-15 11:50:09 +02001189struct ly_ctx *ly_ctx_new_ylmem(const char *search_dir, const char *data, LYD_FORMAT format, int options);
Radek Krejci69333c92017-03-17 16:14:43 +01001190
1191/**
Radek Krejcidfb00d62017-09-06 09:39:35 +02001192 * @brief Number of internal modules, which are in the context and cannot be removed nor disabled.
1193 * @param[in] ctx Context to investigate.
1194 * @return Number of internal modules, 0 in case of invalid parameter.
1195 */
1196unsigned int ly_ctx_internal_modules_count(struct ly_ctx *ctx);
Radek Krejci0ec51da2016-12-14 16:42:03 +01001197
Michal Vaskod7957c02016-04-01 10:27:26 +02001198/**
Radek Krejcida9f8392017-03-25 19:40:56 -05001199 * @brief Add the search path into libyang context
1200 *
1201 * To reset search paths set in the context, use ly_ctx_unset_searchdirs() and then
1202 * set search paths again.
Radek Krejci7ab25152015-08-07 14:48:45 +02001203 *
1204 * @param[in] ctx Context to be modified.
Radek Krejcida9f8392017-03-25 19:40:56 -05001205 * @param[in] search_dir New search path to add to the current paths previously set in ctx.
Igor Ternovsky6e6543d2017-09-12 10:37:28 +10001206 * @return EXIT_SUCCESS, EXIT_FAILURE.
Radek Krejci7ab25152015-08-07 14:48:45 +02001207 */
Igor Ternovsky6e6543d2017-09-12 10:37:28 +10001208int ly_ctx_set_searchdir(struct ly_ctx *ctx, const char *search_dir);
Radek Krejci7ab25152015-08-07 14:48:45 +02001209
1210/**
Radek Krejcidb4e9ff2017-06-13 16:26:14 +02001211 * @brief Clean the search path(s) from the libyang context
Radek Krejcida9f8392017-03-25 19:40:56 -05001212 *
1213 * @param[in] ctx Context to be modified.
Radek Krejcidb4e9ff2017-06-13 16:26:14 +02001214 * @param[in] index Index of the search path to be removed, use negative value to remove them all.
1215 * Correct index value can be checked via ly_ctx_get_searchdirs().
Radek Krejcida9f8392017-03-25 19:40:56 -05001216 */
Radek Krejcidb4e9ff2017-06-13 16:26:14 +02001217void ly_ctx_unset_searchdirs(struct ly_ctx *ctx, int index);
Radek Krejcida9f8392017-03-25 19:40:56 -05001218
1219/**
Radek Krejci426ea2b2017-06-13 12:41:51 +02001220 * @brief Get the NULL-terminated list of the search paths in libyang context.
Radek Krejci7ab25152015-08-07 14:48:45 +02001221 *
Radek Krejci96a10da2015-07-30 11:00:14 +02001222 * @param[in] ctx Context to query.
Radek Krejci426ea2b2017-06-13 12:41:51 +02001223 * @return NULL-terminated list (array) of the search paths, NULL if no searchpath was set.
Radek Krejci96a10da2015-07-30 11:00:14 +02001224 */
Radek Krejci426ea2b2017-06-13 12:41:51 +02001225const char * const *ly_ctx_get_searchdirs(const struct ly_ctx *ctx);
Radek Krejci96a10da2015-07-30 11:00:14 +02001226
1227/**
Radek Krejcid9ba3e32015-07-30 15:08:18 +02001228 * @brief Make context to set all the imported modules to be implemented. By default,
Radek Krejci96a10da2015-07-30 11:00:14 +02001229 * if the imported module is not used in leafref's path, augment or deviation, it is
Michal Vasko1e62a092015-12-01 12:27:20 +01001230 * imported and its data tree is not taken into account.
Radek Krejci96a10da2015-07-30 11:00:14 +02001231 *
Radek Krejcidd3263a2017-07-15 11:50:09 +02001232 * The same effect is achieved by using #LY_CTX_ALLIMPLEMENTED option when creating new context or parsing
1233 * a specific schema.
1234 *
Radek Krejci96a10da2015-07-30 11:00:14 +02001235 * Note, that function does not make the currently loaded modules, it just change the
Michal Vaskod7957c02016-04-01 10:27:26 +02001236 * schema parser behavior for the future parsing. This flag can be unset by ly_ctx_unset_allimplemented().
1237 *
1238 * @param[in] ctx Context to be modified.
1239 */
1240void ly_ctx_set_allimplemented(struct ly_ctx *ctx);
1241
1242/**
1243 * @brief Reverse function to ly_ctx_set_allimplemented().
1244 *
Radek Krejci0ec51da2016-12-14 16:42:03 +01001245 * @param[in] ctx Context to be modified.
1246 */
1247void ly_ctx_unset_allimplemented(struct ly_ctx *ctx);
1248
1249/**
Radek Krejcidd3263a2017-07-15 11:50:09 +02001250 * @brief Change the schema parser behavior when parsing new schemas forcing it to skip some of the schema
1251 * validation checks to improve performance. Note that parsing invalid schemas this way may lead to an
1252 * undefined behavior later, e.g. when working with data trees.
1253 *
1254 * The same effect is achieved by using #LY_CTX_TRUSTED option when creating new context or parsing
1255 * a specific schema.
1256 *
1257 * This flag can be unset by ly_ctx_unset_trusted().
1258 *
1259 * @param[in] ctx Context to be modified.
1260 */
1261void ly_ctx_set_trusted(struct ly_ctx *ctx);
1262
1263/**
1264 * @brief Reverse function to ly_ctx_set_trusted().
1265 *
1266 * @param[in] ctx Context to be modified.
1267 */
1268void ly_ctx_unset_trusted(struct ly_ctx *ctx);
1269
1270/**
Radek Krejci14116592018-05-16 12:26:06 +02001271 * @brief Get current ID of the modules set. The value is available also
1272 * as module-set-id in ly_ctx_info() result.
1273 *
1274 * @param[in] ctx Context to be examined.
1275 * @return Numeric identifier of the current context's modules set.
1276 */
1277uint16_t ly_ctx_get_module_set_id(const struct ly_ctx *ctx);
1278
1279/**
Radek Krejci96a10da2015-07-30 11:00:14 +02001280 * @brief Get data of an internal ietf-yang-library module.
1281 *
1282 * @param[in] ctx Context with the modules.
1283 * @return Root data node corresponding to the model, NULL on error.
1284 * Caller is responsible for freeing the returned data tree using lyd_free().
1285 */
1286struct lyd_node *ly_ctx_info(struct ly_ctx *ctx);
1287
1288/**
1289 * @brief Iterate over all (enabled) modules in a context.
1290 *
1291 * @param[in] ctx Context with the modules.
1292 * @param[in,out] idx Index of the next module to be returned. Value of 0 starts from the beginning.
1293 * @return Next context module, NULL if the last was already returned.
Radek Krejcid9ba3e32015-07-30 15:08:18 +02001294 */
Radek Krejci96a10da2015-07-30 11:00:14 +02001295const struct lys_module *ly_ctx_get_module_iter(const struct ly_ctx *ctx, uint32_t *idx);
Michal Vasko1e62a092015-12-01 12:27:20 +01001296
Radek Krejci96a10da2015-07-30 11:00:14 +02001297/**
Radek Krejci0ec51da2016-12-14 16:42:03 +01001298 * @brief Iterate over the disabled modules in a context.
1299 *
1300 * @param[in] ctx Context with the modules.
1301 * @param[in,out] idx Index of the next module to be returned. Value of 0 starts from the beginning.
1302 * @return Next context module, NULL if the last was already returned.
1303 */
1304const struct lys_module *ly_ctx_get_disabled_module_iter(const struct ly_ctx *ctx, uint32_t *idx);
1305
1306/**
Radek Krejcifd4e6e32015-08-10 15:00:51 +02001307 * @brief Get pointer to the schema tree of the module of the specified name.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001308 *
Radek Krejcida04f4a2015-05-21 12:54:09 +02001309 * @param[in] ctx Context to work in.
1310 * @param[in] name Name of the YANG module to get.
Radek Krejcif647e612015-07-30 11:36:07 +02001311 * @param[in] revision Optional revision date of the YANG module to get. If not specified,
Radek Krejcidfb00d62017-09-06 09:39:35 +02001312 * the schema in the newest/implemented revision (see \p implemented parameter) is returned if any.
1313 * @param[in] implemented In case the revision is not specified, require the implemented module
1314 * instead of the newest revision of the module.
Radek Krejcif647e612015-07-30 11:36:07 +02001315 * @return Pointer to the data model structure, NULL if no schema following the name and
Radek Krejcifd4e6e32015-08-10 15:00:51 +02001316 * revision requirements is present in the context.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001317 */
Radek Krejcidfb00d62017-09-06 09:39:35 +02001318const struct lys_module *ly_ctx_get_module(const struct ly_ctx *ctx, const char *name, const char *revision, int implemented);
Radek Krejcida04f4a2015-05-21 12:54:09 +02001319
1320/**
Radek Krejci21601a32016-03-07 11:39:27 +01001321 * @brief Get pointer to the older schema tree to the specified one in the provided context.
1322 *
1323 * The module is not necessarily from the provided \p ctx. If there are multiple schemas older than the
1324 * provided one, the newest of them is returned.
1325 *
1326 * The function can be used in combination with ly_ctx_get_module() to get all revisions of a module in a context:
1327 * \code{.c}
1328 * for (mod = ly_ctx_get_module(ctx, name, NULL); mod; mod = ly_ctx_get_module_older(ctx, mod)) {
1329 * ...
1330 * }
1331 * \endcode
1332 *
1333 * @param[in] ctx Context to work in.
1334 * @param[in] module YANG module to compare with
1335 * @return Pointer to the data model structure, NULL if no older schema is present in the context.
1336 */
1337const struct lys_module *ly_ctx_get_module_older(const struct ly_ctx *ctx, const struct lys_module *module);
1338
1339/**
Michal Vasko99b0aad2015-12-01 12:28:51 +01001340 * @brief Try to find the model in the searchpath of \p ctx and load it into it. If custom missing
1341 * module callback is set, it is used instead.
Michal Vasko82465962015-11-10 11:03:11 +01001342 *
Radek Krejci31fb8be2016-06-23 15:26:26 +02001343 * If there is a possibility that the requested module is already in the context, you should call
1344 * the ly_ctx_get_module() first to avoid a lot of work performed by ly_ctx_load_module().
1345 *
Michal Vasko82465962015-11-10 11:03:11 +01001346 * @param[in] ctx Context to add to.
Michal Vasko82465962015-11-10 11:03:11 +01001347 * @param[in] name Name of the module to load.
1348 * @param[in] revision Optional revision date of the module. If not specified, it is
1349 * assumed that there is only one model revision in the searchpath (the first matching file
1350 * is parsed).
1351 * @return Pointer to the data model structure, NULL if not found or some error occured.
1352 */
Michal Vasko99b0aad2015-12-01 12:28:51 +01001353const struct lys_module *ly_ctx_load_module(struct ly_ctx *ctx, const char *name, const char *revision);
1354
1355/**
1356 * @brief Callback for retrieving missing included or imported models in a custom way.
1357 *
Michal Vasko84475152016-07-25 16:16:25 +02001358 * @param[in] mod_name Missing module name.
1359 * @param[in] mod_rev Optional missing module revision.
1360 * @param[in] submod_name Optional missing submodule name.
1361 * @param[in] submod_rev Optional missing submodule revision.
Michal Vasko99b0aad2015-12-01 12:28:51 +01001362 * @param[in] user_data User-supplied callback data.
1363 * @param[out] format Format of the returned module data.
Michal Vasko880dceb2016-03-03 15:44:56 +01001364 * @param[out] free_module_data Callback for freeing the returned module data. If not set, the data will be left untouched.
Michal Vasko8f3160e2017-09-27 11:25:26 +02001365 * @return Requested module data, NULL if the module is supposed to be loaded
1366 * using standard mechanisms (searched for in the filesystem), NULL and #ly_errno set if
1367 * the callback failed resulting in the module failing to load.
Michal Vasko99b0aad2015-12-01 12:28:51 +01001368 */
Michal Vaskof53187d2017-01-13 13:23:14 +01001369typedef char *(*ly_module_imp_clb)(const char *mod_name, const char *mod_rev, const char *submod_name, const char *sub_rev,
1370 void *user_data, LYS_INFORMAT *format, void (**free_module_data)(void *model_data));
Michal Vasko99b0aad2015-12-01 12:28:51 +01001371
1372/**
Michal Vasko98b5f952016-10-26 12:14:40 +02001373 * @brief Set missing include or import module callback. It is meant to be used when the models
1374 * are not locally available (such as when downloading modules from a NETCONF server), it should
1375 * not be required in other cases.
Michal Vasko99b0aad2015-12-01 12:28:51 +01001376 *
1377 * @param[in] ctx Context that will use this callback.
Michal Vaskof53187d2017-01-13 13:23:14 +01001378 * @param[in] clb Callback responsible for returning the missing model.
Michal Vasko99b0aad2015-12-01 12:28:51 +01001379 * @param[in] user_data Arbitrary data that will always be passed to the callback \p clb.
1380 */
Michal Vaskof53187d2017-01-13 13:23:14 +01001381void ly_ctx_set_module_imp_clb(struct ly_ctx *ctx, ly_module_imp_clb clb, void *user_data);
Michal Vasko99b0aad2015-12-01 12:28:51 +01001382
1383/**
Michal Vaskof53187d2017-01-13 13:23:14 +01001384 * @brief Get the custom callback for missing import/include module retrieval.
1385 *
1386 * @param[in] ctx Context to read from.
1387 * @param[in] user_data Optional pointer for getting the user-supplied callback data.
1388 * @return Callback or NULL if not set.
1389 */
1390ly_module_imp_clb ly_ctx_get_module_imp_clb(const struct ly_ctx *ctx, void **user_data);
1391
1392/**
1393 * @brief Callback for retrieving missing modules in the context, for which some data was found.
1394 *
1395 * Either \p name or \p ns is ALWAYS set, but both can also be set.
1396 *
1397 * @param[in,out] ctx Context with the missing module.
1398 * @param[in] name Missing module name.
1399 * @param[in] ns Missing module namespace.
1400 * @param[in] options Bitmask of LY_MODCLB_* values or 0.
1401 * @param[in] user_data User-supplied callback data.
1402 * @return Newly added or modified module, NULL on failure.
1403 */
1404typedef const struct lys_module *(*ly_module_data_clb)(struct ly_ctx *ctx, const char *name, const char *ns,
1405 int options, void *user_data);
1406
1407/* Module is in the context, but is not implemented, so to continue with the data operation, it must be implemented. */
1408#define LY_MODCLB_NOT_IMPLEMENTED 0x01
1409
1410/**
1411 * @brief Set the missing data module callback. It will be called when some data is parsed or searched for and their module
1412 * is not found in the context or is not implemented.
1413 *
1414 * @param[in] ctx Context that will use this callback.
1415 * @param[in] clb Callback responsible for returning the missing model.
1416 * @param[in] user_data Arbitrary data that will always be passed to the callback \p clb.
1417 */
1418void ly_ctx_set_module_data_clb(struct ly_ctx *ctx, ly_module_data_clb clb, void *user_data);
1419
1420/**
1421 * @brief Get the missing data module calback.
Michal Vasko99b0aad2015-12-01 12:28:51 +01001422 *
1423 * @param[in] ctx Context to read from.
1424 * @param[in] user_data Optional pointer for getting the user-supplied callbck data.
Michal Vaskof53187d2017-01-13 13:23:14 +01001425 * @return Callback or NULL if not set.
Michal Vasko99b0aad2015-12-01 12:28:51 +01001426 */
Michal Vaskof53187d2017-01-13 13:23:14 +01001427ly_module_data_clb ly_ctx_get_module_data_clb(const struct ly_ctx *ctx, void **user_data);
Michal Vasko82465962015-11-10 11:03:11 +01001428
1429/**
Radek Krejcifd4e6e32015-08-10 15:00:51 +02001430 * @brief Get pointer to the schema tree of the module of the specified namespace
1431 *
1432 * @param[in] ctx Context to work in.
1433 * @param[in] ns Namespace of the YANG module to get.
1434 * @param[in] revision Optional revision date of the YANG module to get. If not specified,
Radek Krejcidfb00d62017-09-06 09:39:35 +02001435 * the schema in the newest/implemented revision (see \p implemented parameter) is returned if any.
1436 * @param[in] implemented In case the revision is not specified, require the implemented module
1437 * instead of the newest revision of the module.
Radek Krejcifd4e6e32015-08-10 15:00:51 +02001438 * @return Pointer to the data model structure, NULL if no schema following the namespace and
1439 * revision requirements is present in the context.
1440 */
Radek Krejcidfb00d62017-09-06 09:39:35 +02001441const struct lys_module *ly_ctx_get_module_by_ns(const struct ly_ctx *ctx, const char *ns, const char *revision, int implemented);
Radek Krejcifd4e6e32015-08-10 15:00:51 +02001442
1443/**
Radek Krejci62f0da72016-03-07 11:35:43 +01001444 * @brief Get submodule of a main module.
1445 *
1446 * 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 +02001447 *
Radek Krejcia7533f22016-03-07 07:37:45 +01001448 * @param[in] ctx Context to work in.
Michal Vaskof6d94c62016-04-05 11:21:54 +02001449 * @param[in] module Name of the main (belongs-to) module. If NULL, all module submodules are searched.
1450 * @param[in] revision Optional revision date of \p module. If NULL, all revisions of \p module
1451 * are searched. If set, \p module must also be set.
Radek Krejcia7533f22016-03-07 07:37:45 +01001452 * @param[in] submodule Name of the submodule to get.
Michal Vaskof6d94c62016-04-05 11:21:54 +02001453 * @param[in] sub_revision Optional revision date of \p submodule. If NULL, the newest revision of \p submodule
1454 * is returned.
Michal Vasko7bf06882015-07-03 15:33:56 +02001455 * @return Pointer to the data model structure.
1456 */
Radek Krejcia7533f22016-03-07 07:37:45 +01001457const 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 +02001458 const char *submodule, const char *sub_revision);
Michal Vasko7bf06882015-07-03 15:33:56 +02001459
1460/**
Radek Krejci62f0da72016-03-07 11:35:43 +01001461 * @brief Get submodule of a main module.
1462 *
1463 * If you have only the name (and optionally revision) of the submodule's main module, use ly_ctx_get_submodule()
1464 * instead.
1465 *
1466 * @param[in] main_module Main module (belongs to) of the searched submodule.
1467 * @param[in] submodule Name of the submodule to get.
1468 * @return Pointer to the data model structure.
1469 */
1470const struct lys_submodule *ly_ctx_get_submodule2(const struct lys_module *main_module, const char *submodule);
1471
1472/**
Michal Vaskob3744402017-08-03 14:23:58 +02001473 * @brief Get schema node according to the given data path (JSON format, see @ref howtoxpath).
1474 *
Michal Vaskod245e0b2018-01-22 15:39:32 +01001475 * This function is meant as a utility function to ease getting a specific schema node
1476 * directly from context having \p data_path a const immutable string. Generally,
1477 * it is better to use lyd_find_path(), lys_find_path(), or ly_ctx_find_path(). Also,
1478 * it is possible to transform data paths into schema paths using ly_path_data2schema().
Michal Vaskob3744402017-08-03 14:23:58 +02001479 *
Michal Vaskob3a6e482017-09-14 13:50:28 +02001480 * @param[in] ctx Context to work in. Must be set if \p start is NULL.
Michal Vaskod245e0b2018-01-22 15:39:32 +01001481 * @param[in] start Starting node for a relative data node identifier, in which
Michal Vaskob3a6e482017-09-14 13:50:28 +02001482 * case it is mandatory and \p ctx can be NULL.
Michal Vaskod245e0b2018-01-22 15:39:32 +01001483 * @param[in] data_path JSON data path of the node to get.
Michal Vaskob3744402017-08-03 14:23:58 +02001484 * @param[in] output Search operation output instead input.
1485 * @return Resolved schema node or NULL.
1486 */
1487const struct lys_node *ly_ctx_get_node(struct ly_ctx *ctx, const struct lys_node *start, const char *data_path, int output);
1488
1489/**
Radek Krejci749ebf52018-01-22 11:40:36 +01001490 * @brief Get schema node according to the given schema path (see @ref howtoxpath).
1491 *
1492 * Note that the given path must be absolute and fully prefixed (which is the default output
1493 * of lys_path() function). To get node specified by a relative path, use lys_find_path() instead.
1494 *
1495 * @param[in] ctx Context to work in.
1496 * @param[in] path Schema path of the node to find.
Radek Krejcic683acd2018-01-22 14:51:52 +01001497 * @return Set of found schema nodes. If no nodes are matching \p path the returned set is empty.
1498 * In case of an error, NULL is returned.
Radek Krejci749ebf52018-01-22 11:40:36 +01001499 */
Radek Krejcic683acd2018-01-22 14:51:52 +01001500struct ly_set *ly_ctx_find_path(struct ly_ctx *ctx, const char *path);
Radek Krejci749ebf52018-01-22 11:40:36 +01001501
1502/**
Radek Krejci0ec51da2016-12-14 16:42:03 +01001503 * @brief Remove the specified module from its context.
Radek Krejci8c107fe2016-10-17 16:00:18 +02001504 *
Radek Krejci0ec51da2016-12-14 16:42:03 +01001505 * Beside the selected module, also all other modules depending on all the modules being removed
1506 * will be removed as well.
Radek Krejci8c107fe2016-10-17 16:00:18 +02001507 *
1508 * libyang internal modules (those present when the context is created) cannot be removed.
1509 *
Radek Krejci0ec51da2016-12-14 16:42:03 +01001510 * @param[in] module Module to be removed.
Radek Krejci8c107fe2016-10-17 16:00:18 +02001511 * @param[in] private_destructor Optional destructor function for private objects assigned
1512 * to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
Radek Krejci0ec51da2016-12-14 16:42:03 +01001513 * @return EXIT_SUCCESS or EXIT_FAILURE (in case of invalid parameter).
Radek Krejci8c107fe2016-10-17 16:00:18 +02001514 */
Radek Krejci0ec51da2016-12-14 16:42:03 +01001515int ly_ctx_remove_module(const struct lys_module *module,
Radek Krejci8c107fe2016-10-17 16:00:18 +02001516 void (*private_destructor)(const struct lys_node *node, void *priv));
1517
1518/**
1519 * @brief Remove all the modules from the context except the internal modules. Also the addition data in
1520 * dictionary are kept.
1521 *
1522 * @param[in] ctx Context to work in.
1523 * @param[in] private_destructor Optional destructor function for private objects assigned
1524 * to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
1525 */
1526void ly_ctx_clean(struct ly_ctx *ctx, void (*private_destructor)(const struct lys_node *node, void *priv));
1527
1528/**
Radek Krejci3045cf32015-05-28 10:58:52 +02001529 * @brief Free all internal structures of the specified context.
1530 *
1531 * The function should be used before terminating the application to destroy
1532 * and free all structures internally used by libyang. If the caller uses
1533 * multiple contexts, the function should be called for each used context.
1534 *
1535 * All instance data are supposed to be freed before destroying the context.
1536 * Data models are destroyed automatically as part of ly_ctx_destroy() call.
1537 *
1538 * @param[in] ctx libyang context to destroy
Radek Krejcifa0b5e02016-02-04 13:57:03 +01001539 * @param[in] private_destructor Optional destructor function for private objects assigned
1540 * to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
Radek Krejci5138e9f2017-04-12 13:10:46 +02001541 * Remember the differences between the structures derived from ::lys_node and always check
1542 * ::lys_node#nodetype.
Radek Krejcida04f4a2015-05-21 12:54:09 +02001543 */
Radek Krejcifa0b5e02016-02-04 13:57:03 +01001544void ly_ctx_destroy(struct ly_ctx *ctx, void (*private_destructor)(const struct lys_node *node, void *priv));
Radek Krejcida04f4a2015-05-21 12:54:09 +02001545
Michal Vasko40702732017-10-25 11:43:23 +02001546/**
Michal Vasko065c5652018-03-08 15:35:21 +01001547 * @brief Transform a data path in XML format (node prefixes are XML namespace prefixes of module namespaces)
1548 * to JSON format (node prefixes are module names directly).
1549 *
1550 * @param[in] ctx Context to work in.
1551 * @param[in] xml_path Path in XML format to transform.
1552 * @param[in] xml XML tree to be used for XML namespace prefix resolution.
1553 * @return Transformed JSON data path, needs to be freed. NULL on error.
1554 */
1555char *ly_path_xml2json(struct ly_ctx *ctx, const char *xml_path, struct lyxml_elem *xml);
1556
1557/**
Michal Vasko40702732017-10-25 11:43:23 +02001558 * @brief Transform a data path into schema path (see @ref howtoxpath).
1559 *
Michal Vaskod245e0b2018-01-22 15:39:32 +01001560 * Some XPath tokens such as "*" or "//" should not be used because they cannot be properly
1561 * transformed into schema path. If used, any following nodes will not be transformed and simply copied,
1562 * so use at your own risk! It causes no problems if the path ends with the aforementioned tokens.
Michal Vasko40702732017-10-25 11:43:23 +02001563 *
1564 * @param[in] ctx Context to work in.
1565 * @param[in] data_path Data path to be transformed.
1566 * @return Created schema path, NULL on error.
1567 */
Michal Vasko53b7da02018-02-13 15:28:42 +01001568char *ly_path_data2schema(struct ly_ctx *ctx, const char *data_path);
Michal Vasko40702732017-10-25 11:43:23 +02001569
Michal Vasko065c5652018-03-08 15:35:21 +01001570/** @} context */
Radek Krejci26715a42015-07-29 14:10:45 +02001571
1572/**
Radek Krejcidef50022016-02-01 16:38:32 +01001573 * @defgroup nodeset Tree nodes set
Radek Krejcidc154432016-01-21 11:10:59 +01001574 * @ingroup datatree
1575 * @ingroup schematree
1576 * @{
1577 *
Radek Krejcidef50022016-02-01 16:38:32 +01001578 * Structure and functions to hold and manipulate with sets of nodes from schema or data trees.
1579 */
1580
1581/**
Radek Krejci8f08df12016-03-21 11:11:30 +01001582 * @brief set array of ::ly_set
1583 * It is kept in union to keep ::ly_set generic for data as well as schema trees
1584 */
1585union ly_set_set {
1586 struct lys_node **s; /**< array of pointers to a ::lys_node objects */
1587 struct lyd_node **d; /**< array of pointers to a ::lyd_node objects */
1588 void **g; /**< dummy array for generic work */
1589};
1590
1591/**
Radek Krejcidc154432016-01-21 11:10:59 +01001592 * @brief Structure to hold a set of (not necessary somehow connected) ::lyd_node or ::lys_node objects.
1593 * Caller is supposed to not mix the type of objects added to the set and according to its knowledge about
1594 * the set content, it is supposed to access the set via the sset, dset or set members of the structure.
1595 *
Radek Krejci09891a22016-06-10 10:59:22 +02001596 * Until ly_set_rm() or ly_set_rm_index() is used, the set keeps the order of the inserted items as they
1597 * were added into the set, so the first added item is on array index 0.
1598 *
Radek Krejcidef50022016-02-01 16:38:32 +01001599 * To free the structure, use ly_set_free() function, to manipulate with the structure, use other
1600 * ly_set_* functions.
Radek Krejcidc154432016-01-21 11:10:59 +01001601 */
1602struct ly_set {
1603 unsigned int size; /**< allocated size of the set array */
1604 unsigned int number; /**< number of elements in (used size of) the set array */
Radek Krejci8f08df12016-03-21 11:11:30 +01001605 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 +01001606};
1607
1608/**
Radek Krejci09891a22016-06-10 10:59:22 +02001609 * @brief Option for ly_set_add() to allow duplicities in the ly_set structure so the
1610 * set is not used as a set, but as a list of (container for) items.
1611 */
1612#define LY_SET_OPT_USEASLIST 0x01
1613
1614/**
Radek Krejcidef50022016-02-01 16:38:32 +01001615 * @brief Create and initiate new ::ly_set structure.
Radek Krejcidc154432016-01-21 11:10:59 +01001616 *
Radek Krejcidef50022016-02-01 16:38:32 +01001617 * @return Created ::ly_set structure or NULL in case of error.
Radek Krejcidc154432016-01-21 11:10:59 +01001618 */
1619struct ly_set *ly_set_new(void);
1620
1621/**
Radek Krejcie8c1b572016-07-26 15:09:52 +02001622 * @brief Duplicate the existing set.
1623 *
1624 * @param[in] set Original set to duplicate
1625 * @return Duplication of the original set.
1626 */
1627struct ly_set *ly_set_dup(const struct ly_set *set);
1628
1629/**
Radek Krejcidc154432016-01-21 11:10:59 +01001630 * @brief Add a ::lyd_node or ::lys_node object into the set
1631 *
Radek Krejci29cb50d2016-05-09 16:31:13 +02001632 * Since it is a set, the function checks for duplicity and if the
1633 * node is already in the set, the index of the previously added
1634 * node is returned.
1635 *
Radek Krejcidc154432016-01-21 11:10:59 +01001636 * @param[in] set Set where the \p node will be added.
1637 * @param[in] node The ::lyd_node or ::lys_node object to be added into the \p set;
Radek Krejci09891a22016-06-10 10:59:22 +02001638 * @param[in] options Options to change behavior of the function. Accepted options are:
1639 * - #LY_SET_OPT_USEASLIST - do not check for duplicities
Radek Krejci29cb50d2016-05-09 16:31:13 +02001640 * @return -1 on failure, index of the \p node in the set on success
Radek Krejcidc154432016-01-21 11:10:59 +01001641 */
Radek Krejci09891a22016-06-10 10:59:22 +02001642int ly_set_add(struct ly_set *set, void *node, int options);
Radek Krejcidc154432016-01-21 11:10:59 +01001643
1644/**
Michal Vasko563cfea2017-11-28 14:26:07 +01001645 * @brief Add all objects from \p src to \p trg.
1646 *
1647 * Since it is a set, the function checks for duplicities.
1648 * After success, \p src is completely freed.
1649 *
1650 * @param[in] trg Target (result) set.
1651 * @param[in] src Source set.
1652 * @param[in] options Options to change behavior of the function. Accepted options are:
1653 * - #LY_SET_OPT_USEASLIST - do not check for duplicities
1654 * @return -1 on failure, number of objects added into \p trg on success.
1655 */
1656int ly_set_merge(struct ly_set *trg, struct ly_set *src, int options);
1657
1658/**
Radek Krejci99e6d9a2016-10-20 13:01:43 +02001659 * @brief Get know if the set contains the specified object.
1660 * @param[in] set Set to explore.
1661 * @param[in] node Object to be found in the set.
1662 * @return Index of the object in the set or -1 if the object is not present in the set.
Radek Krejci3e112292016-10-20 13:10:30 +02001663 */
Radek Krejci99e6d9a2016-10-20 13:01:43 +02001664int ly_set_contains(const struct ly_set *set, void *node);
1665
1666/**
Radek Krejci29ed4082016-05-09 14:25:56 +02001667 * @brief Remove all objects from the set, but keep the set container for further use.
1668 *
1669 * @param[in] set Set to clean.
1670 * @return 0 on success
1671 */
1672int ly_set_clean(struct ly_set *set);
1673
1674/**
Radek Krejcidc154432016-01-21 11:10:59 +01001675 * @brief Remove a ::lyd_node or ::lys_node object from the set.
1676 *
1677 * Note that after removing a node from a set, indexes of other nodes in the set can change
1678 * (the last object is placed instead of the removed object).
1679 *
1680 * @param[in] set Set from which the \p node will be removed.
1681 * @param[in] node The ::lyd_node or ::lys_node object to be removed from the \p set;
1682 * @return 0 on success
1683 */
1684int ly_set_rm(struct ly_set *set, void *node);
1685
1686/**
1687 * @brief Remove a ::lyd_node or ::lys_node object from the set index.
1688 *
1689 * Note that after removing a node from a set, indexes of other nodes in the set can change
1690 * (the last object is placed instead of the removed object).
1691 *
1692 * @param[in] set Set from which a node will be removed.
1693 * @param[in] index Index of the ::lyd_node or ::lys_node object in the \p set to be removed from the \p set;
1694 * @return 0 on success
1695 */
1696int ly_set_rm_index(struct ly_set *set, unsigned int index);
1697
1698/**
Radek Krejcidef50022016-02-01 16:38:32 +01001699 * @brief Free the ::ly_set data. Frees only the set structure content, not the referred data.
Radek Krejcidc154432016-01-21 11:10:59 +01001700 *
1701 * @param[in] set The set to be freed.
1702 */
1703void ly_set_free(struct ly_set *set);
1704
Radek Krejcidef50022016-02-01 16:38:32 +01001705/**@} nodeset */
Radek Krejci6140e4e2015-10-09 15:50:55 +02001706
1707/**
Radek Krejci5044be32016-01-18 17:05:51 +01001708 * @defgroup printerflags Printer flags
Radek Krejcidef50022016-02-01 16:38:32 +01001709 * @ingroup datatree
Radek Krejci5044be32016-01-18 17:05:51 +01001710 *
1711 * Validity flags for data nodes.
1712 *
1713 * @{
1714 */
Michal Vasko6216f272016-10-18 11:49:47 +02001715#define LYP_WITHSIBLINGS 0x01 /**< Flag for printing also the (following) sibling nodes of the data node. */
1716#define LYP_FORMAT 0x02 /**< Flag for formatted output. */
1717#define LYP_KEEPEMPTYCONT 0x04 /**< Preserve empty non-presence containers */
1718#define LYP_WD_MASK 0xF0 /**< Mask for with-defaults modes */
1719#define LYP_WD_EXPLICIT 0x00 /**< Explicit mode - print only data explicitly being present in the data tree.
1720 Note that this is the default value when no WD option is specified. */
1721#define LYP_WD_TRIM 0x10 /**< Do not print the nodes with the value equal to their default value */
1722#define LYP_WD_ALL 0x20 /**< Include implicit default nodes */
1723#define LYP_WD_ALL_TAG 0x40 /**< Same as #LYP_WD_ALL but also adds attribute 'default' with value 'true' to
1724 all nodes that has its default value. The 'default' attribute has namespace:
1725 urn:ietf:params:xml:ns:netconf:default:1.0 and thus the attributes are
1726 printed only when the ietf-netconf-with-defaults module is present in libyang
Michal Vaskoe77dc992017-01-18 12:09:42 +01001727 context (but in that case this namespace is always printed). */
Michal Vasko6216f272016-10-18 11:49:47 +02001728#define LYP_WD_IMPL_TAG 0x80 /**< Same as LYP_WD_ALL_TAG but the attributes are added only to the nodes that
1729 are not explicitly present in the original data tree despite their
1730 value is equal to their default value. There is the same limitation regarding
1731 the presence of ietf-netconf-with-defaults module in libyang context. */
Michal Vaskoafa7a642016-10-18 15:11:38 +02001732#define LYP_NETCONF 0x100 /**< Print the data tree for use in NETCONF meaning:
Michal Vasko6216f272016-10-18 11:49:47 +02001733 - for RPC output - skip the top-level RPC node,
1734 - for action output - skip all the parents of and the action node itself,
1735 - for action input - enclose the data in an action element in the base YANG namespace,
1736 - for all other data - print the whole data tree normally. */
Radek Krejci5044be32016-01-18 17:05:51 +01001737
1738/**
1739 * @}
1740 */
1741
1742/**
Radek Krejci3045cf32015-05-28 10:58:52 +02001743 * @defgroup logger Logger
1744 * @{
1745 *
1746 * Publicly visible functions and values of the libyang logger. For more
1747 * information, see \ref howtologger.
1748 */
1749
1750/**
1751 * @typedef LY_LOG_LEVEL
1752 * @brief Verbosity levels of the libyang logger.
1753 */
1754typedef enum {
Michal Vasko8f7e8d92016-07-01 11:33:58 +02001755 LY_LLERR = 0, /**< Print only error messages, default value. */
Michal Vasko53b7da02018-02-13 15:28:42 +01001756 LY_LLWRN = 1, /**< Print error and warning messages. */
1757 LY_LLVRB = 2, /**< Besides errors and warnings, print some other verbose messages. */
1758 LY_LLDBG = 3 /**< Print all messages including some development debug messages (be careful,
Michal Vasko3e3228d2017-02-24 14:55:32 +01001759 without subsequently calling ly_verb_dbg() no debug messages will be printed!). */
Radek Krejci3045cf32015-05-28 10:58:52 +02001760} LY_LOG_LEVEL;
1761
1762/**
1763 * @brief Set logger verbosity level.
1764 * @param[in] level Verbosity level.
Radek Krejci5f9127b2017-06-12 16:42:00 +02001765 * @return Previous verbosity level.
Radek Krejci3045cf32015-05-28 10:58:52 +02001766 */
Radek Krejci5f9127b2017-06-12 16:42:00 +02001767LY_LOG_LEVEL ly_verb(LY_LOG_LEVEL level);
Radek Krejci3045cf32015-05-28 10:58:52 +02001768
Michal Vasko53b7da02018-02-13 15:28:42 +01001769/**
1770 * @defgroup logopts Logging options
1771 * @ingroup logger
1772 *
1773 * Logging option bits of libyang.
1774 *
1775 * @{
1776 */
1777#define LY_LOLOG 0x01 /**< Log messages normally, using callback if set. If not set, messages will
1778 not be printed by libyang. */
1779#define LY_LOSTORE 0x02 /**< Store any generated errors or warnings, never verbose or debug messages.
1780 Note that if #LY_LOLOG is not set then verbose and debug messages are always lost. */
1781#define LY_LOSTORE_LAST 0x06 /**< Store any generated errors or warnings but only the last message, always overwrite
1782 the previous one. */
1783
1784/**
1785 * @}
1786 */
1787
1788/**
1789 * @brief Set additional logger options. Default is #LY_LOLOG | #LY_LOSTORE_LAST.
1790 *
1791 * @param[in] opts Bitfield of @ref logopts.
1792 * @return Previous logger options.
1793 */
1794int ly_log_options(int opts);
1795
Michal Vasko3e3228d2017-02-24 14:55:32 +01001796#ifndef NDEBUG
1797
1798/**
Michal Vasko53b7da02018-02-13 15:28:42 +01001799 * @defgroup dbggroup Debug message groups
1800 * @ingroup logger
1801 *
1802 * Selected displayed debug message groups.
1803 *
1804 * @{
Michal Vasko3e3228d2017-02-24 14:55:32 +01001805 */
Michal Vasko53b7da02018-02-13 15:28:42 +01001806
1807#define LY_LDGDICT 0x01 /**< Dictionary additions and deletions. */
1808#define LY_LDGYANG 0x02 /**< YANG parser messages. */
1809#define LY_LDGYIN 0x04 /**< YIN parser messages. */
1810#define LY_LDGXPATH 0x08 /**< XPath parsing end evaluation. */
1811#define LY_LDGDIFF 0x10 /**< Diff processing and creation. */
1812
1813/**
1814 * @}
1815 */
Michal Vasko3e3228d2017-02-24 14:55:32 +01001816
1817/**
1818 * @brief Enable specific debugging messages (independent of log level).
Michal Vasko53b7da02018-02-13 15:28:42 +01001819 * @param[in] dbg_groups Bitfield of enabled debug message groups (see @ref dbggroup).
Michal Vasko3e3228d2017-02-24 14:55:32 +01001820 */
1821void ly_verb_dbg(int dbg_groups);
1822
1823#endif
1824
Radek Krejci3045cf32015-05-28 10:58:52 +02001825/**
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001826 * @brief Set logger callback.
Michal Vasko13661142016-04-11 10:53:53 +02001827 *
1828 * !IMPORTANT! If an error has a specific error-app-tag defined in the model, it will NOT be set
1829 * at the time of calling this callback. It will be set right after, so to retrieve it
1830 * it must be checked afterwards with ly_errapptag().
1831 *
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001832 * @param[in] clb Logging callback.
Radek Krejciadb57612016-02-16 13:34:34 +01001833 * @param[in] path flag to resolve and provide path as the third parameter of the callback function. In case of
1834 * validation and some other errors, it can be useful to get the path to the problematic element. Note,
1835 * that according to the tree type and the specific situation, the path can slightly differs (keys
1836 * presence) or it can be NULL, so consider it as an optional parameter. If the flag is 0, libyang will
1837 * not bother with resolving the path.
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001838 */
Radek Krejciadb57612016-02-16 13:34:34 +01001839void 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 +01001840
1841/**
1842 * @brief Get logger callback.
1843 * @return Logger callback (can be NULL).
1844 */
Radek Krejciadb57612016-02-16 13:34:34 +01001845void (*ly_get_log_clb(void))(LY_LOG_LEVEL, const char *, const char *);
Michal Vaskof1d62cf2015-12-07 13:17:11 +01001846
1847/**
Radek Krejci3045cf32015-05-28 10:58:52 +02001848 * @typedef LY_ERR
Radek Krejci26715a42015-07-29 14:10:45 +02001849 * @brief libyang's error codes available via ly_errno extern variable.
Radek Krejci9b4ca392015-04-10 08:31:27 +02001850 * @ingroup logger
1851 */
1852typedef enum {
Michal Vasko8f3160e2017-09-27 11:25:26 +02001853 LY_SUCCESS = 0, /**< no error, not set by functions, included just to complete #LY_ERR enumeration */
1854 LY_EMEM, /**< Memory allocation failure */
1855 LY_ESYS, /**< System call failure */
1856 LY_EINVAL, /**< Invalid value */
1857 LY_EINT, /**< Internal error */
1858 LY_EVALID, /**< Validation failure */
Michal Vaskoc6cd3f02018-03-02 14:07:42 +01001859 LY_EPLUGIN /**< Error reported by a plugin */
Radek Krejci3045cf32015-05-28 10:58:52 +02001860} LY_ERR;
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001861
Radek Krejci26715a42015-07-29 14:10:45 +02001862/**
Michal Vaskof5035ce2016-03-11 10:21:31 +01001863 * @typedef LY_VECODE
1864 * @brief libyang's codes of validation error. Whenever ly_errno is set to LY_EVALID, the ly_vecode is also set
1865 * to the appropriate LY_VECODE value.
Radek Krejcia37b39c2016-03-09 16:38:18 +01001866 * @ingroup logger
1867 */
1868typedef enum {
Michal Vaskof5035ce2016-03-11 10:21:31 +01001869 LYVE_SUCCESS = 0, /**< no error */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001870
Michal Vaskof5035ce2016-03-11 10:21:31 +01001871 LYVE_XML_MISS, /**< missing XML object */
1872 LYVE_XML_INVAL, /**< invalid XML object */
1873 LYVE_XML_INCHAR, /**< invalid XML character */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001874
Michal Vaskof5035ce2016-03-11 10:21:31 +01001875 LYVE_EOF, /**< unexpected end of input data */
1876 LYVE_INSTMT, /**< invalid statement (schema) */
1877 /* */
Michal Vaskoca7cbc42016-07-01 11:36:53 +02001878 LYVE_INPAR, /**< invalid (in)direct parent (schema) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001879 LYVE_INID, /**< invalid identifier (schema) */
1880 LYVE_INDATE, /**< invalid date format */
1881 LYVE_INARG, /**< invalid value of a statement argument (schema) */
1882 LYVE_MISSSTMT, /**< missing required statement (schema) */
1883 /* */
1884 LYVE_MISSARG, /**< missing required statement argument (schema) */
1885 LYVE_TOOMANY, /**< too many instances of some object */
1886 LYVE_DUPID, /**< duplicated identifier (schema) */
1887 LYVE_DUPLEAFLIST, /**< multiple instances of leaf-list */
1888 LYVE_DUPLIST, /**< multiple instances of list */
Michal Vaskoa540df22016-04-11 16:14:35 +02001889 LYVE_NOUNIQ, /**< unique leaves match on 2 list instances (data) */
Radek Krejcie663e012016-08-01 17:12:34 +02001890 LYVE_ENUM_INVAL, /**< invalid enum value (schema) */
1891 LYVE_ENUM_INNAME, /**< invalid enum name (schema) */
1892 /* */
1893 /* */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001894 LYVE_ENUM_WS, /**< enum name with leading/trailing whitespaces (schema) */
Radek Krejcie663e012016-08-01 17:12:34 +02001895 LYVE_BITS_INVAL, /**< invalid bits value (schema) */
1896 LYVE_BITS_INNAME, /**< invalid bits name (schema) */
1897 /* */
1898 /* */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001899 LYVE_INMOD, /**< invalid module name */
1900 /* */
1901 LYVE_KEY_NLEAF, /**< list key is not a leaf (schema) */
1902 LYVE_KEY_TYPE, /**< invalid list key type (schema) */
1903 LYVE_KEY_CONFIG, /**< key config value differs from the list config value */
1904 LYVE_KEY_MISS, /**< list key not found (schema) */
1905 LYVE_KEY_DUP, /**< duplicated key identifier (schema) */
1906 LYVE_INREGEX, /**< invalid regular expression (schema) */
1907 LYVE_INRESOLV, /**< no resolvents found (schema) */
1908 LYVE_INSTATUS, /**< invalid derivation because of status (schema) */
Radek Krejcid8fb03c2016-06-13 15:52:22 +02001909 LYVE_CIRC_LEAFREFS,/**< circular chain of leafrefs detected (schema) */
Radek Krejcie8c1b572016-07-26 15:09:52 +02001910 LYVE_CIRC_FEATURES,/**< circular chain of features detected (schema) */
Radek Krejci151b8cc2016-06-22 10:14:21 +02001911 LYVE_CIRC_IMPORTS, /**< circular chain of imports detected (schema) */
1912 LYVE_CIRC_INCLUDES,/**< circular chain of includes detected (schema) */
Michal Vasko88de3e42016-06-29 11:05:32 +02001913 LYVE_INVER, /**< non-matching YANG versions of module and its submodules (schema) */
Radek Krejci0fd6a992016-11-08 19:42:20 +01001914 LYVE_SUBMODULE, /**< submodule given instead of a module */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001915
Michal Vaskof5035ce2016-03-11 10:21:31 +01001916 LYVE_OBSDATA, /**< obsolete data instantiation (data) */
1917 /* */
1918 LYVE_NORESOLV, /**< no resolvents found for an expression (data) */
1919 LYVE_INELEM, /**< invalid element (data) */
1920 /* */
1921 LYVE_MISSELEM, /**< missing required element (data) */
1922 LYVE_INVAL, /**< invalid value of an element (data) */
Michal Vasko4bff75f2017-03-02 10:48:44 +01001923 LYVE_INMETA, /**< invalid metadata (attribute) value (data) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001924 LYVE_INATTR, /**< invalid attribute in an element (data) */
1925 LYVE_MISSATTR, /**< missing attribute in an element (data) */
Michal Vasko6ac68282016-04-11 10:56:47 +02001926 LYVE_NOCONSTR, /**< value out of range/length/pattern (data) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001927 LYVE_INCHAR, /**< unexpected characters (data) */
1928 LYVE_INPRED, /**< predicate resolution fail (data) */
1929 LYVE_MCASEDATA, /**< data for more cases of a choice (data) */
Michal Vasko6ac68282016-04-11 10:56:47 +02001930 LYVE_NOMUST, /**< unsatisfied must condition (data) */
1931 LYVE_NOWHEN, /**< unsatisfied when condition (data) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001932 LYVE_INORDER, /**< invalid order of elements (data) */
Radek Krejci03b71f72016-03-16 11:10:09 +01001933 LYVE_INWHEN, /**< irresolvable when condition (data) */
Michal Vasko6ac68282016-04-11 10:56:47 +02001934 LYVE_NOMIN, /**< min-elements constraint not honored (data) */
1935 LYVE_NOMAX, /**< max-elements constraint not honored (data) */
1936 LYVE_NOREQINS, /**< required instance does not exits (data) */
1937 LYVE_NOLEAFREF, /**< leaf pointed to by leafref does not exist (data) */
1938 LYVE_NOMANDCHOICE, /**< no mandatory choice case branch exists (data) */
Radek Krejcia37b39c2016-03-09 16:38:18 +01001939
Michal Vaskof5035ce2016-03-11 10:21:31 +01001940 LYVE_XPATH_INTOK, /**< unexpected XPath token */
1941 LYVE_XPATH_EOF, /**< unexpected end of an XPath expression */
1942 LYVE_XPATH_INOP, /**< invalid XPath operation operands */
1943 /* */
1944 LYVE_XPATH_INCTX, /**< invalid XPath context type */
Michal Vasko541dff42016-10-26 11:29:25 +02001945 LYVE_XPATH_INMOD, /**< invalid module name */
Michal Vasko93909772016-10-26 10:32:10 +02001946 LYVE_XPATH_INFUNC, /**< invalid XPath function name */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001947 LYVE_XPATH_INARGCOUNT, /**< invalid number of arguments for an XPath function */
Michal Vasko6fae1362016-03-11 15:10:00 +01001948 LYVE_XPATH_INARGTYPE, /**< invalid type of arguments for an XPath function */
Michal Vasko283bf382017-05-03 12:29:40 +02001949 LYVE_XPATH_DUMMY, /**< invalid use of the XPath dummy node */
1950 LYVE_XPATH_NOEND, /**< unterminated string */
Michal Vasko6fae1362016-03-11 15:10:00 +01001951
1952 LYVE_PATH_INCHAR, /**< invalid characters (path) */
Michal Vaskoe733d682016-03-14 09:08:27 +01001953 LYVE_PATH_INMOD, /**< invalid module name (path) */
1954 LYVE_PATH_MISSMOD, /**< missing module name (path) */
Michal Vasko6fae1362016-03-11 15:10:00 +01001955 LYVE_PATH_INNODE, /**< invalid node name (path) */
Michal Vasko6fae1362016-03-11 15:10:00 +01001956 LYVE_PATH_INKEY, /**< invalid key name (path) */
1957 LYVE_PATH_MISSKEY, /**< missing some list keys (path) */
Michal Vasko310bc582018-05-22 10:47:59 +02001958 LYVE_PATH_INIDENTREF, /**< missing module name prefix in identityref predicate value (path) */
Michal Vasko6fae1362016-03-11 15:10:00 +01001959 LYVE_PATH_EXISTS, /**< target node already exists (path) */
1960 LYVE_PATH_MISSPAR, /**< some parent of the target node is missing (path) */
Michal Vaskofebd13d2018-05-17 10:42:24 +02001961 LYVE_PATH_PREDTOOMANY, /**< too many predicates specified (path) */
Michal Vaskof5035ce2016-03-11 10:21:31 +01001962} LY_VECODE;
Radek Krejcia37b39c2016-03-09 16:38:18 +01001963
1964/**
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001965 * @cond INTERNAL
Michal Vasko53b7da02018-02-13 15:28:42 +01001966 * Get address of (thread-specific) `ly_errno' variable.
Radek Krejci26715a42015-07-29 14:10:45 +02001967 */
Michal Vasko53b7da02018-02-13 15:28:42 +01001968LY_ERR *ly_errno_glob_address(void);
Radek Krejcia37b39c2016-03-09 16:38:18 +01001969
Radek Krejci7d9f46a2016-01-29 13:53:18 +01001970/**
1971 * @endcond INTERNAL
Radek Krejcidef50022016-02-01 16:38:32 +01001972 * @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 +01001973 */
Michal Vasko53b7da02018-02-13 15:28:42 +01001974#define ly_errno (*ly_errno_glob_address())
Radek Krejci9b4ca392015-04-10 08:31:27 +02001975
Radek Krejci386714d2016-02-15 10:24:30 +01001976/**
Michal Vasko53b7da02018-02-13 15:28:42 +01001977 * @brief Get the last (thread, context-specific) validation error code.
1978 *
1979 * This value is set only if ly_errno is #LY_EVALID.
1980 *
1981 * @param[in] ctx Relative context.
1982 * @return Validation error code.
Radek Krejcia37b39c2016-03-09 16:38:18 +01001983 */
Michal Vasko53b7da02018-02-13 15:28:42 +01001984LY_VECODE ly_vecode(const struct ly_ctx *ctx);
Radek Krejcia37b39c2016-03-09 16:38:18 +01001985
1986/**
Michal Vasko53b7da02018-02-13 15:28:42 +01001987 * @brief Get the last (thread, context-specific) error message. If the coresponding module defined
Michal Vasko13661142016-04-11 10:53:53 +02001988 * a specific error message, it will be used instead the default one.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001989 *
Michal Vasko53b7da02018-02-13 15:28:42 +01001990 * Sometimes, the error message is extended with path of the element where the problem is.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001991 * The path is available via ly_errpath().
1992 *
Michal Vasko53b7da02018-02-13 15:28:42 +01001993 * @param[in] ctx Relative context.
Radek Krejcib50551c2016-04-19 09:15:38 +02001994 * @return Text of the last error message, empty string if there is no error.
Radek Krejci386714d2016-02-15 10:24:30 +01001995 */
Michal Vasko53b7da02018-02-13 15:28:42 +01001996const char *ly_errmsg(const struct ly_ctx *ctx);
Radek Krejci386714d2016-02-15 10:24:30 +01001997
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01001998/**
Michal Vasko53b7da02018-02-13 15:28:42 +01001999 * @brief Get the last (thread, context-specific) path of the element where was an error.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01002000 *
2001 * The path always corresponds to the error message available via ly_errmsg(), so
2002 * whenever a subsequent error message is printed, the path is erased or rewritten.
Radek Krejci3cc10962016-04-13 15:03:27 +02002003 * The path reflects the type of the processed tree - data path for data tree functions
2004 * and schema path in case of schema tree functions. In case of processing YIN schema
2005 * or XML data, the path can be just XML path. In such a case, the corresponding
2006 * ly_vecode (value 1-3) is set.
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01002007 *
Michal Vasko53b7da02018-02-13 15:28:42 +01002008 * @param[in] ctx Relative context.
Radek Krejcib50551c2016-04-19 09:15:38 +02002009 * @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 +01002010 */
Michal Vasko53b7da02018-02-13 15:28:42 +01002011const char *ly_errpath(const struct ly_ctx *ctx);
Radek Krejci6e8fc0b2016-02-16 14:33:37 +01002012
Michal Vasko13661142016-04-11 10:53:53 +02002013/**
Michal Vasko53b7da02018-02-13 15:28:42 +01002014 * @brief Get the last (thread, context-specific) error-app-tag if there was a specific one defined
Michal Vasko13661142016-04-11 10:53:53 +02002015 * in the module for the last error.
2016 *
2017 * The app-tag always corresponds to the error message available via ly_errmsg(), so
2018 * whenever a subsequent error message is printed, the app-tag is erased or rewritten.
2019 *
Michal Vasko53b7da02018-02-13 15:28:42 +01002020 * @param[in] ctx Relative context.
Radek Krejcib50551c2016-04-19 09:15:38 +02002021 * @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 +02002022 */
Michal Vasko53b7da02018-02-13 15:28:42 +01002023const char *ly_errapptag(const struct ly_ctx *ctx);
Michal Vasko13661142016-04-11 10:53:53 +02002024
Michal Vasko53b7da02018-02-13 15:28:42 +01002025/**
2026 * @brief Libyang full error structure.
2027 */
2028struct ly_err_item {
2029 LY_LOG_LEVEL level;
2030 LY_ERR no;
2031 LY_VECODE vecode;
2032 char *msg;
2033 char *path;
2034 char *apptag;
2035 struct ly_err_item *next;
2036 struct ly_err_item *prev; /* first item's prev points to the last item */
2037};
2038
2039/**
Michal Vasko10d6f2f2018-02-14 10:56:01 +01002040 * @brief Get the first (thread, context-specific) generated error structure.
Michal Vasko53b7da02018-02-13 15:28:42 +01002041 *
2042 * @param[in] ctx Relative context.
Michal Vasko10d6f2f2018-02-14 10:56:01 +01002043 * @return First error structure (can be NULL), do not modify!
Michal Vasko53b7da02018-02-13 15:28:42 +01002044 */
Michal Vasko10d6f2f2018-02-14 10:56:01 +01002045struct ly_err_item *ly_err_first(const struct ly_ctx *ctx);
Michal Vasko53b7da02018-02-13 15:28:42 +01002046
2047/**
Michal Vasko20fadd52018-02-14 09:33:22 +01002048 * @brief Print the error structure as if just generated.
2049 *
2050 * @param[in] eitem Error item structure to print.
2051 */
2052void ly_err_print(struct ly_err_item *eitem);
2053
2054/**
Michal Vasko53b7da02018-02-13 15:28:42 +01002055 * @brief Free error structures from a context.
2056 *
2057 * If \p eitem is not set, free all the error structures.
2058 *
2059 * @param[in] ctx Relative context.
2060 * @param[in] eitem Oldest error structure to remove, optional.
2061 */
2062void ly_err_clean(struct ly_ctx *ctx, struct ly_err_item *eitem);
2063
2064/**
2065 * @} logger
2066 */
Radek Krejci9b4ca392015-04-10 08:31:27 +02002067
Radek Krejci39d8d0d2015-08-17 13:42:45 +02002068#ifdef __cplusplus
2069}
2070#endif
2071
Radek Krejci9b4ca392015-04-10 08:31:27 +02002072#endif /* LY_LIBYANG_H_ */