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