<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/17146">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">osmo-bts-sysmo: merge measurement data and payload<br><br>For osmo-bts-sysmo the MPH INFO MEAS IND indication is still sent<br>separately. Lets merge the measurement information into the PH DATA<br>and TCH indication like we already did it for osmo-bts-trx<br><br>Change-Id: Iffe7865727fbf9bca8eb32a96e8ea05cf718a948<br>Related: OS#2977<br>---<br>M include/osmo-bts/l1sap.h<br>M src/common/l1sap.c<br>M src/osmo-bts-sysmo/l1_if.c<br>M src/osmo-bts-sysmo/main.c<br>M src/osmo-bts-sysmo/tch.c<br>5 files changed, 35 insertions(+), 32 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/46/17146/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/l1sap.h b/include/osmo-bts/l1sap.h</span><br><span>index 1883869..94d42d8 100644</span><br><span>--- a/include/osmo-bts/l1sap.h</span><br><span>+++ b/include/osmo-bts/l1sap.h</span><br><span>@@ -136,6 +136,11 @@</span><br><span>                struct gsm_lchan *lchan, uint8_t chan_nr, uint32_t fn,</span><br><span>               uint16_t ber10k, int16_t lqual_cb);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int add_l1sap_header2(struct gsm_bts_trx *trx, struct msgb *rmsg,</span><br><span style="color: hsl(120, 100%, 40%);">+                    struct gsm_lchan *lchan, uint8_t chan_nr, uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                uint16_t ber10k, int16_t lqual_cb, int8_t rssi,</span><br><span style="color: hsl(120, 100%, 40%);">+               int16_t ta_offs, uint8_t is_sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define msgb_l1sap_prim(msg) ((struct osmo_phsap_prim *)(msg)->l1h)</span><br><span> </span><br><span> int bts_check_for_first_ciphrd(struct gsm_lchan *lchan,</span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index 0b51045..084c86b 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -180,6 +180,15 @@</span><br><span>                     struct gsm_lchan *lchan, uint8_t chan_nr, uint32_t fn,</span><br><span>               uint16_t ber10k, int16_t lqual_cb)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+  return add_l1sap_header2(trx, rmsg, lchan, chan_nr, fn, ber10k,</span><br><span style="color: hsl(120, 100%, 40%);">+                                lqual_cb, 0, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int add_l1sap_header2(struct gsm_bts_trx *trx, struct msgb *rmsg,</span><br><span style="color: hsl(120, 100%, 40%);">+               struct gsm_lchan *lchan, uint8_t chan_nr, uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                uint16_t ber10k, int16_t lqual_cb, int8_t rssi,</span><br><span style="color: hsl(120, 100%, 40%);">+               int16_t ta_offs, uint8_t is_sub)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span>     struct osmo_phsap_prim *l1sap;</span><br><span> </span><br><span>   LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "Rx -> RTP: %s\n", osmo_hexdump(rmsg->data, rmsg->len));</span><br><span>@@ -194,6 +203,10 @@</span><br><span>        l1sap->u.tch.ber10k = ber10k;</span><br><span>     l1sap->u.tch.lqual_cb = lqual_cb;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      l1sap->u.tch.rssi = rssi;</span><br><span style="color: hsl(120, 100%, 40%);">+  l1sap->u.tch.ta_offs_256bits = ta_offs;</span><br><span style="color: hsl(120, 100%, 40%);">+    l1sap->u.tch.is_sub = is_sub;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   return l1sap_up(trx, l1sap);</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c</span><br><span>index db0dfb5..2e5e5b6 100644</span><br><span>--- a/src/osmo-bts-sysmo/l1_if.c</span><br><span>+++ b/src/osmo-bts-sysmo/l1_if.c</span><br><span>@@ -940,25 +940,6 @@</span><br><span> #define LOG_FMT_MEAS "Meas: RSSI %-3.2f dBm, Qual %-3.2f dB, BER %-3.2f, Timing %d"</span><br><span> #define LOG_PARAM_MEAS(meas_param) (meas_param)->fRssi, (meas_param)->fLinkQuality, (meas_param)->fBer, (meas_param)->i16BurstTiming</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int process_meas_res(struct gsm_bts_trx *trx, uint8_t chan_nr,</span><br><span style="color: hsl(0, 100%, 40%);">-                     uint32_t fn, GsmL1_MeasParam_t *m)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct osmo_phsap_prim l1sap;</span><br><span style="color: hsl(0, 100%, 40%);">-   memset(&l1sap, 0, sizeof(l1sap));</span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_prim_init(&l1sap.oph, SAP_GSM_PH, PRIM_MPH_INFO,</span><br><span style="color: hsl(0, 100%, 40%);">-               PRIM_OP_INDICATION, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-      l1sap.u.info.type = PRIM_INFO_MEAS;</span><br><span style="color: hsl(0, 100%, 40%);">-     l1sap.u.info.u.meas_ind.chan_nr = chan_nr;</span><br><span style="color: hsl(0, 100%, 40%);">-      l1sap.u.info.u.meas_ind.ta_offs_256bits = m->i16BurstTiming * 64;</span><br><span style="color: hsl(0, 100%, 40%);">-    l1sap.u.info.u.meas_ind.ber10k = (unsigned int) (m->fBer * 10000);</span><br><span style="color: hsl(0, 100%, 40%);">-   l1sap.u.info.u.meas_ind.inv_rssi = (uint8_t) (m->fRssi * -1);</span><br><span style="color: hsl(0, 100%, 40%);">-        l1sap.u.info.u.meas_ind.fn = fn;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* l1sap wants to take msgb ownership.  However, as there is no</span><br><span style="color: hsl(0, 100%, 40%);">-  * msg, it will msgb_free(l1sap.oph.msg == NULL) */</span><br><span style="color: hsl(0, 100%, 40%);">-     return l1sap_up(trx, &l1sap);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static int handle_ph_data_ind(struct femtol1_hdl *fl1, GsmL1_PhDataInd_t *data_ind,</span><br><span>                          struct msgb *l1p_msg)</span><br><span> {</span><br><span>@@ -983,8 +964,6 @@</span><br><span>       fn = data_ind->u32Fn;</span><br><span>     link_id =  (data_ind->sapi == GsmL1_Sapi_Sacch) ? LID_SACCH : LID_DEDIC;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- process_meas_res(trx, chan_nr, fn, &data_ind->measParam);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>     gsm_fn2gsmtime(&g_time, fn);</span><br><span> </span><br><span>         DEBUGPGT(DL1P, &g_time, "Rx PH-DATA.ind %s (hL2 %08x): %s, " LOG_FMT_MEAS "\n",</span><br><span>@@ -1010,11 +989,10 @@</span><br><span>     l1sap->u.data.chan_nr = chan_nr;</span><br><span>  l1sap->u.data.fn = fn;</span><br><span>    l1sap->u.data.rssi = (int8_t) (data_ind->measParam.fRssi);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!pcu_direct) { /* FIXME: if pcu_direct=1, then this is not set, what to do in pcu_tx_data_ind() in this case ?*/</span><br><span style="color: hsl(0, 100%, 40%);">-            l1sap->u.data.ber10k = data_ind->measParam.fBer * 10000;</span><br><span style="color: hsl(0, 100%, 40%);">-          l1sap->u.data.ta_offs_256bits = data_ind->measParam.i16BurstTiming * 64;</span><br><span style="color: hsl(0, 100%, 40%);">-          l1sap->u.data.lqual_cb = data_ind->measParam.fLinkQuality * 10;</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(120, 100%, 40%);">+     l1sap->u.data.ber10k = data_ind->measParam.fBer * 10000;</span><br><span style="color: hsl(120, 100%, 40%);">+        l1sap->u.data.ta_offs_256bits = data_ind->measParam.i16BurstTiming * 64;</span><br><span style="color: hsl(120, 100%, 40%);">+        l1sap->u.data.lqual_cb = data_ind->measParam.fLinkQuality * 10;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      /* copy data from L1 primitive to L1SAP primitive */</span><br><span>         sap_msg->l2h = msgb_put(sap_msg, data_ind->msgUnitParam.u8Size);</span><br><span>       memcpy(sap_msg->l2h, data_ind->msgUnitParam.u8Buffer,</span><br><span>diff --git a/src/osmo-bts-sysmo/main.c b/src/osmo-bts-sysmo/main.c</span><br><span>index bb2c436..44c6d5d 100644</span><br><span>--- a/src/osmo-bts-sysmo/main.c</span><br><span>+++ b/src/osmo-bts-sysmo/main.c</span><br><span>@@ -87,6 +87,7 @@</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_MS_PWR_CTRL_DSP);</span><br><span style="color: hsl(120, 100%, 40%);">+   gsm_bts_set_feature(bts, BTS_FEAT_MEAS_PAYLOAD_COMB);</span><br><span> </span><br><span>    bts_model_vty_init(bts);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-sysmo/tch.c b/src/osmo-bts-sysmo/tch.c</span><br><span>index 54e7313..a9997f6 100644</span><br><span>--- a/src/osmo-bts-sysmo/tch.c</span><br><span>+++ b/src/osmo-bts-sysmo/tch.c</span><br><span>@@ -516,9 +516,12 @@</span><br><span>             LOGPFN(DL1P, LOGL_DEBUG, data_ind->u32Fn, "chan_nr %d Rx Payload size 0\n", chan_nr);</span><br><span>           /* Push empty payload to upper layers */</span><br><span>             rmsg = msgb_alloc_headroom(256, 128, "L1P-to-RTP");</span><br><span style="color: hsl(0, 100%, 40%);">-           return add_l1sap_header(trx, rmsg, lchan, chan_nr, data_ind->u32Fn,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  data_ind->measParam.fBer * 10000,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    data_ind->measParam.fLinkQuality * 10);</span><br><span style="color: hsl(120, 100%, 40%);">+            return add_l1sap_header2(trx, rmsg, lchan, chan_nr, data_ind->u32Fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        data_ind->measParam.fBer * 10000,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  data_ind->measParam.fLinkQuality * 10,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     data_ind->measParam.fRssi,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         data_ind->measParam.i16BurstTiming * 64,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   0);</span><br><span>         }</span><br><span> </span><br><span>        payload_type = data_ind->msgUnitParam.u8Buffer[0];</span><br><span>@@ -611,9 +614,12 @@</span><br><span>         }</span><br><span> </span><br><span>        if (rmsg)</span><br><span style="color: hsl(0, 100%, 40%);">-               return add_l1sap_header(trx, rmsg, lchan, chan_nr, data_ind->u32Fn,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  data_ind->measParam.fBer * 10000,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    data_ind->measParam.fLinkQuality * 10);</span><br><span style="color: hsl(120, 100%, 40%);">+            return add_l1sap_header2(trx, rmsg, lchan, chan_nr, data_ind->u32Fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        data_ind->measParam.fBer * 10000,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  data_ind->measParam.fLinkQuality * 10,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     data_ind->measParam.fRssi,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         data_ind->measParam.i16BurstTiming * 64,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   0);</span><br><span> </span><br><span>     return 0;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/17146">change 17146</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/17146"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Iffe7865727fbf9bca8eb32a96e8ea05cf718a948 </div>
<div style="display:none"> Gerrit-Change-Number: 17146 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>