<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>