DiameterRfRo_Templates.ttcn 188 KB
Newer Older
pintar's avatar
pintar committed
/**
 *  @author   STF 490
pintar's avatar
pintar committed
 *  @version  $Id$
pintar's avatar
pintar committed
 *  @desc     This module defines RfRo Diameter Templates for message, header, and
 *            structured types. <br>
 *            Note that any changes made to the definitions in this module
 *            may be overwritten by future releases of this library
 *            End users are encouraged to contact the distributers of this
 *            module regarding their modifications or additions
 *            Note that usage of encvalue command (codec function) returns bitstring 
 *            length of the message or AVP with padding bytes. Therefore this function 
 *            is not used on the first level where length of one single AVP can be 
 *            calculated with lengthof function. It shall be used only on message level 
 *            or in case where one AVP is group of other AVPs (ex. m_subsesEnforcementInfo_Operation_MultiBBERFact_AnGw). 
 *  @remark   Any additions to the templates shall follow the design rules
 *            and always modify base templates only;
 */

module DiameterRfRo_Templates {
    
    // LibCommon
    import from LibCommon_BasicTypesAndValues all;
    
    // LibDiameter
pintar's avatar
pintar committed
    import from LibDiameter_Types_Base_AVPs all;
    import from LibDiameter_TypesAndValues all;
    import from LibDiameter_Types_Gx_AVPs all;
    import from LibDiameter_Types_Rx_AVPs all;
    import from LibDiameter_Types_RfRo_AVPs all;
pintar's avatar
pintar committed
    import from LibDiameter_Templates all;
pintar's avatar
pintar committed
    group SubFields{
    } // End of group SubFields
pintar's avatar
pintar committed

    group HeaderFieldTemplates {
        
        /**
         * @desc Received generic command flag template
         */
        template (present) Command_Flags mw_cmdFlagsAns := {
            r_bit           := '0'B,            //Answer message
            p_bit           := ?,
            e_bit           := ?,
            t_bit           := ?,
            reserved_bits    := '0000'B
        } // End of template mw_cmdFlagsAns
        
        /**
         * @desc Received generic command flag template
         */
        template (present) Command_Flags mw_cmdTFlagsAns 
        modifies mw_cmdFlagsAns := {
            t_bit           := '1'B // T message
        } // End of template mw_cmdTFlagsAns
        
        template AVP_Header mw_aVP_HeaderVid_Vbit1Mbit0 ( AVP_Code p_avpCode, template (present) AVP_Vendor_ID p_avpVid ) := {
            aVP_Code     := p_avpCode,
            aVP_flags     := mw_avpFlags_VMbits('1'B, '0'B),
            aVP_len     := ?,
            aVP_vid        := p_avpVid
        }
        
pintar's avatar
pintar committed
        template AVP_Header mw_aVP_HeaderVid_Vbit1Mbit1 ( AVP_Code p_avpCode, template (present) AVP_Vendor_ID p_avpVid ) := {
            aVP_Code     := p_avpCode,
            aVP_flags     := mw_avpFlags_VMbits('1'B, '1'B),
            aVP_len     := ?,
            aVP_vid        := p_avpVid
pintar's avatar
pintar committed
        }
        
//        group DummyAVPHeaders{
//            
//        } // End of group DummyAVPHeaders
//        
//        group SpecificAVPHeaders {
//              group sendingTemplatesForAVPs{
//
//              } // End of group sendingTemplatesForAVPs
//              group awaitingTemplatesForAVPs{
//
//            } // End of group awaitingTemplatesForAVPs
//        } // End of group SpecificAVPHeaders
    } // End of group HeaderFieldTemplates
    
pintar's avatar
pintar committed
    /** Message templates for ACR, ACA, CCR, CCA.... methods  */
    group RfRoMessageTemplates {
pintar's avatar
pintar committed
        group RfRobase_templates {
pintar's avatar
pintar committed
            group RfRobasic_request_templates_send {

            } // Endgroup RfRobasic_request_templates_send
pintar's avatar
pintar committed
            group RfRobasic_request_templates_receive {

            } // End of group RfRobasic_request_templates_receive
pintar's avatar
pintar committed
            group RfRobasic_answer_templates_send {

            } // End of group RfRobasic_answer_templates_send
pintar's avatar
pintar committed
            group RfRobasic_answer_templates_receive {

            } // End of group RfRobasic_answer_templates_receive
        } // End of group RfRoMessageTemplates
        
pintar's avatar
pintar committed
        group RfRomodified_templates {
pintar's avatar
pintar committed
            group RfRomodified_request_templates_send {
pintar's avatar
pintar committed
            } //     end group RfRomodified_request_templates_send
            
            group RfRomodified_request_templates_receive {
pintar's avatar
pintar committed
            } //     end group RfRomodified_request_templates_receive
            group RfRomodified_answer_templates_send {
                
            } //     end group RfRomodified_answer_templates_send
            group RfRomodified_answer_templates_receive {
                
            } // Endgroup RfRomodified_answer_templates_receive
            
        } // End of group RfRomodified_templates
        
    } // End of group RfRoMessageTemplates
    
    group Rf_message_templates { 
        
        group Rf_dummy_request_templates_send { 
            
            /**
             * @desc Generic send message for AC-Request message
             */
            template (value) ACR_MSG m_rf_ACR_dummy := {
                header      := m_diameterHeaderReq_dummy(ACR_E, c_applIdRf),
                session_Id  := m_sessionId_dummy,
                aCR_Body    := m_rf_ACR_Body_dummy
            } // End of template m_rf_ACR_dummy
            
            /**
             * @desc Generic send message for UL-Request message body
             */
            template (value) ACR_Body_AVP m_rf_ACR_Body_dummy := {
                origin_Host                     := m_originHost_dummy,
                origin_Realm                    := m_originRealm_dummy,
                destination_Realm               := m_destinationRealm_dummy,
                accounting_Record_Type          := m_accounting_Record_Type_dummy,
                accounting_Record_Number        := m_accounting_Record_Number_dummy,
                acct_Application_Id             := omit,
                vendor_Specific_Application_Id  := omit,
                user_Name                       := omit,
                supported_Features              := omit,
                accounting_Sub_Session_Id       := omit,
                acct_Session_Id                 := omit,
                acct_Multi_Session_Id           := omit,
                acct_Interim_Interval           := omit,
                accounting_Realtime_Required    := omit,
                origin_State_Id                 := omit,
                event_Timestamp                 := omit,
                proxy_Info                      := omit,
                route_Record                    := omit,
                service_Context_Id_AVP          := omit,
                service_Information_AVP         := omit,
                aVP_Type                        := omit
            } // End of template m_rf_ACR_Body_dummy
            
        } // End of group Rf_dummy_request_templates_send 
        
        group Rf_dummy_answer_templates_send { 
            
            /**
             * @desc Generic send message for AC-Answer message
             */
            template (value) ACA_MSG m_rf_ACA_dummy := {
                header      := m_diameterHeaderReq_dummy(ACA_E, c_applIdRf),
                session_Id  := m_sessionId_dummy,
                aCA_Body    := m_rf_ACA_Body_dummy
            } // End of template m_rf_ACA_dummy
            
            /**
             * @desc Generic send message for UL-Answer message body
             */
            template (value) ACA_Body_AVP m_rf_ACA_Body_dummy := {
                result_Code                     := m_resultCode(DIAMETER_SUCCESS_E),
                origin_Host                     := m_originHost_dummy,
                origin_Realm                    := m_originRealm_dummy,
                accounting_Record_Type          := m_accounting_Record_Type_dummy,
                accounting_Record_Number        := m_accounting_Record_Number_dummy,
                acct_Application_Id             := omit,
                vendor_Specific_Application_Id  := omit,
                user_Name                       := omit,
                accounting_Sub_Session_Id       := omit,
                acct_Session_Id                 := omit,
                acct_Multi_Session_Id           := omit,
                error_Reporting_Host            := omit,
                acct_Interim_Interval           := omit,
                accounting_Realtime_Required    := omit,
                origin_State_Id                 := omit,
                event_Timestamp                 := omit,
                proxy_Info                      := omit,
                aVP_Type                        := omit
            } // End of template m_rf_ACA_Body_dummy
            
        } // End of group Rf_dummy_answer_templates_send 
        
        group Rf_dummy_request_message_templates_receive { 
            
//            /**
//             * @desc Generic receive message for AC-Request message 
//             */
//            template (present) ACR_MSG mw_rf_aCR_dummy := {
//                header      := mw_diameterHeaderReq_dummy (ACR_E, c_applIdRf),
//                session_Id  := ?,
//                aCR_Body    := mw_rf_ACR_Body_dummy
//            } // End of template mw_rf_aCR_dummy
//            
//            /**
//             * @desc Generic receive message for AC-Request message body
//             */
//            template (present) ACR_Body_AVP mw_rf_ACR_Body_dummy := {
//            } // End of template mw_rf_ACR_Body_dummy
//            
        } // End of group Rf_dummy_request_message_templates_receive 
        
        group Rf_dummy_answer_message_templates_receive { 
            
            /**
             * @desc Generic receive message for AC-Answer message
             */
            template (present) ACA_MSG mw_rf_ACA_dummy := {
                header      := mw_diameterHeaderAns_dummy (ACA_E, c_applIdRf),
                session_Id  := ?,
                aCA_Body    := mw_rf_ACA_Body_dummy
            } // End of template mw_rf_ACA_dummy
            
            /**
             * @desc Generic receive message for AC-Answer message body
             */
            template (present) ACA_Body_AVP mw_rf_ACA_Body_dummy := {
                result_Code                     := mw_resultCode(DIAMETER_SUCCESS_E),
                origin_Host                     := ?,
                origin_Realm                    := ?,
                accounting_Record_Type          := ?,
                accounting_Record_Number        := ?,
                acct_Application_Id             := *,
                vendor_Specific_Application_Id  := *,
                user_Name                       := *,
                accounting_Sub_Session_Id       := *,
                acct_Session_Id                 := *,
                acct_Multi_Session_Id           := *,
                error_Reporting_Host            := *,
                acct_Interim_Interval           := *,
                accounting_Realtime_Required    := *,
                origin_State_Id                 := *,
                event_Timestamp                 := *,
                proxy_Info                      := *,
                aVP_Type                        := *
            } // End of template mw_rf_ACA_Body_dummy
            
        } // End of group Rf_dummy_answer_message_templates_receive 
        
        group Rf_request_message_templates_send {
            
            /**
             * @desc Main receive message for CDF_Rf port
             * @param p_aCR_MSG AC-Request message
             */
            template (value) DIAMETER_MSG m_ctfAccountingRequest(
                                                                 in template (value) ACR_MSG p_aCR_MSG
            ) := {
                aCR_MSG := p_aCR_MSG
            } // End of template m_ctfAccountingRequest
            
            /**
             * @desc Send template for ACR
             * @param p_sessionId   Session identifier
             * @param p_acrBody     ACR message body
             */
            template (value) ACR_MSG md_aCR(
                                            in template (value) Session_Id_AVP  p_sessionId,
                                            in template (value) ACR_Body_AVP    p_acrBody
            ) modifies m_rf_ACR_dummy := {
                session_Id  := p_sessionId,
                aCR_Body    := p_acrBody
            } // End of template md_aCR
            
            /**
             * @desc Receive template for ACR message body
             * @param p_resultCode                  Indicates whether a particular request was completed successfully or an error occurred
             * @param p_originHost                  Identifies the endpoint that originated the Diameter message
             * @param p_originRealm                 Realm of the originator
             * @param p_accounting_Record_Type      TODO
             * @param p_accounting_Record_Number    TODO
             * @param p_service_Information         TODO
             */
            template (omit) ACR_Body_AVP md_acrBodyAvps(
                                                        in template (value) Origin_Host_AVP              p_originHost,
                                                        in template (value) Origin_Realm_AVP             p_originRealm,
                                                        in template (value) Accounting_Record_Type_AVP   p_accounting_Record_Type,
                                                        in template (value) Accounting_Record_Number_AVP p_accounting_Record_Number,
                                                        in template (omit) Service_Information_AVP       p_service_Information := omit
            ) modifies m_rf_ACR_Body_dummy := {
                    origin_Host                 := p_originHost,
                    origin_Realm                := p_originRealm,
                    accounting_Record_Type      := p_accounting_Record_Type,
                    accounting_Record_Number    := p_accounting_Record_Number,
    			    service_Information_AVP    := p_service_Information
            } // End of template md_acrBodyAvps
            
        } // End of group Rf_request_message_templates_send 
        
        group Rf_answer_message_templates_receive { 
            
            /**
             * @desc Main receive message for CDF_Rf port
             * @param p_aCA_MSG AC-Answer message
             */
            template (value) DIAMETER_MSG mw_cdfAccountingResponse(
                                                                   in template (value) ACA_MSG p_aCA_MSG
            ) := {
                aCA_MSG := p_aCA_MSG
            } // End of template mw_cdfAccountingResponse
            
            /**
             * @desc Send template for ACA
             * @param p_sessionId   Session identifier
             * @param p_acaBody     ACA message body
             */
            template (present) ACA_MSG mdw_aCA(
                                               template (present) Session_Id_AVP  p_sessionId,
                                               template (present) ACA_Body_AVP    p_acaBody
            ) modifies mw_rf_ACA_dummy := {
                session_Id  := p_sessionId,
                aCA_Body    := p_acaBody
            } // End of template md_aCA
            
            template (present) ACA_Body_AVP mdw_acaBodyAvps(
                                                            template (present) Result_Code_AVP              p_resultCode,
                                                            template (present) Origin_Host_AVP              p_originHost,
                                                            template (present) Origin_Realm_AVP             p_originRealm,
                                                            template (present) Accounting_Record_Type_AVP   p_accounting_Record_Type,
                                                            template (present) Accounting_Record_Number_AVP p_accounting_Record_Number
            ) := {
                result_Code                 := p_resultCode,
                origin_Host                 := p_originHost,
                origin_Realm                := p_originRealm,
                accounting_Record_Type      := p_accounting_Record_Type,
                accounting_Record_Number    := p_accounting_Record_Number
            } // End of template mdw_acaBodyAvps 
            
        } // End of group Rf_answer_message_templates_receive 
        
    } // End of group Rf_message_templates 
    
    group Rf_avps_templates { 
        
        group Rf_dummy_avps_templates_send { 
            
            /**
             * @desc Service-Information AVP, Basic send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.192 Service-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (omit) Service_Information_AVP m_service_Information_AVP_dummy := {
                aVP_Header                  := m_aVP_HeaderVid_Mbit1(c_service_Information_AVP_Code, 4, c_vendId3gpp),
                subscription_Id             := omit,
                aoc_Information             := omit,
                ps_Information              := omit,
                wlan_Information            := omit,
                ims_Information             := omit,
                mms_Information             := omit,
                lcs_Information             := omit,
                poc_Information             := omit,
                mbms_Information            := omit,
                sms_Information             := omit,
                mmtel_Information           := omit,
                service_Generic_Information := omit,
                im_Information              := omit,
                dcd_Information             := omit
            } // End of template m_service_Information_AVP_dummy
            
            /**
             * @desc PS-Information AVP, Basic send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.158 PS-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (omit) PS_Information_AVP m_ps_Information_AVP_dummy := {
                aVP_Header                               := m_aVP_HeaderVid_Mbit1(c_service_Information_AVP_Code, 0, c_vendId3gpp),
                threeGPP_Charging_Id                     := omit,
                pdn_Connection_Charging_ID               := omit,
                node_Id                                  := omit,
                threeGPP_PDP_Type                        := omit,
                pdp_Address                              := omit,
                pdp_Address_Prefix_Length                := omit,
                dynamic_Address_Flag                     := omit,
                dynamic_Address_Flag_Extension           := omit,
                qos_Information                          := omit,
                sgsn_Address                             := omit,
                ggsn_Address                             := omit,
                sgw_Address                              := omit,
                cg_Address                               := omit,
                serving_Node_Type                        := omit,
                sgw_Change                               := omit,
                threeGPP_IMSI_MCC_MNC                    := omit,
                imsi_Unauthenticated_Flag                := omit,
                threeGPP_GGSN_MCC_MNC                    := omit,
                threeGPP_NSAPI                           := omit,
                called_Station_Id                        := omit,
                threeGPP_Session_Stop_Indicator          := omit,
                threeGPP_Selection_Mode                  := omit,
                threeGPP_Charging_Characteristics        := omit,
                charging_Characteristics_Selection_Mode  := omit,
                threeGPP_SGSN_MCC_MNC                    := omit,
                threeGPP_MS_TimeZone                     := omit,
                charging_Rule_Base_Name                  := omit,
                threeGPP_User_Location_Info              := omit,
                user_CSG_Information                     := omit,
                threeGPP2_BSID                           := omit,
                threeGPP_RAT_Type                        := omit,
                ps_Furnish_Charging_Information          := omit,
                pdp_Context_Type                         := omit,
                offline_Charging                         := omit,
                traffic_Data_Volumes                     := omit,
                service_Data_Container                   := omit,
                user_Equipment_Info                      := omit,
                terminal_Information                     := omit,
                start_Time                               := omit,
                stop_Time                                := omit,
                change_Condition                         := omit,
                diagnostics                              := omit,
                low_Priority_Indicator                   := omit
            } // End of template m_ps_Information_AVP_dummy
            
            /**
             * @desc The Service-Data-Container send template
             * @param p_aVP_Header                   Header AVP
             * @param p_aF_Correlation_Information   TODO
             * @param p_charging_Rule_Base_Name      TODO
             * @param p_accounting_Input_Octets      TODO
             * @param p_accounting_Output_Octets     TODO
             * @param p_local_Sequence_Number        TODO
             * @param p_qos_Information              TODO
             * @param p_rating_Group                 TODO
             * @param p_change_Time                  TODO
             * @param p_service_Identifier           TODO
             * @param p_service_Specific_Info        TODO
             * @param p_SGSN_Address                 TODO
             * @param p_time_First_Usage             TODO
             * @param p_time_Last_Usage              TODO
             * @param p_time_Usage                   TODO
             * @param p_change_Condition             TODO
             * @param p_threeGPP_User_Location_Info  TODO
             * @param p_threeGPP2_BSID               TODO
             * @param p_user_CSG_Information         TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.189 Service-Data-Container AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (omit) Service_Data_Container_AVP m_service_Data_Container_AVP_dummy := {
                aVP_Header                  := m_aVP_HeaderVid_Mbit1(c_service_Data_Container_AVP_Code, 0, c_vendId3gpp),
                aF_Correlation_Information  := omit,
                charging_Rule_Base_Name     := omit,
                accounting_Input_Octets     := omit,
                accounting_Output_Octets    := omit,
                local_Sequence_Number       := omit,
                qos_Information             := omit,
                rating_Group                := omit, 
                change_Time                 := omit, 
                service_Identifier          := omit, 
                service_Specific_Info       := omit, 
                SGSN_Address                := omit, 
                time_First_Usage            := omit,
                time_Last_Usage             := omit,
                time_Usage                  := omit,
                change_Condition            := omit,
                threeGPP_User_Location_Info := omit,
                threeGPP2_BSID              := omit,
                user_CSG_Information        := omit
            } // End of template m_service_Data_Container_AVP_dummy
            
        } // End of group Rf_dummy_avps_templates_send 
        
        group Rf_dummy_avps_templates_receive { 
            
            /**
             * @desc Service-Information AVP, Basic receive template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.192 Service-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template Service_Information_AVP mw_service_Information_AVP_dummy := {
                aVP_Header                  := mw_aVP_HeaderVid_Mbit1(c_service_Information_AVP_Code, ?, c_vendId3gpp),
                subscription_Id             := *,
                aoc_Information             := *,
                ps_Information              := *,
                wlan_Information            := *,
                ims_Information             := *,
                mms_Information             := *,
                lcs_Information             := *,
                poc_Information             := *,
                mbms_Information            := *,
                sms_Information             := *,
                mmtel_Information           := *,
                service_Generic_Information := *,
                im_Information              := *,
                dcd_Information             := *
            } // End of template mw_service_Information_AVP_dummy
            
            /**
             * @desc PS-Information AVP, Basic receive template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.158 PS-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template PS_Information_AVP mw_ps_Information_AVP_dummy := {
                aVP_Header                               := mw_aVP_HeaderVid_Mbit1(c_service_Information_AVP_Code, ?, c_vendId3gpp),
                threeGPP_Charging_Id                     := *,
                pdn_Connection_Charging_ID               := *,
                node_Id                                  := *,
                threeGPP_PDP_Type                        := *,
                pdp_Address                              := *,
                pdp_Address_Prefix_Length                := *,
                dynamic_Address_Flag                     := *,
                dynamic_Address_Flag_Extension           := *,
                qos_Information                          := *,
                sgsn_Address                             := *,
                ggsn_Address                             := *,
                sgw_Address                              := *,
                cg_Address                               := *,
                serving_Node_Type                        := *,
                sgw_Change                               := *,
                threeGPP_IMSI_MCC_MNC                    := *,
                imsi_Unauthenticated_Flag                := *,
                threeGPP_GGSN_MCC_MNC                    := *,
                threeGPP_NSAPI                           := *,
                called_Station_Id                        := *,
                threeGPP_Session_Stop_Indicator          := *,
                threeGPP_Selection_Mode                  := *,
                threeGPP_Charging_Characteristics        := *,
                charging_Characteristics_Selection_Mode  := *,
                threeGPP_SGSN_MCC_MNC                    := *,
                threeGPP_MS_TimeZone                     := *,
                charging_Rule_Base_Name                  := *,
                threeGPP_User_Location_Info              := *,
                user_CSG_Information                     := *,
                threeGPP2_BSID                           := *,
                threeGPP_RAT_Type                        := *,
                ps_Furnish_Charging_Information          := *,
                pdp_Context_Type                         := *,
                offline_Charging                         := *,
                traffic_Data_Volumes                     := *,
                service_Data_Container                   := *,
                user_Equipment_Info                      := *,
                terminal_Information                     := *,
                start_Time                               := *,
                stop_Time                                := *,
                change_Condition                         := *,
                diagnostics                              := *,
                low_Priority_Indicator                   := *
            } // End of template mw_ps_Information_AVP_dummy
            
            /**
             * @desc The Service-Data-Container rceive template
             * @param p_aVP_Header                   Header AVP
             * @param p_aF_Correlation_Information   TODO
             * @param p_charging_Rule_Base_Name      TODO
             * @param p_accounting_Input_Octets      TODO
             * @param p_accounting_Output_Octets     TODO
             * @param p_local_Sequence_Number        TODO
             * @param p_qos_Information              TODO
             * @param p_rating_Group                 TODO
             * @param p_change_Time                  TODO
             * @param p_service_Identifier           TODO
             * @param p_service_Specific_Info        TODO
             * @param p_SGSN_Address                 TODO
             * @param p_time_First_Usage             TODO
             * @param p_time_Last_Usage              TODO
             * @param p_time_Usage                   TODO
             * @param p_change_Condition             TODO
             * @param p_threeGPP_User_Location_Info  TODO
             * @param p_threeGPP2_BSID               TODO
             * @param p_user_CSG_Information         TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.189 Service-Data-Container AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (omit) Service_Data_Container_AVP mw_service_Data_Container_AVP_dummy := {
                aVP_Header                  := mw_aVP_HeaderVid_Mbit1(c_service_Data_Container_AVP_Code, ?, c_vendId3gpp),
                aF_Correlation_Information  := omit,
                charging_Rule_Base_Name     := omit,
                accounting_Input_Octets     := omit,
                accounting_Output_Octets    := omit,
                local_Sequence_Number       := omit,
                qos_Information             := omit,
                rating_Group                := omit, 
                change_Time                 := omit, 
                service_Identifier          := omit, 
                service_Specific_Info       := omit, 
                SGSN_Address                := omit, 
                time_First_Usage            := omit,
                time_Last_Usage             := omit,
                time_Usage                  := omit,
                change_Condition            := omit,
                threeGPP_User_Location_Info := omit,
                threeGPP2_BSID              := omit,
                user_CSG_Information        := omit
            } // End of template mw_service_Data_Container_AVP_dummy
            
        } // End of group Rf_dummy_avps_templates_receive 
        
        group Rf_avps_templates_send { 
            
            template Accounting_Record_Type_AVP m_accounting_Record_Type(
                                                                         in template (value) Acc_Record_Type p_aVP_Data
            ) modifies m_accounting_Record_Type_dummy := {
                aVP_Data := p_aVP_Data
            } // End of template m_accounting_Record_Type 
            
            template Accounting_Record_Number_AVP m_accounting_Record_Number(
                                                                             in template (value) UInt32 p_aVP_Data
            ) modifies m_accounting_Record_Number_dummy := {
                aVP_Data := p_aVP_Data
            } // End of template m_accounting_Record__Number
            
            /**
             * @desc The Accounting-Input-Octets send template 
             * @param p_octetsTransmitted   Number of octets transmitted during the data container recording interval, reflecting the volume counts for uplink traffic for a data flow
             */
            template (value) Accounting_Input_Octets_AVP m_accounting_Input_Octets_AVP(
                                                                                       in template (value) UInt64 p_octetsTransmitted
            ) := {
                aVP_Header          := m_aVP_HeaderVid_Mbit1(c_accounting_Input_Octets_AVP_Code, 8, c_vendId3gpp),
                octetsTransmitted   := p_octetsTransmitted
            } // End of template m_accounting_Input_Octets_AVP 
            
            /**
             * @desc The Accounting-Output-Octets send template 
             * @param p_octetsTransmitted   Number of octets transmitted during the data container recording interval, reflecting the volume counts for downlink traffic for a data flow
             */
            template (value) Accounting_Output_Octets_AVP m_accounting_Output_Octets_AVP(
                                                                                         in template (value) UInt64 p_octetsTransmitted
            ) := {
                aVP_Header          := m_aVP_HeaderVid_Mbit1(c_accounting_Output_Octets_AVP_Code, 8, c_vendId3gpp),
                octetsTransmitted   := p_octetsTransmitted
            } // End of template m_accounting_Output_Octets_AVP 
            
            /**
             * @desc The CG-Address send template 
             * @param p_address_AVP    Holds the IP-address of the charging gateway
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.36  CG-Address AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) CG_Address_AVP m_cg_Address_AVP(
                                                             in template (value) Address p_address_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_cg_Address_AVP_Code, f_getEncvalueLength(encvalue(p_address_AVP)), c_vendId3gpp),
                address_AVP := p_address_AVP
            } // End of template m_cg_Address_AVP
            
            /**
             * @desc The GGSN-Address send template 
             * @param p_address_AVP    Holds the IP-address of the P-GW that generated the GPRS/EPC Charging ID
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.68 GGSN-Address AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) GGSN_Address_AVP m_ggsn_Address_AVP(
                                                                 in template (value) Address p_address_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_ggsn_Address_AVP_Code, f_getEncvalueLength(encvalue(p_address_AVP)), c_vendId3gpp),
                address_AVP := p_address_AVP
            } // End of template m_ggsn_Address_AVP
            
            /**
             * @desc The Service-Specific-Data send template
             * @param p_data_AVP Holds the value of the Service-Specific-Data
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.194 Service-Specific-Data AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Service_Specific_Data_AVP m_service_Specific_Data_AVP(
                                                                                   in template (value) UTF8String p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_service_Specific_Data_AVP_Code, f_getUTF8StringLength(valueof(p_data_AVP)), c_vendId3gpp),
                data_AVP := p_data_AVP
            } // End of template m_service_Specific_Data_AVP
            
            /**
             * @desc The PS-Append-Free-Format-Data send template
             * @param p_data_AVP     Indicates if the information sent in the PS-Free-Format-Data AVP must be appended to the PS-free-format-data stored for the online-session
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP 
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) PS_Append_Free_Format_Data_AVP m_ps_Append_Free_Format_Data_AVP(
                                                                                             in template (value) PS_Append_Free_Format_Data p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_ps_Append_Free_Format_Data_AVP_Code, 4, c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_ps_Append_Free_Format_Data_AVP
            
            /**
             * @desc The PS-Furnish-Charging-Information send template
             * @param p_data_AVP     Holds online charging session specific data
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.156 PS-Free-Format-Data AVP 
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) PS_Free_Format_Data_AVP m_ps_Free_Format_Data_AVP(
                                                                               in template (value) octetstring p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_ps_Free_Format_Data_AVP_Code, f_getOctetStringLength(valueof(p_data_AVP)), c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_ps_Free_Format_Data_AVP
            
            /**
             * 
             * @desc The PS-Furnish-Charging-Information send template
             * @param p_aVP_Header                   Header AVP
             * @param p_threeGPP_Charging_Id        TODO
             * @param p_ps_Append_Free_Format_Data  TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.157 PS-Furnish-Charging-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) PS_Furnish_Charging_Information_AVP m_ps_Furnish_Charging_Information_AVP(
                                                                                                       in template (value) ThreeGPP_Charging_Id_AVP p_threeGPP_Charging_Id,
                                                                                                       in template (value) PS_Free_Format_Data_AVP  p_ps_Free_Format_Data
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_ps_Furnish_Charging_Information_AVP_Code, f_getPSFurnishChargingInformationAVPLength(p_threeGPP_Charging_Id, p_ps_Free_Format_Data), c_vendId3gpp),
                threeGPP_Charging_Id := p_threeGPP_Charging_Id,
                ps_Free_Format_Data := p_ps_Free_Format_Data,
                ps_Append_Free_Format_Data := omit
            } // End of template m_ps_Furnish_Charging_Information_AVP
            
            /**
             * @desc The Quota-Consumption-Time send template 
             * @param p_aVP_Header   Header AVP
             * @param p_threshold   Contains an idle traffic threshold time in seconds
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.159 Quota-Consumption-Time AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Quota_Consumption_Time_AVP m_quota_Consumption_Time_AVP(
                                                                                     in template (value) UInt32 p_threshold
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_quota_Consumption_Time_AVP_Code, 4, c_vendId3gpp),
                threshold   := p_threshold
            } // End of template m_quota_Consumption_Time_AVP
            
            /**
             * @desc The WAG-Address send template
             * @param p_data_AVP     Address and contains the WAG IP address
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.244 WAG-Address AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) WAG_Address_AVP m_wag_Address_AVP(
                                                               in template (value) Address p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_wag_PLMN_Ids_AVP_Code, f_getEncvalueLength(encvalue(p_data_AVP)), c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_wag_Address_AVP
            
            /**
             * @desc The WAG-PLMN-Ids send template
             * @param p_data_AVP     Contains the WAG PLMN id (MCC and MNC)
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.245 WAG-PLMN-Id AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) WAG_PLMN_Id_AVP m_wag_PLMN_Ids_AVP(
                                                                 in template (value) octetstring p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_wag_PLMN_Ids_AVP_Code, f_getOctetStringLength(valueof(p_data_AVP)), c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_wag_PLMN_Ids_AVP
            
            /**
             * @desc The WLAN-Radio-Container receive template 
             * @param p_operator_Name        TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.247 WLAN-Radio-Container AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) WLAN_Radio_Container_AVP m_wlan_Radio_Container_AVP(
                                                                                 in template (value) Operator_Name_AVP p_operator_Name
            ) := {
                aVP_Header              := m_aVP_HeaderVid_Mbit1(c_wlan_Radio_Container_AVP_Code, f_getWLANRadioContainerAVPLength(p_operator_Name), c_vendId3gpp),
                operator_Name           := p_operator_Name,
                location_Data           := omit,
                location_Information    := omit,
                wlan_Technology         := omit
            } // End of template m_wlan_Radio_Container_AVP
            
            /**
             * @desc The PDG-Address send template 
             * @param p_data_AVP     Address and contains the UE"s local IP address
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.250 WLAN-UE-Local-IPAddress AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) WLAN_UE_Local_IPAddress_AVP m_wlan_UE_Local_IPAddress_AVP(
                                                                                       in template (value) Address p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_wlan_UE_Local_IPAddress_AVP_Code, f_getEncvalueLength(encvalue(p_data_AVP)), c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_wlan_UE_Local_IPAddress_AVP
            
            /**
             * @desc The PDG-Address send template 
             * @param p_data_AVP     Address and contains the PDG IP address
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.244 PDG-Address AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) PDG_Address_AVP m_pdg_Address_AVP(
                                                               in template (value) Address p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_pdg_Address_AVP_Code, f_getEncvalueLength(encvalue(p_data_AVP)), c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_pdg_Address_AVP
            
            /**
             * @desc The PDG-Charging-Id AVP (AVP code 896)
             * @param p_data_AVP     Contains the charging identifier generated by the PDG for the tunnel
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.135 PDG-Charging-Id AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) PDG_Charging_Id_AVP m_pdg_Charging_Id_AVP(
                                                                       in template (value) UInt32 p_data_AVP
            ) :=  {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_pdg_Charging_Id_AVP_Code, 4, c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_pdg_Charging_Id_AVP
            
            /**
             * @desc The Unit-Quota-Threshold send template 
             * @param p_threshold   Threshold value in service specific units
             */
            template (value) Unit_Quota_Threshold_AVP m_unit_Quota_Threshold_AVP(
                                                                                 in template (value) UInt32 p_threshold
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_unit_Quota_Threshold_AVP_Code, 4, c_vendId3gpp),
                threshold   := p_threshold
            } // End of template m_unit_Quota_Threshold_AVP
            
            /**
             * @desc The SGSN-Address send template
             * @param p_address_AVP  Holds the IP-address of the SGSN/Serving Node that was used during a report
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.199 SGSN-Address AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) SGSN_Address_AVP m_sgsn_Address_AVP(
                                                                 in template (value) Address p_address_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_sgsn_Address_AVP_Code, f_getEncvalueLength(encvalue(p_address_AVP)), c_vendId3gpp),
                address_AVP := p_address_AVP
            } // End of template m_sgsn_Address_AVP
            
            /**
             * @desc The 7.2.248    WLAN-Session-Id send template
             * @param p_aVP_Header   Header AVP
             * @param p_data_AVP    Contains the charging id generated by the AAA Server for the session
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.248 WLAN-Session-Id AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) WLAN_Session_Id_AVP m_wlan_Session_Id_AVP(
                                                                       in template (value) UInt32 p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_wlan_Session_Id_AVP_Code, 4, c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_wlan_Session_Id_AVP
            
            /**
             * @desc The PDP-Context-Type send template
             * @param p_reason       Contains the reason for closing a container and the addition of a new container. The AVP may take the following values
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.138 PDP-Context-Type AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) PDP_Context_Type_AVP m_pdp_Context_Type_AVP(
                                                                         in template (value) PDP_Context_Type p_reason
            ) :={
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_pdp_Context_Type_AVP_Code, 4, c_vendId3gpp),
                reason      := p_reason
            } // End of template m_pdp_Context_Type_AVP
            
            /**
             * @desc Service-Specific-Type send template
             * @param p_data_AVP       Holds the type of the Service-Specific-Data
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.196 Service-Specific-Type AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Service_Specific_Type_AVP m_service_Specific_Type_AVP(
                                                                                   in template (value) UInt32 p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_service_Specific_Type_AVP_Code, 4, c_vendId3gpp),
                data_AVP := p_data_AVP
            } // End of template m_service_Specific_Type_AVP
            
            /**
             * @desc Base-Time-Interval send template
             * @param p_reason  contains the length of the base time interval, for controlling the consumption of time quota, in seconds
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.29  Base-Time-Interval AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Base_Time_Interval_AVP m_base_Time_Interval_AVP(
                                                                             in template (value) UInt32 p_time
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_base_Time_Interval_AVP_Code, 4, c_vendId3gpp),
                time        := p_time
            } // End of template m_base_Time_Interval_AVP
            
            /**
             * @desc The Time-Quota-Mechanism send template
             * @param p_time_Quota_Type      TODO
             * @param p_base_Time_Interval   TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.228 Time-Quota-Mechanism
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (omit) Time_Quota_Mechanism_AVP m_time_Quota_Mechanism_AVP(
                                                                                in template (omit) Time_Quota_Type_AVP    p_time_Quota_Type := omit,
                                                                                in template (omit) Base_Time_Interval_AVP p_base_Time_Interval := omit
            ) := {
                aVP_Header          := m_aVP_HeaderVid_Mbit1(c_time_Quota_Mechanism_AVP_Code, f_getTimeQuotaMechanismAVPLength(p_time_Quota_Type, p_base_Time_Interval), c_vendId3gpp),
                time_Quota_Type     := p_time_Quota_Type,
                base_Time_Interval  := p_base_Time_Interval
            } // End of template m_time_Quota_Mechanism_AVP
            
            /**
             * @desc The Offline-Charging send template
             * @param p_quota_Consumption_Time           TODO
             * @param p_time_Quota_Mechanism             TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.121 Offline-Charging AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Offline_Charging_AVP m_offline_Charging_AVP(
                                                                         in template (value) Quota_Consumption_Time_AVP   p_quota_Consumption_Time,
                                                                         in template (value) Time_Quota_Mechanism_AVP     p_time_Quota_Mechanism
            ) := {
                aVP_Header                          := m_aVP_HeaderVid_Mbit1(c_offline_Charging_AVP_Code, f_getOfflineChargingLength(p_quota_Consumption_Time, p_time_Quota_Mechanism), c_vendId3gpp),
                quota_Consumption_Time              := p_quota_Consumption_Time,
                time_Quota_Mechanism                := p_time_Quota_Mechanism,
                envelope_Reporting                  := omit,
                multiple_Services_Credit_Control    := omit,
                aVP_Type                            := omit
            } // End of template m_offline_Charging_AVP
            
            /**
             * @desc The Envelope-Reporting send template 
             * @param p_aVP_Header   Header AVP
             * @param p_data_AVP     Indicate whether the client shall report the start and end of each time envelope, in those cases in which quota is consumed in envelopes
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61  Envelope-Reporting AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (value) Envelope_Reporting_AVP m_envelope_Reporting_AVP(
                                                                             in template (value) Envelope_Reporting p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_envelope_Reporting_AVP_Code, 4, c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_envelope_Reporting_AVP
            
            /**
             * @desc The AF-Correlation-Information send template 
             * @param p_af_Charging_Identifier   TODO
             * @param p_flows                    Flow identifiers generated by the AF and received by P-GW over Rx/Gx as defined in TS 29.214 [214] and TS 29.212 [215]
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.11  AF-Correlation-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (omit) AF_Correlation_Information_AVP m_af_Correlation_Information_AVP(
                                                                                            in template (omit) AF_Charging_Identifier_AVP  p_af_Charging_Identifier := omit,
                                                                                            in template (omit) Flows_AVP                   p_flows := omit
            ) := {
                aVP_Header              := m_aVP_HeaderVid_Mbit1(c_af_Correlation_Information_AVP_Code, f_getAFCorrelationInformationAVPLength(p_af_Charging_Identifier, p_flows), c_vendId3gpp),
                af_Charging_Identifier  := p_af_Charging_Identifier,
                flows                   := { p_flows }
            } // End of template m_af_Correlation_Information_AVP
            
            /**
             * @desc The Low-Balance-Indication send template 
             * @param p_data_AVP Indicates if the subscriber balance went below a designated threshold by its account
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97  Low-Balance-Indication AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template (value) Low_Balance_Indication_AVP m_low_Balance_Indication_AVP(
                                                                                     in template (value) Low_Balance_Indication p_data_AVP
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_low_Balance_Indication_AVP_Code, 4, c_vendId3gpp),
                data_AVP    := p_data_AVP
            } // End of template m_low_Balance_Indication_AVP