/******************************************************************************
* 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:               TS29503_Nudm_SDM.ttcn
//  Description:	      Type definitions for 3GPP TS29503
/////////////////////////////////////////////// 
module TS29503_Nudm_SDM {

  import from TS29571_CommonData all
  import from TS29509_Nausf_SoRProtection all

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


  type set of     DataSetName    DatasetNames

  type set SubscriptionDataSets {
    AccessAndMobilitySubscriptionData    amData optional,
    SmfSelectionSubscriptionData    smfSelData optional,
    UeContextInSmfData    uecSmfData optional,
    UeContextInSmsfData    uecSmsfData optional,
    SmsSubscriptionData    smsSubsData optional,
    set of       SessionManagementSubscriptionData    smData optional,
    TS29571_CommonData.TraceData    traceData optional,
    SmsManagementSubscriptionData    smsMngData optional
  }

  type set UeContextInSmsfData {
    SmsfInfo    smsfInfo3GppAccess optional,
    SmsfInfo    smsfInfoNon3GppAccess optional
  }

  type set SmsfInfo {
    TS29571_CommonData.NfInstanceId    smsfInstanceId,
    TS29571_CommonData.PlmnId    plmnId
  }

  type set AccessAndMobilitySubscriptionData {
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    set of       TS29571_CommonData.Gpsi    gpsis optional,
    set of       InternalGroupId    internalGroupIds optional,
    TS29571_CommonData.Ambr    subscribedUeAmbr optional,
    Nssai    nssai optional,
    set of       TS29571_CommonData.RatType    ratRestrictions optional,
    set of       TS29571_CommonData.Area    forbiddenAreas optional,
    TS29571_CommonData.ServiceAreaRestriction    serviceAreaRestriction optional,
    set of       TS29571_CommonData.CoreNetworkType    coreNetworkTypeRestrictions optional,
    TS29571_CommonData.RfspIndex    rfspIndex optional,
    TS29571_CommonData.DurationSec    subsRegTimer optional,
    UeUsageType    ueUsageType optional,
    MpsPriorityIndicator    mpsPriority optional,
    TS29571_CommonData.DurationSec    activeTime optional,
    DlPacketCount    dlPacketCount optional,
    SorInfo    sorInfo optional,
    MicoAllowed    micoAllowed optional,
    SharedDataIds    sharedDataIds optional
  }

  type set SmfSelectionSubscriptionData {
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    set of       SnssaiInfo    subscribedSnssaiInfos optional
  }

  type set SnssaiInfo {
    TS29571_CommonData.Snssai    singleNssai,
    set of       DnnInfo    dnnInfos
  }

  type set DnnInfo {
    TS29571_CommonData.Dnn    dnn,
    DnnIndicator    defaultDnnIndicator optional,
    LboRoamingAllowed    lboRoamingAllowed optional,
    IwkEpsInd    iwkEpsInd optional,
    LadnIndicator    ladnIndicator optional
  }

  type set Nssai {
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    set of       TS29571_CommonData.Snssai    defaultSingleNssais optional,
    set of       TS29571_CommonData.Snssai    singleNssais optional
  }

  type set UeContextInSmfData {
    set of record {
      universal charstring key,
      PduSession    additionalProperties
    } pduSessions optional,
    set of       PgwInfo    pgwInfo optional
  } with {
    variant (pduSessions) "as map"
  }


  type set PduSession {
    TS29571_CommonData.PduSessionId    pduSessionId,
    TS29571_CommonData.Dnn    dnn,
    TS29571_CommonData.NfInstanceId    smfInstanceId,
    TS29571_CommonData.PlmnId    plmnId
  }

  type set PgwInfo {
    TS29571_CommonData.Dnn    dnn,
    charstring pgwFqdn,
    TS29571_CommonData.PlmnId    plmnId optional
  }

  type set SessionManagementSubscriptionData {
    TS29571_CommonData.Snssai    singleNssai,
    record of record {
      universal charstring key,
      DnnConfiguration    additionalProperties
    } dnnConfiguration optional
  } with {
    variant (dnnConfiguration) "as map"
  }


  type set DnnConfiguration {
    TS29571_CommonData.Dnn    dnn,
    PduSessionTypes    pduSessionTypes,
    SscModes    sscModes,
    IwkEpsInd    iwkEpsInd optional,
    LadnIndicator    ladnIndicator optional,
    FiveGQosProfile    fivegQosProfile optional,
    TS29571_CommonData.Ambr    sessionAmbr optional,
    ThreeGppChargingCharacteristics    threegppChargingCharacteristics optional,
    IpAddress    staticIpAddress optional,
    TS29571_CommonData.UpSecurity    upSecurity optional
  } with {
    variant (fivegQosProfile) "name as '5gQosProfile'"
    variant (threegppChargingCharacteristics) "name as '3gppChargingCharacteristics'"
  }

  type set IpAddress {
    TS29571_CommonData.Ipv4Addr    ipv4Addr optional,
    TS29571_CommonData.Ipv6Addr    ipv6Addr optional,
    TS29571_CommonData.Ipv6Prefix    ipv6Prefix optional
  }

  type set PduSessionTypes {
    TS29571_CommonData.PduSessionType    defaultSessionType,
    set of       TS29571_CommonData.PduSessionType    allowedSessionTypes optional
  }

  type set SscModes {
    TS29571_CommonData.SscMode    defaultSscMode,
    set of       TS29571_CommonData.SscMode    allowedSscModes optional
  }

  type set FiveGQosProfile {
    TS29571_CommonData.FiveQi    fiveqi,
    TS29571_CommonData.NonDynamic5Qi    nonDynamic5Qi optional,
    TS29571_CommonData.Dynamic5Qi    dynamic5Qi optional,
    TS29571_CommonData.Arp    arp optional
  } with {
    variant (fiveqi) "name as '5qi'"
  }


  type set SmsSubscriptionData {
    SmsSubscribed    smsSubscribed,
    SharedDataIds    sharedDataIds optional
  }

  type set SmsManagementSubscriptionData {
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    boolean mtSmsSubscribed,
    boolean mtSmsBarringAll optional,
    boolean mtSmsBarringRoaming optional,
    boolean moSmsSubscribed,
    boolean moSmsBarringAll optional,
    boolean moSmsBarringRoaming optional,
    SharedDataIds    sharedDataIds optional
  }

  type set SdmSubscription {
    TS29571_CommonData.NfInstanceId    nfInstanceId,
    boolean implicitUnsubscribe optional,
    TS29571_CommonData.DateTime    expires optional,
    TS29571_CommonData.Uri    callbackReference optional,
    set of       TS29571_CommonData.Uri    monitoredResourceUris optional,
    TS29571_CommonData.Snssai    singleNssai optional,
    TS29571_CommonData.Dnn    dnn optional
  }

  type set ModificationNotification {
    set of       TS29571_CommonData.NotifyItem    notifyItems
  }

  type set IdTranslationResult {
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    TS29571_CommonData.Supi    supi,
    TS29571_CommonData.Gpsi    gpsi optional
  }

  type set AcknowledgeInfo {
    TS29509_Nausf_SoRProtection.SorMac    sorMacIue optional
  }

  type set SorInfo {
    set of       TS29509_Nausf_SoRProtection.SteeringInfo    steeringInfoList,
    TS29509_Nausf_SoRProtection.AckInd    ackInd,
    TS29509_Nausf_SoRProtection.SorMac    sorMacIausf,
    TS29509_Nausf_SoRProtection.CounterSor    countersor
  }

  type set of     SharedDataId    SharedDataIds

  type set SharedData {
    SharedDataId    sharedDataId,
    AccessAndMobilitySubscriptionData    sharedAmData optional,
    SmsSubscriptionData    sharedSmsSubsData optional,
    SmsManagementSubscriptionData    sharedSmsMngSubsData optional
  }

  type integer UeUsageType

  type boolean MpsPriorityIndicator

  type boolean DnnIndicator

  type boolean LboRoamingAllowed

  type boolean LadnIndicator

  type boolean SmsSubscribed

  type charstring ThreeGppChargingCharacteristics

  type integer DlPacketCount (-1..infinity)

  type charstring InternalGroupId

  type boolean MicoAllowed

  type charstring SharedDataId // (pattern "^[0-9]{5,6}-.+$")

  type boolean IwkEpsInd

  type enumerated DataSetName_enum { AM, SMF_SEL, UEC_SMF, UEC_SMSF, SMS_SUB, SM, TRACE, SMS_MNG}

  type union DataSetName {
    DataSetName_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }






} with {
  encode "JSON"
}
