diff options
author | Max <msuraev@sysmocom.de> | 2017-04-20 13:07:58 +0200 |
---|---|---|
committer | Max <msuraev@sysmocom.de> | 2017-04-26 08:25:22 +0000 |
commit | 11e4e41ffcd839cf6a570a2c9541e97495db96b4 (patch) | |
tree | 6fa8043321e25feed886fcd495bd025489fec2f1 /openbsc/src/libbsc/abis_rsl.c | |
parent | 7636c0833bd7d6ccf2eb0a67677334a72b5d7a92 (diff) |
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
Diffstat (limited to 'openbsc/src/libbsc/abis_rsl.c')
-rw-r--r-- | openbsc/src/libbsc/abis_rsl.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index 5ae707c14..be687ebaa 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 @@ static void print_meas_rep(struct gsm_lchan *lchan, struct gsm_meas_rep *mr) 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 @@ static void print_meas_rep(struct gsm_lchan *lchan, struct gsm_meas_rep *mr) 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 @@ static int rsl_rx_meas_res(struct msgb *msg) 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; |