summaryrefslogtreecommitdiffstats
path: root/lib/yang.h
diff options
context:
space:
mode:
authorChristian Hopps <chopps@labn.net>2023-04-17 07:09:05 +0200
committerChristian Hopps <chopps@labn.net>2023-04-17 07:43:48 +0200
commit9e0241c8fb9996833e7d8e104562a57276b6f906 (patch)
tree426f77f66aa1de555aa838573d38f76e149db561 /lib/yang.h
parentMerge pull request #13141 from mjstapp/fix_ospf_json_keys (diff)
downloadfrr-9e0241c8fb9996833e7d8e104562a57276b6f906.tar.xz
frr-9e0241c8fb9996833e7d8e104562a57276b6f906.zip
lib: add and use new yang function for finding schema nodes
Add a wrapper around lys_find_xpath which has an unfortunate API returning an allocated set of schema nodes when we only ever expect and want one. Another libyang function `lys_find_path` returns a single node; however, that function can assert/abort on invalid path values so is unsuitable for user input. Replace previous uses of `lys_find_path` with new API when dealing with possible invalid path values (i.e., from a user). Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'lib/yang.h')
-rw-r--r--lib/yang.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/yang.h b/lib/yang.h
index 654c246f0..37369c09b 100644
--- a/lib/yang.h
+++ b/lib/yang.h
@@ -210,6 +210,27 @@ extern void yang_snode_get_path(const struct lysc_node *snode,
enum yang_path_type type, char *xpath,
size_t xpath_len);
+
+/*
+ * Find libyang schema node for the given xpath. Uses `lys_find_xpath`,
+ * returning only the first of a set of nodes -- normally there should only
+ * be one.
+ *
+ * ly_ctx
+ * libyang context to operate on.
+ *
+ * xpath
+ * XPath expression (absolute or relative) to find the schema node for.
+ *
+ * options
+ * Libyang findxpathoptions value (see lys_find_xpath).
+ *
+ * Returns:
+ * The libyang schema node if found, or NULL if not found.
+ */
+extern struct lysc_node *yang_find_snode(struct ly_ctx *ly_ctx,
+ const char *xpath, uint32_t options);
+
/*
* Find first parent schema node which is a presence-container or a list
* (non-presence containers are ignored).