diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-10-28 10:33:23 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-10-28 09:52:34 +0000 |
commit | 9a5dd54350c649fc98c0d54891c33af131368b14 (patch) | |
tree | 61848d3a404b9e9879a47e964208d98686d9246d /library/SGsAP_Emulation.ttcn | |
parent | 1fd461a9362df4d65dfc59c3d976dea883782933 (diff) |
SGsAP_Emulation: Add functions to send MME or VLR reset
... including encoding/decoding of names between string and binary labels
Change-Id: I981c7c1d34f0db60031b5436739cd924e5a09407
Diffstat (limited to 'library/SGsAP_Emulation.ttcn')
-rw-r--r-- | library/SGsAP_Emulation.ttcn | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/library/SGsAP_Emulation.ttcn b/library/SGsAP_Emulation.ttcn index 0c37840b..968bcdd3 100644 --- a/library/SGsAP_Emulation.ttcn +++ b/library/SGsAP_Emulation.ttcn @@ -31,6 +31,7 @@ import from SGsAP_Types all; import from SGsAP_Templates all; import from Osmocom_Types all; import from IPL4asp_Types all; +import from DNS_Helpers all; type component SGsAP_ConnHdlr { port SGsAP_Conn_PT SGsAP; @@ -295,6 +296,7 @@ function main(SGsAPOps ops, SGsAP_conn_parameters p, charstring id) runs on SGsA var hexstring imsi; var SGsAP_RecvFrom mrf; var PDU_SGsAP msg; + var charstring vlr_name, mme_name; alt { /* SGsAP from client */ @@ -329,6 +331,24 @@ function main(SGsAPOps ops, SGsAP_conn_parameters p, charstring id) runs on SGsA f_create_expect(imsi, vc_conn); SGsAP_PROC.reply(SGsAPEM_register:{imsi, vc_conn}) to vc_conn; } + [] SGsAP_PROC.getcall(SGsAPEM_reset_mme:{?,-}) -> param(mme_name) { + var octetstring mme_enc, vlr_enc; + mme_enc := f_enc_dns_hostname(mme_name); + msg := f_sgsap_xceive(ts_SGsAP_RESET_IND_MME(mme_enc)); + vlr_enc := msg.sGsAP_RESET_ACK.vLR_Name.name; + vlr_name := f_dec_dns_hostname(vlr_enc); + SGsAP_PROC.reply(SGsAPEM_reset_mme:{mme_name, vlr_name}); + } + [] SGsAP_PROC.getcall(SGsAPEM_reset_vlr:{?,-}) -> param(vlr_name) { + var octetstring mme_enc, vlr_enc; + vlr_enc := f_enc_dns_hostname(vlr_name); + msg := f_sgsap_xceive(ts_SGsAP_RESET_IND_VLR(vlr_enc)); + mme_enc := msg.sGsAP_RESET_ACK.mME_Name.name; + mme_name := f_dec_dns_hostname(mme_enc); + SGsAP_PROC.reply(SGsAPEM_reset_vlr:{vlr_name, mme_name}); + } + + } } @@ -343,8 +363,11 @@ type record ExpectData { signature SGsAPEM_register(in hexstring imsi, in SGsAP_ConnHdlr hdlr); +signature SGsAPEM_reset_vlr(in charstring vlr_name, out charstring mme_name); +signature SGsAPEM_reset_mme(in charstring mme_name, out charstring vlr_name); + type port SGsAPEM_PROC_PT procedure { - inout SGsAPEM_register; + inout SGsAPEM_register, SGsAPEM_reset_vlr, SGsAPEM_reset_mme; } with { extension "internal" }; /* Function that can be used as create_cb and will usse the expect table */ @@ -399,6 +422,25 @@ function f_create_sgsap_expect(hexstring imsi) runs on SGsAP_ConnHdlr { } } +/* client/conn_hdlr side function to use procedure port to send RESET from emulated MME */ +function f_sgsap_reset_mme(charstring mme_name) runs on SGsAP_ConnHdlr return charstring { + var charstring vlr_name; + SGsAP_PROC.call(SGsAPEM_reset_mme:{mme_name, -}) { + [] SGsAP_PROC.getreply(SGsAPEM_reset_mme:{mme_name,?}) -> param(vlr_name) { + return vlr_name; + }; + } +} + +/* client/conn_hdlr side function to use procedure port to send RESET from emulated VLR */ +function f_sgsap_reset_vlr(charstring vlr_name) runs on SGsAP_ConnHdlr return charstring { + var charstring mme_name; + SGsAP_PROC.call(SGsAPEM_reset_vlr:{vlr_name, -}) { + [] SGsAP_PROC.getreply(SGsAPEM_reset_vlr:{vlr_name,?}) -> param(mme_name) { + return mme_name; + }; + } +} private function f_expect_table_init() runs on SGsAP_Emulation_CT { |