diff options
Diffstat (limited to 'library/Osmocom_CTRL_Adapter.ttcn')
-rw-r--r-- | library/Osmocom_CTRL_Adapter.ttcn | 81 |
1 files changed, 69 insertions, 12 deletions
diff --git a/library/Osmocom_CTRL_Adapter.ttcn b/library/Osmocom_CTRL_Adapter.ttcn index 0be3ebbf..6a9706eb 100644 --- a/library/Osmocom_CTRL_Adapter.ttcn +++ b/library/Osmocom_CTRL_Adapter.ttcn @@ -22,16 +22,49 @@ import from Osmocom_CTRL_Types all; type component CTRL_Adapter_CT { var IPA_Emulation_CT vc_CTRL_IPA; + var boolean ipa_is_up := false; /* test port for the CTRL interface of the BSC */ port IPA_CTRL_PT IPA_CTRL; } +/* wait for IPA CTRL link to connect and send UP */ +function f_ipa_ctrl_wait_link_up() +runs on CTRL_Adapter_CT { + if (ipa_is_up == true) { + return; + } + timer T := 10.0; + T.start; + alt { + [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { ipa_is_up := true; } + [] T.timeout { + setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_UP"); + mtc.stop; + } + } +} -/*! Start the CTRL connection to the specified BSC IP+Port */ -function f_ipa_ctrl_start(charstring bsc_host, PortNumber bsc_port) +/* wait for IPA CTRL link to connect and send DOWN */ +function f_ipa_ctrl_wait_link_down() runs on CTRL_Adapter_CT { - var charstring id := "IPA-CTRL" + if (ipa_is_up == false) { + return; + } timer T := 10.0; + T.start; + alt { + [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_DOWN)) { ipa_is_up := false; } + [] T.timeout { + setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_DOWN"); + mtc.stop; + } + } +} + +/*! Start the CTRL client connection to the specified CTRL IP+Port server*/ +function f_ipa_ctrl_start_client(charstring bsc_host, PortNumber bsc_port) +runs on CTRL_Adapter_CT { + var charstring id := "IPA-CTRL-CLI" vc_CTRL_IPA := IPA_Emulation_CT.create(id & "-IPA"); @@ -41,15 +74,22 @@ runs on CTRL_Adapter_CT { vc_CTRL_IPA.start(IPA_Emulation.main_client(bsc_host, bsc_port, "", 0, c_IPA_default_ccm_pars, false)); - /* wait for IPA CTRL link to connect and send UP */ - T.start; - alt { - [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { } - [] T.timeout { - setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_UP"); - mtc.stop; - } - } + f_ipa_ctrl_wait_link_up(); +} + +/*! Start the CTRL server on the specified CTRL IP+Port */ +function f_ipa_ctrl_start_server(charstring listen_host, PortNumber listen_port) +runs on CTRL_Adapter_CT { + var charstring id := "IPA-CTRL-SRV" + timer T := 10.0; + + vc_CTRL_IPA := IPA_Emulation_CT.create(id & "-IPA"); + + map(vc_CTRL_IPA:IPA_PORT, system:IPA_CODEC_PT); + connect(vc_CTRL_IPA:IPA_CTRL_PORT, self:IPA_CTRL); + + vc_CTRL_IPA.start(IPA_Emulation.main_server(listen_host, listen_port, false, + server_stop_on_ipa_ev_down := false)); } function f_ipa_ctrl_stop() runs on CTRL_Adapter_CT { @@ -79,5 +119,22 @@ function f_ctrl_get_exp_trx(IPA_CTRL_PT pt, integer bts_nr, integer trx_nr, Ctrl f_ctrl_get_exp(pt, valueof(ts_bts_trx(bts_nr, trx_nr)) & suffix, exp); } +template (value) charstring ts_fsm_inst_id(charstring class_name, charstring inst_id) := + "fsm." & class_name & ".id." & inst_id & "."; + +/* obtain the state of a specified FSM instance */ +function f_ctrl_get_fsm_inst_state(IPA_CTRL_PT pt, charstring fsm_class_name, charstring fsm_inst_id) +return charstring { + return f_ctrl_get(pt, valueof(ts_fsm_inst_id(fsm_class_name, fsm_inst_id)) & "state"); +} + +/* expect the state of a specified FSM instance to match template */ +function f_ctrl_get_exp_inst_state(IPA_CTRL_PT pt, charstring fsm_class_name, + template (value) charstring fsm_inst_id, + template (present) CtrlValue exp) +{ + f_ctrl_get_exp(pt, valueof(ts_fsm_inst_id(fsm_class_name, valueof(fsm_inst_id))) & "state", exp); +} + } |