/******************************************************************************
* Copyright (c) 2000-2019  Ericsson AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
*   Gabor Szalai - initial implementation and initial documentation
******************************************************************************/
//
//  File:               TS29518_Namf_Communication.ttcn
//  Description:	      Type definitions for 3GPP TS29518
/////////////////////////////////////////////// 
module TS29518_Namf_Communication {

  import from TS29571_CommonData all
  import from TS29502_Nsmf_PDUSession all
  import from TS29572_Nlmf_Location all
  import from TS29531_Nnssf_NSSelection all
  import from TS29518_Namf_EventExposure all

external function f_enc_UeContextCreateData(in UeContextCreateData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeContextCreateData(in octetstring stream, out UeContextCreateData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeContextCreatedData(in UeContextCreatedData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeContextCreatedData(in octetstring stream, out UeContextCreatedData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeContextCreateError(in UeContextCreateError pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeContextCreateError(in octetstring stream, out UeContextCreateError pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UEContextRelease(in UEContextRelease pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UEContextRelease(in octetstring stream, out UEContextRelease pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_AssignEbiData(in AssignEbiData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_AssignEbiData(in octetstring stream, out AssignEbiData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_AssignedEbiData(in AssignedEbiData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_AssignedEbiData(in octetstring stream, out AssignedEbiData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_AssignEbiError(in AssignEbiError pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_AssignEbiError(in octetstring stream, out AssignEbiError pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeContextTransferReqData(in UeContextTransferReqData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeContextTransferReqData(in octetstring stream, out UeContextTransferReqData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeContextTransferRspData(in UeContextTransferRspData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeContextTransferRspData(in octetstring stream, out UeContextTransferRspData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeRegStatusUpdateReqData(in UeRegStatusUpdateReqData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeRegStatusUpdateReqData(in octetstring stream, out UeRegStatusUpdateReqData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeRegStatusUpdateRspData(in UeRegStatusUpdateRspData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeRegStatusUpdateRspData(in octetstring stream, out UeRegStatusUpdateRspData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N1N2MessageTransferReqData(in N1N2MessageTransferReqData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N1N2MessageTransferReqData(in octetstring stream, out N1N2MessageTransferReqData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N1N2MessageTransferRspData(in N1N2MessageTransferRspData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N1N2MessageTransferRspData(in octetstring stream, out N1N2MessageTransferRspData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N1N2MessageTransferError(in N1N2MessageTransferError pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N1N2MessageTransferError(in octetstring stream, out N1N2MessageTransferError pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N1N2MsgTxfrFailureNotification(in N1N2MsgTxfrFailureNotification pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N1N2MsgTxfrFailureNotification(in octetstring stream, out N1N2MsgTxfrFailureNotification pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeN1N2InfoSubscriptionCreateData(in UeN1N2InfoSubscriptionCreateData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeN1N2InfoSubscriptionCreateData(in octetstring stream, out UeN1N2InfoSubscriptionCreateData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_UeN1N2InfoSubscriptionCreatedData(in UeN1N2InfoSubscriptionCreatedData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_UeN1N2InfoSubscriptionCreatedData(in octetstring stream, out UeN1N2InfoSubscriptionCreatedData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N2InformationTransferReqData(in N2InformationTransferReqData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N2InformationTransferReqData(in octetstring stream, out N2InformationTransferReqData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N2InformationTransferRspData(in N2InformationTransferRspData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N2InformationTransferRspData(in octetstring stream, out N2InformationTransferRspData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N2InformationTransferError(in N2InformationTransferError pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N2InformationTransferError(in octetstring stream, out N2InformationTransferError pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_NonUeN2InfoSubscriptionCreateData(in NonUeN2InfoSubscriptionCreateData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_NonUeN2InfoSubscriptionCreateData(in octetstring stream, out NonUeN2InfoSubscriptionCreateData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_NonUeN2InfoSubscriptionCreatedData(in NonUeN2InfoSubscriptionCreatedData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_NonUeN2InfoSubscriptionCreatedData(in octetstring stream, out NonUeN2InfoSubscriptionCreatedData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_N2InformationNotification(in N2InformationNotification pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_N2InformationNotification(in octetstring stream, out N2InformationNotification pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_SubscriptionData(in SubscriptionData pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_SubscriptionData(in octetstring stream, out SubscriptionData pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }

external function f_enc_AmfStatusChangeNotification(in AmfStatusChangeNotification pdu) return octetstring 
with { extension "prototype(convert) encode(JSON)" }

external function f_dec_AmfStatusChangeNotification(in octetstring stream, out AmfStatusChangeNotification pdu) return integer 
with { extension "prototype(backtrack) decode(JSON)" }


  type set SubscriptionData {
    TS29571_CommonData.Uri    amfStatusUri,
    set of       TS29571_CommonData.Guami    guamiList optional
  }

  type set AmfStatusChangeNotification {
    set of       AmfStatusInfo    amfStatusInfoList optional
  }

  type set AmfStatusInfo {
    set of       TS29571_CommonData.Guami    guamiList optional,
    StatusChange    statusChange,
    TS29571_CommonData.AmfName    targetAmfRemoval optional,
    TS29571_CommonData.AmfName    targetAmfFailure optional
  }

  type set AssignEbiData {
    TS29571_CommonData.PduSessionId    pduSessionId,
    set of       TS29571_CommonData.Arp    arpList optional,
    set of       EpsBearerId    releasedEbiList optional
  }

  type set AssignedEbiData {
    TS29571_CommonData.PduSessionId    pduSessionId,
    set of       TS29502_Nsmf_PDUSession.EbiArpMapping    assignedEbiList optional,
    set of       TS29571_CommonData.Arp    failedArpList optional,
    set of       EpsBearerId    releasedEbiList optional
  }

  type set AssignEbiFailed {
    TS29571_CommonData.PduSessionId    pduSessionId,
    set of       TS29571_CommonData.Arp    failedArpList optional
  }

  type set UEContextRelease {
    TS29571_CommonData.Supi    supi optional,
    boolean unauthenticatedSupi optional,
    TS29571_CommonData.NgApCause    ngapCause
  }

  type set N2InformationTransferReqData {
    set of       TS29571_CommonData.Tai    taiList optional,
    RatSelector    ratSelector optional,
    set of       TS29571_CommonData.Ecgi    ecgiList optional,
    set of       TS29571_CommonData.Ncgi    ncgiList optional,
    set of       TS29571_CommonData.GlobalRanNodeId    globalRanNodeList optional,
    N2InfoContainer    n2Information,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set NonUeN2InfoSubscriptionCreateData {
    set of       TS29571_CommonData.GlobalRanNodeId    globalRanNodeList optional,
    set of       TS29571_CommonData.AccessType    anTypeList optional,
    N2InformationClass    n2InformationClass,
    TS29571_CommonData.Uri    n2NotifyCallbackUri,
    TS29571_CommonData.NfInstanceId    nfId optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set NonUeN2InfoSubscriptionCreatedData {
    charstring n2NotifySubscriptionId,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set UeN1N2InfoSubscriptionCreateData {
    N2InformationClass    n2InformationClass optional,
    TS29571_CommonData.Uri    n2NotifyCallbackUri optional,
    N1MessageClass    n1MessageClass optional,
    TS29571_CommonData.Uri    n1NotifyCallbackUri optional,
    TS29571_CommonData.NfInstanceId    nfId optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set UeN1N2InfoSubscriptionCreatedData {
    charstring n1n2NotifySubscriptionId,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set N2InformationNotification {
    charstring n2NotifySubscriptionId,
    N2InfoContainer    n2InfoContainer,
    set of       TS29571_CommonData.PduSessionId    toReleaseSessionList optional,
    TS29572_Nlmf_Location.CorrelationID    lcsCorrelationId optional
  }

  type set N2InfoContainer {
    N2InformationClass    n2InformationClass,
    N2SmInformation    smInfo optional,
    NrppaInformation    nrppaInfo optional,
    PwsInformation    pwsInfo optional,
    AreaOfValidity    areaOfValidity optional
  }

  type set N1MessageNotification {
    charstring n1NotifySubscriptionId optional,
    N1MessageContainer    n1MessageContainer,
    TS29572_Nlmf_Location.CorrelationID    lcsCorrelationId optional,
    RegistrationContextContainer    registrationCtxtContainer optional
  }

  type set N1MessageContainer {
    N1MessageClass    n1MessageClass,
    RefToBinaryData    n1MessageContent,
    TS29571_CommonData.NfInstanceId    nfId optional
  }

  type set N1N2MessageTransferReqData {
    N1MessageContainer    n1MessageContainer optional,
    N2InfoContainer    n2InfoContainer optional,
    boolean skipInd optional,
    boolean lastMsgIndication optional,
    charstring sessionId optional,
    Ppi    ppi optional,
    TS29571_CommonData.Arp    arp optional,
    TS29571_CommonData.FiveQi    fiveqi optional,
    TS29571_CommonData.Uri    n1n2FailureTxfNotifURI optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  } with {
    variant (fiveqi) "name as '5qi'"
  }

  type set N1N2MessageTransferRspData {
    N1N2MessageTransferCause    cause,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set RegistrationContextContainer {
    UeContext    ueContext,
    TS29571_CommonData.TimeZone    localTimeZone optional,
    TS29571_CommonData.AccessType    anType,
    integer anN2ApId,
    TS29571_CommonData.NgRanIdentifier    ranNodeId,
    TS29571_CommonData.Ipv4Addr    anN2IPv4Addr optional,
    TS29571_CommonData.Ipv6Addr    anN2IPv6Addr optional,
    TS29531_Nnssf_NSSelection.AllowedNssai    allowedNssai optional,
    set of       TS29531_Nnssf_NSSelection.ConfiguredSnssai    configuredNssai optional,
    set of       TS29571_CommonData.Snssai    rejectedNssaiInPlmn optional,
    set of       TS29571_CommonData.Snssai    rejectedNssaiInTa optional
  }

  type set AreaOfValidity {
    set of       TS29571_CommonData.Tai    taiList optional
  }

  type set RefToBinaryData {
    charstring contentId
  }

  type set UeContextTransferReqData {
    TransferReason    reason,
    N1MessageContainer    regRequest optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set UeContextTransferRspData {
    UeContext    ueContext,
    TS29571_CommonData.Uri    regCompleteNotifyUri,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set UeContext {
    TS29571_CommonData.Supi    supi optional,
    boolean supiUnauthInd optional,
    set of       TS29571_CommonData.Gpsi    gpsiList optional,
    TS29571_CommonData.Pei    pei optional,
    set of       TS29571_CommonData.GroupId    groupList optional,
    DrxParameter    drxParameter optional,
    TS29571_CommonData.RfspIndex    subRfsp optional,
    TS29571_CommonData.RfspIndex    usedRfsp optional,
    TS29571_CommonData.Ambr    subUeAmbr optional,
    SmsSupport    smsSupport,
    TS29571_CommonData.NfInstanceId    smsfId optional,
    SeafData    seafData optional,
    FivegmmCapability    fivegmmCapability optional,
    TS29571_CommonData.NfInstanceId    pcfId optional,
    TS29571_CommonData.Uri    pcfAmPolicyUri optional,
    set of       AMPolicyReqTrigger    amPolicyReqTriggerList optional,
    TS29571_CommonData.NfInstanceId    hpcfId optional,
    set of       TS29571_CommonData.RatType    restrictedRatList optional,
    set of       TS29571_CommonData.Area    forbiddenAreaList optional,
    TS29571_CommonData.ServiceAreaRestriction    serviceAreaRestriction optional,
    set of       TS29571_CommonData.CoreNetworkType    restrictedCoreNwTypeList optional,
    set of       TS29518_Namf_EventExposure.AmfEventSubscription    eventSubscriptionList optional,
    set of       MmContext    mmContextList optional,
    set of       PduSessionContext    sessionContextList optional,
    TS29571_CommonData.TraceData    traceData optional
  } with {
    variant (fivegmmCapability) "name as '5gmmCapability'"
  }


  type set N2SmInformation {
    TS29571_CommonData.PduSessionId    pduSessionId,
    N2InfoContent    n2InfoContent optional,
    N1MessageContainer    nasPdu optional,
    TS29571_CommonData.Snssai    sNssai optional,
    boolean subjectToHo optional
  }

  type set N2InfoContent {
    TS29571_CommonData.Uinteger    ngapMessageType optional,
    NgapIeType    ngapIeType,
    RefToBinaryData    ngapData
  }

  type set NrppaInformation {
    TS29571_CommonData.NfInstanceId    nfId optional,
    N2InfoContent    nrppaPdu
  }

  type set PwsInformation {
    TS29571_CommonData.Uint16    messageIdentifier,
    TS29571_CommonData.Uint16    serialNumber,
    N2InfoContent    pwsContainer,
    boolean sendN2Container optional,
    OmcIdentifier    omcId optional
  }

  type set N1N2MsgTxfrFailureNotification {
    N1N2MessageTransferCause    cause,
    TS29571_CommonData.Uri    n1n2MsgDataUri
  }

  type set N1N2MessageTransferError {
    TS29571_CommonData.ProblemDetails    error_,
    N1N2MsgTxfrErrDetail    errInfo optional
  } with {
    variant (error_) "name as 'error'"
  }

  type set N1N2MsgTxfrErrDetail {
    TS29571_CommonData.Uinteger    retryAfter optional,
    TS29571_CommonData.Arp    highestPrioArp optional
  }

  type set N2InformationTransferRspData {
    N2InformationTransferResult    result,
    PWSResponseData    pwsRspData optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set MmContext {
    TS29571_CommonData.AccessType    accessType,
    NasSecurityMode    nasSecurityMode optional,
    NasCount    nasDownlinkCount optional,
    NasCount    nasUplinkCount optional,
    UeSecurityCapability    ueSecurityCapability optional,
    S1UeNetworkCapability    s1UeNetworkCapability optional,
    set of       TS29571_CommonData.Snssai    allowedNssaiList optional,
    set of       NssaiMapping    nssaiMappingList optional,
    set of       TS29531_Nnssf_NSSelection.NsiId    nsInstanceList optional,
    ExpectedUeBehavior    expectedUEbehavior optional
  }

  type set SeafData {
    NgKsi    ngKsi,
    KeyAmf    keyAmf,
    charstring nh, // (pattern "^[A-Fa-f0-9]+$") optional,
    TS29571_CommonData.Uinteger    ncc optional,
    boolean keyAmfChangeInd optional
  }

  type set NasSecurityMode {
    IntegrityAlgorithm    integrityAlgorithm,
    CipheringAlgorithm    cipheringAlgorithm
  }

  type set PduSessionContext {
    TS29571_CommonData.PduSessionId    pduSessionId,
    TS29571_CommonData.Uri    smContextRef,
    TS29571_CommonData.Snssai    sNssai,
    TS29571_CommonData.Dnn    dnn,
    TS29571_CommonData.AccessType    accessType,
    set of       TS29502_Nsmf_PDUSession.EbiArpMapping    allocatedEbiList,
    TS29571_CommonData.NfInstanceId    hsmfId optional,
    TS29571_CommonData.NfInstanceId    vsmfId optional,
    TS29531_Nnssf_NSSelection.NsiId    nsInstance optional
  }

  type set NssaiMapping {
    TS29571_CommonData.Snssai    mappedSnssai,
    TS29571_CommonData.Snssai    hSnssai
  }

  type set UeRegStatusUpdateReqData {
    UeContextTransferStatus    transferStatus,
    set of       TS29571_CommonData.PduSessionId    toReleaseSessionList optional
  }

  type set UeRegStatusUpdateRspData {
    boolean regStatusTransferComplete
  }

  type set AssignEbiError {
    TS29571_CommonData.ProblemDetails    error_,
    AssignEbiFailed    failureDetails
  } with {
    variant (error_) "name as 'error'"
  }


  type set UeContextCreateData {
    UeContext    ueContext,
    NgRanTargetId    targetId,
    N2InfoContent    sourceToTargetData,
    set of       N2SmInformation    pduSessionList optional,
    TS29571_CommonData.Uri    n2NotifyUri optional,
    TS29571_CommonData.NgApCause    ngapCause optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set UeContextCreatedData {
    UeContext    ueContext,
    N2InfoContent    targetToSourceData,
    set of       N2SmInformation    pduSessionList optional,
    TS29571_CommonData.NgApCause    ngapCause optional,
    set of       TS29571_CommonData.PduSessionId    failedSessionList optional,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
  }

  type set UeContextCreateError {
    TS29571_CommonData.ProblemDetails    error_,
    TS29571_CommonData.NgApCause    ngapCause optional
  } with {
    variant (error_) "name as 'error'"
  }


  type set NgRanTargetId {
    TS29571_CommonData.NgRanIdentifier    ranNodeId,
    TS29571_CommonData.Tai    tai
  }

  type set PWSResponseData {
    TS29571_CommonData.Uinteger    ngapMessageType,
    TS29571_CommonData.Uint16    serialNumber,
    integer messageIdentifier,
    set of       TS29571_CommonData.Tai    unknownTaiList optional
  }

  type set PWSErrorData {
    integer namfCause
  }

  type set N2InformationTransferError {
    TS29571_CommonData.ProblemDetails    error_,
    PWSErrorData    pwdErrorInfo optional
  } with {
    variant (error_) "name as 'error'"
  }


  type set NgKsi {
    ScType    tsc,
    TS29571_CommonData.Uinteger    ksi
  }

  type set KeyAmf {
    KeyAmfType    keyType,
    charstring keyVal
  }

  type set ExpectedUeBehavior {
    set of       TS29571_CommonData.UserLocation    expMoveTrajectory,
    TS29571_CommonData.DateTime    validityTime
  }

  type TS29571_CommonData.Uinteger    EpsBearerId

  type TS29571_CommonData.Uinteger    Ppi

  type TS29571_CommonData.Uinteger    NasCount

  type TS29571_CommonData.Bytes    FivegmmCapability

  type TS29571_CommonData.Bytes    UeSecurityCapability

  type TS29571_CommonData.Bytes    S1UeNetworkCapability

  type TS29571_CommonData.Bytes    DrxParameter

  type charstring OmcIdentifier

  type enumerated StatusChange_enum { AMF_UNAVAILABLE, AMF_AVAILABLE}

  type union StatusChange {
    StatusChange_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated N2InformationClass_enum { SM, NRPPa, PWS, PWS_BCAL, PWS_RF}
  with {
    variant "text 'PWS_BCAL' as 'PWS-BCAL'"
    variant "text 'PWS_RF' as 'PWS-RF'"
  
  }

  type union N2InformationClass {
    N2InformationClass_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated N1MessageClass_enum { FIVEGMM, SM, LPP, SMS, UPDP}
  with {variant "text 'FIVEGMM' as '5GMM'"}

  type union N1MessageClass {
    N1MessageClass_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated N1N2MessageTransferCause_enum { ATTEMPTING_TO_REACH_UE, N1_N2_TRANSFER_INITIATED, WAITING_FOR_ASYNCHRONOUS_TRANSFER, UE_NOT_RESPONDING, N1_MSG_NOT_TRANSFERRED}

  type union N1N2MessageTransferCause {
    N1N2MessageTransferCause_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated UeContextTransferStatus_enum { TRANSFERRED, NOT_TRANSFERRED}

  type union UeContextTransferStatus {
    UeContextTransferStatus_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated N2InformationTransferResult_enum { N2_INFO_TRANSFER_INITIATED}

  type union N2InformationTransferResult {
    N2InformationTransferResult_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated CipheringAlgorithm_enum { NEA0, NEA1, NEA2, NEA3}

  type union CipheringAlgorithm {
    CipheringAlgorithm_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated IntegrityAlgorithm_enum { NIA0, NIA1, NIA2, NIA3}

  type union IntegrityAlgorithm {
    IntegrityAlgorithm_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated SmsSupport_enum { THREEGPP, NON_3GPP, BOTH, NONE}
  with {variant "text 'THREEGPP' as '3GPP'"}

  type union SmsSupport {
    SmsSupport_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated ScType_enum { NATIVE, MAPPED}

  type union ScType {
    ScType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated KeyAmfType_enum { KAMF, KPRIMEAMF}

  type union KeyAmfType {
    KeyAmfType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated TransferReason_enum { INIT_REG, MOBI_REG, MOBI_REG_UE_VALIDATED}

  type union TransferReason {
    TransferReason_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated AMPolicyReqTrigger_enum { LOCATION_CHANGE, PRA_CHANGE, SARI_CHANGE, RFSP_INDEX_CHANGE}

  type union AMPolicyReqTrigger {
    AMPolicyReqTrigger_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated RatSelector_enum { E_UTRA, NR}
  with {variant "text 'E_UTRA' as 'E-UTRA'"}

  type union RatSelector {
    RatSelector_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated NgapIeType_enum { PDU_RES_SETUP_REQ, PDU_RES_REL_CMD, PDU_RES_MOD_REQ, PDU_RES_MOD_CFM, PATH_SWITCH_REQ_ACK, PATH_SWITCH_REQ_FAIL, HANDOVER_CMD, HANDOVER_PREP_FAIL, SRC_TO_TAR_CONTAINER, TAR_TO_SRC_CONTAINER, NRPPA_PDU}

  type union NgapIeType {
    NgapIeType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }






} with {
  encode "JSON"
}
