<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/25895">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">struct gsm_lchan: group ACCH repetition state fields<br><br>Change-Id: I2680c88f2a51b64f085a92233bc125338622babf<br>Related: SYS#5114<br>---<br>M include/osmo-bts/lchan.h<br>M src/common/l1sap.c<br>M src/common/lchan.c<br>M src/common/measurement.c<br>M src/common/vty.c<br>M src/osmo-bts-trx/sched_lchan_xcch.c<br>6 files changed, 41 insertions(+), 38 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/95/25895/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/lchan.h b/include/osmo-bts/lchan.h</span><br><span>index 03b3144..3eb4f93 100644</span><br><span>--- a/include/osmo-bts/lchan.h</span><br><span>+++ b/include/osmo-bts/lchan.h</span><br><span>@@ -304,13 +304,16 @@</span><br><span> /* ECU (Error Concealment Unit) state */</span><br><span> struct osmo_ecu_state *ecu_state;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Repeated ACCH capabilities and current state */</span><br><span> struct abis_rsl_osmo_rep_acch_cap rep_acch_cap;</span><br><span style="color: hsl(0, 100%, 40%);">- bool repeated_dl_facch_active;</span><br><span style="color: hsl(0, 100%, 40%);">- bool repeated_ul_sacch_active;</span><br><span style="color: hsl(0, 100%, 40%);">- bool repeated_dl_sacch_active;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct {</span><br><span style="color: hsl(120, 100%, 40%);">+ bool dl_facch_active;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool ul_sacch_active;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool dl_sacch_active;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Message buffer to store DL-SACCH repeation candidate */</span><br><span style="color: hsl(0, 100%, 40%);">- struct msgb *rep_sacch;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Message buffer to store DL-SACCH repeation candidate */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msgb *dl_sacch_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ } rep_acch;</span><br><span> </span><br><span> /* Cached early Immediate Assignment message: if the Immediate Assignment arrives before the channel is</span><br><span> * confirmed active, then cache it here and send it once the channel is confirmed to be active. This is related</span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index cbe43b4..d94e3bc 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -1037,15 +1037,15 @@</span><br><span> * possible candidates in order to have one ready in case the MS enables</span><br><span> * SACCH repetition. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->rep_sacch) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_sacch_msg) {</span><br><span> if (lchan->meas.l1_info.srr_sro == 0) {</span><br><span> /* Toss previous repetition candidate */</span><br><span style="color: hsl(0, 100%, 40%);">- msgb_free(lchan->rep_sacch);</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->rep_sacch = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_free(lchan->rep_acch.dl_sacch_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_sacch_msg = NULL;</span><br><span> } else {</span><br><span> /* Use previous repetition candidate */</span><br><span style="color: hsl(0, 100%, 40%);">- msg = lchan->rep_sacch;</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->rep_sacch = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ msg = lchan->rep_acch.dl_sacch_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_sacch_msg = NULL;</span><br><span> return msg;</span><br><span> }</span><br><span> }</span><br><span>@@ -1059,7 +1059,7 @@</span><br><span> /* Only LAPDm frames for SAPI 0 may become a repetition</span><br><span> * candidate. */</span><br><span> if (sapi == 0)</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->rep_sacch = msgb_copy(msg, "rep_sacch");</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_sacch_msg = msgb_copy(msg, "rep_sacch");</span><br><span> </span><br><span> return msg;</span><br><span> }</span><br><span>@@ -1143,20 +1143,20 @@</span><br><span> p = msgb_put(msg, GSM_MACBLOCK_LEN);</span><br><span> /* L1-header, if not set/modified by layer 1 */</span><br><span> p[0] = lchan->ms_power_ctrl.current;</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_ul_sacch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.ul_sacch_active)</span><br><span> p[0] |= 0x40; /* See also: 3GPP TS 44.004, section 7.1 */</span><br><span> p[1] = lchan->ta_ctrl.current;</span><br><span> le = &lchan->lapdm_ch.lapdm_acch;</span><br><span> if (lchan->rep_acch_cap.dl_sacch) {</span><br><span> /* Check if MS requests SACCH repetition and update state accordingly */</span><br><span> if (lchan->meas.l1_info.srr_sro) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_sacch_active == false)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_sacch_active == false)</span><br><span> LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "DL-SACCH repetition: inactive => active\n");</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_sacch_active = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_sacch_active = true;</span><br><span> } else {</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_sacch_active == true)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_sacch_active == true)</span><br><span> LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "DL-SACCH repetition: active => inactive\n");</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_sacch_active = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_sacch_active = false;</span><br><span> }</span><br><span> pp_msg = lapdm_phsap_dequeue_msg_sacch(lchan, le);</span><br><span> } else {</span><br><span>@@ -1166,7 +1166,7 @@</span><br><span> if (lchan->ts->trx->bts->dtxd)</span><br><span> dtxd_facch = true;</span><br><span> le = &lchan->lapdm_ch.lapdm_dcch;</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_facch_active && lchan->rsl_cmode != RSL_CMOD_SPD_SIGN)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_facch_active && lchan->rsl_cmode != RSL_CMOD_SPD_SIGN)</span><br><span> pp_msg = lapdm_phsap_dequeue_msg_facch(lchan, le, fn);</span><br><span> else</span><br><span> pp_msg = lapdm_phsap_dequeue_msg(le);</span><br><span>@@ -1427,20 +1427,20 @@</span><br><span> {</span><br><span> uint16_t upper = 0;</span><br><span> uint16_t lower = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- bool prev_repeated_ul_sacch_active = lchan->repeated_ul_sacch_active;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool prev_repeated_ul_sacch_active = lchan->rep_acch.ul_sacch_active;</span><br><span> </span><br><span> /* This is an optimization so that we exit as quickly as possible if</span><br><span> * there are no uplink SACCH repetition capabilities present.</span><br><span> * However If the repeated UL-SACCH capabilities vanish for whatever</span><br><span> * reason, we must be sure that UL-SACCH repetition is disabled. */</span><br><span> if (!lchan->rep_acch_cap.ul_sacch) {</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_ul_sacch_active = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.ul_sacch_active = false;</span><br><span> goto out;</span><br><span> }</span><br><span> </span><br><span> /* Threshold disabled (repetition is always on) */</span><br><span> if (lchan->rep_acch_cap.rxqual == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_ul_sacch_active = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.ul_sacch_active = true;</span><br><span> goto out;</span><br><span> }</span><br><span> </span><br><span>@@ -1459,14 +1459,14 @@</span><br><span> </span><br><span> /* If upper/rxqual == 0, then repeated UL-SACCH is always on */</span><br><span> if (ber10k >= upper)</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_ul_sacch_active = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.ul_sacch_active = true;</span><br><span> else if (ber10k <= lower)</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_ul_sacch_active = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.ul_sacch_active = false;</span><br><span> </span><br><span> out:</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_ul_sacch_active == prev_repeated_ul_sacch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.ul_sacch_active == prev_repeated_ul_sacch_active)</span><br><span> return;</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_ul_sacch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.ul_sacch_active)</span><br><span> LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "UL-SACCH repetition: inactive => active\n");</span><br><span> else</span><br><span> LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "UL-SACCH repetition: active => inactive\n");</span><br><span>diff --git a/src/common/lchan.c b/src/common/lchan.c</span><br><span>index 9661010..423ecc1 100644</span><br><span>--- a/src/common/lchan.c</span><br><span>+++ b/src/common/lchan.c</span><br><span>@@ -296,8 +296,8 @@</span><br><span> msgb_free(lchan->tch.rep_facch[1].msg);</span><br><span> lchan->tch.rep_facch[0].msg = NULL;</span><br><span> lchan->tch.rep_facch[1].msg = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- msgb_free(lchan->rep_sacch);</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->rep_sacch = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_free(lchan->rep_acch.dl_sacch_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_sacch_msg = NULL;</span><br><span> /* fall through */</span><br><span> default:</span><br><span> if (lchan->early_rr_ia) {</span><br><span>diff --git a/src/common/measurement.c b/src/common/measurement.c</span><br><span>index ec06131..52431c5 100644</span><br><span>--- a/src/common/measurement.c</span><br><span>+++ b/src/common/measurement.c</span><br><span>@@ -798,7 +798,7 @@</span><br><span> uint8_t upper;</span><br><span> uint8_t lower;</span><br><span> uint8_t rxqual;</span><br><span style="color: hsl(0, 100%, 40%);">- bool prev_repeated_dl_facch_active = lchan->repeated_dl_facch_active;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool prev_repeated_dl_facch_active = lchan->rep_acch.dl_facch_active;</span><br><span> </span><br><span> /* This is an optimization so that we exit as quickly as possible if</span><br><span> * there are no FACCH repetition capabilities present. However If the</span><br><span>@@ -806,13 +806,13 @@</span><br><span> * sure that FACCH repetition is disabled. */</span><br><span> if (!lchan->rep_acch_cap.dl_facch_cmd</span><br><span> && !lchan->rep_acch_cap.dl_facch_all) {</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_facch_active = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_facch_active = false;</span><br><span> goto out;</span><br><span> }</span><br><span> </span><br><span> /* Threshold disabled (always on) */</span><br><span> if (lchan->rep_acch_cap.rxqual == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_facch_active = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_facch_active = true;</span><br><span> goto out;</span><br><span> }</span><br><span> </span><br><span>@@ -820,7 +820,7 @@</span><br><span> * (repeated SACCH requested) then it makes sense to enable</span><br><span> * FACCH repetition too. */</span><br><span> if (lchan->meas.l1_info.srr_sro) {</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_facch_active = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_facch_active = true;</span><br><span> goto out;</span><br><span> }</span><br><span> </span><br><span>@@ -852,14 +852,14 @@</span><br><span> rxqual = meas_res->rxqual_full;</span><br><span> </span><br><span> if (rxqual >= upper)</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_facch_active = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_facch_active = true;</span><br><span> else if (rxqual <= lower)</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->repeated_dl_facch_active = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->rep_acch.dl_facch_active = false;</span><br><span> </span><br><span> out:</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_facch_active == prev_repeated_dl_facch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_facch_active == prev_repeated_dl_facch_active)</span><br><span> return;</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_facch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_facch_active)</span><br><span> LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "DL-FACCH repetition: inactive => active\n");</span><br><span> else</span><br><span> LOGPLCHAN(lchan, DL1P, LOGL_DEBUG, "DL-FACCH repetition: active => inactive\n");</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index b894ba8..124f7ef 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -1723,7 +1723,7 @@</span><br><span> VTY_NEWLINE);</span><br><span> else</span><br><span> cfg_out(vty, "no retransmission (disabled)%s", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_facch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_facch_active)</span><br><span> cfg_out(vty, "retransmission currently active%s", VTY_NEWLINE);</span><br><span> else</span><br><span> cfg_out(vty, "retransmission currently inactive%s",</span><br><span>@@ -1737,7 +1737,7 @@</span><br><span> VTY_NEWLINE);</span><br><span> else</span><br><span> cfg_out(vty, "no retransmission (disabled)%s", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_dl_sacch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.dl_sacch_active)</span><br><span> cfg_out(vty, "retransmission currently active%s", VTY_NEWLINE);</span><br><span> else</span><br><span> cfg_out(vty, "retransmission currently inactive%s",</span><br><span>@@ -1751,7 +1751,7 @@</span><br><span> VTY_NEWLINE);</span><br><span> else</span><br><span> cfg_out(vty, "no retransmission (disabled)%s", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->repeated_ul_sacch_active)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->rep_acch.ul_sacch_active)</span><br><span> cfg_out(vty, "retransmission currently active%s", VTY_NEWLINE);</span><br><span> else</span><br><span> cfg_out(vty, "retransmission currently inactive%s",</span><br><span>diff --git a/src/osmo-bts-trx/sched_lchan_xcch.c b/src/osmo-bts-trx/sched_lchan_xcch.c</span><br><span>index e2baefd..e8f46c1 100644</span><br><span>--- a/src/osmo-bts-trx/sched_lchan_xcch.c</span><br><span>+++ b/src/osmo-bts-trx/sched_lchan_xcch.c</span><br><span>@@ -60,7 +60,7 @@</span><br><span> uint16_t ber10k;</span><br><span> int rc;</span><br><span> struct gsm_lchan *lchan = chan_state->lchan;</span><br><span style="color: hsl(0, 100%, 40%);">- bool rep_sacch = L1SAP_IS_LINK_SACCH(trx_chan_desc[bi->chan].link_id) && lchan->repeated_ul_sacch_active;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool rep_sacch = L1SAP_IS_LINK_SACCH(trx_chan_desc[bi->chan].link_id) && lchan->rep_acch.ul_sacch_active;</span><br><span> </span><br><span> /* If handover RACH detection is turned on, treat this burst as an Access Burst.</span><br><span> * Handle NOPE.ind as usually to ensure proper Uplink measurement reporting. */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/25895">change 25895</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/+/25895"/><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: I2680c88f2a51b64f085a92233bc125338622babf </div>
<div style="display:none"> Gerrit-Change-Number: 25895 </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-MessageType: newchange </div>