<p>fixeria <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/25989">View Change</a></p><div style="white-space:pre-wrap">Approvals:
pespin: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">l1sap: process_l1sap_meas_data() accepts pointer to lchan<br><br>In 2/3 cases when calling process_l1sap_meas_data() we already have<br>a pointer to the logical channel, so let's pass it as the first<br>argument instead of a pointer to the transceiver. This way we<br>avoid calling get_active_lchan_by_chan_nr() two times.<br><br>In l1sap_ph_data_ind(), call process_l1sap_meas_data() below the<br>conditional branch handling PDCH, so it won't be called for<br>GSM_LCHAN_PDTCH anymore. GPRS specific measurements are handled<br>by the PCU and not of interest for the BSC.<br><br>Change-Id: I9de67a0b2d2b18923f2c2003b400387a0f1af411<br>---<br>M src/common/l1sap.c<br>1 file changed, 21 insertions(+), 27 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index d02676b..47ba663 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -694,16 +694,14 @@</span><br><span> }</span><br><span> </span><br><span> /* measurement information received from bts model */</span><br><span style="color: hsl(0, 100%, 40%);">-static void process_l1sap_meas_data(struct gsm_bts_trx *trx,</span><br><span style="color: hsl(120, 100%, 40%);">+static void process_l1sap_meas_data(struct gsm_lchan *lchan,</span><br><span> struct osmo_phsap_prim *l1sap,</span><br><span> enum osmo_ph_prim ind_type)</span><br><span> {</span><br><span> struct bts_ul_meas ulm;</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_lchan *lchan;</span><br><span> struct info_meas_ind_param *info_meas_ind;</span><br><span> struct ph_data_param *ph_data_ind;</span><br><span> struct ph_tch_param *ph_tch_ind;</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t chan_nr;</span><br><span> uint32_t fn;</span><br><span> const char *ind_name;</span><br><span> </span><br><span>@@ -711,7 +709,6 @@</span><br><span> case PRIM_MPH_INFO:</span><br><span> /* (legacy way, see also OS#2977) */</span><br><span> info_meas_ind = &l1sap->u.info.u.meas_ind;</span><br><span style="color: hsl(0, 100%, 40%);">- chan_nr = info_meas_ind->chan_nr;</span><br><span> fn = info_meas_ind->fn;</span><br><span> ind_name = "MPH INFO";</span><br><span> ulm = (struct bts_ul_meas) {</span><br><span>@@ -726,7 +723,6 @@</span><br><span> ph_tch_ind = &l1sap->u.tch;</span><br><span> if (ph_tch_ind->rssi == 0)</span><br><span> return;</span><br><span style="color: hsl(0, 100%, 40%);">- chan_nr = ph_tch_ind->chan_nr;</span><br><span> fn = ph_tch_ind->fn;</span><br><span> ind_name = "TCH";</span><br><span> ulm = (struct bts_ul_meas) {</span><br><span>@@ -741,7 +737,6 @@</span><br><span> ph_data_ind = &l1sap->u.data;</span><br><span> if (ph_data_ind->rssi == 0)</span><br><span> return;</span><br><span style="color: hsl(0, 100%, 40%);">- chan_nr = ph_data_ind->chan_nr;</span><br><span> fn = ph_data_ind->fn;</span><br><span> ind_name = "DATA";</span><br><span> ulm = (struct bts_ul_meas) {</span><br><span>@@ -756,24 +751,11 @@</span><br><span> OSMO_ASSERT(false);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- lchan = get_active_lchan_by_chan_nr(trx, chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!lchan) {</span><br><span style="color: hsl(0, 100%, 40%);">- LOGPFN(DL1P, LOGL_ERROR, fn,</span><br><span style="color: hsl(0, 100%, 40%);">- "No lchan for %s MEAS IND (chan_nr=%s)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- ind_name, rsl_chan_nr_str(chan_nr));</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> DEBUGPFN(DL1P, fn,</span><br><span> "%s %s meas ind, ta_offs_256bits=%d, ber10k=%d, inv_rssi=%u, C/I=%d cB\n",</span><br><span> gsm_lchan_name(lchan), ind_name, ulm.ta_offs_256bits,</span><br><span> ulm.ber10k, ulm.inv_rssi, ulm.c_i);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* in the GPRS case we are not interested in measurement</span><br><span style="color: hsl(0, 100%, 40%);">- * processing. The PCU will take care of it */</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->type == GSM_LCHAN_PDTCH)</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* we assume that symbol period is 1 bit: */</span><br><span> set_ms_to_data(lchan, ulm.ta_offs_256bits / 256, true);</span><br><span> </span><br><span>@@ -786,6 +768,8 @@</span><br><span> static int l1sap_mph_info_ind(struct gsm_bts_trx *trx,</span><br><span> struct osmo_phsap_prim *l1sap, struct mph_info_param *info)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ const struct info_meas_ind_param *meas_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *lchan;</span><br><span> int rc = 0;</span><br><span> </span><br><span> switch (info->type) {</span><br><span>@@ -805,7 +789,17 @@</span><br><span> if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span> OSMO_ASSERT(false);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- process_l1sap_meas_data(trx, l1sap, PRIM_MPH_INFO);</span><br><span style="color: hsl(120, 100%, 40%);">+ meas_ind = &l1sap->u.info.u.meas_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan = get_active_lchan_by_chan_nr(trx, meas_ind->chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!lchan) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGPFN(DL1P, LOGL_ERROR, meas_ind->fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ "No lchan for chan_nr=%s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ rsl_chan_nr_str(meas_ind->chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+ return 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%);">+ process_l1sap_meas_data(lchan, l1sap, PRIM_MPH_INFO);</span><br><span> break;</span><br><span> default:</span><br><span> LOGP(DL1P, LOGL_NOTICE, "unknown MPH_INFO ind type %d\n",</span><br><span>@@ -1488,12 +1482,6 @@</span><br><span> DEBUGPGT(DL1P, &g_time, "Rx PH-DATA.ind chan_nr=%s link_id=0x%02x len=%d\n",</span><br><span> rsl_chan_nr_str(chan_nr), link_id, len);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* The ph_data_param contained in the l1sap primitive may contain</span><br><span style="color: hsl(0, 100%, 40%);">- * measurement data. If this data is present, forward it for</span><br><span style="color: hsl(0, 100%, 40%);">- * processing */</span><br><span style="color: hsl(0, 100%, 40%);">- if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span style="color: hsl(0, 100%, 40%);">- process_l1sap_meas_data(trx, l1sap, PRIM_PH_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> if (ts_is_pdch(&trx->ts[tn])) {</span><br><span> lchan = get_lchan_by_chan_nr(trx, chan_nr);</span><br><span> if (!lchan)</span><br><span>@@ -1535,6 +1523,12 @@</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* The ph_data_param contained in the l1sap primitive may contain</span><br><span style="color: hsl(120, 100%, 40%);">+ * measurement data. If this data is present, forward it for</span><br><span style="color: hsl(120, 100%, 40%);">+ * processing */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span style="color: hsl(120, 100%, 40%);">+ process_l1sap_meas_data(lchan, l1sap, PRIM_PH_DATA);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if (L1SAP_IS_LINK_SACCH(link_id))</span><br><span> repeated_ul_sacch_active_decision(lchan, data_ind->ber10k);</span><br><span> </span><br><span>@@ -1618,7 +1612,7 @@</span><br><span> * measurement data. If this data is present, forward it for</span><br><span> * processing */</span><br><span> if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span style="color: hsl(0, 100%, 40%);">- process_l1sap_meas_data(trx, l1sap, PRIM_TCH);</span><br><span style="color: hsl(120, 100%, 40%);">+ process_l1sap_meas_data(lchan, l1sap, PRIM_TCH);</span><br><span> </span><br><span> msgb_pull_to_l2(msg);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/25989">change 25989</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/+/25989"/><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: I9de67a0b2d2b18923f2c2003b400387a0f1af411 </div>
<div style="display:none"> Gerrit-Change-Number: 25989 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>