<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23256">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: transmit PCUIF DATA.ind with len=0 when no UL data to transmit<br><br>older osmo-pcu versions can cope well with this change, they will simply<br>print an error upon ach data_len=0 messages received and submit a GSMTAP<br>block, then discard it, so tests still pass.<br><br>Related: OS#5020<br>Change-Id: Ib4f97a9bcfa68230945effeb6412218faa64ec78<br>---<br>M library/PCUIF_Types.ttcn<br>M pcu/PCUIF_Components.ttcn<br>2 files changed, 56 insertions(+), 23 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/56/23256/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index ef27b11..96b2bac 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -161,7 +161,7 @@</span><br><span>     uint32_t                hLayer1,</span><br><span>     PCUIF_InfoTrxTsList     ts</span><br><span> } with { variant (pdch_mask) "BITORDER(msb)" };</span><br><span style="color: hsl(0, 100%, 40%);">-private type record length(8) of PCUIF_InfoV10Trx PCUIF_InfoV10TrxList;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(8) of PCUIF_InfoV10Trx PCUIF_InfoV10TrxList;</span><br><span> </span><br><span> /* Version <= 9 specific coding */</span><br><span> private type record PCUIF_InfoV09Trx {</span><br><span>diff --git a/pcu/PCUIF_Components.ttcn b/pcu/PCUIF_Components.ttcn</span><br><span>index 50de700..2a505d2 100644</span><br><span>--- a/pcu/PCUIF_Components.ttcn</span><br><span>+++ b/pcu/PCUIF_Components.ttcn</span><br><span>@@ -308,6 +308,8 @@</span><br><span> </span><br><span>    /* Whether to forward PTCCH/U burst events to the TC */</span><br><span>      var boolean cfg_ptcch_burst_fwd := false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var PCUIF_info_ind g_info_ind;</span><br><span> }</span><br><span> </span><br><span> /* Queue received messages from Test Case, they will eventually be scheduled and</span><br><span>@@ -337,6 +339,55 @@</span><br><span>           }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Get first message from queue. true if non-empty, false otherwise */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tx_data_ind_fn(integer bts_nr, integer fn)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_BTS_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+    var boolean has_msg, use_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ var PCUIF_InfoV10TrxList trx_list := g_info_ind.trx.v10;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    for (var uint8_t ts_nr := 0; ts_nr < 8; ts_nr := ts_nr + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              for (var integer trx_nr := 0; trx_nr < lengthof(trx_list); trx_nr := trx_nr + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 var charstring prefix := "BTS=" & int2str(bts_nr) & ",TRX=" & int2str(trx_nr) & ",TS=" & int2str(ts_nr) & ",FN=" & int2str(fn) & ": ";</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (trx_list[trx_nr].pdch_mask[ts_nr] == '0'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              log(prefix, "disabled");</span><br><span style="color: hsl(120, 100%, 40%);">+                            continue; /* TRX+TS not activated */</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%);">+                   /* Check if we reached time to serve the first DATA.ind message in the queue: */</span><br><span style="color: hsl(120, 100%, 40%);">+                      has_msg := f_PCUIF_MsgQueue_first(pdtch_data_queue, pcu_msg) and</span><br><span style="color: hsl(120, 100%, 40%);">+                                 pcu_msg.u.data_ind.trx_nr == trx_nr and</span><br><span style="color: hsl(120, 100%, 40%);">+                               pcu_msg.u.data_ind.ts_nr == ts_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+                 use_msg := has_msg and (pcu_msg.u.data_ind.fn == 0 or pcu_msg.u.data_ind.fn == fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (use_msg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                /* Dequeue a DATA.ind message */</span><br><span style="color: hsl(120, 100%, 40%);">+                              f_PCUIF_MsgQueue_dequeue(pdtch_data_queue, pcu_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                          /* Patch TDMA frame / block number */</span><br><span style="color: hsl(120, 100%, 40%);">+                         pcu_msg.u.data_ind.fn := fn;</span><br><span style="color: hsl(120, 100%, 40%);">+                          pcu_msg.u.data_ind.block_nr := 0; /* FIXME! */</span><br><span style="color: hsl(120, 100%, 40%);">+                                log(prefix, "DATA.ind");</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else if (has_msg and pcu_msg.u.data_ind.fn < fn) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       setverdict(fail, "We are late scheduling the block! ", pcu_msg.u.data_ind.fn, " < ", fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              /* NOPE.ind: */</span><br><span style="color: hsl(120, 100%, 40%);">+                               pcu_msg := valueof(ts_PCUIF_DATA_IND(bts_nr, trx_nr, ts_nr, 0 /* FIXME */,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 PCU_IF_SAPI_PDTCH, ''O, fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   trx_list[trx_nr].arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               rssi := -80, ber10k := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                     ta_offs_qbits := 0, lqual_cb := 10));</span><br><span style="color: hsl(120, 100%, 40%);">+                            log(prefix, "DATA.ind (len=0)");</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%);">+                   PCUIF.send(pcu_msg); /* Send to the PCU and notify the TC */</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (use_msg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                TC.send(ts_RAW_PCU_CLCK_EV(TDMA_EV_PDTCH_BLOCK_SENT, fn));</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 style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Handle schedule events and manage actions: Send msgs over PCUIF to PCU,</span><br><span>  * advertise Test Case about sent messages, etc. */</span><br><span> private altstep as_BTS_CT_TDMASched(integer bts_nr)</span><br><span>@@ -344,7 +395,6 @@</span><br><span>     var PCUIF_Message pcu_msg;</span><br><span>   var RAW_PCU_Event event;</span><br><span>     var integer ev_begin_fn;</span><br><span style="color: hsl(0, 100%, 40%);">-        var integer next_fn;</span><br><span> </span><br><span>     [] CLCK.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_BEG)) -> value event {</span><br><span>          /* If the RTS queue for PDTCH is not empty, send a message */</span><br><span>@@ -362,29 +412,10 @@</span><br><span>                PCUIF.send(ts_PCUIF_TIME_IND(bts_nr, event.data.tdma_fn));</span><br><span>           repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-       [lengthof(pdtch_data_queue) > 0] CLCK.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_END)) -> value event {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] CLCK.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_END)) -> value event {</span><br><span>          /* FN matching the beginning of current block: */</span><br><span>            ev_begin_fn := event.data.tdma_fn - 3;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          /* Check if we reached time to serve the first DATA.ind message in the queue: */</span><br><span style="color: hsl(0, 100%, 40%);">-                f_PCUIF_MsgQueue_first(pdtch_data_queue, pcu_msg);</span><br><span style="color: hsl(0, 100%, 40%);">-              next_fn := pcu_msg.u.data_ind.fn;</span><br><span style="color: hsl(0, 100%, 40%);">-               if (next_fn != 0 and next_fn != ev_begin_fn) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  if (next_fn < ev_begin_fn) {</span><br><span style="color: hsl(0, 100%, 40%);">-                         setverdict(fail, "We are late scheduling the block! ", next_fn, " < ", ev_begin_fn);</span><br><span style="color: hsl(0, 100%, 40%);">-                             mtc.stop;</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-                       repeat;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">-               /* Dequeue a DATA.ind message */</span><br><span style="color: hsl(0, 100%, 40%);">-                f_PCUIF_MsgQueue_dequeue(pdtch_data_queue, pcu_msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            /* Patch TDMA frame / block number */</span><br><span style="color: hsl(0, 100%, 40%);">-           pcu_msg.u.data_ind.fn := ev_begin_fn;</span><br><span style="color: hsl(0, 100%, 40%);">-           pcu_msg.u.data_ind.block_nr := 0; /* FIXME! */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          PCUIF.send(pcu_msg); /* Send to the PCU and notify the TC */</span><br><span style="color: hsl(0, 100%, 40%);">-            TC.send(ts_RAW_PCU_CLCK_EV(TDMA_EV_PDTCH_BLOCK_SENT, ev_begin_fn));</span><br><span style="color: hsl(120, 100%, 40%);">+           f_tx_data_ind_fn(bts_nr, ev_begin_fn);</span><br><span>               repeat;</span><br><span>              }</span><br><span>    [lengthof(ptcch_rts_queue) > 0] CLCK.receive(tr_RAW_PCU_EV(TDMA_EV_PTCCH_DL_BLOCK)) -> value event {</span><br><span>@@ -417,6 +448,8 @@</span><br><span>     var BTS_PTCCH_Block pcu_msg_ptcch;</span><br><span>   var BTS_CCCH_Block pcu_msg_rr;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    g_info_ind := info_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* Init TDMA clock generator (so we can stop and start it) */</span><br><span>        vc_CLCK_GEN := RAW_PCU_ClckGen_CT.create("ClckGen-" & int2str(bts_nr)) alive;</span><br><span>  connect(vc_CLCK_GEN:CLCK, self:CLCK);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23256">change 23256</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/+/23256"/><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: Ib4f97a9bcfa68230945effeb6412218faa64ec78 </div>
<div style="display:none"> Gerrit-Change-Number: 23256 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>