///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright Test Competence Center (TCC) ETH 2016                           //
//                                                                           //
// The copyright to the computer  program(s) herein  is the property of TCC. //
// The program(s) may be used and/or copied only with the written permission //
// of TCC or in accordance with  the terms and conditions  stipulated in the //
// agreement/contract under which the program(s) has been supplied.          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
//
//  File:               GTPC_Types.ttcn
//  Rev:                R1B
//  Prodnr:             CNL 113 843
//  Contact:            http://ttcn.ericsson.se
//  Reference:          3GPP TS 29.060 v13.5.0
 
module GTPC_Types {

import from General_Types all;

// external encoding/decoding functions
external function enc_PDU_GTPC(in PDU_GTPC gtpc_pdu) return octetstring
with { extension "prototype(convert)"
       extension "encode(RAW)"
     }        

external function dec_PDU_GTPC(in octetstring udp_pdu, SystemUnderTest pl_SystemUnderTest := SGSN) return PDU_GTPC
// for SGSN testing pl_SystemUnderTest is SGSN (default value)
// for GGSN testing pl_SystemUnderTest is GGSN 
// for CGW testing pl_SystemUnderTest is CGW 
// for MME testing pl_SystemUnderTest is MME  
// in current implementation the decoder behavior is identical for
// SGSN and MME

// determines SUT, needed for decoding updatePDPContextRequest
// and updatePDPContextResponse messages
type enumerated SystemUnderTest{SGSN(0),GGSN(1),CGW(2),MME(3)};
/////////////////////////////
// Information Elements
/////////////////////////////
//Information Element with an IE Type Extension field - 7.7.0A
//for future use
type record IE_Type_Extension {
 OCT1                    type_gtpc,
 LIN2_BO_LAST            lengthf, //16 bits
 IE_Extension_UnionType  iE_Type_Extension

} with {  
  variant (lengthf) "LENGTHTO(iE_Type_Extension)"; 
  variant "PRESENCE( type_gtpc = 'EE'O)";
};

type union IE_Extension_UnionType
{
  IE_Extension_Type  iE_Type_Extension
}

type record IE_Extension_Type
{
  OCT2                         elementIdentifier,
  octetstring                  valueField
}


//Cause - 7.7.1
type record Cause_gtpc {
 OCT1                   type_gtpc,
 OCT1                   causevalue
} with { variant "PRESENCE( type_gtpc = '01'O)"; };

//IMSI - 7.7.2
type record IMSI_gtpc {
 OCT1                   type_gtpc,
 hexstring              digits length(15),
 HEX1                   padding
} with { variant "PRESENCE( type_gtpc = '02'O)"; };

//Routing Area ID - 7.7.3
// Note : the order of MNC digits is 
// MNC digit 3, MNC digit 1, MNC digit 2
type record RoutingAreaIdentity {
 OCT1                   type_gtpc,
 hexstring              mcc_digits length(3),
 hexstring              mnc_digits length(3),
 OCT2                   lac,
 OCT1                   rac
} with { variant "PRESENCE( type_gtpc = '03'O)"; };

//TLLI - 7.7.4
type record TLLI {
 OCT1                   type_gtpc,
 OCT4                   tlli_element
} with { variant "PRESENCE( type_gtpc = '04'O)"; };

//Packet TMSI - 7.7.5
type record PacketTMSI {
 OCT1                   type_gtpc,
 OCT4                   p_tmsi
} with { variant "PRESENCE( type_gtpc = '05'O)"; };

//Reordering Required - 7.7.6
type record ReorderingRequired {
 OCT1                   type_gtpc,
 BIT1                   reordreq,
 BIT7                   spare
} with { variant "PRESENCE( type_gtpc = '08'O)"; };

//Authentication Triplet - 7.7.7
type record AuthenticationTriplet_GTPC {
 OCT1                    type_gtpc,
 OCT16                   rand,
 OCT4                    sres,
 OCT8                    kc
} with { variant "PRESENCE( type_gtpc = '09'O)"; };

type set of AuthenticationTriplet_GTPC AuthenticationTriplet_GTPC_SetOf;

//MAP Cause - 7.7.8
type record MAP_Cause {
 OCT1                    type_gtpc,
 OCT1                    mapCauseValue
} with { variant "PRESENCE( type_gtpc = '0B'O)"; };

//PTMSI Signature - 7.7.9
type record PTMSI_Signature {
 OCT1                    type_gtpc,
 OCT3                    ptmsi_Signature
} with { variant "PRESENCE( type_gtpc = '0C'O)"; };

//MS Validated - 7.7.10
type record MS_Validated {
 OCT1                    type_gtpc,
 BIT1                    msValidated,
 BIT7                    spare
} with { variant "PRESENCE( type_gtpc = '0D'O)"; };

//Recovery - 7.7.11
type record Recovery_gtpc {
 OCT1                   type_gtpc,
 OCT1                   restartCounter
} with { variant "PRESENCE(type_gtpc = '0E'O)";};

//Selection Mode - 7.7.12
type record SelectionMode {
 OCT1                   type_gtpc,
 BIT2                   selectModeValue,
 BIT6                   spare
} with { variant "PRESENCE(type_gtpc = '0F'O)"; };

//TEI Data I - 7.7.13
type record TeidDataI {
 OCT1                   type_gtpc,
 OCT4                   teidDataI
} with { variant "PRESENCE(type_gtpc = '10'O)"; };

//TEI Control Plane - 7.7.14
type record TeidControlPlane {
 OCT1                   type_gtpc,
 OCT4                   teidControlPlane
} with { variant "PRESENCE(type_gtpc = '11'O)"; };

//TEI Data II - 7.7.15
type record of TeidDataII TeidDataII_List

type record TeidDataII {
 OCT1                    type_gtpc,
 BIT4                    nsapi,
 BIT4                    unused,
 OCT4                    teidDataII
} with { variant "PRESENCE(type_gtpc = '12'O)"; };

//Teardown Ind -7.7.16
type record TearDownInd {
 OCT1                    type_gtpc,
 BIT1                    tdInd,
 BIT7                    spare
} with { variant "PRESENCE(type_gtpc = '13'O)"; };

//NSAPI - 7.7.17
type record NSAPI_GTPC {
 OCT1                    type_gtpc,
 BIT4                    nsapi,
 BIT4                    unused
} with { variant "PRESENCE(type_gtpc = '14'O)"; };

//RANAP Cause - 7.7.18
type record RANAPCause {
 OCT1                    type_gtpc,
 OCT1                    ranapCause
} with { variant "PRESENCE(type_gtpc = '15'O)"; };

//RAB Context - 7.7.19
type record of RABContext RABContext_List;

type record RABContext {
 OCT1                    type_gtpc,
 BIT4                    nsapi,
 BIT4                    spare,
 OCT2                    dlgtp_u,
 OCT2                    ulgtp_u,
 OCT2                    dl_pdcp,
 OCT2                    ul_pdcp
} with {variant "PRESENCE( type_gtpc = '16'O)";};

//Radio Priority SMS - 7.7.20
type record RadioPrioritySMS {
 OCT1                    type_gtpc,
 BIT3                    radioprioritySMS,
 BIT5                    reserved
} with {variant "PRESENCE( type_gtpc = '17'O)";};

//RadioPriority - 7.7.21

type record of RadioPriority RadioPriority_List;

type record RadioPriority {
 OCT1                    type_gtpc,
 BIT3                    radiopriority, 
 BIT1                    reserved,
 BIT4                    nsapi
} with {variant "PRESENCE( type_gtpc = '18'O)";};

//Packet Flow Id - 7.7.22
type record of PacketFlowID PacketFlowID_List

type record PacketFlowID {
 OCT1                    type_gtpc,
 BIT4                    nsapi,
 BIT4                    reserved,
 OCT1                    packflowID
} with {variant "PRESENCE( type_gtpc = '19'O)";};

//Charging Characteristics - 7.7.23
type record of ChargingCharacteristics_GTPC
                      ChargingCharacteristics_List_GTPC;

type record ChargingCharacteristics_GTPC {
 OCT1                    type_gtpc,
 OCT2                    chargingChar
} with {variant "PRESENCE( type_gtpc = '1A'O)";};

//Trace Reference - 7.7.24
type record TraceRef {
 OCT1                    type_gtpc,
 OCT2                    trace_ref
} with {variant "PRESENCE( type_gtpc = '1B'O)";};

//Trace Type - 7.7.25
type record GTP_TraceType {
 OCT1                    type_gtpc,
 OCT2                    trace_type
} with {variant "PRESENCE( type_gtpc = '1C'O)";};

//MS Not Reachable Reason - 7.7.25A
type record MSNotReachableReason {
 OCT1                    type_gtpc,
 OCT1                    reason_for_absence
} with {variant "PRESENCE( type_gtpc = '1D'O)";};

//Radio Priority LCS - 7.7.25B
type record RadioPriorityLCS{
 OCT1                    type_gtpc,
 LIN2_BO_LAST            lengthf, //16 bits
 BIT3                    radioPriorityLCS,
 BIT5                    reserved
}  with { variant "PRESENCE( type_gtpc = '96'O)";
          variant (lengthf) "LENGTHTO(radioPriorityLCS,reserved)"; };

//Charging ID - 7.7.26
type record ChargingID {
 OCT1                    type_gtpc,
 OCT4                    chargingID
}  with { variant "PRESENCE( type_gtpc = '7F'O)";};

//End User Address ID - 7.7.27
type record EndUserAddress{
 OCT1                    type_gtpc,
 EndUserAddress_types    endUserAddress 
}  with { variant "PRESENCE( type_gtpc = '80'O)";};

type union EndUserAddress_types {
 EndUserAddressIPv4          endUserAddressIPv4,
 EndUserAddressIPv6          endUserAddressIPv6,
 EndUserAddressPPP           endUserAddressPPP,
 EndUserAddressIPv4andIPv6   endUserAddressIPv4andIPv6,
 EndUserAddressOSPIHOS       endUserAddressOSPIHOS
} with { variant "TAG(endUserAddressIPv4, pdp_typenum = '21'O;
                      endUserAddressIPv6, pdp_typenum = '57'O;
                      endUserAddressPPP,  pdp_typenum = '01'O;
                      endUserAddressIPv4andIPv6, pdp_typenum = '8D'O;
                      endUserAddressOSPIHOS, OTHERWISE;)" };
                      
type record  EndUserAddressIPv4 {
 LIN2_BO_LAST             lengthf, //16 bits
 BIT4                     pdp_typeorg,
 BIT4                     spare, 
 OCT1                     pdp_typenum,
 OCT4                     ipv4_address optional 
} with { variant (lengthf) "LENGTHTO(pdp_typeorg, spare, pdp_typenum, 
                                     ipv4_address)"; };

type record EndUserAddressIPv6 {
 LIN2_BO_LAST             lengthf, //16 bits
 BIT4                     pdp_typeorg,
 BIT4                     spare,
 OCT1                     pdp_typenum,
 OCT16                    ipv6_address optional
} with { variant (lengthf) "LENGTHTO(pdp_typeorg, spare, pdp_typenum, 
                                     ipv6_address)"; };

type record  EndUserAddressPPP {
 LIN2_BO_LAST            lengthf, //16 bits
 BIT4                    pdp_typeorg,
 BIT4                    spare,
 OCT1                    pdp_typenum
} with { variant (lengthf) "LENGTHTO(pdp_typeorg, spare, pdp_typenum)"; };

type record EndUserAddressIPv4andIPv6 {
 LIN2_BO_LAST             lengthf, //16 bits
 BIT4                     pdp_typeorg,
 BIT4                     spare,
 OCT1                     pdp_typenum,
 OCT4                     ipv4_address optional,
 OCT16                    ipv6_address optional
} with { variant (lengthf) "LENGTHTO(pdp_typeorg, spare, pdp_typenum,ipv4_address, 
                                     ipv6_address)"; 
         variant(ipv4_address) "PRESENCE(lengthf = 6,lengthf = 22)"                                            
         variant(ipv6_address) "PRESENCE(lengthf = 18,lengthf = 22)"                                      
};

// ETHECS: specification not found in Technical Specification
type record  EndUserAddressOSPIHOS {
 LIN2_BO_LAST            lengthf, //16 bits 
 BIT4                    pdp_typeorg,
 BIT4                    spare,
 OCT1                    pdp_typenum
} with { variant (lengthf) "LENGTHTO(pdp_typeorg, spare, pdp_typenum)"; };

//MM Context  -  7.7.28
type record MM_Context {
 OCT1                    type_gtpc,
 MM_ContextU             context
}  with { variant "PRESENCE( type_gtpc = '81'O)";};

type union MM_ContextU {
 MM_ContextGSM           mmcontGSM,
 MM_ContextUMTS          mmcontUMTS,
 MM_ContextGSMUMTS       mmcontGSMUMTS,
 MM_ContextUMTSReceive   mmcontUMTSReceive
} with { variant "TAG(mmcontGSM, security = '01'B;
                      mmcontUMTS, security = '10'B;
                      mmcontGSMUMTS, security = '11'B;
                      mmcontUMTSReceive, security = '00'B;)"; };


type record  MM_ContextGSM {
 LIN2_BO_LAST            lengthf,//16 bits
 BIT3                    cksn,
 BIT5                    spare,
 BIT3                    usedCipher,
 integer                 noofVectors,
 BIT2                    security, 
 OCT8                    kc,
 octetstring             triplet,
 OCT2                    drx_par,
 integer                 msNetW_cap_length,
 octetstring             msNetw_cap optional,
 LIN2_BO_LAST            containerLength,
 octetstring             container optional 
} with { variant (lengthf) "LENGTHTO(cksn, spare, usedCipher, noofVectors,
                                     security, kc, triplet, drx_par, 
                                     msNetW_cap_length, msNetw_cap, 
                                     containerLength, container
                                     )";
         variant (msNetW_cap_length) "LENGTHTO(msNetw_cap)";
         variant (containerLength) "LENGTHTO(container)";
         variant (noofVectors) "FIELDLENGTH(3)";
         variant (noofVectors) "LENGTHTO(triplet)";
         variant (noofVectors) "UNIT(224)";    
};

type record  MM_ContextUMTS {
 LIN2_BO_LAST            lengthf,
 BIT3                    ksi,
 BIT3                    usedGPRSIntegrityAlgorithm,
 BIT1                    ugipai,
 BIT1                    gupii,
 BIT3                    spare1,
 integer                 noofVectors ,
 BIT2                    security,
 OCT16                   ck,
 OCT16                   ik,
 LIN2_BO_LAST            quintupletlength,
 octetstring             quintuplet,
 OCT2                    drx_par,
 integer                 msNetW_cap_length,
 octetstring             msNetw_cap optional,
 LIN2_BO_LAST            containerLength,
 octetstring             container optional
} with { variant (lengthf) "LENGTHTO(ksi, usedGPRSIntegrityAlgorithm, ugipai, gupii, spare1, noofVectors, security,
                                     ck, ik, quintupletlength, quintuplet, 
                                     drx_par, msNetW_cap_length, msNetw_cap,
                                     containerLength, container
                                     )";
         variant (quintupletlength) "LENGTHTO(quintuplet)"; 
         variant (msNetW_cap_length) "LENGTHTO(msNetw_cap)";
         variant (containerLength) "LENGTHTO(container)";
         variant (noofVectors) "FIELDLENGTH(3)"; 
};

type record  MM_ContextGSMUMTS {
 LIN2_BO_LAST            lengthf,
 BIT3                    cksn,
 BIT5                    spare,
 BIT3                    usedCipher,
 integer                 noofVectors,
 BIT2                    security,
 OCT8                    kc,
 LIN2_BO_LAST            quintupletlength,
 octetstring             quintuplet,
 OCT2                    drx_par,
 integer                 msNetW_cap_length,
 octetstring             msNetw_cap optional,
 LIN2_BO_LAST            containerLength,
 octetstring             container optional
} with { variant (lengthf) "LENGTHTO(cksn, spare, usedCipher, noofVectors,
                                    security, kc, quintupletlength, quintuplet,
                                    drx_par, msNetW_cap_length, msNetw_cap,
                                     containerLength, container
                                     )";
         variant (quintupletlength) "LENGTHTO(quintuplet)"; 
         variant (msNetW_cap_length) "LENGTHTO(msNetw_cap)";
         variant (containerLength) "LENGTHTO(container)";
         variant (noofVectors) "FIELDLENGTH(3)"; 
};

type record  MM_ContextUMTSReceive {
 LIN2_BO_LAST            lengthf,
 BIT3                    ksi,
 BIT3                    usedGPRSIntegrityAlgorithm,
 BIT1                    ugipai,
 BIT1                    gupii,
 BIT3                    usedCipher,
 integer                 noofVectors,
 BIT2                    security,
 OCT16                   ck,
 OCT16                   ik,
 LIN2_BO_LAST            quintupletlength,
 octetstring             quintuplet,
 OCT2                    drx_par,
 integer                 msNetW_cap_length,
 octetstring             msNetw_cap optional,
 LIN2_BO_LAST            containerLength,
 octetstring             container optional
} with { variant (lengthf) "LENGTHTO(ksi,  usedGPRSIntegrityAlgorithm, ugipai, gupii,
                                     usedCipher, noofVectors,
                                     security, ck, ik,  quintupletlength,
                                     quintuplet, drx_par,msNetW_cap_length,
                                     msNetw_cap, containerLength, container
                                     )";
         variant (quintupletlength) "LENGTHTO(quintuplet)"; 
         variant (msNetW_cap_length) "LENGTHTO(msNetw_cap)";
         variant (containerLength) "LENGTHTO(container)";
         variant (noofVectors) "FIELDLENGTH(3)"; 
};
         
//From 9.9.3.34 of 3GPP 24.301 according to Req. Spec. 4/1056-LPA 107 579/1 Rev D 
type record GTPC_UENetworkCapabilityV
{
  BIT8     eEA,
  BIT7     eIA,  
  BIT1     spare,  
  BIT8     uEA      optional,  
  BIT7     uIA      optional,
  BIT1     uCS2     optional, 
  BIT1     spare2   optional,
  BIT1     vCC      optional,
  BIT6     spare3   optional,
  octetstring     spare4 length (0..8) optional
}

//PDP context - 7.7.29
type record of PDP_Context_GTPC PDP_Context_GTPC_List;

type record  PDP_Context_GTPC {
 OCT1                    type_gtpc,
 LIN2_BO_LAST            lengthf,
 BIT4                    nsapi,
 BIT1                    order,
 BIT1                    asi,
 BIT1                    vaa,
 BIT1                    ea,
 BIT4                    sapi,
 BIT4                    spare1,
 integer                 qos_subLength,
 QualityOfServiceProfile_Value qos_sub,
 integer                 qos_reqLength,
 QualityOfServiceProfile_Value qos_req,
 integer                 qos_negLength,
 QualityOfServiceProfile_Value qos_neg,
 OCT2                    snd,
 OCT2                    snu,
 OCT1                    sendNPDUnum,
 OCT1                    receiveNPDUnum,
 OCT4                    uteidControlPlane,
 OCT4                    uteidData1,
 OCT1                    pdpcontext,
 BIT4                    pdp_typeorg,
 BIT4                    spare2,
 OCT1                    pdp_typenum,
 integer                 pdp_addressLength,
 octetstring             pdp_address length (0..63),
 integer                 ggsn_addressControlPlaneLength,
 octetstring             ggsn_addressControlPlane length (4..16),
 integer                 ggsn_addressUserPlaneLength,
 octetstring             ggsn_addressUserPlane length (4..16),
 integer                 apnLength,
 octetstring             apn,
 BIT4                    transactionId ,
 BIT4                    spare3,
 OCT1                    transactionID_cont,
 OCT1                    pdp_typenum2 optional,              
 LIN1                    pdp_addresslength2 optional,        
 octetstring             pdp_Address2 length (0..63) optional  
} with {variant "PRESENCE( type_gtpc = '82'O)";
        variant (lengthf) "LENGTHTO(nsapi, order, asi, vaa, ea,
          sapi, spare1, qos_subLength, qos_sub, qos_reqLength, qos_req,
          qos_negLength, qos_neg, snd, snu, sendNPDUnum, receiveNPDUnum,
          uteidControlPlane, uteidData1,pdpcontext, pdp_typeorg, spare2,
          pdp_typenum, pdp_addressLength, pdp_address,
          ggsn_addressControlPlaneLength, ggsn_addressControlPlane,
          ggsn_addressUserPlaneLength, ggsn_addressUserPlane, apnLength, apn,
          transactionId, spare3, transactionID_cont, pdp_typenum2,pdp_addresslength2,pdp_Address2)";
        variant (qos_subLength) "LENGTHTO(qos_sub)";
        variant (qos_reqLength) "LENGTHTO(qos_req)"; 
        variant (qos_negLength) "LENGTHTO(qos_neg)";
        variant (pdp_addressLength) "LENGTHTO(pdp_address)";
        variant (ggsn_addressControlPlaneLength) 
          "LENGTHTO(ggsn_addressControlPlane)";
        variant (ggsn_addressUserPlaneLength) "LENGTHTO(ggsn_addressUserPlane)";
        variant (apnLength) "LENGTHTO(apn)"; 	
        variant (pdp_typenum2,pdp_addresslength2,pdp_Address2) "PRESENCE( ea = '1'B)";
        variant (pdp_addresslength2) "LENGTHTO(pdp_Address2)";
	};

//Access Point Name - 7.7.30
type record  AccessPointName  {
 OCT1                    type_gtpc,
 LIN2_BO_LAST            lengthf,
 octetstring             apn_value
}with { variant "PRESENCE( type_gtpc = '83'O)";
        variant (lengthf) "LENGTHTO(apn_value)"; };

//Protocol Configuration Options -  7.7.31
// 24.008 10.5.6.3
type record  ProtConfigOptions {
 OCT1                     type_gtpc,
 LIN2_BO_LAST             lengthf,
 BIT3                     configProtocol,
 BIT4                     spare,
 BIT1                     extension0,
 ProtocolIDList           protocols
} with { variant "PRESENCE( type_gtpc = '84'O)";
         variant (lengthf) "LENGTHTO(configProtocol, spare, extension0,
                                     protocols)"; };

type set of ProtocolElement ProtocolIDList;

type record ProtocolElement {
 OCT2                            protocolID,
 integer                         lengthProtoID,
 octetstring                     protoIDContents
} with { variant (lengthProtoID) "LENGTHTO(protoIDContents)" };

//GSN Address  -  7.7.32
type record  GSN_Address_GTPC {
 OCT1                     type_gtpc,
 LIN2_BO_LAST             lengthf,
 octetstring              addressf
} with { variant "PRESENCE( type_gtpc = '85'O)";
         variant (lengthf) "LENGTHTO(addressf)"; };

//MS International PSTN/ISDN Num.(MSISDN) -  7.7.33
type record  MSISDN {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 octetstring               msisdn             
} with { variant "PRESENCE( type_gtpc = '86'O)";
         variant (lengthf) "LENGTHTO(msisdn)"; };

type record QoSV_GTPC 
{
 BIT3               reliabilityClass,
 BIT3               delayClass,
 BIT2               spare1,  // '00'B
 BIT3               precedenceClass,
 BIT1               spare2, //'0'B
 BIT4               peakThroughput,
 BIT5               meanThroughput,
 BIT3               spare3, //'000'B
 BIT3               deliverErroneusSDU            optional, //opt because of V97
 BIT2               deliveryOrder                 optional, //opt because of V97
 BIT3               trafficClass                  optional, //opt because of V97
 OCT1               maxSDUSize                    optional, //opt because of V97
 OCT1               maxBitrateUplink              optional, //opt because of V97
 OCT1               maxBitrateDownlink            optional, //opt because of V97
 BIT4               sduErrorRatio                 optional, //opt because of V97
 BIT4               residualBER                   optional, //opt because of V97
 BIT2               trafficHandlingPriority       optional, //opt because of V97
 BIT6               transferDelay                 optional, //opt because of V97
 OCT1               guaranteedBitRateUplink       optional, //opt because of V97
 OCT1               guaranteedBitRateDownlink     optional, //opt because of V97
 BIT4               sourceStatisticsDescriptor    optional, //opt because of V97
 BIT1               signallingIndication          optional, //opt because of V97
 BIT3               spare4                        optional, //opt because of V97
                    // '000'B
 OCT1               maxBitrateDownlinkExt         optional, //opt because of V97
 OCT1               guaranteedBitRateDownlinkExt  optional, //opt because of V97
 OCT1               maxBitrateUplinkExt           optional, //opt because of V97
 OCT1               guaranteedBitRateUplinkExt    optional  //opt because of V97
};

//Quality Of Service Profile -  7.7.34
type record  QualityOfServiceProfile {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 OCT1                      allocRetensionPrio,
 QoSV_GTPC                 qos_ProfileValue 
} with { variant "PRESENCE( type_gtpc = '87'O)";
         variant (lengthf) "LENGTHTO(allocRetensionPrio, qos_ProfileValue)";};

type record  QualityOfServiceProfile_Value {
 OCT1                      allocRetensionPrio,
 QoSV_GTPC                 qos_ProfileValue 
} 

//Authentication Quituplet  -   7.7.35
type record  AuthenticationQuintuplet_GTPC {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 OCT16                     rand,
 integer                   xresLength,
 octetstring               xres,
 OCT16                     ck,
 OCT16                     ik,
 integer                   autnLength,
 octetstring               autn 
} with { variant "PRESENCE( type_gtpc = '88'O)";
         variant (lengthf) "LENGTHTO(rand, xresLength, xres, ck, ik, 
                                     autnLength, autn)";
         variant (xresLength) "LENGTHTO(xres)";
         variant (autnLength) "LENGTHTO(autn)"; };

//Traffic Flow Template (TFT)  -   7.7.36
// 24.008 10.5.6.12
type record  TrafficFlowTemplate {
 OCT1                           type_gtpc,
 LIN2_BO_LAST                   lengthf,
 TrafficFlowTemplateV_GTPC      tft               
} with { variant "PRESENCE( type_gtpc = '89'O)";
         variant (lengthf) "LENGTHTO(tft)"; };


type union TrafficFlowTemplateV_GTPC
{
  TrafficFlowTemplateV_CreateAddReplaceTFT_GTPC
              trafficFlowTemplateV_CreateAddReplaceTFT,
  TrafficFlowTemplateV_DeletePacketFilter_GTPC
              trafficFlowTemplateV_DeletePacketFilter,
  TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation_GTPC
              trafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
};


type record TrafficFlowTemplateV_CreateAddReplaceTFT_GTPC
{
  integer                                numberOfPacketFilters,
  BIT1                                   eBIT,
  BIT3                                   operationCodeTFT,  //'001'B or
  PacketFilterList_CreateAddReplaceTFT_GTPC   packetFilterList_CreateAddReplaceTFT,
  ParametersList_GTPC                         parametersList            optional
} with {
  variant "PRESENCE (operationCodeTFT  = '001'B, //  Create New TFT
                     operationCodeTFT  = '011'B, //  Add packet filters to existing TFT
                     operationCodeTFT  = '100'B  //  Replace packet filters in existing TFT
  )";
  variant(parametersList)       "PRESENCE(eBIT = '1'B)";
  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_CreateAddReplaceTFT)";
  variant(numberOfPacketFilters)"UNIT(elements)";
};


type record TrafficFlowTemplateV_DeletePacketFilter_GTPC
{
  integer                                numberOfPacketFilters,
  BIT1                                   eBIT,
  BIT3                                   operationCodeTFT,
  //'101'B or '011'B or '100'B
  PacketFilterList_DeletePacketFilter_GTPC    packetFilterList_DeletePacketFilter,
  ParametersList_GTPC                         parametersList         optional
} with {
  variant "PRESENCE (operationCodeTFT = '101'B)"  // Delete packet filters from existing TFT
  variant(parametersList) "PRESENCE(eBIT = '1'B)";
  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_DeletePacketFilter)";
  variant  (numberOfPacketFilters)"UNIT(elements)";
};


type record TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation_GTPC
{
  BIT4                         numberOfPacketFilters, //'0000'B
  // numberOfPacketFilters is meaningless here since there is no PacketFilterList
  BIT1                         eBIT,
  BIT3                         operationCodeTFT,      // '010'B  or '110'B
  ParametersList_GTPC               parametersList   optional
} with {
  variant "PRESENCE (operationCodeTFT = '010'B,  // delete existing TFT
                     operationCodeTFT = '110'B   // No TFT Operation
  )";
  variant (parametersList) "PRESENCE(eBIT = '1'B)"
};


type record of PacketFilter_GTPC PacketFilterList_CreateAddReplaceTFT_GTPC;


type record PacketFilter_GTPC
{
  PacketFilterIdentifier_GTPC       identifier,
  OCT1                         evaluationPrecedence,
  LIN1                         lengthIndicator,
  octetstring                  contents
} with { variant (lengthIndicator) "LENGTHTO (contents)"};


type record of PacketFilterIdentifier_GTPC  PacketFilterList_DeletePacketFilter_GTPC;


type OCT1  PacketFilterIdentifier_GTPC;


type record of Parameter_GTPC ParametersList_GTPC;


type record Parameter_GTPC
{
  OCT1               parameterIdentifier,
  LIN1               lengthIndicator,
  octetstring        contents
} with { variant (lengthIndicator) "LENGTHTO (contents)"};


//Target Identification  -   7.7.37
type record  TargetIdentification {
 OCT1                      type_gtpc,        
 LIN2_BO_LAST              lengthf,
 HEX1                      mcc1 optional,            
 HEX1                      mcc2 optional,            
 HEX1                      mcc3 optional,            
 HEX1                      mnc3 optional,            
 HEX1                      mnc1 optional,            
 HEX1                      mnc2 optional,
 OCT2                      lac optional,
 OCT1                      rac optional,
 OCT2                      rnc_id optional,
 octetstring               extended_rnc_id optional        
} with { variant "PRESENCE( type_gtpc = '8A'O)";
         variant (lengthf) "LENGTHTO(mcc1, mcc2, mcc3, mnc3, mnc1, mnc2,
                                     lac, rac, rnc_id, extended_rnc_id)"; };

//UTRAN Transparent container  -   7.7.38
type record  UTRANTransparentContainer {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 octetstring               transparentfield
} with { variant "PRESENCE( type_gtpc = '8B'O)";
         variant (lengthf) "LENGTHTO(transparentfield)";};

//RAB Setup Information  -   7.7.39
type record of RABSetupInformation RABSetupInformation_List

type record RABSetupInformation{
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 BIT4                       nsapi,
 BIT4                       unused,
 OCT4                       teidData optional,
 octetstring                rncIpAddress optional
 } with { variant "PRESENCE( type_gtpc = '8C'O)"; 
          variant (lengthf) "LENGTHTO(nsapi,unused,teidData,rncIpAddress)";}; 

//Extension Header Type List  -  7.7.40
type record  ExtensionHeaderTypeList_gtpc {
 OCT1                       type_gtpc,
 integer                    lengthf,
 octetstring                extensionTypesList
} with { variant "PRESENCE( type_gtpc = '8D'O)"; 
         variant (lengthf) "LENGTHTO(extensionTypesList)"; };

//Trigger ID  -  7.7.41
type record  GTP_TriggerID {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 octetstring                triggerID 
} with { variant "PRESENCE( type_gtpc = '8E'O)"; 
         variant (lengthf) "LENGTHTO(triggerID)";};

//OMC Identity  -  7.7.42
type record  OMCIdentity {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 octetstring                omcID
} with { variant "PRESENCE( type_gtpc = '8F'O)";
         variant (lengthf) "LENGTHTO(omcID)"; };

//BSSGP RAN Information needed for RAN Transparent Container 
//From BSSGP specification 48.018 v9.3.0 according to CR 8446

type union LIN2_2a_GTPC
{
integer length1,
integer length2
} with {
        variant (length1) "FIELDLENGTH(7)";
        variant (length2) "FIELDLENGTH(15)";
        variant (length2) "BYTEORDER(last)";
        variant (length1,length2) "FIELDORDER(msb)";
      }   

type record  PDU_in_Error_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 octetstring            erroneous_BSSGP_PDU
} with { 
        variant (lengthIndicator) "LENGTHTO (erroneous_BSSGP_PDU)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       };

type record Cell_Identifier_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 HEX1                   mccDigit1 ,
 HEX1                   mccDigit2 ,
 HEX1                   mccDigit3 ,
 HEX1                   mncDigit3 ,
 HEX1                   mncDigit1 ,
 HEX1                   mncDigit2 ,
 OCT2                   lac,
 OCT1                   rac,    
 OCT2                   cI_value
} with { 
      variant (lengthIndicator) 
     "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,
               mncDigit2,lac,rac,cI_value)";
      variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                           length2,         ext = '0'B;)";
      variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

type record Cause_BSSGP_GTPC 
 {
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   cause_Value
 } with { 
                variant (lengthIndicator) "LENGTHTO (cause_Value)";
                variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                                     length2,    ext = '0'B;)";
                variant (ext,lengthIndicator) "FIELDORDER(msb)";
};
 
//48.018 v9.3.0 11.3.61
type record RIM_Application_Identity_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   rIMApplicationIdentity
} with { 
         variant (lengthIndicator) "LENGTHTO (rIMApplicationIdentity)";        
         variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//48.018 v9.3.0 11.3.62
type record RIM_Sequence_Number_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT4                   rIMSequenceNumber
} with { 
         variant (lengthIndicator) "LENGTHTO (rIMSequenceNumber)";        
         variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                             length2,         ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//48.018 v9.3.0  Table 11.3.62a.1
type record RAN_Information_Request_RIM_Container_GTPC
{
OCT1                              iEI,
BIT1                              ext,
LIN2_2a_GTPC                      lengthIndicator,
RIM_Application_Identity_GTPC     rIM_Application_Identity,
RIM_Sequence_Number_GTPC          rIM_Sequence_Number,
RIM_PDU_Indications_GTPC          rIM_PDU_Indications,
RIM_Protocol_Version_Number_GTPC  rIM_Protocol_Version_Number optional,
RAN_Information_Request_Application_Container_GTPC  
                                        application_Container optional,
SON_TransferApplicationIdentity   sON_TransferApplicationIdentity optional                                         
} with { 
        variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
           rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,
           application_Container,sON_TransferApplicationIdentity)";        
        variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)"; 
        variant "TAG (rIM_Protocol_Version_Number,   iEI = '55'O)";               
        variant (application_Container) "PRESENCE (rIM_Application_Identity.rIMApplicationIdentity = '01'O;)";  
        variant (application_Container) "PRESENCE (rIM_Application_Identity.rIMApplicationIdentity = '02'O;)";
        variant (application_Container) "PRESENCE (rIM_Application_Identity.rIMApplicationIdentity = '03'O;)";
        variant (application_Container) "PRESENCE (rIM_Application_Identity.rIMApplicationIdentity = '04'O;)";
        variant (application_Container) "PRESENCE (rIM_Application_Identity.rIMApplicationIdentity = '05'O;)";                                
        variant (application_Container) 
	 "CROSSTAG 
	     (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
              si3 ,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
              mBMS,rIM_Application_Identity.rIMApplicationIdentity = '03'O;
              sON, rIM_Application_Identity.rIMApplicationIdentity = '04'O;
              uTRA_SI,rIM_Application_Identity.rIMApplicationIdentity = '05'O;
             )"                                  
        variant (sON_TransferApplicationIdentity) 
	 "PRESENCE
	    (rIM_Application_Identity.rIMApplicationIdentity = '04'O;)";                  
};

//48.018 v9.3.0 Table 11.3.62a.2
type record RAN_Information_RIM_Container_GTPC
{
OCT1                              iEI,
BIT1                              ext,
LIN2_2a_GTPC                      lengthIndicator,  
RIM_Application_Identity_GTPC     rIM_Application_Identity,
RIM_Sequence_Number_GTPC          rIM_Sequence_Number,
RIM_PDU_Indications_GTPC          rIM_PDU_Indications,
RIM_Protocol_Version_Number_GTPC  rIM_Protocol_Version_Number   optional,
ApplContainer_or_ApplErrContainer_GTPC 
                              applContainer_or_ApplErrContainer optional,
SON_TransferApplicationIdentity   sON_TransferApplicationIdentity optional                              
}  with { 
      variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
           rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,
           applContainer_or_ApplErrContainer,sON_TransferApplicationIdentity)";        
      variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                           length2,        ext = '0'B;)";
      variant (ext,lengthIndicator) "FIELDORDER(msb)";
      variant 
       "TAG (rIM_Protocol_Version_Number,   iEI = '55'O;)";        
      variant (applContainer_or_ApplErrContainer) "PRESENCE(rIM_Application_Identity.rIMApplicationIdentity = '01'O;)"; 
      variant (applContainer_or_ApplErrContainer) "PRESENCE(rIM_Application_Identity.rIMApplicationIdentity = '02'O;)"; 
      variant (applContainer_or_ApplErrContainer) "PRESENCE(rIM_Application_Identity.rIMApplicationIdentity = '03'O;)"; 
      variant (applContainer_or_ApplErrContainer) "PRESENCE(rIM_Application_Identity.rIMApplicationIdentity = '04'O;)"; 
      variant (applContainer_or_ApplErrContainer) "PRESENCE(rIM_Application_Identity.rIMApplicationIdentity = '05'O;)"; 
      variant (applContainer_or_ApplErrContainer) 
       "CROSSTAG(nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
                 si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
                 mBMS,rIM_Application_Identity.rIMApplicationIdentity = '03'O;
                 sON,rIM_Application_Identity.rIMApplicationIdentity = '04'O;
                 uTRA_SI,rIM_Application_Identity.rIMApplicationIdentity = '05'O)"; 
                 
                       
      variant (sON_TransferApplicationIdentity) 
	 "PRESENCE
	    (rIM_Application_Identity.rIMApplicationIdentity = '04'O;)";                           
};         

type union ApplContainer_or_ApplErrContainer_GTPC
{
 ApplContainer_or_ApplErrContainer_NACC_GTPC       nacc,
 ApplContainer_or_ApplErrContainer_SI3_GTPC        si3,
 ApplContainer_or_ApplErrContainer_MBMS_GTPC       mBMS,
 ApplContainer_or_ApplErrContainer_SON_GTPC        sON,
 ApplContainer_or_ApplErrContainer_UTRA_SI_GTPC    uTRA_SI
}

type union ApplContainer_or_ApplErrContainer_NACC_GTPC
{
 RAN_Information_Application_Container_NACC_GTPC   application_Container,
 Application_Error_Container_NACC_GTPC             application_Error_Container
} with { 
         variant "TAG (
                        application_Container,  iEI = '4E'O;
                        application_Error_Container, iEI = '56'O;)";   
}

type union ApplContainer_or_ApplErrContainer_SI3_GTPC
{
 RAN_Information_Application_Container_SI3_GTPC   application_Container,
 Application_Error_Container_SI3_GTPC             application_Error_Container
} with { 
         variant "TAG (
                        application_Container,  iEI = '4E'O;
                        application_Error_Container, iEI = '56'O;)";   
}

type union ApplContainer_or_ApplErrContainer_MBMS_GTPC
{
 RAN_Information_Application_Container_MBMS_GTPC   application_Container,
 Application_Error_Container_MBMS_GTPC             application_Error_Container
} with { 
         variant "TAG (
                        application_Container,  iEI = '4E'O;
                        application_Error_Container, iEI = '56'O;)";   
}

type union ApplContainer_or_ApplErrContainer_SON_GTPC
{
 RAN_Information_Application_Container_SON_GTPC   application_Container,
 Application_Error_Container_SON_GTPC             application_Error_Container
} with { 
         variant "TAG (
                        application_Container,  iEI = '4E'O;
                        application_Error_Container, iEI = '56'O;)";   
}

type union ApplContainer_or_ApplErrContainer_UTRA_SI_GTPC
{
 RAN_Information_Application_Container_UTRA_SI_GTPC   application_Container,
 Application_Error_Container_UTRA_SI_GTPC             application_Error_Container
} with { 
         variant "TAG (
                        application_Container,  iEI = '4E'O;
                        application_Error_Container, iEI = '56'O;)";   
}


//48.018 v9.3.0 Table 11.3.62a.3
type record RAN_Information_Ack_RIM_Container_GTPC
{
OCT1                              iEI,
BIT1                              ext,
LIN2_2a_GTPC                      lengthIndicator,  
RIM_Application_Identity_GTPC     rIM_Application_Identity,
RIM_Sequence_Number_GTPC          rIM_Sequence_Number,
RIM_Protocol_Version_Number_GTPC  rIM_Protocol_Version_Number   optional,
SON_TransferApplicationIdentity   sON_TransferApplicationIdentity optional
} with { 
        variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
          rIM_Sequence_Number,rIM_Protocol_Version_Number)";        
        variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                           length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
  
        variant "TAG (rIM_Protocol_Version_Number,   iEI = '55'O;)"; 
        variant (sON_TransferApplicationIdentity) 
	 "PRESENCE
	    (rIM_Application_Identity.rIMApplicationIdentity = '04'O;)";                 
};

//48.018 v9.3.0 Table 11.3.62a.4
type record RAN_Information_Error_RIM_Container_GTPC
{
OCT1                              iEI,
BIT1                              ext,
LIN2_2a_GTPC                      lengthIndicator,  
RIM_Application_Identity_GTPC     rIM_Application_Identity,
Cause_BSSGP_GTPC                  rIM_cause,
RIM_Protocol_Version_Number_GTPC  rIM_Protocol_Version_Number   optional,
PDU_in_Error_GTPC                 pDU_in_Error,
SON_TransferApplicationIdentity   sON_TransferApplicationIdentity optional     
} with { 
        variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
         rIM_cause,rIM_Protocol_Version_Number,pDU_in_Error)";        
        variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                           length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
        variant "TAG (rIM_Protocol_Version_Number,   iEI = '55'O)"; 
        variant (sON_TransferApplicationIdentity) 
	 "PRESENCE
	    (rIM_Application_Identity.rIMApplicationIdentity = '04'O;)";         
};

//48.018 v9.3.0 Table 11.3.62a.5
type record RAN_Information_Application_Error_RIM_Container_GTPC
{
OCT1                              iEI,
BIT1                              ext,
LIN2_2a_GTPC                      lengthIndicator,    
RIM_Application_Identity_GTPC     rIM_Application_Identity,
RIM_Sequence_Number_GTPC          rIM_Sequence_Number,
RIM_PDU_Indications_GTPC          rIM_PDU_Indications,
RIM_Protocol_Version_Number_GTPC  rIM_Protocol_Version_Number   optional,
Application_Error_Container_GTPC  application_Error_Container,
SON_TransferApplicationIdentity   sON_TransferApplicationIdentity optional
} with { 
     variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
       rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,  
       application_Error_Container)";        
     variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                          length2,         ext = '0'B;)";
     variant (ext,lengthIndicator) "FIELDORDER(msb)";
 
     variant "TAG (rIM_Protocol_Version_Number,   iEI = '55'O)"; 
          
     variant (application_Error_Container)
      "CROSSTAG (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
                 si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
                 mBMS,rIM_Application_Identity.rIMApplicationIdentity = '03'O;
                 sON,rIM_Application_Identity.rIMApplicationIdentity = '04'O;
                 uTRA_SI,rIM_Application_Identity.rIMApplicationIdentity = '05'O)"; 
                        
     variant (sON_TransferApplicationIdentity) 
	 "PRESENCE
	    (rIM_Application_Identity.rIMApplicationIdentity = '04'O;)";        
};

//48.018 v9.3.0 Table 11.3.64
type union Application_Error_Container_GTPC
{
 Application_Error_Container_NACC_GTPC     nacc,
 Application_Error_Container_SI3_GTPC      si3,
 Application_Error_Container_MBMS_GTPC     mBMS,
 Application_Error_Container_SON_GTPC      sON,
 Application_Error_Container_UTRA_SI_GTPC  uTRA_SI
}

//48.018 v9.3.0 Table 11.3.63.1
type union RAN_Information_Request_Application_Container_GTPC
{
 RAN_Information_Request_Application_Container_NACC_GTPC      nacc,
 RAN_Information_Request_Application_Container_SI3_GTPC       si3, 
 RAN_Information_Request_Application_Container_MBMS_GTPC      mBMS,
 RAN_Information_Request_Application_Container_SON_GTPC       sON,
 RAN_Information_Request_Application_Container_UTRA_SI_GTPC   uTRA_SI
}

//48.018 v9.3.0 Table 11.3.63.1.1
type record RAN_Information_Request_Application_Container_NACC_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier
} with { 
         variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
         variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

//48.018 v9.3.0 Table 11.3.63.1.2
type record RAN_Information_Request_Application_Container_SI3_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier
} with { 
         variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
         variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//48.018 v9.3.0 Table 11.3.63.1.3
type record RAN_Information_Request_Application_Container_MBMS_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier
} with { 
         variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
         variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//48.018 v9.3.0 Table 11.3.63.1.4
type record RAN_Information_Request_Application_Container_SON_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier,
 octetstring                 sON_TransferRequestContainer   // 3GPP TS 36.413
} with { 
         variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier,sON_TransferRequestContainer)";     
         variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//48.018 v9.3.0 Table 11.3.63.1.5
type record RAN_Information_Request_Application_Container_UTRA_SI_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier
} with { 
         variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
         variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//48.018 v9.3.0 Table 11.3.108
type record SON_TransferApplicationIdentity
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator, 
 octetstring         sON_TransferApplicationIdentityValue  
}

//48.018 v9.3.0 Table 11.3.63.2.1
type record RAN_Information_Application_Container_NACC_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier,
 BIT1                        typeBit,
 BIT7                        number_of_SI_PSI,
 octetstring                 sI_PSI     // 3GPP TS 44.018, 44.060
} with { 
       variant (lengthIndicator) 
        "LENGTHTO (reporting_Cell_Identifier,typeBit,number_of_SI_PSI,sI_PSI)";
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

//48.018 v9.3.0 Table 11.3.63.2.2
type record RAN_Information_Application_Container_SI3_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier,
 octetstring                 sI3 length (21)       // 3GPP TS 44.018
} with { 
       variant (lengthIndicator) 
        "LENGTHTO (reporting_Cell_Identifier,sI3)";
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)"; 
       variant (sI3)"FIELDLENGTH(21)" ;      
};        

//48.018 v9.3.0 Table 11.3.63.2.3
type record RAN_Information_Application_Container_MBMS_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier,
 octetstring                 mBMS_ChannelReport
} with { 
       variant (lengthIndicator) 
        "LENGTHTO (reporting_Cell_Identifier,mBMS_ChannelReport)";
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";          
};        

//48.018 v9.3.0 Table 11.3.63.2.4
type record RAN_Information_Application_Container_SON_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier,
 octetstring                 sON_TransferResponseContainer // 3GPP TS 36.413


} with { 
       variant (lengthIndicator) 
        "LENGTHTO (reporting_Cell_Identifier,sON_TransferResponseContainer)";
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";          
};        

//48.018 v9.3.0 Table 11.3.63.2.5
type record RAN_Information_Application_Container_UTRA_SI_GTPC
{
 OCT1                        iEI,
 BIT1                        ext,
 LIN2_2a_GTPC                lengthIndicator,
 Cell_Identifier_GTPC        reporting_Cell_Identifier,
 octetstring                 uTRA_SI_Container   // 3GPP TS25.331


} with { 
       variant (lengthIndicator) 
        "LENGTHTO (reporting_Cell_Identifier,uTRA_SI_Container)";
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";          
};        


//48.018 v9.3.0 11.3.64.1 
type record Application_Error_Container_NACC_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   nACC_cause,
 Application_Container_IE_NACC_GTPC  erroneousApplicationContainer
} with { 
       variant (lengthIndicator)
          "LENGTHTO (nACC_cause,erroneousApplicationContainer)"; 
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

type union Application_Container_IE_NACC_GTPC
{
RAN_Information_Request_Application_Container_NACC_GTPC 
                        rAN_Information_Request_Application_Container,
			
RAN_Information_Application_Container_NACC_GTPC    
                        rAN_Information_Application_Container
}        
with { 
         variant "TAG (
                  rAN_Information_Request_Application_Container,  iEI = '4D'O;
                  rAN_Information_Application_Container, iEI = '4E'O)";  
}


//48.018 v9.3.0 11.3.64.2 
type record Application_Error_Container_SI3_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   sI3_cause,
 Application_Container_IE_SI3_GTPC  erroneousApplicationContainer
} with { 
       variant (lengthIndicator)
          "LENGTHTO (sI3_cause,erroneousApplicationContainer)"; 
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";
};  


type union Application_Container_IE_SI3_GTPC
{
RAN_Information_Request_Application_Container_SI3_GTPC 
                        rAN_Information_Request_Application_Container,
			
RAN_Information_Application_Container_SI3_GTPC    
                        rAN_Information_Application_Container
}        
with { 
         variant "TAG (
                  rAN_Information_Request_Application_Container,  iEI = '4D'O;
                  rAN_Information_Application_Container, iEI = '4E'O)";  
}

//48.018 v9.3.0 11.3.64.3 
type record Application_Error_Container_MBMS_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   mBMS_cause,
 Application_Container_IE_MBMS_GTPC  erroneousApplicationContainer
} with { 
       variant (lengthIndicator)
          "LENGTHTO (mBMS_cause,erroneousApplicationContainer)"; 
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";
};  


type union Application_Container_IE_MBMS_GTPC
{
RAN_Information_Request_Application_Container_MBMS_GTPC 
                        rAN_Information_Request_Application_Container,
			
RAN_Information_Application_Container_MBMS_GTPC    
                        rAN_Information_Application_Container
}        
with { 
         variant "TAG (
                  rAN_Information_Request_Application_Container,  iEI = '4D'O;
                  rAN_Information_Application_Container, iEI = '4E'O)";  
}

//48.018 v9.3.0 11.3.64.4 
type record Application_Error_Container_SON_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   sON_cause,
 Application_Container_IE_SON_GTPC  erroneousApplicationContainer
} with { 
       variant (lengthIndicator)
          "LENGTHTO (sON_cause,erroneousApplicationContainer)"; 
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";
};  


type union Application_Container_IE_SON_GTPC
{
RAN_Information_Request_Application_Container_SON_GTPC 
                        rAN_Information_Request_Application_Container,
			
RAN_Information_Application_Container_SON_GTPC    
                        rAN_Information_Application_Container
}        
with { 
         variant "TAG (
                  rAN_Information_Request_Application_Container,  iEI = '4D'O;
                  rAN_Information_Application_Container, iEI = '4E'O)";  
}


//48.018 v9.3.0 11.3.64.5 
type record Application_Error_Container_UTRA_SI_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   uTRA_SI_cause,
 Application_Container_IE_SON_GTPC  erroneousApplicationContainer
} with { 
       variant (lengthIndicator)
          "LENGTHTO (uTRA_SI_cause,erroneousApplicationContainer)"; 
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                            length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";
};  


type union Application_Container_IE_UTRA_SI_GTPC
{
RAN_Information_Request_Application_Container_UTRA_SI_GTPC 
                        rAN_Information_Request_Application_Container,
			
RAN_Information_Application_Container_UTRA_SI_GTPC    
                        rAN_Information_Application_Container
}        
with { 
         variant "TAG (
                  rAN_Information_Request_Application_Container,  iEI = '4D'O;
                  rAN_Information_Application_Container, iEI = '4E'O)";  
}


//48.018 v9.3.0 11.3.65
type record RIM_PDU_Indications_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 BIT1                   ack,
 BIT3                   pDU_Type_Extension,
 BIT4                   reserved
} with { 
        variant (lengthIndicator) "LENGTHTO (ack,pDU_Type_Extension,reserved)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//48.018 v9.3.0 11.3.67
type record RIM_Protocol_Version_Number_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 OCT1                   rIMProtocolVersionNumber
} with { 
         variant (lengthIndicator) "LENGTHTO (rIMProtocolVersionNumber)";   
         variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                              length2,        ext = '0'B;)";
         variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

//48.018 v9.3.0  11.3.70
type record RIM_Routing_Information_GTPC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a_GTPC           lengthIndicator,
 HEX1                   rIMRoutingAddressDiscriminator,
 HEX1                   spare,
 RIM_Routing_Address_GTPC    rIM_Routing_Address 
}  with { 
       variant (lengthIndicator) 
	"LENGTHTO (rIMRoutingAddressDiscriminator,spare,rIM_Routing_Address)"; 
       variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
       variant (ext,lengthIndicator) "FIELDORDER(msb)";

       variant (rIM_Routing_Address) 
	 "CROSSTAG (cell_Identifier,rIMRoutingAddressDiscriminator = '0'H;
                    rNCID,          rIMRoutingAddressDiscriminator = '1'H;
                    eNB_Identifier, rIMRoutingAddressDiscriminator = '2'H;)" 
};

type record Cell_Identifier_V_GTPC
{ 
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   lac,
 OCT1                   rac,    
 OCT2                   cI_value
};

type union RIM_Routing_Address_GTPC
{
 Cell_Identifier_V_GTPC   cell_Identifier, 
 RNC_ID_BSSGP_GTPC        rNCID,
 ENB_Identifier           eNB_Identifier
 }

type record RNC_ID_BSSGP_GTPC
{
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   lAC,
 OCT1                   rAC,
 HEX1                   spare,
 integer                rNC_ID
}  with { 
          variant (spare,rNC_ID) "FIELDORDER(msb)";
          variant (rNC_ID) "BYTEORDER(last)";  
          variant (rNC_ID) "FIELDLENGTH(12)";
} 

type record ENB_Identifier
{
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   tAC,
 octetstring            globalENB_ID
}

//Note: the following structure is outdated
/*
type record GlobalRNC_ID_BSSGP_GTPC
{
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2, 

 integer                rNC_ID
}  with { 
          variant (spare,rNC_ID) "FIELDORDER(msb)";
          variant (rNC_ID) "BYTEORDER(last)";  
          variant (rNC_ID) "FIELDLENGTH(12)";
}
*/

//48.018 v9.3.0  10.6.1
type record PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC
{
 OCT1			  	   bssgpPduType,
 RIM_Routing_Information_GTPC  	   destination_Cell_Identifier,
 RIM_Routing_Information_GTPC  	   source_Cell_Identifier,
 RAN_Information_Request_RIM_Container_GTPC  rIM_Container
};
      
//48.018 v9.3.0  10.6.2
type record PDU_BSSGP_RAN_INFORMATION_GTPC
{
 OCT1			                bssgpPduType,
 RIM_Routing_Information_GTPC           destination_Cell_Identifier,
 RIM_Routing_Information_GTPC           source_Cell_Identifier,
 RAN_Information_RIM_Container_GTPC     rIM_Container
};

//48.018 v9.3.0  10.6.3
type record PDU_BSSGP_RAN_INFORMATION_ACK_GTPC
{
 OCT1				   bssgpPduType,
 RIM_Routing_Information_GTPC	   destination_Cell_Identifier,
 RIM_Routing_Information_GTPC	   source_Cell_Identifier,
 RAN_Information_Ack_RIM_Container_GTPC rIM_Container
};

//48.018 v9.3.0  10.6.4
type record PDU_BSSGP_RAN_INFORMATION_ERROR_GTPC
{
 OCT1			                bssgpPduType,
 RIM_Routing_Information_GTPC           destination_Cell_Identifier,
 RIM_Routing_Information_GTPC           source_Cell_Identifier,
 RAN_Information_Error_RIM_Container_GTPC  rIM_Container
};

//48.018 v9.3.0  10.6.5
type record PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR_GTPC
{
 OCT1			                bssgpPduType,
 RIM_Routing_Information_GTPC           destination_Cell_Identifier,
 RIM_Routing_Information_GTPC           source_Cell_Identifier,
 RAN_Information_Application_Error_RIM_Container_GTPC  rIM_Container
};

type union RANTransparentContainerField  
{    
PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC       pDU_BSSGP_RAN_INFORMATION_REQUEST,
PDU_BSSGP_RAN_INFORMATION_GTPC               pDU_BSSGP_RAN_INFORMATION,
PDU_BSSGP_RAN_INFORMATION_ACK_GTPC           pDU_BSSGP_RAN_INFORMATION_ACK,
PDU_BSSGP_RAN_INFORMATION_ERROR_GTPC         pDU_BSSGP_RAN_INFORMATION_ERROR,
PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR_GTPC  
                                  pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR
} with { variant "TAG (        
  pDU_BSSGP_RAN_INFORMATION_REQUEST,           bssgpPduType ='71'O;
  pDU_BSSGP_RAN_INFORMATION,       bssgpPduType ='70'O;
  pDU_BSSGP_RAN_INFORMATION_ACK,   bssgpPduType ='72'O;
  pDU_BSSGP_RAN_INFORMATION_ERROR, bssgpPduType ='73'O;
  pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR, bssgpPduType ='74'O  
  )"  
};
  
//RAN Transparent Container 7.7.43
type record RANTransparentContainer{
 OCT1                                 type_gtpc,
 LIN2_BO_LAST                         lengthf,
 RANTransparentContainerField         rANTransparentContainerField
} with { variant "PRESENCE( type_gtpc = '90'O)";
         variant (lengthf) "LENGTHTO(rANTransparentContainerField)"; };

//Charging Gateway Address  - 7.7.44
type record  ChargingGatewayAddress {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 iPv4_iPv6_Address          ipv_address
} with { variant "PRESENCE( type_gtpc = 'FB'O)";
         variant (lengthf) "LENGTHTO(ipv_address)";};

type union iPv4_iPv6_Address{
 OCT4                       iPv4_Address,
 OCT16                      iPv6_Address
}

//PDP Context Priorization  - 7.7.45
type record PDPContextPriorization {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf
} with { variant "PRESENCE( type_gtpc = '91'O)";};

//Addititonal RAB Setup Information  -   7.7.45A

type record of AdditionalRABSetupInformation AdditionalRABSetupInformation_List

type record AdditionalRABSetupInformation {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 BIT4                       nsapi,
 BIT4                       unused,
 OCT4                       teidData optional,
 octetstring                rncIpAddress optional
} with {variant "PRESENCE( type_gtpc = '92'O)"; 
        variant (lengthf) "LENGTHTO(nsapi,unused,teidData,rncIpAddress)"; };

//Private Extension  -  7.7.46
type record of PrivateExtension_gtpc PrivateExtension_gtpc_List;

type record  PrivateExtension_gtpc {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT2                       extensionID,
 octetstring                extensionValue
} with {variant "PRESENCE( type_gtpc = 'FF'O)"; 
        variant (lengthf) "LENGTHTO(extensionID, extensionValue)"; };

//SGSN Number - 7.7.47
type record SGSN_Number {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 octetstring                sGSN_NumberValue
} with { variant "PRESENCE( type_gtpc = '93'O)"; 
         variant (lengthf) "LENGTHTO(sGSN_NumberValue)"; };

//Common Flags - 7.7.48
type record CommonFlags {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 BIT1                       prohibitPayloadCompression,
 BIT1                       mBMS_ServiceType,
 BIT1                       rAN_ProceduresReady,
 BIT1                       mBMS_CountingInformation,
 BIT1                       nO_QoS_Negotiation,
 BIT1                       nRSN,
 BIT1                       upgradeQoS_Supported,
 BIT1                       dualAddressBearerFlag
} with { variant "PRESENCE( type_gtpc = '94'O)";
         variant (lengthf) "LENGTHTO(prohibitPayloadCompression,mBMS_ServiceType,
                                     rAN_ProceduresReady,mBMS_CountingInformation,
                                     nO_QoS_Negotiation,nRSN,upgradeQoS_Supported,dualAddressBearerFlag)"; }; 

//APN Restriction - 7.7.49
type record APN_Restriction  {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT1                       restrictionTypeValue
} with { variant "PRESENCE( type_gtpc = '95'O)";
         variant (lengthf) "LENGTHTO(restrictionTypeValue)"; }; 
  
// RAT Type  -  7.7.50
type record RATType {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT1                       ratTypeValue
} with { variant "PRESENCE( type_gtpc = '97'O)";
         variant (lengthf) "LENGTHTO(ratTypeValue)"; }; 

// User Location Information  -  7.7.51
type record UserLocationInformation {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT1                       geographicLocationType,
 GeographicLocation_gtpc    geographicLocation
} with { variant "PRESENCE( type_gtpc = '98'O)";
  variant (lengthf) "LENGTHTO(geographicLocationType, geographicLocation)";
  variant (geographicLocation) "CROSSTAG(geographicLocationCGI, geographicLocationType='00'O;
                                         geographicLocationSAI, geographicLocationType='01'O;
                                         geographicLocationRAI, geographicLocationType='02'O)";};

type union GeographicLocation_gtpc {
  GeographicLocationCGI     geographicLocationCGI,
  GeographicLocationSAI     geographicLocationSAI,
  GeographicLocationRAI     geographicLocationRAI
}

// Figure 7.7.51.2: Geographic Location field for CGI
type record GeographicLocationCGI {
 HEX1                       mccDigit1,
 HEX1                       mccDigit2,
 HEX1                       mccDigit3,
 HEX1                       mncDigit3,
 HEX1                       mncDigit1,
 HEX1                       mncDigit2,
 OCT2                       lac,
 OCT2                       cI_value
}

// Figure 7.7.51.3: Geographic Location field for SAI
type record GeographicLocationSAI {
 HEX1                       mccDigit1,
 HEX1                       mccDigit2,
 HEX1                       mccDigit3,
 HEX1                       mncDigit3,
 HEX1                       mncDigit1,
 HEX1                       mncDigit2,
 OCT2                       lac,
 OCT2                       sac
}

// Figure 7.7.51.4: Geographic Location field for RAI
type record GeographicLocationRAI {
 HEX1                       mccDigit1,
 HEX1                       mccDigit2,
 HEX1                       mccDigit3,
 HEX1                       mncDigit3,
 HEX1                       mncDigit1,
 HEX1                       mncDigit2,
 OCT2                       lac,
 OCT2                       rac
}

// MS Time Zone  -  7.7.52
type record MS_TimeZone {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT1                       timeZone,
 BIT2                       daylightSavingTime,
 BIT3                       spare1,
// This bit is proprietary, compared to the 3GPP definition of
// the Time Zone information element.
// The new field "SGSN Attempts to Update MS" is described in 
// the following CPI documentation: GSN CDR Format, 
// 1/190 83-AXB 250 05/6 Uen A.
// Web link to CPI: http://cpi2.al.sw.ericsson.se/alex?pr=PDU+PCN
 BIT1                       sgsnAttempsToUpdateMS,
 BIT2                       spare2
} with { variant "PRESENCE( type_gtpc = '99'O)";
         variant (lengthf) "LENGTHTO(timeZone, daylightSavingTime, spare1,
                                     sgsnAttempsToUpdateMS, spare2)"; };

// IMEISV - 7.7.53
type record IMEISV_gtpc {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 OCT8                      imeisv
} with { variant "PRESENCE( type_gtpc = '9A'O)";
         variant (lengthf) "LENGTHTO(imeisv)"; };

// Camel Charging Information Container - 7.7.54
type record CamelChargingInformationContainer {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 octetstring               camelInformationPDP_IE
} with { variant "PRESENCE( type_gtpc = '9B'O)";
         variant (lengthf) "LENGTHTO(camelInformationPDP_IE)"; };

// MBMS UE Context Container - 7.7.55
type record of MBMS_UE_ContextContainer MBMS_UE_Context_List;

type record MBMS_UE_ContextContainer {
 OCT1                    type_gtpc,
 LIN2_BO_LAST            lengthf,
 BIT4                    spare1,
 BIT4                    linkedNSAPI,
 OCT4                    uteidControlPlane,
 OCT1                    enhancedNSAPI,
 BIT4                    pdp_typeorg,
 BIT4                    spare2,
 OCT1                    pdp_typenum,
 integer                 pdp_addressLength,
 octetstring             pdp_address length (0..63),
 integer                 ggsn_addressControlPlaneLength,
 octetstring             ggsn_addressControlPlane length (4..16),
 integer                 apnLength,
 octetstring             apn,
 BIT4                    transactionId,
 BIT4                    spare3,
 OCT1                    transactionID
} with {variant "PRESENCE( type_gtpc = '9C'O)";
        variant (lengthf) "LENGTHTO(spare1, linkedNSAPI,
          uteidControlPlane, enhancedNSAPI, pdp_typeorg, spare2,
          pdp_typenum, pdp_addressLength, pdp_address,
          ggsn_addressControlPlaneLength, ggsn_addressControlPlane,
          apnLength, apn, transactionId, spare3, transactionID)";
        variant (pdp_addressLength) "LENGTHTO(pdp_address)";
        variant (ggsn_addressControlPlaneLength) 
          "LENGTHTO(ggsn_addressControlPlane)";
        variant (apnLength) "LENGTHTO(apn)"; 	
	};

// Temporary Mobile Group Identity - 7.7.56
type record TMGI_gtpc {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT6                       tMGIValue
} with { variant "PRESENCE( type_gtpc = '9D'O)";
         variant (lengthf) "LENGTHTO(tMGIValue)"; };

// RIM Routing Address - 7.7.57
type record RIM_RoutingAddress {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 octetstring               rIM_RoutingAddressValue
   //Left as octetstring because GTP spec does not include the RIM Routing 
   // Address Discriminator and therefore decoding is not possible as in 48.018
   //CR 544 states that "The RIM Routing Address contains the destination RNC 
   // Identity from the RAN INFORMATION message when the source is GERAN and 
   // the target is UTRAN.
   //The RIM Routing Address contains the destination Cell Identifier from the 
   // RAN INFORMATION message when the source is GERAN and the target ir GERAN.
} with { variant "PRESENCE( type_gtpc = '9E'O)";
         variant (lengthf) "LENGTHTO(rIM_RoutingAddressValue)"; };

//MBMS Protocol Configuration Options - 7.7.58
type record MBMS_ProtocolConfigurationOptions {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 octetstring               mBMS_ProtocolConfigurationOptions
} with { variant "PRESENCE( type_gtpc = '9F'O)";
         variant (lengthf) "LENGTHTO(mBMS_ProtocolConfigurationOptions)"; };

// MBMS Session Duration - 7.7.59
type record MBMS_SessionDuration {
 OCT1                       type_gtpc,
 LIN2_BO_LAST               lengthf,
 OCT3                       mBMS_SessionDurationValue
} with { variant "PRESENCE( type_gtpc = 'A8'O)";
         variant (lengthf) "LENGTHTO(mBMS_SessionDurationValue)"; };


// MBMS Service Area - 7.7.60
type record MBMS_ServiceArea {
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 octetstring                mBMS_ServiceAreaValue
} with { variant "PRESENCE( type_gtpc = 'A0'O)";
         variant (lengthf) "LENGTHTO(mBMS_ServiceAreaValue)"; };

// Source RNC PDCP context info - 7.7.61
type record SourceRNC_PDCP_ContextInfo {
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 octetstring                rRC_Container
} with { variant "PRESENCE( type_gtpc = 'A1'O)";
         variant (lengthf) "LENGTHTO(rRC_Container)"; };

// Additional Trace Info - 7.7.62
type record AdditionalTraceInfo {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT3                      traceReference2,
 OCT2                      traceRecordingSessionReference,
 OCT1                      triggeringEvents_GGSN,
 OCT1                      traceDepth,
 OCT1                      listOfInterfaces_GGSN,
 OCT1                      traceActivityControl
} with { variant "PRESENCE( type_gtpc = 'A2'O)";
         variant (lengthf) "LENGTHTO(traceReference2,
          traceRecordingSessionReference, triggeringEvents_GGSN,
          traceDepth, listOfInterfaces_GGSN, traceActivityControl)";
    };

// Hop Counter - 7.7.63
type record HopCounter_gtpc {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 integer                   hopCounter
} with { variant "PRESENCE( type_gtpc = 'A3'O)";
         variant (lengthf) "LENGTHTO(hopCounter)"; };

// Selected PLMN ID - 7.7.64
type record Selected_PLMN_ID {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT3                      selected_PLMN_Identity
} with { variant "PRESENCE( type_gtpc = 'A4'O)";
         variant (lengthf) "LENGTHTO(selected_PLMN_Identity)"; };

// MBMS Session Identifier - 7.7.65
type record MBMS_SessionIdentifier {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT1                      mBMS_SessionIdentifier
} with { variant "PRESENCE( type_gtpc = 'A5'O)";
         variant (lengthf) "LENGTHTO(mBMS_SessionIdentifier)"; };

// MBMS 2G/3G Indicator - 7.7.66
type record MBMS_2G_3G_Indicator {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT1                      mBMS_2G_3G_Indicator
} with { variant "PRESENCE( type_gtpc = 'A6'O)";
         variant (lengthf) "LENGTHTO(mBMS_2G_3G_Indicator)"; };

// Enhanced NSAPI - 7.7.67
type record Enhanced_NSAPI {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT1                      enhanced_NSAPI
} with { variant "PRESENCE( type_gtpc = 'A7'O)";
         variant (lengthf) "LENGTHTO(enhanced_NSAPI)"; };

// Additional MBMS Trace Info - 7.7.68
type record AdditionalMBMSTraceInfo {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT3                      traceReference2,
 OCT2                      traceRecordingSessionReference,
 OCT2                      triggeringEvents_BM_SC,
 OCT1                      traceDepth_BM_SC,
 OCT1                      listOfInterfaces_BM_SC,
 OCT1                      traceActivityControl_BM_SC
} with { variant "PRESENCE( type_gtpc = 'A9'O)";
         variant (lengthf) "LENGTHTO(traceReference2, traceRecordingSessionReference,
                                     triggeringEvents_BM_SC, traceDepth_BM_SC, 
                                     listOfInterfaces_BM_SC, traceActivityControl_BM_SC)";
  };

// MBMS Session Repetition Number - 7.7.69
type record MBMS_SessionRepetitionNumber {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT1                      mBMS_SessionRepetitionNumber
} with { variant "PRESENCE( type_gtpc = 'AA'O)";
         variant (lengthf) "LENGTHTO(mBMS_SessionRepetitionNumber)"; };

// MBMS Time To Data Transfer - 7.7.70
type record MBMS_TimeToDataTransfer {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT1                      mBMS_TimeToDataTransfer
} with { variant "PRESENCE( type_gtpc = 'AB'O)";
         variant (lengthf) "LENGTHTO(mBMS_TimeToDataTransfer)"; };

// BSS Container - 7.7.72
type record BSS_Container {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 octetstring               bSS_Container  // TODO FIXME: which Container is the BSS Container?
} with { variant "PRESENCE( type_gtpc = 'AD'O)";
         variant (lengthf) "LENGTHTO(bSS_Container)"; };


// Cell Identification - 7.7.73

// Routing Area identification - from 24.008 10.5.5.15
type record RoutingAreaIdentificationV_gtpc  
{  
 HEX1               mccDigit1,
 HEX1               mccDigit2,
 HEX1               mccDigit3,
 HEX1               mncDigit3,
 HEX1               mncDigit1,
 HEX1               mncDigit2,
 OCT2               lac,
 OCT1               rac               
};

type record RNC_Identifier_gtpc {
 RoutingAreaIdentificationV_gtpc   routingAreaIdentificationV_gtpc, 
 integer                           rNC_ID,
 HEX1                              spare
}  with { 
          variant (spare,rNC_ID) "FIELDORDER(msb)";
          variant (rNC_ID) "BYTEORDER(last)";  
          variant (rNC_ID) "FIELDLENGTH(12)";
}
   
type union Cell_ID_or_RNC_ID {
 Cell_Identifier_V_GTPC   cell_Identifier,
 RNC_Identifier_gtpc      rNC_Identifier
}   

type record Cell_Identification_gtpc {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 Cell_Identifier_V_GTPC    targetCell_ID,
 OCT1                      sourceType,  //0 - Source Cell ID / 1- Source RNC ID in next field
 Cell_ID_or_RNC_ID         source_Cell_ID_or_RNC_ID  
} with {variant "PRESENCE( type_gtpc = 'AE'O)"; 
        variant (lengthf) "LENGTHTO(targetCell_ID,sourceType,source_Cell_ID_or_RNC_ID)"; 
        variant (source_Cell_ID_or_RNC_ID) "CROSSTAG ( cell_Identifier, sourceType = '00'O;
                                                     rNC_Identifier, sourceType = '01'O)"; };

// PDU Numbers - 7.7.74
type record of PDU_Numbers PDU_Numbers_List;

type record PDU_Numbers {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT4                      nsapi,
 BIT4                      spare,
 OCT2                      dL_GTPU_SequenceNumber,
 OCT2                      uL_GTPU_SequenceNumber,
 OCT2                      sendNPDUnum,    
 OCT2                      receiveNPDUnum  
} with {variant "PRESENCE( type_gtpc = 'AF'O)"; 
        variant (lengthf) "LENGTHTO(nsapi, spare, dL_GTPU_SequenceNumber, uL_GTPU_SequenceNumber,
              sendNPDUnum, receiveNPDUnum)"; };

// BSSGP Cause - 7.7.75
type record BSSGP_Cause_gtpc {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT1                      bSSGP_Cause
} with { variant "PRESENCE( type_gtpc = 'B0'O)";
         variant (lengthf) "LENGTHTO(bSSGP_Cause)"; };

// Required MBMS Bearer Capabilities - 7.7.76
type record RequiredMBMS_BearerCapabilities {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 octetstring               reqMBMS_BearerCapValue
} with { variant "PRESENCE( type_gtpc = 'B1'O)";
         variant (lengthf) "LENGTHTO(reqMBMS_BearerCapValue)"; }; 

// RIM Routing Address Discriminator 7.7.77
type record RIM_RoutingAddress_Discriminator {
 OCT1                      type_gtpc,
 LIN2_BO_LAST              lengthf,
 BIT4                      rra_discriminator,
 BIT4                      spare
} with { variant "PRESENCE( type_gtpc = 'B2'O)";
         variant (lengthf) "LENGTHTO(rra_discriminator,spare)"; };

// ListOfSetupPFCs - 7.7.78

// PFC/PFI as defined in BSSGP (48.018 - 11.3.83) which refers to L3 (24.008 - 10.5.6.11)
type record Single_PFI_gtpc
{
  BIT7  pFI_Value,
  BIT1  spare
}

type record length (0..11) of Single_PFI_gtpc Multiple_PFIs_gtpc;

type record ListOfSetupPFCsValue_gtpc
{
  integer                number_of_PFCs (0..11),   // note: 12 .. 255 are reserved!!!
  Multiple_PFIs_gtpc     pFIs
} with 
{   
  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFIs),FIELDLENGTH(8)";
}

type record ListOfSetupPFCs_gtpc {
 OCT1                        type_gtpc, 
 LIN2_BO_LAST                lengthf,
 ListOfSetupPFCsValue_gtpc   listOfSetupPFCs    
} with { variant "PRESENCE( type_gtpc = 'B3'O)";
         variant (lengthf) "LENGTHTO(listOfSetupPFCs)"; };

// PS Handover XID Parameters 7.7.79
type record of PS_HandoverXIDParameters PS_HandoverXIDParameters_List;

type record PS_HandoverXIDParameters {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT4                      sapi,
 BIT4                      spare,
 LIN1                      xID_ParametersLength,
 XID_Information_GTPC      xID_Parameters optional  
} with {
         variant (lengthf) "LENGTHTO(sapi,spare,xID_ParametersLength,xID_Parameters)";
         variant (xID_ParametersLength) "LENGTHTO(xID_Parameters)";
         variant "PRESENCE(type_gtpc = 'B4'O)" 
       };

//The following types are based on types in LLC_Types.ttcn 

type record of XID_GTPC XID_Information_GTPC;

type record XID_GTPC
{
  BIT1	             xl,
  BIT5               typefield,
  XID_length_GTPC    xID_length,
  //Header_XID      header_XID,
  XID_Data_GTPC	     xID_Data      
} with { 
  variant (xID_Data) "CROSSTAG( version, 	typefield = '00000'B;
				     iOV_UI, 	typefield = '00001'B;
				     iOV_I, 	typefield = '00010'B;
				     t200, 	typefield = '00011'B;
				     n200, 	typefield = '00100'B;
				     n201_U, 	typefield = '00101'B;
				     n201_I, 	typefield = '00110'B;
				     mD, 	typefield = '00111'B;
				     mU, 	typefield = '01000'B;
				     kD, 	typefield = '01001'B;
				     kU, 	typefield = '01010'B;
				     l3param, 	typefield = '01011'B;
				     reset, 	typefield = '01100'B;
				     
					 )";
  variant  "FIELDORDER(msb)";
  variant (xID_length) "CROSSTAG( short_len, 	xl = '0'B;
				                long_len, 	xl = '1'B;)";
  variant (xID_length) "LENGTHTO (xID_Data)"

  variant (xID_length) "PADDING(yes)" 
};

type union  XID_length_GTPC
{
  integer short_len,
  integer long_len
}with {
  variant (short_len) "FIELDLENGTH(2)";
  variant (long_len)  "FIELDLENGTH(8)";
  variant (long_len)  "BYTEORDER(last)";
  variant (short_len) "FIELDORDER(msb)";
  variant (long_len)  "FIELDORDER(msb)";

}

type union XID_Data_GTPC
{
  Version_GTPC		version,
  IOV_UI_GTPC		iOV_UI,
  IOV_I_GTPC		iOV_I,
  T200_GTPC		t200,
  N200_GTPC		n200,
  N201_U_GTPC		n201_U,
  N201_I_GTPC		n201_I,
  MD_GTPC		mD,	
  MU_GTPC		mU,
  KD_GTPC		kD,
  KU_GTPC		kU,
  L3param_GTPC		l3param,
  Reset_LLC_GTPC	reset    	
}

type record Version_GTPC
{
  integer 	version_value (0..15),
  BIT4		spare

} with {
  variant (version_value) "FIELDLENGTH(4)";
}

type octetstring IOV_UI_GTPC length(4) 


type octetstring IOV_I_GTPC length(4)
 

type record T200_GTPC
{
  BIT4		spare,
  integer 	t200Value
} with {
  variant (t200Value) "FIELDLENGTH(12)";
  variant (t200Value) "BYTEORDER(last)";
  variant  "FIELDORDER(msb)";
};


type record N200_GTPC
{
  integer 	retransmissions (0..15),
  BIT4		spare
} with {
  variant (retransmissions) "FIELDLENGTH(4)";
}     


type record N201_U_GTPC
{
  BIT5		spare,
  integer 	n201UValue
} with {
  variant (n201UValue) "FIELDLENGTH(11)";
  variant (n201UValue) "BYTEORDER(last)";
  variant  "FIELDORDER(msb)";
};


type record N201_I_GTPC
{
  BIT5		spare,
  integer 	n201IValue
}
with {
  variant (n201IValue) "FIELDLENGTH(11)";
  variant (n201IValue) "BYTEORDER(last)";
  variant  "FIELDORDER(msb)";
};

type record MD_GTPC
{
  BIT1		spare,
  integer 	mDValue
} with {
  variant (mDValue) "FIELDLENGTH(15)";
  variant (mDValue) "BYTEORDER(last)";
  variant  "FIELDORDER(msb)";
};


type record MU_GTPC
{
  BIT1		spare,
  integer 	mUValue
} with {
  variant (mUValue) "FIELDLENGTH(15)";
  variant (mUValue) "BYTEORDER(last)";
  variant  "FIELDORDER(msb)";
};

type integer KD_GTPC with {variant  "FIELDLENGTH(8)";};	

type integer KU_GTPC with {variant  "FIELDLENGTH(8)";};	

type octetstring L3param_GTPC;

type octetstring Reset_LLC_GTPC length(0);
// end of types copied from LLC_Types.ttcn
 
     
//  MS Info Change reporting Action 7.7.80
type record MS_InfoChangeReportingAction {
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 OCT1                       actionfield      
} with { variant "PRESENCE( type_gtpc = 'B5'O)";
         variant (lengthf) "LENGTHTO(actionfield)"; };

// Direct Tunnel Flags - 7.7.81
type record DirectTunnelFlags {
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 BIT1                       dTI,
 BIT1                       gCSI,  
 BIT1                       eI,
 BIT5                       spare
} with { variant "PRESENCE( type_gtpc = 'B6'O)";
         variant (lengthf) "LENGTHTO(dTI,gCSI,eI,spare)";};

// Correlation ID - 7.7.82
type record CorrelationID {
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 OCT1                       correlationIDValue                  
} with { variant "PRESENCE( type_gtpc = 'B7'O)";
         variant (lengthf) "LENGTHTO(correlationIDValue)"; };

// BearerControlMode - 7.7.83
type record BearerControlMode {
 OCT1                       type_gtpc, 
 LIN2_BO_LAST               lengthf,
 OCT1                       bearerControlModeValue
} with { variant "PRESENCE( type_gtpc = 'B8'O)";
         variant (lengthf) "LENGTHTO(bearerControlModeValue)"; };
   
// MBMS Flow ID - 7.7.84
type record MBMS_FlowID {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 octetstring               mBMS_FlowIDValue
} with { variant "PRESENCE( type_gtpc = 'B9'O)";
         variant (lengthf) "LENGTHTO(mBMS_FlowIDValue)"; };

// MBMS IP Multicast Distribution - 7.7.85
type record MBMS_IPMulticastDistribution {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 OCT4                      commonTEID, 
 GSNAddress                iPmulticastDistributionAddress,
 GSNAddress                iPmulticastSourceAddress,
 OCT1                      mBMS_HCIndicator
} with { variant "PRESENCE( type_gtpc = 'BA'O)";
         variant (lengthf) "LENGTHTO(commonTEID,iPmulticastDistributionAddress,
                                     iPmulticastSourceAddress,mBMS_HCIndicator)"; };

// GSNAddress
type record  GSNAddress {
 INT6b                      lengthf,
 BIT2                       address_type,
 iPv4_iPv6_Address          ipv_address
} with { variant (lengthf) "LENGTHTO(ipv_address)";};

// MBMS Distribution Acknowledgement - 7.7.86
type record MBMS_DistributionAcknowledgement {
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT2                      distributionIndication,
 BIT6                      spare
} with { variant "PRESENCE( type_gtpc = 'BB'O)";
         variant (lengthf) "LENGTHTO(distributionIndication,spare)"; };

// ReliableInterRATHandoverInfo - 7.7.87 - from 48.018 11.3.107
type record ReliableInterRATHandoverInfo
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT1                      reliableInterRATHandoverInfoIndicator,
 BIT7                      spare           
} with { variant "PRESENCE( type_gtpc = 'BC'O)";
         variant (lengthf) "LENGTHTO(reliableInterRATHandoverInfoIndicator,spare)"; };

//7.7.88
type record RFSP_Index
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 LIN2_BO_LAST              rFSPIndexValue (1..256)
} with { variant "PRESENCE( type_gtpc = 'BD'O)";
         variant (lengthf) "LENGTHTO(rFSPIndexValue)"; };

//7.7.90
type record of FullyQualifiedDomainName FullyQualifiedDomainName_List;

type record FullyQualifiedDomainName
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 octetstring               fQDN_Value
} with { variant "PRESENCE( type_gtpc = 'BE'O)";
         variant (lengthf) "LENGTHTO(fQDN_Value)"; };

//7.7.91
type record EvolvedAllocationRetentionPriorityI
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT1                      pVI,
 BIT1                      spare1,
 integer                   pL,
 BIT1                      pCI,
 BIT1                      spare2
} with { variant "PRESENCE( type_gtpc = 'BF'O)";
         variant (lengthf) "LENGTHTO(pVI,spare1,pL,pCI,spare2)"; 
         variant (pL) "FIELDLENGTH(4)";};

//7.7.92
type record of EvolvedAllocationRetentionPriorityII EvolvedAllocationRetentionPriorityII_List

type record EvolvedAllocationRetentionPriorityII
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT4                      nsapi,
 BIT4                      unused, 
 BIT1                      pVI, 
 BIT1                      spare1,
 integer                   pL,
 BIT1                      pCI,
 BIT1                      spare2 
} with { variant "PRESENCE( type_gtpc = 'C0'O)";
         variant (lengthf) "LENGTHTO(nsapi,unused,pVI,spare1,pL,pCI,spare2)"; 
         variant (pL) "FIELDLENGTH(4)";};

//7.7.93
type record ExtendedCommonFlags
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT1                      unauthenticatedIMSI,
 BIT1                      cCRSI, 
 BIT1                      cPSR, 
 BIT1                      retLoc, 
 BIT1                      vB, 
 BIT1                      pCRI, 
 BIT1                      bDWI, 
 BIT1                      uASI 
} with { variant "PRESENCE(type_gtpc = 'C1'O)";
         variant (lengthf) "LENGTHTO(unauthenticatedIMSI,cCRSI,cPSR,retLoc,vB,pCRI,bDWI,uASI)";};
                  
//7.7.94 
type record UserCSGInformation
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,  
 HEX1                      mccDigit1,
 HEX1                      mccDigit2,
 HEX1                      mccDigit3,
 HEX1                      mncDigit3,
 HEX1                      mncDigit1,
 HEX1                      mncDigit2, 
 BIT5                      spare1,
 bitstring                 cSG_ID length(27), // "The coding ... is the responsibility of the operator..."   
 BIT1                      cMI,               
 BIT5                      spare2,
 integer                   accessMode (0..3)
} with { variant "PRESENCE( type_gtpc = 'C2'O)";
         variant (lengthf) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,
                            mncDigit1,mncDigit2,spare1,cSG_ID,
                            cMI,spare2,accessMode)";                             
         variant (spare1,cSG_ID) "FIELDORDER(msb)";                                              
         variant (cSG_ID) "FIELDLENGTH(27)";
         variant (accessMode) "FIELDLENGTH(2)";         
};

//7.7.95 
type record CSGInfoReportingAction
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,  
 BIT1                      uCCSG,
 BIT1                      uCSHC,
 BIT1                      uCUHC,
 BIT5                      spare
} with { variant "PRESENCE( type_gtpc = 'C3'O)";
         variant (lengthf) "LENGTHTO(uCCSG,uCSHC,uCUHC,spare)";         
};

//7.7.96
type record CSG_Id
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf, 
 BIT5                      spare,
 bitstring                 cSG_ID length(27) // "The coding ... is the responsibility of the operator..."    
} with { variant "PRESENCE(type_gtpc = 'C4'O)";
         variant (lengthf) "LENGTHTO(spare,cSG_ID)";      
         variant (spare,cSG_ID) "FIELDORDER(msb)";   
         variant (cSG_ID) "FIELDLENGTH(27)";
};

//7.7.97
type record CSG_MembershipIndication
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 BIT1                      cMI_Value,
 BIT7                      spare 
} with { variant "PRESENCE(type_gtpc = 'C5'O)";
         variant (lengthf) "LENGTHTO(cMI_Value,spare)";      
}

//7.7.98
type record APN_AMBR 
{
 OCT1                      type_gtpc, 
 LIN2_BO_LAST              lengthf,
 LIN4_BO_LAST              aPN_AMBR_Uplink,
 LIN4_BO_LAST              aPN_AMBR_Downlink
} with { variant "PRESENCE(type_gtpc = 'C6'O)";
         variant (lengthf) "LENGTHTO(aPN_AMBR_Uplink,aPN_AMBR_Downlink)";      
}

//7.7.99
type record UE_Network_Capability {
  OCT1               type_gtpc,
  LIN2_BO_LAST       lengthf,
  octetstring        ue_network_capability
} with {
  variant "PRESENCE(type_gtpc = 'C7'O)";
  variant (lengthf) "LENGTHTO(ue_network_capability)";
}

//7.7.100
type record UE_AMBR {
  OCT1              type_gtpc,
  LIN2_BO_LAST      lengthf,
  LIN4_BO_LAST      subscribed_ue_ambr_uplink,
  LIN4_BO_LAST      subscribed_ue_ambr_downlink,
  LIN4_BO_LAST      authorized_ue_ambr_uplink optional,
  LIN4_BO_LAST      authorized_ue_ambr_downlink optional
} with {
  variant "PRESENCE(type_gtpc = 'C8'O)";
  variant (lengthf) "LENGTHTO(subscribed_ue_ambr_uplink,subscribed_ue_ambr_downlink,authorized_ue_ambr_uplink,authorized_ue_ambr_downlink)";
}

//7.7.101
type record APN_AMBR_NSAPI {
  OCT1              type_gtpc,
  LIN2_BO_LAST      lengthf (9),
  HEX1              nsapi,
  HEX1              spare,
  LIN4_BO_LAST      authorized_apn_ambr_uplink,
  LIN4_BO_LAST      authorized_apn_ambr_downlink
} with {
   variant "PRESENCE(type_gtpc = 'C9'O)";
   variant (lengthf) "LENGTHTO(spare, nsapi,authorized_apn_ambr_uplink,authorized_apn_ambr_downlink)";
}

//7.7.102
type record GGSN_BackOffTime {
  OCT1              type_gtpc,
  LIN2_BO_LAST      lengthf,
  BIT5              timerValue,
  BIT3              timerUnit,
  octetstring       explicitly_specified optional
} with {
   variant "PRESENCE(type_gtpc = 'CA'O)";
   variant (lengthf) "LENGTHTO(timerValue, timerUnit, explicitly_specified)";
}

//7.7.103
type record SignallingPriorityIndication {
  OCT1              type_gtpc,
  LIN2_BO_LAST      lengthf,
  BIT1              lapi,
  BIT7              spare,
  octetstring       explicitly_specified optional
} with {
   variant "PRESENCE(type_gtpc = 'CB'O)";
   variant (lengthf) "LENGTHTO(lapi, spare, explicitly_specified)";
}

//7.7.104
type record SignallingPriorityIndication_NSAPI {
  OCT1              type_gtpc,
  LIN2_BO_LAST      lengthf,
  BIT1              nsapi,
  BIT7              spare1,
  BIT1              lapi,
  BIT7              spare2,
  octetstring       explicitly_specified optional
} with {
   variant "PRESENCE(type_gtpc = 'CC'O)";
   variant (lengthf) "LENGTHTO(nsapi, spare1, lapi, spare2, explicitly_specified)";
}

//7.7.105   
type record Higher_Bitrates_Than_16Mbps_Flag {
  OCT1              type_gtpc,
  LIN2_BO_LAST      lengthf (1),
  LIN1              flag
} with {
  variant "PRESENCE(type_gtpc = 'CD'O)";
  variant (lengthf) "LENGTHTO(flag)";
}

//7.7.106
// (void)

//7.7.107
type record SRVCC_MM_Context {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  LIN1            mobile_station_classmark2_len,
  octetstring     mobile_station_classmark2,
  LIN1            mobile_station_classmark3_len,
  octetstring     mobile_station_classmark3,
  LIN1            supported_codec_list_len,
  octetstring     supported_codec_list,
  octetstring     explicitly_specified optional
} with {
  variant "PRESENCE(type_gtpc = 'CF'O)";
  variant (lengthf) "LENGTHTO(mobile_station_classmark2_len, mobile_station_classmark2,
                              mobile_station_classmark3_len, mobile_station_classmark3,
                              supported_codec_list_len, supported_codec_list,
                              explicitly_specified)";
  variant (mobile_station_classmark2_len) "LENGTHTO(mobile_station_classmark2)";
  variant (mobile_station_classmark3_len) "LENGTHTO(mobile_station_classmark3)";
  variant (supported_codec_list_len) "LENGTHTO(supported_codec_list)";
}


//7.7.108
type record SRVCC_Flags {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  BIT1            ics,
  BIT7            spare,
  octetstring     explicitly_specified optional
} with {
  variant "PRESENCE(type_gtpc = 'D0'O)";
  variant (lengthf) "LENGTHTO(ics, spare, explicitly_specified)";
}

//7.7.109
type record STN_SR {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  OCT1            nanpi,
  Digits          digits
} with {
  variant "PRESENCE(type_gtpc = 'D1'O)";
  variant (lengthf) "LENGTHTO(nanpi, digits)"; 
}

type record of HEX1 Digits;

//7.7.110
type record C_MSISDN {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  octetstring     msisdn
} with {
  variant "PRESENCE(type_gtpc = 'D2'O)";
  variant (lengthf) "LENGTHTO(msisdn)";
}

//7.7.111
type record Extended_RANAP_Cause {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  integer         extended_ranap_cause (1..512),
  octetstring     explicitly_specified optional
} with {
  variant "PRESENCE(type_gtpc = 'D3'O)";
  variant (lengthf) "LENGTHTO(extended_ranap_cause, explicitly_specified)";  
  variant (extended_ranap_cause) "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)"
}

//7.7.112
type record ENodeB_ID {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  OCT1            eNodeB_type,
  ENodeB_IDs      eNodeB_ID 
} with {
  variant "PRESENCE(type_gtpc = 'D4'O)";
  variant (lengthf) "LENGTHTO(eNodeB_type, eNodeB_ID)";
  variant "CROSSTAG(macroENodeB_ID, eNodeB_type = '00'O;
               homeENodeB_ID, eNodeB_type = '01'O;)"
}

type union ENodeB_IDs
{
  HomeENodeB_ID homeENodeB_ID,
  MacroENodeB_ID macroENodeB_ID
}

type record MacroENodeB_ID
{
 HEX1                      mcc1,            
 HEX1                      mcc2,            
 HEX1                      mcc3,            
 HEX1                      mnc3,            
 HEX1                      mnc1,            
 HEX1                      mnc2,
 BIT4                      spare,
 bitstring                 macroENodeB_ID length(20),
 OCT2                      tac
} with {
  variant (spare,macroENodeB_ID) "FIELDORDER(msb)";                                              
  variant (macroENodeB_ID) "FIELDLENGTH(20)";
}

type record HomeENodeB_ID
{
 HEX1                      mcc1,            
 HEX1                      mcc2,            
 HEX1                      mcc3,            
 HEX1                      mnc3,            
 HEX1                      mnc1,            
 HEX1                      mnc2,
 BIT4                      spare,
 bitstring                 homeENodeB_ID length(28),
 OCT2                      tac
} with {
  variant (spare,homeENodeB_ID) "FIELDORDER(msb)";                                              
  variant (homeENodeB_ID) "FIELDLENGTH(28)";
}

//7.7.113
type record SelectionMode_NSAPI {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  BIT4            nsapi,
  BIT4            spare1,
  BIT2            selectionMode,
  BIT6            spare2
} with {
  variant "PRESENCE(type_gtpc = 'D5'O)";
  variant (lengthf) "LENGTHTO(nsapi, spare1, selectionMode, spare2)";
}

//7.7.114
type record ULI_Timestamp {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  OCT4            uliTimestampValue,
  octetstring     explicitly_specified optional
} with {
  variant "PRESENCE(type_gtpc = 'D6'O)";
  variant (lengthf) "LENGTHTO(uliTimestampValue, explicitly_specified)";
}

//7.7.115
type record LHN_ID_NSAPI {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  BIT4            nsapi,
  BIT4            spare,
  octetstring     lHN_ID optional
} with {
  variant "PRESENCE(type_gtpc = 'D7'O)";
  variant (lengthf) "LENGTHTO(nsapi, spare, lHN_ID)";
}

//7.7.116
type record CN_OperatorSelectionEntity {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  BIT2            selectionEntity,
  BIT6            spare,
  octetstring     explicitly_specified optional
} with {
  variant "PRESENCE(type_gtpc = 'D8'O)";
  variant (lengthf) "LENGTHTO(selectionEntity, spare, explicitly_specified)";
}

//7.7.117
type record UE_UsageType {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  LIN4_BO_LAST    uE_UsageTypeValue
  } with {
  variant "PRESENCE(type_gtpc = 'D9'O)";
  variant (lengthf) "LENGTHTO(uE_UsageTypeValue)";
}

//7.7.118
type record ExtendedCommonFlagsII {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  BIT1            pnsi,
  BIT1            dtci,
  BIT6            spare,
  octetstring     explicitly_specified optional
  } with {
  variant "PRESENCE(type_gtpc = 'DA'O)";
  variant (lengthf) "LENGTHTO(pnsi, dtci, spare, explicitly_specified)";
}

//7.7.119
type record NodeIdentifier {
  OCT1            type_gtpc,
  LIN2_BO_LAST    lengthf,
  octetstring     nodeIdentifier
  } with {
  variant "PRESENCE(type_gtpc = 'DB'O)";
  variant (lengthf) "LENGTHTO( nodeIdentifier)";
}

/////////////////////////////
// Message Type Values
// 7.1 Table 1
/////////////////////////////
type OCT1 MessageType_gtpc;

// 0 For future use. Shall not be sent. If received, shall be treated as an
// Unknown message

const MessageType_gtpc echoRequest := '01'O;
const MessageType_gtpc echoResponse := '02'O;
const MessageType_gtpc versionNotSupported := '03'O;

// 4 - 7: For GTP'

// 8 - 15 for future use.  Shall not be sent. 
// If received, shall be treated as an Unknown message

const MessageType_gtpc createPDPContextRequest := '10'O;
const MessageType_gtpc createPDPContextResponse := '11'O;
const MessageType_gtpc updatePDPContextRequest := '12'O;
const MessageType_gtpc updatePDPContextResponse := '13'O;
const MessageType_gtpc deletePDPContextRequest := '14'O; 
const MessageType_gtpc deletePDPContextResponse := '15'O;
const MessageType_gtpc initiatePDPContextActivationRequest := '16'O;
const MessageType_gtpc initiatePDPContextActivationResponse := '17'O;

// 24 - 25 for future use.
// Shall not be sent. If received, shall be treated as an Unknown message

// 26      for GTP-U only

const MessageType_gtpc pduNotificationRequest := '1B'O;
const MessageType_gtpc pduNotificationResponse := '1C'O;
const MessageType_gtpc pduNotificationRejectRequest := '1D'O;
const MessageType_gtpc pduNotificationRejectResponse := '1E'O;

const MessageType_gtpc supportedExtHeadersNotification := '1F'O;
const MessageType_gtpc sendRoutingInfoForGPRSRequest := '20'O; 
const MessageType_gtpc sendRoutingInfoForGPRSResponse := '21'O;
const MessageType_gtpc failureReportRequest := '22'O;
const MessageType_gtpc failureReportResponse := '23'O;
const MessageType_gtpc noteMS_GPRSPresentRequest := '24'O;
const MessageType_gtpc noteMS_GPRSPresentResponse := '25'O;

// 38 - 47 for future use.  Shall not be sent. 
// If received, shall be treated as an Unknown message

const MessageType_gtpc identificationRequest := '30'O;  
const MessageType_gtpc identificationResponse := '31'O;
const MessageType_gtpc sgsnContextRequest := '32'O;
const MessageType_gtpc sgsnContextResponse := '33'O;
const MessageType_gtpc sgsnContextAcknowledge := '34'O;
const MessageType_gtpc forwardRelocationRequest := '35'O;
const MessageType_gtpc forwardRelocationResponse := '36'O;
const MessageType_gtpc forwardRelocationComplete := '37'O;
const MessageType_gtpc relocationCancelRequest := '38'O;
const MessageType_gtpc relocationCancelResponse := '39'O;
const MessageType_gtpc forwardSRNSContext := '3A'O;
const MessageType_gtpc forwardRelocationCompleteAcknowledge := '3B'O;
const MessageType_gtpc forwardSRNSContextAcknowledge := '3C'O; 
const MessageType_gtpc ueRegistrationQueryRequest := '3D'O;
const MessageType_gtpc ueRegistrationQueryResponse := '3E'O;

// 63 - 69 for future use.  Shall not be sent. If received, shall be treated as
// an Unknown message

const MessageType_gtpc        rANInformationRelay :=  '46'O;

// 71 -95 for future use.  Shall not be sent. If received, shall be treated as
//  an Unknown message

const MessageType_gtpc mBMSNotificationRequest := '60'O;
const MessageType_gtpc mBMSNotificationResponse := '61'O;
const MessageType_gtpc mBMSNotificationRejectRequest := '62'O;
const MessageType_gtpc mBMSNotificationRejectResponse := '63'O;
const MessageType_gtpc createMBMSContextRequest := '64'O;
const MessageType_gtpc createMBMSContextResponse := '65'O;
const MessageType_gtpc updateMBMSContextRequest := '66'O;
const MessageType_gtpc updateMBMSContextResponse := '67'O;
const MessageType_gtpc deleteMBMSContextRequest := '68'O;
const MessageType_gtpc deleteMBMSContextResponse := '69'O;

// 106-111 for future use. Shall not be sent. If received, shall be treated as 
// an Unknown message

const MessageType_gtpc mBMSRegistrationRequest :=  '70'O;
const MessageType_gtpc mBMSRegistrationResponse :=  '71'O;
const MessageType_gtpc mBMSDeRegistrationRequest :=  '72'O;
const MessageType_gtpc mBMSDeRegistrationResponse :=  '73'O;

const MessageType_gtpc mBMSSessionStartRequest :=  '74'O;
const MessageType_gtpc mBMSSessionStartResponse := '75'O;
const MessageType_gtpc mBMSSessionStopRequest :=  '76'O;
const MessageType_gtpc mBMSSessionStopResponse := '77'O;

const MessageType_gtpc mBMSSessionUpdateRequest := '78'O;           
const MessageType_gtpc mBMSSessionUpdateResponse := '79'O;

// 122 - 127 for future use. Shall not be sent. 
// If received, shall be treated as an Unknown message

const MessageType_gtpc mS_InfoChangeNotificationRequest := '80'O;
const MessageType_gtpc mS_InfoChangeNotificationResponse := '81'O                      

// 130 - 239 for future use. Shall not be sent. 
// If received, shall be treated as an Unknown message

// 240 - 241 not used in GTP-C

// 242 - 254 for future use. Shall not be sent. 
// If received, shall be treated as an Unknown message

// 255      not used in GTP-C

const MessageType_gtpc g_PDU := 'FF'O;


/////////////////////////////
// GTP-C messages
/////////////////////////////
// Echo Request -  7.2.1
type record EchoRequest {
  PrivateExtension_gtpc_List private_extension_gtpc optional
}

// Echo Response     -  7.2.2
type record EchoResponse    {
 Recovery_gtpc   recovery,
 PrivateExtension_gtpc_List private_extension_gtpc optional
}

// Version Not Supported  -  7.2.3
type record  VersionNotSupported {
};

// Supported Extension Headers Notification  - 7.2.4
type record SupportedExtensionHeadersNotification   {
 ExtensionHeaderTypeList_gtpc     extensionHeaderTypeList  
} with {variant ""};

// Create PDP Context Request - 7.3.1
type record CreatePDPContextRequest   {
 IMSI_gtpc                       imsi optional,        
 RoutingAreaIdentity             rai optional,        
 Recovery_gtpc                   recovery optional,
 SelectionMode                   selectionMode optional,     
 TeidDataI                       teidDataI,      
 TeidControlPlane                teidControlPlane optional,    
 NSAPI_GTPC                      nsapi,       
 NSAPI_GTPC                      linked_nsapi optional,      
 ChargingCharacteristics_GTPC    charging_char optional,       
 TraceRef                        trace_ref optional,
 GTP_TraceType                   trace_type optional,
 EndUserAddress                  endUserAddress optional,    
 AccessPointName                 accessPointName optional,    
 ProtConfigOptions               protConfigOptions optional,    
 GSN_Address_GTPC                sgsn_addr_signalling,     
 GSN_Address_GTPC                sgsn_addr_traffic,     
 MSISDN                          msisdn optional,     
 QualityOfServiceProfile         qualityOfServiceProfile,    
 TrafficFlowTemplate             tft optional,             
 GTP_TriggerID                   triggerId optional,
 OMCIdentity                     omcId optional,
 CommonFlags                     commonFlags  optional,   
 APN_Restriction                 aPN_Restriction optional,
 RATType                         ratType optional, 
 UserLocationInformation         userLocationInformation optional,
 MS_TimeZone                     mS_TimeZone optional,
 IMEISV_gtpc                     imeisv optional,            
 CamelChargingInformationContainer camelChargingInformationContainer optional,
 AdditionalTraceInfo             additionalTraceInfo optional,
 CorrelationID                   correlationID optional,
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional,
 ExtendedCommonFlags                    extendedCommonFlags optional,
 UserCSGInformation                     userCSGInformation optional, 
 APN_AMBR                        aPN_AMBR optional,
 SignallingPriorityIndication    signallingPriorityIndication optional,
 CN_OperatorSelectionEntity      cN_OperatorSelectionEntity optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Create PDP Context Response    -  7.3.2
type record CreatePDPContextResponse {
 Cause_gtpc                      cause,
 ReorderingRequired              reorderingRequired optional,
 Recovery_gtpc                   recovery optional,
 TeidDataI                       teidDataI optional,   
 TeidControlPlane                teidControlPlane optional, 
 NSAPI_GTPC                      nsapi optional,    
 ChargingID                      chargingID optional,   
 EndUserAddress                  endUserAddress optional,  
 ProtConfigOptions               protConfigOptions optional,  
 GSN_Address_GTPC                ggsn_addr_controlPlane optional, 
 GSN_Address_GTPC                ggsn_addr_traffic optional,  
 GSN_Address_GTPC                alt_ggsn_addr_controlPane optional,
 GSN_Address_GTPC                alt_ggsn_addr_traffic optional,
 QualityOfServiceProfile         qualityOfServiceProfile optional,   
 CommonFlags                     commonFlags  optional,  
 APN_Restriction                 aPN_Restriction optional,
 MS_InfoChangeReportingAction    mS_InfoChangeReportingAction optional, 
 BearerControlMode               bearerControlMode optional, 
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional,
 ExtendedCommonFlags             extendedCommonFlag optional,
 CSGInfoReportingAction          csg_information_reporting_action optional,
 APN_AMBR                        aPN_AMBR optional,
 GGSN_BackOffTime                gGSN_BackOffTime optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional 
};
  

// Update PDP Context Request -   7.3.3
type union UpdatePDPContextRequest {
 UpdatePDPContextRequestSGSN    updatePDPContextRequestSGSN,
 UpdatePDPContextRequestGGSN    updatePDPContextRequestGGSN,
 UpdatePDPContextRequestCGW     updatePDPContextRequestCGW
};

//from SGSN
type record UpdatePDPContextRequestSGSN   {
 IMSI_gtpc                       imsi optional,          
 RoutingAreaIdentity             rai optional,
 Recovery_gtpc                   recovery optional,
 TeidDataI                       teidDataI,     
 TeidControlPlane                teidControlPlane optional,
 NSAPI_GTPC                      nsapi, 
 TraceRef                        trace_ref optional,
 GTP_TraceType                   trace_type optional,
 ProtConfigOptions               protConfigOptions optional, 
 GSN_Address_GTPC                sgsn_addr_controlPlane, 
 GSN_Address_GTPC                sgsn_addr_traffic,
 GSN_Address_GTPC                alt_ggsn_addr_controlPane optional,
 GSN_Address_GTPC                alt_ggsn_addr_traffic optional,
 QualityOfServiceProfile         qualityOfServiceProfile,
 TrafficFlowTemplate             tft optional, 
 GTP_TriggerID                   triggerId optional,
 OMCIdentity                     omcId optional,
 CommonFlags                     commonFlags  optional,
 RATType                         ratType optional,
 UserLocationInformation         userLocationInformation optional,
 MS_TimeZone                     mS_TimeZone optional,
 AdditionalTraceInfo             additionalTraceInfo optional,
 DirectTunnelFlags               directTunnelFlags optional, 
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional, 
 ExtendedCommonFlags             extendedCommonFlags optional, 
 UserCSGInformation              userCSGInformation optional, 
 APN_AMBR                        aPN_AMBR optional,
 SignallingPriorityIndication    signallingPriorityIndication optional,
 CN_OperatorSelectionEntity      cN_OperatorSelectionEntity optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}; 

//from GGSN
type record UpdatePDPContextRequestGGSN   {
 IMSI_gtpc                       imsi optional,      
 Recovery_gtpc                   recovery optional,
 NSAPI_GTPC                      nsapi,
 EndUserAddress                  endUserAddress optional, 
 ProtConfigOptions               protConfigOptions optional,
 QualityOfServiceProfile         qualityOfServiceProfile optional,
 TrafficFlowTemplate             tft optional,  
 CommonFlags                     commonFlags optional,
 APN_Restriction                 aPN_Restriction optional,
 MS_InfoChangeReportingAction    mS_InfoChangeReportingAction optional,   
 DirectTunnelFlags               directTunnelFlags optional,
 BearerControlMode               bearerControlMode optional, 
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional, 
 ExtendedCommonFlags             extendedCommonFlags optional, 
 CSGInfoReportingAction                 cSGInfoReportingAction optional, 
 APN_AMBR                        aPN_AMBR optional, 
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

//from CGW
type record UpdatePDPContextRequestCGW   {
 IMSI_gtpc                       imsi optional,      
 Recovery_gtpc                   recovery optional,
 NSAPI_GTPC                      nsapi,
 EndUserAddress                  endUserAddress optional, 
 ProtConfigOptions               protConfigOptions optional,
 QualityOfServiceProfile         qualityOfServiceProfile optional,
 TrafficFlowTemplate             tft optional,  
 CommonFlags                     commonFlags optional,
 APN_Restriction                 aPN_Restriction optional,
 MS_InfoChangeReportingAction    mS_InfoChangeReportingAction optional,  
 DirectTunnelFlags               directTunnelFlags optional,
 BearerControlMode               bearerControlMode optional,
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional,
 CSGInfoReportingAction                 cSGInfoReportingAction optional, 
 APN_AMBR                        aPN_AMBR optional,  
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Update PDP Context Response  -   7.3.4
type union UpdatePDPContextResponse {
 UpdatePDPContextResponseSGSN updatePDPContextResponseSGSN,
 UpdatePDPContextResponseGGSN updatePDPContextResponseGGSN,
 UpdatePDPContextResponseCGW  updatePDPContextResponseCGW 
};

//from GGSN
type record  UpdatePDPContextResponseGGSN    {
 Cause_gtpc                      cause,
 Recovery_gtpc                   recovery optional,
 TeidDataI                       teidDataI optional, 
 TeidControlPlane                teidControlPlane optional,
 ChargingID                      chargingID optional,
 ProtConfigOptions               protConfigOptions optional,
 GSN_Address_GTPC                ggsn_addr_controlPlane optional,
 GSN_Address_GTPC                ggsn_addr_traffic optional,
 GSN_Address_GTPC                alt_ggsn_addr_controlPane optional,
 GSN_Address_GTPC                alt_ggsn_addr_traffic optional,
 QualityOfServiceProfile         qualityOfServiceProfile optional,  
 CommonFlags                     commonFlags optional,
 APN_Restriction                 aPN_Restriction optional, 
 MS_InfoChangeReportingAction    mS_InfoChangeReportingAction optional, 
 BearerControlMode               bearerControlMode optional, 
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional,
 CSGInfoReportingAction          csg_information_reporting_action optional, 
 APN_AMBR                        aPN_AMBR optional,   
 PrivateExtension_gtpc_List      private_extension_gtpc optional 
};

//from CGW
type record  UpdatePDPContextResponseCGW    {
 Cause_gtpc                      cause,
 Recovery_gtpc                   recovery optional,
 TeidDataI                       teidDataI optional, 
 TeidControlPlane                teidControlPlane optional,
 ChargingID                      chargingID optional,
 ProtConfigOptions               protConfigOptions optional,
 GSN_Address_GTPC                ggsn_addr_controlPlane optional,
 GSN_Address_GTPC                ggsn_addr_traffic optional,
 GSN_Address_GTPC                alt_ggsn_addr_controlPane optional,
 GSN_Address_GTPC                alt_ggsn_addr_traffic optional,
 QualityOfServiceProfile         qualityOfServiceProfile optional,
 CommonFlags                     commonFlags optional,
 APN_Restriction                 aPN_Restriction optional, 
 MS_InfoChangeReportingAction    mS_InfoChangeReportingAction optional,
 BearerControlMode               bearerControlMode optional, 
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional,  
 APN_AMBR                        aPN_AMBR optional,  
 ChargingGatewayAddress          chargingGatewayAddress optional,
 ChargingGatewayAddress          alt_chargingGatewayAddress optional,  
 PrivateExtension_gtpc_List      private_extension_gtpc optional 
};

//from SGSN
type record UpdatePDPContextResponseSGSN    {
 Cause_gtpc                      cause,
 Recovery_gtpc                   recovery optional,
 TeidDataI                       teidDataI optional,
 ProtConfigOptions               protConfigOptions optional,
 GSN_Address_GTPC                sgsn_addr_traffic optional,
 QualityOfServiceProfile         qualityOfServiceProfile optional, 
 UserLocationInformation         userLocationInformation optional,  
 MS_TimeZone                     mS_TimeZone optional, 
 DirectTunnelFlags               directTunnelFlags optional, 
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional, 
 APN_AMBR                        aPN_AMBR optional,   
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};


// Delete PDP Context Request   -   7.3.5 
type record DeletePDPContextRequest   {
 Cause_gtpc                      cause optional,
 TearDownInd                     tearDownIndicator optional,
 NSAPI_GTPC                      nsapi,          
 ProtConfigOptions               protConfigOptions optional,     
 UserLocationInformation         userLocationInformation optional,  
 MS_TimeZone                     mS_TimeZone optional, 
 ExtendedCommonFlags             extendedCommonFlags optional,
 ULI_Timestamp                   uLI_Timestamp optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Delete PDP Context Response  - 7.3.6
type record DeletePDPContextResponse    {
 Cause_gtpc                      cause,
 ProtConfigOptions               protConfigOptions optional,
 UserLocationInformation         userLocationInformation optional,
 MS_TimeZone                     mS_TimeZone optional,
 ULI_Timestamp                   uLI_Timestamp optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};
 
// PDU Notification Request  -   7.3.8 
type record PDU_NotificationRequest     {
 IMSI_gtpc                       imsi,
 TeidControlPlane                teidControlPlane,
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 ProtConfigOptions               protConfigOptions optional,
 GSN_Address_GTPC                ggsn_addr_controlPlane,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// PDU Notification Response   -    7.3.9
type record PDU_NotificationResponse   {
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
} 

// PDU  Notification Reject Request  -   7.3.10
type record PDU_NotificationRejectRequest    {
 Cause_gtpc                      cause,
 TeidControlPlane                teidControlPlane,
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 ProtConfigOptions               protConfigOptions optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// PDU Notification Reject Response  -    7.3.11
type record PDU_NotificationRejectResponse   {
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Initiate PDP Context Activation Request 7.3.12
type record InitiatePDPContextActivationRequest
{
 NSAPI_GTPC                      linkedNSAPI,
 ProtConfigOptions               protConfigOptions optional,
 QualityOfServiceProfile         qualityOfServiceProfile, 
 TrafficFlowTemplate             tft optional,
 CorrelationID                   correlationID,  
 EvolvedAllocationRetentionPriorityI    evolvedAllocationRetentionPriorityI optional,  
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Initiate PDP Context Activation Response 7.3.13
type record InitiatePDPContextActivationResponse
{
 Cause_gtpc                      cause,
 ProtConfigOptions               protConfigOptions optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Send Routeing Information for GPRS Request  -  7.4.1
type record SendRouteingInformationForGPRSRequest    {
 IMSI_gtpc                       imsi,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Send Routeing Information for GPRS Response - 7.4.2
type record SendRouteingInformationForGPRSResponse     {
 Cause_gtpc                      cause,
 IMSI_gtpc                       imsi,
 MAP_Cause                       map_Cause optional,
 MSNotReachableReason            mS_not_ReachableReason optional,
 GSN_Address_GTPC                gsn_Address optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Failure Report Request - 7.4.3
type record FailureReportRequest     {
 IMSI_gtpc                       imsi,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Failure Report Response - 7.4.4
type record FailureReportResponse    {
 Cause_gtpc                      cause,
 MAP_Cause                       map_Cause optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Note MS GPRS Present Request - 7.4.5 
type record NoteMS_GPRSPresentRequest    {
 IMSI_gtpc                       imsi,
 GSN_Address_GTPC                gsn_Address,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Note MS GPRS Present Response - 7.4.6 
type record NoteMS_GPRSPresentResponse    {
  Cause_gtpc                     cause,
  PrivateExtension_gtpc_List     private_extension_gtpc optional
}

// Identification Request - 7.5.1
type record IdentificationRequest   {
 RoutingAreaIdentity             routingAreaIdentity,
 PacketTMSI                      packetTMSI,
 PTMSI_Signature                 ptmsi_Signature optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane optional,
 HopCounter_gtpc                 hopCounter optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Identification Response - 7.5.2
type record IdentificationResponse    {
 Cause_gtpc                      cause,
 IMSI_gtpc                       imsi optional,
 AuthenticationTriplet_GTPC_SetOf authenticationTriplet optional,
 AuthenticationQuintuplet_GTPC   authenticationQuintuplet optional,
 AuthenticationQuintuplet_GTPC   authenticationQuintuplet2 optional,
 AuthenticationQuintuplet_GTPC   authenticationQuintuplet3 optional,
 AuthenticationQuintuplet_GTPC   authenticationQuintuplet4 optional,
 AuthenticationQuintuplet_GTPC   authenticationQuintuplet5 optional,
 UE_UsageType                    uE_UsageType optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// SGSN Context Request - 7.5.3
type record SGSN_ContextRequest   {
 IMSI_gtpc                       imsi optional,
 RoutingAreaIdentity             routingAreaIdentity ,
 TLLI                            tlli optional,
 PacketTMSI                      packetTMSI optional,
 PTMSI_Signature                 ptmsi_Signature optional,
 MS_Validated                    ms_Validated optional,
 TeidControlPlane                teidControlPlane,
 GSN_Address_GTPC                sgsn_addr_controlPlane,
 GSN_Address_GTPC                alternative_sgsn_addr_controlPlane optional,
 SGSN_Number                     sGSN_Number optional,
 RATType                         ratType optional,  
 HopCounter_gtpc                 hopCounter optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// SGSN Context Response - 7.5.4
 type record SGSN_ContextResponse
{
 Cause_gtpc                      cause,
 IMSI_gtpc                       imsi optional,
 TeidControlPlane                teidControlPlane optional,
 RABContext_List                 rabContext optional,
 RadioPrioritySMS                radioPrioritySMS optional,
 RadioPriority_List              radioPriority optional,
 PacketFlowID_List               packetFlowID optional,
 ChargingCharacteristics_List_GTPC charging_char optional,
 MM_Context                      mm_Context optional,
 PDP_Context_GTPC_List           pdp_Context optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane optional,
 PDPContextPriorization          pdpContextPriorization optional, 
 RadioPriorityLCS                radioPriority_LCS optional, 
 MBMS_UE_Context_List            mBMS_UE_Context optional,   
 RFSP_Index                      subscribedRFSP_Index optional,
 RFSP_Index                      rFSP_IndexInUse optional, 
 FullyQualifiedDomainName_List   colocatedGGSN_PGW_FQDN optional,  
 EvolvedAllocationRetentionPriorityII_List   evolvedAllocationRetentionPriorityII optional, 
 ExtendedCommonFlags             extendedCommonFlags optional,
 UE_Network_Capability           ue_network_capability optional,
 UE_AMBR                         ue_ambr optional,
 APN_AMBR_NSAPI                  apn_ambr_nsapi optional,
 SignallingPriorityIndication_NSAPI signallingPriorityIndication_nsapi optional,
 Higher_Bitrates_Than_16Mbps_Flag    higher_bitrates_than_16mbps_flag optional,
 SelectionMode_NSAPI             selectionMode_nsapi optional,
 LHN_ID_NSAPI                    localHomeNetworkID_nsapi optional,
 UE_UsageType                    uE_UsageType optional,
 ExtendedCommonFlagsII           extendedCommonFlagsII optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}; 


// SGSN Context Acknowledge - 7.5.5
type record SGSN_ContextAcknowledge {
 Cause_gtpc                      cause,
 TeidDataII_List                 teidDataII optional,
 GSN_Address_GTPC                sgsn_AddressForUserTraffic optional,
 SGSN_Number                     sgsn_Number optional,
 NodeIdentifier                  nodeIdentifier  optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Forward Relocation Request - 7.5.6
type record ForwardRelocationRequest {
 IMSI_gtpc                       imsi optional,
 TeidControlPlane                teidControlPlane,
 RANAPCause                      ranapCause,
 PacketFlowID_List               packetFlowID optional,  
 ChargingCharacteristics_List_GTPC charging_char optional,
 MM_Context                      mmContext,
 PDP_Context_GTPC_List           pdpContext optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane,
 TargetIdentification            targetId,
 UTRANTransparentContainer       transpContainer,
 PDPContextPriorization          pdpContextPriorization optional,
 MBMS_UE_Context_List            mBMS_UE_Context optional,
 Selected_PLMN_ID                selected_PLMN_ID optional,
 BSS_Container                   bSS_Container optional,
 Cell_Identification_gtpc        cell_Identification optional,
 BSSGP_Cause_gtpc                bSSGP_Cause_gtpc optional,
 PS_HandoverXIDParameters_List   pS_HandoverXIDParameters optional,
 DirectTunnelFlags               directTunnelFlags optional, 
 ReliableInterRATHandoverInfo    reliableInterRATHandoverInfo optional,
 RFSP_Index                      subscribedRFSP_Index optional,
 RFSP_Index                      rFSP_IndexInUse optional,
 FullyQualifiedDomainName_List   colocatedGGSN_PGW_FQDN optional,
 EvolvedAllocationRetentionPriorityII_List    evolvedAllocationRetentionPriorityII optional,
 ExtendedCommonFlags             extendedCommonFlags optional,
 CSG_Id                          cSG_Id optional, 
 CSG_MembershipIndication        cSG_MembershipIndication optional,
 UE_Network_Capability           ue_network_capability optional,
 UE_AMBR                         ue_ambr optional,
 APN_AMBR_NSAPI                  apn_ambr_nsapi optional,              
 SignallingPriorityIndication_NSAPI signallingPriorityIndication_nsapi optional,
 Higher_Bitrates_Than_16Mbps_Flag   higher_bitrates_than_16mbps_flag optional,
 SRVCC_MM_Context                srvcc_mm_context optional,
 SRVCC_Flags                     srvcc_flags optional,
 STN_SR                          stn_sr optional,
 C_MSISDN                        c_msisdn optional,
 Extended_RANAP_Cause            extended_ranap_cause optional,
 ENodeB_ID                       eNodeB_ID optional,
 SelectionMode_NSAPI             selectionMode_nsapi optional,
 UE_UsageType                    uE_UsageType optional,
 ExtendedCommonFlagsII           extendedCommonFlagsII optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional //to be compatible with GTP 9.11.0
};




// Forward Relocation Response - 7.5.7
type record ForwardRelocationResponse {
 Cause_gtpc                      cause,
 TeidControlPlane                teidControlPlane optional,
 TeidDataII_List                 teidDataII optional,
 RANAPCause                      ranapCause optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane optional,
 GSN_Address_GTPC                sgsn_addr_traffic optional,  
 UTRANTransparentContainer       transpContainer optional,
 RABSetupInformation_List        rabSetupInfo optional,
 AdditionalRABSetupInformation_List additionalRABSetupInfo optional,
 SGSN_Number                     sGSN_Number optional,
 BSS_Container                   bSS_Container optional,
 BSSGP_Cause_gtpc                bSSGP_Cause_gtpc optional,
 ListOfSetupPFCs_gtpc            listOfSetupPFCs_gtpc optional,
 Extended_RANAP_Cause            extended_ranap_cause optional,   
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Forward Relocation Complete - 7.5.8
type record ForwardRelocationComplete {
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Relocation Cancel Request - 7.5.9
type record RelocationCancelRequest {
 IMSI_gtpc                       imsi optional,
 IMEISV_gtpc                     imeisv_gtpc optional,
 ExtendedCommonFlags             extended_common_flags optional,
 Extended_RANAP_Cause            extended_ranap_cause optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Relocation Cancel Response - 7.5.10
type record RelocationCancelResponse {
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Forward Relocation Complete Acknowledge - 7.5.11
type record ForwardRelocationCompleteAcknowledge {
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// 60 Forward SRNS Context Acknowledge - 7.5.12
type record ForwardSRNSContextAcknowledge {
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// Forward SRNS Context - 7.5.13
type record ForwardSRNSContext {
 RABContext_List                 rabContext,
 SourceRNC_PDCP_ContextInfo      sourceRNC_PDCP_ContextInfo optional,
 PDU_Numbers_List                pDU_Numbers optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// RAN InformationRelay - 7.5.14.1
type record RANInformationRelay{
 RANTransparentContainer         transparentContainer,
 RIM_RoutingAddress              rIM_RoutingAddress optional,
 RIM_RoutingAddress_Discriminator rIM_RoutingAddress_Discriminator optional,
 PrivateExtension_gtpc_List       private_extension_gtpc optional
};

// UE Registration Query Request - 7.5.15
type record UERegistrationQueryRequest {
 IMSI_gtpc                       imsi,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// UE Registration Query Response - 7.5.16
type record UERegistrationQueryResponse {
 Cause_gtpc                      cause,
 IMSI_gtpc                       imsi,
 Selected_PLMN_ID                selected_PLMN_ID optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// MBMS Notification Request - 7.5A.1.1
type record MBMSNotificationRequest
{
 IMSI_gtpc                          imsi,
 TeidControlPlane                   teidControlPlane,
 NSAPI_GTPC                         nsapi,          
 EndUserAddress                     endUserAddress,
 AccessPointName                    accessPointName,
 GSN_Address_GTPC                   ggsn_addr_controlPlane,
 MBMS_ProtocolConfigurationOptions  mBMS_ProtocolConfigurationOptions optional,
 PrivateExtension_gtpc_List         private_extension_gtpc optional
};

// MBMS Notification Response - 7.5A.1.2
type record MBMSNotificationResponse
{
 Cause_gtpc                         cause,
 PrivateExtension_gtpc_List         private_extension_gtpc optional
}

// MBMS Notification Reject Request - 7.5A.1.3
type record MBMSNotificationRejectRequest
{
 Cause_gtpc                         cause,
 TeidControlPlane                   teidControlPlane,
 NSAPI_GTPC                         nsapi,          
 EndUserAddress                     endUserAddress,
 AccessPointName                    accessPointName,
 GSN_Address_GTPC                   sgsn_addr_controlPlane optional, 
 PrivateExtension_gtpc_List         private_extension_gtpc optional
};

// MBMS Notification Reject Response - 7.5A.1.4
type record MBMSNotificationRejectResponse
{
 Cause_gtpc                         cause,
 PrivateExtension_gtpc_List         private_extension_gtpc optional
}

// Create MBMS Context Request - 7.5A.1.5
type record CreateMBMSContextRequest
{
 IMSI_gtpc                       imsi optional,
 RoutingAreaIdentity             rai,
 Recovery_gtpc                   recovery optional,
 SelectionMode                   selectionMode optional,     
 TeidControlPlane                teidControlPlane optional,
 TraceRef                        trace_ref optional,
 GTP_TraceType                   trace_type optional,
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 GSN_Address_GTPC                sGSNAddressForSignalling,
 MSISDN                          msisdn optional,     
 GTP_TriggerID                   triggerId optional,
 OMCIdentity                     omcId optional,
 RATType                         ratType optional,
 UserLocationInformation         userLocationInformation optional,
 MS_TimeZone                     mS_TimeZone optional,
 IMEISV_gtpc                     imeisv optional,            
 MBMS_ProtocolConfigurationOptions  mBMS_ProtocolConfigurationOptions optional,
 AdditionalTraceInfo             additionalTraceInfo optional,
 Enhanced_NSAPI                  enhanced_NSAPI,
 AdditionalMBMSTraceInfo         additionalMBMSTraceInfo optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Create MBMS Context Response - 7.5A.1.6
type record CreateMBMSContextResponse
{
 Cause_gtpc                      cause,
 Recovery_gtpc                   recovery optional,
 TeidControlPlane                teidControlPlane optional,
 ChargingID                      chargingID optional,
 GSN_Address_GTPC                ggsn_addr_controlPlane optional,
 GSN_Address_GTPC                alternative_ggsn_addr_controlPlane optional, 
 MBMS_ProtocolConfigurationOptions  mBMS_ProtocolConfigurationOptions optional,
 ChargingGatewayAddress          chargingGatewayAddress optional,  
 ChargingGatewayAddress          alt_chargingGatewayAddress optional,  
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Update MBMS Context Request - 7.5A.1.7
type record UpdateMBMSContextRequest
{
 RoutingAreaIdentity             rai,
 Recovery_gtpc                   recovery optional,
 TeidControlPlane                teidControlPlane optional,
 TraceRef                        trace_ref optional,
 GTP_TraceType                   trace_type optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane,
 GSN_Address_GTPC                alternative_sgsn_addr_controlPlane optional,
 GTP_TriggerID                   triggerId optional,
 OMCIdentity                     omcId optional,
 RATType                         ratType optional,
 UserLocationInformation         userLocationInformation optional,
 MS_TimeZone                     mS_TimeZone optional,
 AdditionalTraceInfo             additionalTraceInfo optional,
 Enhanced_NSAPI                  enhanced_NSAPI,
 AdditionalMBMSTraceInfo         additionalMBMSTraceInfo optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Update MBMS Context Response - 7.5A.1.8
type record UpdateMBMSContextResponse
{
 Cause_gtpc                      cause,
 Recovery_gtpc                   recovery optional,
 TeidControlPlane                teidControlPlane optional,
 ChargingID                      chargingID optional,
 GSN_Address_GTPC                ggsn_addr_controlPlane optional,
 GSN_Address_GTPC                alternative_ggsn_addr_controlPlane optional,
 ChargingGatewayAddress          chargingGatewayAddress optional,
 ChargingGatewayAddress          alt_chargingGatewayAddress optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Delete MBMS Context Request - 7.5A.1.9
type record DeleteMBMSContextRequest
{
 IMSI_gtpc                       imsi optional,
 TeidControlPlane                teidControlPlane optional,
 EndUserAddress                  endUserAddress optional,
 AccessPointName                 accessPointName optional,
 MBMS_ProtocolConfigurationOptions  mBMS_ProtocolConfigurationOptions optional,
 Enhanced_NSAPI                  enhanced_NSAPI optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// Delete MBMS Context Response - 7.5A.1.10
type record DeleteMBMSContextResponse
{
 Cause_gtpc                         cause,
 MBMS_ProtocolConfigurationOptions  mBMS_ProtocolConfigurationOptions optional,
 PrivateExtension_gtpc_List         private_extension_gtpc optional
};

// MBMS Registration Request - 7.5A.2.1
type record MBMSRegistrationRequest_gtpc
{
 TeidControlPlane                teidControlPlane optional,
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 GSN_Address_GTPC                sgsn_addr_controlPlane optional,
 GSN_Address_GTPC                alternative_sgsn_addr_controlPlane optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// MBMS Registration Response - 7.5A.2.2
type record MBMSRegistrationResponse_gtpc
{
 Cause_gtpc                      cause,
 TeidControlPlane                teidControlPlane optional, 
 GSN_Address_GTPC                ggsn_addr_controlPlane optional, 
 TMGI_gtpc                       tMGI optional,
 RequiredMBMS_BearerCapabilities reqMBMS_BearerCapabilities optional, 
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// MBMS De-registration Request - 7.5A.2.3
type record MBMSDeRegistrationRequest
{
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
} 

// MBMS De-Registration Response - 7.5A.2.4
type record MBMSDeRegistrationResponse
{
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}


// MBMS Session Start Request 7.5A.2.5
type record MBMSSessionStartRequest
{
 Recovery_gtpc                   recovery optional,
 TeidControlPlane                teidControlPlane optional,
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 GSN_Address_GTPC                ggsn_addr_controlPlane optional,
 GSN_Address_GTPC                alternative_ggsn_addr_controlPlane optional, 
 QualityOfServiceProfile         qualityOfServiceProfile,
 CommonFlags                     commonFlags,
 TMGI_gtpc                       tMGI,
 MBMS_ServiceArea                mBMS_ServiceArea,
 MBMS_SessionIdentifier          mBMS_SessionIdentifier optional,
 MBMS_2G_3G_Indicator            mBMS_2G_3G_Indicator,
 MBMS_SessionDuration            mBMS_SessionDuration,
 MBMS_SessionRepetitionNumber    mBMS_SessionRepetitionNumber optional,
 MBMS_TimeToDataTransfer         mBMS_TimeToDataTransfer,
 MBMS_FlowID                     mBMS_FlowID optional,
 MBMS_IPMulticastDistribution    mBMS_IPMulticastDistribution optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// 117 MBMS Session Start Response 7.5A.2.6
type record MBMSSessionStartResponse_gtpc
{
 Cause_gtpc                      cause,
 Recovery_gtpc                   recovery optional,
 TeidDataI                       teidDataI optional,
 TeidControlPlane                teidControlPlane optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane optional,
 GSN_Address_GTPC                sgsn_addr_traffic optional,
 GSN_Address_GTPC                alt_sgsn_addr_traffic optional,
 MBMS_DistributionAcknowledgement mBMS_DistributionAcknowledgement optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// MBMS Session Stop Request - 7.5A.2.7
type record MBMSSessionStopRequest
{
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName,
 MBMS_FlowID                     mBMS_FlowID optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};

// MBMS Session Stop Response - 7.5A.2.8
type record MBMSSessionStopResponse_gtpc 
{
 Cause_gtpc                      cause,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
}

// MBMS Session Update Request - 7.5A.2.9
type record MBMSSessionUpdateRequest
{
 TeidControlPlane                teidControlPlane optional,
 EndUserAddress                  endUserAddress,
 AccessPointName                 accessPointName, 
 GSN_Address_GTPC                ggsn_addr_controlPlane optional,  
 TMGI_gtpc                       tMGI, 
 MBMS_ServiceArea                mBMS_ServiceArea, 
 MBMS_SessionIdentifier          mBMS_SessionIdentifier optional,
 MBMS_SessionDuration            mBMS_SessionDuration, 
 MBMS_SessionRepetitionNumber    mBMS_SessionRepetitionNumber optional,
 MBMS_FlowID                     mBMS_FlowID optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional  
};                     

// MBMS Session Update Response - 7.5A.2.10
type record MBMSSessionUpdateResponse
{
 Cause_gtpc                      cause,
 TeidDataI                       teidDataI optional,
 TeidControlPlane                teidControlPlane optional,
 GSN_Address_GTPC                sgsn_addr_DataI  optional,
 GSN_Address_GTPC                sgsn_addr_controlPlane optional,
 PrivateExtension_gtpc_List      private_extension_gtpc optional
};                     

// MS Info Change Notification Request 7.5B.1.1
type record MS_InfoChangeNotificationRequest
{
 IMSI_gtpc                       imsi optional,
 NSAPI_GTPC                      linkedNSAPI optional,
 RATType                         ratType,
 UserLocationInformation         userLocationInformation optional,
 IMEISV_gtpc                     imeisv_gtpc optional,
 ExtendedCommonFlags             extended_common_flags optional,  
 UserCSGInformation              userCSGInformation optional,   
 PrivateExtension_gtpc_List      private_extension_gtpc optional   
};
  
// MS Info Change Notification Response 7.5B.1.2
type record MS_InfoChangeNotificationResponse
{
 Cause_gtpc                      cause,
 IMSI_gtpc                       imsi optional,
 NSAPI_GTPC                      linkedNSAPI optional,
 IMEISV_gtpc                     imeisv_gtpc optional, 
 MS_InfoChangeReportingAction    mS_InfoChangeReportingAction optional, 
 CSGInfoReportingAction          cSGInfoReportingAction optional,  
 PrivateExtension_gtpc_List      private_extension_gtpc optional     
};

type union GTPC_PDUs {
 EchoRequest                             echoRequest,
 EchoResponse                            echoResponse,
 VersionNotSupported                     versionNotSupported,
 CreatePDPContextRequest                 createPDPContextRequest,
 CreatePDPContextResponse                createPDPContextResponse,
 UpdatePDPContextRequest                 updatePDPContextRequest,
 UpdatePDPContextResponse                updatePDPContextResponse,
 DeletePDPContextRequest                 deletePDPContextRequest,
 DeletePDPContextResponse                deletePDPContextResponse, 
 PDU_NotificationRequest                 pdu_NotificationRequest,
 PDU_NotificationResponse                pdu_NotificationResponse,
 PDU_NotificationRejectRequest           pdu_NotificationRejectRequest,
 PDU_NotificationRejectResponse          pdu_NotificationRejectResponse,
 InitiatePDPContextActivationRequest     initiatePDPContextActivationRequest,
 InitiatePDPContextActivationResponse    initiatePDPContextActivationResponse, 
 SupportedExtensionHeadersNotification   supportedExtensionHeadersNotification,
 SendRouteingInformationForGPRSRequest   sendRouteingInformationForGPRSRequest,
 SendRouteingInformationForGPRSResponse  sendRouteingInformationForGPRSResponse,
 FailureReportRequest                    failureReportRequest,
 FailureReportResponse                   failureReportResponse,
 NoteMS_GPRSPresentRequest               noteMS_GPRSPresentRequest,
 NoteMS_GPRSPresentResponse              noteMS_GPRSPresentResponse,
 IdentificationRequest                   identificationRequest,
 IdentificationResponse                  identificationResponse,
 SGSN_ContextRequest                     sgsn_ContextRequest,
 SGSN_ContextResponse                    sgsn_ContextResponse,
 SGSN_ContextAcknowledge                 sgsn_ContextAcknowledge,
 ForwardRelocationRequest                forwardRelocationRequest,
 ForwardRelocationResponse               forwardRelocationResponse,
 ForwardRelocationComplete               forwardRelocationComplete,
 RelocationCancelRequest                 relocationCancelRequest,
 RelocationCancelResponse                relocationCancelResponse,
 ForwardSRNSContext                      forwardSRNSContext,
 ForwardRelocationCompleteAcknowledge    forwardRelocationCompleteAcknowledge,
 ForwardSRNSContextAcknowledge           forwardSRNSContextAcknowledge,
 UERegistrationQueryRequest              uERegistrationQueryRequest,
 UERegistrationQueryResponse             uERegistrationQueryResponse,
 RANInformationRelay                     ranInformationRelay,
 MBMSNotificationRequest                 mBMSNotificationRequest,
 MBMSNotificationResponse                mBMSNotificationResponse,
 MBMSNotificationRejectRequest           mBMSNotificationRejectRequest,
 MBMSNotificationRejectResponse          mBMSNotificationRejectResponse,
 CreateMBMSContextRequest                createMBMSContextRequest,
 CreateMBMSContextResponse               createMBMSContextResponse,
 UpdateMBMSContextRequest                updateMBMSContextRequest,
 UpdateMBMSContextResponse               updateMBMSContextResponse,
 DeleteMBMSContextRequest                deleteMBMSContextRequest,
 DeleteMBMSContextResponse               deleteMBMSContextResponse,
 MBMSRegistrationRequest_gtpc            mBMSRegistrationRequest,
 MBMSRegistrationResponse_gtpc           mBMSRegistrationResponse,
 MBMSDeRegistrationRequest               mBMSDeRegistrationRequest,
 MBMSDeRegistrationResponse              mBMSDeRegistrationResponse,
 MBMSSessionStartRequest                 mBMSSessionStartRequest,
 MBMSSessionStartResponse_gtpc           mBMSSessionStartResponse,
 MBMSSessionStopRequest                  mBMSSessionStopRequest,
 MBMSSessionStopResponse_gtpc            mBMSSessionStopResponse,
 MBMSSessionUpdateRequest                mBMSSessionUpdateRequest,
 MBMSSessionUpdateResponse               mBMSSessionUpdateResponse, 
 MS_InfoChangeNotificationRequest        mS_InfoChangeNotificationRequest,
 MS_InfoChangeNotificationResponse       mS_InfoChangeNotificationResponse 
} with { variant ""};


/////////////////////////////
// PDU definition
/////////////////////////////
type record PDU_GTPC {
 BIT1                           pn_bit,
 BIT1                           s_bit,
 BIT1                           e_bit,
 BIT1                           spare,
 BIT1                           pt,
 BIT3                           version,
 OCT1                           messageType,
 LIN2_BO_LAST                   lengthf,
 OCT4                           teid,
 GTPC_Header_optional_part      opt_part optional,
 GTPC_PDUs                      gtpc_pdu
} with { 
    variant (lengthf) "LENGTHTO(opt_part, gtpc_pdu)";
    variant (opt_part) "PRESENCE({pn_bit = '1'B, s_bit = '1'B, e_bit = '1'B})";
    variant (gtpc_pdu) "CROSSTAG( echoRequest, messageType = '01'O;
           echoResponse, messageType = '02'O;
           versionNotSupported, messageType = '03'O;
           createPDPContextRequest, messageType = '10'O;
           createPDPContextResponse, messageType = '11'O;
           updatePDPContextRequest, messageType = '12'O;
           updatePDPContextResponse, messageType = '13'O;
           deletePDPContextRequest, messageType = '14'O;
           deletePDPContextResponse, messageType = '15'O; 
           initiatePDPContextActivationRequest, messageType = '16'O;           
           initiatePDPContextActivationResponse, messageType = '17'O;                     
           pdu_NotificationRequest, messageType = '1B'O;
           pdu_NotificationResponse, messageType = '1C'O;
           pdu_NotificationRejectRequest, messageType = '1D'O;
           pdu_NotificationRejectResponse, messageType = '1E'O;
           supportedExtensionHeadersNotification, messageType ='1F'O;
           sendRouteingInformationForGPRSRequest, messageType = '20'O;
           sendRouteingInformationForGPRSResponse, messageType = '21'O;
           failureReportRequest, messageType = '22'O; 
           failureReportResponse, messageType = '23'O;
           noteMS_GPRSPresentRequest, messageType = '24'O;
           noteMS_GPRSPresentResponse, messageType = '25'O;
           identificationRequest, messageType = '30'O;
           identificationResponse, messageType = '31'O;
           sgsn_ContextRequest, messageType = '32'O;
           sgsn_ContextResponse, messageType = '33'O;
           sgsn_ContextAcknowledge, messageType = '34'O;
           forwardRelocationRequest, messageType = '35'O;
           forwardRelocationResponse, messageType = '36'O;
           forwardRelocationComplete, messageType = '37'O; 
           relocationCancelRequest, messageType = '38'O;
           relocationCancelResponse, messageType = '39'O; 
           forwardSRNSContext, messageType = '3A'O; 
           forwardRelocationCompleteAcknowledge, messageType = '3B'O; 
           forwardSRNSContextAcknowledge, messageType = '3C'O;
           uERegistrationQueryRequest, messageType = '3D'O;
           uERegistrationQueryResponse, messageType = '3F'O;
           ranInformationRelay, messageType = '46'O;
           mBMSNotificationRequest, messageType = '60'O;
           mBMSNotificationResponse, messageType = '61'O;
           mBMSNotificationRejectRequest, messageType = '62'O;
           mBMSNotificationRejectResponse, messageType = '63'O;
           createMBMSContextRequest, messageType = '64'O;
           createMBMSContextResponse, messageType = '65'O;
           updateMBMSContextRequest, messageType = '66'O;
           updateMBMSContextResponse, messageType = '67'O;
           deleteMBMSContextRequest, messageType = '68'O;
           deleteMBMSContextResponse, messageType = '69'O;
           mBMSRegistrationRequest, messageType = '70'O;
           mBMSRegistrationResponse, messageType = '71'O;
           mBMSDeRegistrationRequest, messageType = '72'O;
           mBMSDeRegistrationResponse, messageType = '73'O;
           mBMSSessionStartRequest, messageType = '74'O;
           mBMSSessionStartResponse, messageType = '75'O;
           mBMSSessionStopRequest, messageType = '76'O;
           mBMSSessionStopResponse, messageType = '77'O;
           mBMSSessionUpdateRequest, messageType = '78'O;           
           mBMSSessionUpdateResponse, messageType = '79'O;
           mS_InfoChangeNotificationRequest, messageType = '80'O;
           mS_InfoChangeNotificationResponse, messageType = '81'O                      
           )";
};

type record GTPC_Header_optional_part {
 OCT2                       sequenceNumber,
 OCT1                       npduNumber,
 OCT1                       nextExtHeader,
 GTPC_ExtensionHeader_List  gTPC_extensionHeader_List optional
} 

type record of GTPC_ExtensionHeader GTPC_ExtensionHeader_List;

type record GTPC_ExtensionHeader {
 integer               lengthfield, 
 octetstring           content,
 octetstring           nextExtHeader  length(1)
} with { variant (lengthfield) "LENGTHTO(lengthfield,content,nextExtHeader)";
         variant (lengthfield) "UNIT(32)";
};

}//end of module
with {
extension "version R1B"
encode "RAW"
}

