diff --git a/ttcn3/LibS1AP/LibS1AP_Steps.ttcn b/ttcn3/LibS1AP/LibS1AP_Steps.ttcn index 3b1dfe6..bf238a9 100644 --- a/ttcn3/LibS1AP/LibS1AP_Steps.ttcn +++ b/ttcn3/LibS1AP/LibS1AP_Steps.ttcn @@ -676,6 +676,18 @@ module LibS1AP_Steps { f_recv_S1AP_initiatingMessage(mw_UeContextReleaseComplete(p_value)) } // End of f_recv_UE_Context_Release_Complete + + /** + * @desc Receive S1AP Message UE Context Release Command + * @param p_value Receive template for UE CONTEXT RELEASE COMMAND + * @see ETSI TS 136 413 V13.4.0 Clause 9.1.4.6 UE CONTEXT RELEASE COMMAND + */ + function f_recv_UE_Context_Release_Command( + template (present) RecordOf_ProtocolIE p_value := ? + ) runs on S1APComponent { + f_recv_S1AP_initiatingMessage(mw_UeContextReleaseCommand(p_value)) + } // End of f_recv_UE_Context_Release_Command + /** * @desc Receive S1AP Message UE Context Modification Response * @param p_value Receive template for UE CONTEXT MODIFICATION RESPONSE @@ -993,6 +1005,29 @@ module LibS1AP_Steps { f_send_S1AP_initiatingMessage(m_UeContextReleaseCommand(p_value)) } // End of f_send_UE_Context_Release_Command + + /** + * @desc Send S1AP Message UE Context Release Complete + * @param p_value Send template for UE CONTEXT RELEASE COMPLETE + * @see ETSI TS 136 413 V13.4.0 Clause 9.1.4.7 UE CONTEXT RELEASE COMPLETE + */ + function f_send_UE_Context_Release_Complete( + template (value) RecordOf_ProtocolIE p_value + ) runs on S1APComponent { + f_send_S1AP_initiatingMessage(m_UeContextReleaseComplete(p_value)) + } // End of f_send_UE_Context_Release_Command + + /** + * @desc Send S1AP Message UE Context Release Request + * @param p_value Receive template for UE CONTEXT RELEASE REQUEST + * @see ETSI TS 136 413 V13.4.0 Clause 9.1.4.5 UE CONTEXT RELEASE REQUEST + */ + function f_send_UE_Context_Release_Request( + template (value) RecordOf_ProtocolIE p_value + ) runs on S1APComponent { + f_send_S1AP_initiatingMessage(m_UeContextReleaseRequest(p_value)) + } // End of f_send_UE_Context_Release_Request + /** * @desc Send S1AP Message UE Context Modification Request * @param p_value Send template for UE CONTEXT MODIFICATION REQUEST diff --git a/ttcn3/LibS1AP/LibS1AP_Templates.ttcn b/ttcn3/LibS1AP/LibS1AP_Templates.ttcn index aff42b4..6f1fb29 100644 --- a/ttcn3/LibS1AP/LibS1AP_Templates.ttcn +++ b/ttcn3/LibS1AP/LibS1AP_Templates.ttcn @@ -160,8 +160,31 @@ module LibS1AP_Templates { m_securityKey_IE(p_SecurityKey) } // End of template m_InitialContextSetupReqIEs + /** + * @desc Send template for InitiatingMessage message with UeContextReleaseRequest payload + * @param p_value Expected procedure code + */ + template (value) InitiatingMessage m_UeContextReleaseRequest( + in template (value) RecordOf_ProtocolIE p_value) := { + procedureCode := id_UEContextReleaseRequest, + criticality := reject, + value_ := {RecordOf_ProtocolIE := valueof(p_value)} + } // End of template m_UeContextReleaseRequest + + + template (value) RecordOf_ProtocolIE m_UeContextReleaseRequestIEs( + in template (value) MME_UE_S1AP_ID p_MME_value, + in template (value) ENB_UE_S1AP_ID p_eNB_value, + in template (value) Cause p_cause + ) := { + m_MME_UE_S1AP_ID(p_MME_value), + m_eNB_UE_S1AP_ID(p_eNB_value), + m_cause_IE(p_cause) + } // End of template m_UeContextReleaseRequestIEs_MME + + /** - * @desc Send template for InitiatingMessage message with InitialContextSetup payload + * @desc Send template for InitiatingMessage message with UEContextRelease payload * @param p_value Expected procedure code */ template (value) InitiatingMessage m_UeContextReleaseCommand( @@ -186,7 +209,25 @@ module LibS1AP_Templates { m_eNB_UE_S1AP_ID(p_eNB_value), m_cause_IE(p_cause) } // End of template m_UeContextReleaseCommandIEs_ENB - + + /** + * @desc Send template for InitiatingMessage message with UEContextReleaseComplete payload + * @param p_value Expected procedure code + */ + template (value) InitiatingMessage m_UeContextReleaseComplete( + in template (value) RecordOf_ProtocolIE p_value) := { + procedureCode := id_UEContextRelease, + criticality := reject, + value_ := {RecordOf_ProtocolIE := valueof(p_value)} + } // End of template m_UeContextReleaseComplete + + template (value) RecordOf_ProtocolIE m_UeContextReleaseCompleteIEs( + in template (value) MME_UE_S1AP_ID p_MME_value, + in template (value) ENB_UE_S1AP_ID p_eNB_value + ) := { + m_MME_UE_S1AP_ID(p_MME_value), + m_eNB_UE_S1AP_ID(p_eNB_value) + } // End of template m_UeContextReleaseCompleteIEs /** * @desc Send template for InitiatingMessage message with m_UeContextModificationRequest payload @@ -781,6 +822,37 @@ module LibS1AP_Templates { mw_cause_IE(p_cause) } // End of template mw_UeContextReleaseRequestIEs + + /** + * @desc Receive template for UeContextReleaseCommand message + * @param p_procedureCode Expected procedure code. Default: ? + * @param p_value Expected procedure code. Default: ? + */ + template (present) SuccessfulOutcome mw_UeContextReleaseCommand( + template (present) RecordOf_ProtocolIE p_value := ? + ) := { + procedureCode := id_UEContextRelease, + criticality := reject, + value_ := {RecordOf_ProtocolIE := p_value} + } // End of template mw_UeContextReleaseCommand + + template (present) RecordOf_ProtocolIE mw_UeContextReleaseCommandIEs_MME( + template (present) MME_UE_S1AP_ID p_MME_value := ?, + template (present) Cause p_cause := ? + ) := { + mw_MME_UE_S1AP_ID(p_MME_value, ignore), + mw_cause_IE(p_cause) + } // End of template mw_UeContextReleaseCommandIEs + + + template (present) RecordOf_ProtocolIE mw_UeContextReleaseCommandIEs_ENB( + template (present) ENB_UE_S1AP_ID p_eNB_value := ?, + template (present) Cause p_cause := ? + ) := { + mw_eNB_UE_S1AP_ID(p_eNB_value, ignore), + mw_cause_IE(p_cause) + } // End of template mw_UeContextReleaseCommandIEs + /** * @desc Receive template for UeContextReleaseComplete message * @param p_procedureCode Expected procedure code. Default: ? diff --git a/ttcn3/S1AP_TCFunctions.ttcn b/ttcn3/S1AP_TCFunctions.ttcn index 52288a7..2335a8d 100644 --- a/ttcn3/S1AP_TCFunctions.ttcn +++ b/ttcn3/S1AP_TCFunctions.ttcn @@ -3061,6 +3061,55 @@ module S1AP_TCFunctions { log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); } // End of function f_TC_S1AP_eNB_CMP_01 + + /** + * @desc Testcase function for TC_S1AP_mME_CMP_02 + */ + function f_TC_S1AP_mME_CMP_02() runs on S1APComponent { + // Local variables + var template(value) Cause v_cause; + select(PX_VA){ + case(1){v_cause := m_cause_ran(user_inactivity)} + case(2){v_cause := m_cause_ran(radio_connection_with_ue_lost)} + case(3){v_cause := m_cause_nas(csg_subscription_expiry)} + case(4){v_cause := m_cause_ran(cs_fallback_triggered)} + case(5){v_cause := m_cause_ran(redirection_towards_1xRTT)} + case(6){v_cause := m_cause_ran(interrat_redirection)} + case(7){v_cause := m_cause_ran(ue_not_available_for_ps_service)} + case else {setverdict(fail, "undefined PIXIT value for variant")} + } + + // Preamble + f_S1AP_mme_init(); + + f_rABSetupRequest(); + + f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); + log("*** " & __SCOPE__ & ": INFO: Preamble done. ***"); + + // Test body + + f_send_UE_Context_Release_Command(m_UeContextReleaseRequestIEs( + vc_MME_UE_ID, + vc_eNB_UE_ID, + v_cause + )); + + f_recv_InitialContext_SetupRequest((mw_UeContextReleaseCommandIEs_MME, mw_UeContextReleaseCommandIEs_ENB)); + + // Postamble + f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); + + f_send_UE_Context_Release_Complete(m_UeContextReleaseCompleteIEs( + vc_MME_UE_ID, + vc_eNB_UE_ID + )); + + f_postamble_S1AP_MME(); + f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); + log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); + + } // End of function f_TC_S1AP_eNB_CMP_02 } // End of group Context_management_group