/******************************************************************************
* Copyright (c) 2004, 2015  Ericsson AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ferenc Kovacs
* Gabor Bettesch
* Gabor Szalai
******************************************************************************/
//
//  File:               M3UA_Types.ttcn
//  Rev:                R2A
//  Prodnr:             CNL 113 536
//  Reference:

module M3UA_Types {

import from General_Types all; 

external function enc_PDU_M3UA(in PDU_M3UA pdu) return octetstring
with { extension "prototype(convert)"
       extension "encode(RAW)"
     }

external function dec_PDU_M3UA(in octetstring stream) return PDU_M3UA
with { extension "prototype(convert)"
       extension "decode(RAW)"
     }

//++++++++++++++++++++++++++++++++++++++++++++++++++      
// M3UA PARAMETERS
//++++++++++++++++++++++++++++++++++++++++++++++++++
type octetstring M3UA_OCT0_255 length (0..255);

type record M3UA_Point_Code
{
  OCT1 mask,
  OCT3 affected_Point_Code
}

type record of M3UA_Point_Code M3UA_Point_Codes;

type record M3UA_Error_Code
{
  OCT2      tag,
  integer   lengthInd,
  OCT4      errorCode
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,errorCode)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }

type record M3UA_Routing_Context
{
  OCT2            tag,
  integer         lengthInd,
  octetstring     routingContext
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,routingContext)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
         variant "PADDING(dword32)";
       }

type record M3UA_Affected_Point_Codes
{
  OCT2             tag,
  integer          lengthInd,
  M3UA_Point_Codes pointCodes
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,pointCodes)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }

type record M3UA_Network_Appearance
{
  OCT2         tag,
  integer      lengthInd,
  OCT4         networkAppearance
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,networkAppearance)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }

type record M3UA_Diagnostic_information
{
  OCT2         tag,
  integer      lengthInd,
  octetstring  diagnosticInformation
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,diagnosticInformation)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
         variant "PADDING(dword32)";
       }

type record M3UA_Correlation_ID
{
  OCT2      tag,
  integer   lengthInd,
  OCT4      correlationID
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,correlationID)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }
      
type record M3UA_Protocol_Data
{
  OCT2        tag,
  integer     lengthInd,
  OCT4        oPC,
  OCT4        dPC,
  OCT1        sI,
  OCT1        nI,
  OCT1        mP,
  OCT1        sLS,
  octetstring userProtocolData
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,oPC,dPC,sI,nI,mP,sLS,
                                       userProtocolData)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
         variant "PADDING(dword32)";
       }

type record M3UA_Info_String
{
  OCT2          tag,
  integer       lengthInd,
  M3UA_OCT0_255 infoString 
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,infoString)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
         variant "PADDING(dword32)";
       }

type record  M3UA_Concerned_Destination 
{
  OCT2      tag,
  integer   lengthInd,
  OCT1      reserved,
  OCT3      concernedDestination
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,
                                       concernedDestination)"; 
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }

type record  M3UA_Congestion_Indicators
{
  OCT2       tag,
  integer    lengthInd,
  OCT1       reserved,
  OCT3       congestionLevel
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,congestionLevel)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }

type record M3UA_User_Cause
{
  OCT2       tag,
  integer    lengthInd,
  OCT2       cause,
  OCT2       user
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,cause,user)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
        }    

type record M3UA_ASP_Identifier
{
  OCT2       tag,
  integer    lengthInd,
  OCT4       aSPIdentifier
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,aSPIdentifier)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }    

type record M3UA_Heartbeat_Data
{
  OCT2        tag,
  integer     lengthInd,
  octetstring heartbeat_Data
} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,heartbeat_Data)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
         variant "PADDING(dword32)";
       }

type record M3UA_Traffic_Mode_Type
{
  OCT2       tag,
  integer    lengthInd,
  OCT4       trafficModeType
} with { variant (lengthInd) "LENGTHTO (tag,lengthInd,trafficModeType)";
         variant (lengthInd) "FIELDLENGTH(16)";
         variant (lengthInd) "BYTEORDER(last)";
       }


//++++++++++++++++++++++++++++++++++++++++++++++++++
//PDUs
//++++++++++++++++++++++++++++++++++++++++++++++++++

// M3UA_ERR PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_ERR
{
  OCT1                       version,
  OCT1                       reserved,
  OCT2                       messageClassAndType,
  integer                    messageLength,
  M3UA_ERR_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ERR_MessageParameters
{
  M3UA_Error_Code             error_Code,
  M3UA_Routing_Context        routing_Context optional,
  M3UA_Affected_Point_Codes   affected_Point_Codes optional,
  M3UA_Network_Appearance     network_Appearance optional,
  M3UA_Diagnostic_information diagnostic_information optional
} with { variant "TAG(error_Code,             tag = '000C'O;
                      routing_Context,        tag = '0006'O; 
                      affected_Point_Codes,   tag = '0012'O; 
                      network_Appearance,     tag = '0200'O; 
                      diagnostic_information, tag = '0007'O; )"
       }


// M3UA_NOTIFY
//  NOTE1 : NOTIFY should not come and will be dropped if it comes
//  NOTE2 : messageParameters is simpified implementation as octetstring
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_NOTIFY
{
  OCT1                       version,
  OCT1                       reserved,
  OCT2                       messageClassAndType,
  integer                    messageLength,
  octetstring                messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }


//  M3UA_DATA PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DATA
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_DATA_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)";   
       }

type set M3UA_DATA_MessageParameters
{
  M3UA_Network_Appearance  network_Appearance optional,
  M3UA_Routing_Context     routing_Context optional,
  M3UA_Protocol_Data       protocol_Data,
  M3UA_Correlation_ID      correlation_ID optional
} with { variant "TAG(network_Appearance,   tag = '0200'O;
                      routing_Context,      tag = '0006'O; 
                      protocol_Data,        tag = '0210'O; 
                      correlation_ID,       tag = '0013'O; )"        
       }


//  M3UA_DUNA PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DUNA
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_DUNA_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)";  
       }

type set M3UA_DUNA_MessageParameters
{
  M3UA_Network_Appearance   network_Appearance optional,
  M3UA_Routing_Context      routing_Context optional,
  M3UA_Affected_Point_Codes affected_Point_Codes,
  M3UA_Info_String          info_String optional
} with { variant "TAG(network_Appearance,    tag = '0200'O;
                      routing_Context,       tag = '0006'O; 
                      affected_Point_Codes,  tag = '0012'O;
                      info_String,           tag = '0004'O )"
       }


//  M3UA_DAVA PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DAVA
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_DAVA_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)";  
       }

type set M3UA_DAVA_MessageParameters
{
  M3UA_Network_Appearance   network_Appearance optional,
  M3UA_Routing_Context      routing_Context optional,
  M3UA_Affected_Point_Codes affected_Point_Codes,
  M3UA_Info_String          info_String optional
} with { variant "TAG(network_Appearance,       tag = '0200'O;
                      routing_Context,          tag = '0006'O; 
                      affected_Point_Codes,     tag = '0012'O;
                      info_String,              tag = '0004'O )"
       }


//  M3UA_DAUD PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DAUD
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_DAUD_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_DAUD_MessageParameters
{
  M3UA_Network_Appearance   network_Appearance optional,
  M3UA_Routing_Context      routing_Context optional,
  M3UA_Affected_Point_Codes affected_Point_Codes,
  M3UA_Info_String          info_String optional
} with { variant "TAG(network_Appearance,       tag = '0200'O;
                      routing_Context,          tag = '0006'O; 
                      affected_Point_Codes,     tag = '0012'O;
                      info_String,              tag = '0004'O )"
       }


//  M3UA_SCON PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_SCON
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_SCON_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_SCON_MessageParameters
{
  M3UA_Network_Appearance    network_Appearance optional,
  M3UA_Routing_Context       routing_Context optional,
  M3UA_Affected_Point_Codes  affected_Point_Codes,
  M3UA_Concerned_Destination concerned_Destination optional,
  M3UA_Congestion_Indicators congestion_Indicators optional,
  M3UA_Info_String           info_String optional
} with { variant "TAG(network_Appearance,       tag = '0200'O;
                      routing_Context,          tag = '0006'O; 
                      affected_Point_Codes,     tag = '0012'O;
                      concerned_Destination,    tag = '0206'O;
                      congestion_Indicators,    tag = '0205'O;
                      info_String,              tag = '0004'O )"
       }


//  M3UA_DUPU PDU
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DUPU
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_DUPU_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_DUPU_MessageParameters
{
  M3UA_Network_Appearance   network_Appearance optional,
  M3UA_Routing_Context      routing_Context optional,
  M3UA_Affected_Point_Codes affected_Point_Codes,
  M3UA_User_Cause           user_Cause,
  M3UA_Info_String          info_String optional
} with { variant "TAG(network_Appearance,       tag = '0200'O;
                      routing_Context,          tag = '0006'O; 
                      affected_Point_Codes,     tag = '0012'O;
                      user_Cause,               tag = '0204'O;
                      info_String,              tag = '0004'O )"
       }
 
 
//  M3UA_DRST PDU
//  NOTE1 : DRST should not come and will be dropped if it comes
//  NOTE2 : messageParameters is simpified implementation as octetstring
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DRST 
{                
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  octetstring                 messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }
 
     
//  M3UA_ASPUP
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_ASPUP
{
  OCT1                         version,
  OCT1                         reserved,
  OCT2                         messageClassAndType,
  integer                      messageLength,
  M3UA_ASPUP_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPUP_MessageParameters 
{
  M3UA_ASP_Identifier aSP_Identifier optional,
  M3UA_Info_String    info_String optional
} with { variant "TAG(aSP_Identifier,      tag = '0011'O;
                      info_String,         tag = '0004'O; )"
       }
  
  
//M3UA_ASPUP_Ack  
//++++++++++++++++++++++++++++++++++++++++++++++++++  
type record M3UA_ASPUP_Ack  
{
  OCT1                             version,
  OCT1                             reserved,
  OCT2                             messageClassAndType,
  integer                          messageLength,
  M3UA_ASPUP_Ack_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPUP_Ack_MessageParameters
{
  M3UA_Info_String   info_String optional
} with { variant "TAG(info_String,         tag = '0004'O; )"
       }
     
     
//M3UA_ASPDN
//++++++++++++++++++++++++++++++++++++++++++++++++++   
type record M3UA_ASPDN 
{
  OCT1                         version,
  OCT1                         reserved,
  OCT2                         messageClassAndType,
  integer                      messageLength,
  M3UA_ASPDN_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPDN_MessageParameters
{
  M3UA_Info_String   info_String optional
} with { variant "TAG(info_String,         tag = '0004'O; )"
       }


//M3UA_ASPDN_Ack
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_ASPDN_Ack 
{
  OCT1                             version,
  OCT1                             reserved,
  OCT2                             messageClassAndType,
  integer                          messageLength,
  M3UA_ASPDN_Ack_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPDN_Ack_MessageParameters
{
  M3UA_Info_String   info_String optional
} with { variant "TAG(info_String,         tag = '0004'O;)"
       }

 
// M3UA_BEAT
//++++++++++++++++++++++++++++++++++++++++++++++++++ 
type record M3UA_BEAT 
{
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  M3UA_BEAT_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_BEAT_MessageParameters
{
  M3UA_Heartbeat_Data  heartbeat_Data optional
} with { variant "TAG(heartbeat_Data,         tag = '0009'O; )"
       }


// M3UA_BEAT_Ack
//++++++++++++++++++++++++++++++++++++++++++++++++++ 
type record M3UA_BEAT_Ack 
{
  OCT1                            version,
  OCT1                            reserved,
  OCT2                            messageClassAndType,
  integer                         messageLength,
  M3UA_BEAT_Ack_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_BEAT_Ack_MessageParameters
{
  M3UA_Heartbeat_Data  heartbeat_Data optional
} with { variant "TAG(heartbeat_Data,         tag = '0009'O; )"
       }


// M3UA_ASPAC
//++++++++++++++++++++++++++++++++++++++++++++++++++ 
type record M3UA_ASPAC
{
  OCT1                         version,
  OCT1                         reserved,
  OCT2                         messageClassAndType,
  integer                      messageLength,
  M3UA_ASPAC_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPAC_MessageParameters
{
  M3UA_Traffic_Mode_Type    traffic_Mode_Type optional, 
  M3UA_Routing_Context      routing_Context optional,
  M3UA_Info_String          info_String optional
} with { variant "TAG(traffic_Mode_Type,   tag = '000B'O; 
                      routing_Context,     tag = '0006'O;
                      info_String,         tag = '0004'O; )"
       }


// M3UA_ASPAC_Ack
//++++++++++++++++++++++++++++++++++++++++++++++++++ 
type record M3UA_ASPAC_Ack
{
  OCT1                             version,
  OCT1                             reserved,
  OCT2                             messageClassAndType,
  integer                          messageLength,
  M3UA_ASPAC_Ack_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPAC_Ack_MessageParameters
{
  M3UA_Traffic_Mode_Type   traffic_Mode_Type optional, 
  M3UA_Routing_Context     routing_Context optional,
  M3UA_Info_String         info_String optional
} with { variant "TAG(traffic_Mode_Type,   tag = '000B'O;
                      routing_Context,     tag = '0006'O;
                      info_String,         tag = '0004'O; )"
       }
 

// M3UA_ASPIA
//++++++++++++++++++++++++++++++++++++++++++++++++++  
type record M3UA_ASPIA
{ 
  OCT1                         version,
  OCT1                         reserved,
  OCT2                         messageClassAndType,
  integer                      messageLength,
  M3UA_ASPIA_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }
 
type set M3UA_ASPIA_MessageParameters 
{
  M3UA_Routing_Context    routing_Context optional,
  M3UA_Info_String        info_String optional
} with { variant "TAG(routing_Context,     tag = '0006'O;
                      info_String,         tag = '0004'O; )"
       }

 
// M3UA_ASPIA_Ack
//++++++++++++++++++++++++++++++++++++++++++++++++++  
type record M3UA_ASPIA_Ack
{ 
  OCT1                             version,
  OCT1                             reserved,
  OCT2                             messageClassAndType,
  integer                          messageLength,
  M3UA_ASPIA_Ack_MessageParameters messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }

type set M3UA_ASPIA_Ack_MessageParameters 
{
  M3UA_Routing_Context     routing_Context optional,
  M3UA_Info_String         info_String optional
} with { variant "TAG(routing_Context,     tag = '0006'O;
                      info_String,         tag = '0004'O; )"
       }
 
 
//  M3UA_REG_REQ
//  NOTE1 : REG REQ should not come and will be dropped if it comes
//  NOTE2 : messageParameters is simpified implementation as octetstring
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_REG_REQ 
{                
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  octetstring                 messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }
 
 
//  M3UA_REG_RSP
//  NOTE1 : REG RSP should not come and will be dropped if it comes
//  NOTE2 : messageParameters is simpified implementation as octetstring
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_REG_RSP 
{                
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  octetstring                 messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }
 
 
//  M3UA_DEREG_REQ
//  NOTE1 : DEREG REQ should not come and will be dropped if it comes
//  NOTE2 : messageParameters is simpified implementation as octetstring
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DEREG_REQ 
{                
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  octetstring                 messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }
  
 
//  M3UA_DEREG_RSP
//  NOTE1 : DEREG RSP should not come and will be dropped if it comes
//  NOTE2 : messageParameters is simpified implementation as octetstring
//++++++++++++++++++++++++++++++++++++++++++++++++++
type record M3UA_DEREG_RSP 
{                
  OCT1                        version,
  OCT1                        reserved,
  OCT2                        messageClassAndType,
  integer                     messageLength,
  octetstring                 messageParameters
} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
                                           messageLength,messageParameters)"; 
         variant (messageLength) "FIELDLENGTH(32)";
         variant (messageLength) "BYTEORDER(last)"; 
       }
 

// Top level PDU
//************************************************************************
type union PDU_M3UA
{
  M3UA_ERR        m3UA_ERR,        // Error
  M3UA_NOTIFY     m3UA_NOTIFY,     // Notify - should not come
  M3UA_DATA       m3UA_DATA,       // Payload data
  M3UA_DUNA       m3UA_DUNA,       // Destination Unavailable
  M3UA_DAVA       m3UA_DAVA,       // Destination Available
  M3UA_DAUD       m3UA_DAUD,       // Destination State Audit
  M3UA_SCON       m3UA_SCON,       // Signaling Congestion
  M3UA_DUPU       m3UA_DUPU,       // Destination User Part Unavailable
  M3UA_DRST       m3UA_DRST,       // DRST - should not come
  M3UA_ASPUP      m3UA_ASPUP,      // ASP up
  M3UA_ASPDN      m3UA_ASPDN,      // ASP down
  M3UA_BEAT       m3UA_BEAT,       // Heartbeat
  M3UA_BEAT_Ack   m3UA_BEAT_Ack,   // Heartbeat Ack
  M3UA_ASPUP_Ack  m3UA_ASPUP_Ack,  // ASP up ack
  M3UA_ASPDN_Ack  m3UA_ASPDN_Ack,  // ASP down ack
  M3UA_ASPAC      m3UA_ASPAC,      // ASP Active
  M3UA_ASPIA      m3UA_ASPIA,      // ASP Inactive
  M3UA_ASPAC_Ack  m3UA_ASPAC_Ack,  // ASP Active Ack
  M3UA_ASPIA_Ack  m3UA_ASPIA_Ack,  // ASP Inactive
  M3UA_REG_REQ    m3UA_REG_REQ,    // REG REQ - should not come
  M3UA_REG_RSP    m3UA_REG_RSP,    // REG RSP - should not come
  M3UA_DEREG_REQ  m3UA_DEREG_REQ,  // DEREG REQ - should not come
  M3UA_DEREG_RSP  m3UA_DEREG_RSP   // DEREG RSP - should not come
} with { variant "TAG(
          m3UA_ERR,        messageClassAndType = '0000'O;    //MGMT Class (0),
          m3UA_NOTIFY,     messageClassAndType = '0001'O;    //MGMT Class (0),
          m3UA_DATA,       messageClassAndType = '0101'O;    //Transf msg Class(1),
          m3UA_DUNA,       messageClassAndType = '0201'O;    //SSNM Class(2),
          m3UA_DAVA,       messageClassAndType = '0202'O;    //SSNM Class(2),
          m3UA_DAUD,       messageClassAndType = '0203'O;    //SSNM Class(2),
          m3UA_SCON,       messageClassAndType = '0204'O;    //SSNM Class(2),
          m3UA_DUPU,       messageClassAndType = '0205'O;    //SSNM Class(2),
          m3UA_DRST,       messageClassAndType = '0206'O;    //SSNM Class(2),
          m3UA_ASPUP,      messageClassAndType = '0301'O;    //ASPSM Class(3),
          m3UA_ASPDN,      messageClassAndType = '0302'O;    //ASPSM Class(3),
          m3UA_BEAT,       messageClassAndType = '0303'O;    //ASPSM Class(3),
          m3UA_ASPUP_Ack,  messageClassAndType = '0304'O;    //ASPSM Class(3),
          m3UA_ASPDN_Ack,  messageClassAndType = '0305'O;    //ASPSM Class(3),
          m3UA_BEAT_Ack,   messageClassAndType = '0306'O;    //ASPSM Class(3),
          m3UA_ASPAC,      messageClassAndType = '0401'O;    //ASPTM Class(4),
          m3UA_ASPIA,      messageClassAndType = '0402'O;    //ASPTM Class(4),
          m3UA_ASPAC_Ack,  messageClassAndType = '0403'O;    //ASPTM Class(4),
          m3UA_ASPIA_Ack,  messageClassAndType = '0404'O;    //ASPTM Class(4),
          m3UA_REG_REQ,    messageClassAndType = '0901'O;    //RKM Class(9),
          m3UA_REG_RSP,    messageClassAndType = '0902'O;    //RKM Class(9),
          m3UA_DEREG_REQ,  messageClassAndType = '0903'O;    //RKM Class(9),
          m3UA_DEREG_RSP,  messageClassAndType = '0904'O; )" //RKM Class(9),
       }
} with { encode "RAW"}
