mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 11:18:43 +00:00
lib: add possibility to search non-recursively for NB node entries
Signed-off-by: GalaxyGorilla <sascha@netdef.org>
This commit is contained in:
parent
7658c2e560
commit
b112b1abb4
@ -2046,18 +2046,21 @@ void *nb_running_unset_entry(const struct lyd_node *dnode)
|
|||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath,
|
static void *nb_running_get_entry_worker(const struct lyd_node *dnode,
|
||||||
bool abort_if_not_found)
|
const char *xpath,
|
||||||
|
bool abort_if_not_found,
|
||||||
|
bool rec_search)
|
||||||
{
|
{
|
||||||
const struct lyd_node *orig_dnode = dnode;
|
const struct lyd_node *orig_dnode = dnode;
|
||||||
char xpath_buf[XPATH_MAXLEN];
|
char xpath_buf[XPATH_MAXLEN];
|
||||||
|
bool rec_flag = true;
|
||||||
|
|
||||||
assert(dnode || xpath);
|
assert(dnode || xpath);
|
||||||
|
|
||||||
if (!dnode)
|
if (!dnode)
|
||||||
dnode = yang_dnode_get(running_config->dnode, xpath);
|
dnode = yang_dnode_get(running_config->dnode, xpath);
|
||||||
|
|
||||||
while (dnode) {
|
while (rec_flag && dnode) {
|
||||||
struct nb_config_entry *config, s;
|
struct nb_config_entry *config, s;
|
||||||
|
|
||||||
yang_dnode_get_path(dnode, s.xpath, sizeof(s.xpath));
|
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)
|
if (config)
|
||||||
return config->entry;
|
return config->entry;
|
||||||
|
|
||||||
|
rec_flag = rec_search;
|
||||||
|
|
||||||
dnode = dnode->parent;
|
dnode = dnode->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2078,6 +2083,20 @@ void *nb_running_get_entry(const struct lyd_node *dnode, const char *xpath,
|
|||||||
abort();
|
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. */
|
/* Logging functions. */
|
||||||
const char *nb_event_name(enum nb_event event)
|
const char *nb_event_name(enum nb_event event)
|
||||||
{
|
{
|
||||||
|
@ -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,
|
extern void *nb_running_get_entry(const struct lyd_node *dnode,
|
||||||
const char *xpath, bool abort_if_not_found);
|
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.
|
* Return a human-readable string representing a northbound event.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user