Change in osmo-remsim[master]: rspro_client_fsm: Make RSPRO transmit use FSM event

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Sat Dec 14 23:12:32 UTC 2019


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-remsim/+/16586 )

Change subject: rspro_client_fsm: Make RSPRO transmit use FSM event
......................................................................

rspro_client_fsm: Make RSPRO transmit use FSM event

This way we can easily guarantee that RSPRO transmit will only happen
in the fully established state, and that violations of that rule will
generate error logs by means of osmo_fsm core logging code.

Change-Id: I3c403507fa11c068d7503107857fbd5676ce135f
---
M src/rspro_client_fsm.c
M src/rspro_client_fsm.h
2 files changed, 22 insertions(+), 4 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/rspro_client_fsm.c b/src/rspro_client_fsm.c
index 9f2d7c0..91e91eb 100644
--- a/src/rspro_client_fsm.c
+++ b/src/rspro_client_fsm.c
@@ -77,6 +77,12 @@
 	return 0;
 }
 
+static int _server_conn_send_rspro(struct rspro_server_conn *srvc, RsproPDU_t *rspro)
+{
+	LOGPFSM(srvc->fi, "Tx RSPRO %s\n", rspro_msgt_name(rspro));
+	return ipa_client_conn_send_rspro(srvc->conn, rspro);
+}
+
 int server_conn_send_rspro(struct rspro_server_conn *srvc, RsproPDU_t *rspro)
 {
 	if (!rspro) {
@@ -84,8 +90,11 @@
 		osmo_log_backtrace(DMAIN, LOGL_ERROR);
 		return -EINVAL;
 	}
-	LOGPFSM(srvc->fi, "Tx RSPRO %s\n", rspro_msgt_name(rspro));
-	return ipa_client_conn_send_rspro(srvc->conn, rspro);
+	if (osmo_fsm_inst_dispatch(srvc->fi, SRVC_E_RSPRO_TX, rspro) < 0) {
+		ASN_STRUCT_FREE(asn_DEF_RsproPDU, rspro);
+		return -EPERM;
+	}
+	return 0;
 }
 
 enum server_conn_fsm_state {
@@ -105,6 +114,7 @@
 	OSMO_VALUE_STRING(SRVC_E_TCP_DOWN),
 	OSMO_VALUE_STRING(SRVC_E_KA_TIMEOUT),
 	OSMO_VALUE_STRING(SRVC_E_CLIENT_CONN_RES),
+	OSMO_VALUE_STRING(SRVC_E_RSPRO_TX),
 	{ 0, NULL }
 };
 
@@ -202,7 +212,7 @@
 	else
 		pdu = rspro_gen_ConnectBankReq(&srvc->own_comp_id, srvc->bankd.bank_id,
 					       srvc->bankd.num_slots);
-	server_conn_send_rspro(srvc, pdu);
+	_server_conn_send_rspro(srvc, pdu);
 }
 
 static void srvc_st_established(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -234,11 +244,18 @@
 
 static void srvc_st_connected(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 {
+	struct rspro_server_conn *srvc = (struct rspro_server_conn *) fi->priv;
+	RsproPDU_t *pdu = NULL;
+
 	switch (event) {
 	case SRVC_E_TCP_DOWN:
 	case SRVC_E_KA_TIMEOUT:
 		osmo_fsm_inst_state_chg(fi, SRVC_ST_REESTABLISH, T2_RECONNECT, 2);
 		break;
+	case SRVC_E_RSPRO_TX:
+		pdu = data;
+		_server_conn_send_rspro(srvc, pdu);
+		break;
 	default:
 		OSMO_ASSERT(0);
 	}
@@ -350,7 +367,7 @@
 	},
 	[SRVC_ST_CONNECTED] = {
 		.name = "CONNECTED",
-		.in_event_mask = S(SRVC_E_TCP_DOWN) | S(SRVC_E_KA_TIMEOUT),
+		.in_event_mask = S(SRVC_E_TCP_DOWN) | S(SRVC_E_KA_TIMEOUT) | S(SRVC_E_RSPRO_TX),
 		.out_state_mask = S(SRVC_ST_REESTABLISH),
 		.action = srvc_st_connected,
 	},
diff --git a/src/rspro_client_fsm.h b/src/rspro_client_fsm.h
index c11e260..7a998dc 100644
--- a/src/rspro_client_fsm.h
+++ b/src/rspro_client_fsm.h
@@ -10,6 +10,7 @@
 	SRVC_E_TCP_DOWN,
 	SRVC_E_KA_TIMEOUT,
 	SRVC_E_CLIENT_CONN_RES,
+	SRVC_E_RSPRO_TX		/* transmit a RSPRO PDU to the peer */
 };
 
 struct rspro_server_conn;

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-remsim/+/16586
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-remsim
Gerrit-Branch: master
Gerrit-Change-Id: I3c403507fa11c068d7503107857fbd5676ce135f
Gerrit-Change-Number: 16586
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191214/328e36df/attachment.htm>


More information about the gerrit-log mailing list