[PATCH] osmo-pcu[master]: Fix Timing Advance handling

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
Mon Jul 25 09:25:14 UTC 2016


Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/547

to look at the new patch set (#3).

Fix Timing Advance handling

* initialize with invalid TA instead of making assumption that phone is
  located within 550 meters (TA=0)
* only set valid TA

Change-Id: Idfc40ff0c11bdac13d9e28fbfa4e95dfc6b735b0
Related: OS#1526
---
M src/bts.cpp
M src/gprs_ms.cpp
M src/sba.cpp
M src/tbf.cpp
M src/tbf_dl.cpp
5 files changed, 21 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/47/547/3

diff --git a/src/bts.cpp b/src/bts.cpp
index c53c92c..5be7d0a 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -33,6 +33,7 @@
 	#include <osmocom/core/talloc.h>
 	#include <osmocom/core/msgb.h>
 	#include <osmocom/core/stats.h>
+	#include <osmocom/gsm/protocol/gsm_04_08.h>
 }
 
 #include <arpa/inet.h>
@@ -1128,7 +1129,7 @@
 		uint32_t tlli = request->ID.u.TLLI;
 		uint8_t ms_class = 0;
 		uint8_t egprs_ms_class = 0;
-		uint8_t ta = 0;
+		uint8_t ta = GSM48_TA_INVALID;
 		struct pcu_l1_meas meas;
 
 		GprsMs *ms = bts()->ms_by_tlli(tlli);
diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp
index b3270b1..8facc50 100644
--- a/src/gprs_ms.cpp
+++ b/src/gprs_ms.cpp
@@ -32,6 +32,7 @@
 extern "C" {
 	#include <osmocom/core/talloc.h>
 	#include <osmocom/core/utils.h>
+	#include <osmocom/gsm/protocol/gsm_04_08.h>
 }
 
 #define GPRS_CODEL_SLOW_INTERVAL_MS 4000
@@ -95,7 +96,7 @@
 	m_tlli(tlli),
 	m_new_ul_tlli(0),
 	m_new_dl_tlli(0),
-	m_ta(0),
+	m_ta(GSM48_TA_INVALID),
 	m_ms_class(0),
 	m_egprs_ms_class(0),
 	m_is_idle(true),
@@ -464,11 +465,15 @@
 	if (ta_ == m_ta)
 		return;
 
-	LOGP(DRLCMAC, LOGL_INFO,
-		"Modifying MS object, TLLI = 0x%08x, TA %d -> %d\n",
-		tlli(), m_ta, ta_);
-
-	m_ta = ta_;
+	if (gsm48_ta_is_valid(ta_)) {
+		LOGP(DRLCMAC, LOGL_INFO,
+		     "Modifying MS object, TLLI = 0x%08x, TA %d -> %d\n",
+		     tlli(), m_ta, ta_);
+		m_ta = ta_;
+	} else
+		LOGP(DRLCMAC, LOGL_NOTICE,
+		     "MS object, TLLI = 0x%08x, invalid TA %d rejected (old "
+		     "value %d kept)\n", tlli(), ta_, m_ta);
 }
 
 void GprsMs::set_ms_class(uint8_t ms_class_)
diff --git a/src/sba.cpp b/src/sba.cpp
index 6aeeb7c..46c1431 100644
--- a/src/sba.cpp
+++ b/src/sba.cpp
@@ -26,6 +26,7 @@
 
 extern "C" {
 #include <osmocom/core/talloc.h>
+#include <osmocom/gsm/protocol/gsm_04_08.h>
 }
 
 #include <errno.h>
@@ -55,6 +56,9 @@
 	if (!sba)
 		return -ENOMEM;
 
+	if (!gsm48_ta_is_valid(ta))
+		return -EINVAL;
+
 	for (trx = 0; trx < 8; trx++) {
 		for (ts = 7; ts >= 0; ts--) {
 			pdch = &m_bts.bts_data()->trx[trx].pdch[ts];
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 1fc1aef..7a15547 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -74,7 +74,7 @@
 	m_tfi(0),
 	m_created_ts(0),
 	m_ms(NULL),
-	m_ta(0),
+	m_ta(GSM48_TA_INVALID),
 	m_ms_class(0),
 	m_list(this),
 	m_ms_list(this),
@@ -151,7 +151,8 @@
 	if (ms())
 		ms()->set_ta(ta);
 
-	m_ta = ta;
+	if (gsm48_ta_is_valid(ta))
+		m_ta = ta;
 }
 
 uint8_t gprs_rlcmac_tbf::ms_class() const
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 07a747a..7b61297 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -120,7 +120,7 @@
 {
 	uint8_t ss;
 	int8_t use_trx;
-	uint16_t ta = 0;
+	uint16_t ta = GSM48_TA_INVALID;
 	struct gprs_rlcmac_ul_tbf *ul_tbf = NULL, *old_ul_tbf;
 	struct gprs_rlcmac_dl_tbf *dl_tbf = NULL;
 	GprsMs *ms;

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

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Idfc40ff0c11bdac13d9e28fbfa4e95dfc6b735b0
Gerrit-PatchSet: 3
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list