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/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16487 ) Change subject: pcu: Support sending message to PCU at specific FN ...................................................................... pcu: Support sending message to PCU at specific FN Change-Id: I81a29b4885f3fc6b753a1612d5fd369cd18f5dc6 --- M library/RLCMAC_Types.ttcn M pcu/PCUIF_RAW_Components.ttcn M pcu/PCU_Tests_RAW.ttcn 3 files changed, 65 insertions(+), 13 deletions(-) Approvals: laforge: Looks good to me, approved fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn index 8e6942e..3a1ecb1 100644 --- a/library/RLCMAC_Types.ttcn +++ b/library/RLCMAC_Types.ttcn @@ -31,6 +31,16 @@ RRBP_Nplus26_mod_2715648 ('11'B) } with { variant "FIELDLENGTH(2)" }; + function f_rrbp_fn_delay(MacRrbp rrbp) return uint32_t { + select (rrbp) { + case (RRBP_Nplus13_mod_2715648) { return 13; } + case (RRBP_Nplus17_or_18_mod_2715648) { return 17; } + case (RRBP_Nplus21_or_22_mod_2715648) { return 21; } + case (RRBP_Nplus26_mod_2715648) { return 26; } + } + return 0; + } + /* Partof DL RLC data block and DL RLC/MAC ctrl block */ type record DlMacHeader { MacPayloadType payload_type, diff --git a/pcu/PCUIF_RAW_Components.ttcn b/pcu/PCUIF_RAW_Components.ttcn index 5516d83..4ed57e5 100644 --- a/pcu/PCUIF_RAW_Components.ttcn +++ b/pcu/PCUIF_RAW_Components.ttcn @@ -228,6 +228,18 @@ } } +/* Get first message from queue. true if non-empty, false otherwise */ +private function f_PCUIF_MsgQueue_first(inout PCUIF_MsgQueue queue, + out PCUIF_Message msg) return boolean +{ + if (lengthof(queue) == 0) { + return false; + } + + msg := queue[0]; + return true; +} + /* Multiple base stations can be connected to the PCU. This component * represents one BTS with an associated TDMA clock generator. */ type component RAW_PCU_BTS_CT { @@ -250,6 +262,9 @@ var boolean cfg_ptcch_burst_fwd := false; } +/* Queue received messages from Test Case, they will eventually be scheduled and + * sent according to their FN. FN value of 0 has the special meaning of "schedule + * as soon as possible". */ private altstep as_BTS_CT_MsgQueue(integer bts_nr) runs on RAW_PCU_BTS_CT { var PCUIF_Message pcu_msg; @@ -274,11 +289,14 @@ } } +/* 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) runs on RAW_PCU_BTS_CT { 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 */ @@ -299,6 +317,17 @@ [lengthof(pdtch_data_queue) > 0] 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); diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn index cddf9f6..e4b03c1 100644 --- a/pcu/PCU_Tests_RAW.ttcn +++ b/pcu/PCU_Tests_RAW.ttcn @@ -663,13 +663,16 @@ } /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */ -private function f_pcuif_tx_data_ind(octetstring data, int16_t lqual_cb := 0) +private function f_pcuif_tx_data_ind(octetstring data, int16_t lqual_cb := 0, uint32_t fn := 0) runs on RAW_PCU_Test_CT { - + var template RAW_PCU_EventParam ev_param := {tdma_fn := ? }; BTS.send(ts_PCUIF_DATA_IND(bts_nr := 0, trx_nr := 0, ts_nr := 7, block_nr := 0, sapi := PCU_IF_SAPI_PDTCH, data := data, - fn := 0, arfcn := 871, lqual_cb := lqual_cb)); - BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_SENT)); + fn := fn, arfcn := 871, lqual_cb := lqual_cb)); + if (fn != 0) { + ev_param := {tdma_fn := fn }; + } + BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_SENT, ev_param)); } /* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */ @@ -700,7 +703,7 @@ fn := 0, arfcn := 871, sapi := PCU_IF_SAPI_PCH, data := macblock)); } -private function f_tx_rlcmac_ul_block(template (value) RlcmacUlBlock ul_data, int16_t lqual_cb := 0) +private function f_tx_rlcmac_ul_block(template (value) RlcmacUlBlock ul_data, int16_t lqual_cb := 0, uint32_t fn := 0) runs on RAW_PCU_Test_CT { var octetstring data; /* Encode the payload of DATA.ind */ @@ -708,7 +711,7 @@ data := f_pad_oct(data, 23, '00'O); /* CS-1 */ /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */ - f_pcuif_tx_data_ind(data, lqual_cb); + f_pcuif_tx_data_ind(data, lqual_cb, fn); } private function f_tx_rlcmac_ul_n_blocks(PacketUlAssign ul_tbf_ass, integer num_blocks := 1) @@ -730,16 +733,19 @@ } } -private function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block) +private function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn) runs on RAW_PCU_Test_CT { var PCUIF_Message pcu_msg; f_pcuif_rx_data_req(pcu_msg); dl_block := dec_RlcmacDlBlock(pcu_msg.u.data_req.data); + dl_fn := pcu_msg.u.data_req.fn; } private function f_rx_rlcmac_dl_block_exp_ack_nack(out RlcmacDlBlock dl_block) runs on RAW_PCU_Test_CT { - f_rx_rlcmac_dl_block(dl_block); + var uint32_t dl_fn; + + f_rx_rlcmac_dl_block(dl_block, dl_fn); if (not match(dl_block, tr_RLCMAC_UL_ACK_NACK(ul_tfi := ?, tlli := ?))) { setverdict(fail, "Failed to match Packet Uplink ACK / NACK"); mtc.stop; @@ -748,24 +754,30 @@ private function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block) runs on RAW_PCU_Test_CT { - f_rx_rlcmac_dl_block(dl_block); + var uint32_t dl_fn; + + f_rx_rlcmac_dl_block(dl_block, dl_fn); if (not match(dl_block, tr_RLCMAC_DUMMY_CTRL())) { setverdict(fail, "Failed to match Packet DUMMY DL"); mtc.stop; } } -private function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, octetstring data) +private function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t ack_fn, octetstring data) runs on RAW_PCU_Test_CT { + var PCUIF_Message pcu_msg; + var uint32_t dl_fn; var template RlcmacDlBlock dl_template := tr_RLCMAC_DATA_RRBP; dl_template.data.blocks := ?; - f_rx_rlcmac_dl_block(dl_block); + f_rx_rlcmac_dl_block(dl_block, dl_fn); if (not match(dl_block, dl_template)) { setverdict(fail, "Failed to match Packet data: ", dl_block, " vs ", dl_template); mtc.stop; } + ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data.mac_hdr.mac_hdr.rrbp); + if (lengthof(dl_block.data.blocks) < 1) { setverdict(fail, "DL block has no LLC payload: ", dl_block); mtc.stop; @@ -1358,6 +1370,7 @@ var PCUIF_Message pcu_msg; var octetstring data := f_rnd_octstring(10); var boolean ok; + var uint32_t sched_fn; var OCT4 tlli := '00000001'O; var AckNackDescription ack_nack_desc; @@ -1407,10 +1420,10 @@ /* Wait timer X2002 and DL block is available after CCCH IMM ASS: */ f_sleep(X2002); - f_rx_rlcmac_dl_block_exp_data(dl_block, data); + f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data); /* ACK the DL block */ - f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc)); + f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn); } control { -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16487 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: I81a29b4885f3fc6b753a1612d5fd369cd18f5dc6 Gerrit-Change-Number: 16487 Gerrit-PatchSet: 5 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <axilirator at gmail.com> Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-Reviewer: pespin <pespin at sysmocom.de> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191206/c774029e/attachment.htm>