16 #ifndef LY_TREE_SCHEMA_H_ 17 #define LY_TREE_SCHEMA_H_ 19 #define PCRE2_CODE_UNIT_WIDTH 8 184 #define LYSC_TREE_DFS_BEGIN(START, ELEM) \ 185 { ly_bool LYSC_TREE_DFS_continue = 0; struct lysc_node *LYSC_TREE_DFS_next; \ 186 for ((ELEM) = (LYSC_TREE_DFS_next) = (struct lysc_node *)(START); \ 188 (ELEM) = (LYSC_TREE_DFS_next), LYSC_TREE_DFS_continue = 0) 203 #define LYSC_TREE_DFS_END(START, ELEM) \ 205 if (LYSC_TREE_DFS_continue) { \ 206 (LYSC_TREE_DFS_next) = NULL; \ 208 (LYSC_TREE_DFS_next) = (struct lysc_node *)lysc_node_child(ELEM); \ 210 if (!(LYSC_TREE_DFS_next)) { \ 212 _LYSC_TREE_DFS_NEXT(START, ELEM, LYSC_TREE_DFS_next); \ 214 while (!(LYSC_TREE_DFS_next)) { \ 216 (ELEM) = (ELEM)->parent; \ 217 _LYSC_TREE_DFS_NEXT(START, ELEM, LYSC_TREE_DFS_next); \ 223 #define _LYSC_TREE_DFS_NEXT(START, ELEM, NEXT) \ 224 if ((ELEM) == (struct lysc_node *)(START)) { \ 228 (NEXT) = (ELEM)->next; 232 #define LY_REV_SIZE 11 239 #define LYS_UNKNOWN 0x0000 240 #define LYS_CONTAINER 0x0001 241 #define LYS_CHOICE 0x0002 242 #define LYS_LEAF 0x0004 243 #define LYS_LEAFLIST 0x0008 244 #define LYS_LIST 0x0010 245 #define LYS_ANYXML 0x0020 246 #define LYS_ANYDATA 0x0060 247 #define LYS_CASE 0x0080 249 #define LYS_RPC 0x0100 250 #define LYS_ACTION 0x0200 251 #define LYS_NOTIF 0x0400 253 #define LYS_USES 0x0800 254 #define LYS_INPUT 0x1000 255 #define LYS_OUTPUT 0x2000 256 #define LYS_GROUPING 0x4000 257 #define LYS_AUGMENT 0x8000 259 #define LYS_NODETYPE_MASK 0xffff 360 #define LYSP_RESTR_PATTERN_ACK 0x06 361 #define LYSP_RESTR_PATTERN_NACK 0x15 470 #define LYS_DEV_NOT_SUPPORTED 1 471 #define LYS_DEV_ADD 2 472 #define LYS_DEV_DELETE 3 473 #define LYS_DEV_REPLACE 4 479 struct lysp_deviate { 651 #define LYS_CONFIG_W 0x01 652 #define LYS_CONFIG_R 0x02 653 #define LYS_CONFIG_MASK 0x03 654 #define LYS_STATUS_CURR 0x04 655 #define LYS_STATUS_DEPRC 0x08 656 #define LYS_STATUS_OBSLT 0x10 657 #define LYS_STATUS_MASK 0x1C 658 #define LYS_MAND_TRUE 0x20 663 #define LYS_MAND_FALSE 0x40 666 #define LYS_MAND_MASK 0x60 667 #define LYS_PRESENCE 0x80 670 #define LYS_UNIQUE 0x80 671 #define LYS_KEY 0x0100 672 #define LYS_KEYLESS 0x0200 673 #define LYS_DISABLED 0x0100 674 #define LYS_FENABLED 0x20 675 #define LYS_ORDBY_SYSTEM 0x80 677 #define LYS_ORDBY_USER 0x40 680 #define LYS_ORDBY_MASK 0x60 681 #define LYS_YINELEM_TRUE 0x80 682 #define LYS_YINELEM_FALSE 0x0100 683 #define LYS_YINELEM_MASK 0x0180 684 #define LYS_USED_GRP 0x0400 686 #define LYS_SET_VALUE 0x0200 687 #define LYS_SET_MIN 0x0200 688 #define LYS_SET_MAX 0x0400 690 #define LYS_SET_BASE 0x0001 691 #define LYS_SET_BIT 0x0002 692 #define LYS_SET_ENUM 0x0004 693 #define LYS_SET_FRDIGITS 0x0008 694 #define LYS_SET_LENGTH 0x0010 695 #define LYS_SET_PATH 0x0020 696 #define LYS_SET_PATTERN 0x0040 697 #define LYS_SET_RANGE 0x0080 698 #define LYS_SET_TYPE 0x0100 699 #define LYS_SET_REQINST 0x0200 700 #define LYS_SET_DFLT 0x0200 705 #define LYS_SET_UNITS 0x0400 706 #define LYS_SET_CONFIG 0x0800 708 #define LYS_SINGLEQUOTED 0x0100 709 #define LYS_DOUBLEQUOTED 0x0200 711 #define LYS_YIN_ATTR 0x0400 712 #define LYS_YIN_ARGUMENT 0x0800 714 #define LYS_INTERNAL 0x1000 716 #define LYS_IS_ENUM 0x0200 718 #define LYS_IS_INPUT 0x1000 720 #define LYS_IS_OUTPUT 0x2000 722 #define LYS_IS_NOTIF 0x4000 724 #define LYS_FLAGS_COMPILED_MASK 0xff 1164 #define LYSP_MODULE_NAME(PMOD) (PMOD->is_submod ? ((struct lysp_submodule *)PMOD)->name : ((struct lysp_module *)PMOD)->mod->name) 1196 struct lyxp_expr *
cond;
1226 #define LYS_IFF_NOT 0x00 1227 #define LYS_IFF_AND 0x01 1228 #define LYS_IFF_OR 0x02 1229 #define LYS_IFF_F 0x03 1235 struct lysc_revision { 1241 struct lysc_range_part {
1350 struct lyxp_expr *
path;
1393 #define LYS_NODE_HASH_COUNT 4 1736 #define lysc_is_userordered(lysc_node) \ 1737 ((!lysc_node || !(lysc_node->nodetype & (LYS_LEAFLIST | LYS_LIST)) || !(lysc_node->flags & LYS_ORDBY_USER)) ? 0 : 1) 1745 #define lysc_is_key(lysc_node) \ 1746 ((!lysc_node || (lysc_node->nodetype != LYS_LEAF) || !(lysc_node->flags & LYS_KEY)) ? 0 : 1) 1754 #define lysc_is_np_cont(lysc_node) \ 1755 ((!lysc_node || (lysc_node->nodetype != LYS_CONTAINER) || (lysc_node->flags & LYS_PRESENCE)) ? 0 : 1) 1763 #define lysc_is_dup_inst_list(lysc_node) \ 1764 ((lysc_node && (((lysc_node->nodetype == LYS_LIST) && (lysc_node->flags & LYS_KEYLESS)) || \ 1765 ((lysc_node->nodetype == LYS_LEAFLIST) && !(lysc_node->flags & LYS_CONFIG_W)))) ? 1 : 0) 1778 #define lysc_data_parent(SCHEMA) lysc_data_node((SCHEMA) ? (SCHEMA)->parent : NULL) 1976 #define LYS_FIND_XP_SCHEMA 0x08 1977 #define LYS_FIND_XP_OUTPUT 0x10 1978 #define LYS_FIND_NO_MATCH_ERROR 0x40 1980 #define LYS_FIND_SCHEMAMOUNT 0x0200 1995 LIBYANG_API_DECL LY_ERR lys_find_xpath_atoms(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *xpath, 1996 uint32_t options,
struct ly_set **
set);
2011 const struct lyxp_expr *expr,
const struct lysc_prefix *prefixes, uint32_t options,
struct ly_set **
set);
2025 uint32_t options,
struct ly_set **
set);
2060 const char *path,
ly_bool output);
2128 #define LYS_MOD_LATEST_REV 0x01 2129 #define LYS_MOD_LATEST_SEARCHDIRS 0x02 2130 #define LYS_MOD_IMPORTED_REV 0x04 2133 #define LYS_MOD_LATEST_IMPCLB 0x08 2148 LIBYANG_API_DECL LY_ERR lys_feature_value(const struct lys_module *module, const char *feature); 2194 #define LYS_GETNEXT_WITHCHOICE 0x01 2195 #define LYS_GETNEXT_NOCHOICE 0x02 2196 #define LYS_GETNEXT_WITHCASE 0x04 2197 #define LYS_GETNEXT_INTONPCONT 0x08 2198 #define LYS_GETNEXT_OUTPUT 0x10 2200 #define LYS_GETNEXT_WITHSCHEMAMOUNT 0x20 2217 LIBYANG_API_DECL const struct lysc_node *lys_find_child(const struct lysc_node *parent, const struct lys_module *module, 2251 LIBYANG_API_DECL
const char *
lyxp_get_expr(
const struct lyxp_expr *path);
struct lyplg_type * plugin
struct lysp_node_action * actions
Compiled prefix data pair mapping of prefixes to modules. In case the format is LY_VALUE_SCHEMA_RESOL...
struct lysp_node_grp * groupings
struct lyd_value ** dflts
struct lysc_ext_instance * exts
struct lysp_feature ** depfeatures
struct lysp_tpdf * typedefs
struct lysp_qname * dflts
struct lysp_tpdf * typedefs
Qualified name (optional prefix followed by an identifier).
struct lysc_ident ** derived
struct lysc_node_case * dflt
struct lysp_restr * musts
struct lysc_type_bitenum_item * bits
const struct lys_module * cur_mod
struct lysp_ext_instance * exts
LIBYANG_API_DECL const struct lysp_node_grp * lysp_node_groupings(const struct lysp_node *node)
Get the groupings linked list of the given (parsed) schema node. Decides the node's type and in case ...
struct lysp_module * parsed
struct lysc_node * context
Compiled YANG if-feature-stmt.
struct lysp_node_action * actions
struct lyplg_type * plugin
LIBYANG_API_DECL const struct lysc_node * lys_find_path(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *path, ly_bool output)
Get a schema node based on the given data path (JSON format, see XPath Addressing).
struct lysc_ext_instance * exts
struct lysp_tpdf * typedefs
Hold type-specific functions for various operations with the data values.
Extension plugin implementing various aspects of a YANG extension.
Covers restrictions: range, length, pattern, must.
struct lysp_tpdf * typedefs
LIBYANG_API_DECL const struct lysp_node_action * lysp_node_actions(const struct lysp_node *node)
Get the actions/RPCs linked list of the given (parsed) schema node. Decides the node's type and in ca...
struct lysp_import * imports
struct lysp_node_augment * augments
struct lysc_prefix * prefixes
YANG extension compiled instance.
struct lysc_range::lysc_range_part * parts
struct lysc_ext_instance * exts
struct lysp_include * includes
const struct lysp_module * mod
uint8_t ly_bool
Type to indicate boolean value.
Compiled YANG extension-stmt.
struct lysc_ext_instance * exts
struct lyplg_type * plugin
struct lysc_ext_instance * exts
struct lysp_restr * musts
struct lys_module * module
struct lyplg_type * plugin
struct lysp_qname * iffeatures
struct lysc_ident * identities
struct lysp_ext * extensions
LIBYANG_API_DECL const struct lys_module * lysc_owner_module(const struct lysc_node *node)
Get the owner module of the schema node. It is the module of the top-level node. Generally, in case of augments it is the target module, recursively, otherwise it is the module where the node is defined.
LY_DATA_TYPE
YANG built-in types.
struct lysp_ext_instance * exts
struct lysc_node * parent
struct lysp_qname * dflts
LIBYANG_API_DECL const struct lysp_node_notif * lysp_node_notifs(const struct lysp_node *node)
Get the Notifications linked list of the given (parsed) schema node. Decides the node's type and in c...
LIBYANG_API_DECL const struct lysc_node * lys_getnext(const struct lysc_node *last, const struct lysc_node *parent, const struct lysc_module *module, uint32_t options)
Get next schema (sibling) node element in the schema order that can be instantiated in a data tree...
libyang generic macros and functions to work with YANG schema or data trees.
struct lysp_node_action * rpcs
struct lysp_ext_instance * exts
struct lysp_qname * dflts
struct lysc_ext_instance * exts
struct lysc_ext_instance * exts
LIBYANG_API_DECL const struct lysc_node * lys_getnext_ext(const struct lysc_node *last, const struct lysc_node *parent, const struct lysc_ext_instance *ext, uint32_t options)
Get next schema (sibling) node element in the schema order of an extension that can be instantiated i...
LIBYANG_API_DECL const struct lysc_node_notif * lysc_node_notifs(const struct lysc_node *node)
Get the Notifications linked list of the given (compiled) schema node. Decides the node's type and in...
struct lysc_ext_instance * exts
struct lys_module * module
struct lysc_ext_instance * exts
struct lysc_iffeature * iffeatures_c
LIBYANG_API_DECL const struct lysc_node * lysc_node_lref_target(const struct lysc_node *node)
Get the target node of a leafref node.
struct lysp_node_grp * groupings
struct lysp_tpdf * typedefs
struct lysp_ident * identities
LIBYANG_API_DECL const struct lysc_when * lysc_has_when(const struct lysc_node *node)
Check whether the schema node data instance existence depends on any when conditions. This node and any direct parent choice and case schema nodes are also examined for when conditions.
struct lysp_node_action * actions
struct lysc_ext_instance * exts
struct lysc_ext_instance * exts
Extension structure of the lysp_node for YANG container.
struct lys_module * module
LIBYANG_API_DECL LY_ERR lys_find_expr_atoms(const struct lysc_node *ctx_node, const struct lys_module *cur_mod, const struct lyxp_expr *expr, const struct lysc_prefix *prefixes, uint32_t options, struct ly_set **set)
Get all the schema nodes that are required for expr to be evaluated (atoms).
struct lysp_restr * length
struct lysp_ext_instance * exts
struct lysc_node_case * cases
Enumeration/Bit value definition.
struct lysc_type * compiled
const struct lys_module * mod
Compiled YANG schema tree structure representing YANG module.
struct lysp_restr * musts
struct lysp_ext_instance * exts
struct lysp_ext_instance * exts
struct lysp_qname * iffeatures
struct lysp_deviate * next
struct lysp_ext_instance * exts
struct lysp_deviate * next
struct lysc_range * range
struct lysp_ext_instance * exts
LIBYANG_API_DECL const struct lysc_node * lysc_node_child(const struct lysc_node *node)
Get the children linked list of the given (compiled) schema node.
struct lysc_node_action * rpcs
struct lysp_type_enum * enums
struct lysc_node_leaf *** uniques
struct lysc_type ** types
struct lysp_ext_instance * exts
LIBYANG_API_DECL LY_ERR lys_find_xpath(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *xpath, uint32_t options, struct ly_set **set)
Evaluate an xpath expression on schema nodes.
struct lysc_range * length
struct lysp_submodule * submodule
struct lysc_pattern ** patterns
LIBYANG_API_DECL const char * lys_nodetype2str(uint16_t nodetype)
Stringify schema nodetype.
struct lysp_restr * musts
struct lysc_range * length
LIBYANG_API_DECL const struct lysc_node * lysc_data_node(const struct lysc_node *schema)
Get nearest schema parent (including the node itself) that can be instantiated in data...
YANG data representation.
LIBYANG_API_DECL LY_ERR lys_find_path_atoms(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const char *path, ly_bool output, struct ly_set **set)
Get all the schema nodes that are required for path to be evaluated (atoms).
struct lysc_node_notif * notifs
struct lysp_qname * uniques
struct lysc_ext_instance * exts
struct lysp_ext_instance * exts
struct lysp_deviation * deviations
Generic deviate structure to get type and cast to lysp_deviate_* structure.
struct lyplg_type * plugin
struct lysc_node_action_inout input
struct lysp_include * includes
struct lysc_ext_instance * exts
struct lysp_node_grp * groupings
struct lysp_node_notif * notifs
LIBYANG_API_DECL LY_ERR lysc_iffeature_value(const struct lysc_iffeature *iff)
Get how the if-feature statement currently evaluates.
struct lyplg_type * plugin
struct lysp_revision * revs
struct lysp_node_notif * notifs
struct lysp_restr * musts
struct lysp_ext_instance * exts
struct lysp_ext_instance * exts
LIBYANG_API_DECL LY_ERR lys_find_lypath_atoms(const struct ly_path *path, struct ly_set **set)
Get all the schema nodes that are required for path to be evaluated (atoms).
struct lysp_tpdf * typedefs
struct lysp_node_grp * groupings
LIBYANG_API_DECL const struct lysp_tpdf * lysp_node_typedefs(const struct lysp_node *node)
Get the typedefs sized array of the given (parsed) schema node. Decides the node's type and in case i...
YANG uses-augment-stmt and augment-stmt (compatible with struct lysp_node )
struct lysc_ext_instance * exts
struct lysp_ident * identities
struct lysp_node_notif * notifs
Structure to hold a set of (not necessary somehow connected) objects. Usually used for lyd_node...
LIBYANG_API_DECL LY_ERR lys_identity_iffeature_value(const struct lysc_ident *ident)
Get how the if-feature statement is evaluated for certain identity.
LIBYANG_API_DECL struct lysc_when ** lysc_node_when(const struct lysc_node *node)
Get the when statements list if present in the node.
struct lysc_node_action_inout output
struct lysp_ext_instance * exts
struct lysp_qname * uniques
struct lysc_node_action * actions
Printable YANG schema tree structure representing YANG module.
struct lysc_prefix * prefixes
YANG rpc-stmt and action-stmt.
Available YANG schema tree structures representing YANG module.
struct lysp_feature * features
LIBYANG_API_DECL LY_ERR lys_set_implemented(struct lys_module *mod, const char **features)
Make the specific module implemented.
struct lyplg_type * plugin
struct lysc_range * range
struct lysc_node_notif * notifs
struct lysc_ext_instance * exts
struct lysp_qname * uniques
struct lysp_ext_instance * exts
#define LYS_NODE_HASH_COUNT
Maximum number of hashes stored in a schema node.
struct lys_module ** deviated_by
struct lysp_node_grp * groupings
struct lysp_ext_instance * exts
LIBYANG_API_DECL const struct lysc_node_action * lysc_node_actions(const struct lysc_node *node)
Get the actions/RPCs linked list of the given (compiled) schema node. Decides the node's type and in ...
struct lysp_restr * range
YANG input-stmt and output-stmt.
LYSC_PATH_TYPE
Types of the different schema paths.
struct lysp_node_grp * groupings
struct lyplg_type * plugin
struct lysp_deviate * next
struct lysp_node_notif * notifs
struct lysp_revision * revs
struct lysp_deviate * next
LYS_VERSION
supported YANG schema version values
struct lysp_tpdf * typedefs
struct lysp_ext_instance * exts
struct lys_module * module
struct lysc_ext_instance * exts
struct lysp_restr * musts
LIBYANG_API_DECL LY_ERR lysc_tree_dfs_full(const struct lysc_node *root, lysc_dfs_clb dfs_clb, void *data)
DFS traversal of all the schema nodes in a (sub)tree including any actions and nested notifications...
struct lysp_qname * iffeatures
struct lysp_deviate * deviates
struct lysp_restr * patterns
struct lysp_restr * musts
LIBYANG_API_DECL const char * lyxp_get_expr(const struct lyxp_expr *path)
Getter for original XPath expression from a parsed expression.
struct lysp_ext_instance * exts
LY_ERR(* lysc_dfs_clb)(struct lysc_node *node, void *data, ly_bool *dfs_continue)
Callback to be called for every schema node in a DFS traversal.
struct lysc_type_bitenum_item * enums
struct lysp_ext_instance * exts
struct lysp_node_action_inout input
struct lysp_ext * extensions
struct lysp_qname * iffeatures
struct lysc_ident ** bases
struct lyplg_type * plugin
LIBYANG_API_DECL char * lysc_path(const struct lysc_node *node, LYSC_PATH_TYPE pathtype, char *buffer, size_t buflen)
Generate path of the given node in the requested format.
struct lysc_node_notif * notifs
struct lysp_node_augment * augments
struct lysc_module * compiled
struct lysp_restr * musts
struct lysp_tpdf * typedefs
struct lysp_node_grp * groupings
struct lysp_node * parent
struct lysp_restr * musts
struct lys_module ** augmented_by
struct lysp_node_notif * notifs
const struct lysp_module * pmod
struct lysp_refine * refines
LY_ERR
libyang's error codes returned by the libyang functions.
struct lysp_feature ** features
Logger manipulation routines and error definitions.
struct lysc_ext * compiled
struct lysp_qname * dflts
struct lysp_ext_instance * exts
struct lysp_node_augment * augments
struct lysp_feature * features
LIBYANG_API_DECL LY_ERR lysc_module_dfs_full(const struct lys_module *mod, lysc_dfs_clb dfs_clb, void *data)
DFS traversal of all the schema nodes in a module including RPCs and notifications.
struct lysp_deviation * deviations
struct lysp_type_enum * bits
struct lysc_type * realtype
struct lysp_node_notif * notifs
struct lysp_node_action * actions
struct lysc_ext_instance * exts
struct lysp_restr * musts
struct lyplg_ext * plugin
LIBYANG_API_DECL struct lysc_must * lysc_node_musts(const struct lysc_node *node)
Get the must statements list if present in the node.
struct lysc_prefix * prefixes
struct lysp_node_action_inout output
LIBYANG_API_DECL struct lysp_feature * lysp_feature_next(const struct lysp_feature *last, const struct lysp_module *pmod, uint32_t *idx)
Get the next feature in the module or submodules.
struct lysc_ext_instance * exts
struct lysp_import * imports
struct lysp_node_grp * groupings
struct lysp_node_action * rpcs
LIBYANG_API_DECL const struct lysp_node * lysp_node_child(const struct lysp_node *node)
Get the children linked list of the given (parsed) schema node. Decides the node's type and in case i...
struct lysc_node_action * actions
YANG extension parsed instance.