Hello Jenkins Builder,

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

    https://gerrit.osmocom.org/1700

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

Add MS TO to RSL measurements

Add optional MS timing offset (3GPP TS 45.010 § 1.2) to RSL MEASUREMENT
RESULT (3GPP TS 48.058 § 8.4.8). The value is calculated either directly
from corresponding BTS measurement or from 3GPP TS 48.058 § 9.3.17
Access Delay (for known TA) and is invalidated after RSL report is sent
until new measurement indication or RACH is received.

Change-Id: I4dfe5c48834a083e757d5de3236a02e15a238b28
Related: OS#1574
---
M src/common/l1sap.c
M src/common/rsl.c
2 files changed, 44 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/00/1700/6

diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index 3592096..57a858c 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -431,6 +431,27 @@
 
        return 0;
 }
+
+static inline void set_ms_to_data(struct gsm_lchan *lchan, int16_t data, bool 
set_ms_to)
+{
+       if (!lchan)
+               return;
+
+       if (data + 63 > 255) { /* According to 3GPP TS 48.058 §9.3.37 Timing 
Offset field cannot exceed 255 */
+               LOGP(DL1P, LOGL_ERROR, "Attempting to set invalid Timing Offset 
value %d (MS TO = %u)!\n",
+                    data, set_ms_to);
+               return;
+       }
+
+       if (set_ms_to) {
+               lchan->ms_t_offs = data + 63;
+               lchan->p_offs = -1;
+       } else {
+               lchan->p_offs = data + 63;
+               lchan->ms_t_offs = -1;
+       }
+}
+
 /* measurement information received from bts model */
 static int l1sap_info_meas_ind(struct gsm_bts_trx *trx,
        struct osmo_phsap_prim *l1sap,
@@ -455,6 +476,9 @@
        ulm.ta_offs_qbits = info_meas_ind->ta_offs_qbits;
        ulm.ber10k = info_meas_ind->ber10k;
        ulm.inv_rssi = info_meas_ind->inv_rssi;
+
+       /* we assume that symbol period is 1 bit: */
+       set_ms_to_data(lchan, info_meas_ind->ta_offs_qbits / 4, true);
 
        lchan_new_ul_meas(lchan, &ulm);
 
@@ -1021,6 +1045,9 @@
                return 0;
        }
 
+       /* According to 3GPP TS 48.058 § 9.3.17 Access Delay is expressed same 
way as TA (number of symbols) */
+       set_ms_to_data(get_lchan_by_chan_nr(trx, rach_ind->chan_nr), acc_delay, 
false);
+
        /* check for handover rach */
        if (!L1SAP_IS_CHAN_RACH(rach_ind->chan_nr))
                return l1sap_handover_rach(trx, l1sap, rach_ind);
diff --git a/src/common/rsl.c b/src/common/rsl.c
index 1d0bcea..5fe5a1d 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -2220,8 +2220,18 @@
        return 0;
 }
 
+static inline uint8_t ms_to2rsl(const struct gsm_lchan *lchan, const struct 
lapdm_entity *le)
+{
+       return (lchan->ms_t_offs >= 0) ? lchan->ms_t_offs : (lchan->p_offs - 
le->ta);
+}
+
+static inline bool ms_to_valid(const struct gsm_lchan *lchan)
+{
+       return (lchan->ms_t_offs >= 0) || (lchan->p_offs >= 0);
+}
+
 /* 8.4.8 MEASUREMENT RESult */
-static int rsl_tx_meas_res(struct gsm_lchan *lchan, uint8_t *l3, int l3_len)
+static int rsl_tx_meas_res(struct gsm_lchan *lchan, uint8_t *l3, int l3_len, 
const struct lapdm_entity *le)
 {
        struct msgb *msg;
        uint8_t meas_res[16];
@@ -2253,7 +2263,11 @@
                lchan->meas.flags &= ~LC_UL_M_F_L1_VALID;
        }
        msgb_tl16v_put(msg, RSL_IE_L3_INFO, l3_len, l3);
-               //msgb_tv_put(msg, RSL_IE_MS_TIMING_OFFSET, FIXME);
+       if (ms_to_valid(lchan)) {
+               msgb_tv_put(msg, RSL_IE_MS_TIMING_OFFSET, ms_to2rsl(lchan, le));
+               lchan->ms_t_offs = -1;
+               lchan->p_offs = -1;
+       }
 
        rsl_dch_push_hdr(msg, RSL_MT_MEAS_RES, chan_nr);
        msg->trx = lchan->ts->trx;
@@ -2266,8 +2280,6 @@
 {
        struct gsm_lchan *lchan = ctx;
        struct abis_rsl_common_hdr *rh;
-
-       /* NOTE: Parameter lapdm_entity *le is ignored */
 
        OSMO_ASSERT(msg);
        rh = msgb_l2(msg);
@@ -2306,7 +2318,7 @@
                        return 0;
                }
 
-               rc = rsl_tx_meas_res(lchan, msgb_l3(msg), msgb_l3len(msg));
+               rc = rsl_tx_meas_res(lchan, msgb_l3(msg), msgb_l3len(msg), le);
                msgb_free(msg);
                return rc;
        } else {

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

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I4dfe5c48834a083e757d5de3236a02e15a238b28
Gerrit-PatchSet: 6
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msur...@sysmocom.de>
Gerrit-Reviewer: Alexander Chemeris <alexander.cheme...@gmail.com>
Gerrit-Reviewer: Harald Welte <lafo...@gnumonks.org>
Gerrit-Reviewer: Ivan Kluchnikov <kluchnik...@gmail.com>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msur...@sysmocom.de>
Gerrit-Reviewer: dexter <pma...@sysmocom.de>

Reply via email to