<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16081">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library/PCUIF_Types.ttcn: extend RACH.ind with TRX / TS number fields<br><br>Since there can be multiple PDCH channels configured on different<br>timeslots, different TRXes, and BTSes, the PTCCH/U handling code<br>in OsmoPCU needs to know the exact origin of a given RACH.ind.<br><br>Otherwise, it is not known which subscriber originated a given<br>PTCCH/U indication, and hence it is impossible to send PTCCH/D<br>Timing Advance notification properly.<br><br>Fortunately, we can extend the RACH.ind message without even<br>bumping the protocol version, because every single PDU has a<br>fixed size defined by the largest message - INFO.ind. In case<br>if the actual message payload is smaller, the rest is filled<br>with a constant padding byte (0x00).<br><br>Older versions of OsmoPCU will consider the new fields as padding,<br>while the messages from older OsmoBTS versions will always have<br>both fields set to 0x00. Since C0/TS0 cannot be configured to<br>PDCH, this can be easily detected on the other end.<br><br>Change-Id: Ia5c4e504a21dc5508920553d3856027455dba1b1<br>Related: OS#4102, OS#1545<br>---<br>M bts/BTS_Tests.ttcn<br>M library/PCUIF_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>3 files changed, 22 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/81/16081/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 87c9131..779f7c3 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -4170,8 +4170,8 @@</span><br><span> chan_nr := ts_RslChanNr_PDCH(7),</span><br><span> link_id := ts_RslLinkID_OSMO_PTCCH(0));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* TODO: check time-slot and TRX number as soon as we extend the PCU interface */</span><br><span style="color: hsl(0, 100%, 40%);">- pcu_rach_ind := tr_PCUIF_RACH_IND(ra := ra, fn := fn, sapi := PCU_IF_SAPI_PTCCH);</span><br><span style="color: hsl(120, 100%, 40%);">+ pcu_rach_ind := tr_PCUIF_RACH_IND(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+ ra := ra, fn := fn, sapi := PCU_IF_SAPI_PTCCH);</span><br><span> </span><br><span> /* Expect a RACH.ind on the PCU interface (timeout is one multi-frame) */</span><br><span> T.start(52.0 * 4.615 / 1000.0);</span><br><span>@@ -4333,7 +4333,7 @@</span><br><span> timer T := 2.0;</span><br><span> T.start;</span><br><span> alt {</span><br><span style="color: hsl(0, 100%, 40%);">- [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND(0, oct2int(ra), 0, ?, fn))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND(0, 0, 0, oct2int(ra), 0, ?, fn))) {</span><br><span> T.stop;</span><br><span> }</span><br><span> [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND)) {</span><br><span>@@ -4382,7 +4382,7 @@</span><br><span> </span><br><span> /* Compose the expected message */</span><br><span> pcu_rach_ind := tr_PCUIF_RACH_IND(</span><br><span style="color: hsl(0, 100%, 40%);">- bts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := 0, trx_nr := 0, ts_nr := 0,</span><br><span> ra := bit2int(ra11),</span><br><span> is_11bit := 1,</span><br><span> burst_type := pcu_bt,</span><br><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index ae0762a..8ce41c4 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -130,7 +130,9 @@</span><br><span> uint32_t fn,</span><br><span> uint16_t arfcn,</span><br><span> uint8_t is_11bit,</span><br><span style="color: hsl(0, 100%, 40%);">- PCUIF_BurstType burst_type</span><br><span style="color: hsl(120, 100%, 40%);">+ PCUIF_BurstType burst_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t ts_nr</span><br><span> } with { variant "" };</span><br><span> </span><br><span> type record PCUIF_InfoTrx {</span><br><span>@@ -565,6 +567,8 @@</span><br><span> }</span><br><span> </span><br><span> template (value) PCUIF_Message ts_PCUIF_RACH_IND(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t ts_nr,</span><br><span> template (value) uint16_t ra,</span><br><span> template (value) uint8_t is_11bit,</span><br><span> template (value) PCUIF_BurstType burst_type,</span><br><span>@@ -584,11 +588,15 @@</span><br><span> fn := fn,</span><br><span> arfcn := arfcn,</span><br><span> is_11bit := is_11bit,</span><br><span style="color: hsl(0, 100%, 40%);">- burst_type := burst_type</span><br><span style="color: hsl(120, 100%, 40%);">+ burst_type := burst_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span> template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t trx_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t ts_nr := ?,</span><br><span> template uint16_t ra := ?,</span><br><span> template uint8_t is_11bit := ?,</span><br><span> template PCUIF_BurstType burst_type := ?,</span><br><span>@@ -605,7 +613,9 @@</span><br><span> fn := fn,</span><br><span> arfcn := ?,</span><br><span> is_11bit := is_11bit,</span><br><span style="color: hsl(0, 100%, 40%);">- burst_type := burst_type</span><br><span style="color: hsl(120, 100%, 40%);">+ burst_type := burst_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 6a5f5d0..9d0882f 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -515,7 +515,7 @@</span><br><span> </span><br><span> /* Send RACH.ind */</span><br><span> log("Sending RACH.ind on fn=", fn, " with RA=", ra, ", TA=", ta);</span><br><span style="color: hsl(0, 100%, 40%);">- BTS.send(ts_PCUIF_RACH_IND(bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ BTS.send(ts_PCUIF_RACH_IND(bts_nr := bts_nr, trx_nr := 0, ts_nr := 0,</span><br><span> ra := ra, is_11bit := is_11bit,</span><br><span> burst_type := burst_type,</span><br><span> fn := fn, arfcn := 871,</span><br><span>@@ -524,7 +524,7 @@</span><br><span> /* Expect Immediate (TBF) Assignment on TS0/AGCH */</span><br><span> T.start(2.0);</span><br><span> alt {</span><br><span style="color: hsl(0, 100%, 40%);">- [] BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := bts_nr, trx_nr := ?, ts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := bts_nr, trx_nr := 0, ts_nr := 0,</span><br><span> sapi := PCU_IF_SAPI_AGCH, data := ?))</span><br><span> -> value pcu_msg {</span><br><span> rr_imm_ass := dec_GsmRrMessage(pcu_msg.u.data_req.data);</span><br><span>@@ -778,7 +778,7 @@</span><br><span> 0, 0, 0, 0</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private altstep as_ta_ptcch(uint8_t bts_nr := 0, /* TODO: TRX / TS number */</span><br><span style="color: hsl(120, 100%, 40%);">+private altstep as_ta_ptcch(uint8_t bts_nr := 0, uint8_t trx_nr := 0, uint8_t ts_nr := 7,</span><br><span> in PTCCH_TAI_ToA_MAP toa_map := ptcch_toa_map_def)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span> var RAW_PCU_Event event;</span><br><span>@@ -794,7 +794,7 @@</span><br><span> ", fn=", event.data.tdma_fn,</span><br><span> ", ToA=", toa_map[ss], " (QTA)");</span><br><span> /* TODO: do we care about RA and burst format? */</span><br><span style="color: hsl(0, 100%, 40%);">- BTS.send(ts_PCUIF_RACH_IND(bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ BTS.send(ts_PCUIF_RACH_IND(bts_nr, trx_nr, ts_nr,</span><br><span> ra := oct2int('3A'O),</span><br><span> is_11bit := 0,</span><br><span> burst_type := BURST_TYPE_0,</span><br><span>@@ -821,7 +821,7 @@</span><br><span> alt {</span><br><span> /* Keep sending of Access Bursts during two multi-frames (period of PTCCH/D)</span><br><span> * with increasing ToA (Timing of Arrival) values: 0, 7, 14, 28, 35... */</span><br><span style="color: hsl(0, 100%, 40%);">- [] as_ta_ptcch(bts_nr := 0, toa_map := ptcch_toa_map);</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_ta_ptcch(bts_nr := 0, trx_nr := 0, ts_nr := 7, toa_map := ptcch_toa_map);</span><br><span> /* In the end of 2nd multi-frame we should receive a PTCCH/D block */</span><br><span> [] BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span> sapi := PCU_IF_SAPI_PTCCH)) -> value pcu_msg {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16081">change 16081</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-ttcn3-hacks/+/16081"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia5c4e504a21dc5508920553d3856027455dba1b1 </div>
<div style="display:none"> Gerrit-Change-Number: 16081 </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>