hlr: add emulated GSUP server (second HLR)
Prepare for upcoming D-GSM test, which needs to emulate a GSUP server. Related: OS#4380 Change-Id: Idbfe8a145c90a524145089a06d9bbefac4d7edd8
This commit is contained in:
parent
deb80a6a82
commit
6e81f7e940
|
@ -36,6 +36,7 @@ import from MSLookup_mDNS_Emulation all;
|
|||
import from MSLookup_mDNS_Templates all;
|
||||
|
||||
type component test_CT extends CTRL_Adapter_CT {
|
||||
/* emulated GSUP client (MSC/SGSN) */
|
||||
var IPA_Emulation_CT vc_IPA;
|
||||
var IPA_CCM_Parameters ccm_pars;
|
||||
/* legacy tests without ConnHdlr */
|
||||
|
@ -49,10 +50,15 @@ type component test_CT extends CTRL_Adapter_CT {
|
|||
|
||||
var MSLookup_mDNS_Emulation_CT vc_MSLookup_mDNS;
|
||||
|
||||
/* emulated GSUP server (second HLR) */
|
||||
var IPA_Emulation_CT vc_IPA_server;
|
||||
var GSUP_Emulation_CT vc_GSUP_server;
|
||||
|
||||
timer g_Tguard := 10.0;
|
||||
};
|
||||
|
||||
modulepar {
|
||||
/* OsmoHLR */
|
||||
charstring mp_hlr_ip := "127.0.0.1";
|
||||
integer mp_hlr_gsup_port := 4222;
|
||||
integer mp_hlr_ctrl_port := 4259;
|
||||
|
@ -60,6 +66,10 @@ modulepar {
|
|||
when IE ts_GSUP_IE_NUM_VECTORS_REQ is absent */
|
||||
integer mp_default_num_auth_tuples := 5;
|
||||
|
||||
/* emulated GSUP server (second HLR) */
|
||||
charstring mp_hlr_ts_ip := "127.0.0.99";
|
||||
integer mp_hlr_ts_port := 4222;
|
||||
|
||||
/* drop after osmo-hlr release > 1.2.0 */
|
||||
boolean mp_hlr_supports_dgsm := true;
|
||||
};
|
||||
|
@ -90,6 +100,11 @@ type component HLR_ConnHdlr extends GSUP_ConnHdlr {
|
|||
var HLR_ConnHdlrPars g_pars;
|
||||
port TELNETasp_PT VTY;
|
||||
port MSLookup_mDNS_PT mDNS;
|
||||
|
||||
/* Pass from test_CT for explicit addressing */
|
||||
var GSUP_Emulation_CT vc_GSUP_server;
|
||||
var GSUP_Emulation_CT vc_GSUP_client;
|
||||
var IPA_CCM_Parameters ccm_pars_client;
|
||||
}
|
||||
|
||||
type record HLR_ConnHdlrPars {
|
||||
|
@ -138,6 +153,7 @@ private altstep as_Tguard() runs on test_CT {
|
|||
}
|
||||
}
|
||||
|
||||
/* emulated GSUP client (MSC/SGSN) */
|
||||
function f_init_gsup(charstring id, boolean legacy) runs on test_CT {
|
||||
id := id & "-GSUP";
|
||||
var GsupOps ops := {
|
||||
|
@ -180,12 +196,29 @@ function f_init_gsup(charstring id, boolean legacy) runs on test_CT {
|
|||
}
|
||||
}
|
||||
|
||||
/* emulated GSUP server (second HLR) */
|
||||
function f_init_gsup_server(charstring id) runs on test_CT {
|
||||
id := id & "-GSUP-server";
|
||||
var GsupOps ops := {
|
||||
create_cb := refers(GSUP_Emulation.ExpectedCreateCallback)
|
||||
}
|
||||
|
||||
vc_GSUP_server := GSUP_Emulation_CT.create(id);
|
||||
vc_IPA_server := IPA_Emulation_CT.create(id & "-IPA");
|
||||
|
||||
connect(vc_GSUP_server:GSUP, vc_IPA_server:IPA_GSUP_PORT);
|
||||
map(vc_IPA_server:IPA_PORT, system:IPA_CODEC_PT);
|
||||
|
||||
vc_GSUP_server.start(GSUP_Emulation.main(ops, id));
|
||||
vc_IPA_server.start(IPA_Emulation.main_server(mp_hlr_ts_ip, mp_hlr_ts_port));
|
||||
}
|
||||
|
||||
function f_init_mslookup() runs on test_CT {
|
||||
vc_MSLookup_mDNS := MSLookup_mDNS_Emulation_CT.create;
|
||||
vc_MSLookup_mDNS.start(MSLookup_mDNS_Emulation.f_main());
|
||||
}
|
||||
|
||||
function f_init(boolean legacy := true) runs on test_CT {
|
||||
function f_init(boolean legacy := true, boolean gsup_server := false) runs on test_CT {
|
||||
|
||||
/* activate default guard timer to ensure all tests eventually terminate */
|
||||
g_Tguard.start;
|
||||
|
@ -195,10 +228,20 @@ function f_init(boolean legacy := true) runs on test_CT {
|
|||
f_init_vty();
|
||||
f_init_mslookup();
|
||||
|
||||
if (gsup_server) {
|
||||
f_init_gsup_server("HLR_Test");
|
||||
}
|
||||
|
||||
f_ipa_ctrl_start(mp_hlr_ip, mp_hlr_ctrl_port);
|
||||
}
|
||||
|
||||
function f_start_handler(void_fn fn, HLR_ConnHdlrPars pars) runs on test_CT return HLR_ConnHdlr {
|
||||
/*! Start HLR_ConnHdlr from testCT in a separate thread.
|
||||
* \param void_fn function to run inside the thread.
|
||||
* \param gsup_server if true, connect the emulated GSUP server ports to the new HLR_ConnHdlr. Then both the emulated
|
||||
* GSUP client (MSC/SGSN) and server (second HLR) are connected. Explicit addressing with "to" and
|
||||
* "from" must be used, i.e. 'GSUP.receive(tr_GSUP_UL_REQ(...)) from vc_GSUP_server'. */
|
||||
function f_start_handler(void_fn fn, HLR_ConnHdlrPars pars, boolean gsup_server := false) runs on test_CT
|
||||
return HLR_ConnHdlr {
|
||||
var HLR_ConnHdlr vc_conn;
|
||||
var charstring id := testcasename();
|
||||
|
||||
|
@ -207,7 +250,14 @@ function f_start_handler(void_fn fn, HLR_ConnHdlrPars pars) runs on test_CT retu
|
|||
connect(vc_conn:GSUP_PROC, vc_GSUP:GSUP_PROC);
|
||||
connect(vc_conn:mDNS, vc_MSLookup_mDNS:mDNS);
|
||||
|
||||
vc_conn.start(f_handler_init(fn, id, pars));
|
||||
if (gsup_server) {
|
||||
connect(vc_conn:GSUP, vc_GSUP_server:GSUP_CLIENT);
|
||||
connect(vc_conn:GSUP_PROC, vc_GSUP_server:GSUP_PROC);
|
||||
vc_conn.start(f_handler_init(fn, id, vc_GSUP_server, vc_GSUP, ccm_pars, pars));
|
||||
} else {
|
||||
vc_conn.start(f_handler_init(fn, id, omit, vc_GSUP, ccm_pars, pars));
|
||||
}
|
||||
|
||||
return vc_conn;
|
||||
}
|
||||
|
||||
|
@ -218,12 +268,23 @@ private function f_handler_init_vty() runs on HLR_ConnHdlr {
|
|||
}
|
||||
|
||||
/* first function inside ConnHdlr component; sets g_pars + starts function */
|
||||
function f_handler_init(void_fn fn, charstring id, template (omit) HLR_ConnHdlrPars pars := omit)
|
||||
function f_handler_init(void_fn fn, charstring id,
|
||||
template (omit) GSUP_Emulation_CT vc_GSUP_server_test_ct,
|
||||
GSUP_Emulation_CT vc_GSUP_client_test_ct,
|
||||
IPA_CCM_Parameters ccm_pars_client_test_ct,
|
||||
template (omit) HLR_ConnHdlrPars pars := omit)
|
||||
runs on HLR_ConnHdlr
|
||||
{
|
||||
/* Pass from test_CT for explicit addressing */
|
||||
if (isvalue(vc_GSUP_server_test_ct)) {
|
||||
vc_GSUP_server := valueof(vc_GSUP_server_test_ct);
|
||||
}
|
||||
vc_GSUP_client := vc_GSUP_client_test_ct;
|
||||
ccm_pars_client := ccm_pars_client_test_ct;
|
||||
|
||||
if (isvalue(pars)) {
|
||||
g_pars := valueof(pars);
|
||||
f_create_gsup_expect(hex2str(g_pars.sub.imsi));
|
||||
f_create_gsup_expect_explicit(hex2str(g_pars.sub.imsi), vc_GSUP_client);
|
||||
}
|
||||
f_handler_init_vty();
|
||||
fn.apply();
|
||||
|
|
|
@ -295,4 +295,11 @@ function f_create_gsup_expect(charstring imsi) runs on GSUP_ConnHdlr {
|
|||
}
|
||||
}
|
||||
|
||||
/* Same as f_create_gsup_expect, but with explicit addressing. Needed when connecting multiple ports to GSUP_PROC. */
|
||||
function f_create_gsup_expect_explicit(charstring imsi, GSUP_Emulation_CT ct) runs on GSUP_ConnHdlr {
|
||||
GSUP_PROC.call(GSUPEM_register:{imsi, self}) to ct {
|
||||
[] GSUP_PROC.getreply(GSUPEM_register:{?,?}) {};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue