[MERGED] openbsc[master]: Fix MS TO measurement representation

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
Wed Apr 26 08:25:23 UTC 2017


Max has submitted this change and it was merged.

Change subject: Fix MS TO measurement representation
......................................................................


Fix MS TO measurement representation

* set proper flag when saving MS Timing Offset
* use gsm_subscriber's IMSI or lchan's name if bsc_subscriber is unknown
* add comments with spec reference
* store/display MS Timing Offset instead of raw Timing Offset field from
  RSL
* Compute MS Timing Offset [-63; 192] from Timing Offset field [0; 255],
  adjust structure gsm_meas_rep with proper type to store it

Change-Id: I7e003d23a6edb714c5f17688fd6a8edac131161d
Related: OS#1574
---
M openbsc/include/openbsc/meas_rep.h
M openbsc/src/libbsc/abis_rsl.c
M openbsc/src/libbsc/bsc_vty.c
M openbsc/src/libmsc/smpp_openbsc.c
M openbsc/src/utils/meas_db.c
M openbsc/src/utils/meas_vis.c
6 files changed, 22 insertions(+), 13 deletions(-)

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



diff --git a/openbsc/include/openbsc/meas_rep.h b/openbsc/include/openbsc/meas_rep.h
index 6d36f34..b0c03f0 100644
--- a/openbsc/include/openbsc/meas_rep.h
+++ b/openbsc/include/openbsc/meas_rep.h
@@ -39,7 +39,8 @@
 	struct gsm_meas_rep_unidir dl;
 
 	uint8_t bs_power;
-	uint8_t ms_timing_offset;
+	/* according to 3GPP TS 48.058 § MS Timing Offset [-63; 192] */
+	int16_t ms_timing_offset;
 	struct {
 		int8_t pwr;	/* MS power in dBm */
 		uint8_t ta;	/* MS timing advance */
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index 5ae707c..be687eb 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -41,6 +41,7 @@
 #include <openbsc/signal.h>
 #include <openbsc/meas_rep.h>
 #include <openbsc/rtp_proxy.h>
+#include <openbsc/gsm_subscriber.h>
 #include <osmocom/abis/e1_input.h>
 #include <osmocom/gsm/rsl.h>
 #include <osmocom/core/talloc.h>
@@ -1369,8 +1370,14 @@
 	int i;
 	const char *name = "";
 
-	if (lchan && lchan->conn)
-		name = bsc_subscr_name(lchan->conn->bsub);
+	if (lchan && lchan->conn) {
+		if (lchan->conn->bsub)
+			name = bsc_subscr_name(lchan->conn->bsub);
+		else if (lchan->conn->subscr)
+			name = lchan->conn->subscr->imsi;
+		else
+			name = lchan->name;
+	}
 
 	DEBUGP(DMEAS, "[%s] MEASUREMENT RESULT NR=%d ", name, mr->nr);
 
@@ -1379,6 +1386,7 @@
 
 	print_meas_rep_uni(&mr->ul, "ul");
 	DEBUGPC(DMEAS, "BS_POWER=%d ", mr->bs_power);
+
 	if (mr->flags & MEAS_REP_F_MS_TO)
 		DEBUGPC(DMEAS, "MS_TO=%d ", mr->ms_timing_offset);
 
@@ -1452,9 +1460,11 @@
 	mr->bs_power = *TLVP_VAL(&tp, RSL_IE_BS_POWER);
 
 	/* Optional Parts */
-	if (TLVP_PRESENT(&tp, RSL_IE_MS_TIMING_OFFSET))
-		mr->ms_timing_offset =
-			*TLVP_VAL(&tp, RSL_IE_MS_TIMING_OFFSET);
+	if (TLVP_PRESENT(&tp, RSL_IE_MS_TIMING_OFFSET)) {
+		/* According to 3GPP TS 48.058 § MS Timing Offset = Timing Offset field - 63 */
+		mr->ms_timing_offset = *TLVP_VAL(&tp, RSL_IE_MS_TIMING_OFFSET) - 63;
+		mr->flags |= MEAS_REP_F_MS_TO;
+	}
 
 	if (TLVP_PRESENT(&tp, RSL_IE_L1_INFO)) {
 		struct e1inp_sign_link *sign_link = msg->dst;
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index c1882fc..3c70580 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -1062,8 +1062,7 @@
 			mr->flags & MEAS_REP_F_DL_VALID ? " " : "DLinval ",
 			VTY_NEWLINE);
 	if (mr->flags & MEAS_REP_F_MS_TO)
-		vty_out(vty, "%s  MS Timing Offset: %u%s", prefix,
-			mr->ms_timing_offset, VTY_NEWLINE);
+		vty_out(vty, "%s  MS Timing Offset: %d%s", prefix, mr->ms_timing_offset, VTY_NEWLINE);
 	if (mr->flags & MEAS_REP_F_MS_L1)
 		vty_out(vty, "%s  L1 MS Power: %u dBm, Timing Advance: %u%s",
 			prefix, mr->ms_l1.pwr, mr->ms_l1.ta, VTY_NEWLINE);
diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c
index 2703a24..1671a62 100644
--- a/openbsc/src/libmsc/smpp_openbsc.c
+++ b/openbsc/src/libmsc/smpp_openbsc.c
@@ -437,8 +437,8 @@
 		append_tlv_u8(req_tlv, TLVID_osmo_ta, mr->ms_l1.ta);
 		ms_dbm = ms_pwr_dbm(lchan->ts->trx->bts->band, mr->ms_l1.pwr);
 		append_tlv_u8(req_tlv, TLVID_osmo_ms_l1_txpwr, ms_dbm);
-	} else if (mr->flags & MEAS_REP_F_MS_TO)
-		append_tlv_u8(req_tlv, TLVID_osmo_ta, mr->ms_timing_offset);
+	} else if (mr->flags & MEAS_REP_F_MS_TO) /* Save Timing Offset field = MS Timing Offset + 63 */
+		append_tlv_u8(req_tlv, TLVID_osmo_ta, mr->ms_timing_offset + 63);
 
 	append_tlv_u16(req_tlv, TLVID_osmo_rxlev_ul,
 		       rxlev2dbm(ul_meas->full.rx_lev));
diff --git a/openbsc/src/utils/meas_db.c b/openbsc/src/utils/meas_db.c
index a3b694e..d81efca 100644
--- a/openbsc/src/utils/meas_db.c
+++ b/openbsc/src/utils/meas_db.c
@@ -114,8 +114,7 @@
 	SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 6, mr->bs_power));
 
 	if (mr->flags & MEAS_REP_F_MS_TO)
-		SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 7,
-						mr->ms_timing_offset));
+		SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 7, mr->ms_timing_offset));
 	else
 		SCK_OK(st->db, sqlite3_bind_null(st->stmt_ins_mr, 7));
 
diff --git a/openbsc/src/utils/meas_vis.c b/openbsc/src/utils/meas_vis.c
index 316d203..77194de 100644
--- a/openbsc/src/utils/meas_vis.c
+++ b/openbsc/src/utils/meas_vis.c
@@ -200,7 +200,7 @@
 				  COLS-40, rxlev2dbm(lq->rx_lev), -110, -47,
 				  1, 2, FALSE, FALSE);
 	//IsVisibleObj(ms->ul.cdk) = FALSE;
-	snprintf(msu->label, sizeof(msu->label), "</%d>%1d<!%d> %3d %2u %2u %4u",
+	snprintf(msu->label, sizeof(msu->label), "</%d>%1d<!%d> %3d %2u %2d %4u",
 		 qual_col, lq->rx_qual, qual_col, pwr,
 		 ms->mr.ms_l1.ta, ms->mr.ms_timing_offset,
 		 now - msu->last_update);

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I7e003d23a6edb714c5f17688fd6a8edac131161d
Gerrit-PatchSet: 4
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Alexander Chemeris <Alexander.Chemeris at gmail.com>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Ivan Kluchnikov <kluchnikovi at gmail.com>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>



More information about the gerrit-log mailing list