diff options
| author | Christian Hopps <chopps@labn.net> | 2024-09-17 02:27:03 -0400 | 
|---|---|---|
| committer | Christian Hopps <chopps@labn.net> | 2024-09-17 03:04:59 -0400 | 
| commit | 96db155acde43be7cd02d727285ed96e792e0454 (patch) | |
| tree | 279b8d1f29695af364d84fb0d56aedbafd7d83be /mgmtd | |
| parent | d57a6f761e56a44b4ac8b6b47fa54592127c1bb9 (diff) | |
lib: mgmtd: cleanup error value for native messaging
- Now if positive it's libyang LY_ERR, otherwise it's `-errno` value.
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'mgmtd')
| -rw-r--r-- | mgmtd/mgmt_fe_adapter.h | 4 | ||||
| -rw-r--r-- | mgmtd/mgmt_txn.c | 10 | ||||
| -rw-r--r-- | mgmtd/mgmt_txn.h | 28 | 
3 files changed, 36 insertions, 6 deletions
diff --git a/mgmtd/mgmt_fe_adapter.h b/mgmtd/mgmt_fe_adapter.h index 61d6cfae13..5a7dec3e6f 100644 --- a/mgmtd/mgmt_fe_adapter.h +++ b/mgmtd/mgmt_fe_adapter.h @@ -194,7 +194,7 @@ extern int mgmt_fe_adapter_send_rpc_reply(uint64_t session_id, uint64_t txn_id,   *     unlock: implicit-lock flag was set in the request   *     commit: implicit-commit flag was set in the request   *     xpath: the xpath of the data node that was created - *     error: the error code, zero for successful request + *     error: >0 LY_ERR, < 0 -errno   *     errstr: the error string, if error is non-zero   */  extern int mgmt_fe_adapter_send_edit_reply(uint64_t session_id, uint64_t txn_id, @@ -210,7 +210,7 @@ extern int mgmt_fe_adapter_send_edit_reply(uint64_t session_id, uint64_t txn_id,   * Args:   *	txn_id: the txn_id this error pertains to.   *	short_circuit_ok: True if OK to short-circuit the call. - *	error: An integer error value. + *      error: >0 LY_ERR, < 0 -errno   *	errfmt: An error format string (i.e., printfrr)   *      ...: args for use by the `errfmt` format string.   * diff --git a/mgmtd/mgmt_txn.c b/mgmtd/mgmt_txn.c index ed133243a1..53d9f5c3fa 100644 --- a/mgmtd/mgmt_txn.c +++ b/mgmtd/mgmt_txn.c @@ -1335,7 +1335,8 @@ static int txn_get_tree_data_done(struct mgmt_txn_ctx *txn,  			  " req_id %" PRIu64 " to requested type %u",  			  txn->txn_id, req_id, get_tree->result_type); -		(void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, ret, +		(void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, +						errno_from_nb_error(ret),  						"Error converting results of GETTREE");  	} @@ -1351,7 +1352,7 @@ static int txn_rpc_done(struct mgmt_txn_ctx *txn, struct mgmt_txn_req *txn_req)  	EVENT_OFF(txn->rpc_timeout);  	if (rpc->errstr) -		mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, -1, +		mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, -EINVAL,  					  rpc->errstr);  	else if (mgmt_fe_adapter_send_rpc_reply(txn->session_id, txn->txn_id,  						req_id, rpc->result_type, @@ -1360,7 +1361,8 @@ static int txn_rpc_done(struct mgmt_txn_ctx *txn, struct mgmt_txn_req *txn_req)  			  " req_id %" PRIu64 " to requested type %u",  			  txn->txn_id, req_id, rpc->result_type); -		(void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, -1, +		(void)mgmt_fe_adapter_txn_error(txn->txn_id, req_id, false, +						-EINVAL,  						"Error converting results of RPC");  	} @@ -2580,7 +2582,7 @@ int mgmt_txn_send_edit(uint64_t txn_id, uint64_t req_id,  reply:  	mgmt_fe_adapter_send_edit_reply(txn->session_id, txn->txn_id, req_id,  					unlock, commit, edit->xpath_created, -					ret ? -1 : 0, errstr); +					errno_from_nb_error(ret), errstr);  	XFREE(MTYPE_MGMTD_TXN_REQ, edit); diff --git a/mgmtd/mgmt_txn.h b/mgmtd/mgmt_txn.h index b6ca288675..37dadc0171 100644 --- a/mgmtd/mgmt_txn.h +++ b/mgmtd/mgmt_txn.h @@ -69,6 +69,34 @@ static inline const char *mgmt_txn_type2str(enum mgmt_txn_type type)  	return "Unknown";  } + +static inline int16_t errno_from_nb_error(enum nb_error ret) +{ +	switch (ret) { +	case NB_OK: +		return 0; +	case NB_ERR_NO_CHANGES: +		return -EALREADY; +	case NB_ERR_NOT_FOUND: +		return -ENOENT; +	case NB_ERR_EXISTS: +		return -EEXIST; +	case NB_ERR_LOCKED: +		return -EWOULDBLOCK; +	case NB_ERR_VALIDATION: +		return -EINVAL; +	case NB_ERR_RESOURCE: +		return -ENOMEM; +	case NB_ERR: +	case NB_ERR_INCONSISTENCY: +		return -EINVAL; +	case NB_YIELD: +	default: +		return -EINVAL; +	} +} + +  /* Initialise transaction module. */  extern int mgmt_txn_init(struct mgmt_master *cm, struct event_loop *tm);  | 
