/* * An example of a callback handling a complex syntax */ int letters(cligen_handle h, cvec *vars, cg_var *arg) { char *str; cg_var *cv; if ((str = cvec_find_str(vars, "ca")) != NULL) printf("%s\n", str); if ((cv = cvec_find(vars, "int")) != NULL) printf("%d\n", cv_int32_get(cv)); if ((str = cvec_find_str(vars, "cb")) != NULL) printf("%s\n", str); if ((str = cvec_find_str(vars, "dd")) != NULL) printf("%s\n", str); if ((str = cvec_find_str(vars, "ee")) != NULL) printf("%s\n", str); return 0; }
/*! set debug level on stderr (not syslog). * The level is either what is specified in arg as int argument. * _or_ if a 'level' variable is present in vars use that value instead. * XXX obsolete. Use cli_debug_cliv or cli_debug_backendv instead */ int cli_debug(clicon_handle h, cvec *vars, cg_var *arg) { cg_var *cv; int level; if ((cv = cvec_find(vars, "level")) == NULL) cv = arg; level = cv_int32_get(cv); /* cli */ clicon_debug_init(level, NULL); /* 0: dont debug, 1:debug */ /* config daemon */ if (clicon_rpc_debug(h, level) < 0) goto done; done: return 0; }
/*! Compare two dbs using XML. Write to file and run diff * @param[in] h Clicon handle * @param[in] cvv * @param[in] arg arg: 0 as xml, 1: as text */ int compare_dbs(clicon_handle h, cvec *cvv, cvec *argv) { cxobj *xc1 = NULL; /* running xml */ cxobj *xc2 = NULL; /* candidate xml */ cxobj *xerr; int retval = -1; int astext; if (cvec_len(argv) > 1){ clicon_err(OE_PLUGIN, 0, "Requires 0 or 1 element. If given: astext flag 0|1"); goto done; } if (cvec_len(argv)) astext = cv_int32_get(cvec_i(argv, 0)); else astext = 0; if (clicon_rpc_get_config(h, "running", "/", &xc1) < 0) goto done; if ((xerr = xpath_first(xc1, "/rpc-error")) != NULL){ clicon_rpc_generate_error("Get configuration", xerr); goto done; } if (clicon_rpc_get_config(h, "candidate", "/", &xc2) < 0) goto done; if ((xerr = xpath_first(xc2, "/rpc-error")) != NULL){ clicon_rpc_generate_error("Get configuration", xerr); goto done; } if (compare_xmls(xc1, xc2, astext) < 0) /* astext? */ goto done; retval = 0; done: if (xc1) xml_free(xc1); if (xc2) xml_free(xc2); return retval; }
/*! Set debug level on backend daemon (not CLI) * @param[in] h Clicon handle * @param[in] vars If variable "level" exists, its integer value is used * @param[in] arg Else use the integer value of argument * @note The level is either what is specified in arg as int argument. * _or_ if a 'level' variable is present in vars use that value instead. */ int cli_debug_backend(clicon_handle h, cvec *vars, cvec *argv) { int retval = -1; cg_var *cv; int level; if ((cv = cvec_find(vars, "level")) == NULL){ if (cvec_len(argv) != 1){ clicon_err(OE_PLUGIN, 0, "Requires either label var or single arg: 0|1"); goto done; } cv = cvec_i(argv, 0); } level = cv_int32_get(cv); /* config daemon */ retval = clicon_rpc_debug(h, level); done: return retval; }
/*! Set debug level on CLI client (not backend daemon) * @param[in] h Clicon handle * @param[in] vars If variable "level" exists, its integer value is used * @param[in] arg Else use the integer value of argument * @note The level is either what is specified in arg as int argument. * _or_ if a 'level' variable is present in vars use that value instead. */ int cli_debug_cli(clicon_handle h, cvec *vars, cvec *argv) { int retval = -1; cg_var *cv; int level; if ((cv = cvec_find(vars, "level")) == NULL){ if (cvec_len(argv) != 1){ clicon_err(OE_PLUGIN, 0, "Requires either label var or single arg: 0|1"); goto done; } cv = cvec_i(argv, 0); } level = cv_int32_get(cv); /* cli */ clicon_debug_init(level, NULL); /* 0: dont debug, 1:debug */ retval = 0; done: return retval; }