libyang 5.4.9
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
15
16#ifndef LY_TREE_DATA_H_
17#define LY_TREE_DATA_H_
18
19/* socket/ip includes in ly_config.h */
20
21#include <stddef.h>
22#include <stdint.h>
23#include <time.h>
24
25#include "log.h"
26#include "ly_config.h"
27#include "tree.h"
28#include "tree_schema.h"
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34struct ly_ctx;
35struct ly_path;
36struct ly_set;
37struct lyd_node;
38struct lyd_node_opaq;
39struct lyd_node_term;
40struct timespec;
41struct lyxp_var;
42struct rb_node;
43
199
315
368
380
388
389/* *INDENT-OFF* */
390
416#define LYD_TREE_DFS_BEGIN(START, ELEM) \
417 { ly_bool LYD_TREE_DFS_continue = 0; struct lyd_node *LYD_TREE_DFS_next; \
418 for ((ELEM) = (LYD_TREE_DFS_next) = (struct lyd_node *)(START); \
419 (ELEM); \
420 (ELEM) = (LYD_TREE_DFS_next), LYD_TREE_DFS_continue = 0)
421
437#define LYD_TREE_DFS_END(START, ELEM) \
438 /* select element for the next run - children first */ \
439 if (LYD_TREE_DFS_continue) { \
440 (LYD_TREE_DFS_next) = NULL; \
441 } else { \
442 (LYD_TREE_DFS_next) = lyd_child(ELEM); \
443 }\
444 if (!(LYD_TREE_DFS_next)) { \
445 /* no children */ \
446 if ((ELEM) == (struct lyd_node *)(START)) { \
447 /* we are done, (START) has no children */ \
448 break; \
449 } \
450 /* try siblings */ \
451 (LYD_TREE_DFS_next) = (ELEM)->next; \
452 } \
453 while (!(LYD_TREE_DFS_next)) { \
454 /* parent is already processed, go to its sibling */ \
455 (ELEM) = (struct lyd_node *)(ELEM)->parent; \
456 /* no siblings, go back through parents */ \
457 if ((ELEM)->parent == (START)->parent) { \
458 /* we are done, no next element to process */ \
459 break; \
460 } \
461 (LYD_TREE_DFS_next) = (ELEM)->next; \
462 } }
463
471#define LYD_LIST_FOR_INST(START, SCHEMA, ELEM) \
472 for (lyd_find_sibling_val(START, SCHEMA, NULL, 0, &(ELEM)); \
473 (ELEM) && ((ELEM)->schema == (SCHEMA)); \
474 (ELEM) = (ELEM)->next)
475
484#define LYD_LIST_FOR_INST_SAFE(START, SCHEMA, NEXT, ELEM) \
485 for ((NEXT) = (ELEM) = NULL, lyd_find_sibling_val(START, SCHEMA, NULL, 0, &(ELEM)); \
486 (ELEM) && ((ELEM)->schema == (SCHEMA)) ? ((NEXT) = (ELEM)->next, 1) : 0; \
487 (ELEM) = (NEXT))
488
489/* *INDENT-ON* */
490
494#define LYD_CTX(node) ((node)->schema ? (node)->schema->module->ctx : ((const struct lyd_node_opaq *)(node))->ctx)
495
503#define LYD_NODE_IS_ALONE(NODE) \
504 (((NODE)->prev == NODE) || \
505 (((NODE)->prev->schema != (NODE)->schema) && (!(NODE)->next || ((NODE)->schema != (NODE)->next->schema))))
506
517
519
523struct lyd_value {
524 const char *_canonical;
527 const struct lysc_type *realtype;
534
535 union {
536 int8_t boolean;
537 int64_t dec64;
538 int8_t int8;
539 int16_t int16;
540 int32_t int32;
541 int64_t int64;
542 uint8_t uint8;
543 uint16_t uint16;
544 uint32_t uint32;
545 uint64_t uint64;
547 struct lysc_ident *ident;
548 struct ly_path *target;
550 struct lyd_value_union *subvalue;
551
552 void *dyn_mem;
553 uint8_t fixed_mem[LYD_VALUE_FIXED_MEM_SIZE];
554 };
555
556};
557
566#define LYD_VALUE_GET(value, type_val) \
567 ((sizeof *(type_val) > LYD_VALUE_FIXED_MEM_SIZE) \
568 ? ((type_val) = (((value)->dyn_mem))) \
569 : ((type_val) = ((void *)((value)->fixed_mem))))
570
590
601
606 void *data;
607 uint32_t size;
608};
609
614 struct in_addr addr;
615};
616
621 struct in_addr addr;
622 const char *zone;
623};
624
629 struct in_addr addr;
630 uint8_t prefix;
631};
632
637 struct in6_addr addr;
638};
639
644 struct in6_addr addr;
645 const char *zone;
646};
647
652 struct in6_addr addr;
653 uint8_t prefix;
654};
655
664
672
677 time_t time;
678};
679
688
693 uint32_t seconds;
695};
696
701 struct lyxp_expr *exp;
702 const struct ly_ctx *ctx;
705};
706
711 struct rb_node *rbt;
712};
713
722 const char *name;
723 const char *prefix;
724
725 union {
726 const char *module_ns;
727 const char *module_name;
728 };
729};
730
743
744#define LYD_NODE_INNER (LYS_CONTAINER|LYS_LIST|LYS_RPC|LYS_ACTION|LYS_NOTIF)
745#define LYD_NODE_TERM (LYS_LEAF|LYS_LEAFLIST)
746#define LYD_NODE_ANY (LYS_ANYDATA)
747
772
773#define LYD_DEFAULT 0x01
774#define LYD_WHEN_TRUE 0x02
775#define LYD_NEW 0x04
776#define LYD_EXT 0x08
777
779
783struct lyd_node {
784 uint32_t hash;
788 uint32_t flags;
789 const struct lysc_node *schema;
790 struct lyd_node *parent;
791 struct lyd_node *next;
792 struct lyd_node *prev;
796 struct lyd_meta *meta;
797 void *priv;
798};
799
804 union {
805 struct lyd_node node;
806
807 struct {
808 uint32_t hash;
813 uint32_t flags;
814 const struct lysc_node *schema;
815 struct lyd_node *parent;
816 struct lyd_node *next;
817 struct lyd_node *prev;
821 struct lyd_meta *meta;
822 void *priv;
823 };
824 };
825
826 struct lyd_node *child;
828
829#define LYD_HT_MIN_ITEMS 4
830};
831
836 union {
837 struct lyd_node node;
838
839 struct {
840 uint32_t hash;
845 uint32_t flags;
846 const struct lysc_node *schema;
847 struct lyd_node *parent;
848 struct lyd_node *next;
849 struct lyd_node *prev;
853 struct lyd_meta *meta;
854 void *priv;
855 };
856 };
857
859};
860
865 union {
866 struct lyd_node node;
867
868 struct {
869 uint32_t hash;
874 uint32_t flags;
875 const struct lysc_node *schema;
876 struct lyd_node *parent;
877 struct lyd_node *next;
878 struct lyd_node *prev;
882 struct lyd_meta *meta;
883 void *priv;
884 };
885 };
886
887 struct lyd_node *child;
889 const char *value;
890 uint32_t hints;
892};
893
900#define LYD_NAME(node) ((node)->schema ? (node)->schema->name : ((struct lyd_node_opaq *)node)->name.name)
901
911#define LYD_VALHINT_STRING 0x0001
912#define LYD_VALHINT_DECNUM 0x0002
913#define LYD_VALHINT_OCTNUM 0x0004
914#define LYD_VALHINT_HEXNUM 0x0008
915#define LYD_VALHINT_NUM64 0x0010
916#define LYD_VALHINT_BOOLEAN 0x0020
917#define LYD_VALHINT_EMPTY 0x0040
918#define LYD_VALHINT_STRING_DATATYPES 0x0080
922
932#define LYD_NODEHINT_LIST 0x1000
933#define LYD_NODEHINT_LEAFLIST 0x2000
934#define LYD_NODEHINT_CONTAINER 0x4000
938
949#define LYD_HINT_DATA 0xFFF3
953#define LYD_HINT_SCHEMA 0xFFFF
960
965 union {
966 struct lyd_node node;
967
968 struct {
969 uint32_t hash;
970 uint32_t flags;
971 const struct lysc_node *schema;
972 struct lyd_node *parent;
973 struct lyd_node *next;
974 struct lyd_node *prev;
978 struct lyd_meta *meta;
979 void *priv;
980 };
981 };
982
983 struct lyd_node *child;
984
986 const char *value;
987 uint32_t hints;
990
991 struct lyd_attr *attr;
992 const struct ly_ctx *ctx;
993};
994
1010
1018#define lyd_parent(node) ((node) ? (node)->parent : NULL)
1019
1031static inline struct lyd_node *
1032lyd_child(const struct lyd_node *node)
1033{
1034 if (!node) {
1035 return NULL;
1036 }
1037
1038 if (!node->schema) {
1039 /* opaq node */
1040 return ((const struct lyd_node_opaq *)node)->child;
1041 }
1042
1044 return ((const struct lyd_node_inner *)node)->child;
1045 }
1046
1047 return NULL;
1048}
1049
1061static inline struct lyd_node *
1062lyd_child_any(const struct lyd_node *node)
1063{
1064 if (!node) {
1065 return NULL;
1066 }
1067
1068 if (!node->schema) {
1069 /* opaq node */
1070 return ((const struct lyd_node_opaq *)node)->child;
1071 }
1072
1074 return ((const struct lyd_node_inner *)node)->child;
1075 }
1076
1077 return NULL;
1078}
1079
1088LIBYANG_API_DECL struct lyd_node *lyd_child_no_keys(const struct lyd_node *node);
1089
1099LIBYANG_API_DECL const struct lys_module *lyd_owner_module(const struct lyd_node *node);
1100
1107LIBYANG_API_DECL const struct lys_module *lyd_node_module(const struct lyd_node *node);
1108
1115LIBYANG_API_DECL ly_bool lyd_is_default(const struct lyd_node *node);
1116
1124LIBYANG_API_DECL uint32_t lyd_list_pos(const struct lyd_node *instance);
1125
1132LIBYANG_API_DECL struct lyd_node *lyd_first_sibling(const struct lyd_node *node);
1133
1143LIBYANG_API_DECL LY_ERR lyd_parse_opaq_error(const struct lyd_node *node);
1144
1154LIBYANG_API_DECL const char *lyd_value_get_canonical(const struct ly_ctx *ctx, const struct lyd_value *value);
1155
1162static inline const char *
1163lyd_get_value(const struct lyd_node *node)
1164{
1165 if (!node) {
1166 return NULL;
1167 }
1168
1169 if (!node->schema) {
1170 return ((const struct lyd_node_opaq *)node)->value;
1171 } else if (node->schema->nodetype & LYD_NODE_TERM) {
1172 const struct lyd_value *value = &((const struct lyd_node_term *)node)->value;
1173
1175 }
1176
1177 return NULL;
1178}
1179
1188LIBYANG_API_DECL LY_ERR lyd_any_value_str(const struct lyd_node *any, LYD_FORMAT format, char **value_str);
1189
1201LIBYANG_API_DECL LY_ERR lyd_any_copy_value(struct lyd_node *trg, const struct lyd_node *child, const char *value,
1202 uint32_t hints);
1203
1210LIBYANG_API_DECL const struct lysc_node *lyd_node_schema(const struct lyd_node *node);
1211
1219LIBYANG_API_DECL ly_bool lyd_meta_is_internal(const struct lyd_meta *meta);
1220
1234LIBYANG_API_DECL LY_ERR lyd_new_inner(struct lyd_node *parent, const struct lys_module *module, const char *name,
1235 ly_bool output, struct lyd_node **node);
1236
1257
1258#define LYD_NEW_VAL_OUTPUT 0x01
1260#define LYD_NEW_VAL_STORE_ONLY 0x02
1261#define LYD_NEW_VAL_CANON 0x04
1264#define LYD_NEW_META_CLEAR_DFLT 0x08
1265#define LYD_NEW_PATH_UPDATE 0x10
1269#define LYD_NEW_PATH_OPAQ 0x20
1273#define LYD_NEW_PATH_WITH_OPAQ 0x40
1274#define LYD_NEW_PATH_ANY_DATATREE 0x80
1275#define LYD_NEW_ANY_USE_VALUE 0x0100
1276
1278
1291LIBYANG_API_DECL LY_ERR lyd_new_list(struct lyd_node *parent, const struct lys_module *module, const char *name,
1292 uint32_t options, struct lyd_node **node, ...);
1293
1307LIBYANG_API_DECL LY_ERR lyd_new_list2(struct lyd_node *parent, const struct lys_module *module, const char *name,
1308 const char *keys, uint32_t options, struct lyd_node **node);
1309
1323LIBYANG_API_DECL LY_ERR lyd_new_list3(struct lyd_node *parent, const struct lys_module *module, const char *name,
1324 const void **key_values, uint32_t *value_sizes_bits, uint32_t options, struct lyd_node **node);
1325
1337LIBYANG_API_DECL LY_ERR lyd_new_term(struct lyd_node *parent, const struct lys_module *module, const char *name,
1338 const char *value, uint32_t options, struct lyd_node **node);
1339
1353LIBYANG_API_DECL LY_ERR lyd_new_any(struct lyd_node *parent, const struct lys_module *module, const char *name,
1354 const struct lyd_node *child, const char *value, uint32_t hints, uint32_t options, struct lyd_node **node);
1355
1370LIBYANG_API_DECL LY_ERR lyd_new_meta(const struct ly_ctx *ctx, struct lyd_node *parent, const struct lys_module *module,
1371 const char *name, const char *val_str, uint32_t options, struct lyd_meta **meta);
1372
1385LIBYANG_API_DECL LY_ERR lyd_new_meta2(const struct ly_ctx *ctx, struct lyd_node *parent, uint32_t options,
1386 const struct lyd_attr *attr, struct lyd_meta **meta);
1387
1400LIBYANG_API_DECL LY_ERR lyd_new_opaq(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name, const char *value,
1401 const char *prefix, const char *module_name, struct lyd_node **node);
1402
1415LIBYANG_API_DECL LY_ERR lyd_new_opaq2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *name, const char *value,
1416 const char *prefix, const char *module_ns, struct lyd_node **node);
1417
1431LIBYANG_API_DECL LY_ERR lyd_new_attr(struct lyd_node *parent, const char *module_name, const char *name, const char *value,
1432 struct lyd_attr **attr);
1433
1446LIBYANG_API_DECL LY_ERR lyd_new_attr2(struct lyd_node *parent, const char *module_ns, const char *name, const char *value,
1447 struct lyd_attr **attr);
1448
1477LIBYANG_API_DECL LY_ERR lyd_new_path(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path, const char *value,
1478 uint32_t options, struct lyd_node **node);
1479
1505LIBYANG_API_DECL LY_ERR lyd_new_path2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path,
1506 const void *value, uint64_t value_size_bits, uint32_t any_hints, uint32_t options, struct lyd_node **new_parent,
1507 struct lyd_node **new_node);
1508
1521
1522#define LYD_IMPLICIT_NO_STATE 0x01
1523#define LYD_IMPLICIT_NO_CONFIG 0x02
1524#define LYD_IMPLICIT_OUTPUT 0x04
1525#define LYD_IMPLICIT_NO_DEFAULTS 0x08
1527
1529
1538LIBYANG_API_DECL LY_ERR lyd_new_implicit_tree(struct lyd_node *tree, uint32_t implicit_options, struct lyd_node **diff);
1539
1551LIBYANG_API_DECL LY_ERR lyd_new_implicit_all(struct lyd_node **tree, const struct ly_ctx *ctx, uint32_t implicit_options,
1552 struct lyd_node **diff);
1553
1565LIBYANG_API_DECL LY_ERR lyd_new_implicit_module(struct lyd_node **tree, const struct lys_module *module,
1566 uint32_t implicit_options, struct lyd_node **diff);
1567
1581LIBYANG_API_DECL LY_ERR lyd_change_term(struct lyd_node *term, const char *val_str);
1582
1597LIBYANG_API_DECL LY_ERR lyd_change_term_canon(struct lyd_node *term, const char *val_str);
1598
1608LIBYANG_API_DECL LY_ERR lyd_change_meta(struct lyd_meta *meta, const char *val_str);
1609
1621LIBYANG_API_DECL LY_ERR lyd_insert_child(struct lyd_node *parent, struct lyd_node *node);
1622
1635LIBYANG_API_DECL LY_ERR lyd_insert_sibling(struct lyd_node *sibling, struct lyd_node *node, struct lyd_node **first);
1636
1648LIBYANG_API_DECL LY_ERR lyd_insert_before(struct lyd_node *sibling, struct lyd_node *node);
1649
1661LIBYANG_API_DECL LY_ERR lyd_insert_after(struct lyd_node *sibling, struct lyd_node *node);
1662
1670LIBYANG_API_DECL LY_ERR lyd_unlink_siblings(struct lyd_node *node);
1671
1679LIBYANG_API_DECL LY_ERR lyd_unlink_tree(struct lyd_node *node);
1680
1686LIBYANG_API_DECL void lyd_free_all(struct lyd_node *node);
1687
1693LIBYANG_API_DECL void lyd_free_siblings(struct lyd_node *node);
1694
1700LIBYANG_API_DECL void lyd_free_tree(struct lyd_node *node);
1701
1707LIBYANG_API_DECL void lyd_free_meta_single(struct lyd_meta *meta);
1708
1714LIBYANG_API_DECL void lyd_free_meta_siblings(struct lyd_meta *meta);
1715
1722LIBYANG_API_DECL void lyd_free_attr_single(const struct ly_ctx *ctx, struct lyd_attr *attr);
1723
1730LIBYANG_API_DECL void lyd_free_attr_siblings(const struct ly_ctx *ctx, struct lyd_attr *attr);
1731
1749LIBYANG_API_DECL LY_ERR lyd_value_validate(const struct lysc_node *schema, const char *value, uint32_t value_len,
1750 const struct lyd_node *ctx_node, const struct lysc_type **realtype, const char **canonical);
1751
1769LIBYANG_API_DECL LY_ERR lyd_value_validate_dflt(const struct lysc_node *schema, const char *value,
1770 struct lysc_prefix *prefixes, const struct lyd_node *ctx_node, const struct lysc_type **realtype,
1771 const char **canonical);
1772
1785LIBYANG_API_DECL LY_ERR lyd_value_compare(const struct lyd_node_term *node, const char *value, uint32_t value_len);
1786
1793#define LYD_COMPARE_FULL_RECURSION 0x01 /* Lists and containers are the same only in case all they children
1794 (subtree, so direct as well as indirect children) are the same. By default,
1795 containers are the same in case of the same schema node and lists are the same
1796 in case of equal keys (keyless lists do the full recursion comparison all the time). */
1797#define LYD_COMPARE_DEFAULTS 0x02 /* By default, implicit and explicit default nodes are considered to be equal. This flag
1798 changes this behavior and implicit (automatically created default node) and explicit
1799 (explicitly created node with the default value) default nodes are considered different. */
1800#define LYD_COMPARE_OPAQ 0x04 /* Opaque nodes can normally be never equal to data nodes. Using this flag even
1801 opaque nodes members are compared to data node schema and value and can result
1802 in a match. */
1804
1816LIBYANG_API_DECL LY_ERR lyd_compare_single(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options);
1817
1829LIBYANG_API_DECL LY_ERR lyd_compare_siblings(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options);
1830
1841LIBYANG_API_DECL LY_ERR lyd_compare_meta(const struct lyd_meta *meta1, const struct lyd_meta *meta2);
1842
1855#define LYD_DUP_RECURSIVE 0x01
1857#define LYD_DUP_NO_META 0x02
1859#define LYD_DUP_WITH_PARENTS 0x04
1861#define LYD_DUP_WITH_FLAGS 0x08
1863#define LYD_DUP_NO_EXT 0x10
1864#define LYD_DUP_WITH_PRIV 0x20
1866#define LYD_DUP_NO_LYDS 0x40
1870
1872
1884LIBYANG_API_DECL LY_ERR lyd_dup_single(const struct lyd_node *node, struct lyd_node *parent, uint32_t options,
1885 struct lyd_node **dup);
1886
1900LIBYANG_API_DECL LY_ERR lyd_dup_single_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx,
1901 struct lyd_node *parent, uint32_t options, struct lyd_node **dup);
1902
1914LIBYANG_API_DECL LY_ERR lyd_dup_siblings(const struct lyd_node *node, struct lyd_node *parent, uint32_t options,
1915 struct lyd_node **dup);
1916
1931LIBYANG_API_DECL LY_ERR lyd_dup_siblings_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx,
1932 struct lyd_node *parent, uint32_t options, struct lyd_node **dup);
1933
1942LIBYANG_API_DECL LY_ERR lyd_dup_meta_single(const struct lyd_meta *meta, struct lyd_node *parent, struct lyd_meta **dup);
1943
1957
1958#define LYD_MERGE_DESTRUCT 0x01
1959#define LYD_MERGE_DEFAULTS 0x02
1960#define LYD_MERGE_WITH_FLAGS 0x04
1961
1963
1984LIBYANG_API_DECL LY_ERR lyd_merge_tree(struct lyd_node **target, const struct lyd_node *source, uint16_t options);
1985
2007LIBYANG_API_DECL LY_ERR lyd_merge_siblings(struct lyd_node **target, const struct lyd_node *source, uint16_t options);
2008
2018typedef LY_ERR (*lyd_merge_cb)(struct lyd_node *trg_node, const struct lyd_node *src_node, void *cb_data);
2019
2035LIBYANG_API_DECL LY_ERR lyd_merge_module(struct lyd_node **target, const struct lyd_node *source, const struct lys_module *mod,
2036 lyd_merge_cb merge_cb, void *cb_data, uint16_t options);
2037
2051
2052#define LYD_DIFF_DEFAULTS 0x01
2055#define LYD_DIFF_META 0x02
2058
2060
2086LIBYANG_API_DECL LY_ERR lyd_diff_tree(const struct lyd_node *first, const struct lyd_node *second, uint16_t options,
2087 struct lyd_node **diff);
2088
2101LIBYANG_API_DECL LY_ERR lyd_diff_siblings(const struct lyd_node *first, const struct lyd_node *second, uint16_t options,
2102 struct lyd_node **diff);
2103
2112typedef LY_ERR (*lyd_diff_cb)(const struct lyd_node *diff_node, struct lyd_node *data_node, void *cb_data);
2113
2130LIBYANG_API_DECL LY_ERR lyd_diff_apply_module(struct lyd_node **data, const struct lyd_node *diff,
2131 const struct lys_module *mod, lyd_diff_cb diff_cb, void *cb_data);
2132
2143LIBYANG_API_DECL LY_ERR lyd_diff_apply_all(struct lyd_node **data, const struct lyd_node *diff);
2144
2155
2156#define LYD_DIFF_MERGE_DEFAULTS 0x01
2157
2159
2184LIBYANG_API_DECL LY_ERR lyd_diff_merge_module(struct lyd_node **diff, const struct lyd_node *src_diff,
2185 const struct lys_module *mod, lyd_diff_cb diff_cb, void *cb_data, uint16_t options);
2186
2203LIBYANG_API_DECL LY_ERR lyd_diff_merge_tree(struct lyd_node **diff_first, struct lyd_node *diff_parent,
2204 const struct lyd_node *src_sibling, lyd_diff_cb diff_cb, void *cb_data, uint16_t options);
2205
2217LIBYANG_API_DECL LY_ERR lyd_diff_merge_all(struct lyd_node **diff, const struct lyd_node *src_diff, uint16_t options);
2218
2226 * @return LY_ERR on error.
2228LIBYANG_API_DECL LY_ERR lyd_diff_reverse_all(const struct lyd_node *src_diff, struct lyd_node **diff);
2232
2233typedef enum {
2234 LYD_PATH_STD,
2239
2255LIBYANG_API_DECL char *lyd_path(const struct lyd_node *node, LYD_PATH_TYPE pathtype, char *buffer, size_t buflen);
2256
2266LIBYANG_API_DECL struct lyd_meta *lyd_find_meta(const struct lyd_meta *first, const struct lys_module *module,
2267 const char *name);
2268
2280LIBYANG_API_DECL LY_ERR lyd_find_sibling_first(const struct lyd_node *siblings, const struct lyd_node *target,
2281 struct lyd_node **match);
2282
2307LIBYANG_API_DECL LY_ERR lyd_find_sibling_val(const struct lyd_node *siblings, const struct lysc_node *schema,
2308 const char *key_or_value, uint32_t val_len, struct lyd_node **match);
2309
2321LIBYANG_API_DECL LY_ERR lyd_find_sibling_dup_inst_set(const struct lyd_node *siblings, const struct lyd_node *target,
2322 struct ly_set **set);
2323
2334LIBYANG_API_DECL LY_ERR lyd_find_sibling_opaq_next(const struct lyd_node *first, const char *name, struct lyd_node **match);
2335
2347LIBYANG_API_DECL LY_ERR lyxp_vars_set(struct lyxp_var **vars, const char *name, const char *value);
2348
2354LIBYANG_API_DECL void lyxp_vars_free(struct lyxp_var *vars);
2355
2375LIBYANG_API_DECL LY_ERR lyd_find_xpath(const struct lyd_node *ctx_node, const char *xpath, struct ly_set **set);
2376
2390LIBYANG_API_DECL LY_ERR lyd_find_xpath2(const struct lyd_node *ctx_node, const char *xpath, const struct lyxp_var *vars,
2391 struct ly_set **set);
2392
2410LIBYANG_API_DECL LY_ERR lyd_find_xpath3(const struct lyd_node *ctx_node, const struct lyd_node *tree, const char *xpath,
2411 LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, struct ly_set **set);
2412
2424LIBYANG_API_DECL LY_ERR lyd_eval_xpath(const struct lyd_node *ctx_node, const char *xpath, ly_bool *result);
2425
2438LIBYANG_API_DECL LY_ERR lyd_eval_xpath2(const struct lyd_node *ctx_node, const char *xpath,
2439 const struct lyxp_var *vars, ly_bool *result);
2440
2456LIBYANG_API_DECL LY_ERR lyd_eval_xpath3(const struct lyd_node *ctx_node, const struct lys_module *cur_mod,
2457 const char *xpath, LY_VALUE_FORMAT format, void *prefix_data, const struct lyxp_var *vars, ly_bool *result);
2461
2462typedef enum {
2468
2491LIBYANG_API_DECL LY_ERR lyd_eval_xpath4(const struct lyd_node *ctx_node, const struct lyd_node *tree,
2492 const struct lys_module *cur_mod, const char *xpath, LY_VALUE_FORMAT format, void *prefix_data,
2493 const struct lyxp_var *vars, LY_XPATH_TYPE *ret_type, struct ly_set **node_set, char **string,
2494 long double *number, ly_bool *boolean);
2495
2505LIBYANG_API_DEF LY_ERR lyd_trim_xpath(struct lyd_node **tree, const char *xpath, const struct lyxp_var *vars);
2506
2524LIBYANG_API_DECL LY_ERR lyd_find_path(const struct lyd_node *ctx_node, const char *path, ly_bool output,
2525 struct lyd_node **match);
2526
2537LIBYANG_API_DECL LY_ERR lyd_find_target(const struct ly_path *path, const struct lyd_node *tree, struct lyd_node **match);
2538
2544LIBYANG_API_DECL int ly_time_tz_offset(void);
2552LIBYANG_API_DECL int ly_time_tz_offset_at(time_t time);
2553
2562LIBYANG_API_DECL LY_ERR ly_time_str2time(const char *value, time_t *time, char **fractions_s);
2563
2572LIBYANG_API_DECL LY_ERR ly_time_time2str(time_t time, const char *fractions_s, char **str);
2573
2581LIBYANG_API_DECL LY_ERR ly_time_str2ts(const char *value, struct timespec *ts);
2582
2590LIBYANG_API_DECL LY_ERR ly_time_ts2str(const struct timespec *ts, char **str);
2591
2602LIBYANG_API_DECL LY_ERR lyd_leafref_get_links(const struct lyd_node_term *node, const struct lyd_leafref_links_rec **record);
2603
2613LIBYANG_API_DECL LY_ERR lyd_leafref_link_node_tree(const struct lyd_node *tree);
2614
2628LIBYANG_API_DECL LY_ERR ly_pattern_match(const struct ly_ctx *ctx, const char *pattern, const char *string,
2629 uint32_t str_len, void **pat_comp);
2630
2640LIBYANG_API_DECL LY_ERR ly_pattern_compile(const struct ly_ctx *ctx, const char *pattern, void **pat_comp);
2641
2647LIBYANG_API_DECL void ly_pattern_free(void *pat_comp);
2648
2649#ifdef __cplusplus
2650}
2651#endif
2652
2653#endif /* LY_TREE_DATA_H_ */
libyang context handler.
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
Definition tree_data.h:511
#define LYD_CTX(node)
Macro to get context from a data tree node.
Definition tree_data.h:494
@ LYD_LYB
Definition tree_data.h:515
@ LYD_XML
Definition tree_data.h:513
@ LYD_UNKNOWN
Definition tree_data.h:512
@ LYD_JSON
Definition tree_data.h:514
LY_ERR
libyang's error codes returned by the libyang functions.
Definition log.h:252
Structure to hold a set of (not necessary somehow connected) objects. Usually used for lyd_node,...
Definition set.h:47
#define LYS_NOTIF
#define LYS_ANYDATA
#define LYS_RPC
#define LYS_CONTAINER
#define LYS_ACTION
#define LYS_LIST
uint16_t nodetype
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.
Compiled prefix data pair mapping of prefixes to modules. In case the format is LY_VALUE_SCHEMA_RESOL...
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:36
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:740
uint64_t orig_size_bits
Definition tree_data.h:582
struct lyd_node * next
Definition tree_data.h:791
LIBYANG_API_DECL void lyd_free_all(struct lyd_node *node)
Free all the nodes (even parents of the node) in the data tree.
uint32_t hints
Definition tree_data.h:890
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:989
LIBYANG_API_DECL LY_ERR lyd_dup_siblings_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx, struct lyd_node *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...
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 LY_ERR lyd_any_copy_value(struct lyd_node *trg, const struct lyd_node *child, const char *value, uint32_t hints)
Copy anydata value from one node to another. Target value is freed first.
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.
const char * prefix
Definition tree_data.h:723
struct rb_node * rbt
Definition tree_data.h:711
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:621
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.
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:2226
@ LYD_PATH_STD_NO_LAST_PRED
Definition tree_data.h:2229
@ LYD_PATH_STD
Definition tree_data.h:2227
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.
struct lyd_value value
Definition tree_data.h:858
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.
const struct lysc_type * realtype
Definition tree_data.h:527
LIBYANG_API_DECL LY_ERR lyd_change_meta(struct lyd_meta *meta, const char *val_str)
Change the value of a metadata instance.
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:739
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.
ly_bool unknown_tz
Definition tree_data.h:670
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.
const struct lyd_node_term ** leafref_nodes
Definition tree_data.h:1000
struct lyd_attr * attr
Definition tree_data.h:991
LIBYANG_API_DECL LY_ERR lyd_new_list(struct lyd_node *parent, const struct lys_module *module, const char *name, uint32_t options, struct lyd_node **node,...)
Create a new list node in the data tree.
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.
LIBYANG_API_DECL LY_ERR lyd_value_validate(const struct lysc_node *schema, const char *value, uint32_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_value_validate_dflt(const struct lysc_node *schema, const char *value, struct lysc_prefix *prefixes, 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.
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:2105
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.
struct lyd_node * child
Definition tree_data.h:983
LIBYANG_API_DECL LY_ERR lyd_compare_meta(const struct lyd_meta *meta1, const struct lyd_meta *meta2)
Compare 2 metadata.
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_new_meta(const struct ly_ctx *ctx, struct lyd_node *parent, const struct lys_module *module, const char *name, const char *val_str, uint32_t options, struct lyd_meta **meta)
Create a new metadata.
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....
struct ly_path * target
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_leafref_link_node_tree(const struct lyd_node *tree)
Traverse through data tree including root node siblings and adds leafrefs links to the given nodes.
LIBYANG_API_DECL LY_ERR lyd_new_path2(struct lyd_node *parent, const struct ly_ctx *ctx, const char *path, const void *value, uint64_t value_size_bits, uint32_t any_hints, 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 lysc_type_bitenum_item ** items
Definition tree_data.h:598
const struct ly_ctx * ctx
Definition tree_data.h:992
char * fractions_s
Definition tree_data.h:685
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.
uint8_t fixed_mem[LYD_VALUE_FIXED_MEM_SIZE]
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_term(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *value, uint32_t options, struct lyd_node **node)
Create a new term 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:2011
struct lyd_meta * meta
Definition tree_data.h:796
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.
LIBYANG_API_DECL LY_ERR lyd_any_value_str(const struct lyd_node *any, LYD_FORMAT format, char **value_str)
Get anydata string value.
const struct lyd_node_term ** target_nodes
Definition tree_data.h:1006
uint32_t flags
Definition tree_data.h:788
struct lysc_ident * ident
LIBYANG_API_DECL ly_bool lyd_meta_is_internal(const struct lyd_meta *meta)
Check whether metadata are not an instance of internal metadata.
LIBYANG_API_DECL void ly_pattern_free(void *pat_comp)
Free a compiled XML Schema regex pattern.
LY_XPATH_TYPE
XPath result type.
Definition tree_data.h:2455
@ LY_XPATH_NODE_SET
Definition tree_data.h:2456
@ LY_XPATH_NUMBER
Definition tree_data.h:2458
@ LY_XPATH_STRING
Definition tree_data.h:2457
@ LY_XPATH_BOOLEAN
Definition tree_data.h:2459
const struct lysc_node * schema
Definition tree_data.h:789
uint32_t seconds
Definition tree_data.h:684
struct in6_addr addr
Definition tree_data.h:644
const char * value
Definition tree_data.h:889
LIBYANG_API_DECL LY_ERR lyd_unlink_siblings(struct lyd_node *node)
Unlink the specified node with all the following siblings.
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:701
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:986
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 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_list3(struct lyd_node *parent, const struct lys_module *module, const char *name, const void **key_values, uint32_t *value_sizes_bits, uint32_t options, struct lyd_node **node)
Create a new list node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_new_meta2(const struct ly_ctx *ctx, struct lyd_node *parent, uint32_t options, const struct lyd_attr *attr, struct lyd_meta **meta)
Create new metadata from an opaque node attribute if possible.
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.
struct lyd_node * parent
Definition tree_data.h:790
LIBYANG_API_DECL LY_ERR lyd_leafref_get_links(const struct lyd_node_term *node, const struct lyd_leafref_links_rec **record)
Gets the leafref links record for given node.
const char * name
Definition tree_data.h:722
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:587
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.
const struct lyd_node_term * node
Definition tree_data.h:999
#define LYD_NODE_TERM
Definition tree_data.h:745
uint32_t hints
Definition tree_data.h:987
LIBYANG_API_DECL LY_ERR lyd_dup_single(const struct lyd_node *node, struct lyd_node *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 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_find_xpath3(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.
struct ly_opaq_name name
Definition tree_data.h:737
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_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:784
void * val_prefix_data
Definition tree_data.h:741
struct in_addr addr
Definition tree_data.h:629
struct lyd_node * prev
Definition tree_data.h:792
ly_bool unknown_tz
Definition tree_data.h:686
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_list2(struct lyd_node *parent, const struct lys_module *module, const char *name, const char *keys, uint32_t options, struct lyd_node **node)
Create a new list node in the data tree.
LIBYANG_API_DECL LY_ERR lyd_dup_siblings(const struct lyd_node *node, struct lyd_node *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 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:826
struct ly_ht * children_ht
Definition tree_data.h:888
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:704
void * priv
Definition tree_data.h:797
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_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 lyd_value_union * subvalue
struct ly_ht * children_ht
Definition tree_data.h:827
LY_VALUE_FORMAT format
Definition tree_data.h:988
LIBYANG_API_DECL void lyd_free_attr_single(const struct ly_ctx *ctx, struct lyd_attr *attr)
Free a single attribute.
struct lysc_type_bitenum_item * enum_item
struct lyd_node * child
Definition tree_data.h:887
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:738
LIBYANG_API_DECL LY_ERR lyd_find_sibling_val(const struct lyd_node *siblings, const struct lysc_node *schema, const char *key_or_value, uint32_t val_len, struct lyd_node **match)
Search in the given siblings for the first schema instance. Uses hashes - should be used whenever pos...
LIBYANG_API_DECL LY_ERR lyd_value_compare(const struct lyd_node_term *node, const char *value, uint32_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_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:702
LIBYANG_API_DECL LY_ERR lyd_unlink_tree(struct lyd_node *node)
Unlink the specified data subtree.
struct lyd_attr * next
Definition tree_data.h:736
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.
uint32_t hints
Definition tree_data.h:583
LIBYANG_API_DECL LY_ERR lyd_dup_single_to_ctx(const struct lyd_node *node, const struct ly_ctx *trg_ctx, struct lyd_node *parent, uint32_t options, struct lyd_node **dup)
Create a copy of the specified data tree node. Schema references are assigned from trg_ctx.
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.
struct in6_addr addr
Definition tree_data.h:652
struct lyd_value value
Definition tree_data.h:579
const char * _canonical
Definition tree_data.h:524
struct lyd_node_opaq * parent
Definition tree_data.h:735
LY_VALUE_FORMAT format
Definition tree_data.h:584
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...
LIBYANG_API_DECL LY_ERR ly_pattern_match(const struct ly_ctx *ctx, const char *pattern, const char *string, uint32_t str_len, void **pat_comp)
Check a string matches an XML Schema regex used in YANG.
struct ly_opaq_name name
Definition tree_data.h:985
LIBYANG_API_DECL LY_ERR ly_pattern_compile(const struct ly_ctx *ctx, const char *pattern, void **pat_comp)
Compile an XML Schema regex pattern prior to matching.
LIBYANG_API_DECL void lyd_free_meta_single(struct lyd_meta *meta)
Free a single metadata instance.
LIBYANG_API_DECL LY_ERR lyd_new_any(struct lyd_node *parent, const struct lys_module *module, const char *name, const struct lyd_node *child, const char *value, uint32_t hints, uint32_t options, struct lyd_node **node)
Create a new any node in the data tree.
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:588
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:721
Generic attribute structure.
Definition tree_data.h:734
Generic structure for a data node.
Definition tree_data.h:783
Data node structure for the anydata data tree nodes - anydata or anyxml.
Definition tree_data.h:864
Data node structure for the inner data tree nodes - containers, lists, RPCs, actions and Notification...
Definition tree_data.h:803
Data node structure for unparsed (opaque) nodes.
Definition tree_data.h:964
Data node structure for the terminal data tree nodes - leaves and leaf-lists.
Definition tree_data.h:835
YANG data representation.
Definition tree_data.h:523
Special lyd_value structure for built-in binary values.
Definition tree_data.h:605
Special lyd_value structure for built-in bits values.
Definition tree_data.h:594
Special lyd_value structure for ietf-yang-types date values.
Definition tree_data.h:668
Special lyd_value structure for ietf-yang-types date-and-time values.
Definition tree_data.h:659
Special lyd_value structure for ietf-yang-types date-no-zone values.
Definition tree_data.h:676
Special lyd_value structure for ietf-inet-types ipv4-address values.
Definition tree_data.h:620
Special lyd_value structure for ietf-inet-types ipv4-address-no-zone values.
Definition tree_data.h:613
Special lyd_value structure for ietf-inet-types ipv4-prefix values.
Definition tree_data.h:628
Special lyd_value structure for ietf-inet-types ipv6-address values.
Definition tree_data.h:643
Special lyd_value structure for ietf-inet-types ipv6-address-no-zone values.
Definition tree_data.h:636
Special lyd_value structure for ietf-inet-types ipv6-prefix values.
Definition tree_data.h:651
Special lyd_value structure for lyds tree value.
Definition tree_data.h:710
Special lyd_value structure for ietf-yang-types time values.
Definition tree_data.h:683
Special lyd_value structure for ietf-yang-types time-no-zone values.
Definition tree_data.h:692
Special lyd_value structure for built-in union values.
Definition tree_data.h:578
Special lyd_value structure for ietf-yang-types xpath1.0 values.
Definition tree_data.h:700
libyang representation of YANG schema trees.