diff options
| author | David Lamparter <equinox@diac24.net> | 2019-02-04 22:56:50 +0100 | 
|---|---|---|
| committer | David Lamparter <equinox@diac24.net> | 2019-02-19 21:41:39 +0100 | 
| commit | 591f57cff3e035439dff7c39a9bd688892fa5363 (patch) | |
| tree | e52873cf2ad95b7cf029809244991dac48ad8e82 /lib/yang.c | |
| parent | 3ec9556728c7fe17bb1c47e62abf75bbff29502f (diff) | |
lib: yang: use common yang_ctx_new_setup()
After creating a libyang context, we need to hook up our callback to use
embedded built-in modules.  I hadn't added this to the yang translator
code.
Also, ly_ctx_new fails if the search directory doesn't exist.  Since
that's not a hard error for us, work around that and ignore inaccessible
YANG_MODELS_DIR.  (This is needed for snap packages.)
Signed-off-by: David Lamparter <equinox@diac24.net>
Diffstat (limited to 'lib/yang.c')
| -rw-r--r-- | lib/yang.c | 27 | 
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/yang.c b/lib/yang.c index f62a8163f9..1d8e82eb28 100644 --- a/lib/yang.c +++ b/lib/yang.c @@ -649,6 +649,29 @@ CPP_NOTICE("lib/yang: time to remove non-LIBYANG_EXT_BUILTIN support")  extern struct lytype_plugin_list frr_user_types[];  #endif +struct ly_ctx *yang_ctx_new_setup(void) +{ +	struct ly_ctx *ctx; +	const char *yang_models_path = YANG_MODELS_PATH; + +	if (access(yang_models_path, R_OK | X_OK)) { +		yang_models_path = NULL; +		if (errno == ENOENT) +			zlog_info("yang model directory \"%s\" does not exist", +				  YANG_MODELS_PATH); +		else +			flog_err_sys(EC_LIB_LIBYANG, +				     "cannot access yang model directory \"%s\"", +				     YANG_MODELS_PATH); +	} + +	ctx = ly_ctx_new(yang_models_path, LY_CTX_DISABLE_SEARCHDIR_CWD); +	if (!ctx) +		return NULL; +	ly_ctx_set_module_imp_clb(ctx, yang_module_imp_clb, NULL); +	return ctx; +} +  void yang_init(void)  {  #ifndef LIBYANG_EXT_BUILTIN @@ -677,13 +700,11 @@ CPP_NOTICE("lib/yang: deprecated libyang <0.16.74 extension loading in use!")  #endif  	/* Initialize libyang container for native models. */ -	ly_native_ctx = -		ly_ctx_new(YANG_MODELS_PATH, LY_CTX_DISABLE_SEARCHDIR_CWD); +	ly_native_ctx = yang_ctx_new_setup();  	if (!ly_native_ctx) {  		flog_err(EC_LIB_LIBYANG, "%s: ly_ctx_new() failed", __func__);  		exit(1);  	} -	ly_ctx_set_module_imp_clb(ly_native_ctx, yang_module_imp_clb, NULL);  	ly_ctx_set_priv_dup_clb(ly_native_ctx, ly_dup_cb);  #ifndef LIBYANG_EXT_BUILTIN  | 
