<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16081">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  fixeria: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><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>M pcu/PCU_Tests_RAW_SNS.ttcn<br>4 files changed, 24 insertions(+), 13 deletions(-)<br><br></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>diff --git a/pcu/PCU_Tests_RAW_SNS.ttcn b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>index 28dd654..c8520e7 100644</span><br><span>--- a/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>@@ -374,7 +374,8 @@</span><br><span>        f_sns_bringup_1c1u();</span><br><span>        activate(as_pcu_activate());</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        f_pcuif_tx(ts_PCUIF_RACH_IND(bts_nr:=0, ra:=23, is_11bit:=0, burst_type:=BURST_TYPE_0,</span><br><span style="color: hsl(120, 100%, 40%);">+        f_pcuif_tx(ts_PCUIF_RACH_IND(bts_nr:=0, trx_nr:=0, ts_nr:=0, ra:=23,</span><br><span style="color: hsl(120, 100%, 40%);">+                               is_11bit:=0, burst_type:=BURST_TYPE_0,</span><br><span>                               fn:=42, arfcn:=871, qta:=0));</span><br><span>   PCU.receive(t_SD_PCUIF(g_pcu_conn_id,</span><br><span>                               tr_PCUIF_DATA_REQ(bts_nr:=0, trx_nr:=0, ts_nr:=0, block_nr:=?, fn:=?,</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: 3 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>