Change in osmo-bsc[master]: cosmetic: gscon: undup code: add common assignment_failed()

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/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Thu May 24 16:59:46 UTC 2018


Neels Hofmeyr has uploaded this change for review. ( https://gerrit.osmocom.org/9280


Change subject: cosmetic: gscon: undup code: add common assignment_failed()
......................................................................

cosmetic: gscon: undup code: add common assignment_failed()

Call one common function to signal Assignment Failure and transition back to
ST_ACTIVE.

Change-Id: I1ce10a3ead286cdb6ad529fc293b6cecd151cc9a
---
M src/libbsc/bsc_subscr_conn_fsm.c
1 file changed, 33 insertions(+), 36 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/80/9280/1

diff --git a/src/libbsc/bsc_subscr_conn_fsm.c b/src/libbsc/bsc_subscr_conn_fsm.c
index 3e0ccc0..7617dba 100644
--- a/src/libbsc/bsc_subscr_conn_fsm.c
+++ b/src/libbsc/bsc_subscr_conn_fsm.c
@@ -386,6 +386,22 @@
 	}
 }
 
+#define assignment_failed(fi, cause) \
+	_assignment_failed(fi, cause, __FILE__, __LINE__)
+static void _assignment_failed(struct osmo_fsm_inst *fi, enum gsm0808_cause cause,
+			       const char *file, int line)
+{
+	struct gsm_subscriber_connection *conn = fi->priv;
+	struct msgb *resp = NULL;
+
+	LOGPFSMLSRC(fi, LOGL_ERROR, file, line, "Assignment failed: %s\n", gsm0808_cause_name(cause));
+
+	resp = gsm0808_create_assignment_failure(cause, NULL);
+	sigtran_send(conn, resp, fi);
+	if (fi->state != ST_ACTIVE)
+		osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+}
+
 /* We're on an active subscriber connection, passing DTAP back and forth */
 static void gscon_fsm_active(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 {
@@ -424,8 +440,7 @@
 			    mgcp_conn_create(conn->network->mgw.client, fi, GSCON_EV_MGW_FAIL_BTS,
 					     GSCON_EV_MGW_CRCX_RESP_BTS, &conn_peer);
 			if (!conn->user_plane.fi_bts) {
-				resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-				sigtran_send(conn, resp, fi);
+				assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 				return;
 			}
 			break;
@@ -443,8 +458,7 @@
 				send_ass_compl(conn->lchan, fi, false);
 				return;
 			} else if (rc != 0) {
-				resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-				sigtran_send(conn, resp, fi);
+				assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 				return;
 			}
 
@@ -459,8 +473,7 @@
 				 conn->user_plane.full_rate);
 
 			/* The requested channel mode is not supported  */
-			resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_NOT_SUPP, NULL);
-			sigtran_send(conn, resp, fi);
+			assignment_failed(fi, GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_NOT_SUPP);
 			break;
 		}
 		break;
@@ -504,7 +517,6 @@
 {
 	struct gsm_subscriber_connection *conn = fi->priv;
 	struct mgcp_conn_peer *conn_peer = NULL;
-	struct msgb *resp = NULL;
 	int rc;
 
 	switch (event) {
@@ -514,9 +526,7 @@
 		/* Check if the MGW has assigned an enpoint to us, otherwise we
 		 * can not proceed. */
 		if (strlen(conn_peer->endpoint) <= 0) {
-			resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-			sigtran_send(conn, resp, fi);
-			osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+			assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 			return;
 		}
 
@@ -535,9 +545,7 @@
 		conn->user_plane.rtp_ip = osmo_ntohl(inet_addr(conn_peer->addr));
 		rc = gsm0808_assign_req(conn, conn->user_plane.chan_mode, conn->user_plane.full_rate);
 		if (rc != 0) {
-			resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_RQSTED_SPEECH_VERSION_UNAVAILABLE, NULL);
-			sigtran_send(conn, resp, fi);
-			osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+			assignment_failed(fi, GSM0808_CAUSE_RQSTED_SPEECH_VERSION_UNAVAILABLE);
 			return;
 		}
 
@@ -565,7 +573,6 @@
 	struct gsm_lchan *lchan = conn->lchan;
 	struct mgcp_conn_peer conn_peer;
 	struct in_addr addr;
-	struct msgb *resp = NULL;
 	int rc;
 
 	switch (event) {
@@ -590,9 +597,7 @@
 			osmo_fsm_inst_state_chg(fi, ST_WAIT_MDCX_BTS, MGCP_MGW_TIMEOUT, MGCP_MGW_TIMEOUT_TIMER_NR);
 			rc = mgcp_conn_modify(conn->user_plane.fi_bts, GSCON_EV_MGW_MDCX_RESP_BTS, &conn_peer);
 			if (rc != 0) {
-				resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-				sigtran_send(conn, resp, fi);
-				osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+				assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 				return;
 			}
 			break;
@@ -614,9 +619,12 @@
 
 		break;
 	case GSCON_EV_RR_ASS_FAIL:
-		resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_RQSTED_TERRESTRIAL_RESOURCE_UNAVAILABLE, NULL);
-		sigtran_send(conn, resp, fi);
-		osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+		{
+			enum gsm0808_cause cause = GSM0808_CAUSE_RQSTED_TERRESTRIAL_RESOURCE_UNAVAILABLE;
+			if (data)
+				cause = *((enum gsm0808_cause*)data);
+			assignment_failed(fi, cause);
+		}
 		break;
 	case GSCON_EV_MO_DTAP:
 		forward_dtap(conn, (struct msgb *)data, fi);
@@ -639,7 +647,6 @@
 	struct gsm_subscriber_connection *conn = fi->priv;
 	struct mgcp_conn_peer conn_peer;
 	struct sockaddr_in *sin = NULL;
-	struct msgb *resp = NULL;
 
 	switch (event) {
 	case GSCON_EV_MGW_MDCX_RESP_BTS:
@@ -662,9 +669,7 @@
 		    mgcp_conn_create(conn->network->mgw.client, fi, GSCON_EV_MGW_FAIL_MSC, GSCON_EV_MGW_CRCX_RESP_MSC,
 				     &conn_peer);
 		if (!conn->user_plane.fi_bts) {
-			resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-			sigtran_send(conn, resp, fi);
-			osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+			assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 			return;
 		}
 
@@ -964,11 +969,8 @@
 		 * with an assignment failure */
 		OSMO_ASSERT(fi->state != ST_INIT && fi->state != ST_WAIT_CC);
 		if (fi->state == ST_WAIT_CRCX_BTS || fi->state == ST_WAIT_ASS_CMPL || fi->state == ST_WAIT_MDCX_BTS
-		    || fi->state == ST_WAIT_CRCX_MSC) {
-			resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-			sigtran_send(conn, resp, fi);
-			osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
-		}
+		    || fi->state == ST_WAIT_CRCX_MSC)
+			assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 		break;
 	case GSCON_EV_A_CLEAR_CMD:
 		/* MSC tells us to cleanly shut down */
@@ -1067,7 +1069,6 @@
 static int gscon_timer_cb(struct osmo_fsm_inst *fi)
 {
 	struct gsm_subscriber_connection *conn = fi->priv;
-	struct msgb *resp = NULL;
 
 	switch (fi->T) {
 	case 993210:
@@ -1083,14 +1084,10 @@
 		osmo_fsm_inst_term(fi, OSMO_FSM_TERM_REGULAR, NULL);
 		break;
 	case GSM0808_T10_TIMER_NR:	/* Assignment Failed */
-		resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_RADIO_INTERFACE_FAILURE, NULL);
-		sigtran_send(conn, resp, fi);
-		osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+		assignment_failed(fi, GSM0808_CAUSE_RADIO_INTERFACE_FAILURE);
 		break;
 	case MGCP_MGW_TIMEOUT_TIMER_NR:	/* Assignment failed (no response from MGW) */
-		resp = gsm0808_create_assignment_failure(GSM0808_CAUSE_EQUIPMENT_FAILURE, NULL);
-		sigtran_send(conn, resp, fi);
-		osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);
+		assignment_failed(fi, GSM0808_CAUSE_EQUIPMENT_FAILURE);
 		break;
 	case MGCP_MGW_HO_TIMEOUT_TIMER_NR:	/* Handover failed (no response from MGW) */
 		osmo_fsm_inst_state_chg(fi, ST_ACTIVE, 0, 0);

-- 
To view, visit https://gerrit.osmocom.org/9280
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1ce10a3ead286cdb6ad529fc293b6cecd151cc9a
Gerrit-Change-Number: 9280
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180524/3128de7e/attachment.htm>


More information about the gerrit-log mailing list