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
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
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
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
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
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,
LYD_ANYDATA_VALUETYPE value_type
struct lyd_node * leafref
struct lyd_node * instance
struct lys_ext_instance_complex * annotation
LY_DATA_TYPE _PACKED value_type
struct lys_type_bit ** bit
struct lys_type_enum * enm
struct lyd_node ** second
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.
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 ...
struct lyd_node * lyd_parse_xml(struct ly_ctx *ctx, struct lyxml_elem **root, int options,...)
Parse (and validate) XML tree.
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)....
int lyd_print_path(const char *path, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
union lyd_value_u lyd_val
node's value representation
void lyd_free(struct lyd_node *node)
Free (and unlink) the specified data subtree. Use carefully, since libyang silently creates default n...
struct lyd_node * lyd_new_path(struct lyd_node *data_tree, const struct ly_ctx *ctx, const char *path, void *value, LYD_ANYDATA_VALUETYPE value_type, int options)
Create a new data node based on a simple XPath.
const struct lys_type * lyd_leaf_type(const struct lyd_node_leaf_list *leaf)
Get the type structure of a leaf.
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...
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_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_insert_sibling(struct lyd_node **sibling, struct lyd_node *node)
Insert the node element as a last sibling of the specified sibling element.
LYD_DIFFTYPE
list of possible types of differences in lyd_difflist
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...
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...
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.
int lyd_lyb_data_length(const char *data)
Get the length of a printed LYB data tree.
int lyd_schema_sort(struct lyd_node *sibling, int recursive)
Order siblings according to the schema node ordering.
int lyd_print_mem(char **strp, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
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...
int lyd_change_leaf(struct lyd_node_leaf_list *leaf, const char *val_str)
Change value of a leaf node.
int lyd_print_fd(int fd, 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.
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.
int lyd_unlink(struct lyd_node *node)
Unlink the specified data subtree. All referenced namespaces are copied.
struct lys_module * lyd_node_module(const struct lyd_node *node)
Return main module of the data tree node.
struct lyd_difflist * lyd_diff(struct lyd_node *first, struct lyd_node *second, int options)
Compare two data trees and provide list of differences.
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.
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...
int lyd_validate(struct lyd_node **node, int options, void *var_arg,...)
Validate node data subtree.
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
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...
double lyd_dec64_to_double(const struct lyd_node *node)
Get the double value of a decimal64 leaf/leaf-list.
struct lyd_node * lyd_first_sibling(struct lyd_node *node)
Get the first sibling of the given node.
struct lyd_node * lyd_dup(const struct lyd_node *node, int options)
Create a copy of the specified data tree node. Schema references are kept the same....
char * lyd_path(const struct lyd_node *node)
Build data path (usable as path, see howtoxpath) of the data node.
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...
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_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...
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.
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....
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...
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 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_parse_mem(struct ly_ctx *ctx, const char *data, LYD_FORMAT format, int options,...)
Parse (and validate) data from memory.
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_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_merge(struct lyd_node *target, const struct lyd_node *source, int options)
Merge a (sub)tree into a data tree.
int lyd_print_file(FILE *f, const struct lyd_node *root, LYD_FORMAT format, int options)
Print data tree in the specified format.
void lyd_free_attr(struct ly_ctx *ctx, struct lyd_node *parent, struct lyd_attr *attr, int recursive)
Destroy data attribute.
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.
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_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...
void lyd_free_val_diff(struct lyd_difflist *diff)
Free special diff that was returned by lyd_validate() or lyd_validate_modules().
int lyd_wd_default(struct lyd_node_leaf_list *node)
Get know if the node contain (despite implicit or explicit) default value.
void lyd_free_withsiblings(struct lyd_node *node)
Free (and unlink) the specified data tree and all its siblings (preceding as well as following).
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.
@ LYD_ANYDATA_CONSTSTRING
Structure for the result of lyd_diff(), describing differences between two data trees.
Generic structure for a data node, directly applicable to the data nodes defined as LYS_CONTAINER,...
Structure for data nodes defined as LYS_ANYDATA or LYS_ANYXML.
Structure for data nodes defined as LYS_LEAF or LYS_LEAFLIST.
node's value representation
Complex extension instance structure.
LY_DATA_TYPE
YANG built-in types.
Structure to hold information about identity, see RFC 6020 sec. 7.16
Main schema node structure representing YANG module.
Common structure representing single YANG data statement describing.
YANG type structure providing information from the schema.
Single bit value specification for lys_type_info_bits.
Single enumeration value specification for lys_type_info_enums.
Structure describing an element in an XML tree.
libyang representation of data model trees.
Public API of libyang XML parser.