diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-08-02 13:17:47 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-08-04 13:32:32 +0200 |
commit | b1a83fbb6d24949e16876a4810849bcae1bd909b (patch) | |
tree | 8a216fc19d9a3205ae58c68c6a0479ae5be52c16 | |
parent | db247f8318f6cc8f48f2de0d5ae8deaaef4d302c (diff) |
cbc: Test sending Unknown TAI List to osmo-cbc
Related: OS#4945
Change-Id: I7d8cf5e6498d03ad340b8f843ce93a20171e9fca
-rw-r--r-- | cbc/CBC_Tests.ttcn | 21 | ||||
-rw-r--r-- | cbc/MME_ConnectionHandler.ttcn | 14 | ||||
-rw-r--r-- | library/sbcap/SBC_AP_Templates.ttcn | 39 |
3 files changed, 71 insertions, 3 deletions
diff --git a/cbc/CBC_Tests.ttcn b/cbc/CBC_Tests.ttcn index 406baedf..9beaddfe 100644 --- a/cbc/CBC_Tests.ttcn +++ b/cbc/CBC_Tests.ttcn @@ -160,6 +160,7 @@ private function f_init_pars_mme(charstring mme_host, integer mme_sbcap_port, start_fn := refers(f_MME_ConnHdlr_start_fn_void), exp_cbs_msg := omit, write_replace_warning_ind_cause := omit, + write_repl_unknown_TAIs := omit, bcast_cell_id_list := omit }; return pars; @@ -498,6 +499,25 @@ testcase TC_ecbe_create_delete_mme_indication() runs on test_CT { f_shutdown_helper(); } +/* Create and delete message with MME available. MME reports + * Write-Replace-Response with Unknown TAI IE. + */ +testcase TC_ecbe_create_delete_mme_unknown_tai() runs on test_CT { + var template (value) List_of_TAIs write_repl_unknown_TAIs; + var template (value) CBS_Message msg := t_CBSmsg(48, 16752); + + f_init(num_bsc := 0, num_mme := 1); + + write_repl_unknown_TAIs := {{ts_SBCAP_TAI(f_enc_mcc_mnc('901'H, '70'H), 1234)}}; + g_pars_MME[0].start_fn := refers(f_mme_create_and_delete); + g_pars_MME[0].exp_cbs_msg := valueof(msg); + g_pars_MME[0].write_replace_warning_ind_cause := SBC_AP_Cause_message_accepted; + g_pars_MME[0].write_repl_unknown_TAIs := valueof(write_repl_unknown_TAIs); + f_start(); + f_create_and_delete(valueof(msg)); + f_shutdown_helper(); +} + /* Create and delete message with both BSC and MME available */ testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT { f_init(num_bsc := 1, num_mme := 1); @@ -585,6 +605,7 @@ control { execute( TC_ecbe_create_delete_ci() ); execute( TC_ecbe_create_delete_lai() ); execute( TC_ecbe_create_delete_mme_indication() ); + execute( TC_ecbe_create_delete_mme_unknown_tai() ); execute( TC_ecbe_create_delete_bsc_and_mme() ); execute( TC_ecbe_create_delete_bsc_server() ); execute( TC_ecbe_create_delete_mme_server() ); diff --git a/cbc/MME_ConnectionHandler.ttcn b/cbc/MME_ConnectionHandler.ttcn index ed0502e4..4bcc8533 100644 --- a/cbc/MME_ConnectionHandler.ttcn +++ b/cbc/MME_ConnectionHandler.ttcn @@ -45,6 +45,7 @@ type record MME_ConnHdlrPars { void_fn start_fn, CBS_Message exp_cbs_msg optional, SBC_AP_Cause write_replace_warning_ind_cause optional, + List_of_TAIs write_repl_unknown_TAIs optional, CellId_Broadcast_List bcast_cell_id_list optional }; @@ -64,9 +65,16 @@ function f_MME_ConnHdlr_main(charstring id, MME_ConnHdlrPars pars) runs on MME_C function f_sbcap_tx_write_replace_warn_resp(CBS_Message msg, integer idx := 0) runs on MME_ConnHdlr { var template (value) SBC_AP_PDU tx; - /* TODO: pass Unknown Tracking Area List as parameter above (omit by default) */ - tx := ts_SBCAP_WRITE_WARNING_RESP(int2bit(msg.msg_id, 16), - int2bit(msg.ser_nr, 16)); + if (ispresent(g_pars.write_repl_unknown_TAIs)) { + tx := ts_SBCAP_WRITE_WARNING_RESP_UNKNOWN_TAI( + int2bit(msg.msg_id, 16), + int2bit(msg.ser_nr, 16), + SBC_AP_Cause_message_accepted, + g_pars.write_repl_unknown_TAIs); + } else { + tx := ts_SBCAP_WRITE_WARNING_RESP(int2bit(msg.msg_id, 16), + int2bit(msg.ser_nr, 16)); + } f_SBC_AP_send(tx, idx); } diff --git a/library/sbcap/SBC_AP_Templates.ttcn b/library/sbcap/SBC_AP_Templates.ttcn index 0a9519e5..bfe9e972 100644 --- a/library/sbcap/SBC_AP_Templates.ttcn +++ b/library/sbcap/SBC_AP_Templates.ttcn @@ -18,6 +18,13 @@ template (value) EUTRAN_CGI ts_SBCAP_ECGI(PLMNidentity plmn_id := '09F107'O, int iE_Extensions := omit } +/* 3GPP TS 36.413 9.2.3.16 */ +template (value) TAI ts_SBCAP_TAI(PLMNidentity plmn_id := '09F107'O, uint16_t tac := 1) := { + pLMNidentity := plmn_id, + tAC := int2oct(tac, 2), + iE_Extensions := omit +} + /* 3GPP TS 36.413 9.2.1.54 */ template (value) CellId_Broadcast_List_Item ts_SBCAP_CellId_Broadcast_List_Item( template (value) EUTRAN_CGI ecgi := ts_SBCAP_ECGI()) := { @@ -273,6 +280,38 @@ ts_SBCAP_WRITE_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BI } } +template (value) SBC_AP_PDU +ts_SBCAP_WRITE_WARNING_RESP_UNKNOWN_TAI(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr, + template (value) SBC_AP_Cause cause := SBC_AP_Cause_message_accepted, + template (value) List_of_TAIs unknown_tai_list := {{ts_SBCAP_TAI}}) +modifies ts_SBCAP_WRITE_WARNING_RESP := { + successfulOutcome := { + value_ := { + write_Replace_Warning_Response := { + protocolIEs := { + { + id := SBC_AP_Constants.id_Message_Identifier, + criticality := reject, + value_ := { Message_Identifier := p_msg_id } + }, { + id := SBC_AP_Constants.id_Serial_Number, + criticality := reject, + value_ := { Serial_Number := p_ser_nr } + }, { + id := SBC_AP_Constants.id_Cause, + criticality := reject, + value_ := { Cause := enum2int(valueof(cause)) } + }, { + id := SBC_AP_Constants.id_Unknown_Tracking_Area_List, + criticality := ignore, + value_ := { List_of_TAIs := unknown_tai_list } + } + } + } + } + } +} + template (present) SBC_AP_PDU tr_SBCAP_STOP_WARNING(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr) := { initiatingMessage := { |