pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38678?usp=email )
Change subject: hnbgw: mgcp: Support running CS RAB ConnHdlr concurrently ......................................................................
hnbgw: mgcp: Support running CS RAB ConnHdlr concurrently
Use Mutex to serialize CRCX wildcard endpoint, in order to be able to properly steer the message to the good ConnHdlr.
Change-Id: Ibd97a37d98abfa746b58db0ea8bb591e7c8dc638 --- M hnbgw/ConnHdlr.ttcn M hnbgw/HNBGW_Tests.ttcn 2 files changed, 14 insertions(+), 11 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/78/38678/1
diff --git a/hnbgw/ConnHdlr.ttcn b/hnbgw/ConnHdlr.ttcn index 0d6b9cb..753087f 100644 --- a/hnbgw/ConnHdlr.ttcn +++ b/hnbgw/ConnHdlr.ttcn @@ -687,6 +687,15 @@ var template RAB_SetupOrModifyList rab_sml; timer T := 5.0;
+ /* This code block cannot be executed by more than one component at a time because the + * S1AP RAB Ass Request triggers the IUT to send MGCP CRCX PDU(s), with need to be routed + * to the respective ConnHdlr component (us). This is why we need to ensure that only + * one ConnHdlr is triggering PFCP session establishment at the given moment of time. + */ + f_Mutex_lock(__BFILE__, __LINE__); + + f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); + /* Send RAB Assignment Request */ rab_sml := ts_RAB_SML(t_RAB_id(23), f_ts_RAB_TLA(g_pars.mgcp_pars.cn_rtp_ip), t_RAB_binding_port(g_pars.mgcp_pars.cn_rtp_port)); tx := valueof(ts_RANAP_RabAssReq(rab_sml)); @@ -697,11 +706,15 @@ alt { [] MGCP.receive(tr_CRCX) -> value mgcp_cmd { log("CRCX1", mgcp_cmd); + /* Unregister and unlock the mutex, enabling other components to + * establish MGCP sessions after us. */ + f_Mutex_unlock(__BFILE__, __LINE__); var template MgcpResponse mgcp_rsp := f_handle_crcx(g_pars.mgcp_pars, mgcp_cmd); MGCP.send(valueof(mgcp_rsp)); } [] T.timeout { - setverdict(fail, "Timeout waiting for MGCP"); + /* No need to f_Mutex_unlock since we are exiting anyway... */ + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for MGCP"); } } T.stop; diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn index 5258a11..78f0a10 100644 --- a/hnbgw/HNBGW_Tests.ttcn +++ b/hnbgw/HNBGW_Tests.ttcn @@ -1062,8 +1062,6 @@ var RANAP_PDU tx; timer T := 5.0;
- f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); - f_statsd_reset();
tx := f_build_initial_ue(g_pars); @@ -1106,8 +1104,6 @@ var RANAP_PDU tx; timer T := 5.0;
- f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); - f_statsd_reset();
tx := f_build_initial_ue(g_pars); @@ -1162,8 +1158,6 @@ var RANAP_PDU tx; timer T := 15.0;
- f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); - f_statsd_reset();
tx := f_build_initial_ue(g_pars); @@ -1399,8 +1393,6 @@ var RANAP_PDU tx; timer T := 5.0;
- f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); - tx := f_build_initial_ue(g_pars); f_iuh2iu_connect(tx);
@@ -2324,8 +2316,6 @@ var RANAP_PDU tx; timer T := 5.0;
- f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); - tx := f_build_initial_ue(g_pars); f_iuh2iu_connect(tx);