diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2018-11-02 21:57:20 -0200 |
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2018-11-26 17:35:58 -0200 |
| commit | 5e02643a64fb6aaaf95f6f9049020f392b5563d5 (patch) | |
| tree | dfb4c936b5ed11d9cfb0f9f6e8a2daf02e41f3e5 | |
| parent | 80243aef050c1f882a169b402ff5c50fed63b451 (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.c | 2 | ||||
| -rw-r--r-- | lib/yang.c | 10 | ||||
| -rw-r--r-- | lib/yang.h | 6 | ||||
| -rw-r--r-- | lib/yang_translator.c | 2 |
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) { |
