cbc: Send Write-Replace-Warn-Ind after ACKing the request
This way we can test how does osmo-cbc behave when receiving such message. Related: OS#4945 Change-Id: Ifcdcddc7dccb5439126a5fa29bb540669ed25908
This commit is contained in:
parent
e14c2087cf
commit
ae2e51557f
|
@ -115,7 +115,9 @@ private function f_init_pars_mme(integer mme_sbcap_port, charstring cbc_host, in
|
||||||
cbc_host := cbc_host,
|
cbc_host := cbc_host,
|
||||||
cbc_sbcap_port := cbc_sbcap_port,
|
cbc_sbcap_port := cbc_sbcap_port,
|
||||||
start_fn := refers(f_MME_ConnHdlr_start_fn_void),
|
start_fn := refers(f_MME_ConnHdlr_start_fn_void),
|
||||||
exp_cbs_msg := omit
|
exp_cbs_msg := omit,
|
||||||
|
write_replace_warning_ind_cause := omit,
|
||||||
|
bcast_cell_id_list := omit
|
||||||
};
|
};
|
||||||
return pars;
|
return pars;
|
||||||
}
|
}
|
||||||
|
@ -298,6 +300,12 @@ private function f_bsc_create_and_delete() runs on BSC_ConnHdlr {
|
||||||
|
|
||||||
private function f_mme_create_and_delete() runs on MME_ConnHdlr {
|
private function f_mme_create_and_delete() runs on MME_ConnHdlr {
|
||||||
f_sbcap_handle_write_replace_warn_req(g_pars.exp_cbs_msg, 0);
|
f_sbcap_handle_write_replace_warn_req(g_pars.exp_cbs_msg, 0);
|
||||||
|
if (ispresent(g_pars.write_replace_warning_ind_cause) and
|
||||||
|
ispresent(g_pars.bcast_cell_id_list)) {
|
||||||
|
f_sbcap_tx_write_replace_warn_ind(0, g_pars.exp_cbs_msg,
|
||||||
|
g_pars.write_replace_warning_ind_cause,
|
||||||
|
g_pars.bcast_cell_id_list)
|
||||||
|
}
|
||||||
f_sbcap_handle_stop_warn_req(0, g_pars.exp_cbs_msg);
|
f_sbcap_handle_stop_warn_req(0, g_pars.exp_cbs_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,10 +419,33 @@ testcase TC_ecbe_create_delete_lai() runs on test_CT {
|
||||||
f_shutdown_helper();
|
f_shutdown_helper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create and delete message with MME available. MME reports
|
||||||
|
* Write-Replace-Warning-Indication and Stop-Warning-Indication to CBC
|
||||||
|
*/
|
||||||
|
testcase TC_ecbe_create_delete_mme_indication() runs on test_CT {
|
||||||
|
var template (value) CellId_Broadcast_List bcast_cell_id_li;
|
||||||
|
var template (value) CBS_Message msg := t_CBSmsg(48, 16752);
|
||||||
|
|
||||||
|
f_init(num_bsc := 0, num_mme := 1);
|
||||||
|
|
||||||
|
bcast_cell_id_li := {
|
||||||
|
ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 1234)),
|
||||||
|
ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 5678))
|
||||||
|
};
|
||||||
|
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].bcast_cell_id_list := valueof(bcast_cell_id_li);
|
||||||
|
f_start();
|
||||||
|
f_create_and_delete(valueof(msg));
|
||||||
|
f_shutdown_helper();
|
||||||
|
}
|
||||||
|
|
||||||
/* Create and delete message with both BSC and MME available */
|
/* Create and delete message with both BSC and MME available */
|
||||||
testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT {
|
testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT {
|
||||||
f_init(num_bsc := 1, num_mme := 1);
|
f_init(num_bsc := 1, num_mme := 1);
|
||||||
var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
|
var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
|
||||||
|
var template (value) CellId_Broadcast_List bcast_cell_id_li;
|
||||||
var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
|
var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
|
||||||
|
|
||||||
cell_list_success := ts_BSSMAP_CIL_CGI({
|
cell_list_success := ts_BSSMAP_CIL_CGI({
|
||||||
|
@ -425,8 +456,14 @@ testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT {
|
||||||
g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
|
g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
|
||||||
g_pars_BSC[0].exp_cbs_msg := valueof(msg);
|
g_pars_BSC[0].exp_cbs_msg := valueof(msg);
|
||||||
g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
|
g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
|
||||||
|
|
||||||
|
bcast_cell_id_li := {
|
||||||
|
ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(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].start_fn := refers(f_mme_create_and_delete);
|
||||||
g_pars_MME[0].exp_cbs_msg := valueof(msg);
|
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].bcast_cell_id_list := valueof(bcast_cell_id_li);
|
||||||
f_start();
|
f_start();
|
||||||
f_create_and_delete(valueof(msg));
|
f_create_and_delete(valueof(msg));
|
||||||
f_shutdown_helper();
|
f_shutdown_helper();
|
||||||
|
@ -440,6 +477,7 @@ control {
|
||||||
execute( TC_ecbe_create_delete_lac() );
|
execute( TC_ecbe_create_delete_lac() );
|
||||||
execute( TC_ecbe_create_delete_ci() );
|
execute( TC_ecbe_create_delete_ci() );
|
||||||
execute( TC_ecbe_create_delete_lai() );
|
execute( TC_ecbe_create_delete_lai() );
|
||||||
|
execute( TC_ecbe_create_delete_mme_indication() );
|
||||||
execute( TC_ecbe_create_delete_bsc_and_mme() );
|
execute( TC_ecbe_create_delete_bsc_and_mme() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,9 @@ type record MME_ConnHdlrPars {
|
||||||
charstring cbc_host,
|
charstring cbc_host,
|
||||||
integer cbc_sbcap_port,
|
integer cbc_sbcap_port,
|
||||||
void_fn start_fn,
|
void_fn start_fn,
|
||||||
CBS_Message exp_cbs_msg optional
|
CBS_Message exp_cbs_msg optional,
|
||||||
|
SBC_AP_Cause write_replace_warning_ind_cause optional,
|
||||||
|
CellId_Broadcast_List bcast_cell_id_list optional
|
||||||
};
|
};
|
||||||
|
|
||||||
function f_MME_ConnHdlr_main(charstring id, MME_ConnHdlrPars pars) runs on MME_ConnHdlr {
|
function f_MME_ConnHdlr_main(charstring id, MME_ConnHdlrPars pars) runs on MME_ConnHdlr {
|
||||||
|
@ -53,6 +55,17 @@ runs on MME_ConnHdlr {
|
||||||
f_SBC_AP_send(tx, idx);
|
f_SBC_AP_send(tx, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function f_sbcap_tx_write_replace_warn_ind(integer idx := 0, CBS_Message msg,
|
||||||
|
SBC_AP_Cause cause,
|
||||||
|
template (value) CellId_Broadcast_List bcast_cell_id_li)
|
||||||
|
runs on MME_ConnHdlr {
|
||||||
|
var template (value) SBC_AP_PDU tx;
|
||||||
|
tx := ts_SBCAP_WRITE_WARNING_IND(int2bit(msg.msg_id, 16),
|
||||||
|
int2bit(msg.ser_nr, 16),
|
||||||
|
cause, bcast_cell_id_li);
|
||||||
|
f_SBC_AP_send(tx, idx);
|
||||||
|
}
|
||||||
|
|
||||||
function f_sbcap_tx_stop_warn_resp(integer idx := 0, CBS_Message msg)
|
function f_sbcap_tx_stop_warn_resp(integer idx := 0, CBS_Message msg)
|
||||||
runs on MME_ConnHdlr {
|
runs on MME_ConnHdlr {
|
||||||
var template (value) SBC_AP_PDU tx;
|
var template (value) SBC_AP_PDU tx;
|
||||||
|
|
|
@ -11,6 +11,28 @@ import from SBC_AP_PDU_Descriptions all;
|
||||||
|
|
||||||
import from SBC_AP_Types all;
|
import from SBC_AP_Types all;
|
||||||
|
|
||||||
|
/* 3GPP TS 36.413 9.2.1.38 */
|
||||||
|
template (value) EUTRAN_CGI ts_SBCAP_ECGI(PLMNidentity plmn_id := '09F107'O, integer cell_id := 1) := {
|
||||||
|
pLMNidentity := plmn_id,
|
||||||
|
cell_ID := int2bit(cell_id, 28),
|
||||||
|
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()) := {
|
||||||
|
eCGI := ecgi,
|
||||||
|
iE_Extensions := omit
|
||||||
|
}
|
||||||
|
template (value) Broadcast_Scheduled_Area_List ts_SBCAP_Broadcast_Scheduled_Area_List(
|
||||||
|
template (value) CellId_Broadcast_List cell_id_li := {ts_SBCAP_CellId_Broadcast_List_Item()})
|
||||||
|
:= {
|
||||||
|
cellId_Broadcast_List := cell_id_li,
|
||||||
|
tAI_Broadcast_List := omit,
|
||||||
|
emergencyAreaID_Broadcast_List := omit,
|
||||||
|
iE_Extensions := omit
|
||||||
|
}
|
||||||
|
|
||||||
template (value) SBC_AP_PDU
|
template (value) SBC_AP_PDU
|
||||||
ts_SBCAP_PWS_RESTART(
|
ts_SBCAP_PWS_RESTART(
|
||||||
template (value) Restarted_Cell_List restart_cl,
|
template (value) Restarted_Cell_List restart_cl,
|
||||||
|
@ -190,6 +212,37 @@ tr_SBCAP_WRITE_WARNING(template (present) BIT16 p_msg_id, template (present) BIT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 4.3.4.2.5 WRITE REPLACE WARNING INDICATION */
|
||||||
|
template (value) SBC_AP_PDU
|
||||||
|
ts_SBCAP_WRITE_WARNING_IND(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) CellId_Broadcast_List bcast_cell_id_li := {ts_SBCAP_CellId_Broadcast_List_Item()}) := {
|
||||||
|
initiatingMessage := {
|
||||||
|
procedureCode := id_Write_Replace_Warning_Indication,
|
||||||
|
criticality := ignore,
|
||||||
|
value_ := {
|
||||||
|
write_Replace_Warning_Indication := {
|
||||||
|
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_Broadcast_Scheduled_Area_List,
|
||||||
|
criticality := reject,
|
||||||
|
value_ := { broadcast_Scheduled_Area_List := ts_SBCAP_Broadcast_Scheduled_Area_List(bcast_cell_id_li) }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
protocolExtensions := omit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* 4.3.4.2.3 STOP WARNING REQUEST */
|
/* 4.3.4.2.3 STOP WARNING REQUEST */
|
||||||
template (value) SBC_AP_PDU
|
template (value) SBC_AP_PDU
|
||||||
ts_SBCAP_WRITE_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
|
ts_SBCAP_WRITE_WARNING_RESP(template (value) BIT16 p_msg_id, template (value) BIT16 p_ser_nr,
|
||||||
|
|
Loading…
Reference in New Issue