diff options
| author | Christian Hopps <chopps@labn.net> | 2023-05-01 15:24:29 -0400 | 
|---|---|---|
| committer | Christian Hopps <chopps@labn.net> | 2023-05-28 05:13:22 -0400 | 
| commit | 6dad9b53e7660c19d4ecd5a5f30cd10ede4b129c (patch) | |
| tree | d87769138ce2b126787306de0554a3a5fcd156eb /mgmtd | |
| parent | 99564edc43ecaf099ede84f7fa84b104f2b950b1 (diff) | |
mgmtd: convert BE/FE adapter to use allocated connections
Signed-off-by: Christian Hopps <chopps@labn.net>
Diffstat (limited to 'mgmtd')
| -rw-r--r-- | mgmtd/mgmt_be_adapter.c | 40 | ||||
| -rw-r--r-- | mgmtd/mgmt_be_adapter.h | 3 | ||||
| -rw-r--r-- | mgmtd/mgmt_fe_adapter.c | 44 | ||||
| -rw-r--r-- | mgmtd/mgmt_fe_adapter.h | 2 | 
4 files changed, 42 insertions, 47 deletions
diff --git a/mgmtd/mgmt_be_adapter.c b/mgmtd/mgmt_be_adapter.c index 3a67733ce8..89a2d85689 100644 --- a/mgmtd/mgmt_be_adapter.c +++ b/mgmtd/mgmt_be_adapter.c @@ -117,7 +117,7 @@ mgmt_be_find_adapter_by_fd(int conn_fd)  	struct mgmt_be_client_adapter *adapter;  	FOREACH_ADAPTER_IN_LIST (adapter) { -		if (adapter->conn.fd == conn_fd) +		if (adapter->conn->fd == conn_fd)  			return adapter;  	} @@ -314,8 +314,7 @@ static int mgmt_be_eval_regexp_match(const char *xpath_regexp,  static int mgmt_be_adapter_notify_disconnect(struct msg_conn *conn)  { -	struct mgmt_be_client_adapter *adapter = -		container_of(conn, struct mgmt_be_client_adapter, conn); +	struct mgmt_be_client_adapter *adapter = conn->user;  	/*  	 * Notify about disconnect for appropriate cleanup @@ -348,8 +347,10 @@ mgmt_be_adapter_cleanup_old_conn(struct mgmt_be_client_adapter *adapter)  			 */  			MGMTD_BE_ADAPTER_DBG(  				"Client '%s' (FD:%d) seems to have reconnected. Removing old connection (FD:%d)!", -				adapter->name, adapter->conn.fd, old->conn.fd); -			msg_conn_disconnect(&old->conn, false); +				adapter->name, adapter->conn->fd, +				old->conn->fd); +			/* this will/should delete old */ +			msg_conn_disconnect(old->conn, false);  		}  	}  } @@ -381,7 +382,8 @@ mgmt_be_adapter_handle_msg(struct mgmt_be_client_adapter *adapter,  				MGMTD_BE_ADAPTER_ERR(  					"Unable to resolve adapter '%s' to a valid ID. Disconnecting!",  					adapter->name); -				msg_conn_disconnect(&adapter->conn, false); +				/* this will/should delete old */ +				msg_conn_disconnect(adapter->conn, false);  				zlog_err("XXX different from original code");  				break;  			} @@ -487,7 +489,7 @@ static int mgmt_be_adapter_send_msg(struct mgmt_be_client_adapter *adapter,  				    Mgmtd__BeMessage *be_msg)  {  	return msg_conn_send_msg( -		&adapter->conn, MGMT_MSG_VERSION_PROTOBUF, be_msg, +		adapter->conn, MGMT_MSG_VERSION_PROTOBUF, be_msg,  		mgmtd__be_message__get_packed_size(be_msg),  		(size_t(*)(void *, void *))mgmtd__be_message__pack);  } @@ -564,11 +566,9 @@ static int mgmt_be_send_cfgapply_req(struct mgmt_be_client_adapter *adapter,  static void mgmt_be_adapter_process_msg(uint8_t version, uint8_t *data,  					size_t len, struct msg_conn *conn)  { -	struct mgmt_be_client_adapter *adapter; -	Mgmtd__BeMessage *be_msg; +	struct mgmt_be_client_adapter *adapter = conn->user; +	Mgmtd__BeMessage *be_msg = mgmtd__be_message__unpack(NULL, len, data); -	adapter = container_of(conn, struct mgmt_be_client_adapter, conn); -	be_msg = mgmtd__be_message__unpack(NULL, len, data);  	if (!be_msg) {  		MGMTD_BE_ADAPTER_DBG(  			"Failed to decode %zu bytes for adapter: %s", len, @@ -616,7 +616,7 @@ static void mgmt_be_adapter_conn_init(struct event *thread)  	struct mgmt_be_client_adapter *adapter;  	adapter = (struct mgmt_be_client_adapter *)EVENT_ARG(thread); -	assert(adapter && adapter->conn.fd >= 0); +	assert(adapter && adapter->conn->fd >= 0);  	/*  	 * Check first if the current session can run a CONFIG @@ -638,7 +638,7 @@ static void mgmt_be_adapter_conn_init(struct event *thread)  	 */  	if (mgmt_txn_notify_be_adapter_conn(adapter, true) != 0) {  		zlog_err("XXX notify be adapter conn fail"); -		msg_conn_disconnect(&adapter->conn, false); +		msg_conn_disconnect(adapter->conn, false);  		adapter = NULL;  	}  } @@ -667,7 +667,7 @@ extern void mgmt_be_adapter_unlock(struct mgmt_be_client_adapter **adapter)  	if (!--a->refcount) {  		mgmt_be_adapters_del(&mgmt_be_adapters, a);  		EVENT_OFF(a->conn_init_ev); -		msg_conn_cleanup(&a->conn); +		msg_server_conn_delete(a->conn);  		XFREE(MTYPE_MGMTD_BE_ADPATER, a);  	} @@ -725,7 +725,7 @@ struct msg_conn *mgmt_be_create_adapter(int conn_fd, union sockunion *from)  		mgmt_be_adapters_add_tail(&mgmt_be_adapters, adapter);  		RB_INIT(nb_config_cbs, &adapter->cfg_chgs); -		msg_conn_accept_init(&adapter->conn, mgmt_loop, conn_fd, +		msg_conn_accept_init(adapter->conn, mgmt_loop, conn_fd,  				     mgmt_be_adapter_notify_disconnect,  				     mgmt_be_adapter_process_msg,  				     MGMTD_BE_MAX_NUM_MSG_PROC, @@ -878,17 +878,17 @@ void mgmt_be_adapter_status_write(struct vty *vty)  	FOREACH_ADAPTER_IN_LIST (adapter) {  		vty_out(vty, "  Client: \t\t\t%s\n", adapter->name); -		vty_out(vty, "    Conn-FD: \t\t\t%d\n", adapter->conn.fd); +		vty_out(vty, "    Conn-FD: \t\t\t%d\n", adapter->conn->fd);  		vty_out(vty, "    Client-Id: \t\t\t%d\n", adapter->id);  		vty_out(vty, "    Ref-Count: \t\t\t%u\n", adapter->refcount);  		vty_out(vty, "    Msg-Recvd: \t\t\t%" PRIu64 "\n", -			adapter->mstate.nrxm); +			adapter->conn->mstate.nrxm);  		vty_out(vty, "    Bytes-Recvd: \t\t%" PRIu64 "\n", -			adapter->mstate.nrxb); +			adapter->conn->mstate.nrxb);  		vty_out(vty, "    Msg-Sent: \t\t\t%" PRIu64 "\n", -			adapter->mstate.ntxm); +			adapter->conn->mstate.ntxm);  		vty_out(vty, "    Bytes-Sent: \t\t%" PRIu64 "\n", -			adapter->mstate.ntxb); +			adapter->conn->mstate.ntxb);  	}  	vty_out(vty, "  Total: %d\n",  		(int)mgmt_be_adapters_count(&mgmt_be_adapters)); diff --git a/mgmtd/mgmt_be_adapter.h b/mgmtd/mgmt_be_adapter.h index aebb0533d1..65e5b3f6f2 100644 --- a/mgmtd/mgmt_be_adapter.h +++ b/mgmtd/mgmt_be_adapter.h @@ -42,8 +42,7 @@ PREDECL_LIST(mgmt_be_adapters);  PREDECL_LIST(mgmt_txn_badapters);  struct mgmt_be_client_adapter { -	struct msg_conn conn; -	struct mgmt_msg_state mstate; +	struct msg_conn *conn;  	struct event *conn_init_ev; diff --git a/mgmtd/mgmt_fe_adapter.c b/mgmtd/mgmt_fe_adapter.c index fb65c1168e..b55bee0e97 100644 --- a/mgmtd/mgmt_fe_adapter.c +++ b/mgmtd/mgmt_fe_adapter.c @@ -351,7 +351,7 @@ static int mgmt_fe_adapter_send_msg(struct mgmt_fe_client_adapter *adapter,  				    Mgmtd__FeMessage *fe_msg)  {  	return msg_conn_send_msg( -		&adapter->conn, MGMT_MSG_VERSION_PROTOBUF, fe_msg, +		adapter->conn, MGMT_MSG_VERSION_PROTOBUF, fe_msg,  		mgmtd__fe_message__get_packed_size(fe_msg),  		(size_t(*)(void *, void *))mgmtd__fe_message__pack);  } @@ -625,7 +625,7 @@ mgmt_fe_find_adapter_by_fd(int conn_fd)  	struct mgmt_fe_client_adapter *adapter;  	FOREACH_ADAPTER_IN_LIST (adapter) { -		if (adapter->conn.fd == conn_fd) +		if (adapter->conn->fd == conn_fd)  			return adapter;  	} @@ -648,9 +648,7 @@ mgmt_fe_find_adapter_by_name(const char *name)  static int mgmt_fe_adapter_notify_disconnect(struct msg_conn *conn)  { -	struct mgmt_fe_client_adapter *adapter; - -	adapter = container_of(conn, struct mgmt_fe_client_adapter, conn); +	struct mgmt_fe_client_adapter *adapter = conn->user;  	/* TODO: notify about client disconnect for appropriate cleanup */  	mgmt_fe_cleanup_sessions(adapter); @@ -678,8 +676,9 @@ mgmt_fe_adapter_cleanup_old_conn(struct mgmt_fe_client_adapter *adapter)  			 */  			MGMTD_FE_ADAPTER_DBG(  				"Client '%s' (FD:%d) seems to have reconnected. Removing old connection (FD:%d)!", -				adapter->name, adapter->conn.fd, old->conn.fd); -			msg_conn_disconnect(&old->conn, false); +				adapter->name, adapter->conn->fd, +				old->conn->fd); +			msg_conn_disconnect(old->conn, false);  		}  	}  } @@ -1366,11 +1365,9 @@ mgmt_fe_adapter_handle_msg(struct mgmt_fe_client_adapter *adapter,  static void mgmt_fe_adapter_process_msg(uint8_t version, uint8_t *data,  					size_t len, struct msg_conn *conn)  { -	struct mgmt_fe_client_adapter *adapter; -	Mgmtd__FeMessage *fe_msg; +	struct mgmt_fe_client_adapter *adapter = conn->user; +	Mgmtd__FeMessage *fe_msg = mgmtd__fe_message__unpack(NULL, len, data); -	adapter = container_of(conn, struct mgmt_fe_client_adapter, conn); -	fe_msg = mgmtd__fe_message__unpack(NULL, len, data);  	if (!fe_msg) {  		MGMTD_FE_ADAPTER_DBG(  			"Failed to decode %zu bytes for adapter: %s", len, @@ -1397,8 +1394,8 @@ mgmt_fe_adapter_unlock(struct mgmt_fe_client_adapter **adapter)  	if (!--a->refcount) {  		mgmt_fe_adapters_del(&mgmt_fe_adapters, a); -		msg_conn_cleanup(&a->conn); -		XFREE(MTYPE_MGMTD_BE_ADPATER, a); +		msg_server_conn_delete(a->conn); +		XFREE(MTYPE_MGMTD_FE_ADPATER, a);  	}  	*adapter = NULL;  } @@ -1454,12 +1451,11 @@ struct msg_conn *mgmt_fe_create_adapter(int conn_fd, union sockunion *from)  		mgmt_fe_adapter_lock(adapter);  		mgmt_fe_adapters_add_tail(&mgmt_fe_adapters, adapter); -		msg_conn_accept_init(&adapter->conn, mgmt_loop, conn_fd, -				     mgmt_fe_adapter_notify_disconnect, -				     mgmt_fe_adapter_process_msg, -				     MGMTD_FE_MAX_NUM_MSG_PROC, -				     MGMTD_FE_MAX_NUM_MSG_WRITE, -				     MGMTD_FE_MSG_MAX_LEN, "FE-adapter"); +		adapter->conn = msg_server_conn_create( +			mgmt_loop, conn_fd, mgmt_fe_adapter_notify_disconnect, +			mgmt_fe_adapter_process_msg, MGMTD_FE_MAX_NUM_MSG_PROC, +			MGMTD_FE_MAX_NUM_MSG_WRITE, MGMTD_FE_MSG_MAX_LEN, +			adapter, "FE-adapter");  		adapter->setcfg_stats.min_tm = ULONG_MAX;  		adapter->cmt_stats.min_tm = ULONG_MAX; @@ -1702,7 +1698,7 @@ void mgmt_fe_adapter_status_write(struct vty *vty, bool detail)  	FOREACH_ADAPTER_IN_LIST (adapter) {  		vty_out(vty, "  Client: \t\t\t\t%s\n", adapter->name); -		vty_out(vty, "    Conn-FD: \t\t\t\t%d\n", adapter->conn.fd); +		vty_out(vty, "    Conn-FD: \t\t\t\t%d\n", adapter->conn->fd);  		if (detail) {  			mgmt_fe_adapter_setcfg_stats_write(vty, adapter);  			mgmt_fe_adapter_cmt_stats_write(vty, adapter); @@ -1736,13 +1732,13 @@ void mgmt_fe_adapter_status_write(struct vty *vty, bool detail)  		vty_out(vty, "    Total-Sessions: \t\t\t%d\n",  			(int)mgmt_fe_sessions_count(&adapter->fe_sessions));  		vty_out(vty, "    Msg-Recvd: \t\t\t\t%" PRIu64 "\n", -			adapter->conn.mstate.nrxm); +			adapter->conn->mstate.nrxm);  		vty_out(vty, "    Bytes-Recvd: \t\t\t%" PRIu64 "\n", -			adapter->conn.mstate.nrxb); +			adapter->conn->mstate.nrxb);  		vty_out(vty, "    Msg-Sent: \t\t\t\t%" PRIu64 "\n", -			adapter->conn.mstate.ntxm); +			adapter->conn->mstate.ntxm);  		vty_out(vty, "    Bytes-Sent: \t\t\t%" PRIu64 "\n", -			adapter->conn.mstate.ntxb); +			adapter->conn->mstate.ntxb);  	}  	vty_out(vty, "  Total: %d\n",  		(int)mgmt_fe_adapters_count(&mgmt_fe_adapters)); diff --git a/mgmtd/mgmt_fe_adapter.h b/mgmtd/mgmt_fe_adapter.h index 8d53389a66..fef205f36a 100644 --- a/mgmtd/mgmt_fe_adapter.h +++ b/mgmtd/mgmt_fe_adapter.h @@ -55,7 +55,7 @@ PREDECL_LIST(mgmt_fe_sessions);  PREDECL_LIST(mgmt_fe_adapters);  struct mgmt_fe_client_adapter { -	struct msg_conn conn; +	struct msg_conn *conn;  	char name[MGMTD_CLIENT_NAME_MAX_LEN];  	/* List of sessions created and being maintained for this client. */  | 
