summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-06-09 20:21:43 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-06-09 20:28:44 +0700
commit82af0b53d4d711853f414ad1a3197cb767665360 (patch)
tree0c1e948c39114a3108bc1fdb4d67a1fa5d661294
parenta2e079cb5d2cfc0493b4f89f2688d91033eef9b5 (diff)
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
-rw-r--r--library/RSL_Emulation.ttcn25
1 files changed, 25 insertions, 0 deletions
diff --git a/library/RSL_Emulation.ttcn b/library/RSL_Emulation.ttcn
index 9a07417..bb11340 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);
}