<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/15711">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">L1SAP: refactor handling of Access Bursts on PDCH<br><br>First of all, we also need to apply the same filtering to Access<br>Bursts on PDCH as for the normal ones on RACH, i.e. filter them<br>by ToA (Timing of Arrival) and BER (Bit Error Rate).<br><br>Secondly, we shall not interpret Access Bursts on PDTCH/U as<br>handover related ones. Instead, let's print a warning and<br>ignore them since they are not (yet) supported by OsmoBTS.<br><br>Finally, in gsmtap_pdch() we need to set a proper channel type<br>for Access Bursts received on PDCH (PDTCH/U or PTCCH/U).<br><br>Change-Id: I461fde9f4543c45c42b591cd3fd0ff3d98673cec<br>---<br>M src/common/l1sap.c<br>1 file changed, 47 insertions(+), 19 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/11/15711/1</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 93a70cd..06de8a3 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -349,18 +349,27 @@</span><br><span> static int gsmtap_ph_rach(struct osmo_phsap_prim *l1sap, uint8_t *chan_type,</span><br><span>    uint8_t *tn, uint8_t *ss, uint32_t *fn, uint8_t **data, unsigned int *len)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t chan_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t chan_nr = l1sap->u.rach_ind.chan_nr;</span><br><span> </span><br><span>  *chan_type = GSMTAP_CHANNEL_RACH;</span><br><span>    *fn = l1sap->u.rach_ind.fn;</span><br><span style="color: hsl(0, 100%, 40%);">-  *tn = L1SAP_CHAN2TS(l1sap->u.rach_ind.chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-      chan_nr = l1sap->u.rach_ind.chan_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+       *tn = L1SAP_CHAN2TS(chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      if (L1SAP_IS_CHAN_TCHH(chan_nr))</span><br><span>             *ss = L1SAP_CHAN2SS_TCHH(chan_nr);</span><br><span>   else if (L1SAP_IS_CHAN_SDCCH4(chan_nr))</span><br><span>              *ss = L1SAP_CHAN2SS_SDCCH4(chan_nr);</span><br><span>         else if (L1SAP_IS_CHAN_SDCCH8(chan_nr))</span><br><span>              *ss = L1SAP_CHAN2SS_SDCCH8(chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+  else if (L1SAP_IS_CHAN_PDCH(chan_nr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (L1SAP_IS_PTCCH(*fn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* TODO: calculate sub-slot from frame-number */</span><br><span style="color: hsl(120, 100%, 40%);">+                      *chan_type = GSMTAP_CHANNEL_PTCCH;</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      *chan_type = GSMTAP_CHANNEL_PDTCH;</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%);">+</span><br><span>  *data = (uint8_t *)&l1sap->u.rach_ind.ra;</span><br><span>     *len = 1;</span><br><span> </span><br><span>@@ -1303,6 +1312,32 @@</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Special case for Access Bursts on PDTCH/U or PTCCH/U */</span><br><span style="color: hsl(120, 100%, 40%);">+static int l1sap_pdch_rach(struct gsm_bts_trx *trx, struct ph_rach_ind_param *rach_ind)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Filter out noise / interference / ghosts */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!rach_pass_filter(rach_ind, trx->bts))</span><br><span style="color: hsl(120, 100%, 40%);">+         return -EAGAIN;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* PTCCH/U (Packet Timing Advance Control Channel) */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (L1SAP_IS_PTCCH(rach_ind->fn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPFN(DL1P, LOGL_DEBUG, rach_ind->fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* TODO: calculate and print Timing Advance Index */</span><br><span style="color: hsl(120, 100%, 40%);">+                  "Access Burst for continuous Timing Advance control (toa256=%d)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 rach_ind->acc_delay_256bits);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* QTA: Timing Advance in units of 1/4 of a symbol */</span><br><span style="color: hsl(120, 100%, 40%);">+         pcu_tx_rach_ind(trx->bts, rach_ind->acc_delay_256bits >> 6,</span><br><span style="color: hsl(120, 100%, 40%);">+                               rach_ind->ra, rach_ind->fn, rach_ind->is_11bit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              rach_ind->burst_type, PCU_IF_SAPI_PTCCH);</span><br><span style="color: hsl(120, 100%, 40%);">+          return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else { /* The MS may acknowledge DL data by 4 consequent Access Bursts */</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPFN(DL1P, LOGL_NOTICE, rach_ind->fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                   "Access Bursts on PDTCH/U are not (yet) supported\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               return -ENOTSUP;</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%);">+</span><br><span> /* RACH received from bts model */</span><br><span> static int l1sap_ph_rach_ind(struct gsm_bts_trx *trx,</span><br><span>         struct osmo_phsap_prim *l1sap, struct ph_rach_ind_param *rach_ind)</span><br><span>@@ -1312,22 +1347,15 @@</span><br><span> </span><br><span>    DEBUGPFN(DL1P, rach_ind->fn, "Rx PH-RA.ind\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* PTCCH/UL (Packet Timing Advance Control Channel) */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (L1SAP_IS_CHAN_PDCH(rach_ind->chan_nr) && L1SAP_IS_PTCCH(rach_ind->fn)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGPFN(DL1P, LOGL_DEBUG, rach_ind->fn,</span><br><span style="color: hsl(0, 100%, 40%);">-                      /* TODO: calculate and print Timing Advance Index */</span><br><span style="color: hsl(0, 100%, 40%);">-                    "Access Burst for continuous Timing Advance control (toa256=%d)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                   rach_ind->acc_delay_256bits);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         /* QTA: Timing Advance in units of 1/4 of a symbol */</span><br><span style="color: hsl(0, 100%, 40%);">-           pcu_tx_rach_ind(bts, rach_ind->acc_delay_256bits >> 6,</span><br><span style="color: hsl(0, 100%, 40%);">-                         rach_ind->ra, rach_ind->fn, rach_ind->is_11bit,</span><br><span style="color: hsl(0, 100%, 40%);">-                                rach_ind->burst_type, PCU_IF_SAPI_PTCCH);</span><br><span style="color: hsl(0, 100%, 40%);">-            return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* check for handover access burst on dedicated channels */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!L1SAP_IS_CHAN_RACH(rach_ind->chan_nr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Check the origin of an Access Burst */</span><br><span style="color: hsl(120, 100%, 40%);">+     switch (rach_ind->chan_nr & 0xf8) {</span><br><span style="color: hsl(120, 100%, 40%);">+    case RSL_CHAN_RACH:</span><br><span style="color: hsl(120, 100%, 40%);">+           /* CS or PS RACH, to be handled in this function */</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case RSL_CHAN_OSMO_PDCH:</span><br><span style="color: hsl(120, 100%, 40%);">+              /* TODO: do we need to count Access Bursts on PDCH? */</span><br><span style="color: hsl(120, 100%, 40%);">+                return l1sap_pdch_rach(trx, rach_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span>             rate_ctr_inc2(trx->bts->ctrs, BTS_CTR_RACH_HO);</span><br><span>                return l1sap_handover_rach(trx, rach_ind);</span><br><span>   }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/15711">change 15711</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/+/15711"/><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: I461fde9f4543c45c42b591cd3fd0ff3d98673cec </div>
<div style="display:none"> Gerrit-Change-Number: 15711 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>