aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2022-08-02 13:17:47 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2022-08-04 13:32:32 +0200
commitb1a83fbb6d24949e16876a4810849bcae1bd909b (patch)
tree8a216fc19d9a3205ae58c68c6a0479ae5be52c16
parentdb247f8318f6cc8f48f2de0d5ae8deaaef4d302c (diff)
cbc: Test sending Unknown TAI List to osmo-cbc
-rw-r--r--cbc/CBC_Tests.ttcn21
-rw-r--r--cbc/MME_ConnectionHandler.ttcn14
-rw-r--r--library/sbcap/SBC_AP_Templates.ttcn39
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 := {