lib: add possibility to search non-recursively for NB node entries

Signed-off-by: GalaxyGorilla <sascha@netdef.org>
This commit is contained in:
GalaxyGorilla 2020-03-10 09:30:20 +00:00 committed by Sebastien Merle
parent 7658c2e560
commit b112b1abb4
2 changed files with 30 additions and 3 deletions

View File

@ -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)
{

View File

@ -1164,6 +1164,14 @@ extern void *nb_running_unset_entry(const struct lyd_node *dnode);
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.
*