From 82af0b53d4d711853f414ad1a3197cb767665360 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Tue, 9 Jun 2020 20:21:43 +0700 Subject: library/RSL_Emulation: optional IPA stream ID patching Unfortunately, the latest release of osmo-bts still has a bug, that has been fixed [1] in the recent master. Because of that, most of the test cases in ttcn3-bts-test-latest currently fail. The problem is that all transceivers use IPAC_PROTO_RSL_TRX0, regardless of what the BSC tells them to use. Let's work this around by patching IPA stream ID in ASP_RSL_Unitdata messages coming from the IPA emulation. [1] I5927f59a49724170a63e87be604973f7c9d5d8be Change-Id: I66cecc9ea24ba79e1a03492e3fda2874951d37a0 --- library/RSL_Emulation.ttcn | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/library/RSL_Emulation.ttcn b/library/RSL_Emulation.ttcn index 9a074170..bb11340f 100644 --- a/library/RSL_Emulation.ttcn +++ b/library/RSL_Emulation.ttcn @@ -35,6 +35,12 @@ import from IPA_Types all; import from IPA_Emulation all; +modulepar { + /* Work around switch for ttcn3-bts-test-latest, enables patching of IPA + * stream ID in the "BSC" mode. See I5927f59a49724170a63e87be604973f7c9d5d8be. */ + boolean mp_rslem_patch_ipa_cid := false; +}; + /* General "base class" component definition, of which specific implementations * derive themselves by means of the "extends" feature */ type component RSL_DchanHdlr { @@ -396,6 +402,19 @@ runs on RSL_Emulation_CT return integer { return TrxConnMap[trx_nr]; } +/* Work around for a bug in osmo-bts when all transceivers use IPAC_PROTO_RSL_TRX0 */ +private function f_trx_conn_map_patch_ud(inout ASP_RSL_Unitdata ud) +runs on RSL_Emulation_CT { + for (var integer i := 0; i < sizeof(TrxConnMap); i := i + 1) { + if (ud.conn_id == TrxConnMap[i]) { + ud.streamId := f_streamId_by_trx(i); + return; /* We're done */ + } + } + + testcase.stop("Failed to patch IPA stream ID in ASP RSL UD: ", ud); +} + type component RSL_Emulation_CT { /* port facing down towards IPA emulation */ port IPA_RSL_PT IPA_PT; @@ -537,11 +556,17 @@ function main(boolean bts_role := true) runs on RSL_Emulation_CT { /* Forward common channel management to the special port for it */ [] IPA_PT.receive(tr_ASP_RSL_UD(tr_RSL_MsgTypeT(?), sid := ?)) -> value rx_rsl { + if (not bts_role and mp_rslem_patch_ipa_cid) { + f_trx_conn_map_patch_ud(rx_rsl); + } CCHAN_PT.send(rx_rsl); } /* Forward common channel management to the special port for it */ [] IPA_PT.receive(tr_ASP_RSL_UD(tr_RSL_MsgTypeC(?), sid := ?)) -> value rx_rsl { + if (not bts_role and mp_rslem_patch_ipa_cid) { + f_trx_conn_map_patch_ud(rx_rsl); + } CCHAN_PT.send(rx_rsl); } -- cgit v1.2.3