diff --git a/cbc/CBC_Tests.ttcn b/cbc/CBC_Tests.ttcn index 581298abc..83cf07db1 100644 --- a/cbc/CBC_Tests.ttcn +++ b/cbc/CBC_Tests.ttcn @@ -653,7 +653,7 @@ testcase TC_concurrent_cbs_msg_mme() runs on test_CT { f_shutdown_helper(); } -/* Test ETWS message. TS 23.041 9.4.1.2.2 */ +/* Test ETWS message over CBSP. TS 23.041 9.4.1.2.2 */ testcase TC_ecbe_create_delete_etws_bsc() runs on test_CT { f_init(num_bsc := 1); var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success; @@ -672,6 +672,19 @@ testcase TC_ecbe_create_delete_etws_bsc() runs on test_CT { f_shutdown_helper(); } +/* Test ETWS message over SBc-AP. TS 23.041 9.4.1.2.2 */ +testcase TC_ecbe_create_delete_etws_mme() runs on test_CT { + f_init(num_mme := 1); + var template (value) CBS_Message msg := t_CBSmsg(4352 /* Earthquake */, 16753); + msg.channel_ind := omit; + + g_pars_MME[0].start_fn := refers(f_mme_create_and_delete); + g_pars_MME[0].exp_cbs_msg := valueof(msg); + f_start(); + f_create_and_delete(valueof(msg)); + f_shutdown_helper(); +} + control { execute( TC_rx_keepalive() ); execute( TC_rx_keepalive_timeout() ); @@ -688,6 +701,7 @@ control { execute( TC_concurrent_cbs_msg_mme() ); execute( TC_ecbe_create_delete_etws_bsc() ); + execute( TC_ecbe_create_delete_etws_mme() ); } } diff --git a/cbc/MME_ConnectionHandler.ttcn b/cbc/MME_ConnectionHandler.ttcn index 4bcc85330..c49461a4b 100644 --- a/cbc/MME_ConnectionHandler.ttcn +++ b/cbc/MME_ConnectionHandler.ttcn @@ -102,10 +102,15 @@ function f_sbcap_handle_write_replace_warn_req(CBS_Message msg, integer idx := 0 runs on MME_ConnHdlr { var template (present) SBC_AP_PDU rx_templ; var SBC_AP_RecvFrom rf; - rx_templ := tr_SBCAP_WRITE_WARNING(int2bit(msg.msg_id, 16), - int2bit(msg.ser_nr, 16), - msg.rep_period, - msg.num_bcast_req); + if (msg_id_is_etws(msg.msg_id)) { + rx_templ := tr_SBCAP_WRITE_WARNING_REQ_ETWS( + int2bit(msg.msg_id, 16), int2bit(msg.ser_nr, 16), + msg.rep_period, msg.num_bcast_req, hex2oct('018'H & int2hex(msg.msg_id - 4352, 1))); + } else { + rx_templ := tr_SBCAP_WRITE_WARNING_REQ_CBS( + int2bit(msg.msg_id, 16), int2bit(msg.ser_nr, 16), + msg.rep_period, msg.num_bcast_req); + } alt { [] SBC_AP[idx].receive(tr_SBC_AP_Recv(g_SBC_AP_conn_id[idx], rx_templ)) -> value rf { log ("received expected req:", rf); diff --git a/library/sbcap/SBC_AP_Templates.ttcn b/library/sbcap/SBC_AP_Templates.ttcn index 007105620..4ca714c14 100644 --- a/library/sbcap/SBC_AP_Templates.ttcn +++ b/library/sbcap/SBC_AP_Templates.ttcn @@ -153,15 +153,16 @@ ts_SBCAP_WRITE_WARNING(template (value) BIT16 p_msg_id, template (value) BIT16 p } } +/* 4.3.4.2.1 WRITE-REPLACE WARNING REQUEST */ template (present) SBC_AP_PDU -tr_SBCAP_WRITE_WARNING(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr, - template (present) uint12_t p_rep_per, - template (present) uint16_t p_num_bcast, - template (present) BIT8 dcs := ?, - template (present) octetstring p_msg_content := ?, - template (present) Send_Write_Replace_Warning_Indication send_ind := ?, - template (present) Concurrent_Warning_Message_Indicator concurrent_ind := ? - ) := { +tr_SBCAP_WRITE_WARNING_REQ_CBS(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr, + template (present) uint12_t p_rep_per, + template (present) uint16_t p_num_bcast, + template (present) BIT8 dcs := ?, + template (present) octetstring p_msg_content := ?, + template (present) Send_Write_Replace_Warning_Indication send_ind := ?, + template (present) Concurrent_Warning_Message_Indicator concurrent_ind := ? + ) := { initiatingMessage := { procedureCode := id_Write_Replace_Warning, criticality := reject, @@ -187,15 +188,7 @@ tr_SBCAP_WRITE_WARNING(template (present) BIT16 p_msg_id, template (present) BIT id := SBC_AP_Constants.id_Number_of_Broadcasts_Requested, criticality := reject, value_ := { Number_of_Broadcasts_Requested := p_num_bcast } - }/*, { - id := SBC_AP_Constants.id_Warning_Type, - criticality := ignore, - value_ := { Warning_Type := warn_type } }, { - id := SBC_AP_Constants.id_Warning_Security_Information, - criticality := reject, - value_ := { Warning_Security_Information := ? } - }*/, { id := SBC_AP_Constants.id_Data_Coding_Scheme, criticality := ignore, value_ := { Data_Coding_Scheme := dcs } @@ -224,6 +217,60 @@ tr_SBCAP_WRITE_WARNING(template (present) BIT16 p_msg_id, template (present) BIT } } +template (present) SBC_AP_PDU +tr_SBCAP_WRITE_WARNING_REQ_ETWS(template (present) BIT16 p_msg_id, template (present) BIT16 p_ser_nr, + template (present) uint12_t p_rep_per, + template (present) uint16_t p_num_bcast, + template (present) Warning_Type warn_type := ?, + template (present) Send_Write_Replace_Warning_Indication send_ind := ? + ) := { + initiatingMessage := { + procedureCode := id_Write_Replace_Warning, + criticality := reject, + value_ := { + write_Replace_Warning_Request := { + 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 } + /* List of TAIs */ + /* Warning Area List */ + }, { + id := SBC_AP_Constants.id_Repetition_Period, + criticality := reject, + value_ := { Repetition_Period := p_rep_per } + /* Extended Repetition Period */ + }, { + id := SBC_AP_Constants.id_Number_of_Broadcasts_Requested, + criticality := reject, + value_ := { Number_of_Broadcasts_Requested := p_num_bcast } + }, { + id := SBC_AP_Constants.id_Warning_Type, + criticality := ignore, + value_ := { Warning_Type := warn_type } + }, { + id := SBC_AP_Constants.id_Warning_Security_Information, + criticality := ignore, + value_ := { Warning_Security_Information := ? } + }, { + id := SBC_AP_Constants.id_Send_Write_Replace_Warning_Indication, + criticality := ignore, + value_ := { Send_Write_Replace_Warning_Indication := send_ind } + } + /* Global eNB ID */ + /* Warning Area Coordinates */ + }, + protocolExtensions := omit + } + } + } +} + /* 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,