AtsImsIot_Emergency.ttcn 80.1 KB
Newer Older
/**
 *  @author     TTF 010
 *  @version    $Id: $
 *  @desc       This module provides ATS specific test case definitions for IMS Emergency calls.
 *  @see        ETSI TS 103 795-2
 */
module AtsImsIot_Emergency {

    // LibCommon
    // LibSip
    // LibIms
    import from LibIms_UpperTester all;
    // LibIot
    import from LibIot_TestInterface all;
    import from LibIot_TestConfiguration all;
    import from LibIot_PIXITS all;
    import from LibIot_VxLTE_PIXITS all;
    import from LibIot_VxLTE_Functions all;
    // LibImsIot
    import from AtsImsIot_Functions all;
    // ImsIot
    import from AtsImsIot_TestConfiguration all; 
    import from AtsImsIot_TestSystem all; 
    import from AtsImsIot_Functions all; 
    import from AtsImsIot_TP_behavior_GM all;
    import from AtsImsIot_TP_behavior_MW_PS all;
    import from AtsImsIot_TP_behavior_MW_SI all;
    import from AtsImsIot_TP_behavior_MW_IS all;
    import from AtsImsIot_TP_behavior_MW_EC all;
    import from AtsImsIot_TP_behavior_MW_EB all;
    import from AtsImsIot_TP_behavior_MM all;
    import from AtsImsIot_TP_behavior_IC all;
    import from AtsImsIot_TP_behavior_CX all;
    import from AtsImsIot_TP_behavior_GX all;
    import from AtsImsIot_TP_behavior_ISC all;
    import from AtsImsIot_TP_behavior_S6A all;
    import from AtsImsIot_TP_behavior_S9 all;
    import from AtsImsIot_TP_behavior_SH all;
    import from AtsImsIot_TP_behavior_RX all;

    /**
      * @see ETSI TS 103 795-2 Clause 5	Test Descriptions (Interoperability at HPLMN)
      */
    group Interoperability {

        /**
         * @see ETSI TS 103 795-2 Clause 5.1	Network Attachment
         */
        group NetworkAttachment {

            group UENetworkAttachmentWithUSIM {
				/**
				 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer with USIM.
				 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
				 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
				 * and allowed forwarding towards E-CSCF
				 * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; 
				 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
				 * 
				 */
				testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {
    
					var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
					var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );
    
					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
						f_cf_createVxLteMonitor();    
        
						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_VxLteMonitor_Up();
        
						// preamble
						f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
        
						// test body
						// Check that user A starts initial network attachment
						f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
						f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a);        // Check (ULA – Event 3) 
						f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)
        
						// postamble
						f_mtc_userRadioEnabled ( v_ueA, false, true );
        
						//unmap/disconnect component ports
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
						f_cf_adapter_down ( );
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
				} // End of TC TC_VoLTE_ECO_INT_ATT_01
            } // End of group UENetworkAttachmentWithUSIM

            group UENetworkAttachmentWithoutUSIM {
				/**
				 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer without USIM.
				 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
				 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
				 * and allowed forwarding towards E-CSCF
				 * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; 
				 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
				 * 
				 */
				testcase TC_VoLTE_EMC_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {

					var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
					var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
						f_cf_createVxLteMonitor();    
						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_VxLteMonitor_Up();

						// preamble
						f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile

						// test body
						// Check that user A starts initial network attachment
						f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
						f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a);        // Check (ULA – Event 3) 
						f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

						// postamble
						f_mtc_userRadioEnabled ( v_ueA, false, true );

						//unmap/disconnect component ports
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
						f_cf_adapter_down ( );
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
				} // End of TC TC_VoLTE_ECO_INT_ATT_02
            } // End of group UENetworkAttachmentWithoutUSIM

        } // End of group NetworkAttachment

        /**
         * @see ETSI TS 103 795-2 Clause 5.2	IMS Emergency Registration
         */
        group EmergencyRegistration {

            /**
             * @desc    To perform emergency registration via the established emergency bearer. Note that some UEs perform emergency registration automatically on attachment - in which case this test becomes merged with the previous ones.
             * @see ETSI TS 103 795-2 Clause 5.2.1	IMS Emergency Registration - Successful
             */
            testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface {
                
                var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                var ImsUserInfo v_userInfoA   := f_getSipUserId ( PX_EUT_A );
                
                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_SIP_MW_IS_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME,
                                                          PX_DIAMETER_GX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();    

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
                    
                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10
                    f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6
                    f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9

                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20
                    f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16
                    f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );
        
                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_INT_REG_01

            /**
             * @desc    To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration.
             * @see ETSI TS 103 795-2 Clause 5.2.2	IMS Emergency Registration - Unsuccessful
             */
            testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface {
                
                var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                var ImsUserInfo v_userInfoA   := f_getSipUserId ( PX_EUT_A );
                
                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_SIP_MW_IS_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME,
                                                          PX_DIAMETER_GX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();    

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
                    
                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10
                    f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6
                    f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9

                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.gmA); // Events 13, 22
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.mwPI); // Events 14, 21
                    f_mtc_check_TP_MW_ICSCF_REGISTER_03(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20

                    f_mtc_check_TP_CX_HSS_ECO_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16
                    f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );
        
                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_INT_REG_02

        } // End of group EmergencyRegistration

        /**
         * @see ETSI TS 103 795-2 Clause 5.3	Emergency Session and Emergency Bearer Operations
         */
        group EmergencySessionEmergencyBearerOperations {

            group EmergencySessionEstablishment {

                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment.
                 *          On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow
                 * @see ETSI TS 103 795-2 Clause 5.3.1.2	UE calling PSAP with emergency registration
                 * @remark This is option1: IBCF is connected to another IMS network and the interface between the IBCF and the PSAP is the Ic interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_01_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {
                    
                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        // PSAP is not known from the IMS A
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        
                        f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1
                        f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9


                        f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);
        
                        f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11
                        f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip);
        
                        f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic)
                        f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic)
                        f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8
                        f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13

                        // 183 Session Progress
                        f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14
                        f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 18
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19
                        
                        f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22
                        f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                                                
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        
                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26
                        f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26
                        f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26

                        f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27
                        f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28                        
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 
                        f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31
                        f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32                        
                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_01_01
                
                group f_TD_VoLTE_ECO_INT_INI_01_01 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01
                     
                } // End of f_TD_VoLTE_ECO_INT_INI_01_01
                 
                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment.
                 *          On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow
                 * @see ETSI TS 103 795-2 Clause 5.3.1.2	UE calling PSAP with emergency registration
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap); 
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        
                        f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9


                        f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11
                        f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip);
                        f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12
                        f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip);

                        // 183 Session Progress
                        f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14
                        f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        // PRACK after 183 Session Progress: require field is present
                        // FIXME Add check of requires SIP message header to check PRACK
                        //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 18
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19
                        
                        f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22                        
                        f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        
                        // PRACK after 180 Session Progress: require field is present
                        // FIXME Add check of requires SIP message header to check PRACK
                        // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        
                        f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26
                        f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27
                        f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 
                        f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31
                        f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32
                        f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_01_02
                
                group f_TD_VoLTE_ECO_INT_INI_01_02 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02
                } // End of group f_TD_VoLTE_ECO_INT_INI_01_02
                 
                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment.
                 *          On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow
                 * @see ETSI TS 103 795-2 Clause 5.3.1.2	UE calling PSAP with emergency registration
                 * @remark This is option3: IBCF is connected to the PSTN network
                 */
                testcase TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_PSTN_INTERFACENAME // IBCF -> PSTN -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        // PSAP is not known from the IMS A
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03();
                        
                        // Test body
                        // TODO
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_01_03
                
                group f_TD_VoLTE_ECO_INT_INI_01_03 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03
                     
                } // End of group f_TD_VoLTE_ECO_INT_INI_01_03
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012
                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration.
                 *          On successful call setup, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow. These are pushed towards PCRF and EPC as request for creation of adequate bearers
                 * @see ETSI TS 103 795-2 Clause 5.3.1.3	UE calling PSAP with non-emergency registration
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator system IotSystemInterface {


                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var IotEquipmentUser v_psap   := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        
                        f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9


                        f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11
                        f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip);
                        
                        f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12
                        f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip);

                        // 183 Session Progress
                        f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14
                        f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        // PRACK after 183 Session Progress: require field is present
                        // FIXME Add check of requires SIP message header to check PRACK
                        //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 18
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19
                        
                        f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22                        
                        f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        
                        // PRACK after 180 Session Progress: require field is present
                        // FIXME Add check of requires SIP message header to check PRACK
                        // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        
                        f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26
                        f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27
                        f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 
                        f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31
                        f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32
                        f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_02
                
                group f_TD_VoLTE_ECO_INT_INI_02 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02
                     
                } // End of group f_TD_VoLTE_ECO_INT_INI_02
                 
                /**
                 * @desc    To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment withinout registration.
                 *          On successful emergency call setup with UE-A attached to EPC A but not attached to IMS A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow
                 * @see ETSI TS 103 795-2 Clause 5.3.1.3	UE calling PSAP without registration
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator system IotSystemInterface {


                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var IotEquipmentUser v_psap   := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        // No registration for user A
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        
                        f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9


                        f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11
                        f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip);
                        
                        f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12
                        f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip);

                        // 183 Session Progress
                        f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14
                        f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        // PRACK after 183 Session Progress: require field is present
                        // FIXME Add check of requires SIP message header to check PRACK
                        //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 18
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19
                        
                        f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22                        
                        f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        
                        // PRACK after 180 Session Progress: require field is present
                        // FIXME Add check of requires SIP message header to check PRACK
                        // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        
                        f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26
                        f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27
                        f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 
                        f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31
                        f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32
                        f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_03
                
                group f_TD_VoLTE_ECO_INT_INI_03 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03
                     
                } // End of group f_TD_VoLTE_ECO_INT_INI_03

                /**
                 * @desc    TODO
                 *          On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow
                 * @see ETSI TS 103 795-2 Clause 5.3.1.4 Emergency session establishment with LRF involvement
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_PSAP_INTERFACENAME, // IBCF -> PSAP
                                                              PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        // TODO
                        
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_04
                
                group f_TD_VoLTE_ECO_INT_INI_04 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04
                     
                } // End of group f_TD_VoLTE_ECO_INT_INI_04

                /**
                 * @desc    To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered
                 *          Verifying the functionality of the PSAP callback feature, ensuring that the callback is successfully initiated, routed and that media is correctly transmitted over the dedicated bearer. The callback must use the same media as the original emergency call
                 * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_PSAP_INTERFACENAME
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        // TODO
                        
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_05
                
                group f_TD_VoLTE_ECO_INT_INI_05 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05
                     
                } // End of group f_TD_VoLTE_ECO_INT_INI_05

            } // End of group EmergencySessionEstablishment

            group EmergencySessionRelease {

                /**
                 * @desc    To perform originating UE session release and the tear down of related dedicated bearers.
                 *          On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers
                 * @see ETSI TS 103 795-2 Clause 5.3.3.1	UE Initiated Emergency Session Release
                 * @remark This is option1: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap);
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 1
                        f_mtc_userCheckCallEstablished(v_psap); // Event 1
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3
                        f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3
                        f_mtc_check_TP_MM_PSAP_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13)                        
                        
                        
                        f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15
                        f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21
                        
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_ueB); // Event 23
                        
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_ueB);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REL_01_01
                
                group f_TD_VoLTE_ECO_INT_REL_01_01 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01
                     
                } // End of group f_TD_VoLTE_ECO_INT_REL_01_01

                /**
                 * @desc    To perform originating UE session release and the tear down of related dedicated bearers.
                 *          On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers
                 * @see ETSI TS 103 795-2 Clause 5.3.3.1	UE Initiated Emergency Session Release
                 * @remark This is option2: IBCF is connected to another IMS network and the interface between the IBCF and the PSAP is the Ic interface
                 */
                testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {
                    
                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap);
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 1
                        f_mtc_userCheckCallEstablished(v_psap); // Event 1
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3
                        f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3
                        f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13)                        
                        
                        
                        f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15
                        f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21
                        
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_ueB); // Event 23
                        
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_ueB);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REL_01_02
                
                group f_TD_VoLTE_ECO_INT_REL_01_02 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02
                     
                } // End of f_TD_VoLTE_ECO_INT_REL_01_02

               /**
                 * @desc    To perform originating UE session release and the tear down of related dedicated bearers.
                 *          On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers
                 * @see ETSI TS 103 795-2 Clause 5.3.3.1	UE Initiated Emergency Session Release
                 * @remark This is option3: IBCF is connected to the PSTN network
                 */
                testcase TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP ); 
        
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_PSTN_INTERFACENAME // IBCF -> PSTN -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        
                        f_cf_createVxLteMonitor();
                
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA); 
                        f_mtc_userRegistration(v_psap, v_infoPsap); 
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap);
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 1
                        f_mtc_userCheckCallEstablished(v_psap); // Event 1
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03();
                        
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        // TODO
                        
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_ueB); // Event 23
                        
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_ueB);
            
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REL_01_03
                
                group f_TD_VoLTE_ECO_INT_REL_01_03 {
                    
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03
                     
                } // End of group f_TD_VoLTE_ECO_INT_REL_01_03

            } // End of group EmergencySessionRelease

            group EmergencySessionAbortOrReject {

            } // End of group EmergencySessionAbortOrReject

        } // End of group EmergencySessionEmergencyBearerOperations

        /**
         * @see ETSI TS 103 795-2 Clause 5.4	Emergency Deregistration
         */
        group EmergencyNetworkDetachment {

            group EmergencySessionDetachment {
				/**
				 * @desc    Emergency Network Detachment (with/without) emergency registration
				 * 
				 * @see 
				 */
				testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {
                
					var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
					var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );
    
					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){
						f_cf_createVxLteMonitor();    
            
						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_VxLteMonitor_Up();
						//preamble
						f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
						f_mtc_userRadioEnabled ( v_ueA, false, true );
						// test body
						// Check that user A starts initial network attachment
						f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3)
                    
						//postamble
        
						//unmap/disconnect component ports
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
						f_cf_adapter_down ( );
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
				} // End of TC TC_VoLTE_ECO_INT_DTC_01
            } // End of group EmergencySessionDetachment

        } // End of group EmergencyNetworkDetachment

    } // End of group Interoperability

    /**
      * @see ETSI TS 103 795-2 Clause 6	Test Descriptions (Roaming)
      */
    group Roaming {

        /**
         * @see ETSI TS 103 795-2 6.1	Network Attachment
         */
        group NetworkAttachment {

        } // End of group NetworkAttachment

        /**
         * @see ETSI TS 103 795-2 Clause 6.2	IMS Emergency Registration in a visited network
         */
        group IMSEmergencyRegistration {

        } // End of group IMSEmergencyRegistration

    } // End of group Roaming

} // End of module AtsImsIot_Emergency