[MERGED] osmo-bsc[master]: bsc_api/GSCON: prevent unnecessary channel mode modifications

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

Harald Welte gerrit-no-reply at lists.osmocom.org
Fri May 4 09:25:42 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: bsc_api/GSCON: prevent unnecessary channel mode modifications
......................................................................


bsc_api/GSCON: prevent unnecessary channel mode modifications

gsm0808_assign_req() checks if the new channel mode is compatible
with the new mode. If it is, it does a gsm48_lchan_modify(), but
it does not actually check if the new mode is equal to the current
mode.

- skip when the channel is compatible and the new mode is equal to
  the old mode.

- send the ASSIGNMENT COMPLETE directly from ST_ACTIVE when no
  mode modify was necessary.

Change-Id: I86a2d52836c54d2dbd77441b182f757327ec7262
Related: OS#2936
---
M src/libbsc/bsc_api.c
M src/libbsc/bsc_subscr_conn_fsm.c
2 files changed, 19 insertions(+), 9 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/libbsc/bsc_api.c b/src/libbsc/bsc_api.c
index 142efef..19859cf 100644
--- a/src/libbsc/bsc_api.c
+++ b/src/libbsc/bsc_api.c
@@ -296,16 +296,17 @@
 	}
 }
 
-/**
- * Send a GSM08.08 Assignment Request. Right now this does not contain the
- * audio codec type or the allowed rates for the config. It is assumed that
- * this is for audio handling only. In case the current channel does not allow
- * the selected mode a new one will be allocated.
- *
- * TODO: Add multirate configuration, make it work for more than audio.
- */
+/*! Send a GSM08.08 Assignment Request. Right now this does not contain the
+ *  audio codec type or the allowed rates for the config. In case the current
+ *  channel does not allow the selected mode a new one will be allocated.
+ *  \param[out] conn related subscriber connection
+ *  \param[in] chan_mode mode of the channel (see enum gsm48_chan_mode)
+ *  \param[in] full_rate select full rate or half rate channel
+ *  \returns 0 on success, 1 when no operation is neccessary, -1 on failure */
 int gsm0808_assign_req(struct gsm_subscriber_connection *conn, int chan_mode, int full_rate)
 {
+	/* TODO: Add multirate configuration, make it work for more than audio. */
+
 	struct bsc_api *api;
 	api = conn->network->bsc_api;
 
@@ -313,6 +314,11 @@
 		if (handle_new_assignment(conn, chan_mode, full_rate) != 0)
 			goto error;
 	} else {
+		/* Check if the channel is already in the requested mode, if
+		 * yes, we skip unnecessary channel mode modify operations. */
+		if (conn->lchan->tch_mode == chan_mode)
+			return 1;
+
 		if (chan_mode == GSM48_CMODE_SPEECH_AMR)
 			handle_mr_config(conn, conn->lchan, full_rate);
 
diff --git a/src/libbsc/bsc_subscr_conn_fsm.c b/src/libbsc/bsc_subscr_conn_fsm.c
index b5e7e7d..7f53f1b 100644
--- a/src/libbsc/bsc_subscr_conn_fsm.c
+++ b/src/libbsc/bsc_subscr_conn_fsm.c
@@ -438,7 +438,11 @@
 			 * change back to ST_ACTIVE (here) immediately. */
 			rc = gsm0808_assign_req(conn, conn->user_plane.chan_mode,
 						conn->user_plane.full_rate);
-			if (rc != 0) {
+
+			if (rc == 1) {
+				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);
 				return;

-- 
To view, visit https://gerrit.osmocom.org/8019
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I86a2d52836c54d2dbd77441b182f757327ec7262
Gerrit-PatchSet: 3
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list