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

Fix measurement display

* 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
* display MS Timing Offset instead of raw Timing Offset field from RSL
* rename ms_timing_offset -> timing_offset to avoid confusion between
  MS Timing Offset [-63; 192] and Timing Offset field [0; 255]

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_json.c
M openbsc/src/utils/meas_vis.c
7 files changed, 24 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/91/2391/1

diff --git a/openbsc/include/openbsc/meas_rep.h 
b/openbsc/include/openbsc/meas_rep.h
index 6d36f34..352a1c0 100644
--- a/openbsc/include/openbsc/meas_rep.h
+++ b/openbsc/include/openbsc/meas_rep.h
@@ -39,7 +39,7 @@
        struct gsm_meas_rep_unidir dl;
 
        uint8_t bs_power;
-       uint8_t ms_timing_offset;
+       uint8_t 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..a22297c 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,8 +1386,10 @@
 
        print_meas_rep_uni(&mr->ul, "ul");
        DEBUGPC(DMEAS, "BS_POWER=%d ", mr->bs_power);
+
+       /* According to 3GPP TS 48.058 § MS Timing Offset = Timing Offset field 
- 63 */
        if (mr->flags & MEAS_REP_F_MS_TO)
-               DEBUGPC(DMEAS, "MS_TO=%d ", mr->ms_timing_offset);
+               DEBUGPC(DMEAS, "MS_TO=%d ", mr->timing_offset - 63);
 
        if (mr->flags & MEAS_REP_F_MS_L1) {
                DEBUGPC(DMEAS, "L1_MS_PWR=%3ddBm ", mr->ms_l1.pwr);
@@ -1452,9 +1461,10 @@
        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)) {
+               mr->timing_offset = *TLVP_VAL(&tp, RSL_IE_MS_TIMING_OFFSET);
+               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..99d0d49 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -1061,9 +1061,9 @@
                        mr->flags & MEAS_REP_F_FPC ? "FPC " : "",
                        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);
+       if (mr->flags & MEAS_REP_F_MS_TO) /* According to 3GPP TS 48.058 § MS 
Timing Offset = Timing Offset field - 63 */
+               vty_out(vty, "%s  MS Timing Offset: %d%s", prefix,
+                       mr->timing_offset - 63, 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..4f2aaab 100644
--- a/openbsc/src/libmsc/smpp_openbsc.c
+++ b/openbsc/src/libmsc/smpp_openbsc.c
@@ -438,7 +438,7 @@
                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);
+               append_tlv_u8(req_tlv, TLVID_osmo_ta, mr->timing_offset);
 
        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..3b63f87 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->timing_offset));
        else
                SCK_OK(st->db, sqlite3_bind_null(st->stmt_ins_mr, 7));
 
diff --git a/openbsc/src/utils/meas_json.c b/openbsc/src/utils/meas_json.c
index 51eb6c7..038368e 100644
--- a/openbsc/src/utils/meas_json.c
+++ b/openbsc/src/utils/meas_json.c
@@ -64,7 +64,7 @@
        printf("}");
        printf(", \"BS_POWER\":%d", mr->bs_power);
        if (mr->flags & MEAS_REP_F_MS_TO)
-               printf(", \"MS_TO\":%d", mr->ms_timing_offset);
+               printf(", \"MS_TO\":%d", mr->timing_offset);
 
        if (mr->flags & MEAS_REP_F_MS_L1) {
                printf(", \"L1_MS_PWR\":%d", mr->ms_l1.pwr);
diff --git a/openbsc/src/utils/meas_vis.c b/openbsc/src/utils/meas_vis.c
index 316d203..63ab620 100644
--- a/openbsc/src/utils/meas_vis.c
+++ b/openbsc/src/utils/meas_vis.c
@@ -202,7 +202,7 @@
        //IsVisibleObj(ms->ul.cdk) = FALSE;
        snprintf(msu->label, sizeof(msu->label), "</%d>%1d<!%d> %3d %2u %2u 
%4u",
                 qual_col, lq->rx_qual, qual_col, pwr,
-                ms->mr.ms_l1.ta, ms->mr.ms_timing_offset,
+                ms->mr.ms_l1.ta, ms->mr.timing_offset,
                 now - msu->last_update);
        msu->cdk_label = newCDKLabel(g_st.cdkscreen, RIGHT, row,
                                        msu->_lbl, 1, FALSE, FALSE);

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7e003d23a6edb714c5f17688fd6a8edac131161d
Gerrit-PatchSet: 1
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Max <msur...@sysmocom.de>

Reply via email to