diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-09-22 14:11:44 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-09-22 14:36:35 +0200 |
commit | cf2ada57ccdea21804a41c2eb8911afa605dee8d (patch) | |
tree | c39b049630d71f2698de30aa8af8dccf6672fd18 | |
parent | f04762d48d32a4c5b1d25b5dfa52d0cea3f80556 (diff) |
pcu: Allow empty rlcmac blocks in data_req
They are used by osmo-pcu to signal idle blocks.
Change-Id: Ied6b133be5bfd181f08c445b76af0f570edfd2a4
-rw-r--r-- | pcu/GPRS_Components.ttcn | 8 | ||||
-rw-r--r-- | pcu/PCUIF_Components.ttcn | 16 |
2 files changed, 19 insertions, 5 deletions
diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn index 4446b63b..10144985 100644 --- a/pcu/GPRS_Components.ttcn +++ b/pcu/GPRS_Components.ttcn @@ -1094,7 +1094,7 @@ runs on MS_BTS_IFACE_CT { arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)), block_nr := nr.blk_nr)); BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr, - tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH)) + tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH), *) ) -> value data_msg; } @@ -1138,6 +1138,12 @@ function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn, runs on MS_BTS_IFACE_CT { var BTS_PDTCH_Block data_msg; f_pcuif_rx_data_req_pdtch(data_msg, nr := nr); + + if (data_msg.dl_block == omit) { + setverdict(fail, "Expected RLCMAC block but received idle block (", data_msg.raw.len, ")"); + f_shutdown(__BFILE__, __LINE__); + } + dl_block := data_msg.dl_block; dl_fn := data_msg.raw.fn; diff --git a/pcu/PCUIF_Components.ttcn b/pcu/PCUIF_Components.ttcn index 66b2e21d..30982daf 100644 --- a/pcu/PCUIF_Components.ttcn +++ b/pcu/PCUIF_Components.ttcn @@ -133,12 +133,12 @@ template RAW_PCU_Command tr_RAW_PCU_CMD(template RAW_PCU_CommandType cmd := ?, type record BTS_PDTCH_Block { uint8_t bts_nr, PCUIF_data raw, - RlcmacDlBlock dl_block + RlcmacDlBlock dl_block optional }; type record BTS_PTCCH_Block { uint8_t bts_nr, PCUIF_data raw, - PTCCHDownlinkMsg dl_block + PTCCHDownlinkMsg dl_block optional }; type record BTS_CCCH_Block { uint8_t bts_nr, @@ -554,14 +554,22 @@ runs on RAW_PCU_BTS_CT { [decode_data_req] PCUIF.receive(tr_PCUIF_DATA_REQ(bts_nr, ?, ?, sapi := PCU_IF_SAPI_PDTCH)) -> value pcu_msg { pcu_msg_pdtch.bts_nr := bts_nr; pcu_msg_pdtch.raw := pcu_msg.u.data_req; - pcu_msg_pdtch.dl_block := dec_RlcmacDlBlock(pcu_msg_pdtch.raw.data); + if (pcu_msg_pdtch.raw.len != 0) { + pcu_msg_pdtch.dl_block := dec_RlcmacDlBlock(pcu_msg_pdtch.raw.data); + } else { + pcu_msg_pdtch.dl_block := omit; + } TC.send(pcu_msg_pdtch); repeat; } [decode_data_req] PCUIF.receive(tr_PCUIF_DATA_REQ(bts_nr, ?, ?, sapi := PCU_IF_SAPI_PTCCH)) -> value pcu_msg { pcu_msg_ptcch.bts_nr := bts_nr; pcu_msg_ptcch.raw := pcu_msg.u.data_req; - pcu_msg_ptcch.dl_block := dec_PTCCHDownlinkMsg(pcu_msg_ptcch.raw.data); + if (pcu_msg_ptcch.raw.len != 0) { + pcu_msg_ptcch.dl_block := dec_PTCCHDownlinkMsg(pcu_msg_ptcch.raw.data); + } else { + pcu_msg_ptcch.dl_block := omit; + } TC.send(pcu_msg_ptcch); repeat; } |