libyang 2.1.148
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
Loading...
Searching...
No Matches
tree_data.h
Go to the documentation of this file.
1
16#ifndef LY_TREE_DATA_H_
17#define LY_TREE_DATA_H_
18
19#ifdef _WIN32
20# include <winsock2.h>
21# include <ws2tcpip.h>
22#else
23# include <arpa/inet.h>
24# if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__)
25# include <netinet/in.h>
26# include <sys/socket.h>
27# endif
28#endif
29#include <stddef.h>
30#include <stdint.h>
31#include <time.h>
32
33#include "config.h"
34#include "log.h"
35#include "tree.h"
36#include "tree_schema.h"
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42struct ly_ctx;
43struct ly_path;
44struct ly_set;
45struct lyd_node;
46struct lyd_node_opaq;
47struct lyd_node_term;
48struct timespec;
49struct lyxp_var;
50
423/* *INDENT-OFF* */
424
450#define LYD_TREE_DFS_BEGIN(START, ELEM) \
451 { ly_bool LYD_TREE_DFS_continue = 0; struct lyd_node *LYD_TREE_DFS_next; \
452 for ((ELEM) = (LYD_TREE_DFS_next) = (struct lyd_node *)(START); \
453 (ELEM); \
454 (ELEM) = (LYD_TREE_DFS_next), LYD_TREE_DFS_continue = 0)
455
470#define LYD_TREE_DFS_END(START, ELEM) \
471 /* select element for the next run - children first */ \
472 if (LYD_TREE_DFS_continue) { \
473 (LYD_TREE_DFS_next) = NULL; \
474 } else { \
475 (LYD_TREE_DFS_next) = lyd_child(ELEM); \
476 }\
477 if (!(LYD_TREE_DFS_next)) { \
478 /* no children */ \
479 if ((ELEM) == (struct lyd_node *)(START)) { \
480 /* we are done, (START) has no children */ \
481 break; \
482 } \
483 /* try siblings */ \
484 (LYD_TREE_DFS_next) = (ELEM)->next; \
485 } \
486 while (!(LYD_TREE_DFS_next)) { \
487 /* parent is already processed, go to its sibling */ \
488 (ELEM) = (struct lyd_node *)(ELEM)->parent; \
489 /* no siblings, go back through parents */ \
490 if ((ELEM)->parent == (START)->parent) { \
491 /* we are done, no next element to process */ \
492 break; \
493 } \
494 (LYD_TREE_DFS_next) = (ELEM)->next; \
495 } }
496
504#define LYD_LIST_FOR_INST(START, SCHEMA, ELEM) \
505 for (lyd_find_sibling_val(START, SCHEMA, NULL, 0, &(ELEM)); \
506 (ELEM) && ((ELEM)->schema == (SCHEMA)); \
507 (ELEM) = (ELEM)->next)
508
517#define LYD_LIST_FOR_INST_SAFE(START, SCHEMA, NEXT, ELEM) \
518 for ((NEXT) = (ELEM) = NULL, lyd_find_sibling_val(START, SCHEMA, NULL, 0, &(ELEM)); \
519 (ELEM) && ((ELEM)->schema == (SCHEMA)) ? ((NEXT) = (ELEM)->next, 1) : 0; \
520 (ELEM) = (NEXT))
521
522/* *INDENT-ON* */
523
527#define LYD_CTX(node) ((node)->schema ? (node)->schema->module->ctx : ((const struct lyd_node_opaq *)(node))->ctx)
528
539
554
560struct lyd_value {
561 const char *_canonical;
564 const struct lysc_type *realtype;
572 union {
573 int8_t boolean;
574 int64_t dec64;
575 int8_t int8;
576 int16_t int16;
577 int32_t int32;
578 int64_t int64;
579 uint8_t uint8;
580 uint16_t uint16;
581 uint32_t uint32;
582 uint64_t uint64;
583 struct lysc_type_bitenum_item *enum_item;
584 struct lysc_ident *ident;
585 struct ly_path *target;
587 struct lyd_value_union *subvalue;
589 void *dyn_mem;
590 uint8_t fixed_mem[LYD_VALUE_FIXED_MEM_SIZE];
591 };
593};
594
603#define LYD_VALUE_GET(value, type_val) \
604 ((sizeof *(type_val) > LYD_VALUE_FIXED_MEM_SIZE) \
605 ? ((type_val) = (((value)->dyn_mem))) \
606 : ((type_val) = ((void *)((value)->fixed_mem))))
607
627
638
643 void *data;
644 size_t size;
645};
646
651 struct in_addr addr;
652};
653
658 struct in_addr addr;
659 const char *zone;
660};
661
666 struct in_addr addr;
667 uint8_t prefix;
668};
669
674 struct in6_addr addr;
675};
676
681 struct in6_addr addr;
682 const char *zone;
683};
684
689 struct in6_addr addr;
690 uint8_t prefix;
691};
692
701
706 struct lyxp_expr *exp;
707 const struct ly_ctx *ctx;
710};
711
720 const char *name;
721 const char *prefix;
723 union {
724 const char *module_ns;
725 const char *module_name;
726 };
727};
728
741
742#define LYD_NODE_INNER (LYS_CONTAINER|LYS_LIST|LYS_RPC|LYS_ACTION|LYS_NOTIF)
743#define LYD_NODE_TERM (LYS_LEAF|LYS_LEAFLIST)
744#define LYD_NODE_ANY (LYS_ANYDATA)
771#define LYD_DEFAULT 0x01
772#define LYD_WHEN_TRUE 0x02
773#define LYD_NEW 0x04
774#define LYD_EXT 0x08
781struct lyd_node {
782 uint32_t hash;
786 uint32_t flags;
787 const struct lysc_node *schema;
789 struct lyd_node *next;
790 struct lyd_node *prev;
794 struct lyd_meta *meta;
795 void *priv;
796};
797
802 union {
803 struct lyd_node node;
805 struct {
806 uint32_t hash;
811 uint32_t flags;
812 const struct lysc_node *schema;
813 struct lyd_node_inner *parent;
814 struct lyd_node *next;
815 struct lyd_node *prev;
819 struct lyd_meta *meta;
820 void *priv;
821 };
822 };
824 struct lyd_node *child;
827#define LYD_HT_MIN_ITEMS 4
828};
829
834 union {
835 struct lyd_node node;
837 struct {
838 uint32_t hash;
843 uint32_t flags;
844 const struct lysc_node *schema;
845 struct lyd_node_inner *parent;
846 struct lyd_node *next;
847 struct lyd_node *prev;
851 struct lyd_meta *meta;
852 void *priv;
853 };
854 };
857};
858
863 struct lyd_node *tree;
864 const char *str;
865 const char *xml;
866 const char *json;
867 char *mem;
868};
869
875 union {
876 struct lyd_node node;
878 struct {
879 uint32_t hash;
884 uint32_t flags;
885 const struct lysc_node *schema;
886 struct lyd_node_inner *parent;
887 struct lyd_node *next;
888 struct lyd_node *prev;
892 struct lyd_meta *meta;
893 void *priv;
894 };
895 };
899};
900
907#define LYD_NAME(node) ((node)->schema ? (node)->schema->name : ((struct lyd_node_opaq *)node)->name.name)
908
918#define LYD_VALHINT_STRING 0x0001
919#define LYD_VALHINT_DECNUM 0x0002
920#define LYD_VALHINT_OCTNUM 0x0004
921#define LYD_VALHINT_HEXNUM 0x0008
922#define LYD_VALHINT_NUM64 0x0010
923#define LYD_VALHINT_BOOLEAN 0x0020
924#define LYD_VALHINT_EMPTY 0x0040
938#define LYD_NODEHINT_LIST 0x0080
939#define LYD_NODEHINT_LEAFLIST 0x0100
954#define LYD_HINT_DATA 0x01F3
958#define LYD_HINT_SCHEMA 0x01FF
970 union {
971 struct lyd_node node;
973 struct {
974 uint32_t hash;
975 uint32_t flags;
976 const struct lysc_node *schema;
977 struct lyd_node_inner *parent;
978 struct lyd_node *next;
979 struct lyd_node *prev;
983 struct lyd_meta *meta;
984 void *priv;
985 };
986 };
988 struct lyd_node *child;
991 const char *value;
992 uint32_t hints;
996 struct lyd_attr *attr;
997 const struct ly_ctx *ctx;
998};
999
1007LIBYANG_API_DECL struct lyd_node *lyd_parent(const struct lyd_node *node);
1008
1019LIBYANG_API_DECL struct lyd_node *lyd_child(const struct lyd_node *node);
1020
1031LIBYANG_API_DECL struct lyd_node *lyd_child_no_keys(const struct lyd_node *node);
1032
1042LIBYANG_API_DECL const struct lys_module *lyd_owner_module(const struct lyd_node *node);
1043
1050LIBYANG_API_DECL const struct lys_module *lyd_node_module(const struct lyd_node *node);
1051
1058LIBYANG_API_DECL ly_bool lyd_is_default(const struct lyd_node *node);
1059
1067LIBYANG_API_DECL uint32_t lyd_list_pos(const struct lyd_node *instance);
1068
1075LIBYANG_API_DECL struct lyd_node *lyd_first_sibling(const struct lyd_node *node);
1076
1084LIBYANG_API_DECL int lyd_lyb_data_length(const char *data);
1085
1095LIBYANG_API_DECL LY_ERR lyd_parse_opaq_error(const struct lyd_node *node);
1096
1106LIBYANG_API_DECL const char *lyd_value_get_canonical(const struct ly_ctx *ctx, const struct lyd_value *value);
1107
1114LIBYANG_API_DECL const char *lyd_get_value(const struct lyd_node *node);
1115
1123LIBYANG_API_DECL LY_ERR lyd_any_value_str(const struct lyd_node *any, char **value_str);
1124
1133LIBYANG_API_DECL LY_ERR lyd_any_copy_value(struct lyd_node *trg, const union lyd_any_value *value,
1134 LYD_ANYDATA_VALUETYPE value_type);
1135
1142LIBYANG_API_DECL const struct lysc_node *lyd_node_schema(const struct lyd_node *node);
1143
1159LIBYANG_API_DECL LY_ERR lyd_new_inner(struct lyd_node *parent, const struct lys_module *module, const char *name,
1160 ly_bool output, struct lyd_node **node);
1161
1175LIBYANG_API_DECL LY_ERR lyd_new_ext_inner(const struct lysc_ext_instance *ext, const char *name, struct lyd_node **node);
1176
1191LIBYANG_API_DECL LY_ERR lyd_new_list(struct lyd_node *parent, const struct lys_module *module, const char *name,
1192 ly_bool output, struct lyd_node **node, ...);
1193
1207LIBYANG_API_DECL LY_ERR lyd_new_list_bin(struct lyd_node *parent, const struct lys_module *module, const char *name,
1208 ly_bool output, struct lyd_node **node, ...);
1209
1223LIBYANG_API_DECL LY_ERR lyd_new_list_canon(struct lyd_node *parent, const struct lys_module *module, const char *name,
1224 ly_bool output, struct lyd_node **node, ...);
1225
1240LIBYANG_API_DECL LY_ERR lyd_new_ext_list(const struct lysc_ext_instance *ext, const char *name, struct lyd_node **node, ...);
1241
1256LIBYANG_API_DECL LY_ERR lyd_new_list2(struct lyd_node *parent, const struct lys_module *module, const char *name,
1257 const char *keys, ly_bool output, struct lyd_node **node);
1258
1273LIBYANG_API_DECL LY_ERR lyd_new_list3(struct lyd_node *parent, const struct lys_module *module, const char *name,
1274 const char **key_values, uint32_t *value_lengths, ly_bool output, struct lyd_node **node);
1275
1290LIBYANG_API_DECL LY_ERR lyd_new_list3_bin(struct lyd_node *parent, const struct lys_module *module, const char *name,
1291 const void **key_values, uint32_t *value_lengths, ly_bool output, struct lyd_node **node);
1292
1307LIBYANG_API_DECL LY_ERR lyd_new_list3_canon(struct lyd_node *parent, const struct lys_module *module, const char *name,
1308 const char **key_values, uint32_t *value_lengths, ly_bool output, struct lyd_node **node);
1309
1324LIBYANG_API_DECL LY_ERR lyd_new_term(struct lyd_node *parent, const struct lys_module *module, const char *name,
1325 const char *val_str, ly_bool output, struct lyd_node **node);
1326
1340LIBYANG_API_DECL LY_ERR lyd_new_term_bin(struct lyd_node *parent, const struct lys_module *module, const char *name,
1341 const void *value, size_t value_len, ly_bool output, struct lyd_node **node);
1342
1355LIBYANG_API_DECL LY_ERR lyd_new_term_canon(struct lyd_node *parent, const struct lys_module *module, const char *name,
1356 const char *val_str, ly_bool output, struct lyd_node **node);
1357
1371LIBYANG_API_DECL LY_ERR lyd_new_ext_term(const struct lysc_ext_instance *ext, const char *name, const char *val_str,
1372 struct lyd_node **node);
1373
1390LIBYANG_API_DECL LY_ERR lyd_new_any(struct lyd_node *parent, const struct lys_module *module, const char *name,
1391 const void *value, ly_bool use_value, LYD_ANYDATA_VALUETYPE value_type, ly_bool output, struct lyd_node **node);
1392
1407LIBYANG_API_DECL LY_ERR lyd_new_ext_any(const struct lysc_ext_instance *ext, const char *name, const void *value,
1408 ly_bool use_value, LYD_ANYDATA_VALUETYPE value_type, struct lyd_node **node);
1409
1424LIBYANG_API_DECL LY_ERR lyd_new_meta(const struct ly_ctx *ctx, struct lyd_node *parent, const struct lys_module *module,
1425 const char *name, const char *val_str, ly_bool clear_dflt, struct lyd_meta **meta);
1426
1439LIBYANG_API_DECL LY_ERR lyd_new_meta2(const struct ly_ctx *ctx, struct lyd_node *parent, ly_bool clear_dflt,
1440 const struct lyd_attr *attr, struct lyd_meta **meta);
1441
1454LIBYANG_API_DECL LY_ERR lyd_new_opaq(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name, const char *value,
1455 const char *prefix, const char *module_name, struct lyd_node **node);
1456
1469LIBYANG_API_DECL LY_ERR lyd_new_opaq2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name, const char *value,
1470 const char *prefix, const char *module_ns, struct lyd_node **node);
1471
1485LIBYANG_API_DECL LY_ERR lyd_new_attr(struct lyd_node *parent, const char *module_name, const char *name, const char *value,
1486 struct lyd_attr **attr);
1487
1500LIBYANG_API_DECL LY_ERR lyd_new_attr2(struct lyd_node *parent, const char *module_ns, const char *name, const char *value,
1501 struct lyd_attr **attr);
1502
1516#define LYD_NEW_PATH_UPDATE 0x01
1520#define LYD_NEW_PATH_OUTPUT 0x02
1522#define LYD_NEW_PATH_OPAQ 0x04
1525#define LYD_NEW_PATH_BIN_VALUE 0x08
1527#define LYD_NEW_PATH_CANON_VALUE 0x10
1530#define LYD_NEW_PATH_WITH_OPAQ 0x20
1563LIBYANG_API_DECL LY_ERR lyd_new_path(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path, const char *value,
1564 uint32_t options, struct lyd_node **node);
1565
1590LIBYANG_API_DECL LY_ERR lyd_new_path2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path, const void *value,
1591 size_t value_len, LYD_ANYDATA_VALUETYPE value_type, uint32_t options, struct lyd_node **new_parent,
1592 struct lyd_node **new_node);
1593
1616LIBYANG_API_DECL LY_ERR lyd_new_ext_path(struct lyd_node *parent, const struct lysc_ext_instance *ext, const char *path,
1617 const void *value, uint32_t options, struct lyd_node **node);
1618
1632#define LYD_IMPLICIT_NO_STATE 0x01
1633#define LYD_IMPLICIT_NO_CONFIG 0x02
1634#define LYD_IMPLICIT_OUTPUT 0x04
1635#define LYD_IMPLICIT_NO_DEFAULTS 0x08
1648LIBYANG_API_DECL LY_ERR lyd_new_implicit_tree(struct lyd_node *tree, uint32_t implicit_options, struct lyd_node **diff);
1649
1661LIBYANG_API_DECL LY_ERR lyd_new_implicit_all(struct lyd_node **tree, const struct ly_ctx *ctx, uint32_t implicit_options,
1662 struct lyd_node **diff);
1663
1675LIBYANG_API_DECL LY_ERR lyd_new_implicit_module(struct lyd_node **tree, const struct lys_module *module,
1676 uint32_t implicit_options, struct lyd_node **diff);
1677
1691LIBYANG_API_DECL LY_ERR lyd_change_term(struct lyd_node *term, const char *val_str);
1692
1707LIBYANG_API_DECL LY_ERR lyd_change_term_bin(struct lyd_node *term, const void *value, size_t value_len);
1708
1723LIBYANG_API_DECL LY_ERR lyd_change_term_canon(struct lyd_node *term, const char *val_str);
1724
1734LIBYANG_API_DECL LY_ERR lyd_change_meta(struct lyd_meta *meta, const char *val_str);
1735
1747LIBYANG_API_DECL LY_ERR lyd_insert_child(struct lyd_node *parent, struct lyd_node *node);
1748
1761LIBYANG_API_DECL LY_ERR lyd_insert_sibling(struct lyd_node *sibling, struct lyd_node *node, struct lyd_node **first);
1762
1774LIBYANG_API_DECL LY_ERR lyd_insert_before(struct lyd_node *sibling, struct lyd_node *node);
1775
1787LIBYANG_API_DECL LY_ERR lyd_insert_after(struct lyd_node *sibling, struct lyd_node *node);
1788
1794LIBYANG_API_DECL void lyd_unlink_siblings(struct lyd_node *node);
1795
1801LIBYANG_API_DECL void lyd_unlink_tree(struct lyd_node *node);
1802
1808LIBYANG_API_DECL void lyd_free_all(struct lyd_node *node);
1809
1815LIBYANG_API_DECL void lyd_free_siblings(struct lyd_node *node);
1816
1822LIBYANG_API_DECL void lyd_free_tree(struct lyd_node *node);
1823
1829LIBYANG_API_DECL void lyd_free_meta_single(struct lyd_meta *meta);
1830
1836LIBYANG_API_DECL void lyd_free_meta_siblings(struct lyd_meta *meta);
1837
1844LIBYANG_API_DECL void lyd_free_attr_single(const struct ly_ctx *ctx, struct lyd_attr *attr);
1845
1852LIBYANG_API_DECL void lyd_free_attr_siblings(const struct ly_ctx *ctx, struct lyd_attr *attr);
1853
1872LIBYANG_API_DECL LY_ERR lyd_value_validate(const struct ly_ctx *ctx, const struct lysc_node *schema, const char *value,
1873 size_t value_len, const struct lyd_node *ctx_node, const struct lysc_type **realtype, const char **canonical);
1874
1887LIBYANG_API_DECL LY_ERR lyd_value_compare(const struct lyd_node_term *node, const char *value, size_t value_len);
1888
1895#define LYD_COMPARE_FULL_RECURSION 0x01 /* Lists and containers are the same only in case all they children
1896 (subtree, so direct as well as indirect children) are the same. By default,
1897 containers are the same in case of the same schema node and lists are the same
1898 in case of equal keys (keyless lists do the full recursion comparison all the time). */
1899#define LYD_COMPARE_DEFAULTS 0x02 /* By default, implicit and explicit default nodes are considered to be equal. This flag
1900 changes this behavior and implicit (automatically created default node) and explicit
1901 (explicitly created node with the default value) default nodes are considered different. */
1902#define LYD_COMPARE_OPAQ 0x04 /* Opaque nodes can normally be never equal to data nodes. Using this flag even
1903 opaque nodes members are compared to data node schema and value and can result
1904 in a match. */
1918LIBYANG_API_DECL LY_ERR lyd_compare_single(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options);
1919
1931LIBYANG_API_DECL LY_ERR lyd_compare_siblings(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options);
1932
1943LIBYANG_API_DECL LY_ERR lyd_compare_meta(const struct lyd_meta *meta1, const struct lyd_meta *meta2);
1944
1957#define LYD_DUP_RECURSIVE 0x01
1959#define LYD_DUP_NO_META 0x02
1960#define LYD_DUP_WITH_PARENTS 0x04
1962#define LYD_DUP_WITH_FLAGS 0x08
1964#define LYD_DUP_NO_EXT 0x10
1965#define LYD_DUP_WITH_PRIV 0x20
1981LIBYANG_API_DECL LY_ERR lyd_dup_single(const struct lyd_node *node, struct lyd_node_inner *parent, uint32_t options,
1982 struct lyd_node **dup);
1983
1996LIBYANG_API_DECL LY_ERR lyd_dup_single_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx,
1997 struct lyd_node_inner *parent, uint32_t options, struct lyd_node **dup);
1998
2010LIBYANG_API_DECL LY_ERR lyd_dup_siblings(const struct lyd_node *node, struct lyd_node_inner *parent, uint32_t options,
2011 struct lyd_node **dup);
2012
2026LIBYANG_API_DECL LY_ERR lyd_dup_siblings_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx,
2027 struct lyd_node_inner *parent, uint32_t options, struct lyd_node **dup);
2028
2037LIBYANG_API_DECL LY_ERR lyd_dup_meta_single(const struct lyd_meta *meta, struct lyd_node *parent, struct lyd_meta **dup);
2038
2053#define LYD_MERGE_DESTRUCT 0x01
2054#define LYD_MERGE_DEFAULTS 0x02
2055#define LYD_MERGE_WITH_FLAGS 0x04
2079LIBYANG_API_DECL LY_ERR lyd_merge_tree(struct lyd_node **target, const struct lyd_node *source, uint16_t options);
2080
2102LIBYANG_API_DECL LY_ERR lyd_merge_siblings(struct lyd_node **target, const struct lyd_node *source, uint16_t options);
2103
2113typedef LY_ERR (*lyd_merge_cb)(struct lyd_node *trg_node, const struct lyd_node *src_node, void *cb_data);
2114
2130LIBYANG_API_DECL LY_ERR lyd_merge_module(struct lyd_node **target, const struct lyd_node *source, const struct lys_module *mod,
2131 lyd_merge_cb merge_cb, void *cb_data, uint16_t options);
2132
2144#define LYD_DIFF_DEFAULTS 0x01
2175LIBYANG_API_DECL LY_ERR lyd_diff_tree(const struct lyd_node *first, const struct lyd_node *second, uint16_t options,
2176 struct lyd_node **diff);
2177
2190LIBYANG_API_DECL LY_ERR lyd_diff_siblings(const struct lyd_node *first, const struct lyd_node *second, uint16_t options,
2191 struct lyd_node **diff);
2192
2201typedef LY_ERR (*lyd_diff_cb)(const struct lyd_node *diff_node, struct lyd_node *data_node, void *cb_data);
2202
2219LIBYANG_API_DECL LY_ERR lyd_diff_apply_module(struct lyd_node **data, const struct lyd_node *diff,
2220 const struct lys_module *mod, lyd_diff_cb diff_cb, void *cb_data);
2221
2232LIBYANG_API_DECL LY_ERR lyd_diff_apply_all(struct lyd_node **data, const struct lyd_node *diff);
2233
2245#define LYD_DIFF_MERGE_DEFAULTS 0x01
2273LIBYANG_API_DECL LY_ERR lyd_diff_merge_module(struct lyd_node **diff, const struct lyd_node *src_diff,
2274 const struct lys_module *mod, lyd_diff_cb diff_cb, void *cb_data, uint16_t options);
2275
2292LIBYANG_API_DECL LY_ERR lyd_diff_merge_tree(struct lyd_node **diff_first, struct lyd_node *diff_parent,
2293 const struct lyd_node *src_sibling, lyd_diff_cb diff_cb, void *cb_data, uint16_t options);
2294
2306LIBYANG_API_DECL LY_ERR lyd_diff_merge_all(struct lyd_node **diff, const struct lyd_node *src_diff, uint16_t options);
2307
2317LIBYANG_API_DECL LY_ERR lyd_diff_reverse_all(const struct lyd_node *src_diff, struct lyd_node **diff);
2318
2327LIBYANG_API_DECL const struct lyd_node_term *lyd_target(const struct ly_path *path, const struct lyd_node *tree);
2328
2332typedef enum {
2333 LYD_PATH_STD,
2338
2354LIBYANG_API_DECL char *lyd_path(const struct lyd_node *node, LYD_PATH_TYPE pathtype, char *buffer, size_t buflen);
2355
2365LIBYANG_API_DECL struct lyd_meta *lyd_find_meta(const struct lyd_meta *first, const struct lys_module *module,
2366 const char *name);
2367
2379LIBYANG_API_DECL LY_ERR lyd_find_sibling_first(const struct lyd_node *siblings, const struct lyd_node *target,
2380 struct lyd_node **match);
2381
2406LIBYANG_API_DECL LY_ERR lyd_find_sibling_val(const struct lyd_node *siblings, const struct lysc_node *schema,
2407 const char *key_or_value, size_t val_len, struct lyd_node **match);
2408
2420LIBYANG_API_DECL LY_ERR lyd_find_sibling_dup_inst_set(const struct lyd_node *siblings, const struct lyd_node *target,
2421 struct ly_set **set);
2422
2433LIBYANG_API_DECL LY_ERR lyd_find_sibling_opaq_next(const struct lyd_node *first, const char *name, struct lyd_node **match);
2434
2446LIBYANG_API_DECL LY_ERR lyxp_vars_set(struct lyxp_var **vars, const char *name, const char *value);
2447
2453LIBYANG_API_DECL void lyxp_vars_free(struct lyxp_var *vars);
2454
2472LIBYANG_API_DECL LY_ERR lyd_find_xpath(const struct lyd_node *ctx_node, const char *xpath, struct ly_set **set);
2473
2487LIBYANG_API_DECL LY_ERR lyd_find_xpath2(const struct lyd_node *ctx_node, const char *xpath, const struct lyxp_var *vars,
2488 struct ly_set **set);
2489
2504LIBYANG_API_DECL LY_ERR lyd_find_xpath3(const struct lyd_node *ctx_node, const struct lyd_node *tree, const char *xpath,
2505 const struct lyxp_var *vars, struct ly_set **set);
2506
2523LIBYANG_API_DECL LY_ERR lyd_find_xpath4(const struct lyd_node *ctx_node, const struct lyd_node *tree, const char *xpath,
2524 LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, struct ly_set **set);
2525
2537LIBYANG_API_DECL LY_ERR lyd_eval_xpath(const struct lyd_node *ctx_node, const char *xpath, ly_bool *result);
2538
2551LIBYANG_API_DECL LY_ERR lyd_eval_xpath2(const struct lyd_node *ctx_node, const char *xpath,
2552 const struct lyxp_var *vars, ly_bool *result);
2553
2569LIBYANG_API_DECL LY_ERR lyd_eval_xpath3(const struct lyd_node *ctx_node, const struct lys_module *cur_mod,
2570 const char *xpath, LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, ly_bool *result);
2575typedef enum {
2581
2604LIBYANG_API_DECL LY_ERR lyd_eval_xpath4(const struct lyd_node *ctx_node, const struct lyd_node *tree,
2605 const struct lys_module *cur_mod, const char *xpath, LY_VALUE_FORMAT format, void *prefix_data,
2606 const struct lyxp_var *vars, LY_XPATH_TYPE *ret_type, struct ly_set **node_set, char **string,
2607 long double *number, ly_bool *boolean);
2608
2618LIBYANG_API_DEF LY_ERR lyd_trim_xpath(struct lyd_node **tree, const char *xpath, const struct lyxp_var *vars);
2619
2637LIBYANG_API_DECL LY_ERR lyd_find_path(const struct lyd_node *ctx_node, const char *path, ly_bool output,
2638 struct lyd_node **match);
2639
2650LIBYANG_API_DECL LY_ERR lyd_find_target(const struct ly_path *path, const struct lyd_node *tree, struct lyd_node **match);
2651
2657LIBYANG_API_DECL int ly_time_tz_offset(void);
2665LIBYANG_API_DECL int ly_time_tz_offset_at(time_t time);
2666
2675LIBYANG_API_DECL LY_ERR ly_time_str2time(const char *value, time_t *time, char **fractions_s);
2676
2685LIBYANG_API_DECL LY_ERR ly_time_time2str(time_t time, const char *fractions_s, char **str);
2686
2694LIBYANG_API_DECL LY_ERR ly_time_str2ts(const char *value, struct timespec *ts);
2695
2703LIBYANG_API_DECL LY_ERR ly_time_ts2str(const struct timespec *ts, char **str);
2704
2705#ifdef __cplusplus
2706}
2707#endif
2708
2709#endif /* LY_TREE_DATA_H_ */
libyang context handler.
LYD_ANYDATA_VALUETYPE
List of possible value types stored in lyd_node_any.
Definition tree_data.h:543
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
Definition tree_data.h:533
@ LYD_ANYDATA_DATATREE
Definition tree_data.h:544
@ LYD_ANYDATA_JSON
Definition tree_data.h:551
@ LYD_ANYDATA_XML
Definition tree_data.h:550
@ LYD_ANYDATA_LYB
Definition tree_data.h:552
@ LYD_ANYDATA_STRING
Definition tree_data.h:547
@ LYD_LYB
Definition tree_data.h:537
@ LYD_XML
Definition tree_data.h:535
@ LYD_UNKNOWN
Definition tree_data.h:534
@ LYD_JSON
Definition tree_data.h:536
LY_ERR
libyang's error codes returned by the libyang functions.
Definition log.h:248
Structure to hold a set of (not necessary somehow connected) objects. Usually used for lyd_node,...
Definition set.h:47
YANG extension compiled instance.
struct lys_module * module
struct lysc_node * parent
const char * name
Available YANG schema tree structures representing YANG module.
YANG identity-stmt.
Compiled YANG data node.
LY_VALUE_FORMAT
All kinds of supported value formats and prefix mappings to modules.
Definition tree.h:234
Logger manipulation routines and error definitions.
uint8_t ly_bool
Type to indicate boolean value.
Definition log.h:35
const char * name
Definition metadata.h:40
struct lyd_value value
Definition metadata.h:41
Metadata structure.
Definition metadata.h:36
libyang hash table.
libyang generic macros and functions to work with YANG schema or data trees.
LIBYANG_API_DECL void lyxp_vars_free(struct lyxp_var *vars)
Free the XPath variables.
LY_VALUE_FORMAT format
Definition tree_data.h:738
struct lyd_node * next
Definition tree_data.h:789
LIBYANG_API_DECL void lyd_free_all(struct lyd_node *node)
Free all the nodes (even parents of the node) in the data tree.
LIBYANG_API_DECL LY_ERR lyd_find_sibling_opaq_next(const struct lyd_node *first, const char *name, struct lyd_node **match)
Search the given siblings for an opaque node with a specific name.
void * val_prefix_data
Definition tree_data.h:994
LIBYANG_API_DECL LY_ERR lyd_merge_siblings(struct lyd_node **target, const struct lyd_node *source, uint16_t options)
Merge the source data tree with any following siblings into the target data tree. Merge may not be co...
LIBYANG_API_DECL void lyd_free_meta_siblings(struct lyd_meta *meta)
Free the metadata instance with any following instances.
LIBYANG_API_DECL LY_ERR lyd_find_xpath(const struct lyd_node *ctx_node, const char *xpath, struct ly_set **set)
Search in the given data for instances of nodes matching the provided XPath.
LIBYANG_API_DECL const struct lyd_node_term * lyd_target(const struct ly_path *path, const struct lyd_node *tree)
Deprecated, use lyd_find_target() instead.
const char * prefix
Definition tree_data.h:721
LIBYANG_API_DECL void lyd_unlink_siblings(struct lyd_node *node)
Unlink the specified node with all the following siblings.
LIBYANG_API_DECL LY_ERR ly_time_ts2str(const struct timespec *ts, char **str)
Convert timespec into date-and-time string value.
struct in_addr addr
Definition tree_data.h:658
LIBYANG_API_DECL LY_ERR ly_time_str2time(const char *value, time_t *time, char **fractions_s)
Convert date-and-time from string to UNIX timestamp and fractions of a second.
LIBYANG_API_DECL LY_ERR lyd_new_path(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path, const char *value, uint32_t options, struct lyd_node **node)
Create a new node in the data tree based on a path. If creating anyxml/anydata nodes,...
LIBYANG_API_DECL const char * lyd_value_get_canonical(const struct ly_ctx *ctx, const struct lyd_value *value)
Get the (canonical) value of a lyd_value.
LIBYANG_API_DECL char * lyd_path(const struct lyd_node *node, LYD_PATH_TYPE pathtype, char *buffer, size_t buflen)
Generate path of the given node in the requested format.
const char * str
Definition tree_data.h:864
LIBYANG_API_DECL LY_ERR lyd_find_target(const struct ly_path *path, const struct lyd_node *tree, struct lyd_node **match)
Find the target node of a compiled path (lyd_value instance-identifier).
LYD_PATH_TYPE
Types of the different data paths.
Definition tree_data.h:2325
@ LYD_PATH_STD_NO_LAST_PRED
Definition tree_data.h:2328
@ LYD_PATH_STD
Definition tree_data.h:2326
LIBYANG_API_DECL LY_ERR lyd_new_implicit_module(struct lyd_node **tree, const struct lys_module *module, uint32_t implicit_options, struct lyd_node **diff)
Add any missing implicit nodes of one module. Default nodes with a false "when" are not added.
LIBYANG_API_DECL LY_ERR lyd_new_path2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path, const void *value, size_t value_len, LYD_ANYDATA_VALUETYPE value_type, uint32_t options, struct lyd_node **new_parent, struct lyd_node **new_node)
Create a new node in the data tree based on a path. All node types can be created.
struct lyd_value value
Definition tree_data.h:856
LIBYANG_API_DECL int ly_time_tz_offset(void)
Get current timezone (including DST setting) UTC (GMT) time offset in seconds.
LIBYANG_API_DECL LY_ERR lyd_find_path(const struct lyd_node *ctx_node, const char *path, ly_bool output, struct lyd_node **match)
Search in given data for a node uniquely identified by a path.
LIBYANG_API_DECL LY_ERR lyd_new_list_canon(struct lyd_node *parent, const struct lys_module *module, const char *name, ly_bool output, struct lyd_node **node,...)
Create a new list node in the data tree.
const struct lysc_type * realtype
Definition tree_data.h:564
LIBYANG_API_DECL LY_ERR lyd_change_meta(struct lyd_meta *meta, const char *val_str)
Change the value of a metadata instance.
struct lyd_node * tree
Definition tree_data.h:863
LIBYANG_API_DECL LY_ERR ly_time_str2ts(const char *value, struct timespec *ts)
Convert date-and-time from string to timespec.
uint32_t hints
Definition tree_data.h:737
LIBYANG_API_DECL LY_ERR lyd_new_opaq(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name, const char *value, const char *prefix, const char *module_name, struct lyd_node **node)
Create a new JSON opaque node in the data tree. To create an XML opaque node, use lyd_new_opaq2().
LIBYANG_API_DECL LY_ERR lyd_change_term(struct lyd_node *term, const char *val_str)
Change the value of a term (leaf or leaf-list) node to a string value.
LYD_ANYDATA_VALUETYPE value_type
Definition tree_data.h:898
LIBYANG_API_DECL LY_ERR lyd_new_list3(struct lyd_node *parent, const struct lys_module *module, const char *name, const char **key_values, uint32_t *value_lengths, ly_bool output, struct lyd_node **node)
Create a new list node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_new_attr(struct lyd_node *parent, const char *module_name, const char *name, const char *value, struct lyd_attr **attr)
Create new JSON attribute for an opaque data node. To create an XML attribute, use lyd_new_attr2().
LIBYANG_API_DECL LY_ERR lyd_insert_child(struct lyd_node *parent, struct lyd_node *node)
Insert a child into a parent.
LIBYANG_API_DECL struct lyd_node * lyd_first_sibling(const struct lyd_node *node)
Get the first sibling of the given node.
LIBYANG_API_DECL LY_ERR lyd_new_meta(const struct ly_ctx *ctx, struct lyd_node *parent, const struct lys_module *module, const char *name, const char *val_str, ly_bool clear_dflt, struct lyd_meta **meta)
Create new metadata.
struct lyd_attr * attr
Definition tree_data.h:996
LIBYANG_API_DECL LY_ERR lyd_new_implicit_all(struct lyd_node **tree, const struct ly_ctx *ctx, uint32_t implicit_options, struct lyd_node **diff)
Add any missing implicit nodes. Default nodes with a false "when" are not added.
LY_ERR(* lyd_diff_cb)(const struct lyd_node *diff_node, struct lyd_node *data_node, void *cb_data)
Callback for diff nodes.
Definition tree_data.h:2194
LIBYANG_API_DECL const struct lys_module * lyd_node_module(const struct lyd_node *node)
Get the module of a node. Useful mainly for opaque nodes.
LIBYANG_API_DECL LY_ERR lyd_dup_siblings_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx, struct lyd_node_inner *parent, uint32_t options, struct lyd_node **dup)
Create a copy of the specified data tree node with any following siblings. Schema references are assi...
struct lyd_node * child
Definition tree_data.h:988
LIBYANG_API_DECL LY_ERR lyd_compare_meta(const struct lyd_meta *meta1, const struct lyd_meta *meta2)
Compare 2 metadata.
const char * json
Definition tree_data.h:866
LIBYANG_API_DECL void lyd_free_tree(struct lyd_node *node)
Free (and unlink) the specified data (sub)tree.
LIBYANG_API_DECL LY_ERR lyd_diff_tree(const struct lyd_node *first, const struct lyd_node *second, uint16_t options, struct lyd_node **diff)
Learn the differences between 2 data trees.
LIBYANG_API_DECL LY_ERR lyd_new_implicit_tree(struct lyd_node *tree, uint32_t implicit_options, struct lyd_node **diff)
Add any missing implicit nodes into a data subtree. Default nodes with a false "when" are not added.
LIBYANG_API_DECL LY_ERR lyd_find_sibling_first(const struct lyd_node *siblings, const struct lyd_node *target, struct lyd_node **match)
Search in the given siblings (NOT recursively) for the first target instance with the same value....
LIBYANG_API_DECL LY_ERR lyd_eval_xpath4(const struct lyd_node *ctx_node, const struct lyd_node *tree, const struct lys_module *cur_mod, const char *xpath, LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, LY_XPATH_TYPE *ret_type, struct ly_set **node_set, char **string, long double *number, ly_bool *boolean)
Evaluate an XPath on data and return the result or convert it first to an expected result type.
LIBYANG_API_DECL LY_ERR lyd_dup_single_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx, struct lyd_node_inner *parent, uint32_t options, struct lyd_node **dup)
Create a copy of the specified data tree node. Schema references are assigned from trg_ctx.
struct lysc_type_bitenum_item ** items
Definition tree_data.h:635
LIBYANG_API_DECL LY_ERR lyd_new_ext_any(const struct lysc_ext_instance *ext, const char *name, const void *value, ly_bool use_value, LYD_ANYDATA_VALUETYPE value_type, struct lyd_node **node)
Create a new top-level any node defined in the given extension instance.
LIBYANG_API_DECL LY_ERR lyd_new_list2(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *keys, ly_bool output, struct lyd_node **node)
Create a new list node in the data tree.
const struct ly_ctx * ctx
Definition tree_data.h:997
LIBYANG_API_DECL LY_ERR lyd_new_term_canon(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *val_str, ly_bool output, struct lyd_node **node)
Create a new term node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_dup_siblings(const struct lyd_node *node, struct lyd_node_inner *parent, uint32_t options, struct lyd_node **dup)
Create a copy of the specified data tree node with any following siblings. Schema references are kept...
LIBYANG_API_DECL LY_ERR lyd_find_sibling_dup_inst_set(const struct lyd_node *siblings, const struct lyd_node *target, struct ly_set **set)
Search the given siblings for all the exact same instances of a specific node instance....
LIBYANG_API_DECL LY_ERR lyd_eval_xpath(const struct lyd_node *ctx_node, const char *xpath, ly_bool *result)
Evaluate an XPath on data and return the result converted to boolean.
LIBYANG_API_DECL const struct lysc_node * lyd_node_schema(const struct lyd_node *node)
Get schema node of a data node. Useful especially for opaque nodes.
LIBYANG_API_DECL LY_ERR lyd_new_list3_canon(struct lyd_node *parent, const struct lys_module *module, const char *name, const char **key_values, uint32_t *value_lengths, ly_bool output, struct lyd_node **node)
Create a new list node in the data tree.
LY_ERR(* lyd_merge_cb)(struct lyd_node *trg_node, const struct lyd_node *src_node, void *cb_data)
Callback for matching merge nodes.
Definition tree_data.h:2106
struct lyd_meta * meta
Definition tree_data.h:794
LIBYANG_API_DECL LY_ERR lyd_diff_merge_module(struct lyd_node **diff, const struct lyd_node *src_diff, const struct lys_module *mod, lyd_diff_cb diff_cb, void *cb_data, uint16_t options)
Merge 2 diffs into each other but restrict the operation to one module.
uint32_t flags
Definition tree_data.h:786
LIBYANG_API_DECL int lyd_lyb_data_length(const char *data)
Learn the length of LYB data.
LY_XPATH_TYPE
XPath result type.
Definition tree_data.h:2568
@ LY_XPATH_NODE_SET
Definition tree_data.h:2569
@ LY_XPATH_NUMBER
Definition tree_data.h:2571
@ LY_XPATH_STRING
Definition tree_data.h:2570
@ LY_XPATH_BOOLEAN
Definition tree_data.h:2572
const struct lysc_node * schema
Definition tree_data.h:787
struct in6_addr addr
Definition tree_data.h:681
LIBYANG_API_DECL LY_ERR lyd_new_ext_inner(const struct lysc_ext_instance *ext, const char *name, struct lyd_node **node)
Create a new top-level inner node defined in the given extension instance.
LIBYANG_API_DECL void lyd_free_siblings(struct lyd_node *node)
Free all the sibling nodes (preceding as well as succeeding).
struct lyxp_expr * exp
Definition tree_data.h:706
LIBYANG_API_DECL LY_ERR lyd_diff_merge_all(struct lyd_node **diff, const struct lyd_node *src_diff, uint16_t options)
Merge 2 diffs into each other.
const char * value
Definition tree_data.h:991
LIBYANG_API_DECL LY_ERR lyxp_vars_set(struct lyxp_var **vars, const char *name, const char *value)
Set a new XPath variable to vars.
LIBYANG_API_DECL LY_ERR lyd_new_ext_list(const struct lysc_ext_instance *ext, const char *name, struct lyd_node **node,...)
Create a new top-level list node defined in the given extension instance.
LIBYANG_API_DECL struct lyd_node * lyd_child_no_keys(const struct lyd_node *node)
Get the child pointer of a generic data node but skip its keys in case it is LYS_LIST.
LIBYANG_API_DECL LY_ERR lyd_insert_before(struct lyd_node *sibling, struct lyd_node *node)
Insert a node before another node, can be used only for user-ordered nodes. If inserting several sibl...
LIBYANG_API_DECL LY_ERR lyd_new_list(struct lyd_node *parent, const struct lys_module *module, const char *name, ly_bool output, struct lyd_node **node,...)
Create a new list node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_diff_siblings(const struct lyd_node *first, const struct lyd_node *second, uint16_t options, struct lyd_node **diff)
Learn the differences between 2 data trees including all the following siblings.
LIBYANG_API_DECL LY_ERR lyd_find_xpath4(const struct lyd_node *ctx_node, const struct lyd_node *tree, const char *xpath, LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, struct ly_set **set)
Search in the given data for instances of nodes matching the provided XPath.
const char * name
Definition tree_data.h:720
LIBYANG_API_DECL int ly_time_tz_offset_at(time_t time)
Get UTC (GMT) timezone offset in seconds at a specific timestamp (including DST setting).
void * prefix_data
Definition tree_data.h:624
LIBYANG_API_DECL LY_ERR lyd_compare_siblings(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options)
Compare 2 lists of siblings if they are equivalent.
LIBYANG_API_DECL LY_ERR ly_time_time2str(time_t time, const char *fractions_s, char **str)
Convert UNIX timestamp and fractions of a second into canonical date-and-time string value.
LIBYANG_API_DEF LY_ERR lyd_trim_xpath(struct lyd_node **tree, const char *xpath, const struct lyxp_var *vars)
Evaluate an XPath on data and free all the nodes except the subtrees selected by the expression.
LIBYANG_API_DECL LY_ERR lyd_value_compare(const struct lyd_node_term *node, const char *value, size_t value_len)
Compare the node's value with the given string value. The string value is first validated according t...
LIBYANG_API_DECL LY_ERR lyd_find_sibling_val(const struct lyd_node *siblings, const struct lysc_node *schema, const char *key_or_value, size_t val_len, struct lyd_node **match)
Search in the given siblings for the first schema instance. Uses hashes - should be used whenever pos...
uint32_t hints
Definition tree_data.h:992
LIBYANG_API_DECL LY_ERR lyd_new_ext_path(struct lyd_node *parent, const struct lysc_ext_instance *ext, const char *path, const void *value, uint32_t options, struct lyd_node **node)
Create a new node defined in the given extension instance. In case of anyxml/anydata nodes,...
LIBYANG_API_DECL LY_ERR lyd_any_copy_value(struct lyd_node *trg, const union lyd_any_value *value, LYD_ANYDATA_VALUETYPE value_type)
Copy anydata value from one node to another. Target value is freed first.
LIBYANG_API_DECL uint32_t lyd_list_pos(const struct lyd_node *instance)
Learn the relative position of a list or leaf-list instance within other instances of the same schema...
LIBYANG_API_DECL LY_ERR lyd_insert_after(struct lyd_node *sibling, struct lyd_node *node)
Insert a node after another node, can be used only for user-ordered nodes. If inserting several sibli...
LIBYANG_API_DECL LY_ERR lyd_diff_reverse_all(const struct lyd_node *src_diff, struct lyd_node **diff)
Reverse a diff and make the opposite changes. Meaning change create to delete, delete to create,...
LIBYANG_API_DECL LY_ERR lyd_new_list3_bin(struct lyd_node *parent, const struct lys_module *module, const char *name, const void **key_values, uint32_t *value_lengths, ly_bool output, struct lyd_node **node)
Create a new list node in the data tree.
struct ly_opaq_name name
Definition tree_data.h:735
LIBYANG_API_DECL LY_ERR lyd_new_term(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *val_str, ly_bool output, struct lyd_node **node)
Create a new term node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_compare_single(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options)
Compare 2 data nodes if they are equivalent.
LIBYANG_API_DECL struct lyd_meta * lyd_find_meta(const struct lyd_meta *first, const struct lys_module *module, const char *name)
Find a specific metadata.
LIBYANG_API_DECL LY_ERR lyd_merge_tree(struct lyd_node **target, const struct lyd_node *source, uint16_t options)
Merge the source data subtree into the target data tree. Merge may not be complete until validation i...
LIBYANG_API_DECL LY_ERR lyd_dup_single(const struct lyd_node *node, struct lyd_node_inner *parent, uint32_t options, struct lyd_node **dup)
Create a copy of the specified data tree node. Schema references are kept the same.
LIBYANG_API_DECL LY_ERR lyd_new_attr2(struct lyd_node *parent, const char *module_ns, const char *name, const char *value, struct lyd_attr **attr)
Create new XML attribute for an opaque data node. To create a JSON attribute, use lyd_new_attr().
uint32_t hash
Definition tree_data.h:782
void * val_prefix_data
Definition tree_data.h:739
struct in_addr addr
Definition tree_data.h:666
LIBYANG_API_DECL LY_ERR lyd_new_any(struct lyd_node *parent, const struct lys_module *module, const char *name, const void *value, ly_bool use_value, LYD_ANYDATA_VALUETYPE value_type, ly_bool output, struct lyd_node **node)
Create a new any node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_change_term_bin(struct lyd_node *term, const void *value, size_t value_len)
Change the value of a term (leaf or leaf-list) node to a binary value.
struct lyd_node * prev
Definition tree_data.h:790
LIBYANG_API_DECL LY_ERR lyd_find_xpath2(const struct lyd_node *ctx_node, const char *xpath, const struct lyxp_var *vars, struct ly_set **set)
Search in the given data for instances of nodes matching the provided XPath.
LIBYANG_API_DECL LY_ERR lyd_new_list_bin(struct lyd_node *parent, const struct lys_module *module, const char *name, ly_bool output, struct lyd_node **node,...)
Create a new list node in the data tree.
LIBYANG_API_DECL const struct lys_module * lyd_owner_module(const struct lyd_node *node)
Get the owner module of the data node. It is the module of the top-level schema node....
struct lyd_node * child
Definition tree_data.h:824
LIBYANG_API_DECL const char * lyd_get_value(const struct lyd_node *node)
Get the (canonical) value of a data node.
const char * xml
Definition tree_data.h:865
LIBYANG_API_DECL void lyd_free_attr_siblings(const struct ly_ctx *ctx, struct lyd_attr *attr)
Free the attribute with any following attributes.
LIBYANG_API_DECL LY_ERR lyd_parse_opaq_error(const struct lyd_node *node)
Check node parsed into an opaque node for the reason (error) why it could not be parsed as data node.
LY_VALUE_FORMAT format
Definition tree_data.h:709
void * priv
Definition tree_data.h:795
LIBYANG_API_DECL ly_bool lyd_is_default(const struct lyd_node *node)
Check whether a node value equals to its default one.
LIBYANG_API_DECL LY_ERR lyd_diff_merge_tree(struct lyd_node **diff_first, struct lyd_node *diff_parent, const struct lyd_node *src_sibling, lyd_diff_cb diff_cb, void *cb_data, uint16_t options)
Merge 2 diff trees into each other.
LIBYANG_API_DECL LY_ERR lyd_value_validate(const struct ly_ctx *ctx, const struct lysc_node *schema, const char *value, size_t value_len, const struct lyd_node *ctx_node, const struct lysc_type **realtype, const char **canonical)
Check type restrictions applicable to the particular leaf/leaf-list with the given string value.
LIBYANG_API_DECL LY_ERR lyd_new_ext_term(const struct lysc_ext_instance *ext, const char *name, const char *val_str, struct lyd_node **node)
Create a new top-level term node defined in the given extension instance.
LIBYANG_API_DECL LY_ERR lyd_new_term_bin(struct lyd_node *parent, const struct lys_module *module, const char *name, const void *value, size_t value_len, ly_bool output, struct lyd_node **node)
Create a new term node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_new_inner(struct lyd_node *parent, const struct lys_module *module, const char *name, ly_bool output, struct lyd_node **node)
Create a new inner node in the data tree.
struct ly_ht * children_ht
Definition tree_data.h:825
LY_VALUE_FORMAT format
Definition tree_data.h:993
LIBYANG_API_DECL void lyd_free_attr_single(const struct ly_ctx *ctx, struct lyd_attr *attr)
Free a single attribute.
LIBYANG_API_DECL LY_ERR lyd_diff_apply_module(struct lyd_node **data, const struct lyd_node *diff, const struct lys_module *mod, lyd_diff_cb diff_cb, void *cb_data)
Apply the whole diff on a data tree but restrict the operation to one module.
const char * value
Definition tree_data.h:736
LIBYANG_API_DECL LY_ERR lyd_dup_meta_single(const struct lyd_meta *meta, struct lyd_node *parent, struct lyd_meta **dup)
Create a copy of the metadata.
const struct ly_ctx * ctx
Definition tree_data.h:707
union lyd_any_value value
Definition tree_data.h:897
struct lyd_attr * next
Definition tree_data.h:734
LIBYANG_API_DECL LY_ERR lyd_diff_apply_all(struct lyd_node **data, const struct lyd_node *diff)
Apply the whole diff tree on a data tree.
LIBYANG_API_DECL LY_ERR lyd_new_meta2(const struct ly_ctx *ctx, struct lyd_node *parent, ly_bool clear_dflt, const struct lyd_attr *attr, struct lyd_meta **meta)
Create new metadata from an opaque node attribute if possible.
uint32_t hints
Definition tree_data.h:620
LIBYANG_API_DECL LY_ERR lyd_eval_xpath2(const struct lyd_node *ctx_node, const char *xpath, const struct lyxp_var *vars, ly_bool *result)
Evaluate an XPath on data and return the result converted to boolean.
LIBYANG_API_DECL struct lyd_node * lyd_parent(const struct lyd_node *node)
Get the generic parent pointer of a data node.
struct in6_addr addr
Definition tree_data.h:689
LIBYANG_API_DECL LY_ERR lyd_find_xpath3(const struct lyd_node *ctx_node, const struct lyd_node *tree, const char *xpath, const struct lyxp_var *vars, struct ly_set **set)
Search in the given data for instances of nodes matching the provided XPath.
struct lyd_value value
Definition tree_data.h:616
const char * _canonical
Definition tree_data.h:561
struct lyd_node_opaq * parent
Definition tree_data.h:733
LY_VALUE_FORMAT format
Definition tree_data.h:621
LIBYANG_API_DECL LY_ERR lyd_merge_module(struct lyd_node **target, const struct lyd_node *source, const struct lys_module *mod, lyd_merge_cb merge_cb, void *cb_data, uint16_t options)
Merge all the nodes of a module from source data tree into the target data tree. Merge may not be com...
struct lyd_node_inner * parent
Definition tree_data.h:788
struct ly_opaq_name name
Definition tree_data.h:990
LIBYANG_API_DECL void lyd_unlink_tree(struct lyd_node *node)
Unlink the specified data subtree.
LIBYANG_API_DECL void lyd_free_meta_single(struct lyd_meta *meta)
Free a single metadata instance.
LIBYANG_API_DECL LY_ERR lyd_change_term_canon(struct lyd_node *term, const char *val_str)
Change the value of a term (leaf or leaf-list) node to a canonical string value.
LIBYANG_API_DECL LY_ERR lyd_eval_xpath3(const struct lyd_node *ctx_node, const struct lys_module *cur_mod, const char *xpath, LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, ly_bool *result)
Evaluate an XPath on data and return the result converted to boolean.
LIBYANG_API_DECL LY_ERR lyd_insert_sibling(struct lyd_node *sibling, struct lyd_node *node, struct lyd_node **first)
Insert a node into siblings.
const struct lysc_node * ctx_node
Definition tree_data.h:625
LIBYANG_API_DECL struct lyd_node * lyd_child(const struct lyd_node *node)
Get the child pointer of a generic data node.
LIBYANG_API_DECL LY_ERR lyd_any_value_str(const struct lyd_node *any, char **value_str)
Get anydata string value.
LIBYANG_API_DECL LY_ERR lyd_new_opaq2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name, const char *value, const char *prefix, const char *module_ns, struct lyd_node **node)
Create a new XML opaque node in the data tree. To create a JSON opaque node, use lyd_new_opaq().
Generic prefix and namespace mapping, meaning depends on the format.
Definition tree_data.h:719
Generic attribute structure.
Definition tree_data.h:732
Generic structure for a data node.
Definition tree_data.h:781
Data node structure for the anydata data tree nodes - anydata or anyxml.
Definition tree_data.h:874
Data node structure for the inner data tree nodes - containers, lists, RPCs, actions and Notification...
Definition tree_data.h:801
Data node structure for unparsed (opaque) nodes.
Definition tree_data.h:969
Data node structure for the terminal data tree nodes - leaves and leaf-lists.
Definition tree_data.h:833
YANG data representation.
Definition tree_data.h:560
Special lyd_value structure for built-in binary values.
Definition tree_data.h:642
Special lyd_value structure for built-in bits values.
Definition tree_data.h:631
Special lyd_value structure for ietf-yang-types date-and-time values.
Definition tree_data.h:696
Special lyd_value structure for ietf-inet-types ipv4-address values.
Definition tree_data.h:657
Special lyd_value structure for ietf-inet-types ipv4-address-no-zone values.
Definition tree_data.h:650
Special lyd_value structure for ietf-inet-types ipv4-prefix values.
Definition tree_data.h:665
Special lyd_value structure for ietf-inet-types ipv6-address values.
Definition tree_data.h:680
Special lyd_value structure for ietf-inet-types ipv6-address-no-zone values.
Definition tree_data.h:673
Special lyd_value structure for ietf-inet-types ipv6-prefix values.
Definition tree_data.h:688
Special lyd_value structure for built-in union values.
Definition tree_data.h:615
Special lyd_value structure for ietf-yang-types xpath1.0 values.
Definition tree_data.h:705
union for anydata/anyxml value representation.
Definition tree_data.h:862
libyang representation of YANG schema trees.