mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
Merge pull request #15946 from LabNConsulting/chopps/rpc-cleanup
mgmtd RPC minor cleanup
This commit is contained in:
commit
8ac0a1d50e
|
@ -1443,20 +1443,14 @@ static void fe_adapter_handle_rpc(struct mgmt_fe_session_ctx *session,
|
|||
return;
|
||||
}
|
||||
|
||||
if (snode->nodetype == LYS_RPC)
|
||||
clients =
|
||||
mgmt_be_interested_clients(xpath,
|
||||
MGMT_BE_XPATH_SUBSCR_TYPE_RPC);
|
||||
else if (snode->nodetype == LYS_ACTION)
|
||||
clients =
|
||||
mgmt_be_interested_clients(xpath,
|
||||
MGMT_BE_XPATH_SUBSCR_TYPE_CFG);
|
||||
else {
|
||||
if (snode->nodetype != LYS_RPC && snode->nodetype != LYS_ACTION) {
|
||||
fe_adapter_send_error(session, req_id, false, -EINVAL,
|
||||
"Not an RPC or action path: %s", xpath);
|
||||
return;
|
||||
}
|
||||
|
||||
clients = mgmt_be_interested_clients(xpath,
|
||||
MGMT_BE_XPATH_SUBSCR_TYPE_RPC);
|
||||
if (!clients) {
|
||||
__dbg("No backends implement xpath: %s for txn-id: %" PRIu64
|
||||
" session-id: %" PRIu64,
|
||||
|
|
|
@ -2695,8 +2695,10 @@ int mgmt_txn_notify_error(struct mgmt_be_client_adapter *adapter,
|
|||
case MGMTD_TXN_PROC_RPC:
|
||||
rpc = txn_req->req.rpc;
|
||||
rpc->recv_clients |= (1u << id);
|
||||
rpc->errstr = XSTRDUP(MTYPE_MGMTD_ERR, errstr);
|
||||
|
||||
if (errstr) {
|
||||
XFREE(MTYPE_MGMTD_ERR, rpc->errstr);
|
||||
rpc->errstr = XSTRDUP(MTYPE_MGMTD_ERR, errstr);
|
||||
}
|
||||
/* check if done yet */
|
||||
if (rpc->recv_clients != rpc->sent_clients)
|
||||
return 0;
|
||||
|
@ -2798,8 +2800,9 @@ int mgmt_txn_notify_rpc_reply(struct mgmt_be_client_adapter *adapter,
|
|||
struct mgmt_txn_ctx *txn = mgmt_txn_id2ctx(txn_id);
|
||||
struct mgmt_txn_req *txn_req;
|
||||
struct txn_req_rpc *rpc;
|
||||
struct lyd_node *tree;
|
||||
size_t data_len = msg_len - sizeof(*reply_msg);
|
||||
LY_ERR err;
|
||||
LY_ERR err = LY_SUCCESS;
|
||||
|
||||
if (!txn) {
|
||||
__log_err("RPC reply from %s for a missing txn-id %" PRIu64,
|
||||
|
@ -2820,22 +2823,34 @@ int mgmt_txn_notify_rpc_reply(struct mgmt_be_client_adapter *adapter,
|
|||
|
||||
rpc = txn_req->req.rpc;
|
||||
|
||||
/* we don't expect more than one daemon to provide output for an RPC */
|
||||
if (!rpc->client_results && data_len > 0) {
|
||||
tree = NULL;
|
||||
if (data_len)
|
||||
err = yang_parse_rpc(rpc->xpath, reply_msg->result_type,
|
||||
reply_msg->data, true,
|
||||
&rpc->client_results);
|
||||
reply_msg->data, true, &tree);
|
||||
if (err) {
|
||||
__log_err("RPC reply from %s for txn-id %" PRIu64
|
||||
" req_id %" PRIu64 " error parsing result of type %u: %s",
|
||||
adapter->name, txn_id, req_id, reply_msg->result_type,
|
||||
ly_strerrcode(err));
|
||||
}
|
||||
if (!err && tree) {
|
||||
if (!rpc->client_results)
|
||||
rpc->client_results = tree;
|
||||
else
|
||||
err = lyd_merge_siblings(&rpc->client_results, tree,
|
||||
LYD_MERGE_DESTRUCT);
|
||||
if (err) {
|
||||
__log_err("RPC reply from %s for txn-id %" PRIu64
|
||||
" req_id %" PRIu64
|
||||
" error parsing result of type %u",
|
||||
" req_id %" PRIu64 " error merging result: %s",
|
||||
adapter->name, txn_id, req_id,
|
||||
reply_msg->result_type);
|
||||
rpc->errstr =
|
||||
XSTRDUP(MTYPE_MGMTD_ERR,
|
||||
"Cannot parse result from the backend");
|
||||
ly_strerrcode(err));
|
||||
}
|
||||
}
|
||||
if (err) {
|
||||
XFREE(MTYPE_MGMTD_ERR, rpc->errstr);
|
||||
rpc->errstr = XSTRDUP(MTYPE_MGMTD_ERR,
|
||||
"Cannot parse result from the backend");
|
||||
}
|
||||
|
||||
rpc->recv_clients |= (1u << id);
|
||||
|
||||
|
|
Loading…
Reference in a new issue