DiameterRfRo_Templates.ttcn 394 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;
juvancic's avatar
juvancic committed
    import from LibCommon_DataStrings all;
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;
    import from LibDiameter_Templates all;
pintar's avatar
pintar committed
    group SubFields{
    } // End of group SubFields
pintar's avatar
pintar committed

    group HeaderFieldTemplates {
pintar's avatar
pintar committed

garciay's avatar
garciay committed
        template (value) Command_Flags m_cmdFlagsAns_CmdFlags_T modifies m_cmdFlagsAns := {
            t_bit := '1'B
        }
        
        template (value) DiameterHeader m_diameterHeaderReq_CmdFlags_T(
                                                                      in Command_Code p_cmdcode, 
                                                                      in UInt32 p_applid
        ) modifies m_diameterHeaderReq_dummy := {
            cmdflags := m_cmdFlagsAns_CmdFlags_T
        }
        
juvancic's avatar
juvancic committed
        template DiameterHeader mw_diameterHeaderReq_CmdFlags(Command_Code p_cmdcode, template (present) UInt32 p_applid, template (present) Command_Flags p_commandFlags) modifies mw_diameterHeaderReq_dummy := {
            cmdflags := p_commandFlags
        }
pintar's avatar
pintar committed

        template (present) DiameterHeader mw_diameterHeaderAns_CmdFlags(
                                                                        Command_Code p_cmdcode, 
                                                                        template (present) UInt32 p_applid, 
                                                                        template (present) Command_Flags p_commandFlags
        ) modifies mw_diameterHeaderAns_dummy := {
pintar's avatar
pintar committed
            cmdflags := p_commandFlags
        } // End of template mw_diameterHeaderAns_CmdFlags
juvancic's avatar
juvancic committed

        /**
         * @desc Received generic command flag template
         */
juvancic's avatar
juvancic committed
        template (present) Command_Flags mw_cmdFlagsReq_PET(in Bit1 p_P, in Bit1 p_E,in Bit1 p_T) := {
            r_bit           := '1'B,            //Request message
            p_bit           := p_P,
            e_bit           := p_E,
            t_bit           := p_T,
            reserved_bits    := '0000'B
        } // End of template mw_cmdFlagsAns
        
        /**
         * @desc Received generic command flag template
         */
juvancic's avatar
juvancic committed
        template (present) Command_Flags mw_cmdFlagsAns_PET(in Bit1 p_P, in Bit1 p_E,in Bit1 p_T) := {
            r_bit           := '0'B,            //Answer message
            p_bit           := p_P,
            e_bit           := p_E,
            t_bit           := p_T,
            reserved_bits    := '0000'B
        } // End of template mw_cmdFlagsAns
juvancic's avatar
juvancic committed
//        /**
//         * @desc Received generic command flag template
//         */
//        template (present) Command_Flags mw_cmd1TFlagsAns 
//        modifies mw_cmdFlagsAns := {
//            t_bit           := '1'B // T message
//        } // End of template mw_cmdTFlagsAns
//        
//        /**
//         * @desc Received generic command flag template
//         */
//        template (present) Command_Flags mw_cmd_0TFlagsAns 
//        modifies mw_cmdFlagsAns := {
//            t_bit           := '0'B // !T message
//        } // End of template mw_cmdTFlagsAns
pintar's avatar
pintar committed
        
        template (present) AVP_Header mw_aVP_HeaderVid_Vbit1Mbit0( // TODO To be moved in LibDiameter_Templates
                                                        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_vid     := p_avpVid
        template (present) AVP_Header mw_aVP_HeaderVid_Vbit1Mbit1( // TODO To be moved in LibDiameter_Templates
                                                                  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_vid     := p_avpVid
pintar's avatar
pintar committed
        }
        
    } // End of group HeaderFieldTemplates
    
    // TODO Check where to put it, also define in DiameterS9_Templates module
    template (value) Subscription_Id_AVP m_subscription_Id(
                                                           in template (value) Subscription_Id_Type_AVP p_typeAVP, 
                                                           in template (value) Subscription_Id_Data_AVP p_dataAVP
    ) := {
        aVP_Header := m_aVP_HeaderVid_Mbit1(
                                            c_subscription_Id_AVP_Code,
                                            f_getByteAlignedLength(p_typeAVP.aVP_Header.aVP_len) + 
                                            f_getByteAlignedLength(p_dataAVP.aVP_Header.aVP_len),
                                            omit),
        subscription_Id_Type := p_typeAVP,
        subscription_Id_Data := p_dataAVP
    } // End of template m_subscription_Id
    
    template (value) Subscription_Id_Type_AVP m_subscription_Id_Type(
                                                                     in template (value) Subscription_Id_Ty_Type p_aVPData
        aVP_Header  := m_aVP_HeaderVid_Mbit1(c_subscription_Id_Type_AVP_Code, f_getEnumLength(), omit),
        aVP_Data    := p_aVPData
    } // End of template m_subscription_Id_Type

    template (value) Subscription_Id_Data_AVP m_subscription_Id_Data(
                                                                     in template (value) UTF8String p_aVPData
        aVP_Header  := m_aVP_HeaderVid_Mbit1(c_subscription_Id_Data_AVP_Code, f_getUTF8StringLength(valueof(p_aVPData)), omit),
        aVP_Data    := p_aVPData
    } // End of template  m_subscription_Id_Data
garciay's avatar
garciay committed

juvancic's avatar
juvancic committed
    group Rf_modified_message_templates { 
        group Rf_request_message_templates_send {
            
            /**
             * @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_ACR_dummy := {
juvancic's avatar
juvancic committed
                header := m_diameterHeaderReq_dummy(ACR_E, c_applIdRfRo),
                session_Id  := p_sessionId,
                aCR_Body    := p_acrBody
            } // End of template md_aCR
            
juvancic's avatar
juvancic committed
            /**
             * @desc Send template for ACR
             * @param p_sessionId   Session identifier
             * @param p_acrBody     ACR message body
             */
            template (value) ACR_MSG md_aCR_TflagSet(
                                                     in template (value) Session_Id_AVP  p_sessionId,
                                                     in template (value) ACR_Body_AVP    p_acrBody
juvancic's avatar
juvancic committed
            ) modifies m_ACR_dummy := {
                header := m_diameterHeaderReqDuplicated_dummy(ACR_E, c_applIdRfRo),
                session_Id  := p_sessionId,
                aCR_Body    := p_acrBody
            } // End of template md_aCR
             
juvancic's avatar
juvancic committed
             * @desc Send template for ACR message body
juvancic's avatar
juvancic committed
            template (omit) ACR_Body_AVP md_acrBodyAvps_TypeOfCharging(
                                                                       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) Event_Timestamp_AVP           p_event_Timestamp := omit,
juvancic's avatar
juvancic committed
                                                                       in template (omit) Service_Information_AVP       p_service_Information := omit,
                                                                       in template (omit) Service_Context_Id_AVP        p_service_Context_Id := omit
            ) modifies m_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,
juvancic's avatar
juvancic committed
                    event_Timestamp             := p_event_Timestamp,
juvancic's avatar
juvancic committed
                    service_Information         := p_service_Information,
                    service_Context_Id          := p_service_Context_Id
juvancic's avatar
juvancic committed
            } // End of template md_acrBodyAvps_TypeOfCharging_Session
juvancic's avatar
juvancic committed
        } // End of group Rf_request_message_templates_send  
        
        group Rf_request_message_templates_receive {
            
            group ACR_MSG_{
                    
                /**
                * @desc Main receive message for CDF_Rf port
                * @param p_aCA_MSG AC-Answer message
                 * @desc Main receive message for CDF_Rf port
                 * @param p_aCA_MSG AC-Answer message
                 */
                template (present) ACR_MSG mdw_aCR(
                                                   in template (present) Session_Id_AVP  p_sessionId,
                                                   in template (present) ACR_Body_AVP    p_acrBody
                ) modifies mw_ACR_dummy := {
                    session_Id  := p_sessionId,
                    aCR_Body    := p_acrBody
                } // End of template mdw_aCR

                /**
	             * @desc Await template for ACR
	             * @param p_header   Diameter header
	             */
                template (present) ACR_MSG mw_ACR_CmdFlags_PET(in template (present) DiameterHeader p_header) modifies mw_ACR_dummy := {
                    header := p_header,
                    session_Id := ?,
                    aCR_Body := mw_ACR_Body_dummy
                }// End of template mw_ACR_CmdFlags_PET
juvancic's avatar
juvancic committed
                
                /**
                 * @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_destinationRealm            Destination realm
                 * @param p_accounting_Record_Type      TODO
                 * @param p_accounting_Record_Number    TODO
                 * @param p_acct_application_id         TODO
                 */
                template (present) ACR_Body_AVP mdw_acrBodyAvps(
                                                                in template (present) Origin_Host_AVP              p_originHost,
                                                                in template (present) Origin_Realm_AVP             p_originRealm,
                                                                in template (present) Destination_Realm_AVP        p_destinationRealm,
                                                                in template (present) Accounting_Record_Type_AVP   p_accounting_Record_Type,
                                                                in template (present) Accounting_Record_Number_AVP p_accounting_Record_Number
                ) modifies mw_ACR_Body_dummy := {
                        origin_Host                 := p_originHost,
                        origin_Realm                := p_originRealm,
                        destination_Realm           := p_destinationRealm,
                        accounting_Record_Type      := p_accounting_Record_Type,
                        accounting_Record_Number    := p_accounting_Record_Number,
                        acct_Application_Id         := mw_acct_Application_Id(3)
                } // End of template mdw_acrBodyAvps
                
            }// End of group ACR_MSG
            group ASR_MSG_{
                
                /**
                 * @desc Receive template for ACR
                 * @param p_sessionId   Session identifier
                 * @param p_asrBody     ASR message body
                 */
                template (present) ASR_MSG mdw_aSR(
                                                   in template (present) Session_Id_AVP  p_sessionId,
                                                   in template (present) ASR_Body_AVP    p_asrBody
                ) modifies mw_ASR_dummy := {
                    session_Id  := p_sessionId,
                    aSR_Body    := p_asrBody
                } // End of template mdw_aSR
                
                /**
                 * @desc Receive template for ASR 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_destinationRealm            Destination realm
                 * @param p_accounting_Record_Type      TODO
                 * @param p_accounting_Record_Number    TODO
                 * @param p_acct_application_id         TODO
                 */
                template (present) ASR_Body_AVP mdw_asrBodyAvps(
                                                                in template (present) Origin_Host_AVP              p_originHost,
                                                                in template (present) Origin_Realm_AVP             p_originRealm,
                                                                in template (present) Destination_Realm_AVP        p_destinationRealm,
                                                                in template (present) Destination_Host_AVP         p_destinationHost
                ) modifies mw_ASR_Body_dummy := {
                        origin_Host                 := p_originHost,
                        origin_Realm                := p_originRealm,
                        destination_Realm           := p_destinationRealm,
                        destination_Host            := p_destinationHost,
                        auth_Application_Id         := mw_auth_Application_Id_AVP(3)
                } // End of template mdw_asrBodyAvps
                
            }// End of group ASR_MSG
juvancic's avatar
juvancic committed
            
        } // End of group Rf_request_message_templates_receive
        
        group Rf_answer_message_templates_send { 
            
            /**
             * @desc Send template for ACA
             * @param p_sessionId   Session identifier
             * @param p_acaBody     ACA message body
             */
            template (value) ACA_MSG md_aCA(
                                            in template (value) Session_Id_AVP  p_sessionId,
                                            in template (value) ACA_Body_AVP    p_acaBody
juvancic's avatar
juvancic committed
            ) modifies m_ACA_dummy := {
                session_Id  := p_sessionId,
                aCA_Body    := p_acaBody
            } // End of template md_aCA
juvancic's avatar
juvancic committed
            template (value) ACA_Body_AVP md_acaBodyAvps(
                                                         in template (value) Result_Code_AVP              p_resultCode,
                                                         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
juvancic's avatar
juvancic committed
            ) modifies m_ACA_Body_dummy := {
                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,
                acct_Application_Id         := m_acct_Application_Id(3)
            } // End of template md_acaBodyAvps 
            
        } // End of group Rf_answer_message_templates_send
        group Rf_answer_message_templates_receive { 
            
juvancic's avatar
juvancic committed
            group ACA_MSG_{
                
                template ACA_MSG mw_ACA_CmdFlags_PET(
                                                     template DiameterHeader p_header
                ) modifies mw_ACA_dummy := {
                    //header :=  mw_diameterHeaderAns_CmdFlags(ACA_E, ?, mw_cmd_0TFlagsAns),
                    //header :=  mw_diameterHeaderAns_CmdFlags(ACA_E, ?, mw_cmdFlagsAns_PET('0'B,'0'B,'0'B)),
                    header := p_header,
                    session_Id := ?,
                    aCA_Body := mw_ACA_Body_dummy
                }
                
                /**
                 * @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_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
                ) modifies mw_ACA_Body_dummy := {
                    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 ACA_MSG_ 
        } // 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 The SDP-Media-Component send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.180 SDP-Media-Component AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template SDP_Media_Component_AVP m_sdp_Media_Component_AVP_dummy := {
                aVP_Header                                  := m_aVP_HeaderVid_Mbit1(c_sdp_Media_Component_AVP_Code, 0, c_vendId3gpp),
                sdp_Media_Name                              := omit,
                sdp_Media_Description                       := omit,
                local_GW_Inserted_Indication                := omit, 
                ip_Realm_Default_Indication                 := omit, 
                transcoder_Inserted_Indication              := omit,
                media_Initiator_Flag                        := omit, 
                media_Initiator_Party                       := omit,
                threeGPP_Charging_Id                        := omit,
                access_Network_Charging_Identifier_Value    := omit,
                sdp_Type                                    := omit
            } // End of template m_sdp_Media_Component_AVP_dummy
            
            /**
             * @desc The Trunk-Group-ID AVP, Basic send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.24  7.2.237 Trunk-Group-ID AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template Trunk_Group_ID_AVP m_trunk_Group_ID_AVP_dummy := {
                aVP_Header              := m_aVP_HeaderVid_Mbit1(c_trunk_Group_ID_AVP_Code, 0, c_vendId3gpp),
                incoming_Trunk_Group_ID := omit,
                outgoing_Trunk_Group_ID := omit
            } // End of template m_trunk_Group_ID_AVP_dummy
            
            /**
             * @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, 0, 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_ps_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 IMS-Information AVP, Basic send template 
             * @param p_node_Functionality  TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.77  IMS-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) IMS_Information_AVP m_ims_Information_AVP_dummy(
                                                                             in template (value) Node_Functionality_AVP p_node_Functionality
            ) := {
                aVP_Header                              := m_aVP_HeaderVid_Mbit1(c_ims_Information_AVP_Code, 0, c_vendId3gpp),
                event_Type                              := omit,
                role_Of_Node                            := omit,
                node_Functionality                      := p_node_Functionality,
                user_Session_Id                         := omit,
                outgoing_Session_Id                     := omit,
                session_Priority                        := omit,
                calling_Party_Address                   := omit,
                called_Party_Address                    := omit,
                called_Asserted_Identity                := omit,
                number_Portability_Routing_Information  := omit,
                carrier_Select_Routing_Information      := omit,
                alternate_Charged_Party_Address         := omit,
                requested_Party_Address                 := omit,
                associated_URI                          := omit,
                time_Stamps                             := omit,
                application_Server_Information          := omit,
                inter_Operator_Identifie                := omit,
                ims_Charging_Identifier                 := omit,
                sdp_Session_Description                 := omit,
                sdp_Media_Component                     := omit,
                served_Party_IP_Address                 := omit,
                server_Capabilities                     := omit,
                trunk_Group_ID                          := omit,
                bearer_Service                          := omit,
                service_Id                              := omit,
                service_Specific_Info                   := omit,
                message_Body                            := omit,
                cause_Code                              := omit,
                access_Network_Information              := omit,
                early_Media_Description                 := omit, 
                ims_Communication_Service_Identifier    := omit, 
                online_Charging_Flag                    := omit,
                real_Time_Tariff_Information            := omit,
                account_Expiration                      := omit,
                initial_IMS_Charging_Identifier         := omit, 
                ims_Emergency_Indicator                 := omit
            } // End of template m_ims_Information_AVP_dummy 
            
             * @desc The Early-Media-Description AVP, Basic send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.58  Early-Media-Description AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template Early_Media_Description_AVP m_early_Media_Description_AVP_dummy := {
                aVP_Header              := m_aVP_HeaderVid_Mbit1(c_early_Media_Description_AVP_Code, 0, c_vendId3gpp),
                sdp_TimeStamps          := omit, 
                sdp_Media_Component     := omit, 
                sdp_Session_Description := omit
            } // End of template m_early_Media_Description_AVP_dummy
            
            /**
             * @desc The Service-Data-Container AVP, Basic send template 
             * 
             * @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
            
            /**
             * @desc The Online-Charging-Flag AVP, Basic send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.164 Real-Time-Tariff-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template Real_Time_Tariff_Information_AVP m_real_Time_Tariff_Information_AVP_dummy := { 
                aVP_Header          := m_aVP_HeaderVid_Mbit1(c_real_Time_Tariff_Information_AVP_Code, 0, c_vendId3gpp),
                tariff_Information  := omit,
                tariff_XML          := omit
            } // End of template m_real_Time_Tariff_Information_AVP_dummy
            
        } // End of group Rf_dummy_avps_templates_send 
        
        group Rf_dummy_avps_templates_receive { 
            
            /**
             * @desc The SDP-Media-Component AVP, Basic receive template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.180 SDP-Media-Component AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template SDP_Media_Component_AVP mw_sdp_Media_Component_AVP_dummy := {
                aVP_Header                                  := mw_aVP_HeaderVid_Mbit1(c_sdp_Media_Component_AVP_Code, ?, c_vendId3gpp),
                sdp_Media_Name                              := *,
                sdp_Media_Description                       := *,
                local_GW_Inserted_Indication                := *, 
                ip_Realm_Default_Indication                 := *, 
                transcoder_Inserted_Indication              := *,
                media_Initiator_Flag                        := *, 
                media_Initiator_Party                       := *,
                threeGPP_Charging_Id                        := *,
                access_Network_Charging_Identifier_Value    := *,
                sdp_Type                                    := *
            } // End of template mw_sdp_Media_Component_AVP_dummy
            
            /**
             * @desc The Trunk-Group-ID AVP, Basic receive template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.24  7.2.237 Trunk-Group-ID AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template Trunk_Group_ID_AVP mw_trunk_Group_ID_AVP_dummy := {
                aVP_Header              := mw_aVP_HeaderVid_Mbit1(c_trunk_Group_ID_AVP_Code, ?, c_vendId3gpp),
                incoming_Trunk_Group_ID := *,
                outgoing_Trunk_Group_ID := *
            } // End of template mw_trunk_Group_ID_AVP_dummy
            
            /**
             * @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_ps_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 IMS-Information AVP, Basic receive template 
             * @param p_node_Functionality  TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.77  IMS-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (present) IMS_Information_AVP mw_ims_Information_AVP_dummy(
                                                                                template (present) Node_Functionality_AVP p_node_Functionality := ?
            ) := {
                aVP_Header                              := mw_aVP_HeaderVid_Mbit1(c_ims_Information_AVP_Code, ?, c_vendId3gpp),
                event_Type                              := *,
                role_Of_Node                            := *,
                node_Functionality                      := p_node_Functionality,
                user_Session_Id                         := *,
                outgoing_Session_Id                     := *,
                session_Priority                        := *,
                calling_Party_Address                   := *,
                called_Party_Address                    := *,
                called_Asserted_Identity                := *,
                number_Portability_Routing_Information  := *,
                carrier_Select_Routing_Information      := *,
                alternate_Charged_Party_Address         := *,
                requested_Party_Address                 := *,
                associated_URI                          := *,
                time_Stamps                             := *,
                application_Server_Information          := *,
                inter_Operator_Identifie                := *,
                ims_Charging_Identifier                 := *,
                sdp_Session_Description                 := *,
                sdp_Media_Component                     := *,
                served_Party_IP_Address                 := *,
                server_Capabilities                     := *,
                trunk_Group_ID                          := *,
                bearer_Service                          := *,
                service_Id                              := *,
                service_Specific_Info                   := *,
                message_Body                            := *,
                cause_Code                              := *,
                access_Network_Information              := *,
                early_Media_Description                 := *, 
                ims_Communication_Service_Identifier    := *, 
                online_Charging_Flag                    := *,
                real_Time_Tariff_Information            := *,
                account_Expiration                      := *,
                initial_IMS_Charging_Identifier         := *, 
                ims_Emergency_Indicator                 := *
            } // End of template mw_ims_Information_AVP_dummy 
            
            /**
             * @desc The Early-Media-Description AVP, Basic receive template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.58  Early-Media-Description AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template Early_Media_Description_AVP mw_early_Media_Description_AVP_dummy := {
                aVP_Header              := mw_aVP_HeaderVid_Mbit1(c_early_Media_Description_AVP_Code, ?, c_vendId3gpp),
                sdp_TimeStamps          := omit, 
                sdp_Media_Component     := omit, 
                sdp_Session_Description := omit
            } // End of template mw_early_Media_Description_AVP_dummy
            
            /**
             * @desc The Service-Data-Container AVP, Basic receive template 
             * 
             * @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 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  := *,
                charging_Rule_Base_Name     := *,
                accounting_Input_Octets     := *,
                accounting_Output_Octets    := *,
                local_Sequence_Number       := *,
                qos_Information             := *,
                rating_Group                := *, 
                change_Time                 := *, 
                service_Identifier          := *, 
                service_Specific_Info       := *, 
                SGSN_Address                := *, 
                time_First_Usage            := *,
                time_Last_Usage             := *,
                time_Usage                  := *,
                change_Condition            := *,
                threeGPP_User_Location_Info := *,
                threeGPP2_BSID              := *,
                user_CSG_Information        := *
            } // End of template mw_service_Data_Container_AVP_dummy
            
            /**
             * @desc The Online-Charging-Flag AVP, Basic send template 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.164 Real-Time-Tariff-Information AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs
             */
            template Real_Time_Tariff_Information_AVP mw_real_Time_Tariff_Information_AVP_dummy := { 
                aVP_Header          := mw_aVP_HeaderVid_Mbit1(c_real_Time_Tariff_Information_AVP_Code, ?, c_vendId3gpp),
                tariff_Information  := *,
                tariff_XML          := *
            } // End of template mw_real_Time_Tariff_Information_AVP_dummy
            
        } // End of group Rf_dummy_avps_templates_receive 
        
        group Rf_avps_templates_send { 
            
            /**
             * @desc Service-Information AVP, 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(
                                                                          in template (value) Subscription_Id_AVP               p_subscription_Id,
                                                                          in template (omit) IMS_Information_AVP                p_ims_Information := omit,
                                                                          in template (omit) Service_Generic_Information_AVP    p_service_Generic_Information := omit
            ) modifies m_service_Information_AVP_dummy := {
                subscription_Id             := { p_subscription_Id },
                ims_Information             := p_ims_Information,
                service_Generic_Information := p_service_Generic_Information
            } // End of template m_service_Information
            
juvancic's avatar
juvancic committed
            /**
             * @desc Service-Information AVP, 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 (value) Service_Information_AVP m_Service_Information_RF_CDF_TC :=
                m_service_Information(
                    m_subscription_Id(
                        m_subscription_Id_Type(END_USER_SIP_URI_E),
                        m_subscription_Id_Data("ETSI RFRO")
                    ),
                    m_ims_Information_AVP_dummy(
garciay's avatar
garciay committed
                        m_node_Functionality_AVP(MRFC_E)
juvancic's avatar
juvancic committed
                    ),
                    m_service_Generic_Information_AVP(
                         m_application_Server_ID_AVP("ETSI RFRO"),
garciay's avatar
garciay committed
                         m_application_Service_Type_AVP(INVITING_E),
juvancic's avatar
juvancic committed
                         m_application_Session_ID_AVP("Session0000"),
                         m_delivery_Status_AVP("INVITING")
                    )
                );
            
garciay's avatar
garciay committed
            template (value) 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 
            
garciay's avatar
garciay committed
            template (value) 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_aVP_Data   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_aVP_Data
garciay's avatar
garciay committed
                aVP_Header := m_aVP_HeaderVid_Mbit1(c_accounting_Input_Octets_AVP_Code, 8, c_vendId3gpp),
                aVP_Data   := p_aVP_Data
            } // End of template m_accounting_Input_Octets_AVP 
            
            /**
             * @desc The Accounting-Output-Octets send template 
             * @param p_aVP_Data   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_aVP_Data
garciay's avatar
garciay committed
                aVP_Header := m_aVP_HeaderVid_Mbit1(c_accounting_Output_Octets_AVP_Code, 8, c_vendId3gpp),
                aVP_Data   := p_aVP_Data
            } // End of template m_accounting_Output_Octets_AVP 
            
            /**
             * @desc The Event-Type send template 
             * @param p_sip_Method   TODO
             * @param p_event        TODO
garciay's avatar
garciay committed
             * @param p_aVP_Data     TODO
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.65  Event-Type AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (omit) Event_Type_AVP m_event_Type_AVP(
                                                            in template (omit) SIP_Method_AVP    p_sip_Method := omit,
                                                            in template (omit) Event_AVP         p_event := omit,
                                                            in template (omit) Expires_AVP       p_aVP_Data := omit
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_event_Type_AVP_Code, f_getEventTypeAVPLength(p_sip_Method, p_event, p_aVP_Data), c_vendId3gpp),
                sip_Method := p_sip_Method,
                event := p_event,
                aVP_Data := p_aVP_Data
            } // End of template m_event_Type_AVP
            
            /**
             * @desc The Event send template 
             * @param p_aVP_Data     Holds the content of the "Event" header
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.63  Event AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Event_AVP m_event_AVP(
                                                   in template (value) UTF8String  p_aVP_Data
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_event_AVP_Code, f_getUTF8StringLength(valueof(p_aVP_Data)), c_vendId3gpp),
                aVP_Data    := p_aVP_Data
            } // End of template m_event_AVP
            
            /**
             * @desc The Content-Type send template 
             * @param p_aVP_Header   Header AVP
             * @param p_aVP_Data     Holds the media type (e.g. application/sdp, text/html) of the message-body, as described in RFC 3261
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.46  Content-Type AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Content_Type_AVP m_content_Type_AVP(
                                                                 in template (value) UTF8String  p_aVP_Data
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_content_Type_AVP_Code, f_getUTF8StringLength(valueof(p_aVP_Data)), c_vendId3gpp),
                aVP_Data    := p_aVP_Data
            } // End of template m_content_Type_AVP
            
            /**
             * @desc The Content-Length send template 
             * @param p_aVP_Header   Header AVP
             * @param p_aVP_Data     Holds the size of the message-body, as described in RFC 3261
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.44  Content-Length AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Content_Length_AVP m_content_Length_AVP(
                                                                     in template (value) UInt32  p_aVP_Data
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_content_Length_AVP_Code, 4, c_vendId3gpp),
                aVP_Data    := p_aVP_Data
            } // End of template m_content_Length_AVP
            
            /**
             * @desc The Content-Disposition send template 
             * @param p_aVP_Data     Indicates how the message body or a message body part is to be interpreted (e.g. session, render), as described in RFC 3261 
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.43  Content-Disposition AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Content_Disposition_AVP m_content_Disposition_AVP(
                                                                               in template (value) UTF8String p_aVP_Data
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_content_Disposition_AVP_Code, f_getUTF8StringLength(valueof(p_aVP_Data)), c_vendId3gpp),
                aVP_Data := p_aVP_Data
            } // End of template m_content_Disposition_AVP
            
            /**
             * @desc The Role-Of-Node send template 
             * @param p_aVP_Data     Specifies whether the IMS node (except the MRFC) is serving the calling or the called party
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.177 Role-Of-Node AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) Role_Of_Node_AVP m_role_Of_Node_AVP(
                                                                 in template (value) Role_Of_Node p_aVP_Data
            ) := {
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_role_Of_Node_AVP_Code, 4, c_vendId3gpp),
                aVP_Data := p_aVP_Data
            } // End of template m_role_Of_Node_AVP
            
            /**
             * @desc The User-Session-Id send template 
             * @param p_aVP_Data     Holds the session identifier
             * 
             * @see ETSI TS 132 299 V10.15.0 Clause 7.2.242 User-Session-Id AVP
             * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs
             */
            template (value) User_Session_Id_AVP m_user_Session_Id_AVP(
                                                                       in template (value) UTF8String p_aVP_Data
                aVP_Header  := m_aVP_HeaderVid_Mbit1(c_user_Session_Id_AVP_Code, f_getUTF8StringLength(valueof(p_aVP_Data)), c_vendId3gpp),
                aVP_Data    := p_aVP_Data
            } // End of template m_user_Session_Id_AVP
            
            /**
             * @desc The Calling-Party-Address send template