summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalaxyGorilla <sascha@netdef.org>2020-03-10 09:30:20 +0000
committerSebastien Merle <sebastien@netdef.org>2020-08-07 11:08:49 +0200
commitb112b1abb4c9b9d4b234b46b1db05de9293a48ef (patch)
tree7dc47e8c1ae051586b04873e9d843e555af1b2c2
parent7658c2e56053e99cce68d63e754f89c071ac3d37 (diff)
lib: add possibility to search non-recursively for NB node entries
Signed-off-by: GalaxyGorilla <sascha@netdef.org>
-rw-r--r--lib/northbound.c25
-rw-r--r--lib/northbound.h8
2 files changed, 30 insertions, 3 deletions
diff --git a/lib/northbound.c b/lib/northbound.c
index 48b8499bfc..11007e4309 100644
--- a/lib/northbound.c
+++ b/lib/northbound.c
@@ -2046,18 +2046,21 @@ void *nb_running_unset_entry(const struct lyd_node *dnode)
return entry;
}
-void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath,
- bool abort_if_not_found)
+static void *nb_running_get_entry_worker(const struct lyd_node *dnode,
+ const char *xpath,
+ bool abort_if_not_found,
+ bool rec_search)
{
const struct lyd_node *orig_dnode = dnode;
char xpath_buf[XPATH_MAXLEN];
+ bool rec_flag = true;
assert(dnode || xpath);
if (!dnode)
dnode = yang_dnode_get(running_config->dnode, xpath);
- while (dnode) {
+ while (rec_flag && dnode) {
struct nb_config_entry *config, s;
yang_dnode_get_path(dnode, s.xpath, sizeof(s.xpath));
@@ -2065,6 +2068,8 @@ void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath,
if (config)
return config->entry;
+ rec_flag = rec_search;
+
dnode = dnode->parent;
}
@@ -2078,6 +2083,20 @@ void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath,
abort();
}
+void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath,
+ bool abort_if_not_found)
+{
+ return nb_running_get_entry_worker(dnode, xpath, abort_if_not_found,
+ true);
+}
+
+void *nb_running_get_entry_non_rec(const struct lyd_node *dnode,
+ const char *xpath, bool abort_if_not_found)
+{
+ return nb_running_get_entry_worker(dnode, xpath, abort_if_not_found,
+ false);
+}
+
/* Logging functions. */
const char *nb_event_name(enum nb_event event)
{
diff --git a/lib/northbound.h b/lib/northbound.h
index bd57013f59..d5028ea7d2 100644
--- a/lib/northbound.h
+++ b/lib/northbound.h
@@ -1165,6 +1165,14 @@ extern void *nb_running_get_entry(const struct lyd_node *dnode,
const char *xpath, bool abort_if_not_found);
/*
+ * Same as 'nb_running_get_entry', but doesn't search within parent nodes
+ * recursively if an user point is not found.
+ */
+extern void *nb_running_get_entry_non_rec(const struct lyd_node *dnode,
+ const char *xpath,
+ bool abort_if_not_found);
+
+/*
* Return a human-readable string representing a northbound event.
*
* event