diff options
| author | Christian Hopps <chopps@labn.net> | 2024-01-30 03:05:18 -0500 | 
|---|---|---|
| committer | Christian Hopps <chopps@labn.net> | 2024-01-30 04:57:10 -0500 | 
| commit | 25bb8b203cdbf3b40f938add7352666146183c03 (patch) | |
| tree | 90ba100c73a7f97401bd9362daa9a0a86a9f957c /mgmtd/mgmt_fe_adapter.c | |
| parent | cd869ebcf2ec13cf50071d2826d0aa1b309a30e9 (diff) | |
lib: mgmtd: add YANG notification support
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'mgmtd/mgmt_fe_adapter.c')
| -rw-r--r-- | mgmtd/mgmt_fe_adapter.c | 40 | 
1 files changed, 28 insertions, 12 deletions
diff --git a/mgmtd/mgmt_fe_adapter.c b/mgmtd/mgmt_fe_adapter.c index a99d92d2b6..95f925d307 100644 --- a/mgmtd/mgmt_fe_adapter.c +++ b/mgmtd/mgmt_fe_adapter.c @@ -1087,11 +1087,11 @@ static int fe_adapter_send_tree_data(struct mgmt_fe_session_ctx *session,  {  	struct mgmt_msg_tree_data *msg;  	struct lyd_node *empty = NULL; -	uint8_t *buf = NULL; +	uint8_t **darrp = NULL;  	int ret = 0; -	darr_append_n(buf, sizeof(*msg)); -	msg = (typeof(msg))buf; +	msg = mgmt_msg_native_alloc_msg(struct mgmt_msg_tree_data, 0, +					MTYPE_MSG_NATIVE_TREE_DATA);  	msg->refer_id = session->session_id;  	msg->req_id = req_id;  	msg->code = MGMT_MSG_CODE_TREE_DATA; @@ -1103,13 +1103,10 @@ static int fe_adapter_send_tree_data(struct mgmt_fe_session_ctx *session,  		tree = empty;  	} -	ret = yang_print_tree_append(&buf, tree, result_type, +	darrp = mgmt_msg_native_get_darrp(msg); +	ret = yang_print_tree_append(darrp, tree, result_type,  				     (LYD_PRINT_WD_EXPLICIT |  				      LYD_PRINT_WITHSIBLINGS)); -	/* buf may have been reallocated and moved */ -	msg = (typeof(msg))buf; -	(void)msg; /* suppress clang-SA unused warning on safety code */ -  	if (ret != LY_SUCCESS) {  		MGMTD_FE_ADAPTER_ERR("Error building get-tree result for client %s session-id %" PRIu64  				     " req-id %" PRIu64 @@ -1121,15 +1118,17 @@ static int fe_adapter_send_tree_data(struct mgmt_fe_session_ctx *session,  	MGMTD_FE_ADAPTER_DBG("Sending get-tree result from adapter %s to session-id %" PRIu64  			     " req-id %" PRIu64 " scok %d result type %u len %u", -			     session->adapter->name, session->session_id, req_id, -			     short_circuit_ok, result_type, darr_len(buf)); +			     session->adapter->name, session->session_id, +			     req_id, short_circuit_ok, result_type, +			     mgmt_msg_native_get_msg_len(msg)); -	ret = fe_adapter_send_native_msg(session->adapter, buf, darr_len(buf), +	ret = fe_adapter_send_native_msg(session->adapter, msg, +					 mgmt_msg_native_get_msg_len(msg),  					 short_circuit_ok);  done:  	if (empty)  		yang_dnode_free(empty); -	darr_free(buf); +	mgmt_msg_native_free_msg(msg);  	return ret;  } @@ -1286,6 +1285,23 @@ static void mgmt_fe_adapter_process_msg(uint8_t version, uint8_t *data,  	mgmtd__fe_message__free_unpacked(fe_msg, NULL);  } +void mgmt_fe_adapter_send_notify(struct mgmt_msg_notify_data *msg, size_t msglen) +{ +	struct mgmt_fe_client_adapter *adapter; +	struct mgmt_fe_session_ctx *session; + +	assert(msg->refer_id == 0); + +	FOREACH_ADAPTER_IN_LIST (adapter) { +		FOREACH_SESSION_IN_LIST (adapter, session) { +			msg->refer_id = session->session_id; +			(void)fe_adapter_send_native_msg(adapter, msg, msglen, +							 false); +		} +	} +	msg->refer_id = 0; +} +  void mgmt_fe_adapter_lock(struct mgmt_fe_client_adapter *adapter)  {  	adapter->refcount++;  | 
