[PATCH] osmo-bts[master]: DTX: fix SID logic

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

Max gerrit-no-reply at lists.osmocom.org
Fri Sep 16 17:51:53 UTC 2016


Review at  https://gerrit.osmocom.org/858

DTX: fix SID logic

Previously receiving SID via RTP always caused it's transmission to L1
regardless of the time which might have resulted in excess traffic. Fix
this by only saving SID data and transmitting it later on as necessary
according to 3GPP TS 26.093 A.5.1.1.

Change-Id: Ifcdc5c60d0238b704a94f6778d4e00f2b087b090
Fixes: OS#1801
---
M src/osmo-bts-litecell15/l1_if.c
M src/osmo-bts-litecell15/tch.c
M src/osmo-bts-sysmo/l1_if.c
M src/osmo-bts-sysmo/tch.c
4 files changed, 24 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/58/858/1

diff --git a/src/osmo-bts-litecell15/l1_if.c b/src/osmo-bts-litecell15/l1_if.c
index da63e00..4c5a535 100644
--- a/src/osmo-bts-litecell15/l1_if.c
+++ b/src/osmo-bts-litecell15/l1_if.c
@@ -466,10 +466,13 @@
 		if (!nmsg)
 			return -ENOMEM;
 		l1p = msgb_l1prim(nmsg);
-		l1if_tch_encode(lchan,
-			l1p->u.phDataReq.msgUnitParam.u8Buffer,
-			&l1p->u.phDataReq.msgUnitParam.u8Size,
-			msg->data, msg->len, u32Fn);
+		if (l1if_tch_encode(lchan,
+				    l1p->u.phDataReq.msgUnitParam.u8Buffer,
+				    &l1p->u.phDataReq.msgUnitParam.u8Size,
+				    msg->data, msg->len, u32Fn) < 0) {
+			msgb_free(nmsg);
+			nmsg = NULL;
+		}
 	}
 
 	/* no message/data, we generate an empty traffic msg */
diff --git a/src/osmo-bts-litecell15/tch.c b/src/osmo-bts-litecell15/tch.c
index 4fdf6a6..0daacf9 100644
--- a/src/osmo-bts-litecell15/tch.c
+++ b/src/osmo-bts-litecell15/tch.c
@@ -270,8 +270,10 @@
 	}
 #endif
 
-	if (ft == AMR_SID)
+	if (ft == AMR_SID) {
 		save_last_sid(lchan, l1_payload, payload_len, fn, sti);
+		return -EALREADY;
+	}
 
 	return payload_len+1;
 }
@@ -324,6 +326,8 @@
 		*payload_type = GsmL1_TchPlType_Amr;
 		rc = rtppayload_to_l1_amr(l1_payload, rtp_pl,
 					  rtp_pl_len, lchan, fn);
+		if (-EALREADY == rc)
+			return rc;
 		break;
 	default:
 		/* we don't support CSD modes */
diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c
index 7280c1d..cb7f9a5 100644
--- a/src/osmo-bts-sysmo/l1_if.c
+++ b/src/osmo-bts-sysmo/l1_if.c
@@ -459,10 +459,13 @@
 		if (!nmsg)
 			return -ENOMEM;
 		l1p = msgb_l1prim(nmsg);
-		l1if_tch_encode(lchan,
-			l1p->u.phDataReq.msgUnitParam.u8Buffer,
-			&l1p->u.phDataReq.msgUnitParam.u8Size,
-			msg->data, msg->len, u32Fn);
+		if (l1if_tch_encode(lchan,
+				    l1p->u.phDataReq.msgUnitParam.u8Buffer,
+				    &l1p->u.phDataReq.msgUnitParam.u8Size,
+				    msg->data, msg->len, u32Fn) < 0) {
+			msgb_free(nmsg);
+			nmsg = NULL;
+		}
 	}
 
 	/* no message/data, we generate an empty traffic msg */
diff --git a/src/osmo-bts-sysmo/tch.c b/src/osmo-bts-sysmo/tch.c
index ee72e53..4c1a3f7 100644
--- a/src/osmo-bts-sysmo/tch.c
+++ b/src/osmo-bts-sysmo/tch.c
@@ -367,8 +367,10 @@
 	}
 #endif
 
-	if (ft == AMR_SID)
+	if (ft == AMR_SID) {
 		save_last_sid(lchan, l1_payload, payload_len, fn, sti);
+		return -EALREADY;
+	}
 
 	return payload_len+1;
 }
@@ -423,6 +425,8 @@
 		*payload_type = GsmL1_TchPlType_Amr;
 		rc = rtppayload_to_l1_amr(l1_payload, rtp_pl,
 					  rtp_pl_len, lchan, fn);
+		if (-EALREADY == rc)
+			return rc;
 		break;
 	default:
 		/* we don't support CSD modes */

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifcdc5c60d0238b704a94f6778d4e00f2b087b090
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>



More information about the gerrit-log mailing list