summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2018-11-02 21:57:20 -0200
committerRenato Westphal <renato@opensourcerouting.org>2018-11-26 17:35:58 -0200
commit5e02643a64fb6aaaf95f6f9049020f392b5563d5 (patch)
treedfb4c936b5ed11d9cfb0f9f6e8a2daf02e41f3e5
parent80243aef050c1f882a169b402ff5c50fed63b451 (diff)
lib: make it possible to create YANG data nodes containing state data
By default the data nodes created by yang_dnode_new() could contain only configuration data (LYD_OPT_CONFIG). Add a 'config_only' option to yang_dnode_new() so that it can create data nodes containing both configuration and state data. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
-rw-r--r--lib/northbound.c2
-rw-r--r--lib/yang.c10
-rw-r--r--lib/yang.h6
-rw-r--r--lib/yang_translator.c2
4 files changed, 15 insertions, 5 deletions
diff --git a/lib/northbound.c b/lib/northbound.c
index 12d08310c6..21bbc63f67 100644
--- a/lib/northbound.c
+++ b/lib/northbound.c
@@ -189,7 +189,7 @@ struct nb_config *nb_config_new(struct lyd_node *dnode)
if (dnode)
config->dnode = dnode;
else
- config->dnode = yang_dnode_new(ly_native_ctx);
+ config->dnode = yang_dnode_new(ly_native_ctx, true);
config->version = 0;
return config;
diff --git a/lib/yang.c b/lib/yang.c
index 0e7ea3037e..660a54a22a 100644
--- a/lib/yang.c
+++ b/lib/yang.c
@@ -496,12 +496,18 @@ void *yang_dnode_get_entry(const struct lyd_node *dnode)
abort();
}
-struct lyd_node *yang_dnode_new(struct ly_ctx *ly_ctx)
+struct lyd_node *yang_dnode_new(struct ly_ctx *ly_ctx, bool config_only)
{
struct lyd_node *dnode;
+ int options;
+
+ if (config_only)
+ options = LYD_OPT_CONFIG;
+ else
+ options = LYD_OPT_DATA | LYD_OPT_DATA_NO_YANGLIB;
dnode = NULL;
- if (lyd_validate(&dnode, LYD_OPT_CONFIG, ly_ctx) != 0) {
+ if (lyd_validate(&dnode, options, ly_ctx) != 0) {
/* Should never happen. */
flog_err(EC_LIB_LIBYANG, "%s: lyd_validate() failed", __func__);
exit(1);
diff --git a/lib/yang.h b/lib/yang.h
index ab605441ad..b55d7bcb5e 100644
--- a/lib/yang.h
+++ b/lib/yang.h
@@ -371,10 +371,14 @@ extern void *yang_dnode_get_entry(const struct lyd_node *dnode);
* ly_ctx
* libyang context to operate on.
*
+ * config
+ * Specify whether the data node will contain only configuration data (true)
+ * or both configuration data and state data (false).
+ *
* Returns:
* Pointer to newly created libyang data node.
*/
-extern struct lyd_node *yang_dnode_new(struct ly_ctx *ly_ctx);
+extern struct lyd_node *yang_dnode_new(struct ly_ctx *ly_ctx, bool config_only);
/*
* Duplicate a libyang data node.
diff --git a/lib/yang_translator.c b/lib/yang_translator.c
index 27b92a0e6b..c41a8f3eea 100644
--- a/lib/yang_translator.c
+++ b/lib/yang_translator.c
@@ -351,7 +351,7 @@ int yang_translate_dnode(const struct yang_translator *translator, int dir,
ly_ctx = ly_native_ctx;
else
ly_ctx = translator->ly_ctx;
- new = yang_dnode_new(ly_ctx);
+ new = yang_dnode_new(ly_ctx, false);
/* Iterate over all nodes from the data tree. */
LY_TREE_FOR (*dnode, root) {