libyang  2.1.148
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
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
39 extern "C" {
40 #endif
41 
42 struct ly_ctx;
43 struct ly_path;
44 struct ly_set;
45 struct lyd_node;
46 struct lyd_node_opaq;
47 struct lyd_node_term;
48 struct timespec;
49 struct 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 
533 typedef enum {
538 } LYD_FORMAT;
539 
543 typedef enum {
554 
560 struct 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 
616  struct lyd_value value;
618  void *original;
619  size_t orig_len;
620  uint32_t hints;
624  void *prefix_data;
625  const struct lysc_node *ctx_node;
626 };
627 
632  char *bitmap;
637 };
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 
697  time_t time;
698  char *fractions_s;
700 };
701 
706  struct lyxp_expr *exp;
707  const struct ly_ctx *ctx;
708  void *prefix_data;
710 };
711 
719 struct ly_opaq_name {
720  const char *name;
721  const char *prefix;
723  union {
724  const char *module_ns;
725  const char *module_name;
726  };
727 };
728 
732 struct lyd_attr {
734  struct lyd_attr *next;
736  const char *value;
737  uint32_t hints;
740 };
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
781 struct 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;
825  struct ly_ht *children_ht;
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  };
856  struct lyd_value value;
857 };
858 
863  struct lyd_node *tree;
864  const char *str;
865  const char *xml;
866  const char *json;
867  char *mem;
868 };
869 
874 struct lyd_node_any {
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  };
897  union lyd_any_value value;
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
969 struct lyd_node_opaq {
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;
990  struct ly_opaq_name name;
991  const char *value;
992  uint32_t hints;
993  LY_VALUE_FORMAT format;
994  void *val_prefix_data;
996  struct lyd_attr *attr;
997  const struct ly_ctx *ctx;
998 };
1007 LIBYANG_API_DECL struct lyd_node *lyd_parent(const struct lyd_node *node);
1008 
1019 LIBYANG_API_DECL struct lyd_node *lyd_child(const struct lyd_node *node);
1020 
1031 LIBYANG_API_DECL struct lyd_node *lyd_child_no_keys(const struct lyd_node *node);
1032 
1042 LIBYANG_API_DECL const struct lys_module *lyd_owner_module(const struct lyd_node *node);
1043 
1050 LIBYANG_API_DECL const struct lys_module *lyd_node_module(const struct lyd_node *node);
1051 
1058 LIBYANG_API_DECL ly_bool lyd_is_default(const struct lyd_node *node);
1059 
1067 LIBYANG_API_DECL uint32_t lyd_list_pos(const struct lyd_node *instance);
1068 
1075 LIBYANG_API_DECL struct lyd_node *lyd_first_sibling(const struct lyd_node *node);
1076 
1084 LIBYANG_API_DECL int lyd_lyb_data_length(const char *data);
1085 
1095 LIBYANG_API_DECL LY_ERR lyd_parse_opaq_error(const struct lyd_node *node);
1096 
1106 LIBYANG_API_DECL const char *lyd_value_get_canonical(const struct ly_ctx *ctx, const struct lyd_value *value);
1107 
1114 LIBYANG_API_DECL const char *lyd_get_value(const struct lyd_node *node);
1115 
1123 LIBYANG_API_DECL LY_ERR lyd_any_value_str(const struct lyd_node *any, char **value_str);
1124 
1133 LIBYANG_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 
1142 LIBYANG_API_DECL const struct lysc_node *lyd_node_schema(const struct lyd_node *node);
1143 
1159 LIBYANG_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 
1175 LIBYANG_API_DECL LY_ERR lyd_new_ext_inner(const struct lysc_ext_instance *ext, const char *name, struct lyd_node **node);
1176 
1191 LIBYANG_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 
1207 LIBYANG_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 
1223 LIBYANG_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 
1240 LIBYANG_API_DECL LY_ERR lyd_new_ext_list(const struct lysc_ext_instance *ext, const char *name, struct lyd_node **node, ...);
1241 
1256 LIBYANG_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 
1273 LIBYANG_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 
1290 LIBYANG_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 
1307 LIBYANG_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 
1324 LIBYANG_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 
1340 LIBYANG_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 
1355 LIBYANG_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 
1371 LIBYANG_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 
1390 LIBYANG_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 
1407 LIBYANG_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 
1424 LIBYANG_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 
1439 LIBYANG_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 
1454 LIBYANG_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 
1469 LIBYANG_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 
1485 LIBYANG_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 
1500 LIBYANG_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
1563 LIBYANG_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 
1590 LIBYANG_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 
1616 LIBYANG_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
1648 LIBYANG_API_DECL LY_ERR lyd_new_implicit_tree(struct lyd_node *tree, uint32_t implicit_options, struct lyd_node **diff);
1661 LIBYANG_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 
1675 LIBYANG_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 
1691 LIBYANG_API_DECL LY_ERR lyd_change_term(struct lyd_node *term, const char *val_str);
1692 
1707 LIBYANG_API_DECL LY_ERR lyd_change_term_bin(struct lyd_node *term, const void *value, size_t value_len);
1708 
1723 LIBYANG_API_DECL LY_ERR lyd_change_term_canon(struct lyd_node *term, const char *val_str);
1724 
1734 LIBYANG_API_DECL LY_ERR lyd_change_meta(struct lyd_meta *meta, const char *val_str);
1735 
1747 LIBYANG_API_DECL LY_ERR lyd_insert_child(struct lyd_node *parent, struct lyd_node *node);
1748 
1761 LIBYANG_API_DECL LY_ERR lyd_insert_sibling(struct lyd_node *sibling, struct lyd_node *node, struct lyd_node **first);
1762 
1774 LIBYANG_API_DECL LY_ERR lyd_insert_before(struct lyd_node *sibling, struct lyd_node *node);
1775 
1787 LIBYANG_API_DECL LY_ERR lyd_insert_after(struct lyd_node *sibling, struct lyd_node *node);
1788 
1794 LIBYANG_API_DECL void lyd_unlink_siblings(struct lyd_node *node);
1795 
1801 LIBYANG_API_DECL void lyd_unlink_tree(struct lyd_node *node);
1802 
1808 LIBYANG_API_DECL void lyd_free_all(struct lyd_node *node);
1809 
1815 LIBYANG_API_DECL void lyd_free_siblings(struct lyd_node *node);
1816 
1822 LIBYANG_API_DECL void lyd_free_tree(struct lyd_node *node);
1823 
1829 LIBYANG_API_DECL void lyd_free_meta_single(struct lyd_meta *meta);
1830 
1836 LIBYANG_API_DECL void lyd_free_meta_siblings(struct lyd_meta *meta);
1837 
1844 LIBYANG_API_DECL void lyd_free_attr_single(const struct ly_ctx *ctx, struct lyd_attr *attr);
1845 
1852 LIBYANG_API_DECL void lyd_free_attr_siblings(const struct ly_ctx *ctx, struct lyd_attr *attr);
1853 
1872 LIBYANG_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 
1887 LIBYANG_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. */
1905 
1918 LIBYANG_API_DECL LY_ERR lyd_compare_single(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options);
1919 
1931 LIBYANG_API_DECL LY_ERR lyd_compare_siblings(const struct lyd_node *node1, const struct lyd_node *node2, uint32_t options);
1932 
1943 LIBYANG_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
1981 LIBYANG_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);
1996 LIBYANG_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 
2010 LIBYANG_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 
2026 LIBYANG_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 
2037 LIBYANG_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
2079 LIBYANG_API_DECL LY_ERR lyd_merge_tree(struct lyd_node **target, const struct lyd_node *source, uint16_t options);
2080 
2102 LIBYANG_API_DECL LY_ERR lyd_merge_siblings(struct lyd_node **target, const struct lyd_node *source, uint16_t options);
2103 
2113 typedef LY_ERR (*lyd_merge_cb)(struct lyd_node *trg_node, const struct lyd_node *src_node, void *cb_data);
2114 
2130 LIBYANG_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
2175 LIBYANG_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 
2190 LIBYANG_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 
2201 typedef LY_ERR (*lyd_diff_cb)(const struct lyd_node *diff_node, struct lyd_node *data_node, void *cb_data);
2202 
2219 LIBYANG_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 
2232 LIBYANG_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
2273 LIBYANG_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 
2292 LIBYANG_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 
2306 LIBYANG_API_DECL LY_ERR lyd_diff_merge_all(struct lyd_node **diff, const struct lyd_node *src_diff, uint16_t options);
2307 
2317 LIBYANG_API_DECL LY_ERR lyd_diff_reverse_all(const struct lyd_node *src_diff, struct lyd_node **diff);
2318 
2327 LIBYANG_API_DECL const struct lyd_node_term *lyd_target(const struct ly_path *path, const struct lyd_node *tree);
2328 
2332 typedef enum {
2333  LYD_PATH_STD,
2337 } LYD_PATH_TYPE;
2338 
2354 LIBYANG_API_DECL char *lyd_path(const struct lyd_node *node, LYD_PATH_TYPE pathtype, char *buffer, size_t buflen);
2365 LIBYANG_API_DECL struct lyd_meta *lyd_find_meta(const struct lyd_meta *first, const struct lys_module *module,
2366  const char *name);
2367 
2379 LIBYANG_API_DECL LY_ERR lyd_find_sibling_first(const struct lyd_node *siblings, const struct lyd_node *target,
2380  struct lyd_node **match);
2381 
2406 LIBYANG_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 
2420 LIBYANG_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 
2433 LIBYANG_API_DECL LY_ERR lyd_find_sibling_opaq_next(const struct lyd_node *first, const char *name, struct lyd_node **match);
2434 
2446 LIBYANG_API_DECL LY_ERR lyxp_vars_set(struct lyxp_var **vars, const char *name, const char *value);
2447 
2453 LIBYANG_API_DECL void lyxp_vars_free(struct lyxp_var *vars);
2454 
2472 LIBYANG_API_DECL LY_ERR lyd_find_xpath(const struct lyd_node *ctx_node, const char *xpath, struct ly_set **set);
2473 
2487 LIBYANG_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 
2504 LIBYANG_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 
2523 LIBYANG_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 
2537 LIBYANG_API_DECL LY_ERR lyd_eval_xpath(const struct lyd_node *ctx_node, const char *xpath, ly_bool *result);
2538 
2551 LIBYANG_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 
2569 LIBYANG_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);
2571 
2575 typedef enum {
2577  LY_XPATH_STRING,
2578  LY_XPATH_NUMBER,
2580 } LY_XPATH_TYPE;
2581 
2604 LIBYANG_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 
2618 LIBYANG_API_DEF LY_ERR lyd_trim_xpath(struct lyd_node **tree, const char *xpath, const struct lyxp_var *vars);
2619 
2637 LIBYANG_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 
2650 LIBYANG_API_DECL LY_ERR lyd_find_target(const struct ly_path *path, const struct lyd_node *tree, struct lyd_node **match);
2651 
2657 LIBYANG_API_DECL int ly_time_tz_offset(void);
2658 
2665 LIBYANG_API_DECL int ly_time_tz_offset_at(time_t time);
2666 
2675 LIBYANG_API_DECL LY_ERR ly_time_str2time(const char *value, time_t *time, char **fractions_s);
2676 
2685 LIBYANG_API_DECL LY_ERR ly_time_time2str(time_t time, const char *fractions_s, char **str);
2686 
2694 LIBYANG_API_DECL LY_ERR ly_time_str2ts(const char *value, struct timespec *ts);
2695 
2703 LIBYANG_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_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_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.
struct in_addr addr
Definition: tree_data.h:666
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_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.
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_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.
Compiled YANG data node.
Definition: tree_schema.h:1414
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 ly_time_ts2str(const struct timespec *ts, char **str)
Convert timespec into date-and-time string 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...
union for anydata/anyxml value representation.
Definition: tree_data.h:862
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.
Generic prefix and namespace mapping, meaning depends on the format.
Definition: tree_data.h:719
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...
const char * zone
Definition: tree_data.h:682
LIBYANG_API_DECL void lyxp_vars_free(struct lyxp_var *vars)
Free the XPath variables.
const char * str
Definition: tree_data.h:864
const char * prefix
Definition: tree_data.h:721
LIBYANG_API_DECL struct lyd_node * lyd_parent(const struct lyd_node *node)
Get the generic parent pointer of a data node.
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.
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 in_addr addr
Definition: tree_data.h:658
Generic structure for a data node.
Definition: tree_data.h:781
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 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.
YANG extension compiled instance.
Definition: plugins_exts.h:436
LIBYANG_API_DECL LY_ERR lyd_compare_meta(const struct lyd_meta *meta1, const struct lyd_meta *meta2)
Compare 2 metadata.
uint32_t hash
Definition: tree_data.h:782
const char * xml
Definition: tree_data.h:865
const char * zone
Definition: tree_data.h:659
struct lyd_node_opaq * parent
Definition: tree_data.h:733
const char * name
Definition: metadata.h:40
void * priv
Definition: tree_data.h:795
uint8_t ly_bool
Type to indicate boolean value.
Definition: log.h:28
LYD_PATH_TYPE
Types of the different data paths.
Definition: tree_data.h:2354
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.
const struct lysc_node * schema
Definition: tree_data.h:787
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.
const char * name
Definition: tree_schema.h:1425
void * original
Definition: tree_data.h:618
YANG identity-stmt.
Definition: tree_schema.h:1225
struct lysc_node * parent
Definition: tree_schema.h:1419
libyang representation of YANG schema trees.
Special lyd_value structure for ietf-inet-types ipv4-address values.
Definition: tree_data.h:657
libyang generic macros and functions to work with YANG schema or data trees.
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_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.
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 ipv4-address-no-zone values.
Definition: tree_data.h:650
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.
size_t orig_len
Definition: tree_data.h:619
Data node structure for the inner data tree nodes - containers, lists, RPCs, actions and Notification...
Definition: tree_data.h:801
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.
struct lyd_value value
Definition: metadata.h:41
struct lyd_node * child
Definition: tree_data.h:824
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 const struct lysc_node * lyd_node_schema(const struct lyd_node *node)
Get schema node of a data node. Useful especially for opaque nodes.
const struct lysc_node * ctx_node
Definition: tree_data.h:625
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).
struct in6_addr addr
Definition: tree_data.h:689
void * prefix_data
Definition: tree_data.h:708
Special lyd_value structure for ietf-yang-types date-and-time values.
Definition: tree_data.h:696
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_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.
struct lyd_meta * meta
Definition: tree_data.h:794
Data node structure for the terminal data tree nodes - leaves and leaf-lists.
Definition: tree_data.h:833
struct lyd_node_inner * parent
Definition: tree_data.h:788
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...
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_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_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_diff_merge_all(struct lyd_node **diff, const struct lyd_node *src_diff, uint16_t options)
Merge 2 diffs into each other.
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.
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...
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 ly_time_str2ts(const char *value, struct timespec *ts)
Convert date-and-time from string to timespec.
struct ly_opaq_name name
Definition: tree_data.h:735
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().
uint32_t hints
Definition: tree_data.h:737
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.
struct lysc_type_bitenum_item ** items
Definition: tree_data.h:635
libyang hash table.
Special lyd_value structure for ietf-inet-types ipv6-address values.
Definition: tree_data.h:680
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:2133
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
Definition: tree_data.h:533
YANG data representation.
Definition: tree_data.h:560
const char * _canonical
Definition: tree_data.h:561
LY_XPATH_TYPE
XPath result type.
Definition: tree_data.h:2597
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 int ly_time_tz_offset(void)
Get current timezone (including DST setting) UTC (GMT) time offset in seconds.
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.
Metadata structure.
Definition: metadata.h:36
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 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.
const struct lysc_type * realtype
Definition: tree_data.h:564
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 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 lyd_change_meta(struct lyd_meta *meta, const char *val_str)
Change the value of a metadata instance.
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 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. Generally, in case of augments it is the target module, recursively, otherwise it is the module where the data node is defined.
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...
LIBYANG_API_DECL void lyd_free_tree(struct lyd_node *node)
Free (and unlink) the specified data (sub)tree.
const char * name
Definition: tree_data.h:720
LIBYANG_API_DECL struct lyd_node * lyd_first_sibling(const struct lyd_node *node)
Get the first sibling of the given node.
uint32_t hints
Definition: tree_data.h:620
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 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_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_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.
Special lyd_value structure for ietf-inet-types ipv4-prefix values.
Definition: tree_data.h:665
const struct ly_ctx * ctx
Definition: tree_data.h:707
LIBYANG_API_DECL int lyd_lyb_data_length(const char *data)
Learn the length of LYB data.
void * val_prefix_data
Definition: tree_data.h:739
uint32_t flags
Definition: tree_data.h:786
Structure to hold a set of (not necessary somehow connected) objects. Usually used for lyd_node...
Definition: set.h:47
void * prefix_data
Definition: tree_data.h:624
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.
LIBYANG_API_DECL void lyd_free_meta_single(struct lyd_meta *meta)
Free a single metadata instance.
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()...
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()...
Available YANG schema tree structures representing YANG module.
Definition: tree_schema.h:2106
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.
struct in6_addr addr
Definition: tree_data.h:681
char * mem
Definition: tree_data.h:867
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 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_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.
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 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_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.
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 void lyd_free_attr_siblings(const struct ly_ctx *ctx, struct lyd_attr *attr)
Free the attribute with any following attributes.
const char * json
Definition: tree_data.h:866
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:2223
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_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...
const char * value
Definition: tree_data.h:736
Special lyd_value structure for ietf-inet-types ipv6-prefix values.
Definition: tree_data.h:688
Generic attribute structure.
Definition: tree_data.h:732
struct lys_module * module
Definition: tree_schema.h:1418
Special lyd_value structure for ietf-yang-types xpath1.0 values.
Definition: tree_data.h:705
struct lyd_attr * next
Definition: tree_data.h:734
LIBYANG_API_DECL void lyd_free_siblings(struct lyd_node *node)
Free all the sibling nodes (preceding as well as succeeding).
LY_VALUE_FORMAT format
Definition: tree_data.h:709
LY_VALUE_FORMAT format
Definition: tree_data.h:738
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.
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 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. Uses hashes to whatever extent possible.
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).
LY_VALUE_FORMAT
All kinds of supported value formats and prefix mappings to modules.
Definition: tree.h:234
LIBYANG_API_DECL LY_ERR lyd_value_compare(const struct lyd_node_term *node, const char *value, size_t value_len)
Compare the node&#39;s value with the given string value. The string value is first validated according t...
char * bitmap
Definition: tree_data.h:632
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_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_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.
LYD_ANYDATA_VALUETYPE value_type
Definition: tree_data.h:898
LYD_ANYDATA_VALUETYPE
List of possible value types stored in lyd_node_any.
Definition: tree_data.h:543
LIBYANG_API_DECL const char * lyd_get_value(const struct lyd_node *node)
Get the (canonical) value of a 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_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 void lyd_unlink_siblings(struct lyd_node *node)
Unlink the specified node with all the following siblings.
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_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...
Data node structure for unparsed (opaque) nodes.
Definition: tree_data.h:975
LY_ERR
libyang&#39;s error codes returned by the libyang functions.
Definition: log.h:251
struct lyxp_expr * exp
Definition: tree_data.h:706
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 void lyd_free_attr_single(const struct ly_ctx *ctx, struct lyd_attr *attr)
Free a single attribute.
Data node structure for the anydata data tree nodes - anydata or anyxml.
Definition: tree_data.h:874
Logger manipulation routines and error definitions.
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_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.
Special lyd_value structure for built-in bits values.
Definition: tree_data.h:631
Special lyd_value structure for built-in union values.
Definition: tree_data.h:615
struct lyd_node * prev
Definition: tree_data.h:790
LIBYANG_API_DECL void lyd_unlink_tree(struct lyd_node *node)
Unlink the specified data subtree.
LY_VALUE_FORMAT format
Definition: tree_data.h:621
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.
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_dup_meta_single(const struct lyd_meta *meta, struct lyd_node *parent, struct lyd_meta **dup)
Create a copy of the metadata.
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 context handler.
struct ly_ht * children_ht
Definition: tree_data.h:825
struct lyd_node * tree
Definition: tree_data.h:863
Special lyd_value structure for built-in binary values.
Definition: tree_data.h:642
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...
struct lyd_value value
Definition: tree_data.h:616
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.
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...
struct lyd_node * next
Definition: tree_data.h:789