summaryrefslogtreecommitdiff
path: root/lib/northbound.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/northbound.c')
-rw-r--r--lib/northbound.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/northbound.c b/lib/northbound.c
index 49adea6d53..2cc7ac6ea1 100644
--- a/lib/northbound.c
+++ b/lib/northbound.c
@@ -1649,10 +1649,12 @@ static int nb_oper_data_iter_container(const struct nb_node *nb_node,
uint32_t flags, nb_oper_data_cb cb,
void *arg)
{
+ const struct lysc_node *snode = nb_node->snode;
+
if (CHECK_FLAG(nb_node->flags, F_NB_NODE_CONFIG_ONLY))
return NB_OK;
- /* Presence containers. */
+ /* Read-only presence containers. */
if (nb_node->cbs.get_elem) {
struct yang_data *data;
int ret;
@@ -1662,15 +1664,24 @@ static int nb_oper_data_iter_container(const struct nb_node *nb_node,
/* Presence container is not present. */
return NB_OK;
- ret = (*cb)(nb_node->snode, translator, data, arg);
+ ret = (*cb)(snode, translator, data, arg);
if (ret != NB_OK)
return ret;
}
+ /* Read-write presence containers. */
+ if (CHECK_FLAG(snode->flags, LYS_CONFIG_W)) {
+ struct lysc_node_container *scontainer;
+
+ scontainer = (struct lysc_node_container *)snode;
+ if (CHECK_FLAG(scontainer->flags, LYS_PRESENCE)
+ && !yang_dnode_get(running_config->dnode, xpath))
+ return NB_OK;
+ }
+
/* Iterate over the child nodes. */
- return nb_oper_data_iter_children(nb_node->snode, xpath, list_entry,
- list_keys, translator, false, flags,
- cb, arg);
+ return nb_oper_data_iter_children(snode, xpath, list_entry, list_keys,
+ translator, false, flags, cb, arg);
}
static int