Restructured error,debug anf log API
Renamed functions clicon->clixon, replaced global variables w access functions Unified clicon_netconf_error with clixon_err()
This commit is contained in:
parent
261469be16
commit
24a4991ec8
199 changed files with 4668 additions and 4158 deletions
33
CHANGELOG.md
33
CHANGELOG.md
|
|
@ -23,6 +23,39 @@ Expected: February 2024
|
|||
* Added reference count for shared yang-specs (schema mounts)
|
||||
* Allowed for sharing yspec+modules between several mountpoints
|
||||
|
||||
### C/CLI-API changes on existing features
|
||||
Developers may need to change their code
|
||||
|
||||
* Refactoring basic clixon modules and some API changes
|
||||
* Changes marked in code with `COMPAT_6_5`
|
||||
* Most common functions have backward compatible macros through the 6.6 release
|
||||
* Handle API
|
||||
* Renamed `clicon_handle` -> `clixon_handle`
|
||||
* `clicon_handle_init()` -> `clixon_handle_init()
|
||||
* `clicon_handle_exit()` -> `clixon_handle_exit()
|
||||
* Log/Debug API
|
||||
* Changed function names. You need to rename as follows:
|
||||
* `clicon_log_init()` -> `clixon_log_init(h,)` NOTE added "clixon_handle h"
|
||||
* `clicon_log()` -> `clixon_log(h,)` NOTE added "clixon_handle h"
|
||||
* `clixon_debug_init(d, f)` -> `clixon_debug_init(h, )` NOTE h added, f removed
|
||||
* `clicon_log_xml()` -> `clixon_debug_xml(h,)` NOTE added "clixon_handle h"
|
||||
* `clixon_debug_xml()` -> `clixon_debug_xml(h,)` NOTE added "clixon_handle h"
|
||||
* Error API:
|
||||
* Added `clixon_err_init(h)` function
|
||||
* Renaming, make the following changes:
|
||||
* `clicon_err()` -> `clixon_err()`
|
||||
* `clicon_err_reset()` -> `clixon_err_reset()`
|
||||
* `clicon_strerror(int)` -> `clixon_err_str()`
|
||||
* `clicon_netconf_error(h, x, fmt)` -> clixon_err_netconf(h, OE_XML, 0, x, fmt)`
|
||||
* `netconf_err2cb(...)` --> `netconf_err2cb(h, ...)`
|
||||
* Likewise for some other minor functions: `clicon_err_*` -> `clixon_err_*`
|
||||
* Replaced global variables with access functions. Replace variables with functions as follows:
|
||||
* `clicon_errno` -> `clixon_err_category()`
|
||||
* `clicon_suberrno` -> `clixon_err_subnr()`
|
||||
* `clicon_err_reason` -> `clixon_err_reason()`
|
||||
* Changed process API:
|
||||
* `clixon_proc_socket(...)` --> `clixon_proc_socket(h, ...)`
|
||||
|
||||
### Corrected Bugs
|
||||
|
||||
* Fixed: [Using the characters '<' and '>' might cause an invalid diff](https://github.com/clicon/clixon-controller/issues/73)
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ is identified, exit as soon as possible and with an explicit error log.
|
|||
Errors are typically declared as follows:
|
||||
```
|
||||
if (myfn(0) < 0){
|
||||
clicon_err(OE_UNIX, EINVAL, "myfn");
|
||||
clixon_err(OE_UNIX, EINVAL, "myfn");
|
||||
goto done;
|
||||
}
|
||||
```
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_client.h"
|
||||
|
|
@ -105,11 +105,11 @@ ce_client_descr(struct client_entry *ce,
|
|||
char *id = NULL;
|
||||
|
||||
if (ce == NULL || cbp == NULL){
|
||||
clicon_err(OE_UNIX, EINVAL, "ce or cbp is NULL");
|
||||
clixon_err(OE_UNIX, EINVAL, "ce or cbp is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (ce->ce_transport){
|
||||
|
|
@ -137,7 +137,7 @@ ce_client_descr(struct client_entry *ce,
|
|||
* @see stream_ss_add
|
||||
*/
|
||||
int
|
||||
ce_event_cb(clicon_handle h,
|
||||
ce_event_cb(clixon_handle h,
|
||||
int op,
|
||||
cxobj *event,
|
||||
void *arg)
|
||||
|
|
@ -158,7 +158,7 @@ ce_event_cb(clicon_handle h,
|
|||
goto done;
|
||||
if (send_msg_notify_xml(h, ce->ce_s, cbuf_get(cbce), event) < 0){
|
||||
if (errno == ECONNRESET || errno == EPIPE){
|
||||
clicon_log(LOG_WARNING, "client %d reset", ce->ce_nr);
|
||||
clixon_log(h, LOG_WARNING, "client %d reset", ce->ce_nr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -179,7 +179,7 @@ ce_event_cb(clicon_handle h,
|
|||
* @see xmldb_unlock_all unlocks, but does not call user callbacks which is a backend thing
|
||||
*/
|
||||
static int
|
||||
release_all_dbs(clicon_handle h,
|
||||
release_all_dbs(clixon_handle h,
|
||||
uint32_t id)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -224,7 +224,7 @@ release_all_dbs(clicon_handle h,
|
|||
* @see RFC 6022
|
||||
*/
|
||||
int
|
||||
backend_monitoring_state_get(clicon_handle h,
|
||||
backend_monitoring_state_get(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
char *xpath,
|
||||
cvec *nsc,
|
||||
|
|
@ -238,7 +238,7 @@ backend_monitoring_state_get(clicon_handle h,
|
|||
int ret;
|
||||
|
||||
if ((cb = cbuf_new()) ==NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<netconf-state xmlns=\"%s\">", NETCONF_MONITORING_NAMESPACE);
|
||||
|
|
@ -248,7 +248,7 @@ backend_monitoring_state_get(clicon_handle h,
|
|||
cprintf(cb, "<session-id>%u</session-id>", ce->ce_id);
|
||||
if (ce->ce_transport == NULL){
|
||||
#ifdef NOTYET // XXX: too strict, race conditions in clixon_snmp
|
||||
clicon_err(OE_XML, 0, "Mandatory element transport missing");
|
||||
clixon_err(OE_XML, 0, "Mandatory element transport missing");
|
||||
goto done;
|
||||
#else
|
||||
cprintf(cb, "<transport xmlns:%s=\"%s\">cl:netconf</transport>",
|
||||
|
|
@ -264,7 +264,7 @@ backend_monitoring_state_get(clicon_handle h,
|
|||
cprintf(cb, "<source-host>%s</source-host>", ce->ce_source_host);
|
||||
if (ce->ce_time.tv_sec != 0){
|
||||
if (time2str(&ce->ce_time, timestr, sizeof(timestr)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "time2str");
|
||||
clixon_err(OE_UNIX, errno, "time2str");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<login-time>%s</login-time>", timestr);
|
||||
|
|
@ -304,7 +304,7 @@ backend_monitoring_state_get(clicon_handle h,
|
|||
* @see backend_client_delete for actual deallocation of client entry struct
|
||||
*/
|
||||
int
|
||||
backend_client_rm(clicon_handle h,
|
||||
backend_client_rm(clixon_handle h,
|
||||
struct client_entry *ce)
|
||||
{
|
||||
struct client_entry *c;
|
||||
|
|
@ -316,7 +316,7 @@ backend_client_rm(clicon_handle h,
|
|||
|
||||
/* If the confirmed-commit feature is enabled, rollback any ephemeral commit originated by this client */
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL) {
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if (if_feature(yspec, "ietf-netconf", "confirmed-commit")) {
|
||||
|
|
@ -326,7 +326,7 @@ backend_client_rm(clicon_handle h,
|
|||
|
||||
if (myid == confirmed_commit_session_id_get(h)) {
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "ok, rolling back");
|
||||
clicon_log(LOG_NOTICE, "a client with an active ephemeral confirmed-commit has disconnected; rolling back");
|
||||
clixon_log(h, LOG_NOTICE, "a client with an active ephemeral confirmed-commit has disconnected; rolling back");
|
||||
|
||||
/* do_rollback errors are logged internally and there is no client to report errors to, so errors are
|
||||
* ignored here.
|
||||
|
|
@ -369,7 +369,7 @@ backend_client_rm(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
clixon_stats_datastore_get(clicon_handle h,
|
||||
clixon_stats_datastore_get(clixon_handle h,
|
||||
char *dbname,
|
||||
cbuf *cb)
|
||||
{
|
||||
|
|
@ -412,7 +412,7 @@ clixon_stats_datastore_get(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
clixon_stats_module_get(clicon_handle h,
|
||||
clixon_stats_module_get(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
cbuf *cb)
|
||||
{
|
||||
|
|
@ -452,7 +452,7 @@ clixon_stats_module_get(clicon_handle h,
|
|||
* But this could discard other previous changes to candidate.
|
||||
*/
|
||||
static int
|
||||
from_client_edit_config(clicon_handle h,
|
||||
from_client_edit_config(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -480,7 +480,7 @@ from_client_edit_config(clicon_handle h,
|
|||
|
||||
username = clicon_username_get(h);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec9");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec9");
|
||||
goto done;
|
||||
}
|
||||
if ((target = netconf_db_find(xn, "target")) == NULL){
|
||||
|
|
@ -489,7 +489,7 @@ from_client_edit_config(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Check if target locked by other client */
|
||||
|
|
@ -572,7 +572,7 @@ from_client_edit_config(clicon_handle h,
|
|||
if (xml_sort_recurse(xc) < 0)
|
||||
goto done;
|
||||
if ((ret = xmldb_put(h, target, operation, xc, username, cbret)) < 0){
|
||||
if (netconf_operation_failed(cbret, "protocol", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "protocol", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
}
|
||||
|
|
@ -614,14 +614,14 @@ from_client_edit_config(clicon_handle h,
|
|||
}
|
||||
}
|
||||
if ((ret = candidate_commit(h, NULL, "candidate", myid, 0, cbret)) < 0){ /* Assume validation fail, nofatal */
|
||||
if (netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
xmldb_copy(h, "running", "candidate");
|
||||
goto ok;
|
||||
}
|
||||
if (ret == 0){ /* discard */
|
||||
if (xmldb_copy(h, "running", "candidate") < 0){
|
||||
if (netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
}
|
||||
|
|
@ -632,13 +632,13 @@ from_client_edit_config(clicon_handle h,
|
|||
if ((attr = xml_find_value(xn, "copystartup")) != NULL &&
|
||||
strcmp(attr,"true") == 0){
|
||||
if (xmldb_copy(h, "running", "startup") < 0){
|
||||
if (netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
}
|
||||
}
|
||||
if (cbuf_len(cbret) != 0){
|
||||
clicon_err(OE_NETCONF, EINVAL, "Internal error: cbret is not empty");
|
||||
clixon_err(OE_NETCONF, EINVAL, "Internal error: cbret is not empty");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbret, "<rpc-reply xmlns=\"%s\"><ok", NETCONF_BASE_NAMESPACE);
|
||||
|
|
@ -675,7 +675,7 @@ from_client_edit_config(clicon_handle h,
|
|||
* - access denied if user lacks create/delete/update
|
||||
*/
|
||||
static int
|
||||
from_client_copy_config(clicon_handle h,
|
||||
from_client_copy_config(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -696,7 +696,7 @@ from_client_copy_config(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((target = netconf_db_find(xe, "target")) == NULL){
|
||||
|
|
@ -714,10 +714,10 @@ from_client_copy_config(clicon_handle h,
|
|||
}
|
||||
if (xmldb_copy(h, source, target) < 0){
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Copy %s datastore to %s: %s", source, target, clicon_err_reason);
|
||||
cprintf(cbmsg, "Copy %s datastore to %s: %s", source, target, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "application", cbuf_get(cbmsg))< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
|
|
@ -745,7 +745,7 @@ from_client_copy_config(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_delete_config(clicon_handle h,
|
||||
from_client_delete_config(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -767,7 +767,7 @@ from_client_delete_config(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Check if target locked by other client */
|
||||
|
|
@ -780,20 +780,20 @@ from_client_delete_config(clicon_handle h,
|
|||
}
|
||||
if (xmldb_delete(h, target) < 0){
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Delete %s datastore: %s", target, clicon_err_reason);
|
||||
cprintf(cbmsg, "Delete %s datastore: %s", target, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "protocol", cbuf_get(cbmsg))< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
}
|
||||
if (xmldb_create(h, target) < 0){
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Create %s datastore: %s", target, clicon_err_reason);
|
||||
cprintf(cbmsg, "Create %s datastore: %s", target, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "protocol", cbuf_get(cbmsg))< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
|
|
@ -821,7 +821,7 @@ from_client_delete_config(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_lock(clicon_handle h,
|
||||
from_client_lock(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -837,7 +837,7 @@ from_client_lock(clicon_handle h,
|
|||
yang_stmt *yspec;
|
||||
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if ((db = netconf_db_find(xe, "target")) == NULL){
|
||||
|
|
@ -846,7 +846,7 @@ from_client_lock(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/*
|
||||
|
|
@ -908,7 +908,7 @@ from_client_lock(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_unlock(clicon_handle h,
|
||||
from_client_unlock(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -927,7 +927,7 @@ from_client_unlock(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
iddb = xmldb_islocked(h, db);
|
||||
|
|
@ -978,7 +978,7 @@ from_client_unlock(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_close_session(clicon_handle h,
|
||||
from_client_close_session(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1005,7 +1005,7 @@ from_client_close_session(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_kill_session(clicon_handle h,
|
||||
from_client_kill_session(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1070,7 +1070,7 @@ from_client_kill_session(clicon_handle h,
|
|||
* </create-subscription>
|
||||
*/
|
||||
static int
|
||||
from_client_create_subscription(clicon_handle h,
|
||||
from_client_create_subscription(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1163,7 +1163,7 @@ from_client_create_subscription(clicon_handle h,
|
|||
* @see RFC6022, ietf-netconf-monitoring.yang
|
||||
*/
|
||||
static int
|
||||
from_client_get_schema(clicon_handle h,
|
||||
from_client_get_schema(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1184,7 +1184,7 @@ from_client_get_schema(clicon_handle h,
|
|||
const char *filename;
|
||||
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if ((nsc = xml_nsctx_init(NULL, NETCONF_MONITORING_NAMESPACE)) == NULL)
|
||||
|
|
@ -1229,7 +1229,7 @@ from_client_get_schema(clicon_handle h,
|
|||
}
|
||||
if (ymatch == NULL){
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (version)
|
||||
|
|
@ -1242,7 +1242,7 @@ from_client_get_schema(clicon_handle h,
|
|||
}
|
||||
if (format && strcmp(format, "yang") != 0){
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Format not supported: %s", format);
|
||||
|
|
@ -1253,7 +1253,7 @@ from_client_get_schema(clicon_handle h,
|
|||
cprintf(cbret, "<rpc-reply xmlns=\"%s\"><data xmlns=\"%s\">",
|
||||
NETCONF_BASE_NAMESPACE, NETCONF_MONITORING_NAMESPACE);
|
||||
if ((cbyang = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((filename = yang_filename_get(ymatch)) != NULL){
|
||||
|
|
@ -1285,7 +1285,7 @@ from_client_get_schema(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_debug(clicon_handle h,
|
||||
from_client_debug(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1302,9 +1302,9 @@ from_client_debug(clicon_handle h,
|
|||
}
|
||||
level = atoi(valstr);
|
||||
|
||||
clixon_debug_init(level, NULL); /* 0: dont debug, 1:debug */
|
||||
clixon_debug_init(h, level); /* 0: dont debug, 1:debug */
|
||||
setlogmask(LOG_UPTO(level?LOG_DEBUG:LOG_INFO)); /* for syslog */
|
||||
clicon_log(LOG_NOTICE, "%s debug:%d", __FUNCTION__, clixon_debug_get());
|
||||
clixon_log(h, LOG_NOTICE, "%s debug:%d", __FUNCTION__, clixon_debug_get());
|
||||
cprintf(cbret, "<rpc-reply xmlns=\"%s\"><ok/></rpc-reply>", NETCONF_BASE_NAMESPACE);
|
||||
ok:
|
||||
retval = 0;
|
||||
|
|
@ -1323,7 +1323,7 @@ from_client_debug(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_ping(clicon_handle h,
|
||||
from_client_ping(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1344,7 +1344,7 @@ from_client_ping(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_stats(clicon_handle h,
|
||||
from_client_stats(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1437,7 +1437,7 @@ from_client_stats(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_restart_plugin(clicon_handle h,
|
||||
from_client_restart_plugin(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1485,7 +1485,7 @@ from_client_restart_plugin(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_process_control(clicon_handle h,
|
||||
from_client_process_control(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1529,7 +1529,7 @@ from_client_process_control(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
from_client_hello(clicon_handle h,
|
||||
from_client_hello(clixon_handle h,
|
||||
cxobj *x,
|
||||
struct client_entry *ce,
|
||||
cbuf *cbret)
|
||||
|
|
@ -1539,13 +1539,13 @@ from_client_hello(clicon_handle h,
|
|||
|
||||
if ((val = xml_find_type_value(x, "cl", "transport", CX_ATTR)) != NULL){
|
||||
if ((ce->ce_transport = strdup(val)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if ((val = xml_find_type_value(x, "cl", "source-host", CX_ATTR)) != NULL){
|
||||
if ((ce->ce_source_host = strdup(val)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1566,7 +1566,7 @@ from_client_hello(clicon_handle h,
|
|||
* propagated back to client.
|
||||
*/
|
||||
static int
|
||||
from_client_msg(clicon_handle h,
|
||||
from_client_msg(clixon_handle h,
|
||||
struct client_entry *ce,
|
||||
struct clicon_msg *msg)
|
||||
{
|
||||
|
|
@ -1598,7 +1598,7 @@ from_client_msg(clicon_handle h,
|
|||
* as wither rpc-error or by positive response.
|
||||
*/
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Decode msg from client -> xml top (ct) and session id
|
||||
|
|
@ -1627,7 +1627,7 @@ from_client_msg(clicon_handle h,
|
|||
goto reply;
|
||||
}
|
||||
if ((x = xml_child_i_type(xt, 0, CX_ELMNT)) == NULL){ /* Shouldnt happen */
|
||||
clicon_err(OE_XML, EFAULT, "No xml req (shouldnt happen)");
|
||||
clixon_err(OE_XML, EFAULT, "No xml req (shouldnt happen)");
|
||||
goto done;
|
||||
}
|
||||
rpcname = xml_name(x);
|
||||
|
|
@ -1647,7 +1647,7 @@ from_client_msg(clicon_handle h,
|
|||
(ce0 = ce_find_byid(backend_client_list(h), op_id)) != NULL &&
|
||||
ce0->ce_transport){
|
||||
if ((ce->ce_transport = strdup(ce0->ce_transport)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1665,7 +1665,7 @@ from_client_msg(clicon_handle h,
|
|||
else if (strcmp(namespace, NETCONF_BASE_NAMESPACE) != 0){
|
||||
cbuf *cbmsg = NULL;
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "No appropriate namespace found for: %s %s", rpcprefix, rpcname);
|
||||
|
|
@ -1724,7 +1724,7 @@ from_client_msg(clicon_handle h,
|
|||
goto reply;
|
||||
}
|
||||
if ((ymod = ys_module(ye)) == NULL){
|
||||
clicon_err(OE_XML, ENOENT, "rpc yang does not have module");
|
||||
clixon_err(OE_XML, ENOENT, "rpc yang does not have module");
|
||||
goto done;
|
||||
}
|
||||
module = yang_argument_get(ymod);
|
||||
|
|
@ -1762,11 +1762,11 @@ from_client_msg(clicon_handle h,
|
|||
goto reply;
|
||||
}
|
||||
}
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
if ((ret = rpc_callback_call(h, xe, ce, &nr, cbret)) < 0){
|
||||
if (netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
clicon_log(LOG_NOTICE, "%s Error in rpc_callback_call:%s", __FUNCTION__, xml_name(xe));
|
||||
clixon_log(h, LOG_NOTICE, "%s Error in rpc_callback_call:%s", __FUNCTION__, xml_name(xe));
|
||||
ce->ce_out_rpc_errors++;
|
||||
netconf_monitoring_counter_inc(h, "out-rpc-errors");
|
||||
goto reply; /* Dont quit here on user callbacks */
|
||||
|
|
@ -1792,7 +1792,8 @@ from_client_msg(clicon_handle h,
|
|||
} /* while */
|
||||
reply:
|
||||
if (cbuf_len(cbret) == 0)
|
||||
if (netconf_operation_failed(cbret, "application", clicon_errno?clicon_err_reason:"unknown")< 0)
|
||||
if (netconf_operation_failed(cbret, "application",
|
||||
clixon_err_category()?clixon_err_reason():"unknown")< 0)
|
||||
goto done;
|
||||
// XXX clixon_debug(CLIXON_DBG_MSG, "Reply:%s", cbuf_get(cbret));
|
||||
/* XXX problem here is that cbret has not been parsed so may contain
|
||||
|
|
@ -1810,7 +1811,7 @@ from_client_msg(clicon_handle h,
|
|||
* the (UNIX domain) socket.
|
||||
*/
|
||||
case ECONNRESET:
|
||||
clicon_log(LOG_WARNING, "client rpc reset");
|
||||
clixon_log(h, LOG_WARNING, "client rpc reset");
|
||||
break;
|
||||
default:
|
||||
goto done;
|
||||
|
|
@ -1833,9 +1834,9 @@ from_client_msg(clicon_handle h,
|
|||
cbuf_free(cbce);
|
||||
if (cbret)
|
||||
cbuf_free(cbret);
|
||||
/* Sanity: log if clicon_err() is not called ! */
|
||||
if (retval < 0 && clicon_errno < 0)
|
||||
clicon_log(LOG_NOTICE, "%s: Internal error: No clicon_err call on RPC error (message: %s)",
|
||||
/* Sanity: log if clixon_err() is not called ! */
|
||||
if (retval < 0 && clixon_err_category() < 0)
|
||||
clixon_log(h, LOG_NOTICE, "%s: Internal error: No clixon_err call on RPC error (message: %s)",
|
||||
__FUNCTION__, rpc?rpc:"");
|
||||
// clixon_debug(CLIXON_DBG_DEFAULT, "%s retval:%d", __FUNCTION__, retval);
|
||||
return retval;// -1 here terminates backend
|
||||
|
|
@ -1856,13 +1857,13 @@ from_client(int s,
|
|||
int retval = -1;
|
||||
struct clicon_msg *msg = NULL;
|
||||
struct client_entry *ce = (struct client_entry *)arg;
|
||||
clicon_handle h = ce->ce_handle;
|
||||
clixon_handle h = ce->ce_handle;
|
||||
int eof = 0;
|
||||
cbuf *cbce = NULL;
|
||||
|
||||
clixon_debug(CLIXON_DBG_DETAIL, "%s", __FUNCTION__);
|
||||
if (s != ce->ce_s){
|
||||
clicon_err(OE_NETCONF, EINVAL, "Internal error: s != ce->ce_s");
|
||||
clixon_err(OE_NETCONF, EINVAL, "Internal error: s != ce->ce_s");
|
||||
goto done;
|
||||
}
|
||||
if (ce_client_descr(ce, &cbce) < 0)
|
||||
|
|
@ -1894,7 +1895,7 @@ from_client(int s,
|
|||
* @see ietf-netconf@2011-06-01.yang
|
||||
*/
|
||||
int
|
||||
backend_rpc_init(clicon_handle h)
|
||||
backend_rpc_init(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int backend_monitoring_state_get(clicon_handle h, yang_stmt *yspec, char *xpath, cvec *nsc, cxobj **xret, cxobj **xerr);
|
||||
int backend_client_rm(clicon_handle h, struct client_entry *ce);
|
||||
int backend_monitoring_state_get(clixon_handle h, yang_stmt *yspec, char *xpath, cvec *nsc, cxobj **xret, cxobj **xerr);
|
||||
int backend_client_rm(clixon_handle h, struct client_entry *ce);
|
||||
int from_client(int fd, void *arg);
|
||||
int backend_rpc_init(clicon_handle h);
|
||||
int backend_rpc_init(clixon_handle h);
|
||||
|
||||
#endif /* _BACKEND_CLIENT_H_ */
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
generic_validate(clicon_handle h,
|
||||
generic_validate(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
transaction_data_t *td,
|
||||
cxobj **xret)
|
||||
|
|
@ -158,7 +158,7 @@ generic_validate(clicon_handle h,
|
|||
* @see validate_common for incoming validate/commit
|
||||
*/
|
||||
static int
|
||||
startup_common(clicon_handle h,
|
||||
startup_common(clixon_handle h,
|
||||
char *db,
|
||||
transaction_data_t *td,
|
||||
cbuf *cbret)
|
||||
|
|
@ -189,7 +189,7 @@ startup_common(clicon_handle h,
|
|||
/* Print upgraded db: -q backend switch for debugging/ showing upgraded config only */
|
||||
if (clicon_quit_upgrade_get(h) == 1){
|
||||
xml_print(stderr, xerr);
|
||||
clicon_err(OE_XML, 0, "invalid configuration before upgrade");
|
||||
clixon_err(OE_XML, 0, "invalid configuration before upgrade");
|
||||
exit(0); /* This is fairly abrupt , but need to avoid side-effects of rewinding
|
||||
* See similar clause below
|
||||
*/
|
||||
|
|
@ -205,12 +205,12 @@ startup_common(clicon_handle h,
|
|||
}
|
||||
clixon_debug_xml(CLIXON_DBG_DETAIL, xt, "startup");
|
||||
if (msdiff && msdiff->md_status == 0){ // Possibly check for CLICON_XMLDB_MODSTATE
|
||||
clicon_log(LOG_WARNING, "Modstate expected in startup datastore but not found\n"
|
||||
clixon_log(h, LOG_WARNING, "Modstate expected in startup datastore but not found\n"
|
||||
"This may indicate that the datastore is not initialized corrrectly, such as copy/pasted.\n"
|
||||
"It may also be normal bootstrapping since module state will be written on next datastore save");
|
||||
}
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Yang spec not set");
|
||||
clixon_err(OE_YANG, 0, "Yang spec not set");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "Reading startup config done");
|
||||
|
|
@ -237,16 +237,16 @@ startup_common(clicon_handle h,
|
|||
if ((ret = xml_bind_yang(h, xt, YB_MODULE, yspec, &xret)) < 1){
|
||||
if (ret == 0){
|
||||
/* invalid */
|
||||
clicon_err(OE_XML, EFAULT, "invalid configuration");
|
||||
clixon_err(OE_XML, EFAULT, "invalid configuration");
|
||||
}
|
||||
else {
|
||||
/* error */
|
||||
xml_print(stderr, xret);
|
||||
clicon_err(OE_XML, 0, "%s: YANG binding error", __func__);
|
||||
clixon_err(OE_XML, 0, "%s: YANG binding error", __func__);
|
||||
}
|
||||
} /* sort yang */
|
||||
else if (xml_sort_recurse(xt) < 0) {
|
||||
clicon_err(OE_XML, EFAULT, "Yang sort error");
|
||||
clixon_err(OE_XML, EFAULT, "Yang sort error");
|
||||
}
|
||||
if (xmldb_dump(h, stdout, xt) < 0)
|
||||
goto done;
|
||||
|
|
@ -345,7 +345,7 @@ startup_common(clicon_handle h,
|
|||
* @retval -1 Error - or validation failed (but cbret not set)
|
||||
*/
|
||||
int
|
||||
startup_validate(clicon_handle h,
|
||||
startup_validate(clixon_handle h,
|
||||
char *db,
|
||||
cxobj **xtr,
|
||||
cbuf *cbret)
|
||||
|
|
@ -396,7 +396,7 @@ startup_validate(clicon_handle h,
|
|||
* Only called from startup_mode_startup
|
||||
*/
|
||||
int
|
||||
startup_commit(clicon_handle h,
|
||||
startup_commit(clixon_handle h,
|
||||
char *db,
|
||||
cbuf *cbret)
|
||||
{
|
||||
|
|
@ -405,7 +405,7 @@ startup_commit(clicon_handle h,
|
|||
transaction_data_t *td = NULL;
|
||||
|
||||
if (strcmp(db,"running")==0){
|
||||
clicon_err(OE_FATAL, 0, "Invalid startup db: %s", db);
|
||||
clixon_err(OE_FATAL, 0, "Invalid startup db: %s", db);
|
||||
goto done;
|
||||
}
|
||||
/* Handcraft a transition with only target and add trees */
|
||||
|
|
@ -479,7 +479,7 @@ startup_commit(clicon_handle h,
|
|||
* @see startup_common for startup scenario
|
||||
*/
|
||||
static int
|
||||
validate_common(clicon_handle h,
|
||||
validate_common(clixon_handle h,
|
||||
char *db,
|
||||
transaction_data_t *td,
|
||||
cxobj **xret)
|
||||
|
|
@ -491,7 +491,7 @@ validate_common(clicon_handle h,
|
|||
int ret;
|
||||
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
/* This is the state we are going to */
|
||||
|
|
@ -581,7 +581,7 @@ validate_common(clicon_handle h,
|
|||
* @retval -1 Error - or validation failed
|
||||
*/
|
||||
int
|
||||
candidate_validate(clicon_handle h,
|
||||
candidate_validate(clixon_handle h,
|
||||
char *db,
|
||||
cbuf *cbret)
|
||||
{
|
||||
|
|
@ -592,7 +592,7 @@ candidate_validate(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (db == NULL || cbret == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "db or cbret is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "db or cbret is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* 1. Start transaction */
|
||||
|
|
@ -602,23 +602,23 @@ candidate_validate(clicon_handle h,
|
|||
if ((ret = validate_common(h, db, td, &xret)) < 0){
|
||||
/* A little complex due to several sources of validation fails or errors.
|
||||
* (1) xerr is set -> translate to cbret; (2) cbret set use that; otherwise
|
||||
* use clicon_err.
|
||||
* use clixon_err.
|
||||
* TODO: -1 return should be fatal error, not failed validation
|
||||
*/
|
||||
if (!cbuf_len(cbret) &&
|
||||
netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto fail;
|
||||
}
|
||||
if (ret == 0){
|
||||
if (xret == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "xret is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "xret is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cbret, xret, 0, 0, NULL, -1, 0) < 0)
|
||||
goto done;
|
||||
if (!cbuf_len(cbret) &&
|
||||
netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -660,7 +660,7 @@ candidate_validate(clicon_handle h,
|
|||
* @retval -1 Error - or validation failed
|
||||
*/
|
||||
int
|
||||
candidate_commit(clicon_handle h,
|
||||
candidate_commit(clixon_handle h,
|
||||
cxobj *xe,
|
||||
char *db,
|
||||
uint32_t myid,
|
||||
|
|
@ -694,7 +694,7 @@ candidate_commit(clicon_handle h,
|
|||
* to activate it.
|
||||
*/
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL) {
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -786,7 +786,7 @@ candidate_commit(clicon_handle h,
|
|||
* candidate_commit() method.
|
||||
*/
|
||||
int
|
||||
from_client_commit(clicon_handle h,
|
||||
from_client_commit(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -801,7 +801,7 @@ from_client_commit(clicon_handle h,
|
|||
yang_stmt *yspec;
|
||||
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL) {
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if (if_feature(yspec, "ietf-netconf", "confirmed-commit")) {
|
||||
|
|
@ -814,7 +814,7 @@ from_client_commit(clicon_handle h,
|
|||
iddb = xmldb_islocked(h, "running");
|
||||
if (iddb && myid != iddb){
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (netconf_in_use(cbret, "protocol", "Operation failed, lock is already held") < 0)
|
||||
|
|
@ -824,7 +824,7 @@ from_client_commit(clicon_handle h,
|
|||
if ((ret = candidate_commit(h, xe, "candidate", myid, 0, cbret)) < 0){ /* Assume validation fail, nofatal */
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "Commit candidate failed");
|
||||
if (ret < 0)
|
||||
if (netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
}
|
||||
|
|
@ -852,7 +852,7 @@ from_client_commit(clicon_handle h,
|
|||
* NACM: No datastore permissions are needed.
|
||||
*/
|
||||
int
|
||||
from_client_discard_changes(clicon_handle h,
|
||||
from_client_discard_changes(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -868,7 +868,7 @@ from_client_discard_changes(clicon_handle h,
|
|||
iddb = xmldb_islocked(h, "candidate");
|
||||
if (iddb && myid != iddb){
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbx, "<session-id>%u</session-id>", iddb);
|
||||
|
|
@ -877,7 +877,7 @@ from_client_discard_changes(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if (xmldb_copy(h, "running", "candidate") < 0){
|
||||
if (netconf_operation_failed(cbret, "application", clicon_err_reason)< 0)
|
||||
if (netconf_operation_failed(cbret, "application", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
}
|
||||
|
|
@ -903,7 +903,7 @@ from_client_discard_changes(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
from_client_validate(clicon_handle h,
|
||||
from_client_validate(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -935,7 +935,7 @@ from_client_validate(clicon_handle h,
|
|||
* difficult in the general case.
|
||||
*/
|
||||
int
|
||||
from_client_restart_one(clicon_handle h,
|
||||
from_client_restart_one(clixon_handle h,
|
||||
clixon_plugin_t *cp,
|
||||
cbuf *cbret)
|
||||
{
|
||||
|
|
@ -1065,7 +1065,7 @@ running ----|-------+---------------> RUNNING FAILSAFE
|
|||
tmp |---------------------->
|
||||
*/
|
||||
int
|
||||
load_failsafe(clicon_handle h,
|
||||
load_failsafe(clixon_handle h,
|
||||
char *phase)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -1076,13 +1076,13 @@ load_failsafe(clicon_handle h,
|
|||
phase = phase == NULL ? "(unknown)" : phase;
|
||||
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = xmldb_exists(h, db)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){ /* No it does not exist, fail */
|
||||
clicon_err(OE_DB, 0, "%s failed and no Failsafe database found, exiting", phase);
|
||||
clixon_err(OE_DB, 0, "%s failed and no Failsafe database found, exiting", phase);
|
||||
goto done;
|
||||
}
|
||||
/* Copy original running to tmp as backup (restore if error) */
|
||||
|
|
@ -1097,10 +1097,10 @@ load_failsafe(clicon_handle h,
|
|||
if (ret < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clicon_err(OE_DB, 0, "%s failed, Failsafe database validation failed %s", phase, cbuf_get(cbret));
|
||||
clixon_err(OE_DB, 0, "%s failed, Failsafe database validation failed %s", phase, cbuf_get(cbret));
|
||||
goto done;
|
||||
}
|
||||
clicon_log(LOG_NOTICE, "%s failed, Failsafe database loaded ", phase);
|
||||
clixon_log(h, LOG_NOTICE, "%s failed, Failsafe database loaded ", phase);
|
||||
retval = 0;
|
||||
done:
|
||||
if (cbret)
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -83,17 +83,17 @@ struct confirmed_commit {
|
|||
char *cc_persist_id; /* a value given by a client in the confirmed-commit */
|
||||
uint32_t cc_session_id; /* the session_id of the client that gave no <persist> value */
|
||||
int (*cc_fn)(int, void*); /* function pointer for rollback event (rollback_fn()) */
|
||||
void *cc_arg; /* clicon_handle that will be passed to rollback_fn() */
|
||||
void *cc_arg; /* clixon_handle that will be passed to rollback_fn() */
|
||||
};
|
||||
|
||||
int
|
||||
confirmed_commit_init(clicon_handle h)
|
||||
confirmed_commit_init(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
||||
if ((cc = calloc(1, sizeof(*cc))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "calloc");
|
||||
clixon_err(OE_UNIX, errno, "calloc");
|
||||
goto done;
|
||||
}
|
||||
cc->cc_state = INACTIVE;
|
||||
|
|
@ -110,7 +110,7 @@ confirmed_commit_init(clicon_handle h)
|
|||
* @retval 0 OK
|
||||
*/
|
||||
int
|
||||
confirmed_commit_free(clicon_handle h)
|
||||
confirmed_commit_free(clixon_handle h)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
||||
|
|
@ -128,7 +128,7 @@ confirmed_commit_free(clicon_handle h)
|
|||
* Accessor functions
|
||||
*/
|
||||
enum confirmed_commit_state
|
||||
confirmed_commit_state_get(clicon_handle h)
|
||||
confirmed_commit_state_get(clixon_handle h)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ confirmed_commit_state_get(clicon_handle h)
|
|||
}
|
||||
|
||||
static int
|
||||
confirmed_commit_state_set(clicon_handle h,
|
||||
confirmed_commit_state_set(clixon_handle h,
|
||||
enum confirmed_commit_state state)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
|
@ -148,7 +148,7 @@ confirmed_commit_state_set(clicon_handle h,
|
|||
}
|
||||
|
||||
char *
|
||||
confirmed_commit_persist_id_get(clicon_handle h)
|
||||
confirmed_commit_persist_id_get(clixon_handle h)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ confirmed_commit_persist_id_get(clicon_handle h)
|
|||
}
|
||||
|
||||
static int
|
||||
confirmed_commit_persist_id_set(clicon_handle h,
|
||||
confirmed_commit_persist_id_set(clixon_handle h,
|
||||
char *persist_id)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
|
@ -167,7 +167,7 @@ confirmed_commit_persist_id_set(clicon_handle h,
|
|||
free(cc->cc_persist_id);
|
||||
if (persist_id){
|
||||
if ((cc->cc_persist_id = strdup4(persist_id)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup4");
|
||||
clixon_err(OE_UNIX, errno, "strdup4");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
|
@ -177,7 +177,7 @@ confirmed_commit_persist_id_set(clicon_handle h,
|
|||
}
|
||||
|
||||
uint32_t
|
||||
confirmed_commit_session_id_get(clicon_handle h)
|
||||
confirmed_commit_session_id_get(clixon_handle h)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
||||
|
|
@ -186,7 +186,7 @@ confirmed_commit_session_id_get(clicon_handle h)
|
|||
}
|
||||
|
||||
static int
|
||||
confirmed_commit_session_id_set(clicon_handle h,
|
||||
confirmed_commit_session_id_set(clixon_handle h,
|
||||
uint32_t session_id)
|
||||
{
|
||||
struct confirmed_commit *cc = NULL;
|
||||
|
|
@ -197,7 +197,7 @@ confirmed_commit_session_id_set(clicon_handle h,
|
|||
}
|
||||
|
||||
static int
|
||||
confirmed_commit_fn_arg_get(clicon_handle h,
|
||||
confirmed_commit_fn_arg_get(clixon_handle h,
|
||||
int (**fn)(int, void*),
|
||||
void **arg)
|
||||
{
|
||||
|
|
@ -210,7 +210,7 @@ confirmed_commit_fn_arg_get(clicon_handle h,
|
|||
}
|
||||
|
||||
static int
|
||||
confirmed_commit_fn_arg_set(clicon_handle h,
|
||||
confirmed_commit_fn_arg_set(clixon_handle h,
|
||||
int (*fn)(int, void*),
|
||||
void *arg)
|
||||
{
|
||||
|
|
@ -300,7 +300,7 @@ xe_timeout(cxobj *xe)
|
|||
* @retval -1 No Rollback event was found
|
||||
*/
|
||||
int
|
||||
cancel_rollback_event(clicon_handle h)
|
||||
cancel_rollback_event(clixon_handle h)
|
||||
{
|
||||
int retval;
|
||||
int (*fn)(int, void*) = NULL;
|
||||
|
|
@ -308,9 +308,9 @@ cancel_rollback_event(clicon_handle h)
|
|||
|
||||
confirmed_commit_fn_arg_get(h, &fn, &arg);
|
||||
if ((retval = clixon_event_unreg_timeout(fn, arg)) == 0) {
|
||||
clicon_log(LOG_INFO, "a scheduled rollback event has been cancelled");
|
||||
clixon_log(h, LOG_INFO, "a scheduled rollback event has been cancelled");
|
||||
} else {
|
||||
clicon_log(LOG_WARNING, "the specified scheduled rollback event was not found");
|
||||
clixon_log(h, LOG_WARNING, "the specified scheduled rollback event was not found");
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
|
@ -319,7 +319,7 @@ cancel_rollback_event(clicon_handle h)
|
|||
/*! Apply the rollback configuration upon expiration of the confirm-timeout
|
||||
*
|
||||
* @param[in] fd a dummy argument per the event callback semantics
|
||||
* @param[in] arg a void pointer to a clicon_handle
|
||||
* @param[in] arg a void pointer to a clixon_handle
|
||||
* @retval 0 the rollback was successful
|
||||
* @retval -1 the rollback failed
|
||||
* @see do_rollback()
|
||||
|
|
@ -328,9 +328,9 @@ static int
|
|||
rollback_fn(int fd,
|
||||
void *arg)
|
||||
{
|
||||
clicon_handle h = arg;
|
||||
clixon_handle h = arg;
|
||||
|
||||
clicon_log(LOG_CRIT, "a confirming-commit was not received before the confirm-timeout expired; rolling back");
|
||||
clixon_log(NULL, LOG_CRIT, "a confirming-commit was not received before the confirm-timeout expired; rolling back");
|
||||
|
||||
return do_rollback(h, NULL);
|
||||
}
|
||||
|
|
@ -344,7 +344,7 @@ rollback_fn(int fd,
|
|||
* @retval -1 Rollback event was not scheduled
|
||||
*/
|
||||
static int
|
||||
schedule_rollback_event(clicon_handle h,
|
||||
schedule_rollback_event(clixon_handle h,
|
||||
uint32_t timeout)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -352,7 +352,7 @@ schedule_rollback_event(clicon_handle h,
|
|||
// register a new scheduled event
|
||||
struct timeval t, t1;
|
||||
if (gettimeofday(&t, NULL) < 0) {
|
||||
clicon_err(OE_UNIX, 0, "failed to get time of day: %s", strerror(errno));
|
||||
clixon_err(OE_UNIX, 0, "failed to get time of day: %s", strerror(errno));
|
||||
goto done;
|
||||
};
|
||||
t1.tv_sec = timeout; t1.tv_usec = 0;
|
||||
|
|
@ -383,7 +383,7 @@ schedule_rollback_event(clicon_handle h,
|
|||
* @retval 0 OK
|
||||
*/
|
||||
int
|
||||
cancel_confirmed_commit(clicon_handle h)
|
||||
cancel_confirmed_commit(clixon_handle h)
|
||||
{
|
||||
cancel_rollback_event(h);
|
||||
|
||||
|
|
@ -395,7 +395,7 @@ cancel_confirmed_commit(clicon_handle h)
|
|||
confirmed_commit_state_set(h, INACTIVE);
|
||||
|
||||
if (xmldb_delete(h, "rollback") < 0)
|
||||
clicon_err(OE_DB, 0, "Error deleting the rollback configuration");
|
||||
clixon_err(OE_DB, 0, "Error deleting the rollback configuration");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -414,7 +414,7 @@ cancel_confirmed_commit(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
check_valid_confirming_commit(clicon_handle h,
|
||||
check_valid_confirming_commit(clixon_handle h,
|
||||
cxobj *xe,
|
||||
uint32_t myid)
|
||||
{
|
||||
|
|
@ -422,7 +422,7 @@ check_valid_confirming_commit(clicon_handle h,
|
|||
char *persist_id = NULL;
|
||||
|
||||
if (xe == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "xe is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "xe is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (myid == 0)
|
||||
|
|
@ -435,13 +435,13 @@ check_valid_confirming_commit(clicon_handle h,
|
|||
break; // valid
|
||||
}
|
||||
else {
|
||||
clicon_log(LOG_INFO,
|
||||
clixon_log(h, LOG_INFO,
|
||||
"a persistent confirmed-commit is in progress but the client issued a "
|
||||
"confirming-commit with an incorrect persist-id");
|
||||
goto invalid;
|
||||
}
|
||||
} else {
|
||||
clicon_log(LOG_INFO,
|
||||
clixon_log(h, LOG_INFO,
|
||||
"a persistent confirmed-commit is in progress but the client issued a confirming-commit"
|
||||
"without a persist-id");
|
||||
goto invalid;
|
||||
|
|
@ -453,7 +453,7 @@ check_valid_confirming_commit(clicon_handle h,
|
|||
*/
|
||||
break; // valid
|
||||
}
|
||||
clicon_log(LOG_DEBUG, "an ephemeral confirmed-commit is in progress, but there confirming-commit was"
|
||||
clixon_log(h, LOG_DEBUG, "an ephemeral confirmed-commit is in progress, but there confirming-commit was"
|
||||
"not issued on the same session as the confirmed-commit");
|
||||
goto invalid;
|
||||
default:
|
||||
|
|
@ -485,7 +485,7 @@ check_valid_confirming_commit(clicon_handle h,
|
|||
* actually occur, and if so, if they are correctly handled. The calls are from do_rollback() and load_failsafe()
|
||||
*/
|
||||
int
|
||||
handle_confirmed_commit(clicon_handle h,
|
||||
handle_confirmed_commit(clixon_handle h,
|
||||
cxobj *xe,
|
||||
uint32_t myid)
|
||||
{
|
||||
|
|
@ -496,7 +496,7 @@ handle_confirmed_commit(clicon_handle h,
|
|||
int db_exists;
|
||||
|
||||
if (xe == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "xe is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "xe is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (myid == 0)
|
||||
|
|
@ -509,7 +509,7 @@ handle_confirmed_commit(clicon_handle h,
|
|||
cc_valid = check_valid_confirming_commit(h, xe, myid);
|
||||
if (cc_valid) {
|
||||
if (cancel_rollback_event(h) < 0) {
|
||||
clicon_err(OE_DAEMON, 0, "A valid confirming-commit was received, but the corresponding rollback event was not found");
|
||||
clixon_err(OE_DAEMON, 0, "A valid confirming-commit was received, but the corresponding rollback event was not found");
|
||||
}
|
||||
|
||||
if (confirmed_commit_state_get(h) == PERSISTENT &&
|
||||
|
|
@ -537,7 +537,7 @@ handle_confirmed_commit(clicon_handle h,
|
|||
* <persist-id>
|
||||
*/
|
||||
confirmed_commit_state_set(h, PERSISTENT);
|
||||
clicon_log(LOG_INFO,
|
||||
clixon_log(h, LOG_INFO,
|
||||
"a persistent confirmed-commit has been requested with persist id of '%s' and a timeout of %lu seconds",
|
||||
confirmed_commit_persist_id_get(h), confirm_timeout);
|
||||
}
|
||||
|
|
@ -549,7 +549,7 @@ handle_confirmed_commit(clicon_handle h,
|
|||
confirmed_commit_session_id_set(h, myid);
|
||||
confirmed_commit_state_set(h, EPHEMERAL);
|
||||
|
||||
clicon_log(LOG_INFO,
|
||||
clixon_log(h, LOG_INFO,
|
||||
"an ephemeral confirmed-commit has been requested by session-id %u and a timeout of %lu seconds",
|
||||
confirmed_commit_session_id_get(h),
|
||||
confirm_timeout);
|
||||
|
|
@ -586,18 +586,18 @@ handle_confirmed_commit(clicon_handle h,
|
|||
|
||||
db_exists = xmldb_exists(h, "rollback");
|
||||
if (db_exists == -1) {
|
||||
clicon_err(OE_DAEMON, 0, "there was an error while checking existence of the rollback database");
|
||||
clixon_err(OE_DAEMON, 0, "there was an error while checking existence of the rollback database");
|
||||
goto done;
|
||||
} else if (db_exists == 0) {
|
||||
// db does not yet exists
|
||||
if (xmldb_copy(h, "running", "rollback") < 0) {
|
||||
clicon_err(OE_DAEMON, 0, "there was an error while copying the running configuration to rollback database.");
|
||||
clixon_err(OE_DAEMON, 0, "there was an error while copying the running configuration to rollback database.");
|
||||
goto done;
|
||||
};
|
||||
}
|
||||
|
||||
if (schedule_rollback_event(h, confirm_timeout) < 0) {
|
||||
clicon_err(OE_DAEMON, 0, "the rollback event could not be scheduled");
|
||||
clixon_err(OE_DAEMON, 0, "the rollback event could not be scheduled");
|
||||
goto done;
|
||||
};
|
||||
|
||||
|
|
@ -607,7 +607,7 @@ handle_confirmed_commit(clicon_handle h,
|
|||
* The new configuration is already committed to running and the rollback database can now be deleted
|
||||
*/
|
||||
if (xmldb_delete(h, "rollback") < 0) {
|
||||
clicon_err(OE_DB, 0, "Error deleting the rollback configuration");
|
||||
clixon_err(OE_DB, 0, "Error deleting the rollback configuration");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -635,7 +635,7 @@ handle_confirmed_commit(clicon_handle h,
|
|||
* @see rollback_fn()
|
||||
*/
|
||||
int
|
||||
do_rollback(clicon_handle h,
|
||||
do_rollback(clixon_handle h,
|
||||
uint8_t *errs)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -643,13 +643,13 @@ do_rollback(clicon_handle h,
|
|||
cbuf *cbret;
|
||||
|
||||
if ((cbret = cbuf_new()) == NULL) {
|
||||
clicon_err(OE_DAEMON, 0, "rollback was not performed. (cbuf_new: %s)", strerror(errno));
|
||||
clixon_err(OE_DAEMON, 0, "rollback was not performed. (cbuf_new: %s)", strerror(errno));
|
||||
/* the rollback_db won't be deleted, so one can try recovery by:
|
||||
* load rollback running
|
||||
* restart the backend, which will try to load the rollback_db, and delete it if successful
|
||||
* (otherwise it will load the failsafe)
|
||||
*/
|
||||
clicon_log(LOG_CRIT, "An error occurred during rollback and the rollback_db wasn't deleted.");
|
||||
clixon_log(h, LOG_CRIT, "An error occurred during rollback and the rollback_db wasn't deleted.");
|
||||
errstate |= ROLLBACK_NOT_APPLIED | ROLLBACK_DB_NOT_DELETED;
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -663,19 +663,19 @@ do_rollback(clicon_handle h,
|
|||
/* theoretically, this should never error, since the rollback database was previously active and therefore
|
||||
* had itself been previously and successfully committed.
|
||||
*/
|
||||
clicon_log(LOG_CRIT, "An error occurred committing the rollback database.");
|
||||
clixon_log(h, LOG_CRIT, "An error occurred committing the rollback database.");
|
||||
errstate |= ROLLBACK_NOT_APPLIED;
|
||||
|
||||
/* Rename the errored rollback database */
|
||||
if (xmldb_rename(h, "rollback", NULL, ".error") < 0) {
|
||||
clicon_log(LOG_CRIT, "An error occurred renaming the rollback database.");
|
||||
clixon_log(h, LOG_CRIT, "An error occurred renaming the rollback database.");
|
||||
errstate |= ROLLBACK_DB_NOT_DELETED;
|
||||
}
|
||||
|
||||
/* Attempt to load the failsafe config */
|
||||
|
||||
if (load_failsafe(h, "Rollback") < 0) {
|
||||
clicon_log(LOG_CRIT, "An error occurred committing the failsafe database. Exiting.");
|
||||
clixon_log(h, LOG_CRIT, "An error occurred committing the failsafe database. Exiting.");
|
||||
/* Invoke our own signal handler to exit */
|
||||
raise(SIGINT);
|
||||
|
||||
|
|
@ -688,7 +688,7 @@ do_rollback(clicon_handle h,
|
|||
cbuf_free(cbret);
|
||||
|
||||
if (xmldb_delete(h, "rollback") < 0) {
|
||||
clicon_log(LOG_WARNING, "A rollback occurred but the rollback_db wasn't deleted.");
|
||||
clixon_log(h, LOG_WARNING, "A rollback occurred but the rollback_db wasn't deleted.");
|
||||
errstate |= ROLLBACK_DB_NOT_DELETED;
|
||||
goto done;
|
||||
};
|
||||
|
|
@ -717,7 +717,7 @@ do_rollback(clicon_handle h,
|
|||
* @see RFC 6241 Sec 8.4
|
||||
*/
|
||||
int
|
||||
from_client_cancel_commit(clicon_handle h,
|
||||
from_client_cancel_commit(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -775,7 +775,7 @@ from_client_cancel_commit(clicon_handle h,
|
|||
if (do_rollback(h, NULL) < 0)
|
||||
goto done;
|
||||
cprintf(cbret, "<rpc-reply xmlns=\"%s\"><ok/></rpc-reply>", NETCONF_BASE_NAMESPACE);
|
||||
clicon_log(LOG_INFO, "a confirmed-commit has been cancelled by client request");
|
||||
clixon_log(h, LOG_INFO, "a confirmed-commit has been cancelled by client request");
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
|
|
@ -793,7 +793,7 @@ from_client_cancel_commit(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
from_client_confirmed_commit(clicon_handle h,
|
||||
from_client_confirmed_commit(clixon_handle h,
|
||||
cxobj *xe,
|
||||
uint32_t myid,
|
||||
cbuf *cbret)
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_client.h"
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
* @see rfc8040 Sections 9.1
|
||||
*/
|
||||
static int
|
||||
restconf_client_get_capabilities(clicon_handle h,
|
||||
restconf_client_get_capabilities(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
char *xpath,
|
||||
cxobj **xret)
|
||||
|
|
@ -95,11 +95,11 @@ restconf_client_get_capabilities(clicon_handle h,
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if ((xrstate = xpath_first(*xret, NULL, "restconf-state")) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "restconf-state not found in config node");
|
||||
clixon_err(OE_YANG, ENOENT, "restconf-state not found in config node");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<capabilities>");
|
||||
|
|
@ -129,7 +129,7 @@ restconf_client_get_capabilities(clicon_handle h,
|
|||
* @retval -1 Error (fatal)
|
||||
*/
|
||||
static int
|
||||
client_get_streams(clicon_handle h,
|
||||
client_get_streams(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
char *xpath,
|
||||
yang_stmt *ymod,
|
||||
|
|
@ -143,11 +143,11 @@ client_get_streams(clicon_handle h,
|
|||
int ret;
|
||||
|
||||
if ((yns = yang_find(ymod, Y_NAMESPACE, NULL)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "%s yang namespace not found", yang_argument_get(ymod));
|
||||
clixon_err(OE_YANG, 0, "%s yang namespace not found", yang_argument_get(ymod));
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<%s xmlns=\"%s\">", top, yang_argument_get(yns));
|
||||
|
|
@ -159,7 +159,7 @@ client_get_streams(clicon_handle h,
|
|||
cprintf(cb,"</%s>", top);
|
||||
|
||||
if (clixon_xml_parse_string(cbuf_get(cb), YB_MODULE, yspec, &x, NULL) < 0){
|
||||
if (xret && netconf_operation_failed_xml(xret, "protocol", clicon_err_reason)< 0)
|
||||
if (xret && netconf_operation_failed_xml(xret, "protocol", clixon_err_reason())< 0)
|
||||
goto done;
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -203,7 +203,7 @@ client_get_streams(clicon_handle h,
|
|||
*
|
||||
*/
|
||||
static int
|
||||
get_statedata(clicon_handle h,
|
||||
get_statedata(clixon_handle h,
|
||||
char *xpath,
|
||||
cvec *nsc,
|
||||
withdefaults_type wdef,
|
||||
|
|
@ -220,20 +220,20 @@ get_statedata(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_option_bool(h, "CLICON_STREAM_DISCOVERY_RFC5277")){
|
||||
if ((ymod = yang_find_module_by_name(yspec, "clixon-rfc5277")) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "yang module clixon-rfc5277 not found");
|
||||
clixon_err(OE_YANG, ENOENT, "yang module clixon-rfc5277 not found");
|
||||
goto done;
|
||||
}
|
||||
if ((namespace = yang_find_mynamespace(ymod)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "clixon-rfc5277 namespace not found");
|
||||
clixon_err(OE_YANG, ENOENT, "clixon-rfc5277 namespace not found");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<netconf xmlns=\"%s\"/>", namespace);
|
||||
|
|
@ -246,11 +246,11 @@ get_statedata(clicon_handle h,
|
|||
}
|
||||
if (clicon_option_bool(h, "CLICON_STREAM_DISCOVERY_RFC8040")){
|
||||
if ((ymod = yang_find_module_by_name(yspec, "ietf-restconf-monitoring")) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "yang module ietf-restconf-monitoring not found");
|
||||
clixon_err(OE_YANG, ENOENT, "yang module ietf-restconf-monitoring not found");
|
||||
goto done;
|
||||
}
|
||||
if ((namespace = yang_find_mynamespace(ymod)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "ietf-restconf-monitoring namespace not found");
|
||||
clixon_err(OE_YANG, ENOENT, "ietf-restconf-monitoring namespace not found");
|
||||
goto done;
|
||||
}
|
||||
cbuf_reset(cb);
|
||||
|
|
@ -406,7 +406,7 @@ get_statedata(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
filter_xpath_again(clicon_handle h,
|
||||
filter_xpath_again(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
cxobj *xret,
|
||||
cxobj **xvec,
|
||||
|
|
@ -418,7 +418,7 @@ filter_xpath_again(clicon_handle h,
|
|||
int i;
|
||||
|
||||
if (xret == NULL){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "xret is NULL");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "xret is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* If vectors are specified then mark the nodes found and
|
||||
|
|
@ -456,7 +456,7 @@ filter_xpath_again(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
get_nacm_and_reply(clicon_handle h,
|
||||
get_nacm_and_reply(clixon_handle h,
|
||||
cxobj *xret,
|
||||
cxobj **xvec,
|
||||
size_t xlen,
|
||||
|
|
@ -505,7 +505,7 @@ get_nacm_and_reply(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
element2value(clicon_handle h,
|
||||
element2value(clixon_handle h,
|
||||
cxobj *xe,
|
||||
char *name,
|
||||
char *defaultstr,
|
||||
|
|
@ -535,7 +535,7 @@ element2value(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
list_pagination_hdr(clicon_handle h,
|
||||
list_pagination_hdr(clixon_handle h,
|
||||
cxobj *xe,
|
||||
uint32_t *offset,
|
||||
uint32_t *limit,
|
||||
|
|
@ -576,7 +576,7 @@ list_pagination_hdr(clicon_handle h,
|
|||
* XXX Lots of this code (in particular at the end) is copy of get_common
|
||||
*/
|
||||
static int
|
||||
get_list_pagination(clicon_handle h,
|
||||
get_list_pagination(clixon_handle h,
|
||||
struct client_entry *ce,
|
||||
cxobj *xe,
|
||||
netconf_content content,
|
||||
|
|
@ -614,7 +614,7 @@ get_list_pagination(clicon_handle h,
|
|||
#endif
|
||||
|
||||
if (cbret == NULL){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "cbret is NULL");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "cbret is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* Check if list/leaf-list */
|
||||
|
|
@ -622,10 +622,10 @@ get_list_pagination(clicon_handle h,
|
|||
goto done;
|
||||
if (ylist == NULL){
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* error reason should be in clicon_err_reason */
|
||||
/* error reason should be in clixon_err_reason() */
|
||||
cprintf(cbmsg, "Netconf get list-pagination: \"%s\" not found", xpath);
|
||||
if (netconf_invalid_value(cbret, "application", cbuf_get(cbmsg)) < 0)
|
||||
goto done;
|
||||
|
|
@ -686,7 +686,7 @@ get_list_pagination(clicon_handle h,
|
|||
* relational operators <>.
|
||||
*/
|
||||
if ((cbpath = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* This uses xpath. Maybe limit should use parameters */
|
||||
|
|
@ -712,10 +712,10 @@ get_list_pagination(clicon_handle h,
|
|||
/* specific xpath */
|
||||
if (xmldb_get0(h, db, YB_MODULE, nsc, xpath2?xpath2:"/", 1, wdef, &xret, NULL, NULL) < 0) {
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clicon_err_reason);
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "application", cbuf_get(cbmsg)) < 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
|
|
@ -752,12 +752,12 @@ get_list_pagination(clicon_handle h,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* error reason should be in clicon_err_reason */
|
||||
/* error reason should be in clixon_err_reason */
|
||||
cprintf(cberr, "Internal error, pagination state callback invalid return : %s",
|
||||
clicon_err_reason);
|
||||
clixon_err_reason());
|
||||
if (netconf_operation_failed_xml(&xerr, "application", cbuf_get(cberr)) < 0)
|
||||
goto done;
|
||||
if (clixon_xml2cbuf(cbret, xerr, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -794,7 +794,7 @@ get_list_pagination(clicon_handle h,
|
|||
|
||||
/* Add remaining attribute */
|
||||
if ((cba = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cba, "%u", remaining);
|
||||
|
|
@ -838,7 +838,7 @@ get_list_pagination(clicon_handle h,
|
|||
* @see from_client_get_config
|
||||
*/
|
||||
static int
|
||||
get_common(clicon_handle h,
|
||||
get_common(clixon_handle h,
|
||||
struct client_entry *ce,
|
||||
cxobj *xe,
|
||||
netconf_content content,
|
||||
|
|
@ -875,7 +875,7 @@ get_common(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DETAIL, "%s", __FUNCTION__);
|
||||
username = clicon_username_get(h);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec9");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec9");
|
||||
goto done;
|
||||
}
|
||||
if ((xfilter = xml_find(xe, "filter")) != NULL){
|
||||
|
|
@ -900,7 +900,7 @@ get_common(clicon_handle h,
|
|||
/* Clixon extensions: depth */
|
||||
if ((attr = xml_find_value(xe, "depth")) != NULL){
|
||||
if ((ret = parse_int32(attr, &depth, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_int32");
|
||||
clixon_err(OE_XML, errno, "parse_int32");
|
||||
goto done;
|
||||
}
|
||||
if (ret == 0){
|
||||
|
|
@ -946,10 +946,10 @@ get_common(clicon_handle h,
|
|||
/* specific xpath */
|
||||
if (xmldb_get0(h, db, YB_MODULE, nsc, xpath?xpath:"/", 1, wdef, &xret, NULL, NULL) < 0) {
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clicon_err_reason);
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "application", cbuf_get(cbmsg)) < 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
|
|
@ -961,10 +961,10 @@ get_common(clicon_handle h,
|
|||
/* Whole config tree, for validate debug */
|
||||
if (xmldb_get0(h, "running", YB_MODULE, nsc, NULL, 1, wdef, &xret, NULL, NULL) < 0) {
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clicon_err_reason);
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "application", cbuf_get(cbmsg)) < 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
|
|
@ -974,10 +974,10 @@ get_common(clicon_handle h,
|
|||
/* specific xpath */
|
||||
if (xmldb_get0(h, db, YB_MODULE, nsc, xpath?xpath:"/", 1, wdef, &xret, NULL, NULL) < 0) {
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clicon_err_reason);
|
||||
cprintf(cbmsg, "Get %s datastore: %s", db, clixon_err_reason());
|
||||
if (netconf_operation_failed(cbret, "application", cbuf_get(cbmsg)) < 0)
|
||||
goto done;
|
||||
goto ok;
|
||||
|
|
@ -1083,7 +1083,7 @@ get_common(clicon_handle h,
|
|||
* @see from_client_get
|
||||
*/
|
||||
int
|
||||
from_client_get_config(clicon_handle h,
|
||||
from_client_get_config(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -1094,7 +1094,7 @@ from_client_get_config(clicon_handle h,
|
|||
struct client_entry *ce = (struct client_entry *)arg;
|
||||
|
||||
if ((db = netconf_db_find(xe, "source")) == NULL){
|
||||
clicon_err(OE_XML, 0, "db not found");
|
||||
clixon_err(OE_XML, 0, "db not found");
|
||||
goto done;
|
||||
}
|
||||
retval = get_common(h, ce, xe, CONTENT_CONFIG, db, cbret);
|
||||
|
|
@ -1115,7 +1115,7 @@ from_client_get_config(clicon_handle h,
|
|||
* @see from_client_get_config
|
||||
*/
|
||||
int
|
||||
from_client_get(clicon_handle h,
|
||||
from_client_get(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int from_client_get_config(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_get(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_get_pageable_list(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg); /* XXX */
|
||||
int from_client_get_config(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_get(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_get_pageable_list(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg); /* XXX */
|
||||
|
||||
#endif /* _BACKEND_GET_H_ */
|
||||
|
|
|
|||
|
|
@ -43,16 +43,16 @@
|
|||
* Prototypes
|
||||
* not exported.
|
||||
*/
|
||||
clicon_handle backend_handle_init(void);
|
||||
clixon_handle backend_handle_init(void);
|
||||
|
||||
int backend_handle_exit(clicon_handle h);
|
||||
int backend_handle_exit(clixon_handle h);
|
||||
|
||||
struct client_entry *backend_client_add(clicon_handle h, struct sockaddr *addr);
|
||||
struct client_entry *backend_client_add(clixon_handle h, struct sockaddr *addr);
|
||||
|
||||
struct client_entry *backend_client_list(clicon_handle h);
|
||||
struct client_entry *backend_client_list(clixon_handle h);
|
||||
|
||||
int backend_client_delete(clicon_handle h, struct client_entry *ce);
|
||||
int backend_client_delete(clixon_handle h, struct client_entry *ce);
|
||||
|
||||
int backend_client_print(clicon_handle h, FILE *f);
|
||||
int backend_client_print(clixon_handle h, FILE *f);
|
||||
|
||||
#endif /* _BACKEND_HANDLE_H_ */
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
static int
|
||||
backend_terminate(clicon_handle h)
|
||||
backend_terminate(clixon_handle h)
|
||||
{
|
||||
yang_stmt *yspec;
|
||||
char *pidfile = clicon_backend_pidfile(h);
|
||||
|
|
@ -145,7 +145,7 @@ backend_terminate(clicon_handle h)
|
|||
clixon_event_exit();
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s done", __FUNCTION__);
|
||||
clixon_err_exit();
|
||||
clicon_log_exit();
|
||||
clixon_log_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ backend_sig_term(int arg)
|
|||
static int i=0;
|
||||
|
||||
if (i++ == 0)
|
||||
clicon_log(LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
clixon_log(NULL, LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
__PROGRAM__, __FUNCTION__, getpid(), arg);
|
||||
else
|
||||
exit(1);
|
||||
|
|
@ -183,7 +183,7 @@ backend_sig_child(int arg)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
backend_server_socket(clicon_handle h)
|
||||
backend_server_socket(clixon_handle h)
|
||||
{
|
||||
int ss;
|
||||
|
||||
|
|
@ -202,7 +202,7 @@ backend_server_socket(clicon_handle h)
|
|||
/*! Load external NACM file
|
||||
*/
|
||||
static int
|
||||
nacm_load_external(clicon_handle h)
|
||||
nacm_load_external(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
char *filename; /* NACM config file */
|
||||
|
|
@ -213,19 +213,19 @@ nacm_load_external(clicon_handle h)
|
|||
|
||||
filename = clicon_option_str(h, "CLICON_NACM_FILE");
|
||||
if (filename == NULL || strlen(filename)==0){
|
||||
clicon_err(OE_UNIX, errno, "CLICON_NACM_FILE not set in NACM external mode");
|
||||
clixon_err(OE_UNIX, errno, "CLICON_NACM_FILE not set in NACM external mode");
|
||||
goto done;
|
||||
}
|
||||
if (stat(filename, &st) < 0){
|
||||
clicon_err(OE_UNIX, errno, "%s", filename);
|
||||
clixon_err(OE_UNIX, errno, "%s", filename);
|
||||
goto done;
|
||||
}
|
||||
if (!S_ISREG(st.st_mode)){
|
||||
clicon_err(OE_UNIX, 0, "%s is not a regular file", filename);
|
||||
clixon_err(OE_UNIX, 0, "%s is not a regular file", filename);
|
||||
goto done;
|
||||
}
|
||||
if ((f = fopen(filename, "r")) == NULL) {
|
||||
clicon_err(OE_UNIX, errno, "configure file: %s", filename);
|
||||
clixon_err(OE_UNIX, errno, "configure file: %s", filename);
|
||||
return -1;
|
||||
}
|
||||
if ((yspec = yspec_new()) == NULL)
|
||||
|
|
@ -236,7 +236,7 @@ nacm_load_external(clicon_handle h)
|
|||
if (clixon_xml_parse_file(f, YB_MODULE, yspec, &xt, NULL) < 0)
|
||||
goto done;
|
||||
if (xt == NULL){
|
||||
clicon_err(OE_XML, 0, "No xml tree in %s", filename);
|
||||
clixon_err(OE_XML, 0, "No xml tree in %s", filename);
|
||||
goto done;
|
||||
}
|
||||
if (clicon_nacm_ext_yang_set(h, yspec) < 0)
|
||||
|
|
@ -252,7 +252,7 @@ nacm_load_external(clicon_handle h)
|
|||
}
|
||||
|
||||
static int
|
||||
xmldb_drop_priv(clicon_handle h,
|
||||
xmldb_drop_priv(clixon_handle h,
|
||||
const char *db,
|
||||
uid_t uid,
|
||||
gid_t gid)
|
||||
|
|
@ -263,7 +263,7 @@ xmldb_drop_priv(clicon_handle h,
|
|||
if (xmldb_db2file(h, db, &filename) < 0)
|
||||
goto done;
|
||||
if (chown(filename, uid, gid) < 0){
|
||||
clicon_err(OE_UNIX, errno, "chown");
|
||||
clixon_err(OE_UNIX, errno, "chown");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -287,7 +287,7 @@ xmldb_drop_priv(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
check_drop_priv(clicon_handle h,
|
||||
check_drop_priv(clixon_handle h,
|
||||
gid_t gid,
|
||||
yang_stmt *yspec)
|
||||
{
|
||||
|
|
@ -304,19 +304,19 @@ check_drop_priv(clicon_handle h,
|
|||
/* From here, drop privileges */
|
||||
/* Check backend user exists */
|
||||
if ((backend_user = clicon_backend_user(h)) == NULL){
|
||||
clicon_err(OE_DAEMON, EPERM, "Privileges cannot be dropped without specifying CLICON_BACKEND_USER\n");
|
||||
clixon_err(OE_DAEMON, EPERM, "Privileges cannot be dropped without specifying CLICON_BACKEND_USER\n");
|
||||
goto done;
|
||||
}
|
||||
/* Get (wanted) new backend user id */
|
||||
if (name2uid(backend_user, &newuid) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "'%s' is not a valid user .\n", backend_user);
|
||||
clixon_err(OE_DAEMON, errno, "'%s' is not a valid user .\n", backend_user);
|
||||
goto done;
|
||||
}
|
||||
/* get current backend userid, if already at this level OK */
|
||||
if ((uid = getuid()) == newuid)
|
||||
goto ok;
|
||||
if (uid != 0){
|
||||
clicon_err(OE_DAEMON, EPERM, "Privileges can only be dropped from root user (uid is %u)\n", uid);
|
||||
clixon_err(OE_DAEMON, EPERM, "Privileges can only be dropped from root user (uid is %u)\n", uid);
|
||||
goto done;
|
||||
}
|
||||
/* When dropping privileges, datastores are created if they do not exist.
|
||||
|
|
@ -348,7 +348,7 @@ check_drop_priv(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if (setgid(gid) == -1) {
|
||||
clicon_err(OE_DAEMON, errno, "setgid %d", gid);
|
||||
clixon_err(OE_DAEMON, errno, "setgid %d", gid);
|
||||
goto done;
|
||||
}
|
||||
switch (priv_mode){
|
||||
|
|
@ -357,7 +357,7 @@ check_drop_priv(clicon_handle h,
|
|||
goto done;
|
||||
/* Verify you cannot regain root privileges */
|
||||
if (setuid(0) != -1){
|
||||
clicon_err(OE_DAEMON, EPERM, "Could regain root privilieges");
|
||||
clixon_err(OE_DAEMON, EPERM, "Could regain root privilieges");
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
@ -381,8 +381,8 @@ check_drop_priv(clicon_handle h,
|
|||
* @retval 0 OK, status set
|
||||
* @retval -1 Fatal error outside scope of startup_status
|
||||
* Transformation rules:
|
||||
* 1) retval -1 assume clicon_errno/suberrno set. Special case from xml parser
|
||||
* is clicon_suberrno = XMLPARSE_ERRNO which assumes an XML (non-fatal) parse
|
||||
* 1) retval -1 assume clixon_err_category/subnr set. Special case from xml parser
|
||||
* is clixon_err_subnr = XMLPARSE_ERRNO which assumes an XML (non-fatal) parse
|
||||
* error which translates to -> STARTUP_ERR
|
||||
* All other error cases translates to fatal error
|
||||
* 2) retval 0 is xml validation fails -> STARTUP_INVALID
|
||||
|
|
@ -397,9 +397,9 @@ ret2status(int ret,
|
|||
|
||||
switch (ret){
|
||||
case -1:
|
||||
if (clicon_suberrno != XMLPARSE_ERRNO)
|
||||
if (clixon_err_subnr() != XMLPARSE_ERRNO)
|
||||
goto done;
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
*status = STARTUP_ERR;
|
||||
break;
|
||||
case 0:
|
||||
|
|
@ -409,7 +409,7 @@ ret2status(int ret,
|
|||
*status = STARTUP_OK;
|
||||
break;
|
||||
default:
|
||||
clicon_err(OE_CFG, EINVAL, "No such retval %d", retval);
|
||||
clixon_err(OE_CFG, EINVAL, "No such retval %d", retval);
|
||||
} /* switch */
|
||||
retval = 0;
|
||||
done:
|
||||
|
|
@ -423,7 +423,7 @@ backend_timer_setup(int fd,
|
|||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h = (clicon_handle)arg;
|
||||
clixon_handle h = (clixon_handle)arg;
|
||||
struct timeval now;
|
||||
struct timeval t;
|
||||
struct timeval t1 = {10, 0};
|
||||
|
|
@ -451,7 +451,7 @@ backend_timer_setup(int fd,
|
|||
/*! usage
|
||||
*/
|
||||
static void
|
||||
usage(clicon_handle h,
|
||||
usage(clixon_handle h,
|
||||
char *argv0)
|
||||
{
|
||||
char *plgdir = clicon_backend_dir(h);
|
||||
|
|
@ -510,14 +510,14 @@ main(int argc,
|
|||
char *backend_group = NULL;
|
||||
char *argv0 = argv[0];
|
||||
struct stat st;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
int help = 0;
|
||||
int pid;
|
||||
char *pidfile;
|
||||
char *sock;
|
||||
int sockfamily;
|
||||
char *nacm_mode;
|
||||
int logdst = CLICON_LOG_SYSLOG|CLICON_LOG_STDERR;
|
||||
int logdst = CLIXON_LOG_SYSLOG|CLIXON_LOG_STDERR;
|
||||
yang_stmt *yspec = NULL;
|
||||
char *str;
|
||||
int ss = -1; /* server socket */
|
||||
|
|
@ -535,11 +535,14 @@ main(int argc,
|
|||
enum format_enum config_dump_format = FORMAT_XML;
|
||||
int print_version = 0;
|
||||
|
||||
/* In the startup, logs to stderr & syslog and debug flag set later */
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, logdst);
|
||||
/* Initiate CLICON handle */
|
||||
if ((h = backend_handle_init()) == NULL)
|
||||
return -1;
|
||||
/* In the startup, logs to stderr & syslog and debug flag set later */
|
||||
if (clixon_log_init(h, __PROGRAM__, LOG_INFO, logdst) < 0)
|
||||
goto done;
|
||||
if (clixon_err_init(h) < 0)
|
||||
goto done;
|
||||
foreground = 0;
|
||||
once = 0;
|
||||
zap = 0;
|
||||
|
|
@ -581,11 +584,11 @@ main(int argc,
|
|||
clicon_option_str_set(h, "CLICON_CONFIGDIR", optarg);
|
||||
break;
|
||||
case 'l': /* Log destination: s|e|o */
|
||||
if ((logdst = clicon_log_opt(optarg[0])) < 0)
|
||||
if ((logdst = clixon_log_opt(optarg[0])) < 0)
|
||||
usage(h, argv[0]);
|
||||
if (logdst == CLICON_LOG_FILE &&
|
||||
if (logdst == CLIXON_LOG_FILE &&
|
||||
strlen(optarg)>1 &&
|
||||
clicon_log_file(optarg+1) < 0)
|
||||
clixon_log_file(optarg+1) < 0)
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -596,8 +599,8 @@ main(int argc,
|
|||
* XXX: if started in a start-daemon script, there will be irritating
|
||||
* double syslogs until fork below.
|
||||
*/
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(h, dbg);
|
||||
yang_init(h);
|
||||
|
||||
/* Find and read configfile */
|
||||
|
|
@ -718,7 +721,7 @@ main(int argc,
|
|||
/* Access the remaining argv/argc options (after --) w clicon-argv_get() */
|
||||
clicon_argv_set(h, argv0, argc, argv);
|
||||
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
|
||||
/* Defer: Wait to the last minute to print help message */
|
||||
if (help)
|
||||
|
|
@ -730,22 +733,22 @@ main(int argc,
|
|||
cbuf_alloc_set(cligen_buflen, cligen_bufthreshold);
|
||||
|
||||
if ((sz = clicon_option_int(h, "CLICON_LOG_STRING_LIMIT")) != 0)
|
||||
clicon_log_string_limit_set(sz);
|
||||
clixon_log_string_limit_set(sz);
|
||||
|
||||
#ifndef HAVE_LIBXML2
|
||||
if (clicon_yang_regexp(h) == REGEXP_LIBXML2){
|
||||
clicon_err(OE_FATAL, 0, "CLICON_YANG_REGEXP set to libxml2, but HAVE_LIBXML2 not set (Either change CLICON_YANG_REGEXP to posix, or run: configure --with-libxml2))");
|
||||
clixon_err(OE_FATAL, 0, "CLICON_YANG_REGEXP set to libxml2, but HAVE_LIBXML2 not set (Either change CLICON_YANG_REGEXP to posix, or run: configure --with-libxml2))");
|
||||
goto done;
|
||||
}
|
||||
#endif
|
||||
/* Check pid-file, if zap kil the old daemon, else return here */
|
||||
if ((pidfile = clicon_backend_pidfile(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "pidfile not set");
|
||||
clixon_err(OE_FATAL, 0, "pidfile not set");
|
||||
goto done;
|
||||
}
|
||||
sockfamily = clicon_sock_family(h);
|
||||
if ((sock = clicon_sock_str(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "sock not set");
|
||||
clixon_err(OE_FATAL, 0, "sock not set");
|
||||
goto done;
|
||||
}
|
||||
if (pidfile_get(pidfile, &pid) < 0)
|
||||
|
|
@ -762,7 +765,7 @@ main(int argc,
|
|||
}
|
||||
else
|
||||
if (pid){
|
||||
clicon_err(OE_DAEMON, 0, "Daemon already running with pid %d\n(Try killing it with %s -z)",
|
||||
clixon_err(OE_DAEMON, 0, "Daemon already running with pid %d\n(Try killing it with %s -z)",
|
||||
pid, argv0);
|
||||
return -1; /* goto done deletes pidfile */
|
||||
}
|
||||
|
|
@ -777,11 +780,11 @@ main(int argc,
|
|||
|
||||
/* Sanity check: backend group exists */
|
||||
if ((backend_group = clicon_sock_group(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "clicon_sock_group option not set");
|
||||
clixon_err(OE_FATAL, 0, "clicon_sock_group option not set");
|
||||
return -1;
|
||||
}
|
||||
if (group_name2gid(backend_group, &gid) < 0){
|
||||
clicon_log(LOG_ERR, "'%s' does not seem to be a valid user group.\n" /* \n required here due to multi-line log */
|
||||
clixon_log(h, LOG_ERR, "'%s' does not seem to be a valid user group.\n" /* \n required here due to multi-line log */
|
||||
"The config daemon requires a valid group to create a server UNIX socket\n"
|
||||
"Define a valid CLICON_SOCK_GROUP in %s or via the -g option\n"
|
||||
"or create the group and add the user to it. Check documentation for how to do this on your platform",
|
||||
|
|
@ -899,13 +902,13 @@ main(int argc,
|
|||
/* Startup mode needs to be defined, */
|
||||
startup_mode = clicon_startup_mode(h);
|
||||
if ((int)startup_mode == -1){
|
||||
clicon_log(LOG_ERR, "Startup mode undefined. Specify option CLICON_STARTUP_MODE or specify -s option to clicon_backend.");
|
||||
clixon_log(h, LOG_ERR, "Startup mode undefined. Specify option CLICON_STARTUP_MODE or specify -s option to clicon_backend.");
|
||||
goto done;
|
||||
}
|
||||
/* Check that netconf :startup is enabled */
|
||||
if ((startup_mode == SM_STARTUP || startup_mode == SM_RUNNING_STARTUP) &&
|
||||
!if_feature(yspec, "ietf-netconf", "startup")){
|
||||
clicon_log(LOG_ERR, "Startup mode selected but Netconf :startup feature is not enabled. Enable with option: <CLICON_FEATURE>ietf-netconf:startup</CLICON_FEATURE>");
|
||||
clixon_log(h, LOG_ERR, "Startup mode selected but Netconf :startup feature is not enabled. Enable with option: <CLICON_FEATURE>ietf-netconf:startup</CLICON_FEATURE>");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -924,7 +927,7 @@ main(int argc,
|
|||
xmldb_delete(h, "candidate");
|
||||
/* If startup fails, lib functions report invalidation info in a cbuf */
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
switch (startup_mode){
|
||||
|
|
@ -1003,7 +1006,7 @@ main(int argc,
|
|||
}
|
||||
if (status != STARTUP_OK){
|
||||
if (cbuf_len(cbret))
|
||||
clicon_log(LOG_NOTICE, "%s: %u %s", __PROGRAM__, getpid(), cbuf_get(cbret));
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u %s", __PROGRAM__, getpid(), cbuf_get(cbret));
|
||||
if (load_failsafe(h, "Startup") < 0){
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1022,7 +1025,7 @@ main(int argc,
|
|||
goto done;
|
||||
|
||||
if (status == STARTUP_INVALID && cbuf_len(cbret))
|
||||
clicon_log(LOG_NOTICE, "%s: %u %s", __PROGRAM__, getpid(), cbuf_get(cbret));
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u %s", __PROGRAM__, getpid(), cbuf_get(cbret));
|
||||
|
||||
/* Call backend plugin_start with user -- options */
|
||||
if (clixon_plugin_start_all(h) < 0)
|
||||
|
|
@ -1044,13 +1047,13 @@ main(int argc,
|
|||
daemonized errors OK. Before this stage, errors are logged on stderr
|
||||
also */
|
||||
if (foreground==0){
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO,
|
||||
logdst==CLICON_LOG_FILE?CLICON_LOG_FILE:CLICON_LOG_SYSLOG);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO,
|
||||
logdst==CLIXON_LOG_FILE?CLIXON_LOG_FILE:CLIXON_LOG_SYSLOG);
|
||||
/* Call plugin callbacks just before fork/daemonization */
|
||||
if (clixon_plugin_pre_daemon_all(h) < 0)
|
||||
goto done;
|
||||
if (daemon(0, 0) < 0){
|
||||
clicon_err(OE_UNIX, errno, "daemon");
|
||||
clixon_err(OE_UNIX, errno, "daemon");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
|
@ -1065,21 +1068,21 @@ main(int argc,
|
|||
goto done;
|
||||
|
||||
if (set_signal(SIGTERM, backend_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGINT, backend_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
/* This is in case restconf daemon forked using process-control API */
|
||||
if (set_signal(SIGCHLD, backend_sig_child, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
/* Client exit in the middle of a transaction, handled in clicon_msg_send */
|
||||
if (set_signal(SIGPIPE, SIG_IGN, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
/* Initialize server socket and save it to handle */
|
||||
|
|
@ -1106,7 +1109,7 @@ main(int argc,
|
|||
/* Just before event-loop, after socket bind/listen */
|
||||
if (netconf_monitoring_statistics_init(h) < 0)
|
||||
goto done;
|
||||
clicon_log(LOG_NOTICE, "%s: %u Started", __PROGRAM__, getpid());
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u Started", __PROGRAM__, getpid());
|
||||
if (clixon_event_loop(h) < 0)
|
||||
goto done;
|
||||
ok:
|
||||
|
|
@ -1114,7 +1117,7 @@ main(int argc,
|
|||
done:
|
||||
if (cbret)
|
||||
cbuf_free(cbret);
|
||||
clicon_log(LOG_NOTICE, "%s: %u Terminated retval:%d", __PROGRAM__, getpid(), retval);
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u Terminated retval:%d", __PROGRAM__, getpid(), retval);
|
||||
backend_terminate(h); /* Cannot use h after this */
|
||||
|
||||
return retval;
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
*/
|
||||
int
|
||||
clixon_plugin_reset_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
char *db)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -89,8 +89,8 @@ clixon_plugin_reset_one(clixon_plugin_t *cp,
|
|||
if (fn(h, db) < 0) {
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (clicon_errno < 0)
|
||||
clicon_log(LOG_WARNING, "%s: Internal error: Reset callback in plugin: %s returned -1 but did not make a clicon_err call",
|
||||
if (clixon_err_category() < 0)
|
||||
clixon_log(h, LOG_WARNING, "%s: Internal error: Reset callback in plugin: %s returned -1 but did not make a clixon_err call",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -111,7 +111,7 @@ clixon_plugin_reset_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_plugin_reset_all(clicon_handle h,
|
||||
clixon_plugin_reset_all(clixon_handle h,
|
||||
char *db)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -137,7 +137,7 @@ clixon_plugin_reset_all(clicon_handle h,
|
|||
*/
|
||||
static int
|
||||
clixon_plugin_pre_daemon_one(clixon_plugin_t *cp,
|
||||
clicon_handle h)
|
||||
clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
plgdaemon_t *fn; /* Daemonize plugin callback function */
|
||||
|
|
@ -150,9 +150,9 @@ clixon_plugin_pre_daemon_one(clixon_plugin_t *cp,
|
|||
if (fn(h) < 0) {
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (clicon_errno < 0)
|
||||
clicon_log(LOG_WARNING, "%s: Internal error: Pre-daemon callback in plugin:\
|
||||
%s returned -1 but did not make a clicon_err call",
|
||||
if (clixon_err_category() < 0)
|
||||
clixon_log(h, LOG_WARNING, "%s: Internal error: Pre-daemon callback in plugin:\
|
||||
%s returned -1 but did not make a clixon_err call",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -174,7 +174,7 @@ clixon_plugin_pre_daemon_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_plugin_pre_daemon_all(clicon_handle h)
|
||||
clixon_plugin_pre_daemon_all(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
clixon_plugin_t *cp = NULL;
|
||||
|
|
@ -199,7 +199,7 @@ clixon_plugin_pre_daemon_all(clicon_handle h)
|
|||
*/
|
||||
static int
|
||||
clixon_plugin_daemon_one(clixon_plugin_t *cp,
|
||||
clicon_handle h)
|
||||
clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
plgdaemon_t *fn; /* Daemonize plugin callback function */
|
||||
|
|
@ -212,8 +212,8 @@ clixon_plugin_daemon_one(clixon_plugin_t *cp,
|
|||
if (fn(h) < 0) {
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (clicon_errno < 0)
|
||||
clicon_log(LOG_WARNING, "%s: Internal error: Daemon callback in plugin: %s returned -1 but did not make a clicon_err call",
|
||||
if (clixon_err_category() < 0)
|
||||
clixon_log(h, LOG_WARNING, "%s: Internal error: Daemon callback in plugin: %s returned -1 but did not make a clixon_err call",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -237,7 +237,7 @@ clixon_plugin_daemon_one(clixon_plugin_t *cp,
|
|||
* @note Also called for non-background mode
|
||||
*/
|
||||
int
|
||||
clixon_plugin_daemon_all(clicon_handle h)
|
||||
clixon_plugin_daemon_all(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
clixon_plugin_t *cp = NULL;
|
||||
|
|
@ -280,7 +280,7 @@ clixon_plugin_daemon_all(clicon_handle h)
|
|||
*/
|
||||
static int
|
||||
clixon_plugin_statedata_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
cvec *nsc,
|
||||
char *xpath,
|
||||
cxobj **xp)
|
||||
|
|
@ -299,8 +299,8 @@ clixon_plugin_statedata_one(clixon_plugin_t *cp,
|
|||
if (fn(h, nsc, xpath, x) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (clicon_errno < 0)
|
||||
clicon_log(LOG_WARNING, "%s: Internal error: State callback in plugin: %s returned -1 but did not make a clicon_err call",
|
||||
if (clixon_err_category() < 0)
|
||||
clixon_log(h, LOG_WARNING, "%s: Internal error: State callback in plugin: %s returned -1 but did not make a clixon_err call",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto fail; /* Dont quit here on user callbacks */
|
||||
}
|
||||
|
|
@ -333,7 +333,7 @@ clixon_plugin_statedata_one(clixon_plugin_t *cp,
|
|||
* @note xret can be replaced in this function
|
||||
*/
|
||||
int
|
||||
clixon_plugin_statedata_all(clicon_handle h,
|
||||
clixon_plugin_statedata_all(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
cvec *nsc,
|
||||
char *xpath,
|
||||
|
|
@ -353,12 +353,12 @@ clixon_plugin_statedata_all(clicon_handle h,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* error reason should be in clicon_err_reason */
|
||||
/* error reason should be in clixon_err_reason */
|
||||
cprintf(cberr, "Internal error, state callback in plugin %s returned invalid XML: %s",
|
||||
clixon_plugin_name_get(cp), clicon_err_reason);
|
||||
clixon_plugin_name_get(cp), clixon_err_reason());
|
||||
if (netconf_operation_failed_xml(&xerr, "application", cbuf_get(cberr)) < 0)
|
||||
goto done;
|
||||
xml_free(*xret);
|
||||
|
|
@ -430,7 +430,7 @@ clixon_plugin_statedata_all(clicon_handle h,
|
|||
*/
|
||||
static int
|
||||
clixon_plugin_lockdb_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
char *db,
|
||||
int lock,
|
||||
int id)
|
||||
|
|
@ -463,7 +463,7 @@ clixon_plugin_lockdb_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Fatal error
|
||||
*/
|
||||
int
|
||||
clixon_plugin_lockdb_all(clicon_handle h,
|
||||
clixon_plugin_lockdb_all(clixon_handle h,
|
||||
char *db,
|
||||
int lock,
|
||||
int id
|
||||
|
|
@ -491,7 +491,7 @@ clixon_plugin_lockdb_all(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_pagination_cb_call(clicon_handle h,
|
||||
clixon_pagination_cb_call(clixon_handle h,
|
||||
char *xpath,
|
||||
int locked,
|
||||
uint32_t offset,
|
||||
|
|
@ -524,7 +524,7 @@ clixon_pagination_cb_call(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_pagination_cb_register(clicon_handle h,
|
||||
clixon_pagination_cb_register(clixon_handle h,
|
||||
handler_function fn,
|
||||
char *xpath,
|
||||
void *arg)
|
||||
|
|
@ -535,7 +535,7 @@ clixon_pagination_cb_register(clicon_handle h,
|
|||
|
||||
clicon_ptr_get(h, "pagination-entries", (void**)&htable);
|
||||
if (dispatcher_register_handler(&htable, &x) < 0){
|
||||
clicon_err(OE_PLUGIN, errno, "dispatcher");
|
||||
clixon_err(OE_PLUGIN, errno, "dispatcher");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_ptr_set(h, "pagination-entries", htable) < 0)
|
||||
|
|
@ -550,7 +550,7 @@ clixon_pagination_cb_register(clicon_handle h,
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
int
|
||||
clixon_pagination_free(clicon_handle h)
|
||||
clixon_pagination_free(clixon_handle h)
|
||||
{
|
||||
dispatcher_entry_t *htable = NULL;
|
||||
|
||||
|
|
@ -573,7 +573,7 @@ transaction_new(void)
|
|||
static uint64_t id = 0; /* Global transaction id */
|
||||
|
||||
if ((td = malloc(sizeof(*td))) == NULL){
|
||||
clicon_err(OE_CFG, errno, "malloc");
|
||||
clixon_err(OE_CFG, errno, "malloc");
|
||||
return NULL;
|
||||
}
|
||||
memset(td, 0, sizeof(*td));
|
||||
|
|
@ -614,7 +614,7 @@ transaction_free(transaction_data_t *td)
|
|||
*/
|
||||
int
|
||||
plugin_transaction_begin_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -628,8 +628,8 @@ plugin_transaction_begin_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -651,7 +651,7 @@ plugin_transaction_begin_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Error: one of the plugin callbacks returned error
|
||||
*/
|
||||
int
|
||||
plugin_transaction_begin_all(clicon_handle h,
|
||||
plugin_transaction_begin_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -677,7 +677,7 @@ plugin_transaction_begin_all(clicon_handle h,
|
|||
*/
|
||||
int
|
||||
plugin_transaction_validate_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -691,8 +691,8 @@ plugin_transaction_validate_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
|
||||
goto done;
|
||||
|
|
@ -713,7 +713,7 @@ plugin_transaction_validate_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Error: one of the plugin callbacks returned validation fail
|
||||
*/
|
||||
int
|
||||
plugin_transaction_validate_all(clicon_handle h,
|
||||
plugin_transaction_validate_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -739,7 +739,7 @@ plugin_transaction_validate_all(clicon_handle h,
|
|||
*/
|
||||
int
|
||||
plugin_transaction_complete_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -753,8 +753,8 @@ plugin_transaction_complete_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -776,7 +776,7 @@ plugin_transaction_complete_one(clixon_plugin_t *cp,
|
|||
* @note Rename to transaction_complete?
|
||||
*/
|
||||
int
|
||||
plugin_transaction_complete_all(clicon_handle h,
|
||||
plugin_transaction_complete_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -802,7 +802,7 @@ plugin_transaction_complete_all(clicon_handle h,
|
|||
* plugin 2, then the revert will be made in plugins 1 and 0.
|
||||
*/
|
||||
static int
|
||||
plugin_transaction_revert_all(clicon_handle h,
|
||||
plugin_transaction_revert_all(clixon_handle h,
|
||||
transaction_data_t *td,
|
||||
int nr)
|
||||
{
|
||||
|
|
@ -814,7 +814,7 @@ plugin_transaction_revert_all(clicon_handle h,
|
|||
if ((fn = clixon_plugin_api_get(cp)->ca_trans_revert) == NULL)
|
||||
continue;
|
||||
if ((retval = fn(h, (transaction_data)td)) < 0){
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' trans_revert callback failed",
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' trans_revert callback failed",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
break;
|
||||
}
|
||||
|
|
@ -833,7 +833,7 @@ plugin_transaction_revert_all(clicon_handle h,
|
|||
*/
|
||||
int
|
||||
plugin_transaction_commit_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -847,8 +847,8 @@ plugin_transaction_commit_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -871,7 +871,7 @@ plugin_transaction_commit_one(clixon_plugin_t *cp,
|
|||
* and in reverse order.
|
||||
*/
|
||||
int
|
||||
plugin_transaction_commit_all(clicon_handle h,
|
||||
plugin_transaction_commit_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -901,7 +901,7 @@ plugin_transaction_commit_all(clicon_handle h,
|
|||
*/
|
||||
int
|
||||
plugin_transaction_commit_done_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -915,8 +915,8 @@ plugin_transaction_commit_done_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -937,7 +937,7 @@ plugin_transaction_commit_done_one(clixon_plugin_t *cp,
|
|||
* @note no revert is done
|
||||
*/
|
||||
int
|
||||
plugin_transaction_commit_done_all(clicon_handle h,
|
||||
plugin_transaction_commit_done_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -962,7 +962,7 @@ plugin_transaction_commit_done_all(clicon_handle h,
|
|||
*/
|
||||
int
|
||||
plugin_transaction_end_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -976,8 +976,8 @@ plugin_transaction_end_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -997,7 +997,7 @@ plugin_transaction_end_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
plugin_transaction_end_all(clicon_handle h,
|
||||
plugin_transaction_end_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -1015,7 +1015,7 @@ plugin_transaction_end_all(clicon_handle h,
|
|||
|
||||
int
|
||||
plugin_transaction_abort_one(clixon_plugin_t *cp,
|
||||
clicon_handle h,
|
||||
clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -1029,8 +1029,8 @@ plugin_transaction_abort_one(clixon_plugin_t *cp,
|
|||
if (fn(h, (transaction_data)td) < 0){
|
||||
if (plugin_context_check(h, &wh, clixon_plugin_name_get(cp), __FUNCTION__) < 0)
|
||||
goto done;
|
||||
if (!clicon_errno) /* sanity: log if clicon_err() is not called ! */
|
||||
clicon_log(LOG_NOTICE, "%s: Plugin '%s' callback does not make clicon_err call on error",
|
||||
if (!clixon_err_category()) /* sanity: log if clixon_err() is not called ! */
|
||||
clixon_log(h, LOG_NOTICE, "%s: Plugin '%s' callback does not make clixon_err call on error",
|
||||
__FUNCTION__, clixon_plugin_name_get(cp));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1050,7 +1050,7 @@ plugin_transaction_abort_one(clixon_plugin_t *cp,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
plugin_transaction_abort_all(clicon_handle h,
|
||||
plugin_transaction_abort_all(clixon_handle h,
|
||||
transaction_data_t *td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
restconf_pseudo_set_log(clicon_handle h,
|
||||
restconf_pseudo_set_log(clixon_handle h,
|
||||
cxobj *xt)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -102,7 +102,7 @@ restconf_pseudo_set_log(clicon_handle h,
|
|||
if (argv[i+1])
|
||||
free(argv[i+1]);
|
||||
if ((argv[i+1] = strdup("s")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -110,7 +110,7 @@ restconf_pseudo_set_log(clicon_handle h,
|
|||
if (argv[i+1])
|
||||
free(argv[i+1]);
|
||||
if ((argv[i+1] = strdup("f/var/log/clixon_restconf.log")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ restconf_pseudo_set_log(clicon_handle h,
|
|||
if (dbg){
|
||||
free(argv[i+1]);
|
||||
if ((argv[i+1] = strdup(dbg)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -144,7 +144,7 @@ restconf_pseudo_set_log(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
restconf_pseudo_set_inline(clicon_handle h,
|
||||
restconf_pseudo_set_inline(clixon_handle h,
|
||||
cxobj *xt)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -165,13 +165,13 @@ restconf_pseudo_set_inline(clicon_handle h,
|
|||
char *str;
|
||||
if (strcmp(argv[i], "-R") == 0 && argc > i+1 && argv[i+1]){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cb, xrestconf, 0, 0, NULL, -1, 0) < 0)
|
||||
goto done;
|
||||
if ((str = strdup(cbuf_get(cb))) == NULL){
|
||||
clicon_err(OE_XML, errno, "stdup");
|
||||
clixon_err(OE_XML, errno, "stdup");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s str:%s", __FUNCTION__, str);
|
||||
|
|
@ -196,7 +196,7 @@ restconf_pseudo_set_inline(clicon_handle h,
|
|||
* These rules give that if RPC op is start and enable is false -> change op to none
|
||||
*/
|
||||
int
|
||||
restconf_rpc_wrapper(clicon_handle h,
|
||||
restconf_rpc_wrapper(clixon_handle h,
|
||||
process_entry_t *pe,
|
||||
proc_operation *operation)
|
||||
{
|
||||
|
|
@ -248,7 +248,7 @@ restconf_rpc_wrapper(clicon_handle h,
|
|||
* this is ignored.
|
||||
*/
|
||||
static int
|
||||
restconf_pseudo_process_control(clicon_handle h)
|
||||
restconf_pseudo_process_control(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
char **argv = NULL;
|
||||
|
|
@ -266,12 +266,12 @@ restconf_pseudo_process_control(clicon_handle h)
|
|||
nr += 2;
|
||||
#endif
|
||||
if ((argv = calloc(nr, sizeof(char *))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "calloc");
|
||||
clixon_err(OE_UNIX, errno, "calloc");
|
||||
goto done;
|
||||
}
|
||||
i = 0;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Try to figure out where clixon_restconf is installed
|
||||
|
|
@ -303,7 +303,7 @@ restconf_pseudo_process_control(clicon_handle h)
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "Not found: %s", pgm);
|
||||
}
|
||||
if (!found){
|
||||
clicon_err(OE_RESTCONF, 0, "clixon_restconf not found in neither CLICON_RESTCONF_INSTALLDIR(%s) nor CLIXON_CONFIG_SBINDIR(%s). Try overriding with CLICON_RESTCONF_INSTALLDIR",
|
||||
clixon_err(OE_RESTCONF, 0, "clixon_restconf not found in neither CLICON_RESTCONF_INSTALLDIR(%s) nor CLIXON_CONFIG_SBINDIR(%s). Try overriding with CLICON_RESTCONF_INSTALLDIR",
|
||||
dir0, dir1);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -343,7 +343,7 @@ restconf_pseudo_process_control(clicon_handle h)
|
|||
/*! Restconf pseudo-plugin process validate
|
||||
*/
|
||||
static int
|
||||
restconf_pseudo_process_validate(clicon_handle h,
|
||||
restconf_pseudo_process_validate(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -357,11 +357,11 @@ restconf_pseudo_process_validate(clicon_handle h,
|
|||
xpath_first(xtarget, NULL, "restconf/socket[ssl='true']")){
|
||||
/* Should filepath be checked? One could claim this is a runtime system,... */
|
||||
if (xpath_first(xtarget, 0, "restconf/server-cert-path") == NULL){
|
||||
clicon_err(OE_CFG, 0, "SSL enabled but server-cert-path not set");
|
||||
clixon_err(OE_CFG, 0, "SSL enabled but server-cert-path not set");
|
||||
return -1; /* induce fail */
|
||||
}
|
||||
if (xpath_first(xtarget, 0, "restconf/server-key-path") == NULL){
|
||||
clicon_err(OE_CFG, 0, "SSL enabled but server-key-path not set");
|
||||
clixon_err(OE_CFG, 0, "SSL enabled but server-key-path not set");
|
||||
return -1; /* induce fail */
|
||||
}
|
||||
}
|
||||
|
|
@ -372,7 +372,7 @@ restconf_pseudo_process_validate(clicon_handle h,
|
|||
/*! Restconf pseduo-plugin process commit
|
||||
*/
|
||||
static int
|
||||
restconf_pseudo_process_commit(clicon_handle h,
|
||||
restconf_pseudo_process_commit(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -437,7 +437,7 @@ restconf_pseudo_process_commit(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
backend_plugin_restconf_register(clicon_handle h,
|
||||
backend_plugin_restconf_register(clixon_handle h,
|
||||
yang_stmt *yspec)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,6 @@
|
|||
#ifndef _BACKEND_PLUGIN_RESTCONF_H_
|
||||
#define _BACKEND_PLUGIN_RESTCONF_H_
|
||||
|
||||
int backend_plugin_restconf_register(clicon_handle h, yang_stmt *yspec);
|
||||
int backend_plugin_restconf_register(clixon_handle h, yang_stmt *yspec);
|
||||
|
||||
#endif /* _BACKEND_PLUGIN_RESTCONF_H_ */
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "backend_socket.h"
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
config_socket_init_ipv4(clicon_handle h,
|
||||
config_socket_init_ipv4(clixon_handle h,
|
||||
char *dst)
|
||||
{
|
||||
int s;
|
||||
|
|
@ -96,7 +96,7 @@ config_socket_init_ipv4(clicon_handle h,
|
|||
|
||||
/* create inet socket */
|
||||
if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
|
||||
clicon_err(OE_UNIX, errno, "socket");
|
||||
clixon_err(OE_UNIX, errno, "socket");
|
||||
return -1;
|
||||
}
|
||||
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&one, sizeof(one));
|
||||
|
|
@ -104,16 +104,16 @@ config_socket_init_ipv4(clicon_handle h,
|
|||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(port);
|
||||
if (inet_pton(addr.sin_family, dst, &addr.sin_addr) != 1){
|
||||
clicon_err(OE_UNIX, errno, "inet_pton: %s (Expected IPv4 address. Check settings of CLICON_SOCK_FAMILY and CLICON_SOCK)", dst);
|
||||
clixon_err(OE_UNIX, errno, "inet_pton: %s (Expected IPv4 address. Check settings of CLICON_SOCK_FAMILY and CLICON_SOCK)", dst);
|
||||
goto err; /* Could check getaddrinfo */
|
||||
}
|
||||
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "bind");
|
||||
clixon_err(OE_UNIX, errno, "bind");
|
||||
goto err;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "Listen on server socket at %s:%hu", dst, port);
|
||||
if (listen(s, 5) < 0){
|
||||
clicon_err(OE_UNIX, errno, "listen");
|
||||
clixon_err(OE_UNIX, errno, "listen");
|
||||
goto err;
|
||||
}
|
||||
return s;
|
||||
|
|
@ -132,7 +132,7 @@ config_socket_init_ipv4(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
config_socket_init_unix(clicon_handle h,
|
||||
config_socket_init_unix(clixon_handle h,
|
||||
char *sock)
|
||||
{
|
||||
int s;
|
||||
|
|
@ -143,23 +143,23 @@ config_socket_init_unix(clicon_handle h,
|
|||
struct stat st;
|
||||
|
||||
if (lstat(sock, &st) == 0 && unlink(sock) < 0){
|
||||
clicon_err(OE_UNIX, errno, "unlink(%s)", sock);
|
||||
clixon_err(OE_UNIX, errno, "unlink(%s)", sock);
|
||||
return -1;
|
||||
}
|
||||
/* then find configuration group (for clients) and find its groupid */
|
||||
if ((config_group = clicon_sock_group(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "clicon_sock_group option not set");
|
||||
clixon_err(OE_FATAL, 0, "clicon_sock_group option not set");
|
||||
return -1;
|
||||
}
|
||||
if (group_name2gid(config_group, &gid) < 0)
|
||||
return -1;
|
||||
#if 0
|
||||
if (gid == 0)
|
||||
clicon_log(LOG_WARNING, "%s: No such group: %s", __FUNCTION__, config_group);
|
||||
clixon_log(h, LOG_WARNING, "%s: No such group: %s", __FUNCTION__, config_group);
|
||||
#endif
|
||||
/* create unix socket */
|
||||
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
|
||||
clicon_err(OE_UNIX, errno, "socket");
|
||||
clixon_err(OE_UNIX, errno, "socket");
|
||||
return -1;
|
||||
}
|
||||
// setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&one, sizeof(one));
|
||||
|
|
@ -168,19 +168,19 @@ config_socket_init_unix(clicon_handle h,
|
|||
strncpy(addr.sun_path, sock, sizeof(addr.sun_path)-1);
|
||||
old_mask = umask(S_IRWXO | S_IXGRP | S_IXUSR);
|
||||
if (bind(s, (struct sockaddr *)&addr, SUN_LEN(&addr)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "bind");
|
||||
clixon_err(OE_UNIX, errno, "bind");
|
||||
umask(old_mask);
|
||||
goto err;
|
||||
}
|
||||
umask(old_mask);
|
||||
/* change socket path file group */
|
||||
if (lchown(sock, -1, gid) < 0){
|
||||
clicon_err(OE_UNIX, errno, "lchown(%s, %s)", sock, config_group);
|
||||
clixon_err(OE_UNIX, errno, "lchown(%s, %s)", sock, config_group);
|
||||
goto err;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "Listen on server socket at %s", addr.sun_path);
|
||||
if (listen(s, 5) < 0){
|
||||
clicon_err(OE_UNIX, errno, "listen");
|
||||
clixon_err(OE_UNIX, errno, "listen");
|
||||
goto err;
|
||||
}
|
||||
return s;
|
||||
|
|
@ -196,12 +196,12 @@ config_socket_init_unix(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
backend_socket_init(clicon_handle h)
|
||||
backend_socket_init(clixon_handle h)
|
||||
{
|
||||
char *sock; /* unix path or ip address string */
|
||||
|
||||
if ((sock = clicon_sock_str(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "CLICON_SOCK option not set");
|
||||
clixon_err(OE_FATAL, 0, "CLICON_SOCK option not set");
|
||||
return -1;
|
||||
}
|
||||
switch (clicon_sock_family(h)){
|
||||
|
|
@ -212,7 +212,7 @@ backend_socket_init(clicon_handle h)
|
|||
return config_socket_init_ipv4(h, sock);
|
||||
break;
|
||||
default:
|
||||
clicon_err(OE_UNIX, EINVAL, "No such address family: %d",
|
||||
clixon_err(OE_UNIX, EINVAL, "No such address family: %d",
|
||||
clicon_sock_family(h));
|
||||
break;
|
||||
}
|
||||
|
|
@ -222,7 +222,7 @@ backend_socket_init(clicon_handle h)
|
|||
/*! Accept new socket client
|
||||
*
|
||||
* @param[in] fd Socket (unix or ip)
|
||||
* @param[in] arg typecast clicon_handle
|
||||
* @param[in] arg typecast clixon_handle
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error
|
||||
*/
|
||||
|
|
@ -231,7 +231,7 @@ backend_accept_client(int fd,
|
|||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h = (clicon_handle)arg;
|
||||
clixon_handle h = (clixon_handle)arg;
|
||||
int s;
|
||||
struct sockaddr from = {0,};
|
||||
socklen_t len;
|
||||
|
|
@ -248,7 +248,7 @@ backend_accept_client(int fd,
|
|||
clixon_debug(CLIXON_DBG_DETAIL, "%s", __FUNCTION__);
|
||||
len = sizeof(from);
|
||||
if ((s = accept(fd, &from, &len)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "accept");
|
||||
clixon_err(OE_UNIX, errno, "accept");
|
||||
goto done;
|
||||
}
|
||||
if ((ce = backend_client_add(h, &from)) == NULL)
|
||||
|
|
@ -262,7 +262,7 @@ backend_accept_client(int fd,
|
|||
#if defined(HAVE_SO_PEERCRED)
|
||||
clen = sizeof(cr);
|
||||
if(getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cr, &clen) < 0){
|
||||
clicon_err(OE_UNIX, errno, "getsockopt");
|
||||
clixon_err(OE_UNIX, errno, "getsockopt");
|
||||
goto done;
|
||||
}
|
||||
if (uid2name(cr.uid, &name) < 0)
|
||||
|
|
@ -277,7 +277,7 @@ backend_accept_client(int fd,
|
|||
#endif
|
||||
if (name != NULL){
|
||||
if ((ce->ce_username = name) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
name = NULL;
|
||||
goto done;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int backend_socket_init(clicon_handle h);
|
||||
int backend_socket_init(clixon_handle h);
|
||||
int backend_accept_client(int fd, void *arg);
|
||||
|
||||
#endif /* _BACKEND_SOCKET_H_ */
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
db_merge(clicon_handle h,
|
||||
db_merge(clixon_handle h,
|
||||
const char *db1,
|
||||
const char *db2,
|
||||
cbuf *cbret)
|
||||
|
|
@ -130,7 +130,7 @@ startup --+-------------------------------------> BROKEN XML
|
|||
* @note: if commit fails, copy factory to running
|
||||
*/
|
||||
int
|
||||
startup_mode_startup(clicon_handle h,
|
||||
startup_mode_startup(clixon_handle h,
|
||||
char *db,
|
||||
cbuf *cbret)
|
||||
{
|
||||
|
|
@ -140,7 +140,7 @@ startup_mode_startup(clicon_handle h,
|
|||
yang_stmt *yspec = clicon_dbspec_yang(h);
|
||||
|
||||
if (strcmp(db, "running")==0){
|
||||
clicon_err(OE_FATAL, 0, "Invalid startup db: %s", db);
|
||||
clixon_err(OE_FATAL, 0, "Invalid startup db: %s", db);
|
||||
goto done;
|
||||
}
|
||||
/* If startup does not exist, create it empty */
|
||||
|
|
@ -158,7 +158,7 @@ startup_mode_startup(clicon_handle h,
|
|||
*/
|
||||
if (if_feature(yspec, "ietf-netconf", "confirmed-commit")) {
|
||||
if ((rollback_exists = xmldb_exists(h, "rollback")) < 0) {
|
||||
clicon_err(OE_DAEMON, 0, "Error checking for the existence of the rollback database");
|
||||
clixon_err(OE_DAEMON, 0, "Error checking for the existence of the rollback database");
|
||||
goto done;
|
||||
}
|
||||
if (rollback_exists == 1) {
|
||||
|
|
@ -211,7 +211,7 @@ startup_mode_startup(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
load_extraxml(clicon_handle h,
|
||||
load_extraxml(clixon_handle h,
|
||||
char *filename,
|
||||
const char *db,
|
||||
cbuf *cbret)
|
||||
|
|
@ -226,7 +226,7 @@ load_extraxml(clicon_handle h,
|
|||
if (filename == NULL)
|
||||
return 1;
|
||||
if ((fp = fopen(filename, "r")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "open(%s)", filename);
|
||||
clixon_err(OE_UNIX, errno, "open(%s)", filename);
|
||||
goto done;
|
||||
}
|
||||
yspec = clicon_dbspec_yang(h);
|
||||
|
|
@ -248,7 +248,6 @@ load_extraxml(clicon_handle h,
|
|||
retval = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Merge user reset state */
|
||||
retval = xmldb_put(h, (char*)db, OP_MERGE, xt, clicon_username_get(h), cbret);
|
||||
done:
|
||||
|
|
@ -280,7 +279,7 @@ tmp |-------+-----+-----+
|
|||
reset extrafile
|
||||
*/
|
||||
int
|
||||
startup_extraxml(clicon_handle h,
|
||||
startup_extraxml(clixon_handle h,
|
||||
char *file,
|
||||
cbuf *cbret)
|
||||
{
|
||||
|
|
@ -352,7 +351,7 @@ startup_extraxml(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
startup_module_state(clicon_handle h,
|
||||
startup_module_state(clixon_handle h,
|
||||
yang_stmt *yspec)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int startup_mode_startup(clicon_handle h, char *db, cbuf *cbret);
|
||||
int startup_extraxml(clicon_handle h, char *file, cbuf *cbret);
|
||||
int startup_module_state(clicon_handle h, yang_stmt *yspec);
|
||||
int startup_mode_startup(clixon_handle h, char *db, cbuf *cbret);
|
||||
int startup_extraxml(clixon_handle h, char *file, cbuf *cbret);
|
||||
int startup_module_state(clixon_handle h, yang_stmt *yspec);
|
||||
|
||||
#endif /* _BACKEND_STARTUP_H_ */
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ struct client_entry{
|
|||
int ce_nr; /* Client number (for dbg/tracing) */
|
||||
uint32_t ce_id; /* Session id, accessor functions: clicon_session_id_get/set */
|
||||
char *ce_username;/* Translated from peer user cred */
|
||||
clicon_handle ce_handle; /* clicon config handle (all clients have same?) */
|
||||
clixon_handle ce_handle; /* clicon config handle (all clients have same?) */
|
||||
char *ce_transport; /* Identifies the transport for each session.
|
||||
Clixon-lib.yang extends these values by prefixing with
|
||||
"cl:", where cl is ensured to be declared ie by
|
||||
|
|
|
|||
|
|
@ -56,28 +56,28 @@ enum confirmed_commit_state {
|
|||
* Prototypes
|
||||
*/
|
||||
/* backend_confirm.c */
|
||||
int confirmed_commit_init(clicon_handle h);
|
||||
int confirmed_commit_free(clicon_handle h);
|
||||
enum confirmed_commit_state confirmed_commit_state_get(clicon_handle h);
|
||||
uint32_t confirmed_commit_session_id_get(clicon_handle h);
|
||||
int cancel_rollback_event(clicon_handle h);
|
||||
int cancel_confirmed_commit(clicon_handle h);
|
||||
int handle_confirmed_commit(clicon_handle h, cxobj *xe, uint32_t myid);
|
||||
int do_rollback(clicon_handle h, uint8_t *errs);
|
||||
int from_client_cancel_commit(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_confirmed_commit(clicon_handle h, cxobj *xe, uint32_t myid, cbuf *cbret);
|
||||
int confirmed_commit_init(clixon_handle h);
|
||||
int confirmed_commit_free(clixon_handle h);
|
||||
enum confirmed_commit_state confirmed_commit_state_get(clixon_handle h);
|
||||
uint32_t confirmed_commit_session_id_get(clixon_handle h);
|
||||
int cancel_rollback_event(clixon_handle h);
|
||||
int cancel_confirmed_commit(clixon_handle h);
|
||||
int handle_confirmed_commit(clixon_handle h, cxobj *xe, uint32_t myid);
|
||||
int do_rollback(clixon_handle h, uint8_t *errs);
|
||||
int from_client_cancel_commit(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_confirmed_commit(clixon_handle h, cxobj *xe, uint32_t myid, cbuf *cbret);
|
||||
|
||||
/* backend_commit.c */
|
||||
int startup_validate(clicon_handle h, char *db, cxobj **xtr, cbuf *cbret);
|
||||
int startup_commit(clicon_handle h, char *db, cbuf *cbret);
|
||||
int candidate_validate(clicon_handle h, char *db, cbuf *cbret);
|
||||
int candidate_commit(clicon_handle h, cxobj *xe, char *db, uint32_t myid,
|
||||
int startup_validate(clixon_handle h, char *db, cxobj **xtr, cbuf *cbret);
|
||||
int startup_commit(clixon_handle h, char *db, cbuf *cbret);
|
||||
int candidate_validate(clixon_handle h, char *db, cbuf *cbret);
|
||||
int candidate_commit(clixon_handle h, cxobj *xe, char *db, uint32_t myid,
|
||||
validate_level vlev, cbuf *cbret);
|
||||
|
||||
int from_client_commit(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_discard_changes(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_validate(clicon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_restart_one(clicon_handle h, clixon_plugin_t *cp, cbuf *cbret);
|
||||
int load_failsafe(clicon_handle h, char *phase);
|
||||
int from_client_commit(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_discard_changes(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_validate(clixon_handle h, cxobj *xe, cbuf *cbret, void *arg, void *regarg);
|
||||
int from_client_restart_one(clixon_handle h, clixon_plugin_t *cp, cbuf *cbret);
|
||||
int load_failsafe(clixon_handle h, char *phase);
|
||||
|
||||
#endif /* _CLIXON_BACKEND_COMMIT_H_ */
|
||||
|
|
|
|||
|
|
@ -58,21 +58,21 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_client.h"
|
||||
#include "backend_client.h"
|
||||
#include "backend_handle.h"
|
||||
|
||||
/* header part is copied from struct clicon_handle in lib/src/clicon_handle.c */
|
||||
/* header part is copied from struct clixon_handle in lib/src/clixon_handle.c */
|
||||
|
||||
#define CLICON_MAGIC 0x99aafabe
|
||||
|
||||
#define handle(h) (assert(clicon_handle_check(h)==0),(struct backend_handle *)(h))
|
||||
#define handle(h) (assert(clixon_handle_check(h)==0),(struct backend_handle *)(h))
|
||||
|
||||
/* Clicon_handle for backends.
|
||||
* First part of this is header, same for clicon_handle and cli_handle.
|
||||
/* Clixon_handle for backends.
|
||||
* First part of this is header, same for clixon_handle and cli_handle.
|
||||
* Access functions for common fields are found in clicon lib: clicon_options.[ch]
|
||||
* This file should only contain access functions for the _specific_
|
||||
* entries in the struct below.
|
||||
|
|
@ -81,8 +81,8 @@
|
|||
*
|
||||
* This file should only contain access functions for the _specific_
|
||||
* entries in the struct below.
|
||||
* @note The top part must be equivalent to struct clicon_handle in clixon_handle.c
|
||||
* @see struct clicon_handle, struct cli_handle
|
||||
* @note The top part must be equivalent to struct clixon_handle in clixon_handle.c
|
||||
* @see struct clixon_handle, struct cli_handle
|
||||
*/
|
||||
struct backend_handle {
|
||||
int bh_magic; /* magic (HDR)*/
|
||||
|
|
@ -98,14 +98,14 @@ struct backend_handle {
|
|||
|
||||
/*! Creates and returns a clicon config handle for other CLICON API calls
|
||||
*/
|
||||
clicon_handle
|
||||
clixon_handle
|
||||
backend_handle_init(void)
|
||||
{
|
||||
struct backend_handle *bh;
|
||||
|
||||
bh = (struct backend_handle *)clicon_handle_init0(sizeof(struct backend_handle));
|
||||
bh = (struct backend_handle *)clixon_handle_init0(sizeof(struct backend_handle));
|
||||
bh->bh_ce_nr = 1; /* To align with session-id */
|
||||
return (clicon_handle)bh;
|
||||
return (clixon_handle)bh;
|
||||
}
|
||||
|
||||
/*! Deallocates a backend handle, including all client structs
|
||||
|
|
@ -114,7 +114,7 @@ backend_handle_init(void)
|
|||
* @see backend_client_rm
|
||||
*/
|
||||
int
|
||||
backend_handle_exit(clicon_handle h)
|
||||
backend_handle_exit(clixon_handle h)
|
||||
{
|
||||
struct client_entry *ce;
|
||||
|
||||
|
|
@ -126,7 +126,7 @@ backend_handle_exit(clicon_handle h)
|
|||
}
|
||||
backend_client_delete(h, ce);
|
||||
}
|
||||
clicon_handle_exit(h); /* frees h and options (and streams) */
|
||||
clixon_handle_exit(h); /* frees h and options (and streams) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -138,14 +138,14 @@ backend_handle_exit(clicon_handle h)
|
|||
* @retval NULL Error
|
||||
*/
|
||||
struct client_entry *
|
||||
backend_client_add(clicon_handle h,
|
||||
backend_client_add(clixon_handle h,
|
||||
struct sockaddr *addr)
|
||||
{
|
||||
struct backend_handle *bh = handle(h);
|
||||
struct client_entry *ce;
|
||||
|
||||
if ((ce = (struct client_entry *)malloc(sizeof(*ce))) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "malloc");
|
||||
clixon_err(OE_PLUGIN, errno, "malloc");
|
||||
return NULL;
|
||||
}
|
||||
memset(ce, 0, sizeof(*ce));
|
||||
|
|
@ -154,7 +154,7 @@ backend_client_add(clicon_handle h,
|
|||
ce->ce_next = bh->bh_ce_list;
|
||||
ce->ce_handle = h;
|
||||
if (clicon_session_id_get(h, &ce->ce_id) < 0){
|
||||
clicon_err(OE_NETCONF, ENOENT, "session_id not set");
|
||||
clixon_err(OE_NETCONF, ENOENT, "session_id not set");
|
||||
return NULL;
|
||||
}
|
||||
clicon_session_id_set(h, ce->ce_id + 1);
|
||||
|
|
@ -170,7 +170,7 @@ backend_client_add(clicon_handle h,
|
|||
* @retval ce_list Client entry list (all sessions)
|
||||
*/
|
||||
struct client_entry *
|
||||
backend_client_list(clicon_handle h)
|
||||
backend_client_list(clixon_handle h)
|
||||
{
|
||||
struct backend_handle *bh = handle(h);
|
||||
|
||||
|
|
@ -184,7 +184,7 @@ backend_client_list(clicon_handle h)
|
|||
* @see backend_client_rm which is more high-level
|
||||
*/
|
||||
int
|
||||
backend_client_delete(clicon_handle h,
|
||||
backend_client_delete(clixon_handle h,
|
||||
struct client_entry *ce)
|
||||
{
|
||||
struct client_entry *c;
|
||||
|
|
@ -215,7 +215,7 @@ backend_client_delete(clicon_handle h,
|
|||
* @param[in] f UNIX output stream
|
||||
*/
|
||||
int
|
||||
backend_client_print(clicon_handle h,
|
||||
backend_client_print(clixon_handle h,
|
||||
FILE *f)
|
||||
{
|
||||
struct backend_handle *bh = handle(h);
|
||||
|
|
|
|||
|
|
@ -94,44 +94,44 @@ typedef struct {
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int clixon_plugin_reset_one(clixon_plugin_t *cp, clicon_handle h, char *db);
|
||||
int clixon_plugin_reset_all(clicon_handle h, char *db);
|
||||
int clixon_plugin_reset_one(clixon_plugin_t *cp, clixon_handle h, char *db);
|
||||
int clixon_plugin_reset_all(clixon_handle h, char *db);
|
||||
|
||||
int clixon_plugin_pre_daemon_all(clicon_handle h);
|
||||
int clixon_plugin_daemon_all(clicon_handle h);
|
||||
int clixon_plugin_pre_daemon_all(clixon_handle h);
|
||||
int clixon_plugin_daemon_all(clixon_handle h);
|
||||
|
||||
int clixon_plugin_statedata_all(clicon_handle h, yang_stmt *yspec, cvec *nsc, char *xpath,
|
||||
int clixon_plugin_statedata_all(clixon_handle h, yang_stmt *yspec, cvec *nsc, char *xpath,
|
||||
withdefaults_type wdef, cxobj **xtop);
|
||||
int clixon_plugin_lockdb_all(clicon_handle h, char *db, int lock, int id);
|
||||
int clixon_plugin_lockdb_all(clixon_handle h, char *db, int lock, int id);
|
||||
|
||||
int clixon_pagination_cb_register(clicon_handle h, handler_function fn, char *path, void *arg);
|
||||
int clixon_pagination_cb_call(clicon_handle h, char *xpath, int locked,
|
||||
int clixon_pagination_cb_register(clixon_handle h, handler_function fn, char *path, void *arg);
|
||||
int clixon_pagination_cb_call(clixon_handle h, char *xpath, int locked,
|
||||
uint32_t offset, uint32_t limit,
|
||||
cxobj *xstate);
|
||||
int clixon_pagination_free(clicon_handle h);
|
||||
int clixon_pagination_free(clixon_handle h);
|
||||
|
||||
transaction_data_t * transaction_new(void);
|
||||
int transaction_free(transaction_data_t *);
|
||||
|
||||
int plugin_transaction_begin_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_begin_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_begin_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_begin_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
int plugin_transaction_validate_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_validate_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_validate_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_validate_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
int plugin_transaction_complete_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_complete_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_complete_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_complete_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
int plugin_transaction_commit_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_commit_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_commit_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_commit_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
int plugin_transaction_commit_done_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_commit_done_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_commit_done_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_commit_done_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
int plugin_transaction_end_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_end_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_end_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_end_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
int plugin_transaction_abort_one(clixon_plugin_t *cp, clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_abort_all(clicon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_abort_one(clixon_plugin_t *cp, clixon_handle h, transaction_data_t *td);
|
||||
int plugin_transaction_abort_all(clixon_handle h, transaction_data_t *td);
|
||||
|
||||
#endif /* _CLIXON_BACKEND_PLUGIN_H_ */
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_backend_transaction.h"
|
||||
|
|
@ -258,7 +258,7 @@ transaction_print(FILE *f,
|
|||
* @param[in] msg Debug msg tag
|
||||
*/
|
||||
int
|
||||
transaction_dbg(clicon_handle h,
|
||||
transaction_dbg(clixon_handle h,
|
||||
int dbglevel,
|
||||
transaction_data th,
|
||||
const char *msg)
|
||||
|
|
@ -270,7 +270,7 @@ transaction_dbg(clicon_handle h,
|
|||
|
||||
td = (transaction_data_t *)th;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_CFG, errno, "cbuf_new");
|
||||
clixon_err(OE_CFG, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
for (i=0; i<td->td_dlen; i++){
|
||||
|
|
@ -313,7 +313,7 @@ transaction_dbg(clicon_handle h,
|
|||
/*! Log a transaction
|
||||
*/
|
||||
int
|
||||
transaction_log(clicon_handle h,
|
||||
transaction_log(clixon_handle h,
|
||||
transaction_data th,
|
||||
int level,
|
||||
const char *op)
|
||||
|
|
@ -325,7 +325,7 @@ transaction_log(clicon_handle h,
|
|||
|
||||
td = (transaction_data_t *)th;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_CFG, errno, "cbuf_new");
|
||||
clixon_err(OE_CFG, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
for (i=0; i<td->td_dlen; i++){
|
||||
|
|
@ -334,7 +334,7 @@ transaction_log(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if (i)
|
||||
clicon_log(level, "%s %" PRIu64 " %s del: %s",
|
||||
clixon_log(h, level, "%s %" PRIu64 " %s del: %s",
|
||||
__FUNCTION__, td->td_id, op, cbuf_get(cb));
|
||||
cbuf_reset(cb);
|
||||
for (i=0; i<td->td_alen; i++){
|
||||
|
|
@ -343,7 +343,7 @@ transaction_log(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if (i)
|
||||
clicon_log(level, "%s %" PRIu64 " %s add: %s", __FUNCTION__, td->td_id, op, cbuf_get(cb));
|
||||
clixon_log(h, level, "%s %" PRIu64 " %s add: %s", __FUNCTION__, td->td_id, op, cbuf_get(cb));
|
||||
cbuf_reset(cb);
|
||||
for (i=0; i<td->td_clen; i++){
|
||||
if (td->td_scvec){
|
||||
|
|
@ -356,7 +356,7 @@ transaction_log(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if (i)
|
||||
clicon_log(level, "%s %" PRIu64 " %s change: %s", __FUNCTION__, td->td_id, op, cbuf_get(cb));
|
||||
clixon_log(h, level, "%s %" PRIu64 " %s change: %s", __FUNCTION__, td->td_id, op, cbuf_get(cb));
|
||||
done:
|
||||
if (cb)
|
||||
cbuf_free(cb);
|
||||
|
|
|
|||
|
|
@ -62,8 +62,8 @@ cxobj **transaction_tcvec(transaction_data td);
|
|||
size_t transaction_clen(transaction_data td);
|
||||
|
||||
int transaction_print(FILE *f, transaction_data th);
|
||||
int transaction_dbg(clicon_handle h, int dbglevel, transaction_data th, const char *msg);
|
||||
int transaction_log(clicon_handle h, transaction_data th, int level, const char *op);
|
||||
int transaction_dbg(clixon_handle h, int dbglevel, transaction_data th, const char *msg);
|
||||
int transaction_log(clixon_handle h, transaction_data th, int level, const char *op);
|
||||
|
||||
|
||||
/* Pagination callbacks
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_cli_api.h"
|
||||
|
|
@ -113,7 +113,7 @@ co2apipath(cg_obj *co)
|
|||
* code
|
||||
*/
|
||||
int
|
||||
cli_auto_edit(clicon_handle h,
|
||||
cli_auto_edit(clixon_handle h,
|
||||
cvec *cvv1,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -130,7 +130,7 @@ cli_auto_edit(clicon_handle h,
|
|||
char *mtpoint = NULL;
|
||||
|
||||
if (cvec_len(argv) != 2 && cvec_len(argv) != 3){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Usage: %s(api_path_fmt>*, <treename>)", __FUNCTION__);
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Usage: %s(api_path_fmt>*, <treename>)", __FUNCTION__);
|
||||
goto done;
|
||||
}
|
||||
api_path_fmt = cv_string_get(cvec_i(argv, argc++));
|
||||
|
|
@ -144,7 +144,7 @@ cli_auto_edit(clicon_handle h,
|
|||
treename = str;
|
||||
/* Find current cligen tree */
|
||||
if ((ph = cligen_ph_find(cli_cligen(h), treename)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "No such parsetree header: %s", treename);
|
||||
clixon_err(OE_PLUGIN, 0, "No such parsetree header: %s", treename);
|
||||
goto done;
|
||||
}
|
||||
/* Find the matching cligen object
|
||||
|
|
@ -156,19 +156,19 @@ cli_auto_edit(clicon_handle h,
|
|||
(coorig = co->co_ref) != NULL)
|
||||
cligen_ph_workpoint_set(ph, coorig);
|
||||
else {
|
||||
clicon_err(OE_YANG, EINVAL, "No workpoint found");
|
||||
clixon_err(OE_YANG, EINVAL, "No workpoint found");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else{
|
||||
clicon_err(OE_YANG, EINVAL, "No workpoint found");
|
||||
clixon_err(OE_YANG, EINVAL, "No workpoint found");
|
||||
goto done;
|
||||
}
|
||||
if ((cvv2 = cvec_append(clicon_data_cvec_get(h, "cli-edit-cvv"), cvv1)) == NULL)
|
||||
goto done;
|
||||
/* API_path format */
|
||||
if ((api_path_fmt = co2apipath(coorig)) == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "No apipath found");
|
||||
clixon_err(OE_YANG, EINVAL, "No apipath found");
|
||||
goto done;
|
||||
}
|
||||
/* get api-path and xpath */
|
||||
|
|
@ -180,7 +180,7 @@ cli_auto_edit(clicon_handle h,
|
|||
if (mtpoint){
|
||||
char *mtpoint2;
|
||||
if ((mtpoint2 = strdup(mtpoint)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_data_set(h, "cli-edit-mtpoint", mtpoint2) < 0)
|
||||
|
|
@ -191,7 +191,7 @@ cli_auto_edit(clicon_handle h,
|
|||
if (co->co_filter){
|
||||
cvec *cvv3;
|
||||
if ((cvv3 = cvec_dup(co->co_filter)) == NULL){
|
||||
clicon_err(OE_YANG, errno, "cvec_dup");
|
||||
clixon_err(OE_YANG, errno, "cvec_dup");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_data_cvec_set(h, "cli-edit-filter", cvv3) < 0)
|
||||
|
|
@ -215,7 +215,7 @@ cli_auto_edit(clicon_handle h,
|
|||
* <treename> Name of generated cligen parse-tree, eg "datamodel"
|
||||
*/
|
||||
int
|
||||
cli_auto_up(clicon_handle h,
|
||||
cli_auto_up(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -236,13 +236,13 @@ cli_auto_up(clicon_handle h,
|
|||
cvec *cvv_filter = NULL;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Usage: %s(<treename>)", __FUNCTION__);
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Usage: %s(<treename>)", __FUNCTION__);
|
||||
goto done;
|
||||
}
|
||||
cv = cvec_i(argv, 0);
|
||||
treename = cv_string_get(cv);
|
||||
if ((ph = cligen_ph_find(cli_cligen(h), treename)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "No such parsetree header: %s", treename);
|
||||
clixon_err(OE_PLUGIN, 0, "No such parsetree header: %s", treename);
|
||||
goto done;
|
||||
}
|
||||
if ((co0 = cligen_ph_workpoint_get(ph)) == NULL)
|
||||
|
|
@ -313,7 +313,7 @@ cli_auto_up(clicon_handle h,
|
|||
* <treename> Name of generated cligen parse-tree, eg "datamodel"
|
||||
*/
|
||||
int
|
||||
cli_auto_top(clicon_handle h,
|
||||
cli_auto_top(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -325,7 +325,7 @@ cli_auto_top(clicon_handle h,
|
|||
cv = cvec_i(argv, 0);
|
||||
treename = cv_string_get(cv);
|
||||
if ((ph = cligen_ph_find(cli_cligen(h), treename)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "No such parsetree header: %s", treename);
|
||||
clixon_err(OE_PLUGIN, 0, "No such parsetree header: %s", treename);
|
||||
goto done;
|
||||
}
|
||||
cligen_ph_workpoint_set(ph, NULL);
|
||||
|
|
@ -349,7 +349,7 @@ cli_auto_top(clicon_handle h,
|
|||
* <api-path-fmt> Generated
|
||||
*/
|
||||
int
|
||||
cli_auto_set(clicon_handle h,
|
||||
cli_auto_set(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -375,7 +375,7 @@ cli_auto_set(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_auto_merge(clicon_handle h,
|
||||
cli_auto_merge(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -401,7 +401,7 @@ cli_auto_merge(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_auto_create(clicon_handle h,
|
||||
cli_auto_create(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -427,7 +427,7 @@ cli_auto_create(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_auto_del(clicon_handle h,
|
||||
cli_auto_del(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -492,7 +492,7 @@ cli_auto_findpt(cg_obj *co,
|
|||
* @see cli_auto_edit
|
||||
*/
|
||||
int
|
||||
cli_auto_sub_enter(clicon_handle h,
|
||||
cli_auto_sub_enter(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -508,7 +508,7 @@ cli_auto_sub_enter(clicon_handle h,
|
|||
struct findpt_arg fa = {0,};
|
||||
|
||||
if (cvec_len(argv) < 2){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Usage: %s(<tree> <api_path_fmt> (,vars)*)", __FUNCTION__);
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Usage: %s(<tree> <api_path_fmt> (,vars)*)", __FUNCTION__);
|
||||
goto done;
|
||||
}
|
||||
/* First argv argument: treename */
|
||||
|
|
@ -527,7 +527,7 @@ cli_auto_sub_enter(clicon_handle h,
|
|||
*/
|
||||
/* Create a cvv with variables to add to api-path */
|
||||
if ((cvv1 = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
goto done;
|
||||
}
|
||||
/* Append static variables (skip first treename) */
|
||||
|
|
@ -552,7 +552,7 @@ cli_auto_sub_enter(clicon_handle h,
|
|||
goto done;
|
||||
/* Find current cligen tree */
|
||||
if ((ph = cligen_ph_find(cli_cligen(h), treename)) == NULL){
|
||||
clicon_err(OE_PLUGIN, ENOENT, "No such parsetree header: %s", treename);
|
||||
clixon_err(OE_PLUGIN, ENOENT, "No such parsetree header: %s", treename);
|
||||
goto done;
|
||||
}
|
||||
/* Find the point in the generated clispec tree where workpoint should be set */
|
||||
|
|
@ -560,7 +560,7 @@ cli_auto_sub_enter(clicon_handle h,
|
|||
if (pt_apply(cligen_ph_parsetree_get(ph), cli_auto_findpt, INT32_MAX, &fa) < 0)
|
||||
goto done;
|
||||
if (fa.fa_co == NULL){
|
||||
clicon_err(OE_PLUGIN, ENOENT, "No such cligen object found %s", api_path);
|
||||
clixon_err(OE_PLUGIN, ENOENT, "No such cligen object found %s", api_path);
|
||||
goto done;
|
||||
}
|
||||
cligen_ph_workpoint_set(ph, fa.fa_co);
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ autocli_listkw_int2str(int listkw)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
autocli_module(clicon_handle h,
|
||||
autocli_module(clixon_handle h,
|
||||
char *modname,
|
||||
int *enablep)
|
||||
{
|
||||
|
|
@ -124,7 +124,7 @@ autocli_module(clicon_handle h,
|
|||
char *body;
|
||||
|
||||
if (enablep == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
enable = 0;
|
||||
|
|
@ -132,7 +132,7 @@ autocli_module(clicon_handle h,
|
|||
goto ok;
|
||||
/* Default rule */
|
||||
if ((str = xml_find_body(xautocli, "module-default")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "No module-default rule");
|
||||
clixon_err(OE_XML, EINVAL, "No module-default rule");
|
||||
goto done;
|
||||
}
|
||||
enable = strcmp(str, "true") == 0;
|
||||
|
|
@ -243,7 +243,7 @@ The surrounding container entities are removed from list nodes.
|
|||
- Only one child + Child keyword is LIST
|
||||
*/
|
||||
int
|
||||
autocli_compress(clicon_handle h,
|
||||
autocli_compress(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int *compress)
|
||||
{
|
||||
|
|
@ -262,11 +262,11 @@ autocli_compress(clicon_handle h,
|
|||
char *body;
|
||||
|
||||
if (compress == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((xautocli = clicon_conf_autocli(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
clixon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
goto done;
|
||||
}
|
||||
ymod = ys_module(ys);
|
||||
|
|
@ -349,7 +349,7 @@ autocli_compress(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
autocli_completion(clicon_handle h,
|
||||
autocli_completion(clixon_handle h,
|
||||
int *completion)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -360,19 +360,19 @@ autocli_completion(clicon_handle h,
|
|||
cxobj *xautocli;
|
||||
|
||||
if (completion == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((xautocli = clicon_conf_autocli(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
clixon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
goto done;
|
||||
}
|
||||
if ((str = xml_find_body(xautocli, "completion-default")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "No completion-default rule");
|
||||
clixon_err(OE_XML, EINVAL, "No completion-default rule");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = parse_bool(str, &val, &reason)) < 0){
|
||||
clicon_err(OE_CFG, errno, "parse_bool");
|
||||
clixon_err(OE_CFG, errno, "parse_bool");
|
||||
goto done;
|
||||
}
|
||||
*completion = val;
|
||||
|
|
@ -392,7 +392,7 @@ autocli_completion(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
autocli_grouping_treeref(clicon_handle h,
|
||||
autocli_grouping_treeref(clixon_handle h,
|
||||
int *treeref)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -403,19 +403,19 @@ autocli_grouping_treeref(clicon_handle h,
|
|||
cxobj *xautocli;
|
||||
|
||||
if (treeref == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((xautocli = clicon_conf_autocli(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
clixon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
goto done;
|
||||
}
|
||||
if ((str = xml_find_body(xautocli, "grouping-treeref")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "No grouping-treeref rule");
|
||||
clixon_err(OE_XML, EINVAL, "No grouping-treeref rule");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = parse_bool(str, &val, &reason)) < 0){
|
||||
clicon_err(OE_CFG, errno, "parse_bool");
|
||||
clixon_err(OE_CFG, errno, "parse_bool");
|
||||
goto done;
|
||||
}
|
||||
*treeref = val;
|
||||
|
|
@ -435,7 +435,7 @@ autocli_grouping_treeref(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
autocli_list_keyword(clicon_handle h,
|
||||
autocli_list_keyword(clixon_handle h,
|
||||
autocli_listkw_t *listkw)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -443,15 +443,15 @@ autocli_list_keyword(clicon_handle h,
|
|||
cxobj *xautocli = NULL;
|
||||
|
||||
if (listkw == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((xautocli = clicon_conf_autocli(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
clixon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
goto done;
|
||||
}
|
||||
if ((str = xml_find_body(xautocli, "list-keyword-default")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "No list-keyword-default rule");
|
||||
clixon_err(OE_XML, EINVAL, "No list-keyword-default rule");
|
||||
goto done;
|
||||
}
|
||||
*listkw = autocli_listkw_str2int(str);
|
||||
|
|
@ -468,7 +468,7 @@ autocli_list_keyword(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
autocli_treeref_state(clicon_handle h,
|
||||
autocli_treeref_state(clixon_handle h,
|
||||
int *treeref_state)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -479,19 +479,19 @@ autocli_treeref_state(clicon_handle h,
|
|||
cxobj *xautocli;
|
||||
|
||||
if (treeref_state == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((xautocli = clicon_conf_autocli(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
clixon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
goto done;
|
||||
}
|
||||
if ((str = xml_find_body(xautocli, "treeref-state-default")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "No treeref-state-default rule");
|
||||
clixon_err(OE_XML, EINVAL, "No treeref-state-default rule");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = parse_bool(str, &val, &reason)) < 0){
|
||||
clicon_err(OE_CFG, errno, "parse_bool");
|
||||
clixon_err(OE_CFG, errno, "parse_bool");
|
||||
goto done;
|
||||
}
|
||||
*treeref_state = val;
|
||||
|
|
@ -512,7 +512,7 @@ autocli_treeref_state(clicon_handle h,
|
|||
* @note keyw is a sub/superset of RFC 6020, see clixon-autocli.yang on which are defined
|
||||
*/
|
||||
int
|
||||
autocli_edit_mode(clicon_handle h,
|
||||
autocli_edit_mode(clixon_handle h,
|
||||
char *keyw,
|
||||
int *flag)
|
||||
{
|
||||
|
|
@ -525,16 +525,16 @@ autocli_edit_mode(clicon_handle h,
|
|||
int i;
|
||||
|
||||
if (flag == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "Argument is NULL");
|
||||
goto done;
|
||||
}
|
||||
*flag = 0;
|
||||
if ((xautocli = clicon_conf_autocli(h)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
clixon_err(OE_YANG, 0, "No clixon-autocli");
|
||||
goto done;
|
||||
}
|
||||
if ((str = xml_find_body(xautocli, "edit-mode-default")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "No edit-mode-default rule");
|
||||
clixon_err(OE_XML, EINVAL, "No edit-mode-default rule");
|
||||
goto done;
|
||||
}
|
||||
if ((vec = clicon_strsep(str, " ", &nvec)) == NULL)
|
||||
|
|
|
|||
|
|
@ -50,12 +50,12 @@ enum autocli_op{
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int autocli_module(clicon_handle h, char *modname, int *enable);
|
||||
int autocli_completion(clicon_handle h, int *completion);
|
||||
int autocli_grouping_treeref(clicon_handle h, int *grouping_treeref);
|
||||
int autocli_list_keyword(clicon_handle h, autocli_listkw_t *listkw);
|
||||
int autocli_compress(clicon_handle h, yang_stmt *ys, int *compress);
|
||||
int autocli_treeref_state(clicon_handle h, int *treeref_state);
|
||||
int autocli_edit_mode(clicon_handle h, char *keyw, int *flag);
|
||||
int autocli_module(clixon_handle h, char *modname, int *enable);
|
||||
int autocli_completion(clixon_handle h, int *completion);
|
||||
int autocli_grouping_treeref(clixon_handle h, int *grouping_treeref);
|
||||
int autocli_list_keyword(clixon_handle h, autocli_listkw_t *listkw);
|
||||
int autocli_compress(clixon_handle h, yang_stmt *ys, int *compress);
|
||||
int autocli_treeref_state(clixon_handle h, int *treeref_state);
|
||||
int autocli_edit_mode(clixon_handle h, char *keyw, int *flag);
|
||||
|
||||
#endif /* _CLI_AUTOCLI_H_ */
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_cli_api.h"
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
* @note this calls cligen_regfd which may callback on cli command interpretator
|
||||
*/
|
||||
int
|
||||
cli_notification_register(clicon_handle h,
|
||||
cli_notification_register(clixon_handle h,
|
||||
char *stream,
|
||||
enum format_enum format,
|
||||
char *filter,
|
||||
|
|
@ -102,7 +102,7 @@ cli_notification_register(clicon_handle h,
|
|||
|
||||
len = strlen("log_socket_") + strlen(stream) + 1;
|
||||
if ((logname = malloc(len)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
snprintf(logname, len, "log_socket_%s", stream);
|
||||
|
|
@ -111,7 +111,7 @@ cli_notification_register(clicon_handle h,
|
|||
|
||||
if (status){ /* start */
|
||||
if (s_exist!=-1){
|
||||
clicon_err(OE_PLUGIN, 0, "Result log socket already exists");
|
||||
clixon_err(OE_PLUGIN, 0, "Result log socket already exists");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_rpc_create_subscription(h, stream, filter, &s) < 0)
|
||||
|
|
@ -142,7 +142,7 @@ cli_notification_register(clicon_handle h,
|
|||
* This is for CLIgen to handle these signals, eg ^Ĉ means abort command, not program
|
||||
*/
|
||||
void
|
||||
cli_signal_block(clicon_handle h)
|
||||
cli_signal_block(clixon_handle h)
|
||||
{
|
||||
clicon_signal_block (SIGTSTP);
|
||||
clicon_signal_block (SIGQUIT);
|
||||
|
|
@ -152,7 +152,7 @@ cli_signal_block(clicon_handle h)
|
|||
}
|
||||
|
||||
void
|
||||
cli_signal_unblock(clicon_handle h)
|
||||
cli_signal_unblock(clixon_handle h)
|
||||
{
|
||||
clicon_signal_unblock (SIGTSTP);
|
||||
clicon_signal_unblock (SIGQUIT);
|
||||
|
|
@ -164,7 +164,7 @@ cli_signal_unblock(clicon_handle h)
|
|||
* Flush pending signals for a given signal type
|
||||
*/
|
||||
void
|
||||
cli_signal_flush(clicon_handle h)
|
||||
cli_signal_flush(clixon_handle h)
|
||||
{
|
||||
/* XXX A bit rough. Use sigpending() and more clever logic ?? */
|
||||
|
||||
|
|
@ -207,7 +207,7 @@ dbxml_body(cxobj *xbot,
|
|||
len = cvec_len(cvv);
|
||||
cval = cvec_i(cvv, len-1);
|
||||
if ((str = cv2str_dup(cval)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cv2str_dup");
|
||||
clixon_err(OE_UNIX, errno, "cv2str_dup");
|
||||
goto done;
|
||||
}
|
||||
if ((xb = xml_new("body", xbot, CX_BODY)) == NULL)
|
||||
|
|
@ -307,25 +307,25 @@ mtpoint_paths(yang_stmt *yspec0,
|
|||
yang_stmt *yspec1;
|
||||
|
||||
if (api_path_fmt01 == NULL){
|
||||
clicon_err(OE_FATAL, EINVAL, "arg is NULL");
|
||||
clixon_err(OE_FATAL, EINVAL, "arg is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((xtop0 = xml_new(NETCONF_INPUT_CONFIG, NULL, CX_ELMNT)) == NULL)
|
||||
goto done;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (yang_path_arg(yspec0, mtpoint, &yu) < 0)
|
||||
goto done;
|
||||
if (yu == NULL){
|
||||
clicon_err(OE_FATAL, 0, "yu not found");
|
||||
clixon_err(OE_FATAL, 0, "yu not found");
|
||||
goto done;
|
||||
}
|
||||
if (yang_mount_get(yu, mtpoint, &yspec1) < 0)
|
||||
goto done;
|
||||
if (yspec1 == NULL){
|
||||
clicon_err(OE_FATAL, 0, "yspec1 not found");
|
||||
clixon_err(OE_FATAL, 0, "yspec1 not found");
|
||||
goto done;
|
||||
}
|
||||
xbot0 = xtop0;
|
||||
|
|
@ -334,18 +334,18 @@ mtpoint_paths(yang_stmt *yspec0,
|
|||
if ((ret = xpath2xml(mtpoint, nsc0, xtop0, yspec0, &xbot0, &ybot0, NULL)) < 0)
|
||||
goto done;
|
||||
if (xbot0 == NULL){
|
||||
clicon_err(OE_YANG, 0, "No xbot");
|
||||
clixon_err(OE_YANG, 0, "No xbot");
|
||||
goto done;
|
||||
}
|
||||
if (yang2api_path_fmt(ybot0, 0, &api_path_fmt0) < 0)
|
||||
goto done;
|
||||
if (api_path_fmt0 == NULL){
|
||||
clicon_err(OE_YANG, 0, "No api_path_fmt0");
|
||||
clixon_err(OE_YANG, 0, "No api_path_fmt0");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "%s%s", api_path_fmt0, api_path_fmt1);
|
||||
if ((*api_path_fmt01 = strdup(cbuf_get(cb))) == NULL){
|
||||
clicon_err(OE_YANG, errno, "strdup");
|
||||
clixon_err(OE_YANG, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -386,7 +386,7 @@ mtpoint_paths(yang_stmt *yspec0,
|
|||
* generated by a function such as clixon_instance_id_bind() or other programmatically.
|
||||
*/
|
||||
int
|
||||
cli_dbxml(clicon_handle h,
|
||||
cli_dbxml(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv,
|
||||
enum operation_type op,
|
||||
|
|
@ -412,11 +412,11 @@ cli_dbxml(clicon_handle h,
|
|||
|
||||
/* Top-level yspec */
|
||||
if ((yspec0 = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if ((api_path_fmt_cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Concatenate all argv strings to a single string */
|
||||
|
|
@ -428,7 +428,7 @@ cli_dbxml(clicon_handle h,
|
|||
cv = cvec_i(argv, argc++);
|
||||
str = cv_string_get(cv);
|
||||
if (strncmp(str, "mtpoint:", strlen("mtpoint:")) != 0){
|
||||
clicon_err(OE_PLUGIN, 0, "mtpoint does not begin with 'mtpoint:'");
|
||||
clixon_err(OE_PLUGIN, 0, "mtpoint does not begin with 'mtpoint:'");
|
||||
goto done;
|
||||
}
|
||||
mtpoint = str + strlen("mtpoint:");
|
||||
|
|
@ -463,13 +463,12 @@ cli_dbxml(clicon_handle h,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "api-path syntax error \"%s\": ", api_path_fmt);
|
||||
if (netconf_err2cb(h, xerr, cb) < 0)
|
||||
goto done;
|
||||
clicon_err(OE_CFG, EINVAL, "%s", cbuf_get(cb));
|
||||
clixon_err(OE_CFG, EINVAL, "api-path syntax error \"%s\": %s", api_path_fmt, cbuf_get(cb));
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -504,7 +503,7 @@ cli_dbxml(clicon_handle h,
|
|||
if ((ret = xml_apply0(xbot, CX_ELMNT, identityref_add_ns, yspec0)) < 0)
|
||||
goto done;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cb, xtop, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -537,7 +536,7 @@ cli_dbxml(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_set(clicon_handle h,
|
||||
cli_set(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -559,7 +558,7 @@ cli_set(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_merge(clicon_handle h,
|
||||
cli_merge(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -581,7 +580,7 @@ cli_merge(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_create(clicon_handle h,
|
||||
cli_create(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -604,7 +603,7 @@ cli_create(clicon_handle h,
|
|||
* @see cli_del
|
||||
*/
|
||||
int
|
||||
cli_remove(clicon_handle h,
|
||||
cli_remove(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -626,7 +625,7 @@ cli_remove(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_del(clicon_handle h,
|
||||
cli_del(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -650,7 +649,7 @@ cli_del(clicon_handle h,
|
|||
* _or_ if a 'level' variable is present in cvv use that value instead.
|
||||
*/
|
||||
int
|
||||
cli_debug_cli(clicon_handle h,
|
||||
cli_debug_cli(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -660,14 +659,14 @@ cli_debug_cli(clicon_handle h,
|
|||
|
||||
if ((cv = cvec_find_var(cvv, "level")) == NULL){
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires either label var or single arg: 0|1");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires either label var or single arg: 0|1");
|
||||
goto done;
|
||||
}
|
||||
cv = cvec_i(argv, 0);
|
||||
}
|
||||
level = cv_int32_get(cv);
|
||||
/* cli */
|
||||
clixon_debug_init(level, NULL); /* 0: dont debug, 1:debug */
|
||||
clixon_debug_init(h, level); /* 0: dont debug, 1:debug */
|
||||
retval = 0;
|
||||
done:
|
||||
return retval;
|
||||
|
|
@ -684,7 +683,7 @@ cli_debug_cli(clicon_handle h,
|
|||
* _or_ if a 'level' variable is present in cvv use that value instead.
|
||||
*/
|
||||
int
|
||||
cli_debug_backend(clicon_handle h,
|
||||
cli_debug_backend(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -694,7 +693,7 @@ cli_debug_backend(clicon_handle h,
|
|||
|
||||
if ((cv = cvec_find_var(cvv, "level")) == NULL){
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires either label var or single arg: 0|1");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires either label var or single arg: 0|1");
|
||||
goto done;
|
||||
}
|
||||
cv = cvec_i(argv, 0);
|
||||
|
|
@ -721,7 +720,7 @@ cli_debug_backend(clicon_handle h,
|
|||
* 3 CLICON_BACKEND_RESTCONF_PROCESS is true (so that backend restarts restconf)
|
||||
*/
|
||||
int
|
||||
cli_debug_restconf(clicon_handle h,
|
||||
cli_debug_restconf(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -731,7 +730,7 @@ cli_debug_restconf(clicon_handle h,
|
|||
|
||||
if ((cv = cvec_find_var(cvv, "level")) == NULL){
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires either label var or single arg: 0|1");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires either label var or single arg: 0|1");
|
||||
goto done;
|
||||
}
|
||||
cv = cvec_i(argv, 0);
|
||||
|
|
@ -753,7 +752,7 @@ cli_debug_restconf(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_set_mode(clicon_handle h,
|
||||
cli_set_mode(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -761,7 +760,7 @@ cli_set_mode(clicon_handle h,
|
|||
char *str = NULL;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires one element to be cli mode");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires one element to be cli mode");
|
||||
goto done;
|
||||
}
|
||||
str = cv_string_get(cvec_i(argv, 0));
|
||||
|
|
@ -781,7 +780,7 @@ cli_set_mode(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_start_shell(clicon_handle h,
|
||||
cli_start_shell(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -795,7 +794,7 @@ cli_start_shell(clicon_handle h,
|
|||
struct sigaction oldsigaction[32] = {{{0,},},};
|
||||
|
||||
if (cvec_len(argv) > 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: [<shell>]",
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: [<shell>]",
|
||||
cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -804,11 +803,11 @@ cli_start_shell(clicon_handle h,
|
|||
}
|
||||
cmd = (cvec_len(cvv)>1 ? cv_string_get(cv1) : NULL);
|
||||
if ((pw = getpwuid(getuid())) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "getpwuid");
|
||||
clixon_err(OE_UNIX, errno, "getpwuid");
|
||||
goto done;
|
||||
}
|
||||
if (chdir(pw->pw_dir) < 0){
|
||||
clicon_err(OE_UNIX, errno, "chdir");
|
||||
clixon_err(OE_UNIX, errno, "chdir");
|
||||
endpwent();
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -822,7 +821,7 @@ cli_start_shell(clicon_handle h,
|
|||
snprintf(bcmd, 128, "%s -c \"%s\"", shcmd, cmd);
|
||||
if (system(bcmd) < 0){
|
||||
cli_signal_block(h);
|
||||
clicon_err(OE_UNIX, errno, "system(bash -c)");
|
||||
clixon_err(OE_UNIX, errno, "system(bash -c)");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -830,14 +829,14 @@ cli_start_shell(clicon_handle h,
|
|||
snprintf(bcmd, 128, "%s ", shcmd); /* -l (login shell) but is applicable to bash only */
|
||||
if (system(bcmd) < 0){
|
||||
cli_signal_block(h);
|
||||
clicon_err(OE_UNIX, errno, "system(bash)");
|
||||
clixon_err(OE_UNIX, errno, "system(bash)");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
cli_signal_block(h);
|
||||
#if 0 /* Allow errcodes from bash */
|
||||
if (retval != 0){
|
||||
clicon_err(OE_UNIX, errno, "system(%s) %d", cmd, retval);
|
||||
clixon_err(OE_UNIX, errno, "system(%s) %d", cmd, retval);
|
||||
goto done;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -857,7 +856,7 @@ cli_start_shell(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_quit(clicon_handle h,
|
||||
cli_quit(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -874,7 +873,7 @@ cli_quit(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_commit(clicon_handle h,
|
||||
cli_commit(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -909,7 +908,7 @@ cli_commit(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_validate(clicon_handle h,
|
||||
cli_validate(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -932,7 +931,7 @@ cli_validate(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
compare_db_names(clicon_handle h,
|
||||
compare_db_names(clixon_handle h,
|
||||
enum format_enum format,
|
||||
char *db1,
|
||||
char *db2)
|
||||
|
|
@ -946,13 +945,23 @@ compare_db_names(clicon_handle h,
|
|||
if (clicon_rpc_get_config(h, NULL, db1, "/", NULL, NULL, &xc1) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xc1, NULL, "/rpc-error")) != NULL){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
if (clicon_rpc_get_config(h, NULL, db2, "/", NULL, NULL, &xc2) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xc2, NULL, "/rpc-error")) != NULL){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
/* Note that XML and TEXT uses a (new) structured in-mem algorithm while
|
||||
|
|
@ -961,7 +970,7 @@ compare_db_names(clicon_handle h,
|
|||
switch (format){
|
||||
case FORMAT_XML:
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml_diff2cbuf(cb, xc1, xc2) < 0)
|
||||
|
|
@ -970,7 +979,7 @@ compare_db_names(clicon_handle h,
|
|||
break;
|
||||
case FORMAT_TEXT:
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_text_diff2cbuf(cb, xc1, xc2) < 0)
|
||||
|
|
@ -1004,7 +1013,7 @@ compare_db_names(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
compare_dbs(clicon_handle h,
|
||||
compare_dbs(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1015,14 +1024,14 @@ compare_dbs(clicon_handle h,
|
|||
char *formatstr;
|
||||
|
||||
if (cvec_len(argv) != 3){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Expected arguments: <db1> <db2> <format>");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Expected arguments: <db1> <db2> <format>");
|
||||
goto done;
|
||||
}
|
||||
db1 = cv_string_get(cvec_i(argv, 0));
|
||||
db2 = cv_string_get(cvec_i(argv, 1));
|
||||
formatstr = cv_string_get(cvec_i(argv, 2));
|
||||
if ((format = format_str2int(formatstr)) < 0){
|
||||
clicon_err(OE_XML, 0, "format not found %s", formatstr);
|
||||
clixon_err(OE_XML, 0, "format not found %s", formatstr);
|
||||
goto done;
|
||||
}
|
||||
if (compare_db_names(h, format, db1, db2) < 0)
|
||||
|
|
@ -1054,7 +1063,7 @@ compare_dbs(clicon_handle h,
|
|||
* @see save_config_file
|
||||
*/
|
||||
int
|
||||
load_config_file(clicon_handle h,
|
||||
load_config_file(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1076,18 +1085,18 @@ load_config_file(clicon_handle h,
|
|||
char *lineptr = NULL;
|
||||
|
||||
if (cvec_len(argv) < 2 || cvec_len(argv) > 4){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <dbname>,<varname>[,<format>]",
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <dbname>,<varname>[,<format>]",
|
||||
cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if (cvec_len(argv) > 2){
|
||||
formatstr = cv_string_get(cvec_i(argv, 2));
|
||||
if ((int)(format = format_str2int(formatstr)) < 0){
|
||||
clicon_err(OE_PLUGIN, 0, "Not valid format: %s", formatstr);
|
||||
clixon_err(OE_PLUGIN, 0, "Not valid format: %s", formatstr);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1098,21 +1107,21 @@ load_config_file(clicon_handle h,
|
|||
else if (strcmp(opstr, "replace") == 0)
|
||||
replace = 1;
|
||||
else{
|
||||
clicon_err(OE_PLUGIN, 0, "No such op: %s, expected merge or replace", opstr);
|
||||
clixon_err(OE_PLUGIN, 0, "No such op: %s, expected merge or replace", opstr);
|
||||
goto done;
|
||||
}
|
||||
if ((cv = cvec_find(cvv, varstr)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "No such var name: %s", varstr);
|
||||
clixon_err(OE_PLUGIN, 0, "No such var name: %s", varstr);
|
||||
goto done;
|
||||
}
|
||||
filename = cv_string_get(cv);
|
||||
if (stat(filename, &st) < 0){
|
||||
clicon_err(OE_UNIX, errno, "load_config: stat(%s)", filename);
|
||||
clixon_err(OE_UNIX, errno, "load_config: stat(%s)", filename);
|
||||
goto done;
|
||||
}
|
||||
/* Open and parse local file into xml */
|
||||
if ((fp = fopen(filename, "r")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "fopen(%s)", filename);
|
||||
clixon_err(OE_UNIX, errno, "fopen(%s)", filename);
|
||||
goto done;
|
||||
}
|
||||
switch (format){
|
||||
|
|
@ -1120,7 +1129,12 @@ load_config_file(clicon_handle h,
|
|||
if ((ret = clixon_xml_parse_file(fp, YB_NONE, yspec, &xt, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Loading %s", filename) < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Loading", filename);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1128,7 +1142,12 @@ load_config_file(clicon_handle h,
|
|||
if ((ret = clixon_json_parse_file(fp, 1, YB_NONE, yspec, &xt, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Loading %s", filename) < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Loading", filename);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1139,7 +1158,12 @@ load_config_file(clicon_handle h,
|
|||
if ((ret = clixon_text_syntax_parse_file(fp, YB_MODULE_NEXT, yspec, &xt, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Loading %s", filename) < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Loading", filename);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1154,7 +1178,7 @@ load_config_file(clicon_handle h,
|
|||
lineptr = NULL; n = 0;
|
||||
if (getline(&lineptr, &n, fp) < 0){
|
||||
if (errno){
|
||||
clicon_err(OE_UNIX, errno, "getline");
|
||||
clixon_err(OE_UNIX, errno, "getline");
|
||||
goto done;
|
||||
}
|
||||
goto ok; /* eof, skip backend rpc since this is done by cli code */
|
||||
|
|
@ -1173,16 +1197,18 @@ load_config_file(clicon_handle h,
|
|||
break;
|
||||
}
|
||||
default:
|
||||
clicon_err(OE_PLUGIN, 0, "format: %s not implemented", formatstr);
|
||||
clixon_err(OE_PLUGIN, 0, "format: %s not implemented", formatstr);
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
if (xt == NULL)
|
||||
goto done;
|
||||
if ((cbxml = cbuf_new()) == NULL)
|
||||
if ((cbxml = cbuf_new()) == NULL){
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
x = NULL;
|
||||
while ((x = xml_child_each(xt, x, -1)) != NULL) {
|
||||
while ((x = xml_child_each(xt, x, CX_ELMNT)) != NULL) {
|
||||
/* Read as datastore-top but transformed into an edit-config "config" */
|
||||
xml_name_set(x, NETCONF_INPUT_CONFIG);
|
||||
}
|
||||
|
|
@ -1228,7 +1254,7 @@ load_config_file(clicon_handle h,
|
|||
* @see load_config_file
|
||||
*/
|
||||
int
|
||||
save_config_file(clicon_handle h,
|
||||
save_config_file(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1246,14 +1272,14 @@ save_config_file(clicon_handle h,
|
|||
int pretty = 1; /* XXX hardcoded */
|
||||
|
||||
if (cvec_len(argv) < 2 || cvec_len(argv) > 4){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <dbname>,<varname>[,<format>]",
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <dbname>,<varname>[,<format>]",
|
||||
cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if (cvec_len(argv) > 2){
|
||||
formatstr = cv_string_get(cvec_i(argv, 2));
|
||||
if ((int)(format = format_str2int(formatstr)) < 0){
|
||||
clicon_err(OE_PLUGIN, 0, "Not valid format: %s", formatstr);
|
||||
clixon_err(OE_PLUGIN, 0, "Not valid format: %s", formatstr);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1261,23 +1287,28 @@ save_config_file(clicon_handle h,
|
|||
if (strcmp(dbstr, "running") != 0 &&
|
||||
strcmp(dbstr, "candidate") != 0 &&
|
||||
strcmp(dbstr, "startup") != 0) {
|
||||
clicon_err(OE_PLUGIN, 0, "No such db name: %s", dbstr);
|
||||
clixon_err(OE_PLUGIN, 0, "No such db name: %s", dbstr);
|
||||
goto done;
|
||||
}
|
||||
varstr = cv_string_get(cvec_i(argv, 1));
|
||||
if ((cv = cvec_find(cvv, varstr)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "No such var name: %s", varstr);
|
||||
clixon_err(OE_PLUGIN, 0, "No such var name: %s", varstr);
|
||||
goto done;
|
||||
}
|
||||
filename = cv_string_get(cv);
|
||||
if (clicon_rpc_get_config(h, NULL, dbstr,"/", NULL, NULL, &xt) < 0)
|
||||
goto done;
|
||||
if (xt == NULL){
|
||||
clicon_err(OE_CFG, 0, "get config: empty tree"); /* Shouldnt happen */
|
||||
clixon_err(OE_CFG, 0, "get config: empty tree"); /* Shouldnt happen */
|
||||
goto done;
|
||||
}
|
||||
if ((xerr = xpath_first(xt, NULL, "/rpc-error")) != NULL){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
/* get-config returns a <data> tree. Save as <config> tree so it can be used
|
||||
|
|
@ -1286,7 +1317,7 @@ save_config_file(clicon_handle h,
|
|||
if (xml_name_set(xt, DATASTORE_TOP_SYMBOL) < 0)
|
||||
goto done;
|
||||
if ((f = fopen(filename, "w")) == NULL){
|
||||
clicon_err(OE_CFG, errno, "Creating file %s", filename);
|
||||
clixon_err(OE_CFG, errno, "Creating file %s", filename);
|
||||
goto done;
|
||||
}
|
||||
switch (format){
|
||||
|
|
@ -1335,7 +1366,7 @@ save_config_file(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
delete_all(clicon_handle h,
|
||||
delete_all(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1343,14 +1374,14 @@ delete_all(clicon_handle h,
|
|||
int retval = -1;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires one element: dbname");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires one element: dbname");
|
||||
goto done;
|
||||
}
|
||||
dbstr = cv_string_get(cvec_i(argv, 0));
|
||||
if (strcmp(dbstr, "running") != 0 &&
|
||||
strcmp(dbstr, "candidate") != 0 &&
|
||||
strcmp(dbstr, "startup") != 0){
|
||||
clicon_err(OE_PLUGIN, 0, "No such db name: %s", dbstr);
|
||||
clixon_err(OE_PLUGIN, 0, "No such db name: %s", dbstr);
|
||||
goto done;
|
||||
}
|
||||
if (clicon_rpc_delete_config(h, dbstr) < 0)
|
||||
|
|
@ -1363,7 +1394,7 @@ delete_all(clicon_handle h,
|
|||
/*! Discard all changes in candidate and replace with running
|
||||
*/
|
||||
int
|
||||
discard_changes(clicon_handle h,
|
||||
discard_changes(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1377,7 +1408,7 @@ discard_changes(clicon_handle h,
|
|||
* @retval -1 Error and logged to syslog
|
||||
*/
|
||||
int
|
||||
db_copy(clicon_handle h,
|
||||
db_copy(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1411,7 +1442,7 @@ cli_notification_cb(int s,
|
|||
if (clicon_msg_rcv(s, NULL, 0, &reply, &eof) < 0)
|
||||
goto done;
|
||||
if (eof){
|
||||
clicon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
clixon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
close(s);
|
||||
errno = ESHUTDOWN;
|
||||
clixon_event_unreg_fd(s, cli_notification_cb);
|
||||
|
|
@ -1421,7 +1452,7 @@ cli_notification_cb(int s,
|
|||
if ((ret = clicon_msg_decode(reply, NULL, NULL, &xt, NULL)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){ /* will not happen since no yspec ^*/
|
||||
clicon_err(OE_NETCONF, EFAULT, "Notification malformed");
|
||||
clixon_err(OE_NETCONF, EFAULT, "Notification malformed");
|
||||
goto done;
|
||||
}
|
||||
switch (format){
|
||||
|
|
@ -1464,7 +1495,7 @@ cli_notification_cb(int s,
|
|||
* XXX: format is a memory leak
|
||||
*/
|
||||
int
|
||||
cli_notify(clicon_handle h,
|
||||
cli_notify(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1475,7 +1506,7 @@ cli_notify(clicon_handle h,
|
|||
enum format_enum format = FORMAT_TEXT;
|
||||
|
||||
if (cvec_len(argv) != 2 && cvec_len(argv) != 3){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires arguments: <logstream> <status> [<format>]");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires arguments: <logstream> <status> [<format>]");
|
||||
goto done;
|
||||
}
|
||||
stream = cv_string_get(cvec_i(argv, 0));
|
||||
|
|
@ -1511,7 +1542,7 @@ cli_notify(clicon_handle h,
|
|||
* XXX: format is a memory leak
|
||||
*/
|
||||
int
|
||||
cli_lock(clicon_handle h,
|
||||
cli_lock(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1519,7 +1550,7 @@ cli_lock(clicon_handle h,
|
|||
char *db;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires arguments: <db>");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires arguments: <db>");
|
||||
goto done;
|
||||
}
|
||||
db = cv_string_get(cvec_i(argv, 0));
|
||||
|
|
@ -1543,7 +1574,7 @@ cli_lock(clicon_handle h,
|
|||
* XXX: format is a memory leak
|
||||
*/
|
||||
int
|
||||
cli_unlock(clicon_handle h,
|
||||
cli_unlock(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1551,7 +1582,7 @@ cli_unlock(clicon_handle h,
|
|||
char *db;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires arguments: <db>");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires arguments: <db>");
|
||||
goto done;
|
||||
}
|
||||
db = cv_string_get(cvec_i(argv, 0));
|
||||
|
|
@ -1589,7 +1620,7 @@ cli_unlock(clicon_handle h,
|
|||
* @endcode
|
||||
*/
|
||||
int
|
||||
cli_copy_config(clicon_handle h,
|
||||
cli_copy_config(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1615,7 +1646,7 @@ cli_copy_config(clicon_handle h,
|
|||
size_t len;
|
||||
|
||||
if (cvec_len(argv) != 6){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires 6 elements: <db> <xpath> <namespace> <keyname> <from> <to>");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires 6 elements: <db> <xpath> <namespace> <keyname> <from> <to>");
|
||||
goto done;
|
||||
}
|
||||
/* First argv argument: Database */
|
||||
|
|
@ -1633,14 +1664,14 @@ cli_copy_config(clicon_handle h,
|
|||
|
||||
/* Get from variable -> cv -> from name */
|
||||
if ((fromcv = cvec_find(cvv, fromvar)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "fromvar '%s' not found in cligen var list", fromvar);
|
||||
clixon_err(OE_PLUGIN, 0, "fromvar '%s' not found in cligen var list", fromvar);
|
||||
goto done;
|
||||
}
|
||||
/* Get from name from cv */
|
||||
fromname = cv_string_get(fromcv);
|
||||
/* Create xpath */
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Sanity check that xpath contains exactly two %s, ie [%s='%s'] */
|
||||
|
|
@ -1651,7 +1682,7 @@ cli_copy_config(clicon_handle h,
|
|||
j++;
|
||||
}
|
||||
if (j != 2){
|
||||
clicon_err(OE_PLUGIN, 0, "xpath '%s' does not have two '%%'", xpath);
|
||||
clixon_err(OE_PLUGIN, 0, "xpath '%s' does not have two '%%'", xpath);
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, xpath, keyname, fromname);
|
||||
|
|
@ -1661,13 +1692,18 @@ cli_copy_config(clicon_handle h,
|
|||
if (clicon_rpc_get_config(h, NULL, db, cbuf_get(cb), nsc, NULL, &x1) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(x1, NULL, "/rpc-error")) != NULL){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Get to variable -> cv -> to name */
|
||||
if ((tocv = cvec_find(cvv, tovar)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "tovar '%s' not found in cligen var list", tovar);
|
||||
clixon_err(OE_PLUGIN, 0, "tovar '%s' not found in cligen var list", tovar);
|
||||
goto done;
|
||||
}
|
||||
toname = cv_string_get(tocv);
|
||||
|
|
@ -1679,7 +1715,7 @@ cli_copy_config(clicon_handle h,
|
|||
xml_name_set(x2, NETCONF_INPUT_CONFIG);
|
||||
cprintf(cb, "/%s", keyname);
|
||||
if ((x = xpath_first(x2, nsc, "%s", cbuf_get(cb))) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "Field %s not found in copy tree", keyname);
|
||||
clixon_err(OE_PLUGIN, 0, "Field %s not found in copy tree", keyname);
|
||||
goto done;
|
||||
}
|
||||
x = xml_find(x, "body");
|
||||
|
|
@ -1713,7 +1749,7 @@ cli_copy_config(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_help(clicon_handle h,
|
||||
cli_help(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1736,7 +1772,7 @@ cli_help(clicon_handle h,
|
|||
* @endcode
|
||||
*/
|
||||
int
|
||||
cli_restart_plugin(clicon_handle h,
|
||||
cli_restart_plugin(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1746,7 +1782,7 @@ cli_restart_plugin(clicon_handle h,
|
|||
|
||||
if ((cv = cvec_find_var(cvv, "plugin")) == NULL){
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires plugin variable");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires plugin variable");
|
||||
goto done;
|
||||
}
|
||||
cv = cvec_i(argv, 0);
|
||||
|
|
@ -1770,13 +1806,13 @@ cvec_append(cvec *cvv0,
|
|||
|
||||
if (cvv0 == NULL){
|
||||
if ((cvv2 = cvec_dup(cvv1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if ((cvv2 = cvec_dup(cvv0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
return NULL;
|
||||
}
|
||||
cv = NULL; /* Append cvv1 to cvv2 */
|
||||
|
|
@ -1804,7 +1840,7 @@ cvec_concat_cb(cvec *cvv,
|
|||
int i;
|
||||
|
||||
if (cb == NULL){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "cb is NULL");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "cb is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* Iterate through all api_path_fmt:s, assume they start with / */
|
||||
|
|
@ -1838,7 +1874,7 @@ cvec_concat_cb(cvec *cvv,
|
|||
* @endcode
|
||||
*/
|
||||
int
|
||||
cli_process_control(clicon_handle h,
|
||||
cli_process_control(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1850,17 +1886,17 @@ cli_process_control(clicon_handle h,
|
|||
cxobj *xerr;
|
||||
|
||||
if (cvec_len(argv) != 2){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires two element: process name and operation");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires two element: process name and operation");
|
||||
goto done;
|
||||
}
|
||||
name = cv_string_get(cvec_i(argv, 0));
|
||||
opstr = cv_string_get(cvec_i(argv, 1));
|
||||
if (clixon_process_op_str2int(opstr) == -1){
|
||||
clicon_err(OE_UNIX, 0, "No such process op: %s", opstr);
|
||||
clixon_err(OE_UNIX, 0, "No such process op: %s", opstr);
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<rpc xmlns=\"%s\"", NETCONF_BASE_NAMESPACE);
|
||||
|
|
@ -1874,7 +1910,7 @@ cli_process_control(clicon_handle h,
|
|||
if (clicon_rpc_netconf(h, cbuf_get(cb), &xret, NULL) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xret, NULL, "//rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2file(stdout, xml_child_i(xret, 0), 0, 1, NULL, cligen_output, 0, 1) < 0)
|
||||
|
|
|
|||
|
|
@ -39,8 +39,8 @@
|
|||
#ifndef _CLI_COMMON_H_
|
||||
#define _CLI_COMMON_H_
|
||||
|
||||
void cli_signal_block(clicon_handle h);
|
||||
void cli_signal_unblock(clicon_handle h);
|
||||
void cli_signal_block(clixon_handle h);
|
||||
void cli_signal_unblock(clixon_handle h);
|
||||
int mtpoint_paths(yang_stmt *yspec0, char *mtpoint, char *api_path_fmt1, char **api_path_fmt01);
|
||||
cvec *cvec_append(cvec *cvv0, cvec *cvv1);
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ You can see which CLISPEC it generates via clixon_cli -D 2:
|
|||
* @note XXX only fraction_digits handled,should also have mincv, maxcv, pattern
|
||||
*/
|
||||
static int
|
||||
cli_expand_var_generate(clicon_handle h,
|
||||
cli_expand_var_generate(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
const char *cvtypestr,
|
||||
int options,
|
||||
|
|
@ -177,7 +177,7 @@ cli_expand_var_generate(clicon_handle h,
|
|||
* @see pt_callback_reference in CLIgen where the actual callback overwrites the template
|
||||
*/
|
||||
static int
|
||||
cli_callback_generate(clicon_handle h,
|
||||
cli_callback_generate(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
cbuf *cb)
|
||||
{
|
||||
|
|
@ -396,7 +396,7 @@ yang2cli_var_range(yang_stmt *ys,
|
|||
* @note for cligen, need to escape " -> \"
|
||||
*/
|
||||
static int
|
||||
yang2cli_var_pattern(clicon_handle h,
|
||||
yang2cli_var_pattern(clixon_handle h,
|
||||
cvec *patterns,
|
||||
cbuf *cb)
|
||||
{
|
||||
|
|
@ -446,9 +446,9 @@ yang2cli_var_pattern(clicon_handle h,
|
|||
}
|
||||
|
||||
/* Forward */
|
||||
static int yang2cli_stmt(clicon_handle h, yang_stmt *ys, int level, cbuf *cb);
|
||||
static int yang2cli_stmt(clixon_handle h, yang_stmt *ys, int level, cbuf *cb);
|
||||
|
||||
static int yang2cli_var_union(clicon_handle h, yang_stmt *ys, char *origtype,
|
||||
static int yang2cli_var_union(clixon_handle h, yang_stmt *ys, char *origtype,
|
||||
yang_stmt *ytype, char *helptext, cbuf *cb);
|
||||
|
||||
/*! Generate CLI code for Yang leaf state ment to CLIgen variable of specific type
|
||||
|
|
@ -470,7 +470,7 @@ static int yang2cli_var_union(clicon_handle h, yang_stmt *ys, char *origtype,
|
|||
* @see yang_type_resolve for options and other arguments
|
||||
*/
|
||||
static int
|
||||
yang2cli_var_sub(clicon_handle h,
|
||||
yang2cli_var_sub(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
yang_stmt *ytype, /* resolved type */
|
||||
char *helptext,
|
||||
|
|
@ -560,7 +560,7 @@ yang2cli_var_sub(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang2cli_var_union_one(clicon_handle h,
|
||||
yang2cli_var_union_one(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
char *origtype,
|
||||
yang_stmt *ytsub,
|
||||
|
|
@ -577,7 +577,7 @@ yang2cli_var_union_one(clicon_handle h,
|
|||
char *restype;
|
||||
|
||||
if ((patterns = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
goto done;
|
||||
}
|
||||
/* Resolve the sub-union type to a resolved type */
|
||||
|
|
@ -586,7 +586,7 @@ yang2cli_var_union_one(clicon_handle h,
|
|||
&cvv, patterns, NULL, &fraction_digits) < 0)
|
||||
goto done;
|
||||
if (ytype == NULL){
|
||||
clicon_err(OE_YANG, 0, "result-type should not be NULL");
|
||||
clixon_err(OE_YANG, 0, "result-type should not be NULL");
|
||||
goto done;
|
||||
}
|
||||
restype = ytype?yang_argument_get(ytype):NULL;
|
||||
|
|
@ -623,7 +623,7 @@ yang2cli_var_union_one(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang2cli_var_union(clicon_handle h,
|
||||
yang2cli_var_union(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
char *origtype,
|
||||
yang_stmt *ytype,
|
||||
|
|
@ -653,7 +653,7 @@ yang2cli_var_union(clicon_handle h,
|
|||
}
|
||||
|
||||
static int
|
||||
yang2cli_var_leafref(clicon_handle h,
|
||||
yang2cli_var_leafref(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
yang_stmt *yrestype,
|
||||
char *helptext,
|
||||
|
|
@ -729,7 +729,7 @@ yang2cli_var_leafref(clicon_handle h,
|
|||
* and thus its type.
|
||||
*/
|
||||
static int
|
||||
yang2cli_var(clicon_handle h,
|
||||
yang2cli_var(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
yang_stmt *yreferred,
|
||||
char *helptext,
|
||||
|
|
@ -749,7 +749,7 @@ yang2cli_var(clicon_handle h,
|
|||
int ret;
|
||||
|
||||
if ((patterns = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
goto done;
|
||||
}
|
||||
if (yang_type_get(yreferred, &origtype, &yrestype,
|
||||
|
|
@ -785,11 +785,11 @@ yang2cli_var(clicon_handle h,
|
|||
yang_stmt *yref = NULL;
|
||||
|
||||
if ((ypath = yang_find(yrestype, Y_PATH, NULL)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No Y_PATH for leafref");
|
||||
clixon_err(OE_YANG, 0, "No Y_PATH for leafref");
|
||||
goto done;
|
||||
}
|
||||
if ((path_arg = yang_argument_get(ypath)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No argument for Y_PATH");
|
||||
clixon_err(OE_YANG, 0, "No argument for Y_PATH");
|
||||
goto done;
|
||||
}
|
||||
if (yang_path_arg(yreferred, path_arg, &yref) < 0)
|
||||
|
|
@ -803,7 +803,7 @@ yang2cli_var(clicon_handle h,
|
|||
}
|
||||
else {
|
||||
if (yreferred == yref){
|
||||
clicon_err(OE_YANG, 0, "Referred YANG node for leafref path %s points to self", path_arg);
|
||||
clixon_err(OE_YANG, 0, "Referred YANG node for leafref path %s points to self", path_arg);
|
||||
goto done;
|
||||
}
|
||||
/* recurse call with new referred node */
|
||||
|
|
@ -841,7 +841,7 @@ yang2cli_var(clicon_handle h,
|
|||
* + if callbacks add: cb();{}
|
||||
*/
|
||||
static int
|
||||
yang2cli_leaf(clicon_handle h,
|
||||
yang2cli_leaf(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int level,
|
||||
int callback,
|
||||
|
|
@ -860,7 +860,7 @@ yang2cli_leaf(clicon_handle h,
|
|||
/* description */
|
||||
if ((yd = yang_find(ys, Y_DESCRIPTION, NULL)) != NULL){
|
||||
if ((helptext = strdup(yang_argument_get(yd))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
if ((s = strstr(helptext, "\n\n")) != NULL)
|
||||
|
|
@ -941,7 +941,7 @@ yang2cli_leaf(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang2cli_container(clicon_handle h,
|
||||
yang2cli_container(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int level,
|
||||
cbuf *cb)
|
||||
|
|
@ -968,7 +968,7 @@ yang2cli_container(clicon_handle h,
|
|||
cprintf(cb, "%*s%s", level*3, "", yang_argument_get(ys));
|
||||
if ((yd = yang_find(ys, Y_DESCRIPTION, NULL)) != NULL){
|
||||
if ((helptext = strdup(yang_argument_get(yd))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
if ((s = strstr(helptext, "\n\n")) != NULL)
|
||||
|
|
@ -1016,7 +1016,7 @@ yang2cli_container(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang2cli_list(clicon_handle h,
|
||||
yang2cli_list(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int level,
|
||||
cbuf *cb)
|
||||
|
|
@ -1037,7 +1037,7 @@ yang2cli_list(clicon_handle h,
|
|||
cprintf(cb, "%*s%s", level*3, "", yang_argument_get(ys));
|
||||
if ((yd = yang_find(ys, Y_DESCRIPTION, NULL)) != NULL){
|
||||
if ((helptext = strdup(yang_argument_get(yd))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
if ((s = strstr(helptext, "\n\n")) != NULL)
|
||||
|
|
@ -1056,7 +1056,7 @@ yang2cli_list(clicon_handle h,
|
|||
while ((cvi = cvec_each(cvk, cvi)) != NULL) {
|
||||
keyname = cv_string_get(cvi);
|
||||
if ((yleaf = yang_find(ys, Y_LEAF, keyname)) == NULL){
|
||||
clicon_err(OE_XML, 0, "List statement \"%s\" has no key leaf \"%s\"",
|
||||
clixon_err(OE_XML, 0, "List statement \"%s\" has no key leaf \"%s\"",
|
||||
yang_argument_get(ys), keyname);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1126,7 +1126,7 @@ yang2cli_list(clicon_handle h,
|
|||
translated to cli. and therefore input-syntax != output syntax. Which is bad
|
||||
*/
|
||||
static int
|
||||
yang2cli_choice(clicon_handle h,
|
||||
yang2cli_choice(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int level,
|
||||
cbuf *cb)
|
||||
|
|
@ -1168,7 +1168,7 @@ yang2cli_choice(clicon_handle h,
|
|||
* @note Tie-break of same top-level symbol: prefix is NYI
|
||||
* @see yang2cli_yspec for original
|
||||
*/
|
||||
static int yang2cli_grouping(clicon_handle h, yang_stmt *ys, char *treename);
|
||||
static int yang2cli_grouping(clixon_handle h, yang_stmt *ys, char *treename);
|
||||
|
||||
/*! Generate CLI code for Yang uses statement
|
||||
*
|
||||
|
|
@ -1180,7 +1180,7 @@ static int yang2cli_grouping(clicon_handle h, yang_stmt *ys, char *treename);
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang2cli_uses(clicon_handle h,
|
||||
yang2cli_uses(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int level,
|
||||
cbuf *cb)
|
||||
|
|
@ -1200,11 +1200,11 @@ yang2cli_uses(clicon_handle h,
|
|||
if (ys_grouping_resolve(ys, prefix, id, &ygrouping) < 0)
|
||||
goto done;
|
||||
if (ygrouping == NULL){
|
||||
clicon_err(OE_YANG, 0, "grouping %s not found in \n", yang_argument_get(ys));
|
||||
clixon_err(OE_YANG, 0, "grouping %s not found in \n", yang_argument_get(ys));
|
||||
goto done;
|
||||
}
|
||||
if ((cbtree = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* prefix is not globally unique, need namespace */
|
||||
|
|
@ -1250,7 +1250,7 @@ yang2cli_uses(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang2cli_stmt(clicon_handle h,
|
||||
yang2cli_stmt(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
int level,
|
||||
cbuf *cb)
|
||||
|
|
@ -1262,7 +1262,7 @@ yang2cli_stmt(clicon_handle h,
|
|||
int extvalue = 0;
|
||||
|
||||
if (ys == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "No yang spec");
|
||||
clixon_err(OE_YANG, EINVAL, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if (yang_find(ys, Y_STATUS, "obsolete") != NULL){
|
||||
|
|
@ -1350,11 +1350,11 @@ cvec_add_name(cvec *cvv,
|
|||
|
||||
if (cvv == NULL &&
|
||||
(cvv = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
return NULL;
|
||||
}
|
||||
if ((cv = cvec_add(cvv, CGV_STRING)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_add");
|
||||
clixon_err(OE_UNIX, errno, "cvec_add");
|
||||
return NULL;
|
||||
}
|
||||
/* Filter out state data, use "nonconfig" as defined in RFC8040 4.8.1
|
||||
|
|
@ -1392,7 +1392,7 @@ cvec_add_name(cvec *cvv,
|
|||
* (2) rewrite yang2cli code to create pt directly instead of via a cbuf.
|
||||
*/
|
||||
static int
|
||||
yang2cli_post(clicon_handle h,
|
||||
yang2cli_post(clixon_handle h,
|
||||
cg_obj *cop,
|
||||
parse_tree *pt,
|
||||
int i0,
|
||||
|
|
@ -1412,7 +1412,7 @@ yang2cli_post(clicon_handle h,
|
|||
ypkeyword = yang_keyword_get(yp);
|
||||
for (i = i0; i<pt_len_get(pt); i++){
|
||||
if ((co = pt_vec_i_get(pt, i)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Empty object in parsetreelist"); /* shouldnt happen */
|
||||
clixon_err(OE_YANG, 0, "Empty object in parsetreelist"); /* shouldnt happen */
|
||||
goto done;
|
||||
}
|
||||
if (co->co_type == CO_EMPTY){
|
||||
|
|
@ -1517,7 +1517,7 @@ yang2cli_post(clicon_handle h,
|
|||
* XXX merge with yang2cli_yspec
|
||||
*/
|
||||
static int
|
||||
yang2cli_grouping(clicon_handle h,
|
||||
yang2cli_grouping(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
char *treename)
|
||||
{
|
||||
|
|
@ -1534,11 +1534,11 @@ yang2cli_grouping(clicon_handle h,
|
|||
int i;
|
||||
|
||||
if ((pt0 = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Traverse YANG, loop through all modules and generate CLI, inline of yang2cli_stmt */
|
||||
|
|
@ -1564,11 +1564,11 @@ yang2cli_grouping(clicon_handle h,
|
|||
* Needs to move cligen_parse_str() call here instead of later
|
||||
*/
|
||||
if ((prefix = yang_find_myprefix(ys)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Module %s lacks prefix", yang_argument_get(ys)); /* shouldnt happen */
|
||||
clixon_err(OE_YANG, 0, "Module %s lacks prefix", yang_argument_get(ys)); /* shouldnt happen */
|
||||
goto done;
|
||||
}
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
/* Parse the buffer using cligen parser. load cli syntax */
|
||||
|
|
@ -1596,13 +1596,13 @@ yang2cli_grouping(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if (clicon_data_int_get(h, "autocli-print-debug") == 1)
|
||||
clicon_log(LOG_NOTICE, "%s: Top-level cli-spec %s:\n%s",
|
||||
clixon_log(h, LOG_NOTICE, "%s: Top-level cli-spec %s:\n%s",
|
||||
__FUNCTION__, treename, cbuf_get(cb));
|
||||
else
|
||||
clixon_debug(CLIXON_DBG_DETAIL, "%s: Top-level cli-spec %s:\n%s",
|
||||
__FUNCTION__, treename, cbuf_get(cb));
|
||||
if (cligen_parsetree_merge(pt0, NULL, pt) < 0){
|
||||
clicon_err(OE_YANG, errno, "cligen_parsetree_merge");
|
||||
clixon_err(OE_YANG, errno, "cligen_parsetree_merge");
|
||||
goto done;
|
||||
}
|
||||
pt_free(pt, 1);
|
||||
|
|
@ -1617,11 +1617,11 @@ yang2cli_grouping(clicon_handle h,
|
|||
goto done;
|
||||
/* Append cligen tree and name it */
|
||||
if ((ph = cligen_ph_add(cli_cligen(h), treename)) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cligen_ph_add");
|
||||
clixon_err(OE_UNIX, 0, "cligen_ph_add");
|
||||
goto done;
|
||||
}
|
||||
if (cligen_ph_parsetree_set(ph, pt0) < 0){
|
||||
clicon_err(OE_UNIX, 0, "cligen_ph_parsetree_set");
|
||||
clixon_err(OE_UNIX, 0, "cligen_ph_parsetree_set");
|
||||
goto done;
|
||||
}
|
||||
pt0 = NULL;
|
||||
|
|
@ -1651,7 +1651,7 @@ yang2cli_grouping(clicon_handle h,
|
|||
* @note Tie-break of same top-level symbol: prefix is NYI
|
||||
*/
|
||||
int
|
||||
yang2cli_yspec(clicon_handle h,
|
||||
yang2cli_yspec(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
char *treename)
|
||||
{
|
||||
|
|
@ -1668,11 +1668,11 @@ yang2cli_yspec(clicon_handle h,
|
|||
int config;
|
||||
|
||||
if ((pt0 = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Traverse YANG, loop through all modules and generate CLI */
|
||||
|
|
@ -1694,11 +1694,11 @@ yang2cli_yspec(clicon_handle h,
|
|||
* Needs to move cligen_parse_str() call here instead of later
|
||||
*/
|
||||
if ((prefix = yang_find_myprefix(ymod)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Module %s lacks prefix", yang_argument_get(ymod)); /* shouldnt happen */
|
||||
clixon_err(OE_YANG, 0, "Module %s lacks prefix", yang_argument_get(ymod)); /* shouldnt happen */
|
||||
goto done;
|
||||
}
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
/* Parse the buffer using cligen parser. load cli syntax */
|
||||
|
|
@ -1727,13 +1727,13 @@ yang2cli_yspec(clicon_handle h,
|
|||
}
|
||||
// pt_print(stderr,pt);
|
||||
if (clicon_data_int_get(h, "autocli-print-debug") == 1)
|
||||
clicon_log(LOG_NOTICE, "%s: Top-level cli-spec %s:\n%s",
|
||||
clixon_log(h, LOG_NOTICE, "%s: Top-level cli-spec %s:\n%s",
|
||||
__FUNCTION__, treename, cbuf_get(cb));
|
||||
else
|
||||
clixon_debug(CLIXON_DBG_DETAIL, "%s: Top-level cli-spec %s:\n%s",
|
||||
__FUNCTION__, treename, cbuf_get(cb));
|
||||
if (cligen_parsetree_merge(pt0, NULL, pt) < 0){
|
||||
clicon_err(OE_YANG, errno, "cligen_parsetree_merge");
|
||||
clixon_err(OE_YANG, errno, "cligen_parsetree_merge");
|
||||
goto done;
|
||||
}
|
||||
pt_free(pt, 1);
|
||||
|
|
@ -1748,17 +1748,17 @@ yang2cli_yspec(clicon_handle h,
|
|||
goto done;
|
||||
/* Append cligen tree and name it */
|
||||
if ((ph = cligen_ph_add(cli_cligen(h), treename)) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cligen_ph_add");
|
||||
clixon_err(OE_UNIX, 0, "cligen_ph_add");
|
||||
goto done;
|
||||
}
|
||||
if (cligen_ph_parsetree_set(ph, pt0) < 0){
|
||||
clicon_err(OE_UNIX, 0, "cligen_ph_parsetree_set");
|
||||
clixon_err(OE_UNIX, 0, "cligen_ph_parsetree_set");
|
||||
goto done;
|
||||
}
|
||||
pt0 = NULL;
|
||||
#if 0
|
||||
if (clicon_data_int_get(h, "autocli-print-debug") == 1){
|
||||
clicon_log(LOG_NOTICE, "%s: Top-level cli-spec %s", __FUNCTION__, treename);
|
||||
clixon_log(h, LOG_NOTICE, "%s: Top-level cli-spec %s", __FUNCTION__, treename);
|
||||
pt_print1(stderr, pt0, 0);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -1781,7 +1781,7 @@ yang2cli_yspec(clicon_handle h,
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
int
|
||||
yang2cli_init(clicon_handle h)
|
||||
yang2cli_init(clixon_handle h)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int yang2cli_yspec(clicon_handle h, yang_stmt *yspec, char *treename);
|
||||
int yang2cli_init(clicon_handle h);
|
||||
int yang2cli_yspec(clixon_handle h, yang_stmt *yspec, char *treename);
|
||||
int yang2cli_init(clixon_handle h);
|
||||
|
||||
#endif /* _CLI_GENERATE_H_ */
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_cli_api.h"
|
||||
|
|
@ -69,15 +69,15 @@
|
|||
|
||||
#define CLICON_MAGIC 0x99aafabe
|
||||
|
||||
#define handle(h) (assert(clicon_handle_check(h)==0),(struct cli_handle *)(h))
|
||||
#define handle(h) (assert(clixon_handle_check(h)==0),(struct cli_handle *)(h))
|
||||
#define cligen(h) (handle(h)->cl_cligen)
|
||||
|
||||
/*! CLI specific handle added to header Clixon handle
|
||||
*
|
||||
* This file should only contain access functions for the _specific_
|
||||
* entries in the struct below.
|
||||
* @note The top part must be equivalent to struct clicon_handle in clixon_handle.c
|
||||
* @see struct clicon_handle, struct backend_handle
|
||||
* @note The top part must be equivalent to struct clixon_handle in clixon_handle.c
|
||||
* @see struct clixon_handle, struct backend_handle
|
||||
*/
|
||||
struct cli_handle {
|
||||
int cl_magic; /* magic (HDR)*/
|
||||
|
|
@ -92,25 +92,25 @@ struct cli_handle {
|
|||
|
||||
/*! Return a clicon handle for other CLICON API calls
|
||||
*/
|
||||
clicon_handle
|
||||
clixon_handle
|
||||
cli_handle_init(void)
|
||||
{
|
||||
struct cli_handle *cl;
|
||||
cligen_handle clih = NULL;
|
||||
clicon_handle h = NULL;
|
||||
clixon_handle h = NULL;
|
||||
|
||||
if ((cl = (struct cli_handle *)clicon_handle_init0(sizeof(struct cli_handle))) == NULL)
|
||||
if ((cl = (struct cli_handle *)clixon_handle_init0(sizeof(struct cli_handle))) == NULL)
|
||||
return NULL;
|
||||
|
||||
if ((clih = cligen_init()) == NULL){
|
||||
clicon_handle_exit((clicon_handle)cl);
|
||||
clixon_handle_exit((clixon_handle)cl);
|
||||
goto done;
|
||||
}
|
||||
cligen_userhandle_set(clih, cl);
|
||||
cligen_eval_wrap_fn_set(clih, plugin_context_check, cl);
|
||||
cl->cl_cligen = clih;
|
||||
|
||||
h = (clicon_handle)cl;
|
||||
h = (clixon_handle)cl;
|
||||
done:
|
||||
return h;
|
||||
}
|
||||
|
|
@ -120,11 +120,11 @@ cli_handle_init(void)
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
int
|
||||
cli_handle_exit(clicon_handle h)
|
||||
cli_handle_exit(clixon_handle h)
|
||||
{
|
||||
cligen_handle ch = cligen(h);
|
||||
|
||||
clicon_handle_exit(h); /* frees h and options */
|
||||
clixon_handle_exit(h); /* frees h and options */
|
||||
cligen_exit(ch);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -138,13 +138,13 @@ cli_handle_exit(clicon_handle h)
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
cligen_handle
|
||||
cli_cligen(clicon_handle h)
|
||||
cli_cligen(clixon_handle h)
|
||||
{
|
||||
return cligen(h);
|
||||
}
|
||||
|
||||
int
|
||||
cli_parse_file(clicon_handle h,
|
||||
cli_parse_file(clixon_handle h,
|
||||
FILE *f,
|
||||
char *name, /* just for errs */
|
||||
parse_tree *pt,
|
||||
|
|
@ -156,7 +156,7 @@ cli_parse_file(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
cli_susp_hook(clicon_handle h,
|
||||
cli_susp_hook(clixon_handle h,
|
||||
cligen_susp_cb_t *fn)
|
||||
{
|
||||
cligen_handle ch = cligen(h);
|
||||
|
|
@ -166,7 +166,7 @@ cli_susp_hook(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
cli_interrupt_hook(clicon_handle h,
|
||||
cli_interrupt_hook(clixon_handle h,
|
||||
cligen_interrupt_cb_t *fn)
|
||||
{
|
||||
cligen_handle ch = cligen(h);
|
||||
|
|
@ -176,7 +176,7 @@ cli_interrupt_hook(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
cli_prompt_set(clicon_handle h,
|
||||
cli_prompt_set(clixon_handle h,
|
||||
char *prompt)
|
||||
{
|
||||
cligen_handle ch = cligen(h);
|
||||
|
|
@ -184,7 +184,7 @@ cli_prompt_set(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
cli_logsyntax_set(clicon_handle h,
|
||||
cli_logsyntax_set(clixon_handle h,
|
||||
int status)
|
||||
{
|
||||
cligen_handle ch = cligen(h);
|
||||
|
|
|
|||
|
|
@ -43,18 +43,18 @@
|
|||
* Prototypes
|
||||
* Internal prototypes. For exported functions see clixon_cli_api.h
|
||||
*/
|
||||
int cli_parse_file(clicon_handle h,
|
||||
int cli_parse_file(clixon_handle h,
|
||||
FILE *f,
|
||||
char *name, /* just for errs */
|
||||
parse_tree *pt,
|
||||
cvec *globals);
|
||||
|
||||
int cli_susp_hook(clicon_handle h, cligen_susp_cb_t *fn);
|
||||
int cli_susp_hook(clixon_handle h, cligen_susp_cb_t *fn);
|
||||
|
||||
int cli_interrupt_hook(clicon_handle h, cligen_interrupt_cb_t *fn);
|
||||
int cli_interrupt_hook(clixon_handle h, cligen_interrupt_cb_t *fn);
|
||||
|
||||
int cli_prompt_set(clicon_handle h, char *prompt);
|
||||
int cli_prompt_set(clixon_handle h, char *prompt);
|
||||
|
||||
int cli_logsyntax_set(clicon_handle h, int status);
|
||||
int cli_logsyntax_set(clixon_handle h, int status);
|
||||
|
||||
#endif /* _CLI_HANDLE_H_ */
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_cli_api.h"
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
cli_history_load(clicon_handle h)
|
||||
cli_history_load(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
int lines;
|
||||
|
|
@ -101,16 +101,16 @@ cli_history_load(clicon_handle h)
|
|||
if ((filename = clicon_option_str(h,"CLICON_CLI_HIST_FILE")) == NULL)
|
||||
goto ok; /* ignore */
|
||||
if (wordexp(filename, &result, 0) < 0){
|
||||
clicon_err(OE_UNIX, errno, "wordexp");
|
||||
clixon_err(OE_UNIX, errno, "wordexp");
|
||||
goto done;
|
||||
}
|
||||
if ((f = fopen(result.we_wordv[0], "r")) == NULL){
|
||||
clicon_log(LOG_DEBUG, "Warning: Could not open CLI history file for reading: %s: %s",
|
||||
clixon_log(h, LOG_DEBUG, "Warning: Could not open CLI history file for reading: %s: %s",
|
||||
result.we_wordv[0], strerror(errno));
|
||||
goto ok;
|
||||
}
|
||||
if (cligen_hist_file_load(cli_cligen(h), f) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cligen_hist_file_load");
|
||||
clixon_err(OE_UNIX, errno, "cligen_hist_file_load");
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -130,7 +130,7 @@ cli_history_load(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
cli_history_save(clicon_handle h)
|
||||
cli_history_save(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
char *filename;
|
||||
|
|
@ -140,16 +140,16 @@ cli_history_save(clicon_handle h)
|
|||
if ((filename = clicon_option_str(h, "CLICON_CLI_HIST_FILE")) == NULL)
|
||||
goto ok; /* ignore */
|
||||
if (wordexp(filename, &result, 0) < 0){
|
||||
clicon_err(OE_UNIX, errno, "wordexp");
|
||||
clixon_err(OE_UNIX, errno, "wordexp");
|
||||
goto done;
|
||||
}
|
||||
if ((f = fopen(result.we_wordv[0], "w+")) == NULL){
|
||||
clicon_log(LOG_DEBUG, "Warning: Could not open CLI history file for writing: %s: %s",
|
||||
clixon_log(h, LOG_DEBUG, "Warning: Could not open CLI history file for writing: %s: %s",
|
||||
result.we_wordv[0], strerror(errno));
|
||||
goto ok;
|
||||
}
|
||||
if (cligen_hist_file_save(cli_cligen(h), f) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cligen_hist_file_save");
|
||||
clixon_err(OE_UNIX, errno, "cligen_hist_file_save");
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -167,7 +167,7 @@ cli_history_save(clicon_handle h)
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
static int
|
||||
cli_terminate(clicon_handle h)
|
||||
cli_terminate(clixon_handle h)
|
||||
{
|
||||
yang_stmt *yspec;
|
||||
cvec *nsctx;
|
||||
|
|
@ -196,7 +196,7 @@ cli_terminate(clicon_handle h)
|
|||
cli_history_save(h);
|
||||
cli_handle_exit(h);
|
||||
clixon_err_exit();
|
||||
clicon_log_exit();
|
||||
clixon_log_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -205,7 +205,7 @@ cli_terminate(clicon_handle h)
|
|||
static void
|
||||
cli_sig_term(int arg)
|
||||
{
|
||||
clicon_log(LOG_NOTICE, "%s: %u Terminated (killed by sig %d)",
|
||||
clixon_log(NULL, LOG_NOTICE, "%s: %u Terminated (killed by sig %d)",
|
||||
__PROGRAM__, getpid(), arg);
|
||||
exit(1);
|
||||
}
|
||||
|
|
@ -213,17 +213,17 @@ cli_sig_term(int arg)
|
|||
/*! Setup signal handlers
|
||||
*/
|
||||
static int
|
||||
cli_signal_init (clicon_handle h)
|
||||
cli_signal_init (clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
cli_signal_block(h);
|
||||
if (set_signal(SIGTERM, cli_sig_term, NULL) < 0){
|
||||
clicon_err(OE_UNIX, errno, "Setting SIGTERM signal");
|
||||
clixon_err(OE_UNIX, errno, "Setting SIGTERM signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGPIPE, SIG_IGN, NULL) < 0){
|
||||
clicon_err(OE_UNIX, errno, "Setting DIGPIPE signal");
|
||||
clixon_err(OE_UNIX, errno, "Setting DIGPIPE signal");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -239,7 +239,7 @@ cli_signal_init (clicon_handle h)
|
|||
* @see cligen_loop
|
||||
*/
|
||||
static int
|
||||
cli_interactive(clicon_handle h)
|
||||
cli_interactive(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
char *cmd;
|
||||
|
|
@ -251,7 +251,7 @@ cli_interactive(clicon_handle h)
|
|||
/* Loop through all commands */
|
||||
while(!cligen_exiting(cli_cligen(h))) {
|
||||
if ((ph = cligen_pt_head_active_get(cli_cligen(h))) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "active tree not found");
|
||||
clixon_err(OE_UNIX, 0, "active tree not found");
|
||||
goto done;
|
||||
}
|
||||
new_mode = cligen_ph_name_get(ph);
|
||||
|
|
@ -280,7 +280,7 @@ cli_interactive(clicon_handle h)
|
|||
* should probably be moved to clispec default
|
||||
*/
|
||||
static int
|
||||
autocli_trees_default(clicon_handle h)
|
||||
autocli_trees_default(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
cbuf *cb = NULL;
|
||||
|
|
@ -292,7 +292,7 @@ autocli_trees_default(clicon_handle h)
|
|||
if ((ph = cligen_ph_add(cli_cligen(h), "datamodel")) == NULL)
|
||||
goto done;
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if (clispec_parse_str(cli_cligen(h),
|
||||
|
|
@ -306,7 +306,7 @@ autocli_trees_default(clicon_handle h)
|
|||
if ((ph = cligen_ph_add(cli_cligen(h), "datamodelshow")) == NULL)
|
||||
goto done;
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if (clispec_parse_str(cli_cligen(h),
|
||||
|
|
@ -319,7 +319,7 @@ autocli_trees_default(clicon_handle h)
|
|||
if ((ph = cligen_ph_add(cli_cligen(h), "datamodelstate")) == NULL)
|
||||
goto done;
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if (clispec_parse_str(cli_cligen(h),
|
||||
|
|
@ -333,11 +333,11 @@ autocli_trees_default(clicon_handle h)
|
|||
if ((ph = cligen_ph_add(cli_cligen(h), "datamodelmode")) == NULL)
|
||||
goto done;
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "@basemodel, @remove:act-prekey, @remove:act-leafconst, @remove:ac-state");
|
||||
|
|
@ -385,7 +385,7 @@ autocli_trees_default(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
autocli_start(clicon_handle h)
|
||||
autocli_start(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
yang_stmt *yspec;
|
||||
|
|
@ -435,7 +435,7 @@ autocli_start(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
options_split(clicon_handle h,
|
||||
options_split(clixon_handle h,
|
||||
char *argv0,
|
||||
int argc,
|
||||
char **argv,
|
||||
|
|
@ -470,7 +470,7 @@ options_split(clicon_handle h,
|
|||
}
|
||||
|
||||
static void
|
||||
usage(clicon_handle h,
|
||||
usage(clixon_handle h,
|
||||
char *argv0)
|
||||
{
|
||||
char *plgdir = clicon_cli_dir(h);
|
||||
|
|
@ -518,10 +518,10 @@ main(int argc,
|
|||
int once;
|
||||
char *tmp;
|
||||
char *argv0 = argv[0];
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
int logclisyntax = 0;
|
||||
int help = 0;
|
||||
int logdst = CLICON_LOG_STDERR;
|
||||
int logdst = CLIXON_LOG_STDERR;
|
||||
char *restarg = NULL; /* what remains after options */
|
||||
yang_stmt *yspec;
|
||||
struct passwd *pw;
|
||||
|
|
@ -540,18 +540,20 @@ main(int argc,
|
|||
once = 0;
|
||||
config_dump = 0;
|
||||
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, logdst);
|
||||
|
||||
/* Initiate Clixon handle. CLIgen is also initialized */
|
||||
if ((h = cli_handle_init()) == NULL)
|
||||
goto done;
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
if (clixon_log_init(h, __PROGRAM__, LOG_INFO, logdst) < 0)
|
||||
goto done;
|
||||
if (clixon_err_init(h) < 0)
|
||||
goto done;
|
||||
|
||||
/* Set username to clicon handle. Use in all communication to backend
|
||||
* Note, can be overridden by -U
|
||||
*/
|
||||
if ((pw = getpwuid(getuid())) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "getpwuid");
|
||||
clixon_err(OE_UNIX, errno, "getpwuid");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_username_set(h, pw->pw_name) < 0)
|
||||
|
|
@ -594,19 +596,19 @@ main(int argc,
|
|||
clicon_option_str_set(h, "CLICON_CONFIGDIR", optarg);
|
||||
break;
|
||||
case 'l': /* Log destination: s|e|o|f */
|
||||
if ((logdst = clicon_log_opt(optarg[0])) < 0)
|
||||
if ((logdst = clixon_log_opt(optarg[0])) < 0)
|
||||
usage(h, argv[0]);
|
||||
if (logdst == CLICON_LOG_FILE &&
|
||||
if (logdst == CLIXON_LOG_FILE &&
|
||||
strlen(optarg)>1 &&
|
||||
clicon_log_file(optarg+1) < 0)
|
||||
clixon_log_file(optarg+1) < 0)
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* Logs, error and debug to stderr or syslog, set debug level
|
||||
*/
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(h, dbg);
|
||||
yang_init(h);
|
||||
|
||||
/* Find, read and parse configfile */
|
||||
|
|
@ -734,7 +736,7 @@ main(int argc,
|
|||
/* Enable XSD libxml2 regex engine */
|
||||
cligen_regex_xsd_set(cli_cligen(h), 1);
|
||||
#else
|
||||
clicon_err(OE_FATAL, 0, "CLICON_YANG_REGEXP set to libxml2, but HAVE_LIBXML2 not set (Either change CLICON_YANG_REGEXP to posix, or run: configure --with-libxml2))");
|
||||
clixon_err(OE_FATAL, 0, "CLICON_YANG_REGEXP set to libxml2, but HAVE_LIBXML2 not set (Either change CLICON_YANG_REGEXP to posix, or run: configure --with-libxml2))");
|
||||
goto done;
|
||||
#endif
|
||||
}
|
||||
|
|
@ -746,7 +748,7 @@ main(int argc,
|
|||
cligen_helpstring_lines_set(cli_cligen(h), nr);
|
||||
|
||||
if ((nr = clicon_option_int(h, "CLICON_LOG_STRING_LIMIT")) != 0)
|
||||
clicon_log_string_limit_set(nr);
|
||||
clixon_log_string_limit_set(nr);
|
||||
|
||||
/* Setup signal handlers */
|
||||
if (cli_signal_init(h) < 0)
|
||||
|
|
@ -852,7 +854,7 @@ main(int argc,
|
|||
goto done;
|
||||
}
|
||||
if (cligen_ph_find(cli_cligen(h), cli_syntax_mode(h)) == NULL)
|
||||
clicon_log(LOG_WARNING, "No such cli mode: %s (Specify cli mode with CLICON_CLI_MODE in config file or -m <mode> on command line", cli_syntax_mode(h));
|
||||
clixon_log(h, LOG_WARNING, "No such cli mode: %s (Specify cli mode with CLICON_CLI_MODE in config file or -m <mode> on command line", cli_syntax_mode(h));
|
||||
/* CLIgen tab mode, ie how <tab>s behave */
|
||||
if ((tabmode = clicon_cli_tab_mode(h)) < 0){
|
||||
fprintf(stderr, "FATAL: CLICON_CLI_TAB_MODE not set\n");
|
||||
|
|
@ -922,9 +924,9 @@ main(int argc,
|
|||
done:
|
||||
if (restarg)
|
||||
free(restarg);
|
||||
// Gets in your face if we log on stderr
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, 0); /* Log on syslog no stderr */
|
||||
clicon_log(LOG_NOTICE, "%s: %u Terminated", __PROGRAM__, getpid());
|
||||
// Gets in your face if we log on stderr
|
||||
clixon_log_init(h, __PROGRAM__, LOG_INFO, 0); /* Log on syslog no stderr */
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u Terminated", __PROGRAM__, getpid());
|
||||
if (h)
|
||||
cli_terminate(h);
|
||||
return retval;
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "clixon_cli_api.h"
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
* @endcode
|
||||
*/
|
||||
int
|
||||
pipe_arg_fn(clicon_handle h,
|
||||
pipe_arg_fn(clixon_handle h,
|
||||
char *cmd,
|
||||
char *option,
|
||||
char *value)
|
||||
|
|
@ -94,19 +94,19 @@ pipe_arg_fn(clicon_handle h,
|
|||
int i;
|
||||
|
||||
if (cmd == NULL || strlen(cmd) == 0){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "cmd '%s' NULL or empty", cmd);
|
||||
clixon_err(OE_PLUGIN, EINVAL, "cmd '%s' NULL or empty", cmd);
|
||||
goto done;
|
||||
}
|
||||
if (stat(cmd, &fstat) < 0) {
|
||||
clicon_err(OE_UNIX, errno, "stat(%s)", cmd);
|
||||
clixon_err(OE_UNIX, errno, "stat(%s)", cmd);
|
||||
goto done;
|
||||
}
|
||||
if (!S_ISREG(fstat.st_mode)){
|
||||
clicon_err(OE_UNIX, errno, "%s is not a regular file", cmd);
|
||||
clixon_err(OE_UNIX, errno, "%s is not a regular file", cmd);
|
||||
goto done;
|
||||
}
|
||||
if ((argv = calloc(4, sizeof(char *))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "calloc");
|
||||
clixon_err(OE_UNIX, errno, "calloc");
|
||||
goto done;
|
||||
}
|
||||
i = 0;
|
||||
|
|
@ -129,7 +129,7 @@ pipe_arg_fn(clicon_handle h,
|
|||
* @note Any vertical bar (|] in the patterns field is quoted for OR function
|
||||
*/
|
||||
int
|
||||
pipe_grep_fn(clicon_handle h,
|
||||
pipe_grep_fn(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -144,7 +144,7 @@ pipe_grep_fn(clicon_handle h,
|
|||
char c;
|
||||
|
||||
if (cvec_len(argv) != 2){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <option> <argname>", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <option> <argname>", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if ((cv = cvec_i(argv, 0)) != NULL &&
|
||||
|
|
@ -156,7 +156,7 @@ pipe_grep_fn(clicon_handle h,
|
|||
strlen(str))
|
||||
argname = str;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (argname && strlen(argname)){
|
||||
|
|
@ -189,7 +189,7 @@ pipe_grep_fn(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
pipe_wc_fn(clicon_handle h,
|
||||
pipe_wc_fn(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -199,7 +199,7 @@ pipe_wc_fn(clicon_handle h,
|
|||
char *option = NULL;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <NUM>", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <NUM>", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if ((cv = cvec_i(argv, 0)) != NULL &&
|
||||
|
|
@ -220,7 +220,7 @@ pipe_wc_fn(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
pipe_tail_fn(clicon_handle h,
|
||||
pipe_tail_fn(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -232,7 +232,7 @@ pipe_tail_fn(clicon_handle h,
|
|||
char *argname = NULL;
|
||||
|
||||
if (cvec_len(argv) != 2){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <option> <argname>", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <option> <argname>", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if ((cv = cvec_i(argv, 0)) != NULL &&
|
||||
|
|
@ -267,7 +267,7 @@ pipe_tail_fn(clicon_handle h,
|
|||
* @see cli_show_auto_devs
|
||||
*/
|
||||
int
|
||||
pipe_showas_fn(clicon_handle h,
|
||||
pipe_showas_fn(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -282,7 +282,7 @@ pipe_showas_fn(clicon_handle h,
|
|||
cxobj *xerr = NULL;
|
||||
|
||||
if (cvec_len(argv) < 1 || cvec_len(argv) > 3){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected:: <format> [<pretty> [<prepend>]]", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected:: <format> [<pretty> [<prepend>]]", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if (cvec_len(argv) > argc){
|
||||
|
|
@ -308,7 +308,7 @@ pipe_showas_fn(clicon_handle h,
|
|||
if ((ret = xml_bind_yang(h, xt, YB_MODULE, yspec, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clixon_netconf_error(h, xerr, "Parse top file", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Parse top file");
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
/* clicon_cli */
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
gen_parse_tree(clicon_handle h,
|
||||
gen_parse_tree(clixon_handle h,
|
||||
char *name,
|
||||
parse_tree *pt,
|
||||
pt_head **php)
|
||||
|
|
@ -100,7 +100,7 @@ gen_parse_tree(clicon_handle h,
|
|||
if (cligen_ph_parsetree_set(ph, pt) < 0)
|
||||
goto done;
|
||||
if (cligen_ph_prompt_set(ph, CLI_DEFAULT_PROMPT) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cligen_ph_prompt_set");
|
||||
clixon_err(OE_UNIX, errno, "cligen_ph_prompt_set");
|
||||
goto done;
|
||||
}
|
||||
*php = ph;
|
||||
|
|
@ -198,7 +198,7 @@ cli_mark_output_pipes(cg_obj *co,
|
|||
* @see clixon_plugins_load Where .so plugin code has been loaded prior to this
|
||||
*/
|
||||
static int
|
||||
clispec_load_file(clicon_handle h,
|
||||
clispec_load_file(clixon_handle h,
|
||||
const char *filename,
|
||||
const char *dir,
|
||||
parse_tree *ptall,
|
||||
|
|
@ -223,7 +223,7 @@ clispec_load_file(clicon_handle h,
|
|||
#endif
|
||||
|
||||
if ((pt = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if (dir)
|
||||
|
|
@ -231,18 +231,18 @@ clispec_load_file(clicon_handle h,
|
|||
else
|
||||
snprintf(filepath, MAXPATHLEN-1, "%s", filename);
|
||||
if ((cvv = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cvec_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cvec_new");
|
||||
goto done;
|
||||
}
|
||||
/* Build parse tree from syntax spec. */
|
||||
if ((f = fopen(filepath, "r")) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "fopen %s", filepath);
|
||||
clixon_err(OE_PLUGIN, errno, "fopen %s", filepath);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Assuming this plugin is first in queue */
|
||||
if (clispec_parse_file(h, f, filepath, NULL, pt, cvv) < 0){
|
||||
clicon_err(OE_PLUGIN, 0, "failed to parse cli file %s", filepath);
|
||||
clixon_err(OE_PLUGIN, 0, "failed to parse cli file %s", filepath);
|
||||
fclose(f);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -267,7 +267,7 @@ clispec_load_file(clicon_handle h,
|
|||
if ((cp = clixon_plugin_find(h, plgnam)) != NULL)
|
||||
handle = clixon_plugin_handle_get(cp);
|
||||
if (handle == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "CLICON_PLUGIN set to '%s' in %s but plugin %s.so not found in %s",
|
||||
clixon_err(OE_PLUGIN, 0, "CLICON_PLUGIN set to '%s' in %s but plugin %s.so not found in %s",
|
||||
plgnam, filename, plgnam,
|
||||
clicon_cli_dir(h));
|
||||
goto done;
|
||||
|
|
@ -284,7 +284,7 @@ clispec_load_file(clicon_handle h,
|
|||
|
||||
/* Resolve callback names to function pointers. */
|
||||
if (cligen_callbackv_str2fn(pt, (cgv_str2fn_t*)clixon_str2fn, handle) < 0){
|
||||
clicon_err(OE_PLUGIN, 0, "Mismatch between CLIgen file '%s' and CLI plugin file '%s'. Some possible errors:\n\t1. A function given in the CLIgen file does not exist in the plugin (ie link error)\n\t2. The CLIgen spec does not point to the correct plugin .so file (CLICON_PLUGIN=\"%s\" is wrong)",
|
||||
clixon_err(OE_PLUGIN, 0, "Mismatch between CLIgen file '%s' and CLI plugin file '%s'. Some possible errors:\n\t1. A function given in the CLIgen file does not exist in the plugin (ie link error)\n\t2. The CLIgen spec does not point to the correct plugin .so file (CLICON_PLUGIN=\"%s\" is wrong)",
|
||||
filename, plgnam, plgnam);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -298,7 +298,7 @@ clispec_load_file(clicon_handle h,
|
|||
if (mode == NULL || strlen(mode) < 1) { /* may be null if not given in file */
|
||||
mode = clicon_cli_mode(h);
|
||||
if (mode == NULL || strlen(mode) < 1) { /* may be null if not given in file */
|
||||
clicon_err(OE_PLUGIN, 0, "No syntax mode specified in %s", filepath);
|
||||
clixon_err(OE_PLUGIN, 0, "No syntax mode specified in %s", filepath);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -312,7 +312,7 @@ clispec_load_file(clicon_handle h,
|
|||
* all modes may not be known (not yet loaded)
|
||||
*/
|
||||
if (cligen_parsetree_merge(ptall, NULL, pt) < 0){
|
||||
clicon_err(OE_PLUGIN, errno, "cligen_parsetree_merge");
|
||||
clixon_err(OE_PLUGIN, errno, "cligen_parsetree_merge");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -323,7 +323,7 @@ clispec_load_file(clicon_handle h,
|
|||
cg_var *cv;
|
||||
if ((ph = cligen_ph_find(cli_cligen(h), name)) == NULL){
|
||||
if ((ptnew = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if (gen_parse_tree(h, name, ptnew, &ph) < 0)
|
||||
|
|
@ -331,12 +331,12 @@ clispec_load_file(clicon_handle h,
|
|||
if (ph == NULL)
|
||||
goto done;
|
||||
if ((cv = cv_new(CGV_STRING)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cv_new");
|
||||
clixon_err(OE_UNIX, errno, "cv_new");
|
||||
goto done;
|
||||
}
|
||||
cv_string_set(cv, name);
|
||||
if (cvec_append_var(modes, cv) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cvec_append_var");
|
||||
clixon_err(OE_UNIX, errno, "cvec_append_var");
|
||||
goto done;
|
||||
}
|
||||
if (cv)
|
||||
|
|
@ -346,12 +346,12 @@ clispec_load_file(clicon_handle h,
|
|||
if (cligen_ph_pipe_set(ph, pipetree) < 0)
|
||||
goto done;
|
||||
if (cligen_parsetree_merge(cligen_ph_parsetree_get(ph), NULL, pt) < 0){
|
||||
clicon_err(OE_PLUGIN, errno, "cligen_parsetree_merge");
|
||||
clixon_err(OE_PLUGIN, errno, "cligen_parsetree_merge");
|
||||
goto done;
|
||||
}
|
||||
if (prompt){
|
||||
if (cligen_ph_prompt_set(ph, prompt) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cligen_ph_prompt_set");
|
||||
clixon_err(OE_UNIX, errno, "cligen_ph_prompt_set");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
|
@ -377,7 +377,7 @@ done:
|
|||
* XXX The parsetree loading needs a rewrite for multiple parse-trees
|
||||
*/
|
||||
int
|
||||
clispec_load(clicon_handle h)
|
||||
clispec_load(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
char *clispec_dir = NULL;
|
||||
|
|
@ -394,11 +394,11 @@ clispec_load(clicon_handle h)
|
|||
cg_var *cv = NULL;
|
||||
|
||||
if ((ptall = pt_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "pt_new");
|
||||
clixon_err(OE_UNIX, errno, "pt_new");
|
||||
goto done;
|
||||
}
|
||||
if ((modes = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
goto done;
|
||||
}
|
||||
/* Format plugin directory path */
|
||||
|
|
@ -438,7 +438,7 @@ clispec_load(clicon_handle h)
|
|||
if (cligen_parsetree_merge(cligen_ph_parsetree_get(ph),
|
||||
NULL,
|
||||
ptall) < 0){
|
||||
clicon_err(OE_PLUGIN, errno, "cligen_parsetree_merge");
|
||||
clixon_err(OE_PLUGIN, errno, "cligen_parsetree_merge");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -469,7 +469,7 @@ done:
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
int
|
||||
cli_plugin_finish(clicon_handle h)
|
||||
cli_plugin_finish(clixon_handle h)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -478,19 +478,19 @@ cli_plugin_finish(clicon_handle h)
|
|||
*
|
||||
* Sometimes the libraries specify an error string, if so print that.
|
||||
* Otherwise just print 'command error'.
|
||||
* But do not print it if error is already logged in eg clicon_err() using STDERR logging
|
||||
* But do not print it if error is already logged in eg clixon_err() using STDERR logging
|
||||
* See eg https://github.com/clicon/clixon/issues/325
|
||||
* @param[in] f File handler to write error to.
|
||||
*/
|
||||
int
|
||||
cli_handler_err(FILE *f)
|
||||
{
|
||||
if (clicon_errno){
|
||||
if (clixon_err_category()){
|
||||
/* Check if error is already logged on stderr */
|
||||
if ((clicon_get_logflags() & CLICON_LOG_STDERR) == 0){
|
||||
fprintf(f, "%s: %s", clicon_strerror(clicon_errno), clicon_err_reason);
|
||||
if (clicon_suberrno)
|
||||
fprintf(f, ": %s", strerror(clicon_suberrno));
|
||||
if ((clixon_get_logflags() & CLIXON_LOG_STDERR) == 0){
|
||||
fprintf(f, "%s: %s", clixon_err_str(), clixon_err_reason());
|
||||
if (clixon_err_subnr())
|
||||
fprintf(f, ": %s", strerror(clixon_err_subnr()));
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
else
|
||||
|
|
@ -517,7 +517,7 @@ cli_handler_err(FILE *f)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clicon_parse(clicon_handle h,
|
||||
clicon_parse(clixon_handle h,
|
||||
char *cmd,
|
||||
char **modenamep,
|
||||
cligen_result *result,
|
||||
|
|
@ -535,7 +535,7 @@ clicon_parse(clicon_handle h,
|
|||
pt_head *ph;
|
||||
|
||||
ch = cli_cligen(h);
|
||||
if (clicon_get_logflags()&CLICON_LOG_STDOUT)
|
||||
if (clixon_get_logflags()&CLIXON_LOG_STDOUT)
|
||||
f = stdout;
|
||||
else
|
||||
f = stderr;
|
||||
|
|
@ -569,10 +569,10 @@ clicon_parse(clicon_handle h,
|
|||
}
|
||||
cli_output_reset();
|
||||
if (!cligen_exiting(ch)) {
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
if ((ret = cligen_eval(ch, match_obj, cvv)) < 0) {
|
||||
cli_handler_err(stdout);
|
||||
if (clicon_suberrno == ESHUTDOWN)
|
||||
if (clixon_err_subnr() == ESHUTDOWN)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -610,7 +610,7 @@ done:
|
|||
* @retval NULL Error
|
||||
*/
|
||||
static char *
|
||||
cli_prompt_get(clicon_handle h,
|
||||
cli_prompt_get(clixon_handle h,
|
||||
char *fmt)
|
||||
{
|
||||
char *s = fmt;
|
||||
|
|
@ -623,7 +623,7 @@ cli_prompt_get(clicon_handle h,
|
|||
char *str0;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Start with empty string */
|
||||
|
|
@ -690,7 +690,7 @@ cli_prompt_get(clicon_handle h,
|
|||
}
|
||||
str0 = cbuf_len(cb) ? cbuf_get(cb) : CLI_DEFAULT_PROMPT;
|
||||
if ((promptstr = strdup(str0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
done:
|
||||
|
|
@ -709,7 +709,7 @@ cli_prompt_get(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clicon_cliread(clicon_handle h,
|
||||
clicon_cliread(clixon_handle h,
|
||||
pt_head *ph,
|
||||
char **stringp)
|
||||
{
|
||||
|
|
@ -739,10 +739,10 @@ clicon_cliread(clicon_handle h,
|
|||
cli_prompt_set(h, promptstr);
|
||||
free(promptstr);
|
||||
}
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
if (cliread(cli_cligen(h), stringp) < 0){
|
||||
cli_handler_err(stdout);
|
||||
if (clicon_suberrno == ESHUTDOWN)
|
||||
if (clixon_err_subnr() == ESHUTDOWN)
|
||||
goto done;
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -770,7 +770,7 @@ clicon_cliread(clicon_handle h,
|
|||
* @retval 0 Not found / error
|
||||
*/
|
||||
int
|
||||
cli_set_syntax_mode(clicon_handle h,
|
||||
cli_set_syntax_mode(clixon_handle h,
|
||||
char *name)
|
||||
{
|
||||
|
||||
|
|
@ -787,7 +787,7 @@ cli_set_syntax_mode(clicon_handle h,
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
char *
|
||||
cli_syntax_mode(clicon_handle h)
|
||||
cli_syntax_mode(clixon_handle h)
|
||||
{
|
||||
pt_head *ph;
|
||||
|
||||
|
|
|
|||
|
|
@ -43,15 +43,15 @@
|
|||
#include <netinet/in.h>
|
||||
|
||||
/* clicon generic callback pointer */
|
||||
typedef void (clicon_callback_t)(clicon_handle h);
|
||||
typedef void (clicon_callback_t)(clixon_handle h);
|
||||
|
||||
|
||||
void *clixon_str2fn(char *name, void *handle, char **error);
|
||||
|
||||
int clicon_parse(clicon_handle h, char *cmd, char **mode, cligen_result *result, int *evalres);
|
||||
int clicon_parse(clixon_handle h, char *cmd, char **mode, cligen_result *result, int *evalres);
|
||||
|
||||
int clicon_cliread(clicon_handle h, pt_head *ph, char **stringp);
|
||||
int clicon_cliread(clixon_handle h, pt_head *ph, char **stringp);
|
||||
|
||||
int cli_plugin_finish(clicon_handle h);
|
||||
int cli_plugin_finish(clixon_handle h);
|
||||
|
||||
#endif /* _CLI_PLUGIN_H_ */
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
/* Exported functions in this file are in clixon_cli_api.h */
|
||||
|
|
@ -115,7 +115,7 @@ xpath_append(cbuf *cb0,
|
|||
int j;
|
||||
|
||||
if (cb0 == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "cb0 is NULL");
|
||||
clixon_err(OE_XML, EINVAL, "cb0 is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (xpath1 == NULL || strlen(xpath1)==0)
|
||||
|
|
@ -158,7 +158,7 @@ xpath_append(cbuf *cb0,
|
|||
if ((ret = yang_find_namespace_by_prefix(y, prefix, &ns)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clicon_err(OE_DB, 0, "Prefix %s does not have an associated namespace", prefix);
|
||||
clixon_err(OE_DB, 0, "Prefix %s does not have an associated namespace", prefix);
|
||||
goto done;
|
||||
}
|
||||
if (xml_nsctx_add(nsc, prefix, ns) < 0)
|
||||
|
|
@ -250,32 +250,32 @@ expand_dbvar(void *h,
|
|||
cvec *callback_cvv;
|
||||
|
||||
if (argv == NULL || (cvec_len(argv) != 2 && cvec_len(argv) != 3)){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "requires arguments: <db> <apipathfmt> [<mountpt>]");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "requires arguments: <db> <apipathfmt> [<mountpt>]");
|
||||
goto done;
|
||||
}
|
||||
if ((yspec0 = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if ((cv = cvec_i(argv, 0)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "Error when accessing argument <db>");
|
||||
clixon_err(OE_PLUGIN, 0, "Error when accessing argument <db>");
|
||||
goto done;
|
||||
}
|
||||
dbstr = cv_string_get(cv);
|
||||
if (strcmp(dbstr, "running") != 0 &&
|
||||
strcmp(dbstr, "candidate") != 0 &&
|
||||
strcmp(dbstr, "startup") != 0){
|
||||
clicon_err(OE_PLUGIN, 0, "No such db name: %s", dbstr);
|
||||
clixon_err(OE_PLUGIN, 0, "No such db name: %s", dbstr);
|
||||
goto done;
|
||||
}
|
||||
if ((cv = cvec_i(argv, 1)) == NULL){
|
||||
clicon_err(OE_PLUGIN, 0, "Error when accessing argument <api_path>");
|
||||
clixon_err(OE_PLUGIN, 0, "Error when accessing argument <api_path>");
|
||||
goto done;
|
||||
}
|
||||
if (autocli_grouping_treeref(h, &grouping_treeref) < 0)
|
||||
goto done;
|
||||
if ((api_path_fmt_cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (grouping_treeref &&
|
||||
|
|
@ -290,7 +290,7 @@ expand_dbvar(void *h,
|
|||
cv = cvec_i(argv, 2);
|
||||
str = cv_string_get(cv);
|
||||
if (strncmp(str, "mtpoint:", strlen("mtpoint:")) != 0){
|
||||
clicon_err(OE_PLUGIN, 0, "mtpoint does not begin with 'mtpoint:'");
|
||||
clixon_err(OE_PLUGIN, 0, "mtpoint does not begin with 'mtpoint:'");
|
||||
goto done;
|
||||
}
|
||||
mtpoint = str + strlen("mtpoint:");
|
||||
|
|
@ -320,8 +320,7 @@ expand_dbvar(void *h,
|
|||
if ((ret = api_path2xml(api_path, yspec, xtop, YC_DATANODE, 0, &xbot, &y, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
// XXX cf cli_dbxml
|
||||
clixon_netconf_error(h, xerr, "Expand datastore symbol", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Expand datastore symbol");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -331,7 +330,7 @@ expand_dbvar(void *h,
|
|||
if (api_path2xpath(api_path, yspec, &xpath, &nsc, NULL) < 0)
|
||||
goto done;
|
||||
if ((cbxpath = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (mtpoint){
|
||||
|
|
@ -372,7 +371,7 @@ expand_dbvar(void *h,
|
|||
* the "path" statement is defined.
|
||||
*/
|
||||
if ((ypath = yang_find(ytype, Y_PATH, NULL)) == NULL){
|
||||
clicon_err(OE_DB, 0, "Leafref %s requires path statement", yang_argument_get(ytype));
|
||||
clixon_err(OE_DB, 0, "Leafref %s requires path statement", yang_argument_get(ytype));
|
||||
goto done;
|
||||
}
|
||||
/* Extend xpath with leafref path: Append yang_argument_get(ypath) to xpath
|
||||
|
|
@ -384,7 +383,7 @@ expand_dbvar(void *h,
|
|||
if (clicon_rpc_get_config(h, NULL, dbstr, cbuf_get(cbxpath), nsc, NULL, &xt) < 0)
|
||||
goto done;
|
||||
if ((xe = xpath_first(xt, NULL, "/rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xe, "Get configuration", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto ok;
|
||||
}
|
||||
if (xpath_vec(xt, nsc, "%s", &xvec, &xlen, cbuf_get(cbxpath)) < 0)
|
||||
|
|
@ -462,7 +461,7 @@ expand_dbvar(void *h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
show_yang(clicon_handle h,
|
||||
show_yang(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -508,7 +507,7 @@ show_yang(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
cli_show_common(clicon_handle h,
|
||||
cli_show_common(clixon_handle h,
|
||||
char *db,
|
||||
enum format_enum format,
|
||||
int pretty,
|
||||
|
|
@ -531,7 +530,7 @@ cli_show_common(clicon_handle h,
|
|||
int i;
|
||||
|
||||
if (state && strcmp(db, "running") != 0){
|
||||
clicon_err(OE_FATAL, 0, "Show state only for running database, not %s", db);
|
||||
clixon_err(OE_FATAL, 0, "Show state only for running database, not %s", db);
|
||||
goto done;
|
||||
}
|
||||
if (state == 0){ /* Get configuration-only from a database */
|
||||
|
|
@ -543,7 +542,7 @@ cli_show_common(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if ((xerr = xpath_first(xt, NULL, "/rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
/* Special tagged modes: strip wd:default=true attribute and (optionally) nodes associated with it */
|
||||
|
|
@ -640,7 +639,7 @@ cli_show_option_format(cvec *argv,
|
|||
|
||||
formatstr = cv_string_get(cvec_i(argv, argc));
|
||||
if ((int)(*format = format_str2int(formatstr)) < 0){
|
||||
clicon_err(OE_PLUGIN, 0, "Not valid format: %s", formatstr);
|
||||
clixon_err(OE_PLUGIN, 0, "Not valid format: %s", formatstr);
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -668,11 +667,11 @@ cli_show_option_bool(cvec *argv,
|
|||
|
||||
boolstr = cv_string_get(cvec_i(argv, argc));
|
||||
if ((boolcv = cv_new(CGV_BOOL)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cv_new");
|
||||
clixon_err(OE_UNIX, errno, "cv_new");
|
||||
goto done;
|
||||
}
|
||||
if (cv_parse(boolstr, boolcv) < 0){
|
||||
clicon_err(OE_UNIX, errno, "Parse boolean %s", boolstr);
|
||||
clixon_err(OE_UNIX, errno, "Parse boolean %s", boolstr);
|
||||
goto done;
|
||||
}
|
||||
*result = cv_bool_get(boolcv);
|
||||
|
|
@ -719,7 +718,7 @@ cli_show_option_withdefault(cvec *argv,
|
|||
strcmp(e, "trim") != 0 &&
|
||||
strcmp(e, "explicit") != 0 &&
|
||||
strcmp(e, "report-all-tagged") != 0){
|
||||
clicon_err(OE_YANG, EINVAL, "Unexpected with-default option: %s", e);
|
||||
clixon_err(OE_YANG, EINVAL, "Unexpected with-default option: %s", e);
|
||||
goto done;
|
||||
}
|
||||
else
|
||||
|
|
@ -765,7 +764,7 @@ cli_show_option_withdefault(cvec *argv,
|
|||
* @see cli_show_auto_mode autocli with edit menu support
|
||||
*/
|
||||
int
|
||||
cli_show_config(clicon_handle h,
|
||||
cli_show_config(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -784,7 +783,7 @@ cli_show_config(clicon_handle h,
|
|||
int fromroot = 0;
|
||||
|
||||
if (cvec_len(argv) < 2 || cvec_len(argv) > 8){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <dbname> [<format><xpath> <namespace> <pretty> <state> <default> <prepend>]", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <dbname> [<format><xpath> <namespace> <pretty> <state> <default> <prepend>]", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
dbname = cv_string_get(cvec_i(argv, argc++));
|
||||
|
|
@ -838,7 +837,7 @@ cli_show_config(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
show_conf_xpath(clicon_handle h,
|
||||
show_conf_xpath(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -851,17 +850,17 @@ show_conf_xpath(clicon_handle h,
|
|||
int fromroot = 0;
|
||||
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires one element to be <dbname>");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires one element to be <dbname>");
|
||||
goto done;
|
||||
}
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
dbname = cv_string_get(cvec_i(argv, 0));
|
||||
/* Look for xpath in command (kludge: cv must be called "xpath") */
|
||||
if ((cv = cvec_find(cvv, "xpath")) == NULL){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires one variable to be <xpath>");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Requires one variable to be <xpath>");
|
||||
goto done;
|
||||
}
|
||||
xpath = cv_string_get(cv);
|
||||
|
|
@ -887,7 +886,7 @@ done:
|
|||
/*! Show clixon and CLIgen versions
|
||||
*/
|
||||
int
|
||||
cli_show_version(clicon_handle h,
|
||||
cli_show_version(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -936,7 +935,7 @@ cli_show_version(clicon_handle h,
|
|||
* @see cli_callback_generate where api_path_fmt + mt-point are generated
|
||||
*/
|
||||
int
|
||||
cli_show_auto(clicon_handle h,
|
||||
cli_show_auto(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -961,7 +960,7 @@ cli_show_auto(clicon_handle h,
|
|||
int fromroot = 0;
|
||||
|
||||
if (cvec_len(argv) < 2 || cvec_len(argv) > 9){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected:: <api-path-fmt>* <database> [<format> <pretty> <state> <default> <prepend> <fromroot>]", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected:: <api-path-fmt>* <database> [<format> <pretty> <state> <default> <prepend> <fromroot>]", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
api_path_fmt = cv_string_get(cvec_i(argv, argc++));
|
||||
|
|
@ -997,7 +996,7 @@ cli_show_auto(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if ((yspec0 = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if (mtpoint){
|
||||
|
|
@ -1014,7 +1013,7 @@ cli_show_auto(clicon_handle h,
|
|||
if (api_path2xpath(api_path, yspec0, &xpath, &nsc, NULL) < 0)
|
||||
goto done;
|
||||
if (xpath == NULL){
|
||||
clicon_err(OE_FATAL, 0, "Invalid api-path: %s", api_path);
|
||||
clixon_err(OE_FATAL, 0, "Invalid api-path: %s", api_path);
|
||||
goto done;
|
||||
}
|
||||
if (cli_show_common(h, dbname, format, pretty, state,
|
||||
|
|
@ -1069,7 +1068,7 @@ code
|
|||
* @see cli_show_config with no autocli coupling
|
||||
*/
|
||||
int
|
||||
cli_show_auto_mode(clicon_handle h,
|
||||
cli_show_auto_mode(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1096,11 +1095,11 @@ cli_show_auto_mode(clicon_handle h,
|
|||
int fromroot = 0;
|
||||
|
||||
if (cvec_len(argv) < 2 || cvec_len(argv) > 7){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <database> [ <format> <pretty> <state> <default> <cli-prefix>]", cvec_len(argv));
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: <database> [ <format> <pretty> <state> <default> <cli-prefix>]", cvec_len(argv));
|
||||
goto done;
|
||||
}
|
||||
if ((yspec0 = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
dbname = cv_string_get(cvec_i(argv, argc++));
|
||||
|
|
@ -1140,11 +1139,11 @@ cli_show_auto_mode(clicon_handle h,
|
|||
if (api_path2xpath(api_path, yspec, &xpath, &nsc, NULL) < 0)
|
||||
goto done;
|
||||
if (xpath == NULL){
|
||||
clicon_err(OE_FATAL, 0, "Invalid api-path: %s", api_path);
|
||||
clixon_err(OE_FATAL, 0, "Invalid api-path: %s", api_path);
|
||||
goto done;
|
||||
}
|
||||
if ((cbxpath = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (mtpoint){
|
||||
|
|
@ -1184,7 +1183,7 @@ cli_show_auto_mode(clicon_handle h,
|
|||
'* @see clicon_option_dump clicon_option_dump1
|
||||
*/
|
||||
int
|
||||
cli_show_options(clicon_handle h,
|
||||
cli_show_options(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1248,7 +1247,7 @@ cli_show_options(clicon_handle h,
|
|||
* Also, if there is a cligen variable called "xpath" it will override argv xpath arg
|
||||
*/
|
||||
int
|
||||
cli_pagination(clicon_handle h,
|
||||
cli_pagination(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1272,7 +1271,7 @@ cli_pagination(clicon_handle h,
|
|||
int locked = 0;
|
||||
|
||||
if (cvec_len(argv) != 5){
|
||||
clicon_err(OE_PLUGIN, 0, "Expected usage: <xpath> <prefix> <namespace> <format> <limit>");
|
||||
clixon_err(OE_PLUGIN, 0, "Expected usage: <xpath> <prefix> <namespace> <format> <limit>");
|
||||
goto done;
|
||||
}
|
||||
/* prefix:variable overrides argv */
|
||||
|
|
@ -1284,17 +1283,17 @@ cli_pagination(clicon_handle h,
|
|||
namespace = cvec_i_str(argv, 2);
|
||||
str = cv_string_get(cvec_i(argv, 3)); /* Fourthformat: output format */
|
||||
if ((int)(format = format_str2int(str)) < 0){
|
||||
clicon_err(OE_PLUGIN, 0, "Not valid format: %s", str);
|
||||
clixon_err(OE_PLUGIN, 0, "Not valid format: %s", str);
|
||||
goto done;
|
||||
}
|
||||
if ((str = cv_string_get(cvec_i(argv, 4))) != NULL){
|
||||
if (parse_uint32(str, &limit, NULL) < 1){
|
||||
clicon_err(OE_UNIX, errno, "error parsing limit:%s", str);
|
||||
clixon_err(OE_UNIX, errno, "error parsing limit:%s", str);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if (limit == 0){
|
||||
clicon_err(OE_UNIX, EINVAL, "limit is 0");
|
||||
clixon_err(OE_UNIX, EINVAL, "limit is 0");
|
||||
goto done;
|
||||
}
|
||||
if ((nsc = xml_nsctx_init(prefix, namespace)) == NULL)
|
||||
|
|
@ -1314,7 +1313,7 @@ cli_pagination(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if ((xerr = xpath_first(xret, NULL, "/rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
if (xpath_vec(xret, nsc, "%s", &xvec, &xlen, xpath) < 0)
|
||||
|
|
@ -1386,7 +1385,7 @@ cli_pagination(clicon_handle h,
|
|||
* @see clixon_cli2file
|
||||
*/
|
||||
static int
|
||||
cli2cbuf(clicon_handle h,
|
||||
cli2cbuf(clixon_handle h,
|
||||
cbuf *cb,
|
||||
cxobj *xn,
|
||||
char *prepend)
|
||||
|
|
@ -1435,7 +1434,7 @@ cli2cbuf(clicon_handle h,
|
|||
}
|
||||
/* Create prepend variable string */
|
||||
if ((cbpre = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (prepend)
|
||||
|
|
@ -1514,7 +1513,7 @@ cli2cbuf(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
cli2file(clicon_handle h,
|
||||
cli2file(clixon_handle h,
|
||||
FILE *f,
|
||||
cxobj *xn,
|
||||
char *prepend,
|
||||
|
|
@ -1564,7 +1563,7 @@ cli2file(clicon_handle h,
|
|||
}
|
||||
/* Create prepend variable string */
|
||||
if ((cbpre = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (prepend)
|
||||
|
|
@ -1645,7 +1644,7 @@ cli2file(clicon_handle h,
|
|||
* @see clixon_cli2cbuf
|
||||
*/
|
||||
int
|
||||
clixon_cli2file(clicon_handle h,
|
||||
clixon_cli2file(clixon_handle h,
|
||||
FILE *f,
|
||||
cxobj *xn,
|
||||
char *prepend,
|
||||
|
|
@ -1687,7 +1686,7 @@ clixon_cli2file(clicon_handle h,
|
|||
* @see clixon_cli2file
|
||||
*/
|
||||
int
|
||||
clixon_cli2cbuf(clicon_handle h,
|
||||
clixon_cli2cbuf(clixon_handle h,
|
||||
cbuf *cb,
|
||||
cxobj *xn,
|
||||
char *prepend,
|
||||
|
|
@ -1714,7 +1713,7 @@ clixon_cli2cbuf(clicon_handle h,
|
|||
/*! CLI callback show statistics
|
||||
*/
|
||||
int
|
||||
cli_show_statistics(clicon_handle h,
|
||||
cli_show_statistics(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -1730,7 +1729,7 @@ cli_show_statistics(clicon_handle h,
|
|||
size_t sz = 0;
|
||||
|
||||
if (argv != NULL && cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Expected arguments: [modules]");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Expected arguments: [modules]");
|
||||
goto done;
|
||||
}
|
||||
if (argv){
|
||||
|
|
@ -1738,7 +1737,7 @@ cli_show_statistics(clicon_handle h,
|
|||
modules = (strcmp(cv_string_get(cv), "modules") == 0);
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* CLI */
|
||||
|
|
@ -1764,7 +1763,7 @@ cli_show_statistics(clicon_handle h,
|
|||
if (clicon_rpc_netconf(h, cbuf_get(cb), &xret, NULL) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xret, NULL, "//rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
fprintf(stdout, "Backend:\n");
|
||||
|
|
|
|||
|
|
@ -53,17 +53,17 @@ extern "C" {
|
|||
*
|
||||
* @see plginit_t
|
||||
*/
|
||||
int plugin_init(clicon_handle h);
|
||||
int plugin_init(clixon_handle h);
|
||||
|
||||
/* Called when backend started with cmd-line arguments from daemon call.
|
||||
* @see plgstart_t
|
||||
*/
|
||||
int plugin_start(clicon_handle h, int argc, char **argv);
|
||||
int plugin_start(clixon_handle h, int argc, char **argv);
|
||||
|
||||
/* Called just before plugin unloaded.
|
||||
* @see plgexit_t
|
||||
*/
|
||||
int plugin_exit(clicon_handle h);
|
||||
int plugin_exit(clixon_handle h);
|
||||
|
||||
#endif /* _CLIXON_CLI_H_ */
|
||||
|
||||
|
|
|
|||
|
|
@ -63,21 +63,21 @@ typedef enum autocli_listkw autocli_listkw_t;
|
|||
* Function Declarations
|
||||
*/
|
||||
/* cli_plugin.c */
|
||||
int cli_set_syntax_mode(clicon_handle h, char *mode);
|
||||
char *cli_syntax_mode(clicon_handle h);
|
||||
int clispec_load(clicon_handle h);
|
||||
int cli_set_syntax_mode(clixon_handle h, char *mode);
|
||||
char *cli_syntax_mode(clixon_handle h);
|
||||
int clispec_load(clixon_handle h);
|
||||
int cli_handler_err(FILE *fd);
|
||||
int cli_set_prompt(clicon_handle h, char *mode, char *prompt);
|
||||
int cli_ptpush(clicon_handle h, char *mode, char *string, char *op);
|
||||
int cli_ptpop(clicon_handle h, char *mode, char *op);
|
||||
int cli_set_prompt(clixon_handle h, char *mode, char *prompt);
|
||||
int cli_ptpush(clixon_handle h, char *mode, char *string, char *op);
|
||||
int cli_ptpop(clixon_handle h, char *mode, char *op);
|
||||
|
||||
/* cli_handle.c */
|
||||
clicon_handle cli_handle_init(void);
|
||||
int cli_handle_exit(clicon_handle h);
|
||||
cligen_handle cli_cligen(clicon_handle h);
|
||||
clixon_handle cli_handle_init(void);
|
||||
int cli_handle_exit(clixon_handle h);
|
||||
cligen_handle cli_cligen(clixon_handle h);
|
||||
|
||||
/* cli_common.c */
|
||||
int cli_notification_register(clicon_handle h, char *stream, enum format_enum format,
|
||||
int cli_notification_register(clixon_handle h, char *stream, enum format_enum format,
|
||||
char *filter, int status,
|
||||
int (*fn)(int, void*), void *arg);
|
||||
|
||||
|
|
@ -85,70 +85,70 @@ int mtpoint_paths(yang_stmt *yspec0, char *mtpoint, char *api_path_fmt1, char **
|
|||
int dbxml_body(cxobj *xbot, cvec *cvv);
|
||||
int identityref_add_ns(cxobj *x, void *arg);
|
||||
|
||||
int cli_dbxml(clicon_handle h, cvec *vars, cvec *argv, enum operation_type op, cvec *nsctx);
|
||||
int cli_set(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_merge(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_create(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_remove(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_del(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_debug_cli(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_debug_backend(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_debug_restconf(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_set_mode(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_start_shell(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_quit(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_commit(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_validate(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int compare_db_names(clicon_handle h, enum format_enum format, char *db1, char *db2);
|
||||
int compare_dbs(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int load_config_file(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int save_config_file(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int delete_all(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int discard_changes(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_notify(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int db_copy(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_lock(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_unlock(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_copy_config(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_help(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_dbxml(clixon_handle h, cvec *vars, cvec *argv, enum operation_type op, cvec *nsctx);
|
||||
int cli_set(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_merge(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_create(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_remove(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_del(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_debug_cli(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_debug_backend(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_debug_restconf(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_set_mode(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_start_shell(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_quit(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_commit(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_validate(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int compare_db_names(clixon_handle h, enum format_enum format, char *db1, char *db2);
|
||||
int compare_dbs(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int load_config_file(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int save_config_file(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int delete_all(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int discard_changes(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_notify(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int db_copy(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_lock(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_unlock(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_copy_config(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_help(clixon_handle h, cvec *vars, cvec *argv);
|
||||
cvec *cvec_append(cvec *cvv0, cvec *cvv1);
|
||||
int cvec_concat_cb(cvec *cvv, cbuf *cb);
|
||||
int cli_process_control(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_process_control(clixon_handle h, cvec *vars, cvec *argv);
|
||||
|
||||
/* In cli_show.c */
|
||||
int expand_dbvar(void *h, char *name, cvec *cvv, cvec *argv,
|
||||
cvec *commands, cvec *helptexts);
|
||||
int clixon_cli2file(clicon_handle h, FILE *f, cxobj *xn, char *prepend, clicon_output_cb *fn, int skiptop);
|
||||
int clixon_cli2cbuf(clicon_handle h, cbuf *cb, cxobj *xn, char *prepend, int skiptop);
|
||||
int clixon_cli2file(clixon_handle h, FILE *f, cxobj *xn, char *prepend, clicon_output_cb *fn, int skiptop);
|
||||
int clixon_cli2cbuf(clixon_handle h, cbuf *cb, cxobj *xn, char *prepend, int skiptop);
|
||||
/* cli_show.c: CLIgen new vector arg callbacks */
|
||||
int cli_show_common(clicon_handle h, char *db, enum format_enum format, int pretty, int state, char *withdefault, char *extdefault, char *prepend, char *xpath, int fromroot, cvec *nsc, int skiptop);
|
||||
int cli_show_common(clixon_handle h, char *db, enum format_enum format, int pretty, int state, char *withdefault, char *extdefault, char *prepend, char *xpath, int fromroot, cvec *nsc, int skiptop);
|
||||
|
||||
int show_yang(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int show_conf_xpath(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int show_yang(clixon_handle h, cvec *vars, cvec *argv);
|
||||
int show_conf_xpath(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_option_format(cvec *argv, int argc, enum format_enum *format);
|
||||
int cli_show_option_bool(cvec *argv, int argc, int *result);
|
||||
int cli_show_option_withdefault(cvec *argv, int argc, char **withdefault, char **extdefault);
|
||||
int cli_show_config(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_config(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
|
||||
int cli_show_config_state(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_config_state(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
|
||||
int cli_show_auto(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_auto(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
|
||||
int cli_show_options(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_version(clicon_handle h, cvec *vars, cvec *argv);
|
||||
int cli_show_options(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_version(clixon_handle h, cvec *vars, cvec *argv);
|
||||
|
||||
/* cli_auto.c: Autocli mode support */
|
||||
|
||||
int cli_auto_edit(clicon_handle h, cvec *cvv1, cvec *argv);
|
||||
int cli_auto_up(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_top(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_auto_mode(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_set(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_merge(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_create(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_del(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_sub_enter(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_edit(clixon_handle h, cvec *cvv1, cvec *argv);
|
||||
int cli_auto_up(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_top(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_show_auto_mode(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_set(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_merge(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_create(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_del(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_auto_sub_enter(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
|
||||
int cli_pagination(clicon_handle h, cvec *cvv, cvec *argv);
|
||||
int cli_pagination(clixon_handle h, cvec *cvv, cvec *argv);
|
||||
|
||||
#endif /* _CLIXON_CLI_API_H_ */
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "netconf_rpc.h"
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
//#include "clixon_netconf.h"
|
||||
|
|
@ -145,7 +145,7 @@ netconf_add_request_attr(cxobj *xrpc,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
netconf_hello_msg(clicon_handle h,
|
||||
netconf_hello_msg(clixon_handle h,
|
||||
cxobj *xn,
|
||||
int *eof)
|
||||
{
|
||||
|
|
@ -162,7 +162,7 @@ netconf_hello_msg(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
_netconf_hello_nr++;
|
||||
if (xml_find_type(xn, NULL, "session-id", CX_ELMNT) != NULL) {
|
||||
clicon_err(OE_XML, errno, "Server received hello with session-id from client, terminating (see RFC 6241 Sec 8.1");
|
||||
clixon_err(OE_XML, errno, "Server received hello with session-id from client, terminating (see RFC 6241 Sec 8.1");
|
||||
goto done;
|
||||
}
|
||||
if (xpath_vec(xn, nsc, "capabilities/capability", &vec, &veclen) < 0)
|
||||
|
|
@ -190,7 +190,7 @@ netconf_hello_msg(clicon_handle h,
|
|||
}
|
||||
}
|
||||
if (foundbase_10 == 0 && foundbase_11 == 0){
|
||||
clicon_err(OE_XML, errno, "Server received hello without matching netconf base capability, terminating (see RFC 6241 Sec 8.1");
|
||||
clixon_err(OE_XML, errno, "Server received hello without matching netconf base capability, terminating (see RFC 6241 Sec 8.1");
|
||||
*eof = 1;
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -211,7 +211,7 @@ netconf_hello_msg(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
netconf_rpc_message(clicon_handle h,
|
||||
netconf_rpc_message(clixon_handle h,
|
||||
cxobj *xrpc,
|
||||
yang_stmt *yspec,
|
||||
int *eof)
|
||||
|
|
@ -232,7 +232,7 @@ netconf_rpc_message(clicon_handle h,
|
|||
if (netconf_add_request_attr(xrpc, xret) < 0)
|
||||
goto done;
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cbret, xret, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -253,7 +253,7 @@ netconf_rpc_message(clicon_handle h,
|
|||
if (netconf_add_request_attr(xrpc, xret) < 0)
|
||||
goto done;
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cbret, xret, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -274,7 +274,7 @@ netconf_rpc_message(clicon_handle h,
|
|||
if (netconf_add_request_attr(xrpc, xret) < 0)
|
||||
goto done;
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cbret, xret, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -290,7 +290,7 @@ netconf_rpc_message(clicon_handle h,
|
|||
if (netconf_add_request_attr(xrpc, xc) < 0)
|
||||
goto done;
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cbret, xml_child_i(xret,0), 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -321,7 +321,7 @@ netconf_rpc_message(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
netconf_input_packet(clicon_handle h,
|
||||
netconf_input_packet(clixon_handle h,
|
||||
cxobj *xreq,
|
||||
yang_stmt *yspec,
|
||||
int *eof)
|
||||
|
|
@ -349,7 +349,7 @@ netconf_input_packet(clicon_handle h,
|
|||
if (netconf_add_request_attr(xreq, xret) < 0)
|
||||
goto done;
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cbret, xret, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -367,7 +367,7 @@ netconf_input_packet(clicon_handle h,
|
|||
/* Only accept resolved NETCONF base namespace -> terminate*/
|
||||
if (namespace == NULL || strcmp(namespace, NETCONF_BASE_NAMESPACE) != 0){
|
||||
*eof = 1;
|
||||
clicon_err(OE_XML, EFAULT, "No appropriate namespace associated with namespace:%s",
|
||||
clixon_err(OE_XML, EFAULT, "No appropriate namespace associated with namespace:%s",
|
||||
namespace);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -376,7 +376,7 @@ netconf_input_packet(clicon_handle h,
|
|||
}
|
||||
else{ /* Shouldnt happen should be caught by yang bind check in netconf_input_frame */
|
||||
*eof = 1;
|
||||
clicon_err(OE_NETCONF, 0, "Unrecognized netconf operation %s", rpcname);
|
||||
clixon_err(OE_NETCONF, 0, "Unrecognized netconf operation %s", rpcname);
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -408,7 +408,7 @@ netconf_input_cb(int s,
|
|||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h = arg;
|
||||
clixon_handle h = arg;
|
||||
cbuf *cbmsg=NULL;
|
||||
cbuf *cberr = NULL;
|
||||
void *ptr;
|
||||
|
|
@ -435,7 +435,7 @@ netconf_input_cb(int s,
|
|||
/* Get unfinished frame */
|
||||
if ((ptr = clicon_hash_value(cdat, NETCONF_FRAME_MSG, &cdatlen)) != NULL){
|
||||
if (cdatlen != sizeof(cbmsg)){
|
||||
clicon_err(OE_XML, errno, "size mismatch %lu %lu",
|
||||
clixon_err(OE_XML, errno, "size mismatch %lu %lu",
|
||||
(unsigned long)cdatlen, (unsigned long)sizeof(cbmsg));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -444,7 +444,7 @@ netconf_input_cb(int s,
|
|||
}
|
||||
else{
|
||||
if ((cbmsg = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -482,7 +482,7 @@ netconf_input_cb(int s,
|
|||
cbuf_reset(cbmsg);
|
||||
if (ret == 0){ /* Invalid frame, parse error, etc */
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cberr, xerr, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -498,7 +498,7 @@ netconf_input_cb(int s,
|
|||
}
|
||||
else {
|
||||
if ((xreq = xml_child_i_type(xtop, 0, CX_ELMNT)) == NULL){
|
||||
clicon_err(OE_XML, EFAULT, "No xml req (shouldnt happen)");
|
||||
clixon_err(OE_XML, EFAULT, "No xml req (shouldnt happen)");
|
||||
goto done;
|
||||
}
|
||||
if (netconf_input_packet(h, xreq, yspec, &eof) < 0){
|
||||
|
|
@ -541,7 +541,7 @@ netconf_input_cb(int s,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
send_hello(clicon_handle h,
|
||||
send_hello(clixon_handle h,
|
||||
int s,
|
||||
uint32_t id)
|
||||
{
|
||||
|
|
@ -550,7 +550,7 @@ send_hello(clicon_handle h,
|
|||
netconf_framing_type framing;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_log(LOG_ERR, "%s: cbuf_new", __FUNCTION__);
|
||||
clixon_log(h, LOG_ERR, "%s: cbuf_new", __FUNCTION__);
|
||||
goto done;
|
||||
}
|
||||
if (netconf_hello_server(h, cb, id) < 0)
|
||||
|
|
@ -573,7 +573,7 @@ send_hello(clicon_handle h,
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
static int
|
||||
netconf_terminate(clicon_handle h)
|
||||
netconf_terminate(clixon_handle h)
|
||||
{
|
||||
yang_stmt *yspec;
|
||||
cvec *nsctx;
|
||||
|
|
@ -594,22 +594,21 @@ netconf_terminate(clicon_handle h)
|
|||
xml_free(x);
|
||||
xpath_optimize_exit();
|
||||
clixon_event_exit();
|
||||
clicon_handle_exit(h);
|
||||
clixon_handle_exit(h);
|
||||
clixon_err_exit();
|
||||
clicon_log_exit();
|
||||
clixon_log_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*! Setup signal handlers
|
||||
*/
|
||||
static int
|
||||
netconf_signal_init (clicon_handle h)
|
||||
netconf_signal_init (clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
if (set_signal(SIGPIPE, SIG_IGN, NULL) < 0){
|
||||
clicon_err(OE_UNIX, errno, "Setting DIGPIPE signal");
|
||||
clixon_err(OE_UNIX, errno, "Setting DIGPIPE signal");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -621,7 +620,7 @@ static int
|
|||
timeout_fn(int s,
|
||||
void *arg)
|
||||
{
|
||||
clicon_err(OE_EVENTS, ETIMEDOUT, "User request timeout");
|
||||
clixon_err(OE_EVENTS, ETIMEDOUT, "User request timeout");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -631,7 +630,7 @@ timeout_fn(int s,
|
|||
* @param[in] argv0 command line
|
||||
*/
|
||||
static void
|
||||
usage(clicon_handle h,
|
||||
usage(clixon_handle h,
|
||||
char *argv0)
|
||||
{
|
||||
fprintf(stderr, "usage:%s\n"
|
||||
|
|
@ -669,9 +668,9 @@ main(int argc,
|
|||
int c;
|
||||
char *argv0 = argv[0];
|
||||
int quiet = 0;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
char *dir;
|
||||
int logdst = CLICON_LOG_SYSLOG;
|
||||
int logdst = CLIXON_LOG_SYSLOG;
|
||||
struct passwd *pw;
|
||||
struct timeval tv = {0,}; /* timeout */
|
||||
yang_stmt *yspec = NULL;
|
||||
|
|
@ -687,14 +686,16 @@ main(int argc,
|
|||
int print_version = 0;
|
||||
|
||||
/* Create handle */
|
||||
if ((h = clicon_handle_init()) == NULL)
|
||||
if ((h = clixon_handle_init()) == NULL)
|
||||
return -1;
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, logdst);
|
||||
|
||||
if (clixon_log_init(h, __PROGRAM__, LOG_INFO, logdst) < 0)
|
||||
return -1;
|
||||
if (clixon_err_init(h) < 0)
|
||||
return -1;
|
||||
/* Set username to clixon handle. Use in all communication to backend */
|
||||
if ((pw = getpwuid(getuid())) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "getpwuid");
|
||||
clixon_err(OE_UNIX, errno, "getpwuid");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_username_set(h, pw->pw_name) < 0)
|
||||
|
|
@ -723,11 +724,11 @@ main(int argc,
|
|||
clicon_option_str_set(h, "CLICON_CONFIGDIR", optarg);
|
||||
break;
|
||||
case 'l': /* Log destination: s|e|o */
|
||||
if ((logdst = clicon_log_opt(optarg[0])) < 0)
|
||||
if ((logdst = clixon_log_opt(optarg[0])) < 0)
|
||||
usage(h, argv[0]);
|
||||
if (logdst == CLICON_LOG_FILE &&
|
||||
if (logdst == CLIXON_LOG_FILE &&
|
||||
strlen(optarg)>1 &&
|
||||
clicon_log_file(optarg+1) < 0)
|
||||
clixon_log_file(optarg+1) < 0)
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -735,8 +736,8 @@ main(int argc,
|
|||
/*
|
||||
* Logs, error and debug to stderr or syslog, set debug level
|
||||
*/
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(h, dbg);
|
||||
yang_init(h);
|
||||
|
||||
/* Find, read and parse configfile */
|
||||
|
|
@ -832,7 +833,7 @@ main(int argc,
|
|||
cbuf_alloc_set(cligen_buflen, cligen_bufthreshold);
|
||||
|
||||
if ((sz = clicon_option_int(h, "CLICON_LOG_STRING_LIMIT")) != 0)
|
||||
clicon_log_string_limit_set(sz);
|
||||
clixon_log_string_limit_set(sz);
|
||||
|
||||
/* Set default namespace according to CLICON_NAMESPACE_NETCONF_DEFAULT */
|
||||
xml_nsctx_namespace_netconf_default(h);
|
||||
|
|
@ -954,7 +955,7 @@ main(int argc,
|
|||
retval = 0;
|
||||
clixon_exit_set(1); /* This is to disable resend mechanism in close-session */
|
||||
netconf_terminate(h);
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, 0); /* Log on syslog no stderr */
|
||||
clicon_log(LOG_NOTICE, "%s: %u Terminated", __PROGRAM__, getpid());
|
||||
clixon_log_init(h, __PROGRAM__, LOG_INFO, 0); /* Log on syslog no stderr */
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u Terminated", __PROGRAM__, getpid());
|
||||
return retval;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "netconf_filter.h"
|
||||
|
|
@ -80,7 +80,7 @@
|
|||
*/
|
||||
|
||||
static int
|
||||
netconf_get_config_subtree(clicon_handle h,
|
||||
netconf_get_config_subtree(clixon_handle h,
|
||||
cxobj *xfilter,
|
||||
cxobj **xret)
|
||||
{
|
||||
|
|
@ -158,7 +158,7 @@ ok:
|
|||
<rpc><get-config><source><candidate/></source><filter type="xpath" select="/interfaces/interface/ipv4"/></get-config></rpc>]]>]]>
|
||||
*/
|
||||
static int
|
||||
netconf_get_config(clicon_handle h,
|
||||
netconf_get_config(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret)
|
||||
{
|
||||
|
|
@ -321,7 +321,7 @@ CLIXON addition:
|
|||
* @note erropt, testopt only supports default
|
||||
*/
|
||||
static int
|
||||
netconf_edit_config(clicon_handle h,
|
||||
netconf_edit_config(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret)
|
||||
{
|
||||
|
|
@ -371,7 +371,7 @@ netconf_edit_config(clicon_handle h,
|
|||
* </get></rpc>]]>]]>
|
||||
*/
|
||||
static int
|
||||
netconf_get(clicon_handle h,
|
||||
netconf_get(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret)
|
||||
{
|
||||
|
|
@ -453,7 +453,7 @@ netconf_notification_cb(int s,
|
|||
cbuf *cb = NULL;
|
||||
cxobj *xn = NULL; /* event xml */
|
||||
cxobj *xt = NULL; /* top xml */
|
||||
clicon_handle h = (clicon_handle)arg;
|
||||
clixon_handle h = (clixon_handle)arg;
|
||||
yang_stmt *yspec = NULL;
|
||||
cvec *nsc = NULL;
|
||||
int ret;
|
||||
|
|
@ -465,7 +465,7 @@ netconf_notification_cb(int s,
|
|||
goto done;
|
||||
/* handle close from remote end: this will exit the client */
|
||||
if (eof){
|
||||
clicon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
clixon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
close(s);
|
||||
errno = ESHUTDOWN;
|
||||
clixon_event_unreg_fd(s, netconf_notification_cb);
|
||||
|
|
@ -475,7 +475,7 @@ netconf_notification_cb(int s,
|
|||
if ((ret = clicon_msg_decode(reply, yspec, NULL, &xt, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){ /* XXX use xerr */
|
||||
clicon_err(OE_NETCONF, EFAULT, "Notification malformed");
|
||||
clixon_err(OE_NETCONF, EFAULT, "Notification malformed");
|
||||
goto done;
|
||||
}
|
||||
if ((nsc = xml_nsctx_init(NULL, NETCONF_NOTIFICATION_NAMESPACE)) == NULL)
|
||||
|
|
@ -484,7 +484,7 @@ netconf_notification_cb(int s,
|
|||
goto ok;
|
||||
/* create netconf message */
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cb, xn, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -494,7 +494,7 @@ netconf_notification_cb(int s,
|
|||
goto done;
|
||||
}
|
||||
if (netconf_output(1, cb, "notification") < 0){
|
||||
clicon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
clixon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
close(s);
|
||||
errno = ESHUTDOWN;
|
||||
clixon_event_unreg_fd(s, netconf_notification_cb);
|
||||
|
|
@ -532,7 +532,7 @@ netconf_notification_cb(int s,
|
|||
* @see netconf_notification_cb for asynchronous stream notifications
|
||||
*/
|
||||
static int
|
||||
netconf_create_subscription(clicon_handle h,
|
||||
netconf_create_subscription(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret)
|
||||
{
|
||||
|
|
@ -585,7 +585,7 @@ netconf_create_subscription(clicon_handle h,
|
|||
* @see netconf_input_packet Assume bind and validation made there
|
||||
*/
|
||||
static int
|
||||
netconf_application_rpc(clicon_handle h,
|
||||
netconf_application_rpc(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret)
|
||||
{
|
||||
|
|
@ -603,17 +603,17 @@ netconf_application_rpc(clicon_handle h,
|
|||
|
||||
/* First check system / netconf RPC:s */
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cbuf_new");
|
||||
clixon_err(OE_UNIX, 0, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cbuf_new");
|
||||
clixon_err(OE_UNIX, 0, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Find yang rpc statement, return yang rpc statement if found
|
||||
Check application RPC */
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
cbuf_reset(cb);
|
||||
|
|
@ -666,7 +666,7 @@ netconf_application_rpc(clicon_handle h,
|
|||
if (ret == 0){
|
||||
if (clixon_xml2cbuf(cbret, xerr, 0, 0, NULL, -1, 0) < 0)
|
||||
goto done;
|
||||
clicon_log(LOG_WARNING, "Errors in output netconf %s", cbuf_get(cbret));
|
||||
clixon_log(h, LOG_WARNING, "Errors in output netconf %s", cbuf_get(cbret));
|
||||
goto ok;
|
||||
}
|
||||
}
|
||||
|
|
@ -697,7 +697,7 @@ netconf_application_rpc(clicon_handle h,
|
|||
* @retval -1 Error, fatal
|
||||
*/
|
||||
int
|
||||
netconf_rpc_dispatch(clicon_handle h,
|
||||
netconf_rpc_dispatch(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret,
|
||||
int *eof)
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
* Prototypes
|
||||
*/
|
||||
int
|
||||
netconf_rpc_dispatch(clicon_handle h,
|
||||
netconf_rpc_dispatch(clixon_handle h,
|
||||
cxobj *xn,
|
||||
cxobj **xret,
|
||||
int *eof);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
*/
|
||||
struct clixon_http1_yacc {
|
||||
const char *hy_name; /* Name of syntax (for error string) */
|
||||
clicon_handle hy_h; /* Clixon handle */
|
||||
clixon_handle hy_h; /* Clixon handle */
|
||||
restconf_conn *hy_rc; /* Connection handle */
|
||||
int hy_linenum; /* Number of \n in parsed buffer */
|
||||
char *hy_parse_string; /* original (copy of) parse string */
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@
|
|||
/* typecast macro */
|
||||
#define _HY ((clixon_http1_yacc *)_hy)
|
||||
|
||||
#define _YYERROR(msg) {clicon_err(OE_XML, 0, "YYERROR %s '%s' %d", (msg), clixon_http1_parsetext, _HY->hy_linenum); YYERROR;}
|
||||
#define _YYERROR(msg) {clixon_err(OE_XML, 0, "YYERROR %s '%s' %d", (msg), clixon_http1_parsetext, _HY->hy_linenum); YYERROR;}
|
||||
|
||||
/* add _yy to error parameters */
|
||||
#define YY_(msgid) msgid
|
||||
|
|
@ -124,7 +124,7 @@ void
|
|||
clixon_http1_parseerror(void *_hy,
|
||||
char *s)
|
||||
{
|
||||
clicon_err(OE_RESTCONF, 0, "%s on line %d: %s at or before: '%s'",
|
||||
clixon_err(OE_RESTCONF, 0, "%s on line %d: %s at or before: '%s'",
|
||||
_HY->hy_name,
|
||||
_HY->hy_linenum,
|
||||
s,
|
||||
|
|
@ -153,7 +153,7 @@ http1_parse_query(clixon_http1_yacc *hy,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s: ?%s ", __FUNCTION__, query);
|
||||
if ((sd = restconf_stream_find(hy->hy_rc, 0)) == NULL){
|
||||
clicon_err(OE_RESTCONF, 0, "stream 0 not found");
|
||||
clixon_err(OE_RESTCONF, 0, "stream 0 not found");
|
||||
goto done;
|
||||
}
|
||||
if (uri_str2cvec(query, '&', '=', 1, &sd->sd_qvec) < 0)
|
||||
|
|
@ -172,11 +172,11 @@ http1_body(clixon_http1_yacc *hy,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s: %s ", __FUNCTION__, body);
|
||||
if ((sd = restconf_stream_find(hy->hy_rc, 0)) == NULL){
|
||||
clicon_err(OE_RESTCONF, 0, "stream 0 not found");
|
||||
clixon_err(OE_RESTCONF, 0, "stream 0 not found");
|
||||
goto done;
|
||||
}
|
||||
if (cbuf_append_buf(sd->sd_indata, body, strlen(body)) < 0){
|
||||
clicon_err(OE_RESTCONF, errno, "cbuf_append_buf");
|
||||
clixon_err(OE_RESTCONF, errno, "cbuf_append_buf");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
/* restconf */
|
||||
|
|
@ -91,7 +91,7 @@ static const map_str2str mime_map[] = {
|
|||
* @retval 0 No, not a data path, or not enabled
|
||||
*/
|
||||
int
|
||||
api_path_is_data(clicon_handle h)
|
||||
api_path_is_data(clixon_handle h)
|
||||
{
|
||||
int retval = 0;
|
||||
char *path = NULL;
|
||||
|
|
@ -124,7 +124,7 @@ api_path_is_data(clicon_handle h)
|
|||
* @see api_return_err
|
||||
*/
|
||||
static int
|
||||
api_http_data_err(clicon_handle h,
|
||||
api_http_data_err(clixon_handle h,
|
||||
void *req,
|
||||
int code)
|
||||
{
|
||||
|
|
@ -133,7 +133,7 @@ api_http_data_err(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (restconf_reply_header(req, "Content-Type", "text/html") < 0)
|
||||
|
|
@ -173,7 +173,7 @@ api_http_data_err(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
http_data_check_file_path(clicon_handle h,
|
||||
http_data_check_file_path(clixon_handle h,
|
||||
void *req,
|
||||
char *prefix,
|
||||
cbuf *cbpath,
|
||||
|
|
@ -188,13 +188,13 @@ http_data_check_file_path(clicon_handle h,
|
|||
FILE *f;
|
||||
|
||||
if (prefix == NULL || cbpath == NULL || fp == NULL){
|
||||
clicon_err(OE_UNIX, EINVAL, "prefix, cbpath0 or fp is NULL");
|
||||
clixon_err(OE_UNIX, EINVAL, "prefix, cbpath0 or fp is NULL");
|
||||
goto done;
|
||||
}
|
||||
p = cbuf_get(cbpath);
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s", __FUNCTION__, p);
|
||||
if (strncmp(prefix, p, strlen(prefix)) != 0){
|
||||
clicon_err(OE_UNIX, EINVAL, "prefix is not prefix of cbpath");
|
||||
clixon_err(OE_UNIX, EINVAL, "prefix is not prefix of cbpath");
|
||||
goto done;
|
||||
}
|
||||
for (i=strlen(prefix); i<strlen(p); i++){
|
||||
|
|
@ -277,7 +277,7 @@ http_data_check_file_path(clicon_handle h,
|
|||
* XXX 1: Buffer copying once too many, see #if 0 below
|
||||
*/
|
||||
static int
|
||||
api_http_data_file(clicon_handle h,
|
||||
api_http_data_file(clixon_handle h,
|
||||
void *req,
|
||||
char *pathname,
|
||||
int head)
|
||||
|
|
@ -298,11 +298,11 @@ api_http_data_file(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((cbfile = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((www_data_root = clicon_option_str(h, "CLICON_HTTP_DATA_ROOT")) == NULL){
|
||||
clicon_err(OE_RESTCONF, ENOENT, "CLICON_HTTP_DATA_ROOT missing");
|
||||
clixon_err(OE_RESTCONF, ENOENT, "CLICON_HTTP_DATA_ROOT missing");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -346,18 +346,18 @@ api_http_data_file(clicon_handle h,
|
|||
}
|
||||
fseek(f, 0, SEEK_SET); /* same as rewind(f); */
|
||||
if ((cbdata = cbuf_new_alloc(fsize+1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new_alloc");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new_alloc");
|
||||
goto done;
|
||||
}
|
||||
/* Unoptimized, no direct read but requires an extra copy,
|
||||
* the cligen buf API should have some mechanism for this case without the extra copy.
|
||||
*/
|
||||
if ((buf = malloc(fsize)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = fread(buf, fsize, 1, f)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "fread");
|
||||
clixon_err(OE_UNIX, errno, "fread");
|
||||
goto done;
|
||||
}
|
||||
sz = (size_t)ret;
|
||||
|
|
@ -368,7 +368,7 @@ api_http_data_file(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if (cbuf_append_buf(cbdata, buf, fsize) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
goto done;
|
||||
}
|
||||
if (restconf_reply_header(req, "Content-Type", "%s", media) < 0)
|
||||
|
|
@ -410,7 +410,7 @@ api_http_data_file(clicon_handle h,
|
|||
* Need to enable clixon-restconf.yang www-data feature
|
||||
*/
|
||||
int
|
||||
api_http_data(clicon_handle h,
|
||||
api_http_data(clixon_handle h,
|
||||
void *req,
|
||||
cvec *qvec)
|
||||
{
|
||||
|
|
@ -459,7 +459,7 @@ api_http_data(clicon_handle h,
|
|||
}
|
||||
/* 4. indata should be NULL (no write operations) */
|
||||
if ((indata = restconf_get_indata(req)) == NULL) {
|
||||
clicon_err(OE_RESTCONF, ENOENT, "Unexpected no input cbuf");
|
||||
clixon_err(OE_RESTCONF, ENOENT, "Unexpected no input cbuf");
|
||||
goto done;
|
||||
}
|
||||
if (cbuf_len(indata)){
|
||||
|
|
@ -474,7 +474,7 @@ api_http_data(clicon_handle h,
|
|||
else if (strcmp(media_str, "*/*") != 0 &&
|
||||
strcmp(media_str, "text/html") != 0){
|
||||
#ifdef NOTYET
|
||||
clicon_log(LOG_NOTICE, "%s: media error %s", __FUNCTION__, media_str);
|
||||
clixon_log(h, LOG_NOTICE, "%s: media error %s", __FUNCTION__, media_str);
|
||||
goto done;
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_path_is_data(clicon_handle h);
|
||||
int api_http_data(clicon_handle h, void *req, cvec *qvec);
|
||||
int api_path_is_data(clixon_handle h);
|
||||
int api_http_data(clixon_handle h, void *req, cvec *qvec);
|
||||
|
||||
#endif /* _CLIXON_HTTP_DATA_H_ */
|
||||
|
|
|
|||
|
|
@ -69,12 +69,12 @@ const char *restconf_code2reason(int code);
|
|||
const restconf_media restconf_media_str2int(char *media);
|
||||
const char *restconf_media_int2str(restconf_media media);
|
||||
int get_user_cookie(char *cookiestr, char *attribute, char **val);
|
||||
int restconf_terminate(clicon_handle h);
|
||||
int restconf_terminate(clixon_handle h);
|
||||
int restconf_insert_attributes(cxobj *xdata, cvec *qvec);
|
||||
int restconf_main_extension_cb(clicon_handle h, yang_stmt *yext, yang_stmt *ys);
|
||||
int restconf_main_extension_cb(clixon_handle h, yang_stmt *yext, yang_stmt *ys);
|
||||
/* also in restconf_handle.h */
|
||||
char *restconf_param_get(clicon_handle h, const char *param);
|
||||
int restconf_param_set(clicon_handle h, const char *param, char *val);
|
||||
char *restconf_param_get(clixon_handle h, const char *param);
|
||||
int restconf_param_set(clixon_handle h, const char *param, char *val);
|
||||
|
||||
#endif /* _CLIXON_RESTCONF_H_ */
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
/* restconf */
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include <fcgiapp.h> /* Need to be after clixon_xml-h due to attribute format */
|
||||
|
|
@ -108,7 +108,7 @@ restconf_reply_header(void *req0,
|
|||
va_list ap;
|
||||
|
||||
if (req == NULL || name == NULL || vfmt == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "req, name or value is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "req, name or value is NULL");
|
||||
return -1;
|
||||
}
|
||||
va_start(ap, vfmt);
|
||||
|
|
@ -116,13 +116,13 @@ restconf_reply_header(void *req0,
|
|||
va_end(ap);
|
||||
/* allocate value string exactly fitting */
|
||||
if ((value = malloc(vlen+1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
/* second round: compute actual value */
|
||||
va_start(ap, vfmt);
|
||||
if (vsnprintf(value, vlen+1, vfmt, ap) < 0){
|
||||
clicon_err(OE_UNIX, errno, "vsnprintf");
|
||||
clixon_err(OE_UNIX, errno, "vsnprintf");
|
||||
va_end(ap);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -158,7 +158,7 @@ restconf_reply_body_add(void *req0,
|
|||
va_list ap;
|
||||
|
||||
if (req == NULL || bfmt == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "req or body is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "req or body is NULL");
|
||||
return -1;
|
||||
}
|
||||
va_start(ap, bfmt);
|
||||
|
|
@ -166,13 +166,13 @@ restconf_reply_body_add(void *req0,
|
|||
va_end(ap);
|
||||
/* allocate body string exactly fitting */
|
||||
if ((body = malloc(blen+1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
/* second round: compute actual body */
|
||||
va_start(ap, bfmt);
|
||||
if (vsnprintf(body, blen+1, bfmt, ap) < 0){
|
||||
clicon_err(OE_UNIX, errno, "vsnprintf");
|
||||
clixon_err(OE_UNIX, errno, "vsnprintf");
|
||||
va_end(ap);
|
||||
goto done;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
|
|
@ -88,11 +88,11 @@ restconf_reply_header(void *req0,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s", __FUNCTION__, name);
|
||||
if (sd == NULL || name == NULL || vfmt == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "sd, name or value is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "sd, name or value is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((rc = sd->sd_conn) == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "rc is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "rc is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* First round: compute vlen and allocate value */
|
||||
|
|
@ -101,19 +101,19 @@ restconf_reply_header(void *req0,
|
|||
va_end(ap);
|
||||
/* allocate value string exactly fitting */
|
||||
if ((value = malloc(vlen+1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
/* Second round: compute actual value */
|
||||
va_start(ap, vfmt);
|
||||
if (vsnprintf(value, vlen+1, vfmt, ap) < 0){
|
||||
clicon_err(OE_UNIX, errno, "vsnprintf");
|
||||
clixon_err(OE_UNIX, errno, "vsnprintf");
|
||||
va_end(ap);
|
||||
goto done;
|
||||
}
|
||||
va_end(ap);
|
||||
if (cvec_add_string(sd->sd_outp_hdrs, (char*)name, value) < 0){
|
||||
clicon_err(OE_RESTCONF, errno, "cvec_add_string");
|
||||
clixon_err(OE_RESTCONF, errno, "cvec_add_string");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -144,7 +144,7 @@ restconf_reply_send(void *req0,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s code:%d", __FUNCTION__, code);
|
||||
if (sd == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "sd is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "sd is NULL");
|
||||
goto done;
|
||||
}
|
||||
sd->sd_code = code;
|
||||
|
|
@ -183,7 +183,7 @@ restconf_get_indata(void *req0)
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if (sd == NULL){
|
||||
clicon_err(OE_CFG, EINVAL, "sd is NULL");
|
||||
clixon_err(OE_CFG, EINVAL, "sd is NULL");
|
||||
goto done;
|
||||
}
|
||||
cb = sd->sd_indata;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
|
|
@ -79,7 +79,7 @@
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_method_notallowed(clicon_handle h,
|
||||
restconf_method_notallowed(clixon_handle h,
|
||||
void *req,
|
||||
char *allow,
|
||||
int pretty,
|
||||
|
|
@ -112,7 +112,7 @@ restconf_method_notallowed(clicon_handle h,
|
|||
* return an error response with a "415 Unsupported Media Type" status-line
|
||||
*/
|
||||
int
|
||||
restconf_unsupported_media(clicon_handle h,
|
||||
restconf_unsupported_media(clixon_handle h,
|
||||
void *req,
|
||||
int pretty,
|
||||
restconf_media media)
|
||||
|
|
@ -142,7 +142,7 @@ restconf_unsupported_media(clicon_handle h,
|
|||
* return an error response with a "406 Not Acceptable" status-line.
|
||||
*/
|
||||
int
|
||||
restconf_not_acceptable(clicon_handle h,
|
||||
restconf_not_acceptable(clixon_handle h,
|
||||
void *req,
|
||||
int pretty,
|
||||
restconf_media media)
|
||||
|
|
@ -166,7 +166,7 @@ restconf_not_acceptable(clicon_handle h,
|
|||
* @param[in] req Generic http handle
|
||||
*/
|
||||
int
|
||||
restconf_notimplemented(clicon_handle h,
|
||||
restconf_notimplemented(clixon_handle h,
|
||||
void *req,
|
||||
int pretty,
|
||||
restconf_media media)
|
||||
|
|
@ -201,7 +201,7 @@ restconf_notimplemented(clicon_handle h,
|
|||
* @note there are special cases see code
|
||||
*/
|
||||
int
|
||||
api_return_err(clicon_handle h,
|
||||
api_return_err(clixon_handle h,
|
||||
void *req,
|
||||
cxobj *xerr,
|
||||
int pretty,
|
||||
|
|
@ -220,7 +220,7 @@ api_return_err(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* A well-formed error message when entering here should look like:
|
||||
|
|
@ -230,7 +230,7 @@ api_return_err(clicon_handle h,
|
|||
if (strcmp(xml_name(xerr), "rpc-error") != 0 ||
|
||||
(xtag = xpath_first(xerr, NULL, "error-tag")) == NULL){
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cberr, "Internal error, system returned invalid error message: ");
|
||||
|
|
@ -240,11 +240,11 @@ api_return_err(clicon_handle h,
|
|||
cbuf_get(cberr)) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xerr2, NULL, "rpc-error")) == NULL){
|
||||
clicon_err(OE_XML, 0, "Internal error, shouldnt happen");
|
||||
clixon_err(OE_XML, 0, "Internal error, shouldnt happen");
|
||||
goto done;
|
||||
}
|
||||
if ((xtag = xpath_first(xerr, NULL, "error-tag")) == NULL){
|
||||
clicon_err(OE_XML, 0, "Internal error, shouldnt happen");
|
||||
clixon_err(OE_XML, 0, "Internal error, shouldnt happen");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -318,7 +318,7 @@ api_return_err(clicon_handle h,
|
|||
}
|
||||
break;
|
||||
default: /* Just ignore the body so that there is a reply */
|
||||
clicon_err(OE_YANG, EINVAL, "Invalid media type %d", media);
|
||||
clixon_err(OE_YANG, EINVAL, "Invalid media type %d", media);
|
||||
goto done;
|
||||
break;
|
||||
} /* switch media */
|
||||
|
|
@ -353,7 +353,7 @@ api_return_err(clicon_handle h,
|
|||
* @see api_return_err where top level is expected to be <rpc-error>
|
||||
*/
|
||||
int
|
||||
api_return_err0(clicon_handle h,
|
||||
api_return_err0(clixon_handle h,
|
||||
void *req,
|
||||
cxobj *xerr,
|
||||
int pretty,
|
||||
|
|
@ -364,7 +364,7 @@ api_return_err0(clicon_handle h,
|
|||
cxobj *xe;
|
||||
|
||||
if ((xe = xpath_first(xerr, NULL, "rpc-error")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "Expected xml on the form <rpc-error>..");
|
||||
clixon_err(OE_XML, EINVAL, "Expected xml on the form <rpc-error>..");
|
||||
goto done;
|
||||
}
|
||||
if (api_return_err(h, req, xe, pretty, media, code) < 0)
|
||||
|
|
|
|||
|
|
@ -43,13 +43,13 @@
|
|||
* Prototypes
|
||||
*/
|
||||
|
||||
int restconf_method_notallowed(clicon_handle h, void *req, char *allow, int pretty, restconf_media media);
|
||||
int restconf_unsupported_media(clicon_handle h, void *req, int pretty, restconf_media media);
|
||||
int restconf_not_acceptable(clicon_handle h, void *req, int pretty, restconf_media media);
|
||||
int restconf_notimplemented(clicon_handle h, void *req, int pretty, restconf_media media);
|
||||
int restconf_method_notallowed(clixon_handle h, void *req, char *allow, int pretty, restconf_media media);
|
||||
int restconf_unsupported_media(clixon_handle h, void *req, int pretty, restconf_media media);
|
||||
int restconf_not_acceptable(clixon_handle h, void *req, int pretty, restconf_media media);
|
||||
int restconf_notimplemented(clixon_handle h, void *req, int pretty, restconf_media media);
|
||||
|
||||
int api_return_err(clicon_handle h, void *req, cxobj *xerr, int pretty, restconf_media media, int code0);
|
||||
int api_return_err0(clicon_handle h, void *req, cxobj *xerr, int pretty, restconf_media media, int code0);
|
||||
int api_return_err(clixon_handle h, void *req, cxobj *xerr, int pretty, restconf_media media, int code0);
|
||||
int api_return_err0(clixon_handle h, void *req, cxobj *xerr, int pretty, restconf_media media, int code0);
|
||||
|
||||
|
||||
#endif /* _RESTCONF_ERR_H_ */
|
||||
|
|
|
|||
|
|
@ -58,20 +58,20 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
#include "restconf_handle.h"
|
||||
|
||||
/* header part is copied from struct clicon_handle in lib/src/clixon_handle.c */
|
||||
/* header part is copied from struct clixon_handle in lib/src/clixon_handle.c */
|
||||
|
||||
#define CLICON_MAGIC 0x99aafabe
|
||||
|
||||
#define handle(h) (assert(clicon_handle_check(h)==0),(struct restconf_handle *)(h))
|
||||
#define handle(h) (assert(clixon_handle_check(h)==0),(struct restconf_handle *)(h))
|
||||
|
||||
/* Clicon_handle for backends.
|
||||
* First part of this is header, same for clicon_handle and cli_handle.
|
||||
/* Clixon_handle for backends.
|
||||
* First part of this is header, same for clixon_handle and cli_handle.
|
||||
* Access functions for common fields are found in clicon lib: clicon_options.[ch]
|
||||
* This file should only contain access functions for the _specific_
|
||||
* entries in the struct below.
|
||||
|
|
@ -80,8 +80,8 @@
|
|||
*
|
||||
* This file should only contain access functions for the _specific_
|
||||
* entries in the struct below.
|
||||
* @note The top part must be equivalent to struct clicon_handle in clixon_handle.c
|
||||
* @see struct clicon_handle, struct cli_handle
|
||||
* @note The top part must be equivalent to struct clixon_handle in clixon_handle.c
|
||||
* @see struct clixon_handle, struct cli_handle
|
||||
*/
|
||||
struct restconf_handle {
|
||||
int rh_magic; /* magic (HDR)*/
|
||||
|
|
@ -100,12 +100,12 @@ struct restconf_handle {
|
|||
|
||||
/*! Creates and returns a clicon config handle for other CLICON API calls
|
||||
*/
|
||||
clicon_handle
|
||||
clixon_handle
|
||||
restconf_handle_init(void)
|
||||
{
|
||||
struct restconf_handle *rh;
|
||||
|
||||
rh = clicon_handle_init0(sizeof(struct restconf_handle));
|
||||
rh = clixon_handle_init0(sizeof(struct restconf_handle));
|
||||
rh->rh_pretty = 1; /* clixon-restconf.yang : pretty is default true*/
|
||||
return rh;
|
||||
}
|
||||
|
|
@ -116,13 +116,13 @@ restconf_handle_init(void)
|
|||
* @see backend_client_rm
|
||||
*/
|
||||
int
|
||||
restconf_handle_exit(clicon_handle h)
|
||||
restconf_handle_exit(clixon_handle h)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
||||
if (rh->rh_fcgi_socket)
|
||||
free(rh->rh_fcgi_socket);
|
||||
clicon_handle_exit(h); /* frees h and options (and streams) */
|
||||
clixon_handle_exit(h); /* frees h and options (and streams) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -134,7 +134,7 @@ restconf_handle_exit(clicon_handle h)
|
|||
* Currently using clixon runtime data but there is risk for colliding names
|
||||
*/
|
||||
char *
|
||||
restconf_param_get(clicon_handle h,
|
||||
restconf_param_get(clixon_handle h,
|
||||
const char *param)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
|
@ -154,7 +154,7 @@ restconf_param_get(clicon_handle h,
|
|||
* Currently using clixon runtime data but there is risk for colliding names
|
||||
*/
|
||||
int
|
||||
restconf_param_set(clicon_handle h,
|
||||
restconf_param_set(clixon_handle h,
|
||||
const char *param,
|
||||
char *val)
|
||||
{
|
||||
|
|
@ -176,7 +176,7 @@ restconf_param_set(clicon_handle h,
|
|||
* Currently using clixon runtime data but there is risk for colliding names
|
||||
*/
|
||||
int
|
||||
restconf_param_del_all(clicon_handle h)
|
||||
restconf_param_del_all(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
|
@ -197,7 +197,7 @@ restconf_param_del_all(clicon_handle h)
|
|||
* @retval auth_type
|
||||
*/
|
||||
clixon_auth_type_t
|
||||
restconf_auth_type_get(clicon_handle h)
|
||||
restconf_auth_type_get(clixon_handle h)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
||||
|
|
@ -214,7 +214,7 @@ restconf_auth_type_get(clicon_handle h)
|
|||
* Currently using clixon runtime data but there is risk for colliding names
|
||||
*/
|
||||
int
|
||||
restconf_auth_type_set(clicon_handle h,
|
||||
restconf_auth_type_set(clixon_handle h,
|
||||
clixon_auth_type_t type)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
|
@ -229,7 +229,7 @@ restconf_auth_type_set(clicon_handle h,
|
|||
* @retval pretty
|
||||
*/
|
||||
int
|
||||
restconf_pretty_get(clicon_handle h)
|
||||
restconf_pretty_get(clixon_handle h)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
||||
|
|
@ -244,7 +244,7 @@ restconf_pretty_get(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_pretty_set(clicon_handle h,
|
||||
restconf_pretty_set(clixon_handle h,
|
||||
int pretty)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
|
@ -260,7 +260,7 @@ restconf_pretty_set(clicon_handle h,
|
|||
* @retval 1 No, http-data disabled
|
||||
*/
|
||||
int
|
||||
restconf_http_data_get(clicon_handle h)
|
||||
restconf_http_data_get(clixon_handle h)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
||||
|
|
@ -274,7 +274,7 @@ restconf_http_data_get(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_http_data_set(clicon_handle h,
|
||||
restconf_http_data_set(clixon_handle h,
|
||||
int http_data)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
|
@ -289,7 +289,7 @@ restconf_http_data_set(clicon_handle h,
|
|||
* @retval socketpath
|
||||
*/
|
||||
char*
|
||||
restconf_fcgi_socket_get(clicon_handle h)
|
||||
restconf_fcgi_socket_get(clixon_handle h)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
||||
|
|
@ -306,13 +306,13 @@ restconf_fcgi_socket_get(clicon_handle h)
|
|||
* Currently using clixon runtime data but there is risk for colliding names
|
||||
*/
|
||||
int
|
||||
restconf_fcgi_socket_set(clicon_handle h,
|
||||
restconf_fcgi_socket_set(clixon_handle h,
|
||||
char *socketpath)
|
||||
{
|
||||
struct restconf_handle *rh = handle(h);
|
||||
|
||||
if ((rh->rh_fcgi_socket = strdup(socketpath)) == NULL){
|
||||
clicon_err(OE_RESTCONF, errno, "strdup");
|
||||
clixon_err(OE_RESTCONF, errno, "strdup");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -42,18 +42,18 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
clicon_handle restconf_handle_init(void);
|
||||
int restconf_handle_exit(clicon_handle h);
|
||||
char *restconf_param_get(clicon_handle h, const char *param);
|
||||
int restconf_param_set(clicon_handle h, const char *param, char *val);
|
||||
int restconf_param_del_all(clicon_handle h);
|
||||
clixon_auth_type_t restconf_auth_type_get(clicon_handle h);
|
||||
int restconf_auth_type_set(clicon_handle h, clixon_auth_type_t type);
|
||||
int restconf_pretty_get(clicon_handle h);
|
||||
int restconf_pretty_set(clicon_handle h, int pretty);
|
||||
int restconf_http_data_get(clicon_handle h);
|
||||
int restconf_http_data_set(clicon_handle h, int http_data);
|
||||
char *restconf_fcgi_socket_get(clicon_handle h);
|
||||
int restconf_fcgi_socket_set(clicon_handle h, char *socketpath);
|
||||
clixon_handle restconf_handle_init(void);
|
||||
int restconf_handle_exit(clixon_handle h);
|
||||
char *restconf_param_get(clixon_handle h, const char *param);
|
||||
int restconf_param_set(clixon_handle h, const char *param, char *val);
|
||||
int restconf_param_del_all(clixon_handle h);
|
||||
clixon_auth_type_t restconf_auth_type_get(clixon_handle h);
|
||||
int restconf_auth_type_set(clixon_handle h, clixon_auth_type_t type);
|
||||
int restconf_pretty_get(clixon_handle h);
|
||||
int restconf_pretty_set(clixon_handle h, int pretty);
|
||||
int restconf_http_data_get(clixon_handle h);
|
||||
int restconf_http_data_set(clixon_handle h, int http_data);
|
||||
char *restconf_fcgi_socket_get(clixon_handle h);
|
||||
int restconf_fcgi_socket_set(clixon_handle h, char *socketpath);
|
||||
|
||||
#endif /* _RESTCONF_HANDLE_H_ */
|
||||
|
|
|
|||
|
|
@ -78,10 +78,10 @@
|
|||
* @param[in] str Pointer to string containing HTTP/1
|
||||
* @param[in] filename Debug string identifying file or connection
|
||||
* @retval 0 Parse OK
|
||||
* @retval -1 Error with clicon_err called.
|
||||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
_http1_parse(clicon_handle h,
|
||||
_http1_parse(clixon_handle h,
|
||||
restconf_conn *rc,
|
||||
char *str,
|
||||
const char *filename)
|
||||
|
|
@ -109,11 +109,11 @@ _http1_parse(clicon_handle h,
|
|||
http1_scan_exit(&hy);
|
||||
if (ret != 0){
|
||||
if (filename)
|
||||
clicon_log(LOG_NOTICE, "HTTP1 error: on line %d in %s", hy.hy_linenum, filename);
|
||||
clixon_log(h, LOG_NOTICE, "HTTP1 error: on line %d in %s", hy.hy_linenum, filename);
|
||||
else
|
||||
clicon_log(LOG_NOTICE, "HTTP1 error: on line %d", hy.hy_linenum);
|
||||
if (clicon_errno == 0)
|
||||
clicon_err(OE_RESTCONF, 0, "HTTP1 parser error with no error code (should not happen)");
|
||||
clixon_log(h, LOG_NOTICE, "HTTP1 error: on line %d", hy.hy_linenum);
|
||||
if (clixon_err_category() == 0)
|
||||
clixon_err(OE_RESTCONF, 0, "HTTP1 parser error with no error code (should not happen)");
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -130,10 +130,10 @@ _http1_parse(clicon_handle h,
|
|||
* @param[in] f A file descriptor containing HTTP/1 (as ASCII characters)
|
||||
* @param[in] filename Debug string identifying file or connection
|
||||
* @retval 0 Parse OK
|
||||
* @retval -1 Error with clicon_err called.
|
||||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_http1_parse_file(clicon_handle h,
|
||||
clixon_http1_parse_file(clixon_handle h,
|
||||
restconf_conn *rc,
|
||||
FILE *f,
|
||||
const char *filename)
|
||||
|
|
@ -149,18 +149,18 @@ clixon_http1_parse_file(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s", __FUNCTION__, filename);
|
||||
if (f == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "f is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "f is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((buf = malloc(buflen)) == NULL){
|
||||
clicon_err(OE_XML, errno, "malloc");
|
||||
clixon_err(OE_XML, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(buf, 0, buflen);
|
||||
ptr = buf;
|
||||
while (1){
|
||||
if ((ret = fread(&ch, 1, 1, f)) < 0){
|
||||
clicon_err(OE_XML, errno, "read");
|
||||
clixon_err(OE_XML, errno, "read");
|
||||
break;
|
||||
}
|
||||
if (ret != 0){
|
||||
|
|
@ -175,7 +175,7 @@ clixon_http1_parse_file(clicon_handle h,
|
|||
oldbuflen = buflen;
|
||||
buflen *= 2;
|
||||
if ((buf = realloc(buf, buflen)) == NULL){
|
||||
clicon_err(OE_XML, errno, "realloc");
|
||||
clixon_err(OE_XML, errno, "realloc");
|
||||
goto done;
|
||||
}
|
||||
memset(buf+oldbuflen, 0, buflen-oldbuflen);
|
||||
|
|
@ -195,10 +195,10 @@ clixon_http1_parse_file(clicon_handle h,
|
|||
* @param[in] rc Restconf connection
|
||||
* @param[in] str HTTP/1 string
|
||||
* @retval 0 Parse OK
|
||||
* @retval -1 Error with clicon_err called.
|
||||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_http1_parse_string(clicon_handle h,
|
||||
clixon_http1_parse_string(clixon_handle h,
|
||||
restconf_conn *rc,
|
||||
char *str)
|
||||
{
|
||||
|
|
@ -213,12 +213,12 @@ clixon_http1_parse_string(clicon_handle h,
|
|||
* @param[in] buf HTTP/1 buffer
|
||||
* @param[in] n Length of buffer
|
||||
* @retval 0 Parse OK
|
||||
* @retval -1 Error with clicon_err called.
|
||||
* @retval -1 Error
|
||||
* @note Had preferred to do this without copying, OR
|
||||
* input flex with a non-null terminated string
|
||||
*/
|
||||
int
|
||||
clixon_http1_parse_buf(clicon_handle h,
|
||||
clixon_http1_parse_buf(clixon_handle h,
|
||||
restconf_conn *rc,
|
||||
char *buf,
|
||||
size_t n)
|
||||
|
|
@ -227,7 +227,7 @@ clixon_http1_parse_buf(clicon_handle h,
|
|||
int ret;
|
||||
|
||||
if ((str = malloc(n+1)) == NULL){
|
||||
clicon_err(OE_RESTCONF, errno, "malloc");
|
||||
clixon_err(OE_RESTCONF, errno, "malloc");
|
||||
return -1;
|
||||
}
|
||||
memcpy(str, buf, n);
|
||||
|
|
@ -250,7 +250,7 @@ clixon_http1_parse_buf(clicon_handle h,
|
|||
* runtime config option
|
||||
*/
|
||||
static int
|
||||
http1_upgrade_http2(clicon_handle h,
|
||||
http1_upgrade_http2(clixon_handle h,
|
||||
restconf_stream_data *sd)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -280,7 +280,7 @@ http1_upgrade_http2(clicon_handle h,
|
|||
sd->sd_upgrade2 = 1;
|
||||
if ((settings = restconf_param_get(h, "HTTP_HTTP2_Settings")) != NULL &&
|
||||
(sd->sd_settings2 = (uint8_t*)strdup(settings)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -332,7 +332,7 @@ restconf_http1_reply(restconf_conn *rc,
|
|||
/* Write a body */
|
||||
if (sd->sd_body){
|
||||
if (cbuf_append_buf(sd->sd_outp_buf, cbuf_get(sd->sd_body), cbuf_len(sd->sd_body)) < 0){
|
||||
clicon_err(OE_RESTCONF, errno, "cbuf_append_buf");
|
||||
clixon_err(OE_RESTCONF, errno, "cbuf_append_buf");
|
||||
goto done;
|
||||
}
|
||||
cbuf_free(sd->sd_body);
|
||||
|
|
@ -351,7 +351,7 @@ restconf_http1_reply(restconf_conn *rc,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_http1_path_root(clicon_handle h,
|
||||
restconf_http1_path_root(clixon_handle h,
|
||||
restconf_conn *rc)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -368,7 +368,7 @@ restconf_http1_path_root(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "------------");
|
||||
pretty = restconf_pretty_get(h);
|
||||
if ((sd = restconf_stream_find(rc, 0)) == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "No stream_data");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "No stream_data");
|
||||
goto done;
|
||||
}
|
||||
/* Sanity check */
|
||||
|
|
@ -484,7 +484,7 @@ restconf_http1_path_root(clicon_handle h,
|
|||
* @see rfc7231 Sec 5.1.1
|
||||
*/
|
||||
int
|
||||
http1_check_expect(clicon_handle h,
|
||||
http1_check_expect(clixon_handle h,
|
||||
restconf_conn *rc,
|
||||
restconf_stream_data *sd)
|
||||
{
|
||||
|
|
@ -518,7 +518,7 @@ http1_check_expect(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
http1_check_content_length(clicon_handle h,
|
||||
http1_check_content_length(clixon_handle h,
|
||||
restconf_stream_data *sd,
|
||||
int *status)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -39,11 +39,11 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int clixon_http1_parse_file(clicon_handle h, restconf_conn *rc, FILE *f, const char *filename);
|
||||
int clixon_http1_parse_string(clicon_handle h, restconf_conn *rc, char *str);
|
||||
int clixon_http1_parse_buf(clicon_handle h, restconf_conn *rc, char *buf, size_t n);
|
||||
int restconf_http1_path_root(clicon_handle h, restconf_conn *rc);
|
||||
int http1_check_expect(clicon_handle h, restconf_conn *rc, restconf_stream_data *sd);
|
||||
int http1_check_content_length(clicon_handle h, restconf_stream_data *sd, int *status);
|
||||
int clixon_http1_parse_file(clixon_handle h, restconf_conn *rc, FILE *f, const char *filename);
|
||||
int clixon_http1_parse_string(clixon_handle h, restconf_conn *rc, char *str);
|
||||
int clixon_http1_parse_buf(clixon_handle h, restconf_conn *rc, char *buf, size_t n);
|
||||
int restconf_http1_path_root(clixon_handle h, restconf_conn *rc);
|
||||
int http1_check_expect(clixon_handle h, restconf_conn *rc, restconf_stream_data *sd);
|
||||
int http1_check_content_length(clixon_handle h, restconf_stream_data *sd, int *status);
|
||||
|
||||
#endif /* _RESTCONF_HTTP1_H_ */
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_api.h"
|
||||
|
|
@ -265,7 +265,7 @@ restconf_proto2str(int proto)
|
|||
*
|
||||
*/
|
||||
restconf_media
|
||||
restconf_content_type(clicon_handle h)
|
||||
restconf_content_type(clixon_handle h)
|
||||
{
|
||||
char *str = NULL;
|
||||
restconf_media m;
|
||||
|
|
@ -282,7 +282,7 @@ restconf_content_type(clicon_handle h)
|
|||
* Example: Host -> HTTP_HOST
|
||||
*/
|
||||
int
|
||||
restconf_convert_hdr(clicon_handle h,
|
||||
restconf_convert_hdr(clixon_handle h,
|
||||
char *name,
|
||||
char *val)
|
||||
{
|
||||
|
|
@ -293,7 +293,7 @@ restconf_convert_hdr(clicon_handle h,
|
|||
size_t len;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* convert key name */
|
||||
|
|
@ -353,7 +353,7 @@ get_user_cookie(char *cookiestr,
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
int
|
||||
restconf_terminate(clicon_handle h)
|
||||
restconf_terminate(clixon_handle h)
|
||||
{
|
||||
yang_stmt *yspec;
|
||||
cvec *nsctx;
|
||||
|
|
@ -379,7 +379,7 @@ restconf_terminate(clicon_handle h)
|
|||
restconf_handle_exit(h);
|
||||
clixon_err_exit();
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s pid:%u done", __FUNCTION__, getpid());
|
||||
clicon_log_exit(); /* Must be after last clixon_debug */
|
||||
clixon_log_exit(); /* Must be after last clixon_debug */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -432,7 +432,7 @@ restconf_insert_attributes(cxobj *xdata,
|
|||
}
|
||||
if ((pstr = cvec_find_str(qvec, "point")) != NULL){
|
||||
if (y == NULL){
|
||||
clicon_err(OE_YANG, 0, "Cannot yang resolve %s", xml_name(xdata));
|
||||
clixon_err(OE_YANG, 0, "Cannot yang resolve %s", xml_name(xdata));
|
||||
goto done;
|
||||
}
|
||||
if (yang_keyword_get(y) == Y_LIST)
|
||||
|
|
@ -443,7 +443,7 @@ restconf_insert_attributes(cxobj *xdata,
|
|||
if ((ret = api_path2xpath(pstr, ys_spec(y), &xpath, &nsc, NULL)) < 0)
|
||||
goto done;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (yang_keyword_get(y) == Y_LIST){
|
||||
|
|
@ -456,12 +456,12 @@ restconf_insert_attributes(cxobj *xdata,
|
|||
else{ /* LEAF_LIST */
|
||||
/* translate /../x[.='x'] --> x */
|
||||
if ((p = rindex(xpath,'\'')) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Translated api->xpath %s->%s not on leaf-list canonical form: ../[.='x']", pstr, xpath);
|
||||
clixon_err(OE_YANG, 0, "Translated api->xpath %s->%s not on leaf-list canonical form: ../[.='x']", pstr, xpath);
|
||||
goto done;
|
||||
}
|
||||
*p = '\0';
|
||||
if ((p = rindex(xpath,'\'')) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Translated api->xpath %s->%s not on leaf-list canonical form: ../[.='x']", pstr, xpath);
|
||||
clixon_err(OE_YANG, 0, "Translated api->xpath %s->%s not on leaf-list canonical form: ../[.='x']", pstr, xpath);
|
||||
goto done;
|
||||
}
|
||||
p++;
|
||||
|
|
@ -508,7 +508,7 @@ restconf_insert_attributes(cxobj *xdata,
|
|||
* @see ietf-restconf.yang
|
||||
*/
|
||||
int
|
||||
restconf_main_extension_cb(clicon_handle h,
|
||||
restconf_main_extension_cb(clixon_handle h,
|
||||
yang_stmt *yext,
|
||||
yang_stmt *ys)
|
||||
{
|
||||
|
|
@ -547,18 +547,18 @@ restconf_main_extension_cb(clicon_handle h,
|
|||
* @retval path malloced, need free
|
||||
*/
|
||||
char *
|
||||
restconf_uripath(clicon_handle h)
|
||||
restconf_uripath(clixon_handle h)
|
||||
{
|
||||
char *path = NULL;
|
||||
char *path2 = NULL;
|
||||
char *q;
|
||||
|
||||
if ((path = restconf_param_get(h, "REQUEST_URI")) == NULL){
|
||||
clicon_err(OE_RESTCONF, 0, "No REQUEST_URI");
|
||||
clixon_err(OE_RESTCONF, 0, "No REQUEST_URI");
|
||||
return NULL;
|
||||
}
|
||||
if ((path2 = strdup(path)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
return NULL;
|
||||
}
|
||||
if ((q = index(path2, '?')) != NULL)
|
||||
|
|
@ -574,7 +574,7 @@ restconf_uripath(clicon_handle h)
|
|||
* Group set to CLICON_SOCK_GROUP to communicate with backend
|
||||
*/
|
||||
int
|
||||
restconf_drop_privileges(clicon_handle h)
|
||||
restconf_drop_privileges(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
uid_t newuid = -1;
|
||||
|
|
@ -587,11 +587,11 @@ restconf_drop_privileges(clicon_handle h)
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
/* Sanity check: backend group exists */
|
||||
if ((group = clicon_sock_group(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "clicon_sock_group option not set");
|
||||
clixon_err(OE_FATAL, 0, "clicon_sock_group option not set");
|
||||
return -1;
|
||||
}
|
||||
if (group_name2gid(group, &gid) < 0){
|
||||
clicon_log(LOG_ERR, "'%s' does not seem to be a valid user group." /* \n required here due to multi-line log */
|
||||
clixon_log(h, LOG_ERR, "'%s' does not seem to be a valid user group." /* \n required here due to multi-line log */
|
||||
"The config daemon requires a valid group to create a server UNIX socket\n"
|
||||
"Define a valid CLICON_SOCK_GROUP in %s or via the -g option\n"
|
||||
"or create the group and add the user to it. Check documentation for how to do this on your platform",
|
||||
|
|
@ -608,18 +608,18 @@ restconf_drop_privileges(clicon_handle h)
|
|||
|
||||
/* Get (wanted) new www user id */
|
||||
if (name2uid(user, &newuid) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "'%s' is not a valid user .\n", user);
|
||||
clixon_err(OE_DAEMON, errno, "'%s' is not a valid user .\n", user);
|
||||
goto done;
|
||||
}
|
||||
/* get current userid, if already at this level OK */
|
||||
if ((uid = getuid()) == newuid)
|
||||
goto ok;
|
||||
if (uid != 0){
|
||||
clicon_err(OE_DAEMON, EPERM, "Privileges can only be dropped from root user (uid is %u)\n", uid);
|
||||
clixon_err(OE_DAEMON, EPERM, "Privileges can only be dropped from root user (uid is %u)\n", uid);
|
||||
goto done;
|
||||
}
|
||||
if (setgid(gid) == -1) {
|
||||
clicon_err(OE_DAEMON, errno, "setgid %d", gid);
|
||||
clixon_err(OE_DAEMON, errno, "setgid %d", gid);
|
||||
goto done;
|
||||
}
|
||||
switch (priv_mode){
|
||||
|
|
@ -628,7 +628,7 @@ restconf_drop_privileges(clicon_handle h)
|
|||
goto done;
|
||||
/* Verify you cannot regain root privileges */
|
||||
if (setuid(0) != -1){
|
||||
clicon_err(OE_DAEMON, EPERM, "Could regain root privilieges");
|
||||
clixon_err(OE_DAEMON, EPERM, "Could regain root privilieges");
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
@ -658,7 +658,7 @@ restconf_drop_privileges(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_authentication_cb(clicon_handle h,
|
||||
restconf_authentication_cb(clixon_handle h,
|
||||
void *req,
|
||||
int pretty,
|
||||
restconf_media media_out)
|
||||
|
|
@ -746,7 +746,7 @@ restconf_authentication_cb(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_config_init(clicon_handle h,
|
||||
restconf_config_init(clixon_handle h,
|
||||
cxobj *xrestconf)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -759,7 +759,7 @@ restconf_config_init(clicon_handle h,
|
|||
yang_stmt *y;
|
||||
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
/* Apply default values (removed in clear function) */
|
||||
|
|
@ -776,7 +776,7 @@ restconf_config_init(clicon_handle h,
|
|||
if ((x = xpath_first(xrestconf, nsc, "auth-type")) != NULL &&
|
||||
(bstr = xml_body(x)) != NULL){
|
||||
if ((auth_type = clixon_auth_type_str2int(bstr)) < 0){
|
||||
clicon_err(OE_CFG, EFAULT, "Invalid restconf auth-type: %s", bstr);
|
||||
clixon_err(OE_CFG, EFAULT, "Invalid restconf auth-type: %s", bstr);
|
||||
goto done;
|
||||
}
|
||||
restconf_auth_type_set(h, auth_type);
|
||||
|
|
|
|||
|
|
@ -87,16 +87,16 @@ const restconf_media restconf_media_str2int(char *media);
|
|||
const char *restconf_media_int2str(restconf_media media);
|
||||
int restconf_str2proto(char *str);
|
||||
const char *restconf_proto2str(int proto);
|
||||
restconf_media restconf_content_type(clicon_handle h);
|
||||
int restconf_convert_hdr(clicon_handle h, char *name, char *val);
|
||||
restconf_media restconf_content_type(clixon_handle h);
|
||||
int restconf_convert_hdr(clixon_handle h, char *name, char *val);
|
||||
int get_user_cookie(char *cookiestr, char *attribute, char **val);
|
||||
int restconf_terminate(clicon_handle h);
|
||||
int restconf_terminate(clixon_handle h);
|
||||
int restconf_insert_attributes(cxobj *xdata, cvec *qvec);
|
||||
int restconf_main_extension_cb(clicon_handle h, yang_stmt *yext, yang_stmt *ys);
|
||||
char *restconf_uripath(clicon_handle h);
|
||||
int restconf_drop_privileges(clicon_handle h);
|
||||
int restconf_authentication_cb(clicon_handle h, void *req, int pretty, restconf_media media_out);
|
||||
int restconf_config_init(clicon_handle h, cxobj *xrestconf);
|
||||
int restconf_main_extension_cb(clixon_handle h, yang_stmt *yext, yang_stmt *ys);
|
||||
char *restconf_uripath(clixon_handle h);
|
||||
int restconf_drop_privileges(clixon_handle h);
|
||||
int restconf_authentication_cb(clixon_handle h, void *req, int pretty, restconf_media media_out);
|
||||
int restconf_config_init(clixon_handle h, cxobj *xrestconf);
|
||||
int restconf_socket_init(const char *netns0, const char *addrstr, const char *addrtype, uint16_t port, int backlog, int flags, int *ss);
|
||||
|
||||
#endif /* _RESTCONF_LIB_H_ */
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include <fcgiapp.h> /* Need to be after clixon_xml.h due to attribute format */
|
||||
|
|
@ -99,7 +99,7 @@
|
|||
* @see https://nginx.org/en/docs/http/ngx_http_core_module.html#var_https
|
||||
*/
|
||||
static int
|
||||
fcgi_params_set(clicon_handle h,
|
||||
fcgi_params_set(clixon_handle h,
|
||||
char **envp)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -131,7 +131,7 @@ fcgi_params_set(clicon_handle h,
|
|||
/*! Try to get config: inline, config-file or query backend
|
||||
*/
|
||||
static int
|
||||
restconf_main_config(clicon_handle h,
|
||||
restconf_main_config(clixon_handle h,
|
||||
yang_stmt *yspec,
|
||||
const char *inline_config)
|
||||
{
|
||||
|
|
@ -151,7 +151,12 @@ restconf_main_config(clicon_handle h,
|
|||
if ((ret = clixon_xml_parse_string(inline_config, YB_MODULE, yspec, &xrestconf, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Inline restconf config") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Inline restconf config", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
/* Replace parent w first child */
|
||||
|
|
@ -172,7 +177,7 @@ restconf_main_config(clicon_handle h,
|
|||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
clicon_err(OE_UNIX, errno, "clicon_session_id_get");
|
||||
clixon_err(OE_UNIX, errno, "clicon_session_id_get");
|
||||
goto done;
|
||||
}
|
||||
clicon_session_id_set(h, id);
|
||||
|
|
@ -181,13 +186,13 @@ restconf_main_config(clicon_handle h,
|
|||
if ((nsc = xml_nsctx_init(NULL, CLIXON_RESTCONF_NS)) == NULL)
|
||||
goto done;
|
||||
if ((pw = getpwuid(getuid())) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "getpwuid");
|
||||
clixon_err(OE_UNIX, errno, "getpwuid");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_rpc_get_config(h, pw->pw_name, "running", "/restconf", nsc, NULL, &xconfig) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xconfig, NULL, "/rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "Get backend restconf config", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get backend restconf config");
|
||||
goto done;
|
||||
}
|
||||
/* Extract restconf configuration */
|
||||
|
|
@ -198,7 +203,7 @@ restconf_main_config(clicon_handle h,
|
|||
(configure_done = restconf_config_init(h, xrestconf)) < 0)
|
||||
goto done;
|
||||
if (!configure_done){ /* Query backend of config. */
|
||||
clicon_err(OE_DAEMON, EFAULT, "Restconf daemon config not found or disabled");
|
||||
clixon_err(OE_DAEMON, EFAULT, "Restconf daemon config not found or disabled");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -214,7 +219,7 @@ restconf_main_config(clicon_handle h,
|
|||
|
||||
/* XXX Need global variable to for SIGCHLD signal handler
|
||||
*/
|
||||
static clicon_handle _CLICON_HANDLE = NULL;
|
||||
static clixon_handle _CLIXON_HANDLE = NULL;
|
||||
|
||||
/* XXX Need global variable to break FCGI accept loop from signal handler see FCGX_Accept_r(req)
|
||||
*/
|
||||
|
|
@ -229,7 +234,7 @@ restconf_sig_term(int arg)
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (i++ == 0)
|
||||
clicon_log(LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
clixon_log(NULL, LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
__PROGRAM__, __FUNCTION__, getpid(), arg);
|
||||
else{
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s done", __FUNCTION__);
|
||||
|
|
@ -255,7 +260,7 @@ restconf_sig_child(int arg)
|
|||
int pid;
|
||||
|
||||
if ((pid = waitpid(-1, &status, 0)) != -1 && WIFEXITED(status))
|
||||
stream_child_free(_CLICON_HANDLE, pid);
|
||||
stream_child_free(_CLIXON_HANDLE, pid);
|
||||
}
|
||||
|
||||
/*! Usage help routine
|
||||
|
|
@ -264,7 +269,7 @@ restconf_sig_child(int arg)
|
|||
* @param[in] argv0 command line
|
||||
*/
|
||||
static void
|
||||
usage(clicon_handle h,
|
||||
usage(clixon_handle h,
|
||||
char *argv0)
|
||||
{
|
||||
fprintf(stderr, "usage:%s [options]\n"
|
||||
|
|
@ -303,9 +308,9 @@ main(int argc,
|
|||
int c;
|
||||
char *sockpath = NULL;
|
||||
char *path;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
char *dir;
|
||||
int logdst = CLICON_LOG_SYSLOG;
|
||||
int logdst = CLIXON_LOG_SYSLOG;
|
||||
yang_stmt *yspec = NULL;
|
||||
char *query;
|
||||
cvec *qvec;
|
||||
|
|
@ -324,14 +329,16 @@ main(int argc,
|
|||
enum format_enum config_dump_format = FORMAT_XML;
|
||||
int print_version = 0;
|
||||
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, logdst);
|
||||
|
||||
/* Create handle */
|
||||
if ((h = restconf_handle_init()) == NULL)
|
||||
goto done;
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
if (clixon_log_init(h, __PROGRAM__, LOG_INFO, logdst) < 0)
|
||||
goto done;
|
||||
if (clixon_err_init(h) < 0)
|
||||
goto done;
|
||||
|
||||
_CLICON_HANDLE = h; /* for termination handling */
|
||||
_CLIXON_HANDLE = h; /* for termination handling */
|
||||
|
||||
while ((c = getopt(argc, argv, RESTCONF_OPTS)) != -1)
|
||||
switch (c) {
|
||||
|
|
@ -357,11 +364,11 @@ main(int argc,
|
|||
clicon_option_str_set(h, "CLICON_CONFIGDIR", optarg);
|
||||
break;
|
||||
case 'l': /* Log destination: s|e|o */
|
||||
if ((logdst = clicon_log_opt(optarg[0])) < 0)
|
||||
if ((logdst = clixon_log_opt(optarg[0])) < 0)
|
||||
usage(h, argv[0]);
|
||||
if (logdst == CLICON_LOG_FILE &&
|
||||
if (logdst == CLIXON_LOG_FILE &&
|
||||
strlen(optarg)>1 &&
|
||||
clicon_log_file(optarg+1) < 0)
|
||||
clixon_log_file(optarg+1) < 0)
|
||||
goto done;
|
||||
break;
|
||||
} /* switch getopt */
|
||||
|
|
@ -369,20 +376,20 @@ main(int argc,
|
|||
/*
|
||||
* Logs, error and debug to stderr or syslog, set debug level
|
||||
*/
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clicon_log(LOG_NOTICE, "%s fcgi: %u Started", __PROGRAM__, getpid());
|
||||
clixon_debug_init(h, dbg);
|
||||
clixon_log(h, LOG_NOTICE, "%s fcgi: %u Started", __PROGRAM__, getpid());
|
||||
if (set_signal(SIGTERM, restconf_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGINT, restconf_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGCHLD, restconf_sig_child, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -460,8 +467,8 @@ main(int argc,
|
|||
cligen_bufthreshold = clicon_option_int(h, "CLICON_CLI_BUF_THRESHOLD");
|
||||
cbuf_alloc_set(cligen_buflen, cligen_bufthreshold);
|
||||
|
||||
if ((sz = clicon_option_int(h, "CLICON_LOG_STRING_LIMIT")) != 0)
|
||||
clicon_log_string_limit_set(sz);
|
||||
if ((sz = clicon_option_int(h, "CLIXON_LOG_STRING_LIMIT")) != 0)
|
||||
clixon_log_string_limit_set(sz);
|
||||
|
||||
/* Set default namespace according to CLICON_NAMESPACE_NETCONF_DEFAULT */
|
||||
xml_nsctx_namespace_netconf_default(h);
|
||||
|
|
@ -572,16 +579,16 @@ main(int argc,
|
|||
if (restconf_main_config(h, yspec, inline_config) < 0)
|
||||
goto done;
|
||||
if ((sockpath = restconf_fcgi_socket_get(h)) == NULL){
|
||||
clicon_err(OE_CFG, 0, "No restconf fcgi-socket (have you set FEATURE fcgi in config?)");
|
||||
clixon_err(OE_CFG, 0, "No restconf fcgi-socket (have you set FEATURE fcgi in config?)");
|
||||
goto done;
|
||||
}
|
||||
if (FCGX_Init() != 0){ /* How to cleanup memory after this? */
|
||||
clicon_err(OE_CFG, errno, "FCGX_Init");
|
||||
clixon_err(OE_CFG, errno, "FCGX_Init");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "restconf_main: Opening FCGX socket: %s", sockpath);
|
||||
if ((sock = FCGX_OpenSocket(sockpath, 10)) < 0){
|
||||
clicon_err(OE_CFG, errno, "FCGX_OpenSocket");
|
||||
clixon_err(OE_CFG, errno, "FCGX_OpenSocket");
|
||||
goto done;
|
||||
}
|
||||
_MYSOCK = sock;
|
||||
|
|
@ -590,18 +597,18 @@ main(int argc,
|
|||
gid_t wgid = -1;
|
||||
wwwuser = clicon_option_str(h, "CLICON_RESTCONF_USER");
|
||||
if (group_name2gid(wwwuser, &wgid) < 0){
|
||||
clicon_log(LOG_ERR, "'%s' does not seem to be a valid user group.", wwwuser);
|
||||
clixon_log(h, LOG_ERR, "'%s' does not seem to be a valid user group.", wwwuser);
|
||||
goto done;
|
||||
}
|
||||
if (chown(sockpath, -1, wgid) < 0){
|
||||
clicon_err(OE_CFG, errno, "chown");
|
||||
clixon_err(OE_CFG, errno, "chown");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_socket_set(h, sock) < 0)
|
||||
goto done;
|
||||
/* umask settings may interfer: we want group to write: this is 774 */
|
||||
if (chmod(sockpath, S_IRWXU|S_IRWXG|S_IROTH) < 0){
|
||||
clicon_err(OE_UNIX, errno, "chmod");
|
||||
clixon_err(OE_UNIX, errno, "chmod");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -616,14 +623,14 @@ main(int argc,
|
|||
clicon_data_set(h, "session-transport", "cl:restconf");
|
||||
|
||||
if (FCGX_InitRequest(req, sock, 0) != 0){
|
||||
clicon_err(OE_CFG, errno, "FCGX_InitRequest");
|
||||
clixon_err(OE_CFG, errno, "FCGX_InitRequest");
|
||||
goto done;
|
||||
}
|
||||
while (1) {
|
||||
finish = 1; /* If zero, dont finish request, initiate new */
|
||||
|
||||
if (FCGX_Accept_r(req) < 0) {
|
||||
clicon_err(OE_CFG, errno, "FCGX_Accept_r");
|
||||
clixon_err(OE_CFG, errno, "FCGX_Accept_r");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "------------");
|
||||
|
|
@ -692,7 +699,7 @@ main(int argc,
|
|||
else{ /* A handler is forked so we initiate a new request after instead
|
||||
of finishing the old */
|
||||
if (FCGX_InitRequest(req, sock, 0) != 0){
|
||||
clicon_err(OE_CFG, errno, "FCGX_InitRequest");
|
||||
clixon_err(OE_CFG, errno, "FCGX_InitRequest");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
* Data structures:
|
||||
* 1 1
|
||||
* +--------------------+ restconf_handle_get +--------------------+
|
||||
* | rn restconf_native | <--------------------- | h clicon_handle |
|
||||
* | rn restconf_native | <--------------------- | h clixon_handle |
|
||||
* | _handle | +--------------------+
|
||||
* +--------------------+ ^
|
||||
* common SSL config \ |
|
||||
|
|
@ -186,7 +186,7 @@ static int session_id_context = 1;
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
restconf_native_handle_set(clicon_handle h,
|
||||
restconf_native_handle_set(clixon_handle h,
|
||||
restconf_native_handle *rh)
|
||||
{
|
||||
clicon_hash_t *cdat = clicon_data(h);
|
||||
|
|
@ -235,7 +235,7 @@ init_openssl(void)
|
|||
/* This isn't strictly necessary... OpenSSL performs RAND_poll
|
||||
* automatically on first use of random number generator. */
|
||||
if (RAND_poll() != 1) {
|
||||
clicon_err(OE_SSL, errno, "Random generator has not been seeded with enough data");
|
||||
clixon_err(OE_SSL, errno, "Random generator has not been seeded with enough data");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -260,7 +260,7 @@ restconf_verify_certs(int preverify_ok,
|
|||
int err;
|
||||
int depth;
|
||||
// SSL *ssl;
|
||||
// clicon_handle h;
|
||||
// clixon_handle h;
|
||||
err_cert = X509_STORE_CTX_get_current_cert(store);
|
||||
err = X509_STORE_CTX_get_error(store);
|
||||
depth = X509_STORE_CTX_get_error_depth(store);
|
||||
|
|
@ -361,7 +361,7 @@ alpn_select_proto_cb(SSL *ssl,
|
|||
/*
|
||||
*/
|
||||
static SSL_CTX *
|
||||
restconf_ssl_context_create(clicon_handle h)
|
||||
restconf_ssl_context_create(clixon_handle h)
|
||||
{
|
||||
const SSL_METHOD *method;
|
||||
SSL_CTX *ctx = NULL;
|
||||
|
|
@ -369,7 +369,7 @@ restconf_ssl_context_create(clicon_handle h)
|
|||
method = TLS_server_method();
|
||||
|
||||
if ((ctx = SSL_CTX_new(method)) == NULL) {
|
||||
clicon_err(OE_SSL, 0, "SSL_CTX_new");
|
||||
clixon_err(OE_SSL, 0, "SSL_CTX_new");
|
||||
goto done;
|
||||
}
|
||||
/* Options
|
||||
|
|
@ -414,7 +414,7 @@ restconf_ssl_context_configure(clixon_handle h,
|
|||
*/
|
||||
if (server_ca_cert_path){
|
||||
if (SSL_CTX_load_verify_locations(ctx, server_ca_cert_path, NULL) != 1){
|
||||
clicon_err(OE_SSL, 0, "SSL_CTX_load_verify_locations(%s)", server_ca_cert_path);
|
||||
clixon_err(OE_SSL, 0, "SSL_CTX_load_verify_locations(%s)", server_ca_cert_path);
|
||||
goto done;
|
||||
}
|
||||
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER /*| SSL_VERIFY_FAIL_IF_NO_PEER_CERT */,
|
||||
|
|
@ -496,15 +496,15 @@ restconf_checkcert_file(cxobj *xrestconf,
|
|||
char *filename;
|
||||
|
||||
if ((x = xpath_first(xrestconf, nsc, "%s", name)) == NULL){
|
||||
clicon_err(OE_FATAL, EFAULT, "cert '%s' not found in config", name);
|
||||
clixon_err(OE_FATAL, EFAULT, "cert '%s' not found in config", name);
|
||||
goto done;
|
||||
}
|
||||
if ((filename = xml_body(x)) == NULL){
|
||||
clicon_err(OE_FATAL, EFAULT, "cert '%s' NULL value in config", name);
|
||||
clixon_err(OE_FATAL, EFAULT, "cert '%s' NULL value in config", name);
|
||||
goto done;
|
||||
}
|
||||
if (stat(filename, &fstat) < 0) {
|
||||
clicon_err(OE_FATAL, errno, "cert '%s'", filename);
|
||||
clixon_err(OE_FATAL, errno, "cert '%s'", filename);
|
||||
goto done;
|
||||
}
|
||||
*var = filename;
|
||||
|
|
@ -516,7 +516,7 @@ restconf_checkcert_file(cxobj *xrestconf,
|
|||
/*! Accept new socket client
|
||||
*
|
||||
* @param[in] fd Socket (unix or ip)
|
||||
* @param[in] arg typecast clicon_handle
|
||||
* @param[in] arg typecast clixon_handle
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error
|
||||
* @see openssl_init_socket where this callback is registered
|
||||
|
|
@ -527,7 +527,7 @@ restconf_accept_client(int fd,
|
|||
{
|
||||
int retval = -1;
|
||||
restconf_socket *rsock;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
int s;
|
||||
struct sockaddr from = {0,};
|
||||
socklen_t len;
|
||||
|
|
@ -536,13 +536,13 @@ restconf_accept_client(int fd,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %d", __FUNCTION__, fd);
|
||||
if ((rsock = (restconf_socket *)arg) == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "rsock is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "rsock is NULL");
|
||||
goto done;
|
||||
}
|
||||
h = rsock->rs_h;
|
||||
len = sizeof(from);
|
||||
if ((s = accept(rsock->rs_ss, &from, &len)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "accept");
|
||||
clixon_err(OE_UNIX, errno, "accept");
|
||||
goto done;
|
||||
}
|
||||
switch (from.sa_family){
|
||||
|
|
@ -565,7 +565,7 @@ restconf_accept_client(int fd,
|
|||
rsock->rs_from_addr = NULL;
|
||||
}
|
||||
if ((rsock->rs_from_addr = calloc(INET6_ADDRSTRLEN, 1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "calloc");
|
||||
clixon_err(OE_UNIX, errno, "calloc");
|
||||
goto done;
|
||||
}
|
||||
if (inet_ntop(from.sa_family, addr, rsock->rs_from_addr, INET6_ADDRSTRLEN) < 0)
|
||||
|
|
@ -590,7 +590,7 @@ restconf_accept_client(int fd,
|
|||
/*!
|
||||
*/
|
||||
static int
|
||||
restconf_native_terminate(clicon_handle h)
|
||||
restconf_native_terminate(clixon_handle h)
|
||||
{
|
||||
restconf_native_handle *rn;
|
||||
restconf_socket *rsock;
|
||||
|
|
@ -643,7 +643,7 @@ restconf_native_terminate(clicon_handle h)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
restconf_clixon_backend(clicon_handle h,
|
||||
restconf_clixon_backend(clixon_handle h,
|
||||
cxobj **xrestconfp)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -659,11 +659,11 @@ restconf_clixon_backend(clicon_handle h,
|
|||
while (1){
|
||||
if (clicon_hello_req(h, "cl:restconf", NULL, &id) < 0){
|
||||
if (errno == ENOENT){
|
||||
clicon_err(OE_UNIX, errno, "waiting");
|
||||
clixon_err(OE_UNIX, errno, "waiting");
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
clicon_err(OE_UNIX, errno, "clicon_session_id_get");
|
||||
clixon_err(OE_UNIX, errno, "clicon_session_id_get");
|
||||
goto done;
|
||||
}
|
||||
clicon_session_id_set(h, id);
|
||||
|
|
@ -672,14 +672,19 @@ restconf_clixon_backend(clicon_handle h,
|
|||
if ((nsc = xml_nsctx_init(NULL, CLIXON_RESTCONF_NS)) == NULL)
|
||||
goto done;
|
||||
if ((pw = getpwuid(getuid())) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "getpwuid");
|
||||
clixon_err(OE_UNIX, errno, "getpwuid");
|
||||
goto done;
|
||||
}
|
||||
/* XXX xconfig leaked */
|
||||
if (clicon_rpc_get_config(h, pw->pw_name, "running", "/restconf", nsc, NULL, &xconfig) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xconfig, NULL, "/rpc-error")) != NULL){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get backend restconf config") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "Get backend restconf config", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
/* Extract restconf configuration */
|
||||
|
|
@ -713,7 +718,7 @@ restconf_clixon_backend(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
openssl_init_socket(clicon_handle h,
|
||||
openssl_init_socket(clixon_handle h,
|
||||
cxobj *xs,
|
||||
cvec *nsc)
|
||||
{
|
||||
|
|
@ -733,7 +738,7 @@ openssl_init_socket(clicon_handle h,
|
|||
* See restconf_native_terminate for freeing
|
||||
*/
|
||||
if ((rsock = malloc(sizeof *rsock)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(rsock, 0, sizeof *rsock);
|
||||
|
|
@ -745,7 +750,7 @@ openssl_init_socket(clicon_handle h,
|
|||
goto done;
|
||||
if (rsock->rs_callhome){
|
||||
if (!rsock->rs_ssl){
|
||||
clicon_err(OE_SSL, EINVAL, "Restconf callhome requires SSL");
|
||||
clixon_err(OE_SSL, EINVAL, "Restconf callhome requires SSL");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -763,15 +768,15 @@ openssl_init_socket(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if ((rn = restconf_native_handle_get(h)) == NULL){
|
||||
clicon_err(OE_XML, EFAULT, "No openssl handle");
|
||||
clixon_err(OE_XML, EFAULT, "No openssl handle");
|
||||
goto done;
|
||||
}
|
||||
if ((rsock->rs_addrstr = strdup(address)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
if ((rsock->rs_addrtype = strdup(addrtype)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
rsock->rs_port = port;
|
||||
|
|
@ -804,7 +809,7 @@ openssl_init_socket(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_openssl_init(clicon_handle h,
|
||||
restconf_openssl_init(clixon_handle h,
|
||||
int dbg0,
|
||||
cxobj *xrestconf)
|
||||
{
|
||||
|
|
@ -834,7 +839,7 @@ restconf_openssl_init(clicon_handle h,
|
|||
(x = xpath_first(xrestconf, nsc, "debug")) != NULL &&
|
||||
(bstr = xml_body(x)) != NULL){
|
||||
dbg = atoi(bstr);
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clixon_debug_init(h, dbg);
|
||||
/* If debug was enabled here from config and not initially,
|
||||
* print clixn options and loaded yang files
|
||||
*/
|
||||
|
|
@ -852,7 +857,7 @@ restconf_openssl_init(clicon_handle h,
|
|||
}
|
||||
int status = setrlimit(RLIMIT_CORE, &rlp);
|
||||
if (status != 0) {
|
||||
clicon_log(LOG_INFO, "%s: setrlimit() failed, %s", __FUNCTION__, strerror(errno));
|
||||
clixon_log(h, LOG_INFO, "%s: setrlimit() failed, %s", __FUNCTION__, strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -880,8 +885,8 @@ restconf_openssl_init(clicon_handle h,
|
|||
for (i=0; i<veclen; i++){
|
||||
if (openssl_init_socket(h, vec[i], nsc) < 0){
|
||||
/* Bind errors are ignored, proceed with next after log */
|
||||
if (clicon_errno == OE_UNIX && clicon_suberrno == EADDRNOTAVAIL)
|
||||
clicon_err_reset();
|
||||
if (clixon_err_category() == OE_UNIX && clixon_err_subnr() == EADDRNOTAVAIL)
|
||||
clixon_err_reset();
|
||||
else
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -910,7 +915,7 @@ restconf_openssl_init(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_clixon_init(clicon_handle h,
|
||||
restconf_clixon_init(clixon_handle h,
|
||||
char *inline_config,
|
||||
int print_version,
|
||||
cxobj **xrestconfp)
|
||||
|
|
@ -937,7 +942,7 @@ restconf_clixon_init(clicon_handle h,
|
|||
cbuf_alloc_set(cligen_buflen, cligen_bufthreshold);
|
||||
|
||||
if ((sz = clicon_option_int(h, "CLICON_LOG_STRING_LIMIT")) != 0)
|
||||
clicon_log_string_limit_set(sz);
|
||||
clixon_log_string_limit_set(sz);
|
||||
|
||||
/* Add (hardcoded) netconf features in case ietf-netconf loaded here
|
||||
* Otherwise it is loaded in netconf_module_load below
|
||||
|
|
@ -1025,7 +1030,7 @@ restconf_clixon_init(clicon_handle h,
|
|||
if ((ret = clixon_xml_parse_string(inline_config, YB_MODULE, yspec, &xrestconf, &xerr)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clixon_netconf_error(h, xerr, "Inline restconf config", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Inline restconf config");
|
||||
goto done;
|
||||
}
|
||||
/* Replace parent w first child */
|
||||
|
|
@ -1086,7 +1091,7 @@ restconf_sig_term(int arg)
|
|||
{
|
||||
static int i=0;
|
||||
|
||||
clicon_log(LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
clixon_log(NULL, LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
__PROGRAM__, __FUNCTION__, getpid(), arg);
|
||||
if (i++ > 0) /* Allow one sigterm before proper exit */
|
||||
exit(-1);
|
||||
|
|
@ -1103,7 +1108,7 @@ restconf_sig_term(int arg)
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
static void
|
||||
usage(clicon_handle h,
|
||||
usage(clixon_handle h,
|
||||
char *argv0)
|
||||
{
|
||||
fprintf(stderr, "usage:%s [options]\n"
|
||||
|
|
@ -1138,9 +1143,9 @@ main(int argc,
|
|||
int retval = -1;
|
||||
char *argv0 = argv[0];
|
||||
int c;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
int dbg = 0;
|
||||
int logdst = CLICON_LOG_SYSLOG;
|
||||
int logdst = CLIXON_LOG_SYSLOG;
|
||||
restconf_native_handle *rn = NULL;
|
||||
int ret;
|
||||
cxobj *xrestconf = NULL;
|
||||
|
|
@ -1149,12 +1154,14 @@ main(int argc,
|
|||
enum format_enum config_dump_format = FORMAT_XML;
|
||||
int print_version = 0;
|
||||
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, logdst);
|
||||
|
||||
/* Create handle */
|
||||
if ((h = restconf_handle_init()) == NULL)
|
||||
goto done;
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
if (clixon_log_init(h, __PROGRAM__, LOG_INFO, logdst) < 0)
|
||||
goto done;
|
||||
if (clixon_err_init(h) < 0)
|
||||
goto done;
|
||||
|
||||
while ((c = getopt(argc, argv, RESTCONF_OPTS)) != -1)
|
||||
switch (c) {
|
||||
|
|
@ -1180,11 +1187,11 @@ main(int argc,
|
|||
clicon_option_str_set(h, "CLICON_CONFIGDIR", optarg);
|
||||
break;
|
||||
case 'l': /* Log destination: s|e|o */
|
||||
if ((logdst = clicon_log_opt(optarg[0])) < 0)
|
||||
if ((logdst = clixon_log_opt(optarg[0])) < 0)
|
||||
usage(h, argv0);
|
||||
if (logdst == CLICON_LOG_FILE &&
|
||||
if (logdst == CLIXON_LOG_FILE &&
|
||||
strlen(optarg)>1 &&
|
||||
clicon_log_file(optarg+1) < 0)
|
||||
clixon_log_file(optarg+1) < 0)
|
||||
goto done;
|
||||
break;
|
||||
} /* switch getopt */
|
||||
|
|
@ -1192,7 +1199,7 @@ main(int argc,
|
|||
/*
|
||||
* Logs, error and debug to stderr or syslog, set debug level
|
||||
*/
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
|
||||
/*
|
||||
* Register error category and error/log callbacks for openssl special error handling
|
||||
|
|
@ -1212,18 +1219,18 @@ main(int argc,
|
|||
) < 0)
|
||||
goto done;
|
||||
#endif
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clicon_log(LOG_NOTICE, "%s native %u Started", __PROGRAM__, getpid());
|
||||
clixon_debug_init(h, dbg);
|
||||
clixon_log(h, LOG_NOTICE, "%s native %u Started", __PROGRAM__, getpid());
|
||||
if (set_signal(SIGTERM, restconf_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGINT, restconf_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGPIPE, SIG_IGN, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
yang_init(h);
|
||||
|
|
@ -1317,13 +1324,13 @@ main(int argc,
|
|||
if ((ret = restconf_clixon_init(h, inline_config, print_version, &xrestconf)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){ /* restconf disabled */
|
||||
clicon_log(LOG_INFO, "restconf configuration not found or disabled");
|
||||
clixon_log(h, LOG_INFO, "restconf configuration not found or disabled");
|
||||
retval = 0;
|
||||
goto done;
|
||||
}
|
||||
/* Create and stroe global openssl handle */
|
||||
if ((rn = malloc(sizeof *rn)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(rn, 0, sizeof *rn);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
* @see RFC5789 PATCH Method for HTTP Section 3.2
|
||||
*/
|
||||
int
|
||||
api_data_options(clicon_handle h,
|
||||
api_data_options(clixon_handle h,
|
||||
void *req)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -194,7 +194,7 @@ match_list_keys(yang_stmt *y,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
api_data_write(clicon_handle h,
|
||||
api_data_write(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path0,
|
||||
int pi,
|
||||
|
|
@ -239,7 +239,7 @@ api_data_write(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s api_path:\"%s\"", __FUNCTION__, api_path0);
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s data:\"%s\"", __FUNCTION__, data);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
api_path=api_path0;
|
||||
|
|
@ -328,7 +328,7 @@ api_data_write(clicon_handle h,
|
|||
switch (media_in){
|
||||
case YANG_DATA_XML:
|
||||
if ((ret = clixon_xml_parse_string(data, yb, yspec, &xdata0, &xerr)) < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -342,7 +342,7 @@ api_data_write(clicon_handle h,
|
|||
break;
|
||||
case YANG_DATA_JSON:
|
||||
if ((ret = clixon_json_parse_string(data, 1, yb, yspec, &xdata0, &xerr)) < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -620,7 +620,7 @@ api_data_write(clicon_handle h,
|
|||
* --> Best solution and applied here
|
||||
*/
|
||||
int
|
||||
api_data_put(clicon_handle h,
|
||||
api_data_put(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path0,
|
||||
int pi,
|
||||
|
|
@ -658,7 +658,7 @@ api_data_put(clicon_handle h,
|
|||
* create it. (CANT BE DONE WITH NETCONF)
|
||||
*/
|
||||
int
|
||||
api_data_patch(clicon_handle h,
|
||||
api_data_patch(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path0,
|
||||
int pi,
|
||||
|
|
@ -712,7 +712,7 @@ api_data_patch(clicon_handle h,
|
|||
* Netconf: <edit-config> (nc:operation="delete")
|
||||
*/
|
||||
int
|
||||
api_data_delete(clicon_handle h,
|
||||
api_data_delete(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -739,7 +739,7 @@ api_data_delete(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s api_path:%s", __FUNCTION__, api_path);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
for (i=0; i<pi; i++)
|
||||
|
|
|
|||
|
|
@ -41,24 +41,24 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_data_options(clicon_handle h, void *req);
|
||||
int api_data_write(clicon_handle h, void *req, char *api_path0,
|
||||
int api_data_options(clixon_handle h, void *req);
|
||||
int api_data_write(clixon_handle h, void *req, char *api_path0,
|
||||
int pi,
|
||||
cvec *qvec, char *data,
|
||||
int pretty, restconf_media media_in, restconf_media media_out,
|
||||
int plain_patch, ietf_ds_t ds);
|
||||
|
||||
int api_data_put(clicon_handle h, void *req, char *api_path,
|
||||
int api_data_put(clixon_handle h, void *req, char *api_path,
|
||||
int pi,
|
||||
cvec *qvec, char *data,
|
||||
int pretty, restconf_media media_out, ietf_ds_t ds);
|
||||
|
||||
int api_data_patch(clicon_handle h, void *req, char *api_path,
|
||||
int api_data_patch(clixon_handle h, void *req, char *api_path,
|
||||
int pi,
|
||||
cvec *qvec, char *data, int pretty,
|
||||
restconf_media media_out, ietf_ds_t ds);
|
||||
|
||||
int api_data_delete(clicon_handle h, void *req, char *api_path, int pi,
|
||||
int api_data_delete(clixon_handle h, void *req, char *api_path, int pi,
|
||||
int pretty, restconf_media media_out, ietf_ds_t ds);
|
||||
|
||||
#endif /* _RESTCONF_METHODS_H_ */
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
#include "restconf_methods_get.h"
|
||||
|
||||
/* Forward */
|
||||
static int api_data_pagination(clicon_handle h, void *req, char *api_path, int pi, cvec *qvec, int pretty, restconf_media media_out);
|
||||
static int api_data_pagination(clixon_handle h, void *req, char *api_path, int pi, cvec *qvec, int pretty, restconf_media media_out);
|
||||
|
||||
/*! Generic GET (both HEAD and GET)
|
||||
* According to restconf
|
||||
|
|
@ -97,7 +97,7 @@ static int api_data_pagination(clicon_handle h, void *req, char *api_path, int p
|
|||
* @note there is an ad-hoc method to determine json pagination request instead of regular GET
|
||||
*/
|
||||
static int
|
||||
api_data_get2(clicon_handle h,
|
||||
api_data_get2(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -130,7 +130,7 @@ api_data_get2(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
/* strip /... from start */
|
||||
|
|
@ -184,7 +184,7 @@ api_data_get2(clicon_handle h,
|
|||
if (strcmp(attr, "unbounded") != 0){
|
||||
char *reason = NULL;
|
||||
if ((ret = parse_int32(attr, &depth, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_int32");
|
||||
clixon_err(OE_XML, errno, "parse_int32");
|
||||
goto done;
|
||||
}
|
||||
if (ret==0){
|
||||
|
|
@ -206,7 +206,7 @@ api_data_get2(clicon_handle h,
|
|||
ret = clicon_rpc_get(h, xpath, nsc, content, depth, defaults, &xret);
|
||||
|
||||
if (ret < 0){
|
||||
if (netconf_operation_failed_xml(&xerr, "protocol", clicon_err_reason) < 0)
|
||||
if (netconf_operation_failed_xml(&xerr, "protocol", clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -227,7 +227,7 @@ api_data_get2(clicon_handle h,
|
|||
}
|
||||
/* Normal return, no error */
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (xpath==NULL || strcmp(xpath,"/")==0){ /* Special case: data root */
|
||||
|
|
@ -246,7 +246,7 @@ api_data_get2(clicon_handle h,
|
|||
}
|
||||
else{
|
||||
if (xpath_vec(xret, nsc, "%s", &xvec, &xlen, xpath) < 0){
|
||||
if (netconf_operation_failed_xml(&xerr, "application", clicon_err_reason) < 0)
|
||||
if (netconf_operation_failed_xml(&xerr, "application", clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -345,7 +345,7 @@ api_data_get2(clicon_handle h,
|
|||
* @see draft-ietf-netconf-restconf-collection-00.txt
|
||||
*/
|
||||
static int
|
||||
api_data_pagination(clicon_handle h,
|
||||
api_data_pagination(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -383,7 +383,7 @@ api_data_pagination(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
/* strip /... from start */
|
||||
|
|
@ -406,7 +406,7 @@ api_data_pagination(clicon_handle h,
|
|||
goto done;
|
||||
if (ret == 0){ /* validation failed */
|
||||
if ((xe = xpath_first(xerr, NULL, "rpc-error")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
clixon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
goto done;
|
||||
}
|
||||
if (api_return_err(h, req, xe, pretty, media_out, 0) < 0)
|
||||
|
|
@ -419,7 +419,7 @@ api_data_pagination(clicon_handle h,
|
|||
"Element is not list or leaf-list which is required for GET paginate") < 0)
|
||||
goto done;
|
||||
if ((xe = xpath_first(xerr, NULL, "rpc-error")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
clixon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
goto done;
|
||||
}
|
||||
if (api_return_err(h, req, xe, pretty, media_out, 0) < 0)
|
||||
|
|
@ -436,7 +436,7 @@ api_data_pagination(clicon_handle h,
|
|||
"content", "Unrecognized value of content attribute") < 0)
|
||||
goto done;
|
||||
if ((xe = xpath_first(xerr, NULL, "rpc-error")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
clixon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
goto done;
|
||||
}
|
||||
if (api_return_err(h, req, xe, pretty, media_out, 0) < 0)
|
||||
|
|
@ -446,7 +446,7 @@ api_data_pagination(clicon_handle h,
|
|||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s path:%s", __FUNCTION__, xpath);
|
||||
if (content != CONTENT_CONFIG && content != CONTENT_NONCONFIG && content != CONTENT_ALL){
|
||||
clicon_err(OE_XML, EINVAL, "Invalid content attribute %d", content);
|
||||
clixon_err(OE_XML, EINVAL, "Invalid content attribute %d", content);
|
||||
goto done;
|
||||
}
|
||||
/* Clixon extensions and collection attributes */
|
||||
|
|
@ -456,7 +456,7 @@ api_data_pagination(clicon_handle h,
|
|||
if (strcmp(attr, "unbounded") != 0){
|
||||
char *reason = NULL;
|
||||
if ((ret = parse_int32(attr, &depth, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_int32");
|
||||
clixon_err(OE_XML, errno, "parse_int32");
|
||||
goto done;
|
||||
}
|
||||
if (ret==0){
|
||||
|
|
@ -493,10 +493,10 @@ api_data_pagination(clicon_handle h,
|
|||
if (clicon_rpc_get_pageable_list(h, "running", xpath, nsc, content,
|
||||
depth, NULL, offset, limit, direction, sort, where,
|
||||
&xret) < 0){
|
||||
if (netconf_operation_failed_xml(&xerr, "protocol", clicon_err_reason) < 0)
|
||||
if (netconf_operation_failed_xml(&xerr, "protocol", clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if ((xe = xpath_first(xerr, NULL, "rpc-error")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
clixon_err(OE_XML, EINVAL, "rpc-error not found (internal error)");
|
||||
goto done;
|
||||
}
|
||||
if (api_return_err(h, req, xe, pretty, media_out, 0) < 0)
|
||||
|
|
@ -607,7 +607,7 @@ api_data_pagination(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
api_data_head(clicon_handle h,
|
||||
api_data_head(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -648,7 +648,7 @@ api_data_head(clicon_handle h,
|
|||
* Netconf: <get-config>, <get>
|
||||
*/
|
||||
int
|
||||
api_data_get(clicon_handle h,
|
||||
api_data_get(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -703,7 +703,7 @@ api_data_get(clicon_handle h,
|
|||
* { 'ietf-system:system-restart' : [null] }
|
||||
*/
|
||||
int
|
||||
api_operations_get(clicon_handle h,
|
||||
api_operations_get(clixon_handle h,
|
||||
void *req,
|
||||
char *path,
|
||||
int pi,
|
||||
|
|
|
|||
|
|
@ -41,11 +41,11 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_data_head(clicon_handle h, void *req, char *api_path, int pi,
|
||||
int api_data_head(clixon_handle h, void *req, char *api_path, int pi,
|
||||
cvec *qvec, int pretty, restconf_media media_out, ietf_ds_t ds);
|
||||
int api_data_get(clicon_handle h, void *req, char *api_path, int pi,
|
||||
int api_data_get(clixon_handle h, void *req, char *api_path, int pi,
|
||||
cvec *qvec, int pretty, restconf_media media_out, ietf_ds_t ds);
|
||||
int api_operations_get(clicon_handle h, void *req,
|
||||
int api_operations_get(clixon_handle h, void *req,
|
||||
char *api_path, int pi, cvec *qvec, char *data,
|
||||
int pretty, restconf_media media_out);
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
|
|
@ -205,7 +205,7 @@ yang_patch_strip_after_last_slash(char* val)
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang_patch_do_replace(clicon_handle h,
|
||||
yang_patch_do_replace(clixon_handle h,
|
||||
void *req,
|
||||
int pi,
|
||||
cvec *qvec,
|
||||
|
|
@ -226,23 +226,23 @@ yang_patch_do_replace(clicon_handle h,
|
|||
cbuf *json_simple_patch = NULL;
|
||||
|
||||
if ((delete_req_uri = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((json_simple_patch = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
// Make delete_req_uri something like "/restconf/data/ietf-interfaces:interfaces"
|
||||
if (cbuf_append_str(delete_req_uri, cbuf_get(simple_patch_request_uri)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
goto done;
|
||||
}
|
||||
|
||||
// Add the target to delete_req_uri,
|
||||
// so it's something like "/restconf/data/ietf-interfaces:interfaces/interface=eth2"
|
||||
if (cbuf_append_str(delete_req_uri, target_val) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -259,7 +259,7 @@ yang_patch_do_replace(clicon_handle h,
|
|||
|
||||
// Make post_req_uri something like "/restconf/data/ietf-interfaces:interfaces"
|
||||
if (cbuf_append_str(simple_patch_request_uri, cbuf_get(post_req_uri)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_append_str");
|
||||
goto done;
|
||||
}
|
||||
// Now insert the new values into the data
|
||||
|
|
@ -307,7 +307,7 @@ yang_patch_do_replace(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang_patch_do_create(clicon_handle h,
|
||||
yang_patch_do_create(clixon_handle h,
|
||||
void *req,
|
||||
int pi,
|
||||
cvec *qvec,
|
||||
|
|
@ -326,7 +326,7 @@ yang_patch_do_create(clicon_handle h,
|
|||
|
||||
// Send the POST request
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
for (int k = 0; k < value_vec_len; k++) {
|
||||
|
|
@ -368,7 +368,7 @@ yang_patch_do_create(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang_patch_do_insert(clicon_handle h,
|
||||
yang_patch_do_insert(clixon_handle h,
|
||||
void *req,
|
||||
int pi,
|
||||
int pretty,
|
||||
|
|
@ -391,11 +391,11 @@ yang_patch_do_insert(clicon_handle h,
|
|||
cvec *qvec_tmp = NULL;
|
||||
|
||||
if ((point_str = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((qvec_tmp = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
// Loop through the XML, and get each value
|
||||
|
|
@ -410,7 +410,7 @@ yang_patch_do_insert(clicon_handle h,
|
|||
|
||||
// Set the insert attributes
|
||||
if ((cv = cvec_add(qvec_tmp, CGV_STRING)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_add");
|
||||
clixon_err(OE_UNIX, errno, "cvec_add");
|
||||
goto done;
|
||||
}
|
||||
cv_name_set(cv, "insert");
|
||||
|
|
@ -420,7 +420,7 @@ yang_patch_do_insert(clicon_handle h,
|
|||
if (point_val)
|
||||
cbuf_append_str(point_str, point_val);
|
||||
if ((cv = cvec_add(qvec_tmp, CGV_STRING)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_add");
|
||||
clixon_err(OE_UNIX, errno, "cvec_add");
|
||||
goto done;
|
||||
}
|
||||
cv_name_set(cv, "point");
|
||||
|
|
@ -459,7 +459,7 @@ yang_patch_do_insert(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang_patch_do_merge(clicon_handle h,
|
||||
yang_patch_do_merge(clixon_handle h,
|
||||
void *req,
|
||||
int pi,
|
||||
cvec *qvec,
|
||||
|
|
@ -479,7 +479,7 @@ yang_patch_do_merge(clicon_handle h,
|
|||
cbuf *json_simple_patch = NULL;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (key_xn != NULL)
|
||||
|
|
@ -521,7 +521,7 @@ yang_patch_do_merge(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang_patch_do_value(clicon_handle h,
|
||||
yang_patch_do_value(clixon_handle h,
|
||||
void *req,
|
||||
int pi,
|
||||
cvec *qvec,
|
||||
|
|
@ -551,7 +551,7 @@ yang_patch_do_value(clicon_handle h,
|
|||
key_node_id = xml_name(*values_child_vec);
|
||||
/* Create cbufs:s */
|
||||
if ((patch_header = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(patch_header, "%s:%s", modname, key_node_id);
|
||||
|
|
@ -601,7 +601,7 @@ yang_patch_do_value(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
yang_patch_do_edit(clicon_handle h,
|
||||
yang_patch_do_edit(clixon_handle h,
|
||||
void *req,
|
||||
int pi,
|
||||
cvec *qvec,
|
||||
|
|
@ -638,26 +638,26 @@ yang_patch_do_edit(clicon_handle h,
|
|||
clixon_debug_xml(1, xn, "%s %d xn:", __FUNCTION__, __LINE__);
|
||||
/* Create cbufs:s */
|
||||
if ((simple_patch_request_uri = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((api_path_target = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((x = xpath_first(xn, NULL, "target")) == NULL){
|
||||
clicon_err(OE_YANG, 0, "target mandatory element not found");
|
||||
clixon_err(OE_YANG, 0, "target mandatory element not found");
|
||||
goto done;
|
||||
}
|
||||
target_val = xml_body(x);
|
||||
if ((x = xpath_first(xn, NULL, "operation")) == NULL){
|
||||
clicon_err(OE_YANG, 0, "operation mandatory element not found");
|
||||
clixon_err(OE_YANG, 0, "operation mandatory element not found");
|
||||
goto done;
|
||||
}
|
||||
operation = yang_patch_op2int(xml_body(x));
|
||||
/* target and operation are mandatory */
|
||||
if (target_val == NULL){
|
||||
clicon_err(OE_YANG, 0, "operation/target: mandatory element not found");
|
||||
clixon_err(OE_YANG, 0, "operation/target: mandatory element not found");
|
||||
goto done;
|
||||
}
|
||||
if (operation == YANG_PATCH_OP_INSERT){
|
||||
|
|
@ -666,7 +666,7 @@ yang_patch_do_edit(clicon_handle h,
|
|||
if ((x = xpath_first(xn, NULL, "where")) != NULL)
|
||||
where_val = xml_body(x);
|
||||
if (point_val == NULL || where_val == NULL){
|
||||
clicon_err(OE_YANG, 0, "point/where: expected element not found");
|
||||
clixon_err(OE_YANG, 0, "point/where: expected element not found");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -756,7 +756,7 @@ yang_patch_do_edit(clicon_handle h,
|
|||
* Currently "move" not supported
|
||||
*/
|
||||
int
|
||||
api_data_yang_patch(clicon_handle h,
|
||||
api_data_yang_patch(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path0,
|
||||
int pi,
|
||||
|
|
@ -780,7 +780,7 @@ api_data_yang_patch(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s api_path:\"%s\"", __FUNCTION__, api_path0);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
api_path=api_path0;
|
||||
|
|
@ -808,7 +808,7 @@ api_data_yang_patch(clicon_handle h,
|
|||
}
|
||||
/* Common error handling for json/xml parsing above */
|
||||
if (ret < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -860,7 +860,7 @@ api_data_yang_patch(clicon_handle h,
|
|||
#else // CLIXON_YANG_PATCH
|
||||
|
||||
int
|
||||
api_data_yang_patch(clicon_handle h,
|
||||
api_data_yang_patch(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path0,
|
||||
int pi,
|
||||
|
|
@ -871,7 +871,7 @@ api_data_yang_patch(clicon_handle h,
|
|||
restconf_media media_out,
|
||||
ietf_ds_t ds)
|
||||
{
|
||||
clicon_err(OE_RESTCONF, 0, "Not implemented");
|
||||
clixon_err(OE_RESTCONF, 0, "Not implemented");
|
||||
return -1;
|
||||
}
|
||||
#endif // CLIXON_YANG_PATCH
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_data_yang_patch(clicon_handle h, void *req, char *api_path0,
|
||||
int api_data_yang_patch(clixon_handle h, void *req, char *api_path0,
|
||||
int pi,
|
||||
cvec *qvec, char *data,
|
||||
int pretty, restconf_media media_in, restconf_media media_out,
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "restconf_lib.h"
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
* @note ports are ignored
|
||||
*/
|
||||
static int
|
||||
http_location_header(clicon_handle h,
|
||||
http_location_header(clixon_handle h,
|
||||
void *req,
|
||||
cxobj *xobj)
|
||||
{
|
||||
|
|
@ -91,7 +91,7 @@ http_location_header(clicon_handle h,
|
|||
goto done;
|
||||
if (xobj != NULL){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cbuf_new");
|
||||
clixon_err(OE_UNIX, 0, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (xml2api_path_1(xobj, cb) < 0)
|
||||
|
|
@ -155,7 +155,7 @@ http_location_header(clicon_handle h,
|
|||
* @see api_data_put
|
||||
*/
|
||||
int
|
||||
api_data_post(clicon_handle h,
|
||||
api_data_post(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -192,7 +192,7 @@ api_data_post(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s api_path:\"%s\"", __FUNCTION__, api_path);
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s data:\"%s\"", __FUNCTION__, data);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
for (i=0; i<pi; i++)
|
||||
|
|
@ -241,7 +241,7 @@ api_data_post(clicon_handle h,
|
|||
switch (media_in){
|
||||
case YANG_DATA_XML:
|
||||
if ((ret = clixon_xml_parse_string(data, yb, yspec, &xbot, &xerr)) < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -255,7 +255,7 @@ api_data_post(clicon_handle h,
|
|||
break;
|
||||
case YANG_DATA_JSON:
|
||||
if ((ret = clixon_json_parse_string(data, 1, yb, yspec, &xbot, &xerr)) < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -335,7 +335,7 @@ api_data_post(clicon_handle h,
|
|||
|
||||
/* Create text buffer for transfer to backend */
|
||||
if ((cbx = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cbuf_new");
|
||||
clixon_err(OE_UNIX, 0, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* For internal XML protocol: add username attribute for access control
|
||||
|
|
@ -412,7 +412,7 @@ api_data_post(clicon_handle h,
|
|||
* @param[in] media_out Output media
|
||||
* @retval 1 OK
|
||||
* @retval 0 Fail, Error message sent
|
||||
* @retval -1 Fatal error, clicon_err called
|
||||
* @retval -1 Fatal error
|
||||
*
|
||||
* RFC8040 3.6.1
|
||||
* If the "rpc" or "action" statement has an "input" section, then
|
||||
|
|
@ -423,7 +423,7 @@ api_data_post(clicon_handle h,
|
|||
* (Any other input is assumed as error.)
|
||||
*/
|
||||
static int
|
||||
api_operations_post_input(clicon_handle h,
|
||||
api_operations_post_input(clixon_handle h,
|
||||
void *req,
|
||||
char *data,
|
||||
yang_stmt *yspec,
|
||||
|
|
@ -443,7 +443,7 @@ api_operations_post_input(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s", __FUNCTION__, data);
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cbuf_new");
|
||||
clixon_err(OE_UNIX, 0, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Parse input data as json or xml into xml */
|
||||
|
|
@ -453,7 +453,7 @@ api_operations_post_input(clicon_handle h,
|
|||
/* XXX: Here data is on the form: <input xmlns="urn:example:clixon"/> and has no proper yang binding
|
||||
* support */
|
||||
if ((ret = clixon_xml_parse_string(data, YB_NONE, yspec, &xdata, &xerr)) < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -469,7 +469,7 @@ api_operations_post_input(clicon_handle h,
|
|||
/* XXX: Here data is on the form: {"clixon-example:input":null} and has no proper yang binding
|
||||
* support */
|
||||
if ((ret = clixon_json_parse_string(data, 1, YB_NONE, yspec, &xdata, &xerr)) < 0){
|
||||
if (netconf_malformed_message_xml(&xerr, clicon_err_reason) < 0)
|
||||
if (netconf_malformed_message_xml(&xerr, clixon_err_reason()) < 0)
|
||||
goto done;
|
||||
if (api_return_err0(h, req, xerr, pretty, media_out, 0) < 0)
|
||||
goto done;
|
||||
|
|
@ -545,11 +545,11 @@ api_operations_post_input(clicon_handle h,
|
|||
* @param[out] xoutputp Restconf JSON/XML output
|
||||
* @retval 1 OK
|
||||
* @retval 0 Fail, Error message sent
|
||||
* @retval -1 Fatal error, clicon_err called
|
||||
* @retval -1 Fatal error
|
||||
* xret should like: <top><rpc-reply><x xmlns="uri">0</x></rpc-reply></top>
|
||||
*/
|
||||
static int
|
||||
api_operations_post_output(clicon_handle h,
|
||||
api_operations_post_output(clixon_handle h,
|
||||
void *req,
|
||||
cxobj *xret,
|
||||
yang_stmt *yspec,
|
||||
|
|
@ -691,7 +691,7 @@ api_operations_post_output(clicon_handle h,
|
|||
* 10. Validate and send reply to originator
|
||||
*/
|
||||
int
|
||||
api_operations_post(clicon_handle h,
|
||||
api_operations_post(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
int pi,
|
||||
|
|
@ -725,11 +725,11 @@ api_operations_post(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s json:\"%s\" path:\"%s\"", __FUNCTION__, data, api_path);
|
||||
/* 1. Initialize */
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, 0, "cbuf_new");
|
||||
clixon_err(OE_UNIX, 0, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
for (i=0; i<pi; i++)
|
||||
|
|
|
|||
|
|
@ -41,13 +41,13 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_data_post(clicon_handle h, void *req, char *api_path,
|
||||
int api_data_post(clixon_handle h, void *req, char *api_path,
|
||||
int pi, cvec *qvec, char *data,
|
||||
int pretty,
|
||||
restconf_media media_in,
|
||||
restconf_media media_out, ietf_ds_t ds);
|
||||
|
||||
int api_operations_post(clicon_handle h, void *req, char *api_path,
|
||||
int api_operations_post(clixon_handle h, void *req, char *api_path,
|
||||
int pi, cvec *qvec, char *data,
|
||||
int pretty, restconf_media media_out);
|
||||
|
||||
|
|
|
|||
|
|
@ -92,26 +92,26 @@ restconf_stream_data_new(restconf_conn *rc,
|
|||
restconf_stream_data *sd;
|
||||
|
||||
if ((sd = malloc(sizeof(restconf_stream_data))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
return NULL;
|
||||
}
|
||||
memset(sd, 0, sizeof(restconf_stream_data));
|
||||
sd->sd_stream_id = stream_id;
|
||||
sd->sd_fd = -1;
|
||||
if ((sd->sd_inbuf = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
return NULL;
|
||||
}
|
||||
if ((sd->sd_indata = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
return NULL;
|
||||
}
|
||||
if ((sd->sd_outp_hdrs = cvec_new(0)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
return NULL;
|
||||
}
|
||||
if ((sd->sd_outp_buf = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
return NULL;
|
||||
}
|
||||
sd->sd_conn = rc;
|
||||
|
|
@ -176,14 +176,14 @@ restconf_stream_free(restconf_stream_data *sd)
|
|||
* @see restconf_conn_free
|
||||
*/
|
||||
restconf_conn *
|
||||
restconf_conn_new(clicon_handle h,
|
||||
restconf_conn_new(clixon_handle h,
|
||||
int s,
|
||||
restconf_socket *rsock)
|
||||
{
|
||||
restconf_conn *rc;
|
||||
|
||||
if ((rc = (restconf_conn*)malloc(sizeof(restconf_conn))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
return NULL;
|
||||
}
|
||||
memset(rc, 0, sizeof(restconf_conn));
|
||||
|
|
@ -210,7 +210,7 @@ restconf_conn_free(restconf_conn *rc)
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (rc == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "rc is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "rc is NULL");
|
||||
goto done;
|
||||
}
|
||||
#ifdef HAVE_LIBNGHTTP2
|
||||
|
|
@ -257,7 +257,7 @@ ssl_x509_name_oneline(SSL *ssl,
|
|||
X509_NAME *name;
|
||||
|
||||
if (ssl == NULL || oneline == NULL) {
|
||||
clicon_err(OE_RESTCONF, EINVAL, "ssl or cn is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "ssl or cn is NULL");
|
||||
goto done;
|
||||
}
|
||||
#if OPENSSL_VERSION_NUMBER < 0x30000000L
|
||||
|
|
@ -272,7 +272,7 @@ ssl_x509_name_oneline(SSL *ssl,
|
|||
if ((p = X509_NAME_oneline(name, NULL, 0)) == NULL)
|
||||
goto ok;
|
||||
if ((*oneline = strdup(p)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -303,7 +303,7 @@ ssl_x509_name_oneline(SSL *ssl,
|
|||
* @see restconf_accept_client where connection can be exited at an earlier stage
|
||||
*/
|
||||
int
|
||||
restconf_connection_sanity(clicon_handle h,
|
||||
restconf_connection_sanity(clixon_handle h,
|
||||
restconf_conn *rc,
|
||||
restconf_stream_data *sd)
|
||||
{
|
||||
|
|
@ -339,12 +339,12 @@ restconf_connection_sanity(clicon_handle h,
|
|||
if (ssl_x509_name_oneline(rc->rc_ssl, &oneline) < 0)
|
||||
goto done;
|
||||
if (oneline)
|
||||
clicon_log(LOG_NOTICE, "Cert error: %s: %s", oneline, X509_verify_cert_error_string(code));
|
||||
clixon_log(h, LOG_NOTICE, "Cert error: %s: %s", oneline, X509_verify_cert_error_string(code));
|
||||
else
|
||||
clicon_log(LOG_NOTICE, "Cert error: %s", X509_verify_cert_error_string(code));
|
||||
clixon_log(h, LOG_NOTICE, "Cert error: %s", X509_verify_cert_error_string(code));
|
||||
/* Send return error message */
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cberr, "HTTP cert verification failed: %s[%ld]",
|
||||
|
|
@ -385,7 +385,7 @@ restconf_connection_sanity(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
native_buf_write(clicon_handle h,
|
||||
native_buf_write(clixon_handle h,
|
||||
char *buf,
|
||||
size_t buflen,
|
||||
restconf_conn *rc,
|
||||
|
|
@ -398,7 +398,7 @@ native_buf_write(clicon_handle h,
|
|||
SSL *ssl;
|
||||
|
||||
if (rc == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "rc is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "rc is NULL");
|
||||
goto done;
|
||||
}
|
||||
ssl = rc->rc_ssl;
|
||||
|
|
@ -411,7 +411,7 @@ native_buf_write(clicon_handle h,
|
|||
size_t sz;
|
||||
sz = buflen>256?256:buflen; /* Truncate to 256 */
|
||||
if ((dbgstr = malloc(sz+1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memcpy(dbgstr, buf, sz);
|
||||
|
|
@ -435,12 +435,12 @@ native_buf_write(clicon_handle h,
|
|||
continue;
|
||||
}
|
||||
else{
|
||||
clicon_err(OE_RESTCONF, er, "SSL_write %d", er);
|
||||
clixon_err(OE_RESTCONF, er, "SSL_write %d", er);
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
clicon_err(OE_SSL, 0, "SSL_write");
|
||||
clixon_err(OE_SSL, 0, "SSL_write");
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -461,7 +461,7 @@ native_buf_write(clicon_handle h,
|
|||
goto closed; /* Close socket and ssl */
|
||||
break;
|
||||
default:
|
||||
clicon_err(OE_UNIX, errno, "write %d", errno);
|
||||
clixon_err(OE_UNIX, errno, "write %d", errno);
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -490,7 +490,7 @@ native_buf_write(clicon_handle h,
|
|||
* @see restconf_badrequest which can only be called in a request context
|
||||
*/
|
||||
static int
|
||||
native_send_badrequest(clicon_handle h,
|
||||
native_send_badrequest(clixon_handle h,
|
||||
char *media,
|
||||
char *body,
|
||||
restconf_conn *rc)
|
||||
|
|
@ -500,7 +500,7 @@ native_send_badrequest(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n");
|
||||
|
|
@ -530,7 +530,7 @@ native_send_badrequest(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
http1_native_clear_input(clicon_handle h,
|
||||
http1_native_clear_input(clixon_handle h,
|
||||
restconf_stream_data *sd)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -586,7 +586,7 @@ read_ssl(restconf_conn *rc,
|
|||
*np = 0; /* should already be zero */
|
||||
break;
|
||||
default:
|
||||
clicon_log(LOG_WARNING, "%s SSL_read(): %s sslerr:%d", __FUNCTION__, strerror(errno), sslerr);
|
||||
clixon_log(rc->rc_h, LOG_WARNING, "%s SSL_read(): %s sslerr:%d", __FUNCTION__, strerror(errno), sslerr);
|
||||
*np = 0;
|
||||
break;
|
||||
} /* switch */
|
||||
|
|
@ -635,7 +635,7 @@ read_regular(restconf_conn *rc,
|
|||
*again = 1;
|
||||
break;
|
||||
default:;
|
||||
clicon_err(OE_XML, errno, "read");
|
||||
clixon_err(OE_XML, errno, "read");
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -665,14 +665,14 @@ restconf_http1_process(restconf_conn *rc,
|
|||
{
|
||||
int retval = -1;
|
||||
restconf_stream_data *sd;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
int ret;
|
||||
int status;
|
||||
cbuf *cberr = NULL;
|
||||
|
||||
h = rc->rc_h;
|
||||
if ((sd = restconf_stream_find(rc, 0)) == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "restconf stream not found");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "restconf stream not found");
|
||||
goto done;
|
||||
}
|
||||
/* Two states for reading:
|
||||
|
|
@ -691,7 +691,7 @@ restconf_http1_process(restconf_conn *rc,
|
|||
goto done;
|
||||
if (status == 1){ /* Next read: keep header state and only append inbody */
|
||||
if (cbuf_append_buf(sd->sd_indata, buf, n) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_append");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_append");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -700,7 +700,7 @@ restconf_http1_process(restconf_conn *rc,
|
|||
* This is different from sd_indata that it is before and includes headers
|
||||
*/
|
||||
if (cbuf_append_buf(sd->sd_inbuf, buf, n) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_append");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_append");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_http1_parse_string(h, rc, cbuf_get(sd->sd_inbuf)) < 0){
|
||||
|
|
@ -720,10 +720,10 @@ restconf_http1_process(restconf_conn *rc,
|
|||
* timeout here.
|
||||
*/
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cberr, "<errors xmlns=\"urn:ietf:params:xml:ns:yang:ietf-restconf\"><error><error-type>protocol</error-type><error-tag>malformed-message</error-tag><error-message>%s</error-message></error></errors>", clicon_err_reason);
|
||||
cprintf(cberr, "<errors xmlns=\"urn:ietf:params:xml:ns:yang:ietf-restconf\"><error><error-type>protocol</error-type><error-tag>malformed-message</error-tag><error-message>%s</error-message></error></errors>", clixon_err_reason());
|
||||
if ((ret = native_send_badrequest(h, "application/yang-data+xml", cbuf_get(cberr), rc)) < 0)
|
||||
goto done;
|
||||
if (http1_native_clear_input(h, sd) < 0)
|
||||
|
|
@ -812,7 +812,7 @@ restconf_http2_upgrade(restconf_conn *rc)
|
|||
restconf_stream_data *sd;
|
||||
|
||||
if ((sd = restconf_stream_find(rc, 0)) == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "restconf stream not found");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "restconf stream not found");
|
||||
goto done;
|
||||
}
|
||||
if (sd->sd_upgrade2){
|
||||
|
|
@ -836,7 +836,7 @@ restconf_http2_upgrade(restconf_conn *rc)
|
|||
sd->sd_settings2?strlen((const char*)sd->sd_settings2):0,
|
||||
0, /* XXX: 1 if HEAD */
|
||||
NULL)) < 0){
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_session_upgrade2");
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_session_upgrade2");
|
||||
goto done;
|
||||
}
|
||||
if (http2_send_server_connection(rc) < 0){
|
||||
|
|
@ -889,7 +889,7 @@ restconf_http2_process(restconf_conn *rc,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (rc->rc_exit){ /* Server-initiated exit for http/2 */
|
||||
if ((ngerr = nghttp2_session_terminate_session(rc->rc_ngsession, 0)) < 0){
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_session_terminate_session %d", ngerr);
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_session_terminate_session %d", ngerr);
|
||||
goto done; // XXX not here in original?
|
||||
}
|
||||
}
|
||||
|
|
@ -924,7 +924,7 @@ restconf_http2_process(restconf_conn *rc,
|
|||
* @retval rn Restconf native handle
|
||||
*/
|
||||
restconf_native_handle *
|
||||
restconf_native_handle_get(clicon_handle h)
|
||||
restconf_native_handle_get(clixon_handle h)
|
||||
{
|
||||
clicon_hash_t *cdat = clicon_data(h);
|
||||
size_t len;
|
||||
|
|
@ -963,11 +963,11 @@ restconf_connection(int s,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %d", __FUNCTION__, s);
|
||||
if ((rc = (restconf_conn*)arg) == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "arg is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "arg is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (s != rc->rc_s){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "s != rc->rc_s");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "s != rc->rc_s");
|
||||
goto done;
|
||||
}
|
||||
gettimeofday(&rc->rc_t, NULL); /* activity timer */
|
||||
|
|
@ -1049,13 +1049,13 @@ restconf_connection_close1(restconf_conn *rc)
|
|||
restconf_socket *rsock;
|
||||
|
||||
if (rc == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "rc is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "rc is NULL");
|
||||
goto done;
|
||||
}
|
||||
rsock = rc->rc_socket;
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s \"%s\"", __FUNCTION__, rsock->rs_description);
|
||||
if (close(rc->rc_s) < 0){
|
||||
clicon_err(OE_UNIX, errno, "close");
|
||||
clixon_err(OE_UNIX, errno, "close");
|
||||
goto done;
|
||||
}
|
||||
clixon_event_unreg_fd(rc->rc_s, restconf_connection);
|
||||
|
|
@ -1113,7 +1113,7 @@ restconf_close_ssl_socket(restconf_conn *rc,
|
|||
else{
|
||||
/* To avoid close again in restconf_native_terminate */
|
||||
rc->rc_s = -1;
|
||||
clicon_err(OE_SSL, sslerr, "SSL_shutdown, %s err:%d %d", callfn, sslerr, er);
|
||||
clixon_err(OE_SSL, sslerr, "SSL_shutdown, %s err:%d %d", callfn, sslerr, er);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1141,7 +1141,7 @@ restconf_close_ssl_socket(restconf_conn *rc,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
ssl_alpn_check(clicon_handle h,
|
||||
ssl_alpn_check(clixon_handle h,
|
||||
const unsigned char *alpn,
|
||||
unsigned int alpnlen,
|
||||
restconf_conn *rc,
|
||||
|
|
@ -1162,12 +1162,12 @@ ssl_alpn_check(clicon_handle h,
|
|||
#endif
|
||||
else {
|
||||
if ((cberr = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (alpn != NULL){
|
||||
cprintf(cberr, "<errors xmlns=\"urn:ietf:params:xml:ns:yang:ietf-restconf\"><error><error-type>protocol</error-type><error-tag>malformed-message</error-tag><error-message>ALPN: protocol not recognized: %s</error-message></error></errors>", alpn);
|
||||
clicon_log(LOG_INFO, "%s Warning: %s", __FUNCTION__, cbuf_get(cberr));
|
||||
clixon_log(h, LOG_INFO, "%s Warning: %s", __FUNCTION__, cbuf_get(cberr));
|
||||
if (native_send_badrequest(h,
|
||||
"application/yang-data+xml",
|
||||
cbuf_get(cberr), rc) < 0)
|
||||
|
|
@ -1186,7 +1186,7 @@ ssl_alpn_check(clicon_handle h,
|
|||
if (pstr)
|
||||
p = restconf_str2proto(pstr);
|
||||
if (pstr == NULL || p == -1){
|
||||
clicon_log(LOG_INFO, "%s Warning: ALPN: No protocol selected, or no ALPN?", __FUNCTION__);
|
||||
clixon_log(h, LOG_INFO, "%s Warning: ALPN: No protocol selected, or no ALPN?", __FUNCTION__);
|
||||
if (restconf_close_ssl_socket(rc, __FUNCTION__, 0) < 0)
|
||||
goto done;
|
||||
goto fail;
|
||||
|
|
@ -1223,7 +1223,7 @@ ssl_alpn_check(clicon_handle h,
|
|||
* @see openssl_init_socket where this callback is registered
|
||||
*/
|
||||
int
|
||||
restconf_ssl_accept_client(clicon_handle h,
|
||||
restconf_ssl_accept_client(clixon_handle h,
|
||||
int s,
|
||||
restconf_socket *rsock,
|
||||
restconf_conn **rcp)
|
||||
|
|
@ -1247,7 +1247,7 @@ restconf_ssl_accept_client(clicon_handle h,
|
|||
#endif
|
||||
#endif
|
||||
if ((rn = restconf_native_handle_get(h)) == NULL){
|
||||
clicon_err(OE_XML, EFAULT, "No openssl handle");
|
||||
clixon_err(OE_XML, EFAULT, "No openssl handle");
|
||||
goto done;
|
||||
}
|
||||
/*
|
||||
|
|
@ -1258,7 +1258,7 @@ restconf_ssl_accept_client(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s s:%d", __FUNCTION__, rc->rc_s);
|
||||
if (rsock->rs_ssl){
|
||||
if ((rc->rc_ssl = SSL_new(rn->rn_ctx)) == NULL){
|
||||
clicon_err(OE_SSL, 0, "SSL_new");
|
||||
clixon_err(OE_SSL, 0, "SSL_new");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s SSL_new(%p)", __FUNCTION__, rc->rc_ssl);
|
||||
|
|
@ -1279,16 +1279,16 @@ restconf_ssl_accept_client(clicon_handle h,
|
|||
emailAddress = olof@hagsand.se
|
||||
*/
|
||||
if (SSL_set1_host(rc->rc_ssl, "andy") != 1) { /* for peer cert */
|
||||
clicon_err(OE_SSL, 0, "SSL_set1_host");
|
||||
clixon_err(OE_SSL, 0, "SSL_set1_host");
|
||||
goto done;
|
||||
}
|
||||
if (SSL_add1_host(rc->rc_ssl, "olof") != 1) { /* for peer cert */
|
||||
clicon_err(OE_SSL, 0, "SSL_set1_host");
|
||||
clixon_err(OE_SSL, 0, "SSL_set1_host");
|
||||
goto done;
|
||||
}
|
||||
#endif
|
||||
if (SSL_set_fd(rc->rc_ssl, rc->rc_s) != 1){
|
||||
clicon_err(OE_SSL, 0, "SSL_set_fd");
|
||||
clixon_err(OE_SSL, 0, "SSL_set_fd");
|
||||
goto done;
|
||||
}
|
||||
readmore = 1;
|
||||
|
|
@ -1348,7 +1348,7 @@ restconf_ssl_accept_client(clicon_handle h,
|
|||
case SSL_ERROR_WANT_CLIENT_HELLO_CB: /* 11 */
|
||||
#endif
|
||||
default:
|
||||
clicon_err(OE_SSL, 0, "SSL_accept:%d", e);
|
||||
clixon_err(OE_SSL, 0, "SSL_accept:%d", e);
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1409,7 +1409,7 @@ restconf_ssl_accept_client(clicon_handle h,
|
|||
}
|
||||
#if 0
|
||||
else{
|
||||
clicon_log(LOG_NOTICE, "Cert error: %s", X509_verify_cert_error_string(ret));
|
||||
clixon_log(h, LOG_NOTICE, "Cert error: %s", X509_verify_cert_error_string(ret));
|
||||
/* Maybe should return already here, but to get proper return message need to
|
||||
* continue to http/1 or http/2 handling
|
||||
* @see restconf_connection_sanity
|
||||
|
|
@ -1436,12 +1436,12 @@ restconf_ssl_accept_client(clicon_handle h,
|
|||
case HTTP_2:{
|
||||
if (http2_session_init(rc) < 0){
|
||||
restconf_close_ssl_socket(rc, __FUNCTION__, 0);
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
goto closed;
|
||||
}
|
||||
if (http2_send_server_connection(rc) < 0){
|
||||
restconf_close_ssl_socket(rc, __FUNCTION__, 0);
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
goto closed;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1475,7 +1475,7 @@ restconf_idle_timer_set(struct timeval t,
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "restconf idle timer %s", descr);
|
||||
|
|
@ -1521,11 +1521,11 @@ restconf_idle_cb(int fd,
|
|||
struct timeval to = {0,};
|
||||
|
||||
if ((rc = (restconf_conn *)arg) == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "rc is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "rc is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((rsock = rc->rc_socket) == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "rsock is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "rsock is NULL");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s \"%s\"", __FUNCTION__, rsock->rs_description);
|
||||
|
|
@ -1577,12 +1577,12 @@ restconf_idle_timer(restconf_conn *rc)
|
|||
restconf_socket *rsock;
|
||||
|
||||
if (rc == NULL || !rc->rc_callhome){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "rc is NULL or not callhome");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "rc is NULL or not callhome");
|
||||
goto done;
|
||||
}
|
||||
rsock = rc->rc_socket;
|
||||
if (rsock == NULL || !rsock->rs_periodic || rsock->rs_idle_timeout==0){
|
||||
clicon_err(OE_YANG, EINVAL, "rsock is NULL or not periodic");
|
||||
clixon_err(OE_YANG, EINVAL, "rsock is NULL or not periodic");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s \"%s\" register", __FUNCTION__, rsock->rs_description);
|
||||
|
|
@ -1609,7 +1609,7 @@ restconf_callhome_cb(int fd,
|
|||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
restconf_socket *rsock = NULL;
|
||||
struct sockaddr_in6 sin6 = {0,}; // because its larger than sin and sa
|
||||
struct sockaddr *sa = (struct sockaddr *)&sin6;
|
||||
|
|
@ -1620,7 +1620,7 @@ restconf_callhome_cb(int fd,
|
|||
|
||||
rsock = (restconf_socket *)arg;
|
||||
if (rsock == NULL || !rsock->rs_callhome){
|
||||
clicon_err(OE_YANG, EINVAL, "rsock is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "rsock is NULL");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s \"%s\"", __FUNCTION__, rsock->rs_description);
|
||||
|
|
@ -1629,7 +1629,7 @@ restconf_callhome_cb(int fd,
|
|||
if (clixon_inet2sin(rsock->rs_addrtype, rsock->rs_addrstr, rsock->rs_port, sa, &sa_len) < 0)
|
||||
goto done;
|
||||
if ((s = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) {
|
||||
clicon_err(OE_UNIX, errno, "socket");
|
||||
clixon_err(OE_UNIX, errno, "socket");
|
||||
goto done;
|
||||
}
|
||||
if (connect(s, sa, sa_len) < 0){
|
||||
|
|
@ -1683,7 +1683,7 @@ restconf_callhome_timer(restconf_socket *rsock,
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if (rsock == NULL || !rsock->rs_callhome){
|
||||
clicon_err(OE_YANG, EINVAL, "rsock is NULL or not callhome");
|
||||
clixon_err(OE_YANG, EINVAL, "rsock is NULL or not callhome");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s \"%s\"", __FUNCTION__, rsock->rs_description);
|
||||
|
|
@ -1709,7 +1709,7 @@ restconf_callhome_timer(restconf_socket *rsock,
|
|||
timeradd(&now, &t1, &t);
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "restconf callhome timer %s", rsock->rs_description);
|
||||
|
|
@ -1745,7 +1745,7 @@ restconf_callhome_timer(restconf_socket *rsock,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
restconf_socket_extract(clicon_handle h,
|
||||
restconf_socket_extract(clixon_handle h,
|
||||
cxobj *xs,
|
||||
cvec *nsc,
|
||||
restconf_socket *rsock,
|
||||
|
|
@ -1765,18 +1765,18 @@ restconf_socket_extract(clicon_handle h,
|
|||
yang_stmt *ysub = NULL;
|
||||
|
||||
if ((x = xpath_first(xs, nsc, "namespace")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "Mandatory namespace not given");
|
||||
clixon_err(OE_XML, EINVAL, "Mandatory namespace not given");
|
||||
goto done;
|
||||
}
|
||||
*namespace = xml_body(x);
|
||||
if ((x = xpath_first(xs, nsc, "description")) != NULL){
|
||||
if ((rsock->rs_description = strdup(xml_body(x))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if ((x = xpath_first(xs, nsc, "address")) == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "Mandatory address not given");
|
||||
clixon_err(OE_XML, EINVAL, "Mandatory address not given");
|
||||
goto done;
|
||||
}
|
||||
/* address is a union type and needs a special investigation to see which type (ipv4 or ipv6)
|
||||
|
|
@ -1785,25 +1785,25 @@ restconf_socket_extract(clicon_handle h,
|
|||
body = xml_body(x);
|
||||
y = xml_spec(x);
|
||||
if ((cv = cv_dup(yang_cv_get(y))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cv_dup");
|
||||
clixon_err(OE_UNIX, errno, "cv_dup");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = cv_parse1(body, cv, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "cv_parse1");
|
||||
clixon_err(OE_XML, errno, "cv_parse1");
|
||||
goto done;
|
||||
}
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EFAULT, "%s", reason);
|
||||
clixon_err(OE_XML, EFAULT, "%s", reason);
|
||||
goto done;
|
||||
}
|
||||
if ((ret = ys_cv_validate(h, cv, y, &ysub, &reason)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EFAULT, "Validation os address: %s", reason);
|
||||
clixon_err(OE_XML, EFAULT, "Validation os address: %s", reason);
|
||||
goto done;
|
||||
}
|
||||
if (ysub == NULL){
|
||||
clicon_err(OE_XML, EFAULT, "No address union type");
|
||||
clixon_err(OE_XML, EFAULT, "No address union type");
|
||||
goto done;
|
||||
}
|
||||
*address = body;
|
||||
|
|
@ -1818,11 +1818,11 @@ restconf_socket_extract(clicon_handle h,
|
|||
if ((x = xpath_first(xs, nsc, "port")) != NULL &&
|
||||
(str = xml_body(x)) != NULL){
|
||||
if ((ret = parse_uint16(str, port, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_uint16");
|
||||
clixon_err(OE_XML, errno, "parse_uint16");
|
||||
goto done;
|
||||
}
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EINVAL, "Unrecognized value of port: %s", str);
|
||||
clixon_err(OE_XML, EINVAL, "Unrecognized value of port: %s", str);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1834,7 +1834,7 @@ restconf_socket_extract(clicon_handle h,
|
|||
else if (strcmp(str, "true") == 0)
|
||||
rsock->rs_ssl = 1;
|
||||
else {
|
||||
clicon_err(OE_XML, EINVAL, "Unrecognized value of ssl: %s", str);
|
||||
clixon_err(OE_XML, EINVAL, "Unrecognized value of ssl: %s", str);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1848,22 +1848,22 @@ restconf_socket_extract(clicon_handle h,
|
|||
if ((x = xpath_first(xs, nsc, "call-home/connection-type/periodic/period")) != NULL &&
|
||||
(str = xml_body(x)) != NULL){
|
||||
if ((ret = parse_uint32(str, &rsock->rs_period, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_uint16");
|
||||
clixon_err(OE_XML, errno, "parse_uint16");
|
||||
goto done;
|
||||
}
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EINVAL, "Unrecognized value of period: %s", str);
|
||||
clixon_err(OE_XML, EINVAL, "Unrecognized value of period: %s", str);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if ((x = xpath_first(xs, nsc, "call-home/connection-type/periodic/idle-timeout")) != NULL &&
|
||||
(str = xml_body(x)) != NULL){
|
||||
if ((ret = parse_uint16(str, &rsock->rs_idle_timeout, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_uint16");
|
||||
clixon_err(OE_XML, errno, "parse_uint16");
|
||||
goto done;
|
||||
}
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EINVAL, "Unrecognized value of idle-timeout: %s", str);
|
||||
clixon_err(OE_XML, EINVAL, "Unrecognized value of idle-timeout: %s", str);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1871,11 +1871,11 @@ restconf_socket_extract(clicon_handle h,
|
|||
if ((x = xpath_first(xs, nsc, "call-home/reconnect-strategy/max-attempts")) != NULL &&
|
||||
(str = xml_body(x)) != NULL){
|
||||
if ((ret = parse_uint8(str, &rsock->rs_max_attempts, &reason)) < 0){
|
||||
clicon_err(OE_XML, errno, "parse_uint8");
|
||||
clixon_err(OE_XML, errno, "parse_uint8");
|
||||
goto done;
|
||||
}
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EINVAL, "Unrecognized value of max-attempts: %s", str);
|
||||
clixon_err(OE_XML, EINVAL, "Unrecognized value of max-attempts: %s", str);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
* Data structures:
|
||||
* 1 1
|
||||
* +--------------------+ restconf_handle_get +--------------------+
|
||||
* | rn restconf_native | <--------------------- | h clicon_handle |
|
||||
* | rn restconf_native | <--------------------- | h clixon_handle |
|
||||
* | _handle | +--------------------+
|
||||
* +--------------------+ ^
|
||||
* common SSL config \ |
|
||||
|
|
@ -109,7 +109,7 @@ typedef struct restconf_conn {
|
|||
int rc_proto_d1; /* parsed version digit 1 */
|
||||
int rc_proto_d2; /* parsed version digit 2 */
|
||||
int rc_s; /* Connection socket */
|
||||
clicon_handle rc_h; /* Clixon handle */
|
||||
clixon_handle rc_h; /* Clixon handle */
|
||||
SSL *rc_ssl; /* Structure for SSL connection */
|
||||
restconf_stream_data *rc_streams; /* List of http/2 session streams */
|
||||
int rc_exit; /* Set to close socket server-side */
|
||||
|
|
@ -132,7 +132,7 @@ typedef struct restconf_conn {
|
|||
*/
|
||||
typedef struct restconf_socket{
|
||||
qelem_t rs_qelem; /* List header */
|
||||
clicon_handle rs_h; /* Clixon handle */
|
||||
clixon_handle rs_h; /* Clixon handle */
|
||||
char *rs_description; /* Description */
|
||||
int rs_callhome; /* 0: listen, 1: callhome */
|
||||
int rs_ss; /* Listen: Server socket, ready for accept
|
||||
|
|
@ -174,19 +174,19 @@ typedef struct {
|
|||
restconf_stream_data *restconf_stream_data_new(restconf_conn *rc, int32_t stream_id);
|
||||
restconf_stream_data *restconf_stream_find(restconf_conn *rc, int32_t id);
|
||||
int restconf_stream_free(restconf_stream_data *sd);
|
||||
restconf_conn *restconf_conn_new(clicon_handle h, int s, restconf_socket *socket);
|
||||
restconf_conn *restconf_conn_new(clixon_handle h, int s, restconf_socket *socket);
|
||||
int ssl_x509_name_oneline(SSL *ssl, char **oneline);
|
||||
|
||||
int restconf_close_ssl_socket(restconf_conn *rc, const char *callfn, int sslerr0);
|
||||
int restconf_connection_sanity(clicon_handle h, restconf_conn *rc, restconf_stream_data *sd);
|
||||
restconf_native_handle *restconf_native_handle_get(clicon_handle h);
|
||||
int restconf_connection_sanity(clixon_handle h, restconf_conn *rc, restconf_stream_data *sd);
|
||||
restconf_native_handle *restconf_native_handle_get(clixon_handle h);
|
||||
int restconf_connection(int s, void *arg);
|
||||
int restconf_ssl_accept_client(clicon_handle h, int s, restconf_socket *rsock, restconf_conn **rcp);
|
||||
int restconf_ssl_accept_client(clixon_handle h, int s, restconf_socket *rsock, restconf_conn **rcp);
|
||||
int restconf_idle_timer_unreg(restconf_conn *rc);
|
||||
int restconf_idle_timer(restconf_conn *rc);
|
||||
int restconf_callhome_timer_unreg(restconf_socket *rsock);
|
||||
int restconf_callhome_timer(restconf_socket *rsock, int status);
|
||||
int restconf_socket_extract(clicon_handle h, cxobj *xs, cvec *nsc, restconf_socket *rsock,
|
||||
int restconf_socket_extract(clixon_handle h, cxobj *xs, cvec *nsc, restconf_socket *rsock,
|
||||
char **namespace, char **address, char **addrtype, uint16_t *port);
|
||||
|
||||
#endif /* _RESTCONF_NATIVE_H_ */
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#ifdef HAVE_LIBNGHTTP2
|
||||
|
|
@ -210,12 +210,12 @@ session_send_callback(nghttp2_session *session,
|
|||
continue;
|
||||
}
|
||||
else{
|
||||
clicon_err(OE_RESTCONF, er, "SSL_write %d", sslerr);
|
||||
clixon_err(OE_RESTCONF, er, "SSL_write %d", sslerr);
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
clicon_err(OE_SSL, 0, "SSL_write");
|
||||
clixon_err(OE_SSL, 0, "SSL_write");
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -240,7 +240,7 @@ session_send_callback(nghttp2_session *session,
|
|||
}
|
||||
#endif
|
||||
else{
|
||||
clicon_err(OE_UNIX, errno, "write");
|
||||
clixon_err(OE_UNIX, errno, "write");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -288,7 +288,7 @@ static int
|
|||
restconf_nghttp2_path(restconf_stream_data *sd)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h;
|
||||
clixon_handle h;
|
||||
restconf_conn *rc;
|
||||
char *oneline = NULL;
|
||||
cvec *cvv = NULL;
|
||||
|
|
@ -297,7 +297,7 @@ restconf_nghttp2_path(restconf_stream_data *sd)
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "------------");
|
||||
rc = sd->sd_conn;
|
||||
if ((h = rc->rc_h) == NULL){
|
||||
clicon_err(OE_RESTCONF, EINVAL, "arg is NULL");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "arg is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (rc->rc_ssl != NULL){
|
||||
|
|
@ -428,7 +428,7 @@ restconf_submit_response(nghttp2_session *session,
|
|||
data_prd.source.ptr = sd;
|
||||
data_prd.read_callback = restconf_sd_read;
|
||||
if ((hdrs = (nghttp2_nv*)calloc(1+cvec_len(sd->sd_outp_hdrs), sizeof(nghttp2_nv))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "calloc");
|
||||
clixon_err(OE_UNIX, errno, "calloc");
|
||||
goto done;
|
||||
}
|
||||
hdr = &hdrs[i++];
|
||||
|
|
@ -454,7 +454,7 @@ restconf_submit_response(nghttp2_session *session,
|
|||
stream_id,
|
||||
hdrs, i,
|
||||
(data_prd.source.ptr != NULL)?&data_prd:NULL)) < 0){
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_submit_response");
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_submit_response");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -682,7 +682,7 @@ on_begin_headers_callback(nghttp2_session *session,
|
|||
* Both |name| and |value| are guaranteed to be NULL-terminated.
|
||||
*/
|
||||
static int
|
||||
nghttp2_hdr2clixon(clicon_handle h,
|
||||
nghttp2_hdr2clixon(clixon_handle h,
|
||||
char *name,
|
||||
char *value)
|
||||
{
|
||||
|
|
@ -882,7 +882,7 @@ error_callback2(nghttp2_session *session,
|
|||
{
|
||||
// restconf_conn *rc = (restconf_conn *)user_data;
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
clicon_err(OE_NGHTTP2, lib_error_code, "%s", msg);
|
||||
clixon_err(OE_NGHTTP2, lib_error_code, "%s", msg);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -907,7 +907,7 @@ http2_recv(restconf_conn *rc,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (rc->rc_ngsession == NULL){
|
||||
/* http2_session_init not called */
|
||||
clicon_err(OE_RESTCONF, EINVAL, "No nghttp2 session");
|
||||
clixon_err(OE_RESTCONF, EINVAL, "No nghttp2 session");
|
||||
goto done;
|
||||
}
|
||||
/* may make additional pending frames */
|
||||
|
|
@ -918,13 +918,13 @@ http2_recv(restconf_conn *rc,
|
|||
* when |session| was configured as server and
|
||||
* `nghttp2_option_set_no_recv_client_magic()` is not used with
|
||||
* nonzero value. */
|
||||
clicon_log(LOG_INFO, "%s Received bad client magic byte strin", __FUNCTION__);
|
||||
clixon_log(NULL, LOG_INFO, "%s Received bad client magic byte strin", __FUNCTION__);
|
||||
/* unsure if this does anything, byt does not seem to hurt */
|
||||
if ((ngerr = nghttp2_session_terminate_session(rc->rc_ngsession, ngerr)) < 0)
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_session_terminate_session %d", ngerr);
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_session_terminate_session %d", ngerr);
|
||||
goto fail;
|
||||
}
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_session_mem_recv");
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_session_mem_recv");
|
||||
goto done;
|
||||
}
|
||||
/* sends highest prio frame from outbound queue to remote peer. It does this as
|
||||
|
|
@ -932,9 +932,9 @@ http2_recv(restconf_conn *rc,
|
|||
* :enum:`NGHTTP2_ERR_WOULDBLOCK` or the outbound queue becomes empty.
|
||||
* @see session_send_callback()
|
||||
*/
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
if ((ngerr = nghttp2_session_send(rc->rc_ngsession)) != 0){
|
||||
if (clicon_errno)
|
||||
if (clixon_err_category())
|
||||
goto done;
|
||||
else
|
||||
goto fail; /* Not fatal error */
|
||||
|
|
@ -963,11 +963,11 @@ http2_send_server_connection(restconf_conn *rc)
|
|||
NGHTTP2_FLAG_NONE,
|
||||
iv,
|
||||
ARRLEN(iv))) != 0){
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_submit_settings");
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_submit_settings");
|
||||
goto done;
|
||||
}
|
||||
if ((ngerr = nghttp2_session_send(rc->rc_ngsession)) != 0){
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_session_send");
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_session_send");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -1017,7 +1017,7 @@ http2_session_init(restconf_conn *rc)
|
|||
|
||||
/* Create session for server use, register callbacks */
|
||||
if ((ngerr = nghttp2_session_server_new3(&session, callbacks, rc, NULL, NULL)) < 0){
|
||||
clicon_err(OE_NGHTTP2, ngerr, "nghttp2_session_server_new");
|
||||
clixon_err(OE_NGHTTP2, ngerr, "nghttp2_session_server_new");
|
||||
goto done;
|
||||
}
|
||||
nghttp2_session_callbacks_del(callbacks);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
/* restconf */
|
||||
|
|
@ -76,7 +76,7 @@
|
|||
* @retval 1 Yes, a restconf path
|
||||
*/
|
||||
int
|
||||
api_path_is_restconf(clicon_handle h)
|
||||
api_path_is_restconf(clixon_handle h)
|
||||
{
|
||||
int retval = 0;
|
||||
char *path = NULL;
|
||||
|
|
@ -108,7 +108,7 @@ api_path_is_restconf(clicon_handle h)
|
|||
* enables deployments to specify where the RESTCONF API is located.
|
||||
*/
|
||||
int
|
||||
api_well_known(clicon_handle h,
|
||||
api_well_known(clixon_handle h,
|
||||
void *req)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -134,7 +134,7 @@ api_well_known(clicon_handle h,
|
|||
goto done;
|
||||
/* Create body */
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>\n");
|
||||
|
|
@ -166,7 +166,7 @@ api_well_known(clicon_handle h,
|
|||
* @see api_root_restconf for accessing /restconf/ *
|
||||
*/
|
||||
static int
|
||||
api_root_restconf_exact(clicon_handle h,
|
||||
api_root_restconf_exact(clixon_handle h,
|
||||
void *req,
|
||||
char *request_method,
|
||||
int pretty,
|
||||
|
|
@ -187,7 +187,7 @@ api_root_restconf_exact(clicon_handle h,
|
|||
goto ok;
|
||||
}
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if (restconf_reply_header(req, "Content-Type", "%s", restconf_media_int2str(media_out)) < 0)
|
||||
|
|
@ -201,7 +201,7 @@ api_root_restconf_exact(clicon_handle h,
|
|||
goto done;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (xml_rootchild(xt, 0, &xt) < 0)
|
||||
|
|
@ -241,7 +241,7 @@ api_root_restconf_exact(clicon_handle h,
|
|||
* @param[in] media_out Restconf output media
|
||||
*/
|
||||
static int
|
||||
api_operational_state(clicon_handle h,
|
||||
api_operational_state(clixon_handle h,
|
||||
void *req,
|
||||
char *request_method,
|
||||
int pretty,
|
||||
|
|
@ -264,7 +264,7 @@ api_operational_state(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
api_yang_library_version(clicon_handle h,
|
||||
api_yang_library_version(clixon_handle h,
|
||||
void *req,
|
||||
int pretty,
|
||||
restconf_media media_out)
|
||||
|
|
@ -289,7 +289,7 @@ api_yang_library_version(clicon_handle h,
|
|||
if (xml_bind_special(xt, yspec, "/rc:restconf/yang-library-version") < 0)
|
||||
goto done;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
switch (media_out){
|
||||
|
|
@ -333,7 +333,7 @@ api_yang_library_version(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
api_data(clicon_handle h,
|
||||
api_data(clixon_handle h,
|
||||
void *req,
|
||||
char *api_path,
|
||||
cvec *pcvec,
|
||||
|
|
@ -421,7 +421,7 @@ api_data(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
api_operations(clicon_handle h,
|
||||
api_operations(clixon_handle h,
|
||||
void *req,
|
||||
char *request_method,
|
||||
char *path,
|
||||
|
|
@ -462,7 +462,7 @@ api_operations(clicon_handle h,
|
|||
* @see api_root_restconf_exact for accessing /restconf/ exact
|
||||
*/
|
||||
int
|
||||
api_root_restconf(clicon_handle h,
|
||||
api_root_restconf(clixon_handle h,
|
||||
void *req,
|
||||
cvec *qvec)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -52,8 +52,8 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_path_is_restconf(clicon_handle h);
|
||||
int api_well_known(clicon_handle h, void *req);
|
||||
int api_root_restconf(clicon_handle h, void *req, cvec *qvec);
|
||||
int api_path_is_restconf(clixon_handle h);
|
||||
int api_well_known(clixon_handle h, void *req);
|
||||
int api_root_restconf(clixon_handle h, void *req, cvec *qvec);
|
||||
|
||||
#endif /* _RESTCONF_ROOT_H_ */
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int api_path_is_stream(clicon_handle h);
|
||||
int stream_child_free(clicon_handle h, int pid);
|
||||
int stream_child_freeall(clicon_handle h);
|
||||
int api_stream(clicon_handle h, void *req, cvec *qvec, int *finish);
|
||||
int api_path_is_stream(clixon_handle h);
|
||||
int stream_child_free(clixon_handle h, int pid);
|
||||
int stream_child_freeall(clixon_handle h);
|
||||
int api_stream(clixon_handle h, void *req, cvec *qvec, int *finish);
|
||||
|
||||
#endif /* _RESTCONF_STREAM_H_ */
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include <fcgiapp.h> /* Need to be after clixon_xml.h due to attribute format */
|
||||
|
|
@ -124,7 +124,7 @@ static struct stream_child *STREAM_CHILD = NULL;
|
|||
* @retval 0 No, not a stream path
|
||||
*/
|
||||
int
|
||||
api_path_is_stream(clicon_handle h)
|
||||
api_path_is_stream(clixon_handle h)
|
||||
{
|
||||
int retval = 0;
|
||||
char *path = NULL;
|
||||
|
|
@ -156,7 +156,7 @@ api_path_is_stream(clicon_handle h)
|
|||
* @note could hang STREAM_CHILD list on clicon handle instead.
|
||||
*/
|
||||
int
|
||||
stream_child_free(clicon_handle h,
|
||||
stream_child_free(clixon_handle h,
|
||||
int pid)
|
||||
{
|
||||
struct stream_child *sc;
|
||||
|
|
@ -181,7 +181,7 @@ stream_child_free(clicon_handle h,
|
|||
* Typically called on restconf exit
|
||||
*/
|
||||
int
|
||||
stream_child_freeall(clicon_handle h)
|
||||
stream_child_freeall(clixon_handle h)
|
||||
{
|
||||
struct stream_child *sc;
|
||||
|
||||
|
|
@ -225,7 +225,7 @@ restconf_stream_cb(int s,
|
|||
/* handle close from remote end: this will exit the client */
|
||||
if (eof){
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s eof", __FUNCTION__);
|
||||
clicon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
clixon_err(OE_PROTO, ESHUTDOWN, "Socket unexpected close");
|
||||
errno = ESHUTDOWN;
|
||||
FCGX_FPrintF(r->out, "SHUTDOWN\r\n");
|
||||
FCGX_FPrintF(r->out, "\r\n");
|
||||
|
|
@ -236,12 +236,12 @@ restconf_stream_cb(int s,
|
|||
if ((ret = clicon_msg_decode(reply, NULL, NULL, &xtop, NULL)) < 0) /* XXX pass yang_spec */
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, EFAULT, "Invalid notification");
|
||||
clixon_err(OE_XML, EFAULT, "Invalid notification");
|
||||
goto done;
|
||||
}
|
||||
/* create event */
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
clixon_err(OE_PLUGIN, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((xn = xpath_first(xtop, NULL, "notification")) == NULL)
|
||||
|
|
@ -289,7 +289,7 @@ restconf_stream_cb(int s,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
restconf_stream(clicon_handle h,
|
||||
restconf_stream(clixon_handle h,
|
||||
void *req,
|
||||
char *name,
|
||||
cvec *qvec,
|
||||
|
|
@ -309,7 +309,7 @@ restconf_stream(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
*sp = -1;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_XML, errno, "cbuf_new");
|
||||
clixon_err(OE_XML, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<rpc xmlns=\"%s\" %s><create-subscription xmlns=\"%s\"><stream>%s</stream>",
|
||||
|
|
@ -416,7 +416,7 @@ stream_timeout(int s,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
api_stream(clicon_handle h,
|
||||
api_stream(clixon_handle h,
|
||||
void *req,
|
||||
cvec *qvec,
|
||||
int *finish)
|
||||
|
|
@ -548,7 +548,7 @@ api_stream(clicon_handle h,
|
|||
* killed, call FCGX_Free
|
||||
*/
|
||||
if ((sc = malloc(sizeof(struct stream_child))) == NULL){
|
||||
clicon_err(OE_XML, errno, "malloc");
|
||||
clixon_err(OE_XML, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(sc, 0, sizeof(struct stream_child));
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "snmp_lib.h"
|
||||
|
|
@ -85,16 +85,16 @@ snmp_common_handler(netsnmp_mib_handler *handler,
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if (request == NULL || shp == NULL){
|
||||
clicon_err(OE_XML, EINVAL, "request or shp is null");
|
||||
clixon_err(OE_XML, EINVAL, "request or shp is null");
|
||||
goto done;
|
||||
}
|
||||
requestvb = request->requestvb;
|
||||
if ((*shp = (clixon_snmp_handle*)handler->myvoid) == NULL){
|
||||
clicon_err(OE_XML, 0, "No myvoid handler");
|
||||
clixon_err(OE_XML, 0, "No myvoid handler");
|
||||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
oid_cbuf(cb, (*shp)->sh_oid, (*shp)->sh_oidlen);
|
||||
|
|
@ -157,7 +157,7 @@ snmp_scalar_return(cxobj *xs,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGVALUE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto ok;
|
||||
|
|
@ -165,13 +165,13 @@ snmp_scalar_return(cxobj *xs,
|
|||
}
|
||||
else if (defaultval != NULL){
|
||||
if ((xmlstr = strdup(defaultval)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_NOSUCHINSTANCE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto ok;
|
||||
|
|
@ -183,7 +183,7 @@ snmp_scalar_return(cxobj *xs,
|
|||
if (ret == 0){
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s", __FUNCTION__, reason);
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGTYPE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto ok;
|
||||
|
|
@ -191,11 +191,11 @@ snmp_scalar_return(cxobj *xs,
|
|||
/* see snmplib/snmp_client. somewhat indirect
|
||||
*/
|
||||
if ((ret = snmp_set_var_typed_value(requestvb, asn1type, snmpval, snmplen)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "snmp_set_var_typed_value");
|
||||
clixon_err(OE_SNMP, ret, "snmp_set_var_typed_value");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = snmp_set_var_objid(requestvb, oidc, oidclen)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "snmp_set_var_objid");
|
||||
clixon_err(OE_SNMP, ret, "snmp_set_var_objid");
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -223,7 +223,7 @@ snmp_scalar_return(cxobj *xs,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
snmp_scalar_get(clicon_handle h,
|
||||
snmp_scalar_get(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
cvec *cvk,
|
||||
char *defaultval,
|
||||
|
|
@ -263,7 +263,12 @@ snmp_scalar_get(clicon_handle h,
|
|||
goto done;
|
||||
/* Detect error XXX Error handling could improve */
|
||||
if ((xerr = xpath_first(xt, NULL, "/rpc-error")) != NULL){
|
||||
#if 1
|
||||
if (clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration") < 0)
|
||||
goto done;
|
||||
#else
|
||||
clixon_netconf_error(h, xerr, "clicon_rpc_get", NULL);
|
||||
#endif
|
||||
goto done;
|
||||
}
|
||||
x = xpath_first(xt, nsc, "%s", xpath);
|
||||
|
|
@ -278,7 +283,7 @@ snmp_scalar_get(clicon_handle h,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGVALUE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto ok;
|
||||
|
|
@ -286,13 +291,13 @@ snmp_scalar_get(clicon_handle h,
|
|||
}
|
||||
else if (defaultval != NULL){
|
||||
if ((xmlstr = strdup(defaultval)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_NOSUCHINSTANCE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto ok;
|
||||
|
|
@ -302,7 +307,7 @@ snmp_scalar_get(clicon_handle h,
|
|||
if (ret == 0){
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s", __FUNCTION__, reason);
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGTYPE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto ok;
|
||||
|
|
@ -310,7 +315,7 @@ snmp_scalar_get(clicon_handle h,
|
|||
/* see snmplib/snmp_client. somewhat indirect
|
||||
*/
|
||||
if ((ret = snmp_set_var_typed_value(requestvb, asn1type, snmpval, snmplen)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "snmp_set_var_typed_value");
|
||||
clixon_err(OE_SNMP, ret, "snmp_set_var_typed_value");
|
||||
goto done;
|
||||
}
|
||||
ok:
|
||||
|
|
@ -352,7 +357,7 @@ snmp_yang2xml(cxobj *xtop,
|
|||
goto done;
|
||||
/* Need to prepend an element to fit api_path_fmt2api_path cvv parameter */
|
||||
if ((cvk1 = cvec_new(1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_new");
|
||||
clixon_err(OE_UNIX, errno, "cvec_new");
|
||||
goto done;
|
||||
}
|
||||
for (i=0; i<cvec_len(cvk); i++)
|
||||
|
|
@ -362,7 +367,7 @@ snmp_yang2xml(cxobj *xtop,
|
|||
if ((ret = api_path2xml(api_path, yspec, xtop, YC_DATANODE, 1, xbot, NULL, NULL)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, 0, "api_path2xml %s invalid", api_path);
|
||||
clixon_err(OE_XML, 0, "api_path2xml %s invalid", api_path);
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -389,7 +394,7 @@ snmp_yang2xml(cxobj *xtop,
|
|||
* @note contains special logic for rowstatus handling
|
||||
*/
|
||||
static int
|
||||
snmp_scalar_set(clicon_handle h,
|
||||
snmp_scalar_set(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
cvec *cvk,
|
||||
char *valstr0,
|
||||
|
|
@ -430,7 +435,7 @@ snmp_scalar_set(clicon_handle h,
|
|||
goto done;
|
||||
}
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cb, xtop, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -461,7 +466,7 @@ snmp_scalar_set(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
snmp_cache_row_op(clicon_handle h,
|
||||
snmp_cache_row_op(clixon_handle h,
|
||||
yang_stmt *yp,
|
||||
cvec *cvk,
|
||||
char *opstr,
|
||||
|
|
@ -500,7 +505,7 @@ snmp_cache_row_op(clicon_handle h,
|
|||
if (xml_addsub(xbot, xrow) < 0)
|
||||
goto done;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (clixon_xml2cbuf(cb, xtop, 0, 0, NULL, -1, 0) < 0)
|
||||
|
|
@ -537,7 +542,7 @@ snmp_cache_row_op(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
snmp_cache_set(clicon_handle h,
|
||||
snmp_cache_set(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
cvec *cvk,
|
||||
int rowstatus,
|
||||
|
|
@ -558,7 +563,7 @@ snmp_cache_set(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if ((xtop = xml_new(NETCONF_INPUT_CONFIG, NULL, CX_ELMNT)) == NULL)
|
||||
|
|
@ -583,14 +588,14 @@ snmp_cache_set(clicon_handle h,
|
|||
if (strcmp(valstr, "createAndGo") == 0){
|
||||
free(valstr);
|
||||
if ((valstr = strdup("active")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else if (strcmp(valstr, "createAndWait") == 0){
|
||||
free(valstr);
|
||||
if ((valstr = strdup("notInService")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -646,7 +651,7 @@ snmp_cache_set(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
snmp_table_rowstatus_get(clicon_handle h,
|
||||
snmp_table_rowstatus_get(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
yang_stmt *yrestype,
|
||||
cvec *cvk,
|
||||
|
|
@ -745,7 +750,7 @@ clixon_snmp_scalar_handler1(netsnmp_mib_handler *handler,
|
|||
if (requestvb->type != asn1_type){
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s Expected type:%d, got: %d", __FUNCTION__, requestvb->type, asn1_type);
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGTYPE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto ok;
|
||||
}
|
||||
}
|
||||
|
|
@ -846,7 +851,7 @@ clixon_snmp_scalar_handler(netsnmp_mib_handler *handler,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
snmp_table_get(clicon_handle h,
|
||||
snmp_table_get(clixon_handle h,
|
||||
yang_stmt *yt,
|
||||
oid *oidt,
|
||||
size_t oidtlen,
|
||||
|
|
@ -899,11 +904,11 @@ snmp_table_get(clicon_handle h,
|
|||
* Inverse of snmp_str2oid
|
||||
*/
|
||||
if ((cvk_orig = yang_cvec_get(yt)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No keys");
|
||||
clixon_err(OE_YANG, 0, "No keys");
|
||||
goto done;
|
||||
}
|
||||
if ((cvk_val = cvec_dup(cvk_orig)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
goto done;
|
||||
}
|
||||
/* read through keys and create cvk */
|
||||
|
|
@ -913,14 +918,14 @@ snmp_table_get(clicon_handle h,
|
|||
for (i=0; i<cvec_len(cvk_val); i++){
|
||||
cv = cvec_i(cvk_val, i);
|
||||
if ((yk = yang_find(yt, Y_LEAF, cv_string_get(cv))) == NULL){
|
||||
clicon_err(OE_YANG, 0, "List key %s not found", cv_string_get(cv));
|
||||
clixon_err(OE_YANG, 0, "List key %s not found", cv_string_get(cv));
|
||||
goto done;
|
||||
}
|
||||
if (snmp_oid2str(&oidi, &oidilen, yk, cv) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (oidilen != 0){
|
||||
clicon_err(OE_YANG, 0, "Expected oidlen 0 but is %zu", oidilen);
|
||||
clixon_err(OE_YANG, 0, "Expected oidlen 0 but is %zu", oidilen);
|
||||
goto fail;
|
||||
}
|
||||
/* Get scalar value */
|
||||
|
|
@ -959,7 +964,7 @@ snmp_table_get(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
snmp_table_set(clicon_handle h,
|
||||
snmp_table_set(clixon_handle h,
|
||||
yang_stmt *yt,
|
||||
oid *oids,
|
||||
size_t oidslen,
|
||||
|
|
@ -1055,7 +1060,7 @@ snmp_table_set(clicon_handle h,
|
|||
if (requestvb->type != asn1_type){
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s Expected type:%d, got: %d", __FUNCTION__, requestvb->type, asn1_type);
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGTYPE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto ok;
|
||||
}
|
||||
}
|
||||
|
|
@ -1063,11 +1068,11 @@ snmp_table_set(clicon_handle h,
|
|||
* Inverse of snmp_str2oid
|
||||
*/
|
||||
if ((cvk_orig = yang_cvec_get(yt)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No keys");
|
||||
clixon_err(OE_YANG, 0, "No keys");
|
||||
goto done;
|
||||
}
|
||||
if ((cvk_val = cvec_dup(cvk_orig)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
goto done;
|
||||
}
|
||||
/* read through keys and create cvk */
|
||||
|
|
@ -1077,14 +1082,14 @@ snmp_table_set(clicon_handle h,
|
|||
for (i=0; i<cvec_len(cvk_val); i++){
|
||||
cv = cvec_i(cvk_val, i);
|
||||
if ((yk = yang_find(yt, Y_LEAF, cv_string_get(cv))) == NULL){
|
||||
clicon_err(OE_YANG, 0, "List key %s not found", cv_string_get(cv));
|
||||
clixon_err(OE_YANG, 0, "List key %s not found", cv_string_get(cv));
|
||||
goto done;
|
||||
}
|
||||
if (snmp_oid2str(&oidi, &oidilen, yk, cv) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (oidilen != 0){
|
||||
clicon_err(OE_YANG, 0, "Expected oidlen 0 but is %zu", oidilen);
|
||||
clixon_err(OE_YANG, 0, "Expected oidlen 0 but is %zu", oidilen);
|
||||
*err = SNMP_NOSUCHOBJECT;
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -1116,7 +1121,7 @@ snmp_table_set(clicon_handle h,
|
|||
case 3: /* notReady */
|
||||
case 6: /* destroy */
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_INCONSISTENTVALUE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto ok;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1171,7 +1176,7 @@ snmp_table_set(clicon_handle h,
|
|||
* XXX: merge with cache
|
||||
*/
|
||||
static int
|
||||
snmp_table_getnext(clicon_handle h,
|
||||
snmp_table_getnext(clixon_handle h,
|
||||
yang_stmt *ylist,
|
||||
oid *oids,
|
||||
size_t oidslen,
|
||||
|
|
@ -1204,7 +1209,7 @@ snmp_table_getnext(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((ys = yang_parent_get(ylist)) == NULL ||
|
||||
yang_keyword_get(ys) != Y_CONTAINER){
|
||||
clicon_err(OE_YANG, EINVAL, "ylist parent is not list");
|
||||
clixon_err(OE_YANG, EINVAL, "ylist parent is not list");
|
||||
goto done;
|
||||
}
|
||||
if (xml_nsctx_yang(ys, &nsc) < 0)
|
||||
|
|
@ -1214,13 +1219,13 @@ snmp_table_getnext(clicon_handle h,
|
|||
if (clicon_rpc_get(h, xpath, nsc, CONTENT_ALL, -1, NULL, &xt) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xt, NULL, "/rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "clicon_rpc_get", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
if ((xtable = xpath_first(xt, nsc, "%s", xpath)) != NULL) {
|
||||
/* Make a clone of key-list, but replace names with values */
|
||||
if ((cvk_name = yang_cvec_get(ylist)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No keys");
|
||||
clixon_err(OE_YANG, 0, "No keys");
|
||||
goto done;
|
||||
}
|
||||
xrow = NULL;
|
||||
|
|
@ -1259,7 +1264,7 @@ snmp_table_getnext(clicon_handle h,
|
|||
if (snmp_scalar_return(xnext, ynext, oidnext, oidnextlen, reqinfo, request) < 0)
|
||||
goto done;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
oid_cbuf(cb, oidnext, oidnextlen);
|
||||
|
|
@ -1321,7 +1326,7 @@ clixon_snmp_table_handler1(netsnmp_mib_handler *handler,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_NOSUCHINSTANCE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s Nosuchinstance", __FUNCTION__);
|
||||
|
|
@ -1336,7 +1341,7 @@ clixon_snmp_table_handler1(netsnmp_mib_handler *handler,
|
|||
if (ret == 0){
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_NOSUCHOBJECT)) != SNMPERR_SUCCESS){
|
||||
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s No such object", __FUNCTION__);
|
||||
|
|
@ -1358,7 +1363,7 @@ clixon_snmp_table_handler1(netsnmp_mib_handler *handler,
|
|||
goto done;
|
||||
if (ret == 0){
|
||||
if ((ret = netsnmp_request_set_error(request, err)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s Nosuchinstance", __FUNCTION__);
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "snmp_lib.h"
|
||||
|
|
@ -277,7 +277,7 @@ oid_append(const oid *objid0,
|
|||
dst = (void*)objid0;
|
||||
dst += (*objid0len)*sizeof(*objid0);
|
||||
if (memcpy(dst, objid1, objid1len*sizeof(*objid0)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "memcpy");
|
||||
clixon_err(OE_UNIX, errno, "memcpy");
|
||||
return -1;
|
||||
}
|
||||
*objid0len += objid1len;
|
||||
|
|
@ -309,7 +309,7 @@ oid_print(FILE *f,
|
|||
cbuf *cb;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
oid_cbuf(cb, objid, objidlen);
|
||||
|
|
@ -351,13 +351,13 @@ snmp_yang_type_get(yang_stmt *ys,
|
|||
restype2 = restype;
|
||||
if (strcmp(restype2, "leafref")==0){
|
||||
if ((ypath = yang_find(yrestype, Y_PATH, NULL)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No path in leafref");
|
||||
clixon_err(OE_YANG, 0, "No path in leafref");
|
||||
goto done;
|
||||
}
|
||||
if (yang_path_arg(ys, yang_argument_get(ypath), &yref) < 0)
|
||||
goto done;
|
||||
if (yref == NULL){
|
||||
clicon_err(OE_YANG, 0, "No referred YANG node found for leafref path %s", yang_argument_get(ypath));
|
||||
clixon_err(OE_YANG, 0, "No referred YANG node found for leafref path %s", yang_argument_get(ypath));
|
||||
goto done;
|
||||
}
|
||||
if (origtype){
|
||||
|
|
@ -414,7 +414,7 @@ yang_extension_value_opt(yang_stmt *ys,
|
|||
cg_var *cv;
|
||||
|
||||
if (ys == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "ys is NULL");
|
||||
clixon_err(OE_YANG, EINVAL, "ys is NULL");
|
||||
goto done;
|
||||
}
|
||||
if (exist)
|
||||
|
|
@ -474,7 +474,7 @@ yangext_oid_get(yang_stmt *yn,
|
|||
goto fail;
|
||||
}
|
||||
if (snmp_parse_oid(oidstr, objid, objidlen) == NULL){
|
||||
clicon_err(OE_XML, errno, "snmp_parse_oid");
|
||||
clixon_err(OE_XML, errno, "snmp_parse_oid");
|
||||
goto done;
|
||||
}
|
||||
if (objidstrp)
|
||||
|
|
@ -525,13 +525,13 @@ snmp_handle_clone(void *arg)
|
|||
if (sh0 == NULL)
|
||||
return NULL;
|
||||
if ((sh1 = malloc(sizeof(*sh1))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
return NULL;
|
||||
}
|
||||
memset(sh1, 0, sizeof(*sh1));
|
||||
if (sh0->sh_cvk_orig &&
|
||||
(sh1->sh_cvk_orig = cvec_dup(sh0->sh_cvk_orig)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
return NULL;
|
||||
}
|
||||
return (void*)sh1;
|
||||
|
|
@ -594,7 +594,7 @@ type_yang2asn1(yang_stmt *ys,
|
|||
}
|
||||
/* Then try fully resolved type */
|
||||
else if ((at = clicon_str2int(snmp_type_map, restype)) < 0){
|
||||
clicon_err(OE_YANG, 0, "No snmp translation for YANG %s type:%s",
|
||||
clixon_err(OE_YANG, 0, "No snmp translation for YANG %s type:%s",
|
||||
yang_argument_get(ys), restype);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -651,11 +651,11 @@ type_snmp2xml(yang_stmt *ys,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (valstr == NULL){
|
||||
clicon_err(OE_UNIX, EINVAL, "valstr is NULL");
|
||||
clixon_err(OE_UNIX, EINVAL, "valstr is NULL");
|
||||
goto done;
|
||||
}
|
||||
if ((cvstr = (char*)clicon_int2str(snmp_type_map, requestvb->type)) == NULL){
|
||||
clicon_err(OE_XML, 0, "No mapping for snmp type %d", requestvb->type);
|
||||
clixon_err(OE_XML, 0, "No mapping for snmp type %d", requestvb->type);
|
||||
goto done;
|
||||
}
|
||||
/* Get yang type of leaf and trasnslate to ASN.1 */
|
||||
|
|
@ -668,7 +668,7 @@ type_snmp2xml(yang_stmt *ys,
|
|||
cvstr = "string";
|
||||
cvtype = cv_str2type(cvstr);
|
||||
if ((cv = cv_new(cvtype)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cv_new");
|
||||
clixon_err(OE_UNIX, errno, "cv_new");
|
||||
goto done;
|
||||
}
|
||||
switch (*asn1type){
|
||||
|
|
@ -683,7 +683,7 @@ type_snmp2xml(yang_stmt *ys,
|
|||
|
||||
if (strcmp(restype, "enumeration") == 0){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "%ld", *requestvb->val.integer);
|
||||
|
|
@ -735,14 +735,14 @@ type_snmp2xml(yang_stmt *ys,
|
|||
assert(0); // XXX
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s %s not supported", __FUNCTION__, cv_type2str(cvtype));
|
||||
if ((ret = netsnmp_request_set_error(request, SNMP_ERR_WRONGTYPE)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_request_set_error");
|
||||
goto done;
|
||||
}
|
||||
goto fail;
|
||||
break;
|
||||
}
|
||||
if ((*valstr = cv2str_dup(cv)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cv2str_dup");
|
||||
clixon_err(OE_UNIX, errno, "cv2str_dup");
|
||||
goto done;
|
||||
}
|
||||
retval = 1;
|
||||
|
|
@ -784,7 +784,7 @@ type_xml2snmp_pre(char *xmlstr0,
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if (xmlstr0 == NULL || xmlstr1 == NULL){
|
||||
clicon_err(OE_UNIX, EINVAL, "xmlstr0/1 is NULL");
|
||||
clixon_err(OE_UNIX, EINVAL, "xmlstr0/1 is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* Get yang type of leaf and trasnslate to ASN.1 */
|
||||
|
|
@ -814,7 +814,7 @@ type_xml2snmp_pre(char *xmlstr0,
|
|||
int64_t num;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = parse_dec64(xmlstr0, cv_dec64_n_get(cv), &num, NULL)) < 0)
|
||||
|
|
@ -831,7 +831,7 @@ type_xml2snmp_pre(char *xmlstr0,
|
|||
str = xmlstr0;
|
||||
}
|
||||
if ((*xmlstr1 = strdup(str)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
retval = 1;
|
||||
|
|
@ -869,7 +869,7 @@ type_xml2snmp(char *snmpstr,
|
|||
int ret;
|
||||
|
||||
if (snmpval == NULL || snmplen == NULL){
|
||||
clicon_err(OE_UNIX, EINVAL, "snmpval or snmplen is NULL");
|
||||
clixon_err(OE_UNIX, EINVAL, "snmpval or snmplen is NULL");
|
||||
goto done;
|
||||
}
|
||||
switch (*asn1type){
|
||||
|
|
@ -879,7 +879,7 @@ type_xml2snmp(char *snmpstr,
|
|||
case ASN_INTEGER: // 2
|
||||
*snmplen = 4;
|
||||
if ((*snmpval = malloc(*snmplen)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = parse_int32(snmpstr, (int32_t*)*snmpval, reason)) < 0)
|
||||
|
|
@ -892,7 +892,7 @@ type_xml2snmp(char *snmpstr,
|
|||
case ASN_GAUGE: // 0x42
|
||||
*snmplen = 4;
|
||||
if ((*snmpval = malloc(*snmplen)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = parse_uint32(snmpstr, (uint32_t*)*snmpval, reason)) < 0)
|
||||
|
|
@ -910,7 +910,7 @@ type_xml2snmp(char *snmpstr,
|
|||
}
|
||||
*snmplen = sizeof(oid)*sz1;
|
||||
if ((*snmpval = malloc(*snmplen)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memcpy(*snmpval, oid1, *snmplen);
|
||||
|
|
@ -919,7 +919,7 @@ type_xml2snmp(char *snmpstr,
|
|||
case ASN_OCTET_STR: // 4
|
||||
*snmplen = strlen(snmpstr)+1;
|
||||
if ((*snmpval = (u_char*)strdup((snmpstr))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
|
|
@ -928,7 +928,7 @@ type_xml2snmp(char *snmpstr,
|
|||
struct counter64 *c64;
|
||||
*snmplen = sizeof(struct counter64); // 16!
|
||||
if ((*snmpval = malloc(*snmplen)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(*snmpval, 0, *snmplen);
|
||||
|
|
@ -945,7 +945,7 @@ type_xml2snmp(char *snmpstr,
|
|||
in_addr_t saddr;
|
||||
*snmplen = 4;
|
||||
if ((*snmpval = malloc(*snmplen)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
saddr = (int32_t)inet_addr(snmpstr);
|
||||
|
|
@ -956,7 +956,7 @@ type_xml2snmp(char *snmpstr,
|
|||
struct ether_addr *eaddr;
|
||||
*snmplen = sizeof(*eaddr);
|
||||
if ((*snmpval = malloc(*snmplen + 1)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(*snmpval, 0, *snmplen + 1);
|
||||
|
|
@ -971,7 +971,7 @@ type_xml2snmp(char *snmpstr,
|
|||
case CLIXON_ASN_FIXED_STRING: /* OCTET-STRING with decrement length */
|
||||
*snmplen = strlen(snmpstr);
|
||||
if ((*snmpval = (u_char*)strdup((snmpstr))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
*asn1type = ASN_OCTET_STR;
|
||||
|
|
@ -1010,7 +1010,7 @@ snmp_yang2xpath_cb(yang_stmt *ys,
|
|||
char *prefix = NULL;
|
||||
|
||||
if ((yp = yang_parent_get(ys)) == NULL){
|
||||
clicon_err(OE_YANG, EINVAL, "yang expected parent %s", yang_argument_get(ys));
|
||||
clixon_err(OE_YANG, EINVAL, "yang expected parent %s", yang_argument_get(ys));
|
||||
goto done;
|
||||
}
|
||||
if (yp != NULL && /* XXX rm */
|
||||
|
|
@ -1075,13 +1075,13 @@ snmp_yang2xpath(yang_stmt *ys,
|
|||
cbuf *cb = NULL;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if (snmp_yang2xpath_cb(ys, keyvec, cb) < 0)
|
||||
goto done;
|
||||
if (xpath && (*xpath = strdup(cbuf_get(cb))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "strdup");
|
||||
clixon_err(OE_UNIX, errno, "strdup");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
|
|
@ -1167,7 +1167,7 @@ snmp_oid2str(oid **oidi,
|
|||
if (type_yang2asn1(yk, &asn1_type, 1) < 0)
|
||||
goto done;
|
||||
if ((enc = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
switch (asn1_type){
|
||||
|
|
@ -1196,7 +1196,7 @@ snmp_oid2str(oid **oidi,
|
|||
}
|
||||
if (cbuf_len(enc)){
|
||||
if (cv_string_set(cv, cbuf_get(enc)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cv_string_set");
|
||||
clixon_err(OE_UNIX, errno, "cv_string_set");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1296,12 +1296,12 @@ snmp_xmlkey2val_oid(cxobj *xentry,
|
|||
if (*cvk_val){
|
||||
cvec_free(*cvk_val);
|
||||
if ((*cvk_val = cvec_dup(cvk_name)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else if ((*cvk_val = cvec_dup(cvk_name)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -1312,7 +1312,7 @@ snmp_xmlkey2val_oid(cxobj *xentry,
|
|||
if (cvk_val){
|
||||
cv = cvec_i(*cvk_val, i);
|
||||
if (cv_string_set(cv, xml_body(xi)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "cv_string_set");
|
||||
clixon_err(OE_UNIX, errno, "cv_string_set");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ extern "C" {
|
|||
/* Userdata to pass around in netsmp callbacks
|
||||
*/
|
||||
struct clixon_snmp_handle {
|
||||
clicon_handle sh_h;
|
||||
clixon_handle sh_h;
|
||||
yang_stmt *sh_ys; /* Leaf for scalar, list for table */
|
||||
oid sh_oid[MAX_OID_LEN]; /* OID of registered table (list) */
|
||||
size_t sh_oidlen;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "snmp_lib.h"
|
||||
|
|
@ -78,7 +78,7 @@ static int clixon_snmp_input_cb(int s, void *arg);
|
|||
/*! Return (hardcoded) pid file
|
||||
*/
|
||||
static char*
|
||||
clicon_snmp_pidfile(clicon_handle h)
|
||||
clicon_snmp_pidfile(clixon_handle h)
|
||||
{
|
||||
return "/var/tmp/clixon_snmp.pid";
|
||||
}
|
||||
|
|
@ -90,7 +90,7 @@ clicon_snmp_pidfile(clicon_handle h)
|
|||
static void
|
||||
clixon_snmp_sig_term(int arg)
|
||||
{
|
||||
clicon_log(LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
clixon_log(NULL, LOG_NOTICE, "%s: %s: pid: %u Signal %d",
|
||||
__PROGRAM__, __FUNCTION__, getpid(), arg);
|
||||
/* This should ensure no more accepts or incoming packets are processed because next time eventloop
|
||||
* is entered, it will terminate.
|
||||
|
|
@ -105,7 +105,7 @@ clixon_snmp_sig_term(int arg)
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
static int
|
||||
snmp_terminate(clicon_handle h)
|
||||
snmp_terminate(clixon_handle h)
|
||||
{
|
||||
yang_stmt *yspec;
|
||||
cvec *nsctx;
|
||||
|
|
@ -130,9 +130,9 @@ snmp_terminate(clicon_handle h)
|
|||
xml_free(x);
|
||||
xpath_optimize_exit();
|
||||
clixon_event_exit();
|
||||
clicon_handle_exit(h);
|
||||
clixon_handle_exit(h);
|
||||
clixon_err_exit();
|
||||
clicon_log_exit();
|
||||
clixon_log_exit();
|
||||
if (pidfile)
|
||||
unlink(pidfile);
|
||||
return 0;
|
||||
|
|
@ -151,7 +151,7 @@ snmp_terminate(clicon_handle h)
|
|||
* @see clixon_snmp_input_cb
|
||||
*/
|
||||
static int
|
||||
clixon_snmp_fdset_register(clicon_handle h,
|
||||
clixon_snmp_fdset_register(clixon_handle h,
|
||||
int regfd)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -164,7 +164,7 @@ clixon_snmp_fdset_register(clicon_handle h,
|
|||
|
||||
FD_ZERO(&readfds);
|
||||
if ((nr = snmp_sess_select_info(NULL, &numfds, &readfds, &timeout, &block)) < 0){
|
||||
clicon_err(OE_XML, errno, "snmp_select_error");
|
||||
clixon_err(OE_XML, errno, "snmp_select_error");
|
||||
goto done;
|
||||
}
|
||||
/* eg 4, 6, 8 */
|
||||
|
|
@ -202,7 +202,7 @@ clixon_snmp_input_cb(int s,
|
|||
{
|
||||
int retval = -1;
|
||||
fd_set readfds;
|
||||
clicon_handle h = (clicon_handle)arg;
|
||||
clixon_handle h = (clixon_handle)arg;
|
||||
int ret;
|
||||
|
||||
clixon_debug(CLIXON_DBG_DETAIL, "%s %d", __FUNCTION__, s);
|
||||
|
|
@ -211,7 +211,7 @@ clixon_snmp_input_cb(int s,
|
|||
(void)snmp_read(&readfds);
|
||||
if (clixon_event_poll(s) < 0){
|
||||
if (errno == EBADF){
|
||||
clicon_err_reset();
|
||||
clixon_err_reset();
|
||||
/* Close the active socket */
|
||||
if (clixon_event_unreg_fd(s, clixon_snmp_input_cb) < 0)
|
||||
goto done;
|
||||
|
|
@ -220,7 +220,7 @@ clixon_snmp_input_cb(int s,
|
|||
if (clixon_snmp_fdset_register(h, 0) < 0)
|
||||
goto done;
|
||||
if ((ret = snmp_close_sessions()) != 1){
|
||||
clicon_err(OE_SNMP, ret, "snmp_close_sessions");
|
||||
clixon_err(OE_SNMP, ret, "snmp_close_sessions");
|
||||
goto done;
|
||||
}
|
||||
/* Signal normal exit to upper layers (=event handling)
|
||||
|
|
@ -229,7 +229,7 @@ clixon_snmp_input_cb(int s,
|
|||
clixon_exit_set(1);
|
||||
}
|
||||
else {
|
||||
clicon_err(OE_UNIX, errno, "poll");
|
||||
clixon_err(OE_UNIX, errno, "poll");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -247,14 +247,14 @@ clixon_snmp_input_cb(int s,
|
|||
* @see snmp_terminate
|
||||
*/
|
||||
static int
|
||||
clixon_snmp_init_subagent(clicon_handle h,
|
||||
clixon_snmp_init_subagent(clixon_handle h,
|
||||
int logdst)
|
||||
{
|
||||
int retval = -1;
|
||||
char *sockpath = NULL;
|
||||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (logdst == CLICON_LOG_SYSLOG)
|
||||
if (logdst == CLIXON_LOG_SYSLOG)
|
||||
snmp_enable_calllog();
|
||||
else
|
||||
snmp_enable_stderrlog();
|
||||
|
|
@ -271,7 +271,7 @@ clixon_snmp_init_subagent(clicon_handle h,
|
|||
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_VERBOSE, 1);
|
||||
|
||||
if ((sockpath = clicon_option_str(h, "CLICON_SNMP_AGENT_SOCK")) == NULL){
|
||||
clicon_err(OE_XML, 0, "CLICON_SNMP_AGENT_SOCK not set");
|
||||
clixon_err(OE_XML, 0, "CLICON_SNMP_AGENT_SOCK not set");
|
||||
goto done;
|
||||
}
|
||||
/* XXX: This should be configurable. */
|
||||
|
|
@ -284,19 +284,19 @@ clixon_snmp_init_subagent(clicon_handle h,
|
|||
init_snmp(__PROGRAM__);
|
||||
|
||||
if (!clixon_snmp_api_agent_check()){
|
||||
clicon_err(OE_DAEMON, 0, "Connection to SNMP agent failed");
|
||||
clixon_err(OE_DAEMON, 0, "Connection to SNMP agent failed");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGTERM, clixon_snmp_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGINT, clixon_snmp_sig_term, NULL) < 0){
|
||||
clicon_err(OE_DAEMON, errno, "Setting signal");
|
||||
clixon_err(OE_DAEMON, errno, "Setting signal");
|
||||
goto done;
|
||||
}
|
||||
if (set_signal(SIGPIPE, SIG_IGN, NULL) < 0){
|
||||
clicon_err(OE_UNIX, errno, "Setting SIGPIPE signal");
|
||||
clixon_err(OE_UNIX, errno, "Setting SIGPIPE signal");
|
||||
goto done;
|
||||
}
|
||||
/* Workaround for netsnmps API use of fdset:s instead of sockets */
|
||||
|
|
@ -313,7 +313,7 @@ clixon_snmp_init_subagent(clicon_handle h,
|
|||
* @param[in] argv0 command line
|
||||
*/
|
||||
static void
|
||||
usage(clicon_handle h,
|
||||
usage(clixon_handle h,
|
||||
char *argv0)
|
||||
{
|
||||
fprintf(stderr, "usage:%s\n"
|
||||
|
|
@ -338,8 +338,8 @@ main(int argc,
|
|||
int retval = -1;
|
||||
int c;
|
||||
char *argv0 = argv[0];
|
||||
clicon_handle h;
|
||||
int logdst = CLICON_LOG_STDERR;
|
||||
clixon_handle h;
|
||||
int logdst = CLIXON_LOG_STDERR;
|
||||
struct passwd *pw;
|
||||
yang_stmt *yspec = NULL;
|
||||
char *str;
|
||||
|
|
@ -357,14 +357,17 @@ main(int argc,
|
|||
enum format_enum config_dump_format = FORMAT_XML;
|
||||
|
||||
/* Create handle */
|
||||
if ((h = clicon_handle_init()) == NULL)
|
||||
if ((h = clixon_handle_init()) == NULL)
|
||||
return -1;
|
||||
/* In the startup, logs to stderr & debug flag set later */
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, logdst);
|
||||
if (clixon_log_init(h, __PROGRAM__, LOG_INFO, logdst) < 0)
|
||||
goto done;
|
||||
if (clixon_err_init(h) < 0)
|
||||
goto done;
|
||||
|
||||
/* Set username to clixon handle. Use in all communication to backend */
|
||||
if ((pw = getpwuid(getuid())) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "getpwuid");
|
||||
clixon_err(OE_UNIX, errno, "getpwuid");
|
||||
goto done;
|
||||
}
|
||||
if (clicon_username_set(h, pw->pw_name) < 0)
|
||||
|
|
@ -388,11 +391,11 @@ main(int argc,
|
|||
clicon_option_str_set(h, "CLICON_CONFIGFILE", optarg);
|
||||
break;
|
||||
case 'l': /* Log destination: s|e|o */
|
||||
if ((logdst = clicon_log_opt(optarg[0])) < 0)
|
||||
if ((logdst = clixon_log_opt(optarg[0])) < 0)
|
||||
usage(h, argv[0]);
|
||||
if (logdst == CLICON_LOG_FILE &&
|
||||
if (logdst == CLIXON_LOG_FILE &&
|
||||
strlen(optarg)>1 &&
|
||||
clicon_log_file(optarg+1) < 0)
|
||||
clixon_log_file(optarg+1) < 0)
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
|
|
@ -400,8 +403,8 @@ main(int argc,
|
|||
/*
|
||||
* Logs, error and debug to stderr or syslog, set debug level
|
||||
*/
|
||||
clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(dbg, NULL);
|
||||
clixon_log_init(h, __PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, logdst);
|
||||
clixon_debug_init(h, dbg);
|
||||
/* This is netsnmplib debugging which is quite extensive + only if compiled w debug */
|
||||
if (dbg > 1)
|
||||
snmp_set_do_debugging(1);
|
||||
|
|
@ -458,7 +461,7 @@ main(int argc,
|
|||
|
||||
/* Check pid-file, if zap kill the old daemon, else return here */
|
||||
if ((pidfile = clicon_snmp_pidfile(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "pidfile not set");
|
||||
clixon_err(OE_FATAL, 0, "pidfile not set");
|
||||
goto done;
|
||||
}
|
||||
if (pidfile_get(pidfile, &pid) < 0)
|
||||
|
|
@ -472,7 +475,7 @@ main(int argc,
|
|||
exit(0); /* OK */
|
||||
}
|
||||
else if (pid){
|
||||
clicon_err(OE_DAEMON, 0, "Clixon_snmp daemon already running with pid %d\n(Try killing it with %s -z)",
|
||||
clixon_err(OE_DAEMON, 0, "Clixon_snmp daemon already running with pid %d\n(Try killing it with %s -z)",
|
||||
pid, argv0);
|
||||
return -1; /* goto done deletes pidfile */
|
||||
}
|
||||
|
|
@ -485,8 +488,8 @@ main(int argc,
|
|||
cligen_bufthreshold = clicon_option_int(h, "CLICON_CLI_BUF_THRESHOLD");
|
||||
cbuf_alloc_set(cligen_buflen, cligen_bufthreshold);
|
||||
|
||||
if ((sz = clicon_option_int(h, "CLICON_LOG_STRING_LIMIT")) != 0)
|
||||
clicon_log_string_limit_set(sz);
|
||||
if ((sz = clicon_option_int(h, "CLIXON_LOG_STRING_LIMIT")) != 0)
|
||||
clixon_log_string_limit_set(sz);
|
||||
|
||||
/* Set default namespace according to CLICON_NAMESPACE_NETCONF_DEFAULT */
|
||||
xml_nsctx_namespace_netconf_default(h);
|
||||
|
|
@ -570,7 +573,7 @@ main(int argc,
|
|||
retval = 0;
|
||||
done:
|
||||
snmp_terminate(h);
|
||||
clicon_log_init(__PROGRAM__, LOG_INFO, 0); /* Log on syslog no stderr */
|
||||
clicon_log(LOG_NOTICE, "%s: %u Terminated", __PROGRAM__, getpid());
|
||||
clixon_log_init(h, __PROGRAM__, LOG_INFO, 0); /* Log on syslog no stderr */
|
||||
clixon_log(h, LOG_NOTICE, "%s: %u Terminated", __PROGRAM__, getpid());
|
||||
return retval;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
#include "snmp_lib.h"
|
||||
|
|
@ -95,7 +95,7 @@
|
|||
* netsnmp_subtree_find(oid1,sz1, 0, 0)
|
||||
*/
|
||||
static int
|
||||
mibyang_leaf_register(clicon_handle h,
|
||||
mibyang_leaf_register(clixon_handle h,
|
||||
yang_stmt *ys,
|
||||
cvec *cvk_val,
|
||||
oid *oidk,
|
||||
|
|
@ -115,7 +115,7 @@ mibyang_leaf_register(clicon_handle h,
|
|||
cbuf *cboid = NULL;
|
||||
|
||||
if ((cboid = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = yangext_oid_get(ys, oid1, &oid1len, NULL)) < 0)
|
||||
|
|
@ -146,7 +146,7 @@ mibyang_leaf_register(clicon_handle h,
|
|||
name = yang_argument_get(ys);
|
||||
/* Stateless function, just returns ptr */
|
||||
if ((handler = netsnmp_create_handler(name, clixon_snmp_scalar_handler)) == NULL){
|
||||
clicon_err(OE_XML, errno, "netsnmp_create_handler");
|
||||
clixon_err(OE_XML, errno, "netsnmp_create_handler");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -154,7 +154,7 @@ mibyang_leaf_register(clicon_handle h,
|
|||
* XXX: not deallocated
|
||||
*/
|
||||
if ((sh = malloc(sizeof(*sh))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(sh, 0, sizeof(*sh));
|
||||
|
|
@ -165,14 +165,14 @@ mibyang_leaf_register(clicon_handle h,
|
|||
sh->sh_default = default_str;
|
||||
if (cvk_val &&
|
||||
(sh->sh_cvk_orig = cvec_dup(cvk_val)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cvec_dup");
|
||||
clixon_err(OE_UNIX, errno, "cvec_dup");
|
||||
goto done;
|
||||
}
|
||||
/* Stateless function, just returns ptr */
|
||||
if ((nhreg = netsnmp_handler_registration_create(name, handler,
|
||||
oid1, oid1len,
|
||||
modes)) == NULL){
|
||||
clicon_err(OE_XML, errno, "netsnmp_handler_registration_create");
|
||||
clixon_err(OE_XML, errno, "netsnmp_handler_registration_create");
|
||||
netsnmp_handler_free(handler);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -186,7 +186,7 @@ mibyang_leaf_register(clicon_handle h,
|
|||
*/
|
||||
if ((ret = netsnmp_register_instance(nhreg)) != SNMPERR_SUCCESS){
|
||||
/* Note MIB_ errors, not regular SNMPERR_ */
|
||||
clicon_err(OE_SNMP, ret-CLIXON_ERR_SNMP_MIB, "netsnmp_register_instance");
|
||||
clixon_err(OE_SNMP, ret-CLIXON_ERR_SNMP_MIB, "netsnmp_register_instance");
|
||||
goto done;
|
||||
}
|
||||
oid_cbuf(cboid, oid1, oid1len);
|
||||
|
|
@ -216,7 +216,7 @@ mibyang_leaf_register(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
static int
|
||||
mibyang_table_register(clicon_handle h,
|
||||
mibyang_table_register(clixon_handle h,
|
||||
yang_stmt *ylist,
|
||||
oid *oid1,
|
||||
size_t oid1len,
|
||||
|
|
@ -240,7 +240,7 @@ mibyang_table_register(clicon_handle h,
|
|||
|
||||
if ((ys = yang_parent_get(ylist)) == NULL ||
|
||||
yang_keyword_get(ys) != Y_CONTAINER){
|
||||
clicon_err(OE_YANG, EINVAL, "ylist parent is not list");
|
||||
clixon_err(OE_YANG, EINVAL, "ylist parent is not list");
|
||||
goto done;
|
||||
}
|
||||
/* Note: This is wrong for augmented nodes where name is the original list, not the
|
||||
|
|
@ -253,7 +253,7 @@ mibyang_table_register(clicon_handle h,
|
|||
* XXX: not deallocated
|
||||
*/
|
||||
if ((sh = malloc(sizeof(*sh))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(sh, 0, sizeof(*sh));
|
||||
|
|
@ -265,13 +265,13 @@ mibyang_table_register(clicon_handle h,
|
|||
sh->sh_oid2len = oid2len;
|
||||
|
||||
if ((handler = netsnmp_create_handler(name, clixon_snmp_table_handler)) == NULL){
|
||||
clicon_err(OE_XML, errno, "netsnmp_create_handler");
|
||||
clixon_err(OE_XML, errno, "netsnmp_create_handler");
|
||||
goto done;
|
||||
}
|
||||
if ((nhreg = netsnmp_handler_registration_create(name, handler,
|
||||
oid1, oid1len,
|
||||
HANDLER_CAN_RWRITE)) == NULL){
|
||||
clicon_err(OE_XML, errno, "netsnmp_handler_registration_create");
|
||||
clixon_err(OE_XML, errno, "netsnmp_handler_registration_create");
|
||||
netsnmp_handler_free(handler);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -282,12 +282,12 @@ mibyang_table_register(clicon_handle h,
|
|||
|
||||
/* See netsnmp_register_table_data_set */
|
||||
if ((table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "SNMP_MALLOC_TYPEDEF");
|
||||
clixon_err(OE_UNIX, errno, "SNMP_MALLOC_TYPEDEF");
|
||||
goto done;
|
||||
}
|
||||
/* Keys, go through keys */
|
||||
if ((cvk = yang_cvec_get(ylist)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No keys");
|
||||
clixon_err(OE_YANG, 0, "No keys");
|
||||
goto done;
|
||||
}
|
||||
cvi = NULL;
|
||||
|
|
@ -295,7 +295,7 @@ mibyang_table_register(clicon_handle h,
|
|||
while ((cvi = cvec_each(cvk, cvi)) != NULL) {
|
||||
keyname = cv_string_get(cvi);
|
||||
if ((yleaf = yang_find(ylist, Y_LEAF, keyname)) == NULL){
|
||||
clicon_err(OE_XML, 0, "List statement \"%s\" has no key leaf \"%s\"",
|
||||
clixon_err(OE_XML, 0, "List statement \"%s\" has no key leaf \"%s\"",
|
||||
yang_argument_get(ylist), keyname);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -308,7 +308,7 @@ mibyang_table_register(clicon_handle h,
|
|||
asn1type,
|
||||
NULL, // value
|
||||
0) == NULL){
|
||||
clicon_err(OE_XML, errno, "snmp_varlist_add_variable");
|
||||
clixon_err(OE_XML, errno, "snmp_varlist_add_variable");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
@ -323,7 +323,7 @@ mibyang_table_register(clicon_handle h,
|
|||
table_info->max_column++;
|
||||
}
|
||||
if ((ret = netsnmp_register_table(nhreg, table_info)) != SNMPERR_SUCCESS){
|
||||
clicon_err(OE_SNMP, ret, "netsnmp_register_table");
|
||||
clixon_err(OE_SNMP, ret, "netsnmp_register_table");
|
||||
goto done;
|
||||
}
|
||||
sh->sh_table_info = table_info; /* Keep to free at exit */
|
||||
|
|
@ -350,7 +350,7 @@ mibyang_table_register(clicon_handle h,
|
|||
* @see mibyang_augment_register
|
||||
*/
|
||||
static int
|
||||
mibyang_list_register(clicon_handle h,
|
||||
mibyang_list_register(clixon_handle h,
|
||||
yang_stmt *ylist)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -364,7 +364,7 @@ mibyang_list_register(clicon_handle h,
|
|||
|
||||
if ((yc = yang_parent_get(ylist)) == NULL ||
|
||||
yang_keyword_get(yc) != Y_CONTAINER){
|
||||
clicon_err(OE_YANG, EINVAL, "ylist parent is not container");
|
||||
clixon_err(OE_YANG, EINVAL, "ylist parent is not container");
|
||||
goto done;
|
||||
}
|
||||
if ((ret = yangext_oid_get(ylist, oid2, &oid2len, NULL)) < 0)
|
||||
|
|
@ -405,7 +405,7 @@ mibyang_list_register(clicon_handle h,
|
|||
* @see mibyang_list_register
|
||||
*/
|
||||
static int
|
||||
mibyang_augment_register(clicon_handle h,
|
||||
mibyang_augment_register(clixon_handle h,
|
||||
yang_stmt *yaug)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -459,7 +459,7 @@ mibyang_augment_register(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
mibyang_table_poll(clicon_handle h,
|
||||
mibyang_table_poll(clixon_handle h,
|
||||
yang_stmt *ylist)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -481,7 +481,7 @@ mibyang_table_poll(clicon_handle h,
|
|||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if ((ys = yang_parent_get(ylist)) == NULL ||
|
||||
yang_keyword_get(ys) != Y_CONTAINER){
|
||||
clicon_err(OE_YANG, EINVAL, "ylist parent is not list");
|
||||
clixon_err(OE_YANG, EINVAL, "ylist parent is not list");
|
||||
goto done;
|
||||
}
|
||||
if (xml_nsctx_yang(ys, &nsc) < 0)
|
||||
|
|
@ -491,13 +491,13 @@ mibyang_table_poll(clicon_handle h,
|
|||
if (clicon_rpc_get(h, xpath, nsc, CONTENT_ALL, -1, NULL, &xt) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xt, NULL, "/rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "clicon_rpc_get", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
if ((xtable = xpath_first(xt, nsc, "%s", xpath)) != NULL) {
|
||||
/* Make a clone of key-list, but replace names with values */
|
||||
if ((cvk_name = yang_cvec_get(ylist)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "No keys");
|
||||
clixon_err(OE_YANG, 0, "No keys");
|
||||
goto done;
|
||||
}
|
||||
xrow = NULL;
|
||||
|
|
@ -550,7 +550,7 @@ mibyang_table_poll(clicon_handle h,
|
|||
* @retval -1 Error, aborted at first error encounter
|
||||
*/
|
||||
static int
|
||||
mibyang_traverse(clicon_handle h,
|
||||
mibyang_traverse(clixon_handle h,
|
||||
yang_stmt *yn)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -611,7 +611,7 @@ mibyang_traverse(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
clixon_snmp_traverse_mibyangs(clicon_handle h)
|
||||
clixon_snmp_traverse_mibyangs(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
char *modname;
|
||||
|
|
@ -620,7 +620,7 @@ clixon_snmp_traverse_mibyangs(clicon_handle h)
|
|||
yang_stmt *ymod;
|
||||
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
/* Loop over clixon configuration file to find all CLICON_SNMP_MIB, and
|
||||
|
|
@ -640,7 +640,7 @@ clixon_snmp_traverse_mibyangs(clicon_handle h)
|
|||
* What happens if backend has not loaded it?
|
||||
*/
|
||||
if ((ymod = yang_find(yspec, Y_MODULE, modname)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "Mib-translated-yang %s not loaded", modname);
|
||||
clixon_err(OE_YANG, 0, "Mib-translated-yang %s not loaded", modname);
|
||||
goto done;
|
||||
}
|
||||
/* Recursively traverse the mib-yang to find extensions */
|
||||
|
|
|
|||
|
|
@ -44,8 +44,8 @@ extern "C" {
|
|||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int mibyang_table_poll(clicon_handle h, yang_stmt *ylist);
|
||||
int clixon_snmp_traverse_mibyangs(clicon_handle h);
|
||||
int mibyang_table_poll(clixon_handle h, yang_stmt *ylist);
|
||||
int clixon_snmp_traverse_mibyangs(clixon_handle h);
|
||||
|
||||
#endif /* _SNMP_REGISTER_H_ */
|
||||
|
||||
|
|
|
|||
18
doc/FAQ.md
18
doc/FAQ.md
|
|
@ -473,7 +473,7 @@ Each plugin is initiated with an API struct followed by a plugin init function a
|
|||
... /* more functions here */
|
||||
}
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
...
|
||||
return &api; /* Return NULL on error */
|
||||
|
|
@ -515,7 +515,7 @@ More are found in the doxygen reference.
|
|||
1. You add an entry in example_cli.cli
|
||||
> example("This is a comment") <var:int32>("This is a variable"), mycallback("myarg");
|
||||
2. Then define a function in example_cli.c
|
||||
> mycallback(clicon_handle h, cvec *cvv, cvec *arv)
|
||||
> mycallback(clixon_handle h, cvec *cvv, cvec *arv)
|
||||
where 'cvv' contains the value of the variable 'var' and 'argv' contains the string "myarg".
|
||||
|
||||
The 'cvv' datatype is a 'CLIgen variable vector'.
|
||||
|
|
@ -523,9 +523,9 @@ They are documented in [CLIgen tutorial](https://github.com/clicon/cligen/blob/m
|
|||
|
||||
## How do I write a validation function?
|
||||
Similar to a commit function, but instead write the transaction_validate() function.
|
||||
Check for inconsistencies in the XML trees and if they fail, make an clicon_err() call.
|
||||
Check for inconsistencies in the XML trees and if they fail, make an clixon_err() call.
|
||||
```
|
||||
clicon_err(OE_PLUGIN, 0, "Route %s lacks ipv4 addr", name);
|
||||
clixon_err(OE_PLUGIN, 0, "Route %s lacks ipv4 addr", name);
|
||||
return -1;
|
||||
```
|
||||
The validation or commit will then be aborted.
|
||||
|
|
@ -560,7 +560,7 @@ implement the RFC, you need to register an RPC callback in the backend plugin:
|
|||
Example:
|
||||
```
|
||||
int
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
...
|
||||
rpc_callback_register(h, example_rpc, NULL, "urn:example:my", "example-rpc");
|
||||
|
|
@ -570,7 +570,7 @@ clixon_plugin_init(clicon_handle h)
|
|||
And then define the callback itself:
|
||||
```
|
||||
static int
|
||||
example_rpc(clicon_handle h, /* Clicon handle */
|
||||
example_rpc(clixon_handle h, /* Clicon handle */
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* Client session */
|
||||
|
|
@ -592,7 +592,7 @@ The following example shows how `my_copy` can be called right after the system (
|
|||
the original operation:
|
||||
```
|
||||
static int
|
||||
my_copy(clicon_handle h, /* Clicon handle */
|
||||
my_copy(clixon_handle h, /* Clicon handle */
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* Client session */
|
||||
|
|
@ -602,7 +602,7 @@ my_copy(clicon_handle h, /* Clicon handle */
|
|||
return 0;
|
||||
}
|
||||
int
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
...
|
||||
rpc_callback_register(h, my_copy, NULL, "urn:ietf:params:xml:ns:netconf:base:1.0", "copy-config");
|
||||
|
|
@ -616,7 +616,7 @@ A restconf call may need to be authenticated.
|
|||
You can specify an authentication callback for restconf as follows:
|
||||
```
|
||||
int
|
||||
plugin_credentials(clicon_handle h,
|
||||
plugin_credentials(clixon_handle h,
|
||||
void *arg)
|
||||
{
|
||||
FCGX_Request *r = (FCGX_Request *)arg;
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ In the CLI a netconf rpc call is constructed and sent to the backend: See `examp
|
|||
The clixon backend plugin [example_backend.c] reveives the netconf call and replies. This is made byregistering a callback handling handling the RPC:
|
||||
```
|
||||
static int
|
||||
example_rpc(clicon_handle h,
|
||||
example_rpc(clixon_handle h,
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* Client session */
|
||||
|
|
@ -336,7 +336,7 @@ example_rpc(clicon_handle h,
|
|||
return 0;
|
||||
}
|
||||
int
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
...
|
||||
rpc_callback_register(h, example_rpc, NULL, "example");
|
||||
|
|
@ -426,7 +426,7 @@ static clixon_plugin_api api = {
|
|||
};
|
||||
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
/* Optional callback registration for RPC calls */
|
||||
rpc_callback_register(h, example_rpc, NULL, "example");
|
||||
|
|
|
|||
|
|
@ -60,10 +60,10 @@
|
|||
#include <fcntl.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
/* clicon */
|
||||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* Clicon library functions. */
|
||||
/* Clixon library functions. */
|
||||
#include <clixon/clixon.h>
|
||||
|
||||
/* These include signatures for plugin and transaction callbacks. */
|
||||
|
|
@ -182,10 +182,10 @@ static char *_validate_fail_xpath = NULL;
|
|||
static int _validate_fail_toggle = 0; /* fail at validate and commit */
|
||||
|
||||
/* forward */
|
||||
static int example_stream_timer_setup(clicon_handle h);
|
||||
static int example_stream_timer_setup(clixon_handle h);
|
||||
|
||||
int
|
||||
main_begin(clicon_handle h,
|
||||
main_begin(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -196,7 +196,7 @@ main_begin(clicon_handle h,
|
|||
/*! This is called on validate (and commit). Check validity of candidate
|
||||
*/
|
||||
int
|
||||
main_validate(clicon_handle h,
|
||||
main_validate(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -205,7 +205,7 @@ main_validate(clicon_handle h,
|
|||
if (_validate_fail_toggle==0 &&
|
||||
xpath_first(transaction_target(td), NULL, "%s", _validate_fail_xpath)){
|
||||
_validate_fail_toggle = 1; /* toggle if triggered */
|
||||
clicon_err(OE_XML, 0, "User error");
|
||||
clixon_err(OE_XML, 0, "User error");
|
||||
return -1; /* induce fail */
|
||||
}
|
||||
}
|
||||
|
|
@ -213,7 +213,7 @@ main_validate(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
main_complete(clicon_handle h,
|
||||
main_complete(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -224,7 +224,7 @@ main_complete(clicon_handle h,
|
|||
/*! This is called on commit. Identify modifications and adjust machine state
|
||||
*/
|
||||
int
|
||||
main_commit(clicon_handle h,
|
||||
main_commit(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
cxobj *target = transaction_target(td); /* wanted XML tree */
|
||||
|
|
@ -239,7 +239,7 @@ main_commit(clicon_handle h,
|
|||
if (_validate_fail_toggle==1 &&
|
||||
xpath_first(transaction_target(td), NULL, "%s", _validate_fail_xpath)){
|
||||
_validate_fail_toggle = 0; /* toggle if triggered */
|
||||
clicon_err(OE_XML, 0, "User error");
|
||||
clixon_err(OE_XML, 0, "User error");
|
||||
return -1; /* induce fail */
|
||||
}
|
||||
}
|
||||
|
|
@ -263,7 +263,7 @@ main_commit(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
main_commit_done(clicon_handle h,
|
||||
main_commit_done(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -272,7 +272,7 @@ main_commit_done(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
main_revert(clicon_handle h,
|
||||
main_revert(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -281,7 +281,7 @@ main_revert(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
main_end(clicon_handle h,
|
||||
main_end(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -290,7 +290,7 @@ main_end(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
main_abort(clicon_handle h,
|
||||
main_abort(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -305,7 +305,7 @@ example_stream_timer(int fd,
|
|||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h = (clicon_handle)arg;
|
||||
clixon_handle h = (clixon_handle)arg;
|
||||
|
||||
/* XXX Change to actual netconf notifications and namespace */
|
||||
if (stream_notify(h, "EXAMPLE", "<event xmlns=\"urn:example:clixon\"><event-class>fault</event-class><reportingEntity><card>Ethernet0</card></reportingEntity><severity>major</severity></event>") < 0)
|
||||
|
|
@ -320,7 +320,7 @@ example_stream_timer(int fd,
|
|||
/*! Set up example stream notification timer
|
||||
*/
|
||||
static int
|
||||
example_stream_timer_setup(clicon_handle h)
|
||||
example_stream_timer_setup(clixon_handle h)
|
||||
{
|
||||
struct timeval t, t1;
|
||||
|
||||
|
|
@ -338,7 +338,7 @@ example_stream_timer_setup(clicon_handle h)
|
|||
* in [RFC6241].
|
||||
*/
|
||||
static int
|
||||
empty_rpc(clicon_handle h, /* Clixon handle */
|
||||
empty_rpc(clixon_handle h, /* Clixon handle */
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* client_entry */
|
||||
|
|
@ -353,7 +353,7 @@ empty_rpc(clicon_handle h, /* Clixon handle */
|
|||
* The RPC returns the incoming parameters
|
||||
*/
|
||||
static int
|
||||
example_rpc(clicon_handle h, /* Clixon handle */
|
||||
example_rpc(clixon_handle h, /* Clixon handle */
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* client_entry */
|
||||
|
|
@ -367,7 +367,7 @@ example_rpc(clicon_handle h, /* Clixon handle */
|
|||
|
||||
/* get namespace from rpc name, return back in each output parameter */
|
||||
if ((namespace = xml_find_type_value(xe, NULL, "xmlns", CX_ATTR)) == NULL){
|
||||
clicon_err(OE_XML, ENOENT, "No namespace given in rpc %s", xml_name(xe));
|
||||
clixon_err(OE_XML, ENOENT, "No namespace given in rpc %s", xml_name(xe));
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbret, "<rpc-reply xmlns=\"%s\"", NETCONF_BASE_NAMESPACE);
|
||||
|
|
@ -395,7 +395,7 @@ example_rpc(clicon_handle h, /* Clixon handle */
|
|||
/*! This will be called as a hook right after the original system copy-config
|
||||
*/
|
||||
static int
|
||||
example_copy_extra(clicon_handle h, /* Clixon handle */
|
||||
example_copy_extra(clixon_handle h, /* Clixon handle */
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* client_entry */
|
||||
|
|
@ -414,7 +414,7 @@ example_copy_extra(clicon_handle h, /* Clixon handle */
|
|||
* @note callback is hardcoded C, while registration is controlled by -- -a option
|
||||
*/
|
||||
static int
|
||||
example_action_reset(clicon_handle h, /* Clixon handle */
|
||||
example_action_reset(clixon_handle h, /* Clixon handle */
|
||||
cxobj *xe, /* Request: <rpc><xn></rpc> */
|
||||
cbuf *cbret, /* Reply eg <rpc-reply>... */
|
||||
void *arg, /* client_entry */
|
||||
|
|
@ -453,7 +453,7 @@ example_action_reset(clicon_handle h, /* Clixon handle */
|
|||
* @see example_statefile where state is read from file and also pagination
|
||||
*/
|
||||
int
|
||||
example_statedata(clicon_handle h,
|
||||
example_statedata(clixon_handle h,
|
||||
cvec *nsc,
|
||||
char *xpath,
|
||||
cxobj *xstate)
|
||||
|
|
@ -471,7 +471,7 @@ example_statedata(clicon_handle h,
|
|||
if (!_state)
|
||||
goto ok;
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
yspec = clicon_dbspec_yang(h);
|
||||
|
|
@ -549,7 +549,7 @@ example_statedata(clicon_handle h,
|
|||
* @see example_statefile where state is programmatically added
|
||||
*/
|
||||
int
|
||||
example_statefile(clicon_handle h,
|
||||
example_statefile(clixon_handle h,
|
||||
cvec *nsc,
|
||||
char *xpath,
|
||||
cxobj *xstate)
|
||||
|
|
@ -574,7 +574,7 @@ example_statefile(clicon_handle h,
|
|||
if (_state_file_cached == 0 ||
|
||||
_state_xml_cache == NULL){
|
||||
if ((fp = fopen(_state_file, "r")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "open(%s)", _state_file);
|
||||
clixon_err(OE_UNIX, errno, "open(%s)", _state_file);
|
||||
goto done;
|
||||
}
|
||||
if ((xt = xml_new("config", NULL, CX_ELMNT)) == NULL)
|
||||
|
|
@ -641,7 +641,7 @@ example_pagination(void *h0,
|
|||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
clicon_handle h = (clicon_handle)h0;
|
||||
clixon_handle h = (clixon_handle)h0;
|
||||
int locked;
|
||||
uint32_t offset;
|
||||
uint32_t limit;
|
||||
|
|
@ -675,7 +675,7 @@ example_pagination(void *h0,
|
|||
if (_state_file_cached == 0 ||
|
||||
_state_xml_cache == NULL){
|
||||
if ((fp = fopen(_state_file, "r")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "open(%s)", _state_file);
|
||||
clixon_err(OE_UNIX, errno, "open(%s)", _state_file);
|
||||
goto done;
|
||||
}
|
||||
if ((xt = xml_new("config", NULL, CX_ELMNT)) == NULL)
|
||||
|
|
@ -745,7 +745,7 @@ example_pagination(void *h0,
|
|||
* @retval -1 Fatal error
|
||||
*/
|
||||
int
|
||||
example_lockdb(clicon_handle h,
|
||||
example_lockdb(clixon_handle h,
|
||||
char *db,
|
||||
int lock,
|
||||
int id)
|
||||
|
|
@ -777,7 +777,7 @@ example_lockdb(clicon_handle h,
|
|||
* @retval -1 Error in one callback
|
||||
*/
|
||||
int
|
||||
example_extension(clicon_handle h,
|
||||
example_extension(clixon_handle h,
|
||||
yang_stmt *yext,
|
||||
yang_stmt *ys)
|
||||
{
|
||||
|
|
@ -841,7 +841,7 @@ static const map_str2str namespace_map[] = {
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
example_upgrade(clicon_handle h,
|
||||
example_upgrade(clixon_handle h,
|
||||
const char *db,
|
||||
cxobj *xt,
|
||||
modstate_diff_t *msd)
|
||||
|
|
@ -891,7 +891,7 @@ example_upgrade(clicon_handle h,
|
|||
mypath = ms->ms_s0;
|
||||
mynamespace = ms->ms_s1;
|
||||
if (xml_nsctx_get_prefix(nsc, mynamespace, &myprefix) == 0){
|
||||
clicon_err(OE_XML, ENOENT, "Namespace %s not found in canonical namespace map",
|
||||
clixon_err(OE_XML, ENOENT, "Namespace %s not found in canonical namespace map",
|
||||
mynamespace);
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -933,7 +933,7 @@ example_upgrade(clicon_handle h,
|
|||
* @see RFC 8528
|
||||
*/
|
||||
int
|
||||
main_yang_mount(clicon_handle h,
|
||||
main_yang_mount(clixon_handle h,
|
||||
cxobj *xt,
|
||||
int *config,
|
||||
validate_level *vl,
|
||||
|
|
@ -948,7 +948,7 @@ main_yang_mount(clicon_handle h,
|
|||
*vl = VL_FULL;
|
||||
if (yanglib && _mount_yang){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<yang-library xmlns=\"urn:ietf:params:xml:ns:yang:ietf-yang-library\">");
|
||||
|
|
@ -999,7 +999,7 @@ main_yang_mount(clicon_handle h,
|
|||
* - Rename /interfaces/interface/description to descr
|
||||
*/
|
||||
static int
|
||||
upgrade_2014_to_2016(clicon_handle h,
|
||||
upgrade_2014_to_2016(clixon_handle h,
|
||||
cxobj *xt,
|
||||
char *ns,
|
||||
uint16_t op,
|
||||
|
|
@ -1103,7 +1103,7 @@ upgrade_2014_to_2016(clicon_handle h,
|
|||
* fraction-digits 3 and divide all values with 1000
|
||||
*/
|
||||
static int
|
||||
upgrade_2016_to_2018(clicon_handle h,
|
||||
upgrade_2016_to_2018(clixon_handle h,
|
||||
cxobj *xt,
|
||||
char *ns,
|
||||
uint16_t op,
|
||||
|
|
@ -1159,7 +1159,7 @@ upgrade_2016_to_2018(clicon_handle h,
|
|||
cbuf *cb;
|
||||
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -1204,7 +1204,7 @@ upgrade_2016_to_2018(clicon_handle h,
|
|||
* - Rename /interfaces/interface/description to descr
|
||||
*/
|
||||
static int
|
||||
upgrade_interfaces(clicon_handle h,
|
||||
upgrade_interfaces(clixon_handle h,
|
||||
cxobj *xt,
|
||||
char *ns,
|
||||
uint16_t op,
|
||||
|
|
@ -1216,7 +1216,7 @@ upgrade_interfaces(clicon_handle h,
|
|||
int retval = -1;
|
||||
|
||||
if (_module_upgrade) /* For testing */
|
||||
clicon_log(LOG_NOTICE, "%s %s op:%s from:%d to:%d",
|
||||
clixon_log(h, LOG_NOTICE, "%s %s op:%s from:%d to:%d",
|
||||
__FUNCTION__, ns,
|
||||
(op&XML_FLAG_ADD)?"ADD":(op&XML_FLAG_DEL)?"DEL":"CHANGE",
|
||||
from, to);
|
||||
|
|
@ -1254,7 +1254,7 @@ upgrade_interfaces(clicon_handle h,
|
|||
* In this example, a loopback parameter is added
|
||||
*/
|
||||
int
|
||||
example_reset(clicon_handle h,
|
||||
example_reset(clixon_handle h,
|
||||
const char *db)
|
||||
{
|
||||
int retval = -1;
|
||||
|
|
@ -1279,14 +1279,14 @@ example_reset(clicon_handle h,
|
|||
/* xmldb_put requires modification tree to be: <config>... */
|
||||
xml_name_set(xt, "config");
|
||||
if ((cbret = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
/* Merge user reset state */
|
||||
if ((ret = xmldb_put(h, (char*)db, OP_MERGE, xt, clicon_username_get(h), cbret)) < 0)
|
||||
goto done;
|
||||
if (ret == 0){
|
||||
clicon_err(OE_XML, 0, "Error when writing to XML database: %s",
|
||||
clixon_err(OE_XML, 0, "Error when writing to XML database: %s",
|
||||
cbuf_get(cbret));
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1312,7 +1312,7 @@ example_reset(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
example_start(clicon_handle h)
|
||||
example_start(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
yang_stmt *yspec;
|
||||
|
|
@ -1326,7 +1326,7 @@ example_start(clicon_handle h)
|
|||
*/
|
||||
if (_action_instanceid){
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL){
|
||||
clicon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
clixon_err(OE_FATAL, 0, "No DB_SPEC");
|
||||
goto done;
|
||||
}
|
||||
if (yang_abs_schema_nodeid(yspec, _action_instanceid, &ya) == 0){
|
||||
|
|
@ -1348,7 +1348,7 @@ example_start(clicon_handle h)
|
|||
* the main event loop is entered.
|
||||
*/
|
||||
int
|
||||
example_daemon(clicon_handle h)
|
||||
example_daemon(clixon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
int ret;
|
||||
|
|
@ -1360,7 +1360,7 @@ example_daemon(clicon_handle h)
|
|||
if (_state && _state_file && _state_file_cached){
|
||||
yspec = clicon_dbspec_yang(h);
|
||||
if ((fp = fopen(_state_file, "r")) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "open(%s)", _state_file);
|
||||
clixon_err(OE_UNIX, errno, "open(%s)", _state_file);
|
||||
goto done;
|
||||
}
|
||||
/* Need to be yang bound for eg xml_copy_marked() in example_pagination
|
||||
|
|
@ -1382,7 +1382,7 @@ example_daemon(clicon_handle h)
|
|||
}
|
||||
|
||||
int
|
||||
example_exit(clicon_handle h)
|
||||
example_exit(clixon_handle h)
|
||||
{
|
||||
if (_state_xml_cache){
|
||||
xml_free(_state_xml_cache);
|
||||
|
|
@ -1392,7 +1392,7 @@ example_exit(clicon_handle h)
|
|||
}
|
||||
|
||||
/* Forward declaration */
|
||||
clixon_plugin_api *clixon_plugin_init(clicon_handle h);
|
||||
clixon_plugin_api *clixon_plugin_init(clixon_handle h);
|
||||
|
||||
static clixon_plugin_api api = {
|
||||
"example", /* name */
|
||||
|
|
@ -1419,13 +1419,13 @@ static clixon_plugin_api api = {
|
|||
/*! Backend plugin initialization
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @retval NULL Error with clicon_err set
|
||||
* @retval NULL Error
|
||||
* @retval api Pointer to API struct
|
||||
* In this example, you can pass -r, -s, -u to control the behaviour, mainly
|
||||
* for use in the test suites.
|
||||
*/
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
struct timeval retention = {0,0};
|
||||
int argc; /* command-line options (after --) */
|
||||
|
|
@ -1482,7 +1482,7 @@ clixon_plugin_init(clicon_handle h)
|
|||
break;
|
||||
}
|
||||
if ((_mount_yang && !_mount_namespace) || (!_mount_yang && _mount_namespace)){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Both -m and -M must be given for mounts");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Both -m and -M must be given for mounts");
|
||||
goto done;
|
||||
}
|
||||
if (_state_file){
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
#include <sys/time.h>
|
||||
#include <sys/syslog.h>
|
||||
|
||||
/* clicon */
|
||||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* Clicon library functions. */
|
||||
|
|
@ -84,7 +84,7 @@ static char *_validate_fail_xpath = NULL;
|
|||
static int _validate_fail_toggle = 0; /* fail at validate and commit */
|
||||
|
||||
int
|
||||
nacm_begin(clicon_handle h,
|
||||
nacm_begin(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -94,7 +94,7 @@ nacm_begin(clicon_handle h,
|
|||
/*! This is called on validate (and commit). Check validity of candidate
|
||||
*/
|
||||
int
|
||||
nacm_validate(clicon_handle h,
|
||||
nacm_validate(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -103,7 +103,7 @@ nacm_validate(clicon_handle h,
|
|||
if (_validate_fail_toggle==0 &&
|
||||
xpath_first(transaction_target(td), NULL, "%s", _validate_fail_xpath)){
|
||||
_validate_fail_toggle = 1; /* toggle if triggered */
|
||||
clicon_err(OE_XML, 0, "User error");
|
||||
clixon_err(OE_XML, 0, "User error");
|
||||
return -1; /* induce fail */
|
||||
}
|
||||
}
|
||||
|
|
@ -111,7 +111,7 @@ nacm_validate(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
nacm_complete(clicon_handle h,
|
||||
nacm_complete(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -122,7 +122,7 @@ nacm_complete(clicon_handle h,
|
|||
/*! This is called on commit. Identify modifications and adjust machine state
|
||||
*/
|
||||
int
|
||||
nacm_commit(clicon_handle h,
|
||||
nacm_commit(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -131,7 +131,7 @@ nacm_commit(clicon_handle h,
|
|||
if (_validate_fail_toggle==1 &&
|
||||
xpath_first(transaction_target(td), NULL, "%s", _validate_fail_xpath)){
|
||||
_validate_fail_toggle = 0; /* toggle if triggered */
|
||||
clicon_err(OE_XML, 0, "User error");
|
||||
clixon_err(OE_XML, 0, "User error");
|
||||
return -1; /* induce fail */
|
||||
}
|
||||
}
|
||||
|
|
@ -139,7 +139,7 @@ nacm_commit(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
nacm_commit_done(clicon_handle h,
|
||||
nacm_commit_done(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -148,7 +148,7 @@ nacm_commit_done(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
nacm_revert(clicon_handle h,
|
||||
nacm_revert(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -157,7 +157,7 @@ nacm_revert(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
nacm_end(clicon_handle h,
|
||||
nacm_end(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -166,7 +166,7 @@ nacm_end(clicon_handle h,
|
|||
}
|
||||
|
||||
int
|
||||
nacm_abort(clicon_handle h,
|
||||
nacm_abort(clixon_handle h,
|
||||
transaction_data td)
|
||||
{
|
||||
if (_transaction_log)
|
||||
|
|
@ -187,7 +187,7 @@ nacm_abort(clicon_handle h,
|
|||
* Real code would poll state
|
||||
*/
|
||||
int
|
||||
nacm_statedata(clicon_handle h,
|
||||
nacm_statedata(clixon_handle h,
|
||||
cvec *nsc,
|
||||
char *xpath,
|
||||
cxobj *xstate)
|
||||
|
|
@ -209,7 +209,7 @@ nacm_statedata(clicon_handle h,
|
|||
return retval;
|
||||
}
|
||||
|
||||
clixon_plugin_api *clixon_plugin_init(clicon_handle h);
|
||||
clixon_plugin_api *clixon_plugin_init(clixon_handle h);
|
||||
|
||||
static clixon_plugin_api api = {
|
||||
"nacm", /* name */ /*--- Common fields. ---*/
|
||||
|
|
@ -230,11 +230,11 @@ static clixon_plugin_api api = {
|
|||
/*! Backend plugin initialization
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @retval NULL Error with clicon_err set
|
||||
* @retval NULL Error
|
||||
* @retval api Pointer to API struct
|
||||
*/
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
char *nacm_mode;
|
||||
int argc; /* command-line options (after --) */
|
||||
|
|
@ -259,7 +259,7 @@ clixon_plugin_init(clicon_handle h)
|
|||
|
||||
nacm_mode = clicon_option_str(h, "CLICON_NACM_MODE");
|
||||
if (nacm_mode==NULL || strcmp(nacm_mode, "disabled") == 0){
|
||||
clicon_log(LOG_DEBUG, "%s CLICON_NACM_MODE not enabled: example nacm module disabled", __FUNCTION__);
|
||||
clixon_log(h, LOG_DEBUG, "%s CLICON_NACM_MODE not enabled: example nacm module disabled", __FUNCTION__);
|
||||
/* Skip nacm module if not enabled _unless_ we use transaction tests */
|
||||
if (_transaction_log == 0)
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
#include <netinet/in.h>
|
||||
#include <signal.h> /* matching strings */
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <cligen/cligen.h>
|
||||
#include <clixon/clixon.h>
|
||||
#include <clixon/clixon_cli.h>
|
||||
|
|
@ -67,7 +67,9 @@ static char *_mount_namespace = NULL;
|
|||
/*! Example cli function
|
||||
*/
|
||||
int
|
||||
mycallback(clicon_handle h, cvec *cvv, cvec *argv)
|
||||
mycallback(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
int retval = -1;
|
||||
cxobj *xret = NULL;
|
||||
|
|
@ -101,7 +103,7 @@ mycallback(clicon_handle h, cvec *cvv, cvec *argv)
|
|||
/*! Example "downcall", ie initiate an RPC to the backend
|
||||
*/
|
||||
int
|
||||
example_client_rpc(clicon_handle h,
|
||||
example_client_rpc(clixon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
|
|
@ -129,7 +131,7 @@ example_client_rpc(clicon_handle h,
|
|||
if (clicon_rpc_netconf_xml(h, xrpc, &xret, NULL) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xret, NULL, "//rpc-error")) != NULL){
|
||||
clixon_netconf_error(h, xerr, "Get configuration", NULL);
|
||||
clixon_err_netconf(h, OE_NETCONF, 0, xerr, "Get configuration");
|
||||
goto done;
|
||||
}
|
||||
/* Print result */
|
||||
|
|
@ -168,7 +170,7 @@ cli_incstr(cligen_handle h,
|
|||
if (cv == NULL || cv_type_get(cv) != CGV_STRING)
|
||||
return 0;
|
||||
if ((str = cv_string_get(cv)) == NULL){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "cv string is NULL");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "cv string is NULL");
|
||||
return -1;
|
||||
}
|
||||
for (i=0; i<strlen(str); i++)
|
||||
|
|
@ -190,7 +192,7 @@ cli_incstr(cligen_handle h,
|
|||
* @see RFC 8528
|
||||
*/
|
||||
int
|
||||
example_cli_yang_mount(clicon_handle h,
|
||||
example_cli_yang_mount(clixon_handle h,
|
||||
cxobj *xt,
|
||||
int *config,
|
||||
validate_level *vl,
|
||||
|
|
@ -205,7 +207,7 @@ example_cli_yang_mount(clicon_handle h,
|
|||
*vl = VL_FULL;
|
||||
if (yanglib && _mount_yang){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<yang-library xmlns=\"urn:ietf:params:xml:ns:yang:ietf-yang-library\">");
|
||||
|
|
@ -242,7 +244,7 @@ example_cli_yang_mount(clicon_handle h,
|
|||
* @see netconf_err2cb this errmsg is the same as the default
|
||||
*/
|
||||
int
|
||||
example_cli_errmsg(clicon_handle h,
|
||||
example_cli_errmsg(clixon_handle h,
|
||||
cxobj *xerr,
|
||||
cbuf *cberr)
|
||||
{
|
||||
|
|
@ -281,7 +283,7 @@ example_cli_errmsg(clicon_handle h,
|
|||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
example_version(clicon_handle h,
|
||||
example_version(clixon_handle h,
|
||||
FILE *f)
|
||||
{
|
||||
cligen_output(f, "Clixon main example version 0\n");
|
||||
|
|
@ -302,11 +304,11 @@ static clixon_plugin_api api = {
|
|||
/*! CLI plugin initialization
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @retval NULL Error with clicon_err set
|
||||
* @retval NULL Error
|
||||
* @retval api Pointer to API struct
|
||||
*/
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
struct timeval tv;
|
||||
int c;
|
||||
|
|
@ -330,7 +332,7 @@ clixon_plugin_init(clicon_handle h)
|
|||
break;
|
||||
}
|
||||
if ((_mount_yang && !_mount_namespace) || (!_mount_yang && _mount_namespace)){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Both -m and -M must be given for mounts");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Both -m and -M must be given for mounts");
|
||||
goto done;
|
||||
}
|
||||
/* XXX Not implemented: CLI completion for mountpoints, see clixon-controller
|
||||
|
|
|
|||
|
|
@ -55,13 +55,13 @@
|
|||
* @param[in] h Clixon handle
|
||||
*/
|
||||
int
|
||||
plugin_start(clicon_handle h)
|
||||
plugin_start(clixon_handle h)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
plugin_exit(clicon_handle h)
|
||||
plugin_exit(clixon_handle h)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -69,7 +69,7 @@ plugin_exit(clicon_handle h)
|
|||
/*! Local example netconf rpc callback
|
||||
*/
|
||||
int
|
||||
netconf_client_rpc(clicon_handle h,
|
||||
netconf_client_rpc(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -81,7 +81,7 @@ netconf_client_rpc(clicon_handle h,
|
|||
|
||||
/* get namespace from rpc name, return back in each output parameter */
|
||||
if ((namespace = xml_find_type_value(xe, NULL, "xmlns", CX_ATTR)) == NULL){
|
||||
clicon_err(OE_XML, ENOENT, "No namespace given in rpc %s", xml_name(xe));
|
||||
clixon_err(OE_XML, ENOENT, "No namespace given in rpc %s", xml_name(xe));
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbret, "<rpc-reply xmlns=\"%s\">", NETCONF_BASE_NAMESPACE);
|
||||
|
|
@ -103,7 +103,7 @@ netconf_client_rpc(clicon_handle h,
|
|||
return 0;
|
||||
}
|
||||
|
||||
clixon_plugin_api * clixon_plugin_init(clicon_handle h);
|
||||
clixon_plugin_api * clixon_plugin_init(clixon_handle h);
|
||||
|
||||
static struct clixon_plugin_api api = {
|
||||
"example", /* name */
|
||||
|
|
@ -115,11 +115,11 @@ static struct clixon_plugin_api api = {
|
|||
/*! Netconf plugin initialization
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @retval NULL Error with clicon_err set
|
||||
* @retval NULL Error
|
||||
* @retval api Pointer to API struct
|
||||
*/
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s restconf", __FUNCTION__);
|
||||
/* Register local netconf rpc client (note not backend rpc client) */
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
/* cligen */
|
||||
#include <cligen/cligen.h>
|
||||
|
||||
/* clicon */
|
||||
/* clixon */
|
||||
#include <clixon/clixon.h>
|
||||
#include <clixon/clixon_restconf.h> /* minor use */
|
||||
|
||||
|
|
@ -206,7 +206,7 @@ b64_decode(const char *src,
|
|||
* @note: Three hardwired users: andy, wilma, guest w password "bar".
|
||||
*/
|
||||
static int
|
||||
example_basic_auth(clicon_handle h,
|
||||
example_basic_auth(clixon_handle h,
|
||||
void *req,
|
||||
char **authp)
|
||||
{
|
||||
|
|
@ -222,7 +222,7 @@ example_basic_auth(clicon_handle h,
|
|||
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
if (authp == NULL){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Authp output parameter is NULL");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Authp output parameter is NULL");
|
||||
goto done;
|
||||
}
|
||||
/* At this point in the code we must use HTTP basic authentication */
|
||||
|
|
@ -235,7 +235,7 @@ example_basic_auth(clicon_handle h,
|
|||
auth += strlen("Basic ");
|
||||
authlen = strlen(auth)*2;
|
||||
if ((user = malloc(authlen)) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "malloc");
|
||||
clixon_err(OE_UNIX, errno, "malloc");
|
||||
goto done;
|
||||
}
|
||||
memset(user, 0, authlen);
|
||||
|
|
@ -289,7 +289,7 @@ example_basic_auth(clicon_handle h,
|
|||
* @note authp should be malloced
|
||||
*/
|
||||
int
|
||||
example_restconf_credentials(clicon_handle h,
|
||||
example_restconf_credentials(clixon_handle h,
|
||||
void *req,
|
||||
clixon_auth_type_t auth_type,
|
||||
char **authp)
|
||||
|
|
@ -317,7 +317,7 @@ example_restconf_credentials(clicon_handle h,
|
|||
/*! Local example restconf rpc callback
|
||||
*/
|
||||
int
|
||||
restconf_client_rpc(clicon_handle h,
|
||||
restconf_client_rpc(clixon_handle h,
|
||||
cxobj *xe,
|
||||
cbuf *cbret,
|
||||
void *arg,
|
||||
|
|
@ -329,7 +329,7 @@ restconf_client_rpc(clicon_handle h,
|
|||
|
||||
/* get namespace from rpc name, return back in each output parameter */
|
||||
if ((namespace = xml_find_type_value(xe, NULL, "xmlns", CX_ATTR)) == NULL){
|
||||
clicon_err(OE_XML, ENOENT, "No namespace given in rpc %s", xml_name(xe));
|
||||
clixon_err(OE_XML, ENOENT, "No namespace given in rpc %s", xml_name(xe));
|
||||
goto done;
|
||||
}
|
||||
cprintf(cbret, "<rpc-reply xmlns=\"%s\">", NETCONF_BASE_NAMESPACE);
|
||||
|
|
@ -352,7 +352,7 @@ restconf_client_rpc(clicon_handle h,
|
|||
/*! Start example restonf plugin. Set authentication method
|
||||
*/
|
||||
int
|
||||
example_restconf_start(clicon_handle h)
|
||||
example_restconf_start(clixon_handle h)
|
||||
{
|
||||
clixon_debug(CLIXON_DBG_DEFAULT, "%s", __FUNCTION__);
|
||||
return 0;
|
||||
|
|
@ -372,7 +372,7 @@ example_restconf_start(clicon_handle h)
|
|||
* @see RFC 8528
|
||||
*/
|
||||
int
|
||||
restconf_yang_mount(clicon_handle h,
|
||||
restconf_yang_mount(clixon_handle h,
|
||||
cxobj *xt,
|
||||
int *config,
|
||||
validate_level *vl,
|
||||
|
|
@ -387,7 +387,7 @@ restconf_yang_mount(clicon_handle h,
|
|||
*vl = VL_FULL;
|
||||
if (yanglib && _mount_yang){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "cbuf_new");
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
cprintf(cb, "<yang-library xmlns=\"urn:ietf:params:xml:ns:yang:ietf-yang-library\">");
|
||||
|
|
@ -414,7 +414,7 @@ restconf_yang_mount(clicon_handle h,
|
|||
return retval;
|
||||
}
|
||||
|
||||
clixon_plugin_api * clixon_plugin_init(clicon_handle h);
|
||||
clixon_plugin_api * clixon_plugin_init(clixon_handle h);
|
||||
|
||||
static clixon_plugin_api api = {
|
||||
"example", /* name */
|
||||
|
|
@ -428,12 +428,12 @@ static clixon_plugin_api api = {
|
|||
/*! Restconf plugin initialization
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @retval NULL Error with clicon_err set
|
||||
* @retval NULL Error
|
||||
* @retval api Pointer to API struct
|
||||
* Arguments are argc/argv after --
|
||||
*/
|
||||
clixon_plugin_api *
|
||||
clixon_plugin_init(clicon_handle h)
|
||||
clixon_plugin_init(clixon_handle h)
|
||||
{
|
||||
int argc; /* command-line options (after --) */
|
||||
char **argv = NULL;
|
||||
|
|
@ -457,7 +457,7 @@ clixon_plugin_init(clicon_handle h)
|
|||
break;
|
||||
}
|
||||
if ((_mount_yang && !_mount_namespace) || (!_mount_yang && _mount_namespace)){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Both -m and -M must be given for mounts");
|
||||
clixon_err(OE_PLUGIN, EINVAL, "Both -m and -M must be given for mounts");
|
||||
goto done;
|
||||
}
|
||||
/* Register local netconf rpc client (note not backend rpc client) */
|
||||
|
|
|
|||
|
|
@ -203,3 +203,10 @@
|
|||
* Plan is to remove this (undef:d) in next release
|
||||
*/
|
||||
#undef RESTCONF_INLINE
|
||||
|
||||
/*! Backward compatible with 6.5
|
||||
*
|
||||
* Note: many(most) not covered by this constant need to GREP
|
||||
* This includes lots of clicon->clixon namechanges, see CHANGELOG for whole list
|
||||
*/
|
||||
#define COMPAT_6_5
|
||||
|
|
|
|||
|
|
@ -68,11 +68,12 @@ extern "C" {
|
|||
|
||||
#include <clixon/clixon_sig.h>
|
||||
#include <clixon/clixon_uid.h>
|
||||
#include <clixon/clixon_err.h>
|
||||
#include <clixon/clixon_queue.h>
|
||||
#include <clixon/clixon_hash.h>
|
||||
#include <clixon/clixon_handle.h>
|
||||
#include <clixon/clixon_err.h>
|
||||
#include <clixon/clixon_log.h>
|
||||
#include <clixon/clixon_debug.h>
|
||||
#include <clixon/clixon_netns.h>
|
||||
#include <clixon/clixon_yang.h>
|
||||
#include <clixon/clixon_yang_type.h>
|
||||
|
|
|
|||
|
|
@ -63,87 +63,87 @@ typedef struct {
|
|||
* Prototypes
|
||||
*/
|
||||
/* Generic clixon data API the form <name>=<val> where <val> is string */
|
||||
int clicon_data_get(clicon_handle h, const char *name, char **val);
|
||||
int clicon_data_set(clicon_handle h, const char *name, char *val);
|
||||
int clicon_data_del(clicon_handle h, const char *name);
|
||||
int clicon_data_get(clixon_handle h, const char *name, char **val);
|
||||
int clicon_data_set(clixon_handle h, const char *name, char *val);
|
||||
int clicon_data_del(clixon_handle h, const char *name);
|
||||
|
||||
/* Get generic clixon data on the form <name>=<ptr> where <ptr> is void* */
|
||||
int clicon_ptr_get(clicon_handle h, const char *name, void **ptr);
|
||||
int clicon_ptr_set(clicon_handle h, const char *name, void *ptr);
|
||||
int clicon_ptr_del(clicon_handle h, const char *name);
|
||||
int clicon_ptr_get(clixon_handle h, const char *name, void **ptr);
|
||||
int clicon_ptr_set(clixon_handle h, const char *name, void *ptr);
|
||||
int clicon_ptr_del(clixon_handle h, const char *name);
|
||||
|
||||
cvec *clicon_data_cvec_get(clicon_handle h, const char *name);
|
||||
int clicon_data_cvec_set(clicon_handle h, const char *name, cvec *cvv);
|
||||
int clicon_data_cvec_del(clicon_handle h, const char *name);
|
||||
cvec *clicon_data_cvec_get(clixon_handle h, const char *name);
|
||||
int clicon_data_cvec_set(clixon_handle h, const char *name, cvec *cvv);
|
||||
int clicon_data_cvec_del(clixon_handle h, const char *name);
|
||||
|
||||
/* String options, default NULL */
|
||||
int clicon_data_int_get(clicon_handle h, const char *name);
|
||||
int clicon_data_int_set(clicon_handle h, const char *name, int val);
|
||||
int clicon_data_int_del(clicon_handle h, const char *name);
|
||||
int clicon_data_int_get(clixon_handle h, const char *name);
|
||||
int clicon_data_int_set(clixon_handle h, const char *name, int val);
|
||||
int clicon_data_int_del(clixon_handle h, const char *name);
|
||||
|
||||
yang_stmt * clicon_dbspec_yang(clicon_handle h);
|
||||
int clicon_dbspec_yang_set(clicon_handle h, yang_stmt *ys);
|
||||
yang_stmt * clicon_dbspec_yang(clixon_handle h);
|
||||
int clicon_dbspec_yang_set(clixon_handle h, yang_stmt *ys);
|
||||
|
||||
yang_stmt * clicon_config_yang(clicon_handle h);
|
||||
int clicon_config_yang_set(clicon_handle h, yang_stmt *ys);
|
||||
yang_stmt * clicon_config_yang(clixon_handle h);
|
||||
int clicon_config_yang_set(clixon_handle h, yang_stmt *ys);
|
||||
|
||||
yang_stmt * clicon_nacm_ext_yang(clicon_handle h);
|
||||
int clicon_nacm_ext_yang_set(clicon_handle h, yang_stmt *ys);
|
||||
yang_stmt * clicon_nacm_ext_yang(clixon_handle h);
|
||||
int clicon_nacm_ext_yang_set(clixon_handle h, yang_stmt *ys);
|
||||
|
||||
cvec *clicon_nsctx_global_get(clicon_handle h);
|
||||
int clicon_nsctx_global_set(clicon_handle h, cvec *nsctx);
|
||||
cvec *clicon_nsctx_global_get(clixon_handle h);
|
||||
int clicon_nsctx_global_set(clixon_handle h, cvec *nsctx);
|
||||
|
||||
cxobj * clicon_nacm_ext(clicon_handle h);
|
||||
int clicon_nacm_ext_set(clicon_handle h, cxobj *xn);
|
||||
cxobj * clicon_nacm_ext(clixon_handle h);
|
||||
int clicon_nacm_ext_set(clixon_handle h, cxobj *xn);
|
||||
|
||||
cxobj *clicon_nacm_cache(clicon_handle h);
|
||||
int clicon_nacm_cache_set(clicon_handle h, cxobj *xn);
|
||||
cxobj *clicon_nacm_cache(clixon_handle h);
|
||||
int clicon_nacm_cache_set(clixon_handle h, cxobj *xn);
|
||||
|
||||
cxobj *clicon_conf_xml(clicon_handle h);
|
||||
int clicon_conf_xml_set(clicon_handle h, cxobj *x);
|
||||
cxobj *clicon_conf_xml(clixon_handle h);
|
||||
int clicon_conf_xml_set(clixon_handle h, cxobj *x);
|
||||
|
||||
cxobj *clicon_conf_restconf(clicon_handle h);
|
||||
cxobj *clicon_conf_autocli(clicon_handle h);
|
||||
cxobj *clicon_conf_restconf(clixon_handle h);
|
||||
cxobj *clicon_conf_autocli(clixon_handle h);
|
||||
|
||||
db_elmnt *clicon_db_elmnt_get(clicon_handle h, const char *db);
|
||||
int clicon_db_elmnt_set(clicon_handle h, const char *db, db_elmnt *xc);
|
||||
db_elmnt *clicon_db_elmnt_get(clixon_handle h, const char *db);
|
||||
int clicon_db_elmnt_set(clixon_handle h, const char *db, db_elmnt *xc);
|
||||
|
||||
/**/
|
||||
/* Set and get authorized user name */
|
||||
char *clicon_username_get(clicon_handle h);
|
||||
int clicon_username_set(clicon_handle h, void *username);
|
||||
char *clicon_username_get(clixon_handle h);
|
||||
int clicon_username_set(clixon_handle h, void *username);
|
||||
|
||||
/* Set and get startup status */
|
||||
enum startup_status clicon_startup_status_get(clicon_handle h);
|
||||
int clicon_startup_status_set(clicon_handle h, enum startup_status status);
|
||||
enum startup_status clicon_startup_status_get(clixon_handle h);
|
||||
int clicon_startup_status_set(clixon_handle h, enum startup_status status);
|
||||
|
||||
/* Set and get server socket fd (ie backend server socket / restconf fcgi socket */
|
||||
int clicon_socket_get(clicon_handle h);
|
||||
int clicon_socket_set(clicon_handle h, int s);
|
||||
int clicon_socket_get(clixon_handle h);
|
||||
int clicon_socket_set(clixon_handle h, int s);
|
||||
|
||||
/* Set and get client socket fd (ie client cli / netconf / restconf / client-api socket */
|
||||
int clicon_client_socket_get(clicon_handle h);
|
||||
int clicon_client_socket_set(clicon_handle h, int s);
|
||||
int clicon_client_socket_get(clixon_handle h);
|
||||
int clicon_client_socket_set(clixon_handle h, int s);
|
||||
|
||||
/* Set and get module state full and brief cached tree */
|
||||
cxobj *clicon_modst_cache_get(clicon_handle h, int brief);
|
||||
int clicon_modst_cache_set(clicon_handle h, int brief, cxobj *xms);
|
||||
cxobj *clicon_modst_cache_get(clixon_handle h, int brief);
|
||||
int clicon_modst_cache_set(clixon_handle h, int brief, cxobj *xms);
|
||||
|
||||
/* Set and get yang/xml module revision changelog */
|
||||
cxobj *clicon_xml_changelog_get(clicon_handle h);
|
||||
int clicon_xml_changelog_set(clicon_handle h, cxobj *xchlog);
|
||||
cxobj *clicon_xml_changelog_get(clixon_handle h);
|
||||
int clicon_xml_changelog_set(clixon_handle h, cxobj *xchlog);
|
||||
|
||||
/* Set and get user command-line options (after --) */
|
||||
int clicon_argv_get(clicon_handle h, int *argc, char ***argv);
|
||||
int clicon_argv_set(clicon_handle h, char *argv0, int argc, char **argv);
|
||||
int clicon_argv_get(clixon_handle h, int *argc, char ***argv);
|
||||
int clicon_argv_set(clixon_handle h, char *argv0, int argc, char **argv);
|
||||
|
||||
/* Set and get (client/backend) session id */
|
||||
int clicon_session_id_set(clicon_handle h, uint32_t id);
|
||||
int clicon_session_id_get(clicon_handle h, uint32_t *id);
|
||||
int clicon_session_id_del(clicon_handle h);
|
||||
int clicon_session_id_set(clixon_handle h, uint32_t id);
|
||||
int clicon_session_id_get(clixon_handle h, uint32_t *id);
|
||||
int clicon_session_id_del(clixon_handle h);
|
||||
|
||||
/* If set, quit startup directly after upgrade */
|
||||
int clicon_quit_upgrade_get(clicon_handle h);
|
||||
int clicon_quit_upgrade_set(clicon_handle h, int val);
|
||||
int clicon_quit_upgrade_get(clixon_handle h);
|
||||
int clicon_quit_upgrade_set(clixon_handle h, int val);
|
||||
|
||||
#endif /* _CLIXON_DATA_H_ */
|
||||
|
|
|
|||
|
|
@ -43,39 +43,39 @@
|
|||
* API
|
||||
*/
|
||||
/* Internal functions */
|
||||
int xmldb_db2file(clicon_handle h, const char *db, char **filename);
|
||||
int xmldb_db2file(clixon_handle h, const char *db, char **filename);
|
||||
|
||||
/* API */
|
||||
int xmldb_connect(clicon_handle h);
|
||||
int xmldb_disconnect(clicon_handle h);
|
||||
int xmldb_connect(clixon_handle h);
|
||||
int xmldb_disconnect(clixon_handle h);
|
||||
/* in clixon_datastore_read.[ch] */
|
||||
int xmldb_get(clicon_handle h, const char *db, cvec *nsc, char *xpath, cxobj **xtop);
|
||||
int xmldb_get0(clicon_handle h, const char *db, yang_bind yb,
|
||||
int xmldb_get(clixon_handle h, const char *db, cvec *nsc, char *xpath, cxobj **xtop);
|
||||
int xmldb_get0(clixon_handle h, const char *db, yang_bind yb,
|
||||
cvec *nsc, const char *xpath, int copy, withdefaults_type wdef,
|
||||
cxobj **xtop, modstate_diff_t *msd, cxobj **xerr);
|
||||
int xmldb_get0_clear(clicon_handle h, cxobj *x);
|
||||
int xmldb_get0_free(clicon_handle h, cxobj **xp);
|
||||
int xmldb_put(clicon_handle h, const char *db, enum operation_type op, cxobj *xt, char *username, cbuf *cbret); /* in clixon_datastore_write.[ch] */
|
||||
int xmldb_copy(clicon_handle h, const char *from, const char *to);
|
||||
int xmldb_lock(clicon_handle h, const char *db, uint32_t id);
|
||||
int xmldb_unlock(clicon_handle h, const char *db);
|
||||
int xmldb_unlock_all(clicon_handle h, uint32_t id);
|
||||
uint32_t xmldb_islocked(clicon_handle h, const char *db);
|
||||
int xmldb_lock_timestamp(clicon_handle h, const char *db, struct timeval *tv);
|
||||
int xmldb_exists(clicon_handle h, const char *db);
|
||||
int xmldb_clear(clicon_handle h, const char *db);
|
||||
int xmldb_delete(clicon_handle h, const char *db);
|
||||
int xmldb_create(clicon_handle h, const char *db);
|
||||
int xmldb_get0_clear(clixon_handle h, cxobj *x);
|
||||
int xmldb_get0_free(clixon_handle h, cxobj **xp);
|
||||
int xmldb_put(clixon_handle h, const char *db, enum operation_type op, cxobj *xt, char *username, cbuf *cbret); /* in clixon_datastore_write.[ch] */
|
||||
int xmldb_copy(clixon_handle h, const char *from, const char *to);
|
||||
int xmldb_lock(clixon_handle h, const char *db, uint32_t id);
|
||||
int xmldb_unlock(clixon_handle h, const char *db);
|
||||
int xmldb_unlock_all(clixon_handle h, uint32_t id);
|
||||
uint32_t xmldb_islocked(clixon_handle h, const char *db);
|
||||
int xmldb_lock_timestamp(clixon_handle h, const char *db, struct timeval *tv);
|
||||
int xmldb_exists(clixon_handle h, const char *db);
|
||||
int xmldb_clear(clixon_handle h, const char *db);
|
||||
int xmldb_delete(clixon_handle h, const char *db);
|
||||
int xmldb_create(clixon_handle h, const char *db);
|
||||
/* utility functions */
|
||||
int xmldb_db_reset(clicon_handle h, const char *db);
|
||||
int xmldb_db_reset(clixon_handle h, const char *db);
|
||||
|
||||
cxobj *xmldb_cache_get(clicon_handle h, const char *db);
|
||||
cxobj *xmldb_cache_get(clixon_handle h, const char *db);
|
||||
|
||||
int xmldb_modified_get(clicon_handle h, const char *db);
|
||||
int xmldb_modified_set(clicon_handle h, const char *db, int value);
|
||||
int xmldb_empty_get(clicon_handle h, const char *db);
|
||||
int xmldb_dump(clicon_handle h, FILE *f, cxobj *xt);
|
||||
int xmldb_print(clicon_handle h, FILE *f);
|
||||
int xmldb_rename(clicon_handle h, const char *db, const char *newdb, const char *suffix);
|
||||
int xmldb_modified_get(clixon_handle h, const char *db);
|
||||
int xmldb_modified_set(clixon_handle h, const char *db, int value);
|
||||
int xmldb_empty_get(clixon_handle h, const char *db);
|
||||
int xmldb_dump(clixon_handle h, FILE *f, cxobj *xt);
|
||||
int xmldb_print(clixon_handle h, FILE *f);
|
||||
int xmldb_rename(clixon_handle h, const char *db, const char *newdb, const char *suffix);
|
||||
|
||||
#endif /* _CLIXON_DATASTORE_H */
|
||||
|
|
|
|||
60
lib/clixon/clixon_debug.h
Normal file
60
lib/clixon/clixon_debug.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
*
|
||||
***** BEGIN LICENSE BLOCK *****
|
||||
|
||||
Copyright (C) 2009-2016 Olof Hagsand and Benny Holmgren
|
||||
Copyright (C) 2017-2019 Olof Hagsand
|
||||
Copyright (C) 2020-2022 Olof Hagsand and Rubicon Communications, LLC (Netgate)
|
||||
|
||||
This file is part of CLIXON.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms of
|
||||
the GNU General Public License Version 3 or later (the "GPL"),
|
||||
in which case the provisions of the GPL are applicable instead
|
||||
of those above. If you wish to allow use of your version of this file only
|
||||
under the terms of the GPL, and not to allow others to
|
||||
use your version of this file under the terms of Apache License version 2,
|
||||
indicate your decision by deleting the provisions above and replace them with
|
||||
the notice and other provisions required by the GPL. If you do not delete
|
||||
the provisions above, a recipient may use your version of this file under
|
||||
the terms of any one of the Apache License version 2 or the GPL.
|
||||
|
||||
***** END LICENSE BLOCK *****
|
||||
|
||||
*
|
||||
* Clixon debugging
|
||||
*/
|
||||
|
||||
#ifndef _CLIXON_DEBUG_H_
|
||||
#define _CLIXON_DEBUG_H_
|
||||
|
||||
/*
|
||||
* Constants
|
||||
*/
|
||||
|
||||
/* Debug-level masks */
|
||||
#define CLIXON_DBG_DEFAULT 1 /* Default logs */
|
||||
#define CLIXON_DBG_MSG 2 /* In/out messages and datastore reads */
|
||||
#define CLIXON_DBG_DETAIL 4 /* Details: traces, parse trees, etc */
|
||||
#define CLIXON_DBG_EXTRA 8 /* Extra Detailed logs */
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int clixon_debug(int dbglevel, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
||||
int clixon_debug_init(clixon_handle h, int dbglevel);
|
||||
int clixon_debug_get(void);
|
||||
|
||||
#endif /* _CLIXON_DEBUG_H_ */
|
||||
|
|
@ -35,9 +35,9 @@
|
|||
|
||||
*
|
||||
* Errors may be syslogged using LOG_ERR, and printed to stderr, as controlled by
|
||||
* clicon_log_init
|
||||
* global error variables are set:
|
||||
* clicon_errno, clicon_suberrno, clicon_err_reason.
|
||||
* clixon_log_init
|
||||
* Details about the errors may be retreievd by access functions
|
||||
* clixon_err_reason(), clixon_err_subnr(), etc
|
||||
*/
|
||||
|
||||
#ifndef _CLIXON_ERR_H_
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
* Add error category here,
|
||||
* @see EV variable in clixon_err.c but must also add an entry there
|
||||
*/
|
||||
enum clicon_err{
|
||||
enum clixon_err{
|
||||
/* 0 means error not set) */
|
||||
OE_DB = 1, /* database registries */
|
||||
OE_DAEMON, /* daemons: pidfiles, etc */
|
||||
|
|
@ -91,28 +91,35 @@ enum clicon_err{
|
|||
*/
|
||||
typedef int (clixon_cat_log_cb)(void *handle, int suberr, cbuf *cb);
|
||||
|
||||
/*
|
||||
* Variables
|
||||
* XXX: should not be global
|
||||
*/
|
||||
extern int clicon_errno; /* CLICON errors (see clicon_err) */
|
||||
extern int clicon_suberrno; /* Eg orig errno */
|
||||
extern char clicon_err_reason[ERR_STRLEN];
|
||||
|
||||
/*
|
||||
* Macros
|
||||
*/
|
||||
#define clicon_err(e,s,_fmt, args...) clicon_err_fn(__FUNCTION__, __LINE__, (e), (s), _fmt , ##args)
|
||||
#define clixon_err(e,s,_fmt, args...) clixon_err_fn(__FUNCTION__, __LINE__, (e), (s), _fmt , ##args)
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int clicon_err_reset(void);
|
||||
int clicon_err_fn(const char *fn, const int line, int category, int err, const char *format, ...) __attribute__ ((format (printf, 5, 6)));
|
||||
char *clicon_strerror(int err);
|
||||
void *clicon_err_save(void);
|
||||
int clicon_err_restore(void *handle);
|
||||
int clixon_err_cat_reg(enum clicon_err category, void *handle, clixon_cat_log_cb logfn);
|
||||
int clixon_err_init(clixon_handle h);
|
||||
int clixon_err_category(void);
|
||||
int clixon_err_subnr(void);
|
||||
char *clixon_err_reason(void);
|
||||
char *clixon_err_str(void);
|
||||
int clixon_err_reset(void);
|
||||
int clixon_err_args(clixon_handle h, const char *fn, const int line, int category, int suberr, char *msg);
|
||||
int clixon_err_fn(const char *fn, const int line, int category, int err, const char *format, ...) __attribute__ ((format (printf, 5, 6)));
|
||||
|
||||
void *clixon_err_save(void);
|
||||
int clixon_err_restore(void *handle);
|
||||
int clixon_err_cat_reg(enum clixon_err category, void *handle, clixon_cat_log_cb logfn);
|
||||
int clixon_err_exit(void);
|
||||
|
||||
#if 1 /* COMPAT_6_5 */
|
||||
#define clicon_err(e,s,_fmt, args...) clixon_err_fn(__FUNCTION__, __LINE__, (e), (s), _fmt , ##args)
|
||||
#define clicon_err_reset() clixon_err_reset()
|
||||
|
||||
#define clicon_errno clixon_err_category()
|
||||
#define clicon_suberrno clixon_err_subnr()
|
||||
#define clicon_err_reason clixon_err_reason()
|
||||
#endif
|
||||
|
||||
#endif /* _CLIXON_ERR_H_ */
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ int clixon_event_unreg_timeout(int (*fn)(int, void*), void *arg);
|
|||
|
||||
int clixon_event_poll(int fd);
|
||||
|
||||
int clixon_event_loop(clicon_handle h);
|
||||
int clixon_event_loop(clixon_handle h);
|
||||
|
||||
int clixon_event_exit(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@
|
|||
cli/backend/netconf or other plugin. But this is hidden under-the-hood.
|
||||
*/
|
||||
typedef void *clixon_handle;
|
||||
typedef void *clicon_handle;
|
||||
|
||||
/* The dynamicically loadable plugin object handle (should be in clixon_plugin.h) */
|
||||
typedef void *plghndl_t;
|
||||
|
|
@ -67,30 +66,37 @@ typedef int (clicon_output_cb)(
|
|||
* Prototypes
|
||||
*/
|
||||
/* Basic CLICON init functions returning a handle for API access. */
|
||||
clicon_handle clicon_handle_init(void);
|
||||
clixon_handle clixon_handle_init(void);
|
||||
|
||||
/* Internal call to allocate a CLICON handle. */
|
||||
clicon_handle clicon_handle_init0(int size);
|
||||
clixon_handle clixon_handle_init0(int size);
|
||||
|
||||
/* Deallocate handle */
|
||||
int clicon_handle_exit(clicon_handle h);
|
||||
int clixon_handle_exit(clixon_handle h);
|
||||
|
||||
/* Check struct magic number for sanity checks */
|
||||
int clicon_handle_check(clicon_handle h);
|
||||
int clixon_handle_check(clixon_handle h);
|
||||
|
||||
/* Return clicon options (hash-array) given a handle.*/
|
||||
clicon_hash_t *clicon_options(clicon_handle h);
|
||||
clicon_hash_t *clicon_options(clixon_handle h);
|
||||
|
||||
/* Return internal clicon data (hash-array) given a handle.*/
|
||||
clicon_hash_t *clicon_data(clicon_handle h);
|
||||
clicon_hash_t *clicon_data(clixon_handle h);
|
||||
|
||||
/* Return internal clicon db_elmnt (hash-array) given a handle.*/
|
||||
clicon_hash_t *clicon_db_elmnt(clicon_handle h);
|
||||
clicon_hash_t *clicon_db_elmnt(clixon_handle h);
|
||||
|
||||
/* Return internal stream hash-array given a handle.*/
|
||||
struct event_stream *clicon_stream(clicon_handle h);
|
||||
struct event_stream *clicon_stream(clixon_handle h);
|
||||
struct event_stream;
|
||||
int clicon_stream_set(clicon_handle h, struct event_stream *es);
|
||||
int clicon_stream_append(clicon_handle h, struct event_stream *es);
|
||||
int clicon_stream_set(clixon_handle h, struct event_stream *es);
|
||||
int clicon_stream_append(clixon_handle h, struct event_stream *es);
|
||||
|
||||
/* COMPAT_6_5 */
|
||||
#if 1
|
||||
typedef void *clicon_handle;
|
||||
#define clicon_handle_init() clixon_handle_init()
|
||||
#define clicon_handle_exit(h) clixon_handle_exit(h)
|
||||
#endif
|
||||
|
||||
#endif /* _CLIXON_HANDLE_H_ */
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
***** END LICENSE BLOCK *****
|
||||
|
||||
*
|
||||
* Regular logging and debugging. Syslog using levels.
|
||||
* Regular logging, syslog using levels.
|
||||
*/
|
||||
|
||||
#ifndef _CLIXON_LOG_H_
|
||||
|
|
@ -44,38 +44,38 @@
|
|||
* Constants
|
||||
*/
|
||||
/* Where to log (masks) */
|
||||
#define CLICON_LOG_SYSLOG 1 /* print logs on syslog */
|
||||
#define CLICON_LOG_STDERR 2 /* print logs on stderr */
|
||||
#define CLICON_LOG_STDOUT 4 /* print logs on stdout */
|
||||
#define CLICON_LOG_FILE 8 /* print logs on clicon_log_filename */
|
||||
|
||||
/* Debug-level masks */
|
||||
#define CLIXON_DBG_DEFAULT 1 /* Default logs */
|
||||
#define CLIXON_DBG_MSG 2 /* In/out messages and datastore reads */
|
||||
#define CLIXON_DBG_DETAIL 4 /* Details: traces, parse trees, etc */
|
||||
#define CLIXON_DBG_EXTRA 8 /* Extra Detailed logs */
|
||||
#define CLIXON_LOG_SYSLOG 1 /* print logs on syslog */
|
||||
#define CLIXON_LOG_STDERR 2 /* print logs on stderr */
|
||||
#define CLIXON_LOG_STDOUT 4 /* print logs on stdout */
|
||||
#define CLIXON_LOG_FILE 8 /* print logs on clicon_log_filename */
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int clicon_log_init(char *ident, int upto, int flags);
|
||||
int clicon_log_exit(void);
|
||||
int clicon_log_opt(char c);
|
||||
int clicon_log_file(char *filename);
|
||||
int clicon_log_string_limit_set(size_t sz);
|
||||
size_t clicon_log_string_limit_get(void);
|
||||
int clicon_get_logflags(void);
|
||||
int clicon_log_str(int level, char *msg);
|
||||
int clicon_log(int level, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
||||
int clixon_debug(int dbglevel, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
||||
int clixon_debug_init(int dbglevel, FILE *f);
|
||||
int clixon_debug_get(void);
|
||||
char *mon2name(int md);
|
||||
int clixon_log_init(clixon_handle h, char *ident, int upto, int flags);
|
||||
int clixon_log_exit(void);
|
||||
int clixon_log_opt(char c);
|
||||
int clixon_log_file(char *filename);
|
||||
int clixon_log_string_limit_set(size_t sz);
|
||||
size_t clixon_log_string_limit_get(void);
|
||||
int clixon_get_logflags(void);
|
||||
int clixon_log_str(int level, char *msg);
|
||||
int clixon_log(clixon_handle h, int level, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
|
||||
char *clixon_log_mon2name(int md);
|
||||
|
||||
#if 1 /* COMPAT_6_5 */
|
||||
#define CLICON_LOG_SYSLOG CLIXON_LOG_SYSLOG
|
||||
#define CLICON_LOG_STDERR CLIXON_LOG_STDERR
|
||||
#define CLICON_LOG_STDOUT CLIXON_LOG_STDOUT
|
||||
#define CLICON_LOG_FILE CLIXON_LOG_FILE
|
||||
|
||||
#define clicon_log(l, f, args...) clixon_log(NULL, (l), (f), ##args)
|
||||
#define clicon_log_exit() clixon_log_exit()
|
||||
#define clicon_log_opt(c) clixon_log_opt((c))
|
||||
#define clicon_log_file(f) clixon_log_file((f))
|
||||
|
||||
int clicon_log_init(char *ident, int upto, int flags);
|
||||
|
||||
#endif /* COMPAT_6_5 */
|
||||
|
||||
/* 6.4 backward compatability */
|
||||
#if 1
|
||||
#define clicon_debug clixon_debug
|
||||
#define clicon_debug_init clixon_debug_init
|
||||
#define clicon_debug_get clixon_debug_get
|
||||
#endif
|
||||
#endif /* _CLIXON_LOG_H_ */
|
||||
|
|
|
|||
|
|
@ -57,12 +57,12 @@ enum nacm_access{
|
|||
* Prototypes
|
||||
*/
|
||||
int nacm_rpc(char *rpc, char *module, char *username, cxobj *xnacm, cbuf *cbret);
|
||||
int nacm_datanode_read(clicon_handle h, cxobj *xt, cxobj **xvec, size_t xlen, char *username,
|
||||
int nacm_datanode_read(clixon_handle h, cxobj *xt, cxobj **xvec, size_t xlen, char *username,
|
||||
cxobj *nacm_xtree);
|
||||
int nacm_datanode_write(clicon_handle h, cxobj *xr, cxobj *xt,
|
||||
int nacm_datanode_write(clixon_handle h, cxobj *xr, cxobj *xt,
|
||||
enum nacm_access access,
|
||||
char *username, cxobj *xnacm, cbuf *cbret);
|
||||
int nacm_access_pre(clicon_handle h, char *peername, char *username, cxobj **xnacmp);
|
||||
int verify_nacm_user(clicon_handle h, enum nacm_credentials_t cred, char *peername, char *nacmname, cbuf *cbret);
|
||||
int nacm_access_pre(clixon_handle h, char *peername, char *username, cxobj **xnacmp);
|
||||
int verify_nacm_user(clixon_handle h, enum nacm_credentials_t cred, char *peername, char *nacmname, cbuf *cbret);
|
||||
|
||||
#endif /* _CLIXON_NACM_H */
|
||||
|
|
|
|||
|
|
@ -147,14 +147,6 @@ typedef enum withdefaults_type withdefaults_type;
|
|||
/*
|
||||
* Macros
|
||||
*/
|
||||
/*! Generate textual error log from Netconf error message
|
||||
*
|
||||
* @param[in] xerr Netconf error xml tree on the form: <rpc-error>
|
||||
* @param[in] format Format string
|
||||
* @param[in] arg String argument to format (optional)
|
||||
*/
|
||||
#define clixon_netconf_error(h, x, f, a) clixon_netconf_error_fn((h), __FUNCTION__, __LINE__, (x), (f), (a))
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
|
|
@ -196,24 +188,34 @@ int netconf_data_not_unique(cbuf *cb, cxobj *x, cvec *cvk);
|
|||
int netconf_data_not_unique_xml(cxobj **xret, cxobj *x, cvec *cvk);
|
||||
int netconf_minmax_elements_xml(cxobj **xret, cxobj *xp, char *name, int max);
|
||||
int netconf_trymerge(cxobj *x, yang_stmt *yspec, cxobj **xret);
|
||||
int netconf_module_features(clicon_handle h);
|
||||
int netconf_module_load(clicon_handle h);
|
||||
int netconf_module_features(clixon_handle h);
|
||||
int netconf_module_load(clixon_handle h);
|
||||
char *netconf_db_find(cxobj *xn, char *name);
|
||||
int netconf_err2cb(clicon_handle h, cxobj *xerr, cbuf *cberr);
|
||||
const netconf_content netconf_content_str2int(char *str);
|
||||
const char *netconf_content_int2str(netconf_content nr);
|
||||
int netconf_capabilites(clicon_handle h, cbuf *cb);
|
||||
int netconf_hello_server(clicon_handle h, cbuf *cb, uint32_t session_id);
|
||||
int netconf_hello_req(clicon_handle h, cbuf *cb);
|
||||
int clixon_netconf_error_fn(clicon_handle h, const char *fn, const int line, cxobj *xerr, const char *fmt, const char *arg);
|
||||
int netconf_capabilites(clixon_handle h, cbuf *cb);
|
||||
int netconf_hello_server(clixon_handle h, cbuf *cb, uint32_t session_id);
|
||||
int netconf_hello_req(clixon_handle h, cbuf *cb);
|
||||
int clixon_netconf_internal_error(cxobj *xerr, char *msg, char *arg);
|
||||
int netconf_parse_uint32(char *name, char *valstr, char *defaultstr, uint32_t defaultval, cbuf *cbret, uint32_t *value);
|
||||
int netconf_parse_uint32_xml(char *name, char *valstr, char *defaultstr, uint32_t defaultval, cxobj **xerr, uint32_t *value);
|
||||
int netconf_message_id_next(clicon_handle h);
|
||||
int netconf_message_id_next(clixon_handle h);
|
||||
int netconf_framing_preamble(netconf_framing_type framing, cbuf *cb);
|
||||
int netconf_framing_postamble(netconf_framing_type framing, cbuf *cb);
|
||||
int netconf_output(int s, cbuf *xf, char *msg);
|
||||
int netconf_output_encap(netconf_framing_type framing, cbuf *cb);
|
||||
int netconf_input_chunked_framing(char ch, int *state, size_t *size);
|
||||
|
||||
/* Netconf error handling */
|
||||
#define clixon_err_netconf(h,c,s,x,_fmt, args...) clixon_err_netconf_fn((h), __FUNCTION__, __LINE__, (c), (s), (x), _fmt , ##args)
|
||||
|
||||
int netconf_err2cb(clixon_handle h, cxobj *xerr, cbuf *cberr);
|
||||
int clixon_err_netconf_fn(clixon_handle h, const char *fn, const int line, int category,
|
||||
int suberr, cxobj *xerr, const char *format, ...) __attribute__ ((format (printf, 7, 8)));;
|
||||
|
||||
#if 1 /* COMPAT_6_5 */
|
||||
/* doesnt work if arg != NULL */
|
||||
#define clixon_netconf_error(h, x, f, a) clixon_err_netconf_fn((h), __FUNCTION__, __LINE__, OE_XML, 0,(x), (f) , NULL)
|
||||
#endif
|
||||
|
||||
#endif /* _CLIXON_NETCONF_LIB_H */
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue