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