15 #ifndef LY_TREE_DATA_H_
16 #define LY_TREE_DATA_H_
147 #define LYD_VAL_OK 0x00
148 #define LYD_VAL_DUP 0x01
150 #define LYD_VAL_UNIQUE 0x02
151 #define LYD_VAL_MAND 0x04
157 #define LYD_VAL_INUSE 0x80
180 uint8_t when_status:3;
191 #ifdef LY_ENABLED_LYD_PRIV
195 #ifdef LY_ENABLED_CACHE
197 struct hash_table *ht;
233 #ifdef LY_ENABLED_LYD_PRIV
237 #ifdef LY_ENABLED_CACHE
253 #define LY_VALUE_UNRES 0x01
256 #define LY_VALUE_USER 0x02
294 #ifdef LY_ENABLED_LYD_PRIV
298 #ifdef LY_ENABLED_CACHE
425 #define LYD_DIFFOPT_NOSIBLINGS 0x0800
427 #define LYD_DIFFOPT_WITHDEFAULTS 0x0001
445 char *lyd_path(const struct lyd_node *node);
478 #define LYD_OPT_DATA 0x00
481 #define LYD_OPT_CONFIG 0x01
484 #define LYD_OPT_GET 0x02
490 #define LYD_OPT_GETCONFIG 0x04
497 #define LYD_OPT_EDIT 0x08
503 #define LYD_OPT_RPC 0x10
506 #define LYD_OPT_RPCREPLY 0x20
507 #define LYD_OPT_NOTIF 0x40
510 #define LYD_OPT_NOTIF_FILTER 0x80
513 #define LYD_OPT_TYPEMASK 0x10000ff
517 #define LYD_OPT_STRICT 0x0200
518 #define LYD_OPT_DESTRUCT 0x0400
521 #define LYD_OPT_OBSOLETE 0x0800
522 #define LYD_OPT_NOSIBLINGS 0x1000
524 #define LYD_OPT_TRUSTED 0x2000
528 #define LYD_OPT_WHENAUTODEL 0x4000
531 #define LYD_OPT_NOEXTDEPS 0x8000
533 #define LYD_OPT_DATA_NO_YANGLIB 0x10000
534 #define LYD_OPT_DATA_ADD_YANGLIB 0x20000
537 #define LYD_OPT_VAL_DIFF 0x40000
539 #define LYD_OPT_LYB_MOD_UPDATE 0x80000
540 #define LYD_OPT_DATA_TEMPLATE 0x1000000
541 #define LYD_OPT_MULTI_ERRORS 0x2000000
585 struct lyd_node *lyd_parse_mem(struct ly_ctx *ctx, const char *data, LYD_FORMAT format, int options, ...);
740 const char *val_str);
805 const char *val_str);
852 #define LYD_PATH_OPT_UPDATE 0x01
855 #define LYD_PATH_OPT_NOPARENT 0x02
857 #define LYD_PATH_OPT_OUTPUT 0x04
858 #define LYD_PATH_OPT_DFLT 0x08
863 #define LYD_PATH_OPT_NOPARENTRET 0x10
865 #define LYD_PATH_OPT_EDIT 0x20
898 struct lyd_node *lyd_new_path(struct lyd_node *data_tree, const struct ly_ctx *ctx, const char *path, void *value,
922 #define LYD_DUP_OPT_RECURSIVE 0x01
923 #define LYD_DUP_OPT_NO_ATTR 0x02
924 #define LYD_DUP_OPT_WITH_PARENTS 0x04
926 #define LYD_DUP_OPT_WITH_KEYS 0x08
928 #define LYD_DUP_OPT_WITH_WHEN 0x10
946 struct lyd_node *lyd_dup(const struct lyd_node *node, int options);
1025 #define LYD_OPT_EXPLICIT 0x0100
1493 int lyd_print_clb(ssize_t (*writeclb)(
void *arg,
const void *buf,
size_t count),
void *arg,
1515 #ifdef LY_ENABLED_LYD_PRIV
1526 void *lyd_set_private(
const struct lyd_node *node,
void *priv);
1541 struct lyd_node *lyd_find_path_hash_based(
struct lyd_node *data_tree,
const struct ly_ctx *ctx,
const char *path,
struct lyd_node * lyd_parse_fd(struct ly_ctx *ctx, int fd, LYD_FORMAT format, int options,...)
Read (and validate) data from the given file descriptor.
Common structure representing single YANG data statement describing.
int lyd_print_clb(ssize_t(*writeclb)(void *arg, const void *buf, size_t count), void *arg, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
struct lyd_node * lyd_new_anydata(struct lyd_node *parent, const struct lys_module *module, const char *name, void *value, LYD_ANYDATA_VALUETYPE value_type)
Create a new anydata or anyxml node in a data tree.
int lyd_validate_modules(struct lyd_node **node, const struct lys_module **modules, int mod_count, int options,...)
Validate node data tree but only subtrees that belong to the schema found in modules. All other schemas are effectively disabled for the validation.
struct lyd_node * lyd_dup_to_ctx(const struct lyd_node *node, int options, struct ly_ctx *ctx)
Create a copy of the specified data tree node in the different context. All the schema references and...
int lyd_find_sibling_set(const struct lyd_node *siblings, const struct lyd_node *target, struct ly_set **set)
Search in the given siblings for all target instances. If cache is enabled and the siblings are NOT t...
int lyd_find_sibling_val(const struct lyd_node *siblings, const struct lys_node *schema, const char *key_or_value, struct lyd_node **match)
Search in the given siblings for the schema instance. If cache is enabled and the siblings are NOT to...
int lyd_validate(struct lyd_node **node, int options, void *var_arg,...)
Validate node data subtree.
struct lyd_attr * lyd_insert_attr(struct lyd_node *parent, const struct lys_module *mod, const char *name, const char *value)
Insert attribute into the data node.
int lyd_value_type(struct lys_node *node, const char *value, struct lys_type **type)
Check restrictions applicable to the particular leaf/leaf-list on the given string value and optional...
void lyd_free_attr(struct ly_ctx *ctx, struct lyd_node *parent, struct lyd_attr *attr, int recursive)
Destroy data attribute.
struct lys_ext_instance_complex * annotation
struct lys_module * lyd_node_module(const struct lyd_node *node)
Return main module of the data tree node.
struct lyd_node * lyd_dup_withsiblings(const struct lyd_node *node, int options)
Create a copy of the specified data tree and all its siblings (preceding as well as following)...
node's value representation
int lyd_print_fd(int fd, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
libyang representation of data model trees.
int lyd_wd_default(struct lyd_node_leaf_list *node)
Get know if the node contain (despite implicit or explicit) default value.
int lyd_insert(struct lyd_node *parent, struct lyd_node *node)
Insert the node element as child to the parent element. The node is inserted as a last child of the p...
void lyd_free(struct lyd_node *node)
Free (and unlink) the specified data subtree. Use carefully, since libyang silently creates default n...
LY_DATA_TYPE _PACKED value_type
struct lyd_node * lyd_parse_xml(struct ly_ctx *ctx, struct lyxml_elem **root, int options,...)
Parse (and validate) XML tree.
Single enumeration value specification for lys_type_info_enums.
int lyd_node_should_print(const struct lyd_node *node, int options)
Learn if a node is supposed to be printed based on the options.
struct lyd_node * lyd_new_output(struct lyd_node *parent, const struct lys_module *module, const char *name)
Create a new container node in a data tree. Ignore RPC/action input nodes and instead use RPC/action ...
void lyd_free_diff(struct lyd_difflist *diff)
Free the result of lyd_diff(). It frees the structure of the lyd_diff() result, not the referenced no...
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
struct lys_type_bit ** bit
struct lyd_node * lyd_parse_path(struct ly_ctx *ctx, const char *path, LYD_FORMAT format, int options,...)
Read (and validate) data from the given file path.
struct lyd_difflist * lyd_diff(struct lyd_node *first, struct lyd_node *second, int options)
Compare two data trees and provide list of differences.
unsigned int lyd_list_pos(const struct lyd_node *node)
Learn the relative instance position of a list or leaf-list within other instances of the same schema...
int lyd_schema_sort(struct lyd_node *sibling, int recursive)
Order siblings according to the schema node ordering.
Public API of libyang XML parser.
int lyd_find_sibling(const struct lyd_node *siblings, const struct lyd_node *target, struct lyd_node **match)
Search in the given siblings for the target instance. If cache is enabled and the siblings are NOT to...
int lyd_insert_after(struct lyd_node *sibling, struct lyd_node *node)
Insert the node element after the sibling element. If node and siblings are already siblings (just mo...
struct lyd_node * lyd_new_output_leaf(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *val_str)
Create a new leaf or leaflist node in a data tree with a string value that is converted to the actual...
Structure describing an element in an XML tree.
Structure for data nodes defined as LYS_LEAF or LYS_LEAFLIST.
struct lyd_node * leafref
int lyd_insert_sibling(struct lyd_node **sibling, struct lyd_node *node)
Insert the node element as a last sibling of the specified sibling element.
struct lyd_node * lyd_new_leaf(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *val_str)
Create a new leaf or leaflist node in a data tree with a string value that is converted to the actual...
double lyd_dec64_to_double(const struct lyd_node *node)
Get the double value of a decimal64 leaf/leaf-list.
struct lyd_node ** second
int lyd_insert_before(struct lyd_node *sibling, struct lyd_node *node)
Insert the node element after the sibling element. If node and siblings are already siblings (just mo...
Structure for the result of lyd_diff(), describing differences between two data trees.
Main schema node structure representing YANG module.
int lyd_print_mem(char **strp, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
Complex extension instance structure.
struct ly_set * lyd_find_instance(const struct lyd_node *data, const struct lys_node *schema)
Search in the given data for instances of the provided schema node.
struct lyd_node * lyd_first_sibling(struct lyd_node *node)
Get the first sibling of the given node.
LYD_DIFFTYPE
list of possible types of differences in lyd_difflist
struct lyd_node * lyd_new_yangdata(const struct lys_module *module, const char *name_template, const char *name)
Create a new yang-data template in a data tree. It creates container, which name is in third paramete...
LY_DATA_TYPE
YANG built-in types.
void lyd_free_val_diff(struct lyd_difflist *diff)
Free special diff that was returned by lyd_validate() or lyd_validate_modules().
struct lyd_node * instance
YANG type structure providing information from the schema.
struct ly_set * lyd_find_path(const struct lyd_node *ctx_node, const char *path)
Search in the given data for instances of nodes matching the provided path.
Structure to hold information about identity, see RFC 6020 sec. 7.16
struct lyd_node * lyd_new_output_anydata(struct lyd_node *parent, const struct lys_module *module, const char *name, void *value, LYD_ANYDATA_VALUETYPE value_type)
Create a new anydata or anyxml node in a data tree. Ignore RPC/action input nodes and instead use RPC...
struct lyd_node * lyd_new(struct lyd_node *parent, const struct lys_module *module, const char *name)
Create a new container node in a data tree.
int lyd_validate_value(struct lys_node *node, const char *value)
Check restrictions applicable to the particular leaf/leaf-list on the given string value...
union lyd_value_u lyd_val
node's value representation
Generic structure for a data node, directly applicable to the data nodes defined as LYS_CONTAINER...
int lyd_print_path(const char *path, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
LYD_ANYDATA_VALUETYPE
List of possible value types stored in lyd_node_anydata.
LYD_ANYDATA_VALUETYPE value_type
int lyd_unlink(struct lyd_node *node)
Unlink the specified data subtree. All referenced namespaces are copied.
struct lys_type * lyd_leaf_type(const struct lyd_node_leaf_list *leaf)
Get the type structure of a leaf.
int lyd_change_leaf(struct lyd_node_leaf_list *leaf, const char *val_str)
Change value of a leaf node.
void lyd_free_withsiblings(struct lyd_node *node)
Free (and unlink) the specified data tree and all its siblings (preceding as well as following)...
int lyd_print_file(FILE *f, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
int lyd_merge(struct lyd_node *target, const struct lyd_node *source, int options)
Merge a (sub)tree into a data tree.
Structure for data nodes defined as LYS_ANYDATA or LYS_ANYXML.
Single bit value specification for lys_type_info_bits.
int lyd_merge_to_ctx(struct lyd_node **trg, const struct lyd_node *src, int options, struct ly_ctx *ctx)
Same as lyd_merge(), but moves the resulting data into the specified context.
int lyd_lyb_data_length(const char *data)
Get the length of a printed LYB data tree.
struct lys_type_enum * enm