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

  import from JSON_Generic all;


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

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


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

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

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

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


  type charstring Binary

  type Binary BinaryRm

  type charstring Bytes

  type Bytes BytesRm

  type charstring Date

  type Date DateRm

  type charstring DateTime

  type DateTime DateTimeRm

  type charstring DiameterIdentity // (pattern "^([A-Za-z0-9]+(-[A-Za-z0-9]+).)+[a-z]{2,}$")

  type DiameterIdentity DiameterIdentityRm // (pattern "^([A-Za-z0-9]+(-[A-Za-z0-9]+).)+[a-z]{2,}$")

  type float Double

  type Double DoubleRm

  type integer DurationSec

  type DurationSec DurationSecRm

  type float Float

  type Float FloatRm

  type integer Int32

  type Int32 Int32Rm

  type integer Int64

  type Int64 Int64Rm

  type charstring Ipv4Addr

  type Ipv4Addr Ipv4AddrRm

  type charstring Ipv6Addr

  type Ipv6Addr Ipv6AddrRm

  type charstring Ipv6Prefix

  type Ipv6Prefix Ipv6PrefixRm

  type charstring MacAddr48 // (pattern "^([0-9a-fA-F]{2})((-[0-9a-fA-F]{2}){5})$")

  type MacAddr48 MacAddr48Rm // (pattern "^([0-9a-fA-F]{2})((-[0-9a-fA-F]{2}){5})$")

  type charstring SupportedFeatures // (pattern "^[A-Fa-f0-9]*$")

  type integer Uinteger (0..infinity)

  type Uinteger UintegerRm (0..infinity)

  type integer Uint16 (0..65535)

  type Uint16 Uint16Rm (0..65535)

  type integer Uint32 (0..infinity)

  type Uint32 Uint32Rm (0..infinity)

  type integer Uint64 (0..infinity)

  type Uint64 Uint64Rm (0..infinity)

  type charstring Uri

  type Uri UriRm

  type charstring VarUeId // (pattern "^(imsi-[0-9]{5,15}|nai-.+|msisdn-[0-9]{5,15}|extid-.+|.+)$")

  type charstring TimeZone

  type TimeZone TimeZoneRm

  type enumerated PatchOperation_enum { add, copy, move, remove, replace_, test} 
    with {
      variant "text 'replace_' as 'replace' "
    }

  type union PatchOperation {
    PatchOperation_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated UriScheme_enum { http, https}

  type union UriScheme {
    UriScheme_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated ChangeType_enum { ADD, MOVE, REMOVE, REPLACE}

  type union ChangeType {
    ChangeType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type set ProblemDetails {
    Uri    type_ optional,
    charstring title optional,
    integer status optional,
    charstring detail optional,
    Uri    instance optional,
    charstring cause optional,
    set of       InvalidParam    invalidParams optional
  } with {
    variant (type_) "name as 'type'"
  }


  type set Link {
    Uri    href optional
  }

  type Link LinkRm

  type set PatchItem {
    PatchOperation    op,
    charstring path,
    charstring from_ optional,
    JSON_generic_val value_ optional
  } with {
    variant (from_) "name as 'from'"
    variant (value_) "name as 'value'"
  }

  type union LinksValueSchema {
    set of       Link    field1,
    Link    field2
  } with {
    variant "JSON: as value"
  }


  type set SelfLink {
    Link    self_
  } with {
    variant (self_) "name as 'self'"
  }


  type set InvalidParam {
    charstring param_,
    charstring reason optional
  } with {
    variant (param_) "name as 'param' "
  }


  type set ChangeItem {
    ChangeType    op,
    charstring path,
    charstring from_ optional,
    JSON_generic_val origValue optional,
    JSON_generic_val newValue optional
  } with {
    variant (from_) "name as 'from'"
  }


  type set NotifyItem {
    Uri    resourceId optional,
    set of       ChangeItem    changes optional
  }

  type charstring Dnn

  type Dnn DnnRm

  type charstring Gpsi // (pattern "^(msisdn-[0-9]{5,15}|extid-.+@.+|.+)$")

  type Gpsi GpsiRm // (pattern "^(msisdn-[0-9]{5,15}|extid-.+|.+)$")

  type charstring GroupId // (pattern "^groupid-[A-Fa-f0-9]{8}-[0-9]{3}-[0-9]{2,3}-([A-Fa-f0-9][A-Fa-f0-9]){1,10}$")

  type GroupId GroupIdRm // (pattern "^(groupid-[A-Fa-f0-9]{14,34}|.+)$")

  type charstring Pei // (pattern "^(imei-[0-9]{15}|imeisv-[0-9]{16}|.+)$")

  type Pei PeiRm // (pattern "^(imei-[0-9]{15}|imeisv-[0-9]{16}|.+)$")

  type charstring Supi // (pattern "^(imsi-[0-9]{5,15}|nai-.+|.+)$")

  type Supi SupiRm // (pattern "^(imsi-[0-9]{5,15}|nai-.+|.+)$")

  type charstring NfInstanceId

  type charstring AmfId // (pattern "^[A-Fa-f0-9]{6}$")

  type integer RfspIndex (1..256)

  type RfspIndex RfspIndexRm (1..256)

  type set Guami {
    PlmnId    plmnId,
    AmfId    amfId
  }

  type set GuamiRm {
    PlmnId    plmnId,
    AmfId    amfId
  }

  type set NetworkId {
    Mnc    mnc optional,
    Mcc    mcc optional
  }

  type charstring ApplicationId

  type ApplicationId ApplicationIdRm

  type integer PduSessionId (0..255)

  type charstring Mcc // (pattern "^\d{3}$")

  type Mcc MccRm // (pattern "^\d{3}$")

  type charstring Mnc // (pattern "^\d{2,3}$")

  type Mnc MncRm // (pattern "^\d{2,3}$")

  type charstring Tac // (pattern "(^[A-Fa-f0-9]{4}$)|(^[A-Fa-f0-9]{6}$)")

  type Tac TacRm // (pattern "(^[A-Fa-f0-9]{4}$)|(^[A-Fa-f0-9]{6}$)")

  type charstring EutraCellId // (pattern "^[A-Fa-f0-9]{7}$")

  type EutraCellId EutraCellIdRm // (pattern "^[A-Fa-f0-9]{7}$")

  type charstring NrCellId // (pattern "^[A-Fa-f0-9]{9}$")

  type NrCellId NrCellIdRm // (pattern "^[A-Fa-f0-9]{9}$")

  type charstring Dnai

  type Dnai DnaiRm

  type Uinteger  FiveGMmCause

  type charstring AmfName

  type charstring AreaCode

  type AreaCode AreaCodeRm

  type charstring NgRanIdentifier // (pattern "^(gNB-[A-Fa-f0-9]{6,8}|MacroNGeNB-[A-Fa-f0-9]{5}|LMacroNGeNB-[A-Fa-f0-9]{6}|SMacroNGeNB-[A-Fa-f0-9]{5})$")

  type enumerated AccessType { ThreeGPP_ACCESS, NON_3GPP_ACCESS}
    with {
      variant "text 'ThreeGPP_ACCESS' as '3GPP_ACCESS'"
    }


  type AccessType AccessTypeRm


  type enumerated RatType_enum { NR, EUTRA, WLAN, VIRTUAL}

  type union RatType {
    RatType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type RatType RatTypeRm
  

  type enumerated PduSessionType_enum { IPV4V6, IPV4, IPV6, UNSTR, ETHER}

  type union PduSessionType {
    PduSessionType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type PduSessionType PduSessionTypeRm 

  type enumerated UpIntegrity_enum { REQUIRED, PREFERRED, NOT_NEEDED}

  type union UpIntegrity {
    UpIntegrity_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type UpIntegrity UpIntegrityRm
  

  type enumerated UpConfidentiality_enum { REQUIRED, PREFERRED, NOT_NEEDED}

  type union UpConfidentiality {
    UpConfidentiality_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type UpConfidentiality UpConfidentialityRm
  

  type enumerated SscMode_enum { SSC_MODE_1, SSC_MODE_2, SSC_MODE_3}

  type union SscMode {
    SscMode_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type SscMode SscModeRm 

  type enumerated DnaiChangeType_enum { EARLY, EARLY_LATE, LATE}

  type union DnaiChangeType {
    DnaiChangeType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }



  type DnaiChangeType DnaiChangeTypeRm
  

  type enumerated RestrictionType_enum { ALLOWED_AREAS, NOT_ALLOWED_AREAS}

  type union RestrictionType {
    RestrictionType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }



  type RestrictionType RestrictionTypeRm
  

  type enumerated CoreNetworkType_enum { FiveGC, EPC}
    with {
      variant "text 'FiveGC' as '5GC'"
    }

  type union CoreNetworkType {
    CoreNetworkType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }



  type CoreNetworkType CoreNetworkTypeRm
  

  type enumerated PresenceState_enum { IN_AREA, OUT_OF_AREA, UNKNOWN, INACTIVE}

  type union PresenceState {
    PresenceState_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type set Snssai {
    integer sst (0..255),
    charstring sd optional// (pattern "^[A-Fa-f0-9]{6}$") 
  }

  type set PlmnId {
    Mcc    mcc,
    Mnc    mnc
  }

  type PlmnId PlmnIdRm 
  
  type set Tai {
    PlmnId    plmnId,
    Tac    tac
  }

  type Tai TaiRm
  
  type set Ecgi {
    PlmnId    plmnId,
    EutraCellId    eutraCellId
  }

  type Ecgi EcgiRm
  
  type set Ncgi {
    PlmnId    plmnId,
    NrCellId    nrCellId
  }

  type Ncgi NcgiRm
  
  type set UserLocation {
    EutraLocation    eutraLocation optional,
    NrLocation    nrLocation optional,
    N3gaLocation    n3gaLocation optional
  }

  type set EutraLocation {
    Tai    tai,
    Ecgi    ecgi,
    integer ageOfLocationInformation (0..32767) optional,
    DateTime    ueLocationTimestamp optional,
    charstring geographicalInformation optional, // (pattern "^[0-9A-F]{16}$")
    charstring geodeticInformation optional, // (pattern "^[0-9A-F]{20}$")
    GlobalRanNodeId    globalNgenbId optional
  }

  type EutraLocation EutraLocationRm
  
  type set NrLocation {
    Tai    tai,
    Ncgi    ncgi,
    integer ageOfLocationInformation (0..32767) optional,
    DateTime    ueLocationTimestamp optional,
    charstring geographicalInformation optional, // (pattern "^[0-9A-F]{16}$")
    charstring geodeticInformation optional, // (pattern "^[0-9A-F]{20}$")
    GlobalRanNodeId    globalGnbId optional
  }

  type NrLocation NrLocationRm
  
  type set N3gaLocation {
    Tai    n3gppTai optional,
    charstring n3IwfId  optional,// (pattern "^[A-Fa-f0-9]+$")
    Ipv4Addr    ueIpv4Addr optional,
    Ipv6Addr    ueIpv6Addr optional,
    Uinteger    portNumber optional
  }

  type set UpSecurity {
    UpIntegrity    upIntegr,
    UpConfidentiality    upConfid
  }

  type UpSecurity UpSecurityRm
  
  type set NgApCause {
    Uinteger    group_,
    Uinteger    value_
  } with {
    variant (group_) "name as 'group'"
    variant (value_) "name as 'value'"
  }


  type set BackupAmfInfo {
    AmfName    backupAmf,
    set of       Guami    guamiList optional
  }

  type set RefToBinaryData {
    charstring contentId
  }

  type RefToBinaryData RefToBinaryDataRm
  
  type set RouteToLocation {
    Dnai    dnai,
    RouteInformation    routeInfo optional,
    charstring routeProfId optional
  }

  type set RouteInformation {
    Ipv4Addr    ipv4Addr optional,
    Ipv6Addr    ipv6Addr optional,
    Uinteger    portNumber
  }

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


  type set Area {
    set of       Tac    tacs optional,
    set of       AreaCode    areaCodes optional
  }

  type set ServiceAreaRestriction {
    RestrictionType    restrictionType optional,
    set of       Area    areas optional,
    Uinteger    maxNumOfTAs optional
  }

  type set PresenceInfo {
    charstring praId optional,
    PresenceState    presenceState optional,
    set of       Tai    trackingAreaList optional,
    set of       Ecgi    ecgiList optional,
    set of       Ncgi    ncgiList optional,
    set of       GlobalRanNodeId    globalRanNodeIdList optional
  }

  type set GlobalRanNodeId {
    PlmnId    plmnId,
    charstring n3IwfId optional,
    NgRanIdentifier    ngRanNodeId optional
  }

  type integer Qfi (0..63)

  type Qfi QfiRm

  type integer FiveQi (0..255)
  
  type FiveQi FiveQiRm 

  type charstring BitRate // (pattern "^\d+(\.\d+)? (bps|Kbps|Mbps|Gbps|Tbps)$")

  type BitRate BitRateRm // (pattern "^\d+(\.\d+)? (bps|Kbps|Mbps|Gbps|Tbps)$")

  type integer ArpPriorityLevel (1..15)

  type integer FiveQiPriorityLevel (1..127)

  type FiveQiPriorityLevel FiveQiPriorityLevelRm

  type integer PacketDelBudget (1..infinity)

  type PacketDelBudget PacketDelBudgetRm

  type integer PacketErrRate

  type PacketErrRate PacketErrRateRm

  type integer PacketLossRate (0..1000)

  type PacketLossRate PacketLossRateRm

  type integer AverWindow (1..infinity)

  type AverWindow AverWindowRm

  type integer MaxDataBurstVol (1..infinity)

  type MaxDataBurstVol MaxDataBurstVolRm

  type enumerated PreemptionCapability_enum { NOT_PREEMPT, MAY_PREEMPT}

  type union PreemptionCapability {
    PreemptionCapability_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }

  
  type PreemptionCapability PreemptionCapabilityRm
  

  type enumerated PreemptionVulnerability_enum { NOT_PREEMPTABLE, PREEMPTABLE}

  type union PreemptionVulnerability {
    PreemptionVulnerability_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }



  type PreemptionVulnerability PreemptionVulnerabilityRm 
  

  type enumerated ReflectiveQoSAttribute_enum { RQOS, NO_RQOS}

  type union ReflectiveQoSAttribute {
    ReflectiveQoSAttribute_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type ReflectiveQoSAttribute ReflectiveQoSAttributeRm
  

  type enumerated NotificationControl_enum { REQUESTED, NOT_REQUESTED}

  type union NotificationControl {
    NotificationControl_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type NotificationControl NotificationControlRm
  

  type enumerated QosResourceType_enum { NON_GBR, NON_CRITICAL_GBR, CRITICAL_GBR}

  type union QosResourceType {
    QosResourceType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type QosResourceType QosResourceTypeRm
  

  type set Arp {
    ArpPriorityLevel    priorityLevel,
    PreemptionCapability    preemptCap,
    PreemptionVulnerability    preemptVuln
  }

  type Arp ArpRm
  
  type set Ambr {
    BitRate    uplink,
    BitRate    downlink
  }

  type Ambr AmbrRm
  
  type set Dynamic5Qi {
    QosResourceType    resourceType,
    FiveQiPriorityLevel    priorityLevel,
    PacketDelBudget    packetDelayBudget,
    PacketErrRate    packetErrRate,
    AverWindow    averWindow optional,
    MaxDataBurstVol    maxDataBurstVol optional
  } 

  type set NonDynamic5Qi {
    FiveQiPriorityLevel    priorityLevel optional,
    AverWindow    averWindow optional,
    MaxDataBurstVol    maxDataBurstVol optional
  }

  type enumerated TraceDepth_enum { MINIMUM, MEDIUM, MAXIMUM, MINIMUM_WO_VENDOR_EXTENSION, MEDIUM_WO_VENDOR_EXTENSION, MAXIMUM_WO_VENDOR_EXTENSION}

  type union TraceDepth {
    TraceDepth_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


 
  type TraceDepth TraceDepthRm
  

  type set TraceData {
    charstring traceRef, // (pattern "^[0-9]{3}[0-9]{2,3}-[A-Fa-f0-9]{6}$"),
    TraceDepth    traceDepth,
    charstring neTypeList, // (pattern "^[A-Fa-f0-9]+$"),
    charstring eventList, // (pattern "^[A-Fa-f0-9]+$"),
    Ipv4Addr    collectionEntityIpv4Addr optional,
    Ipv6Addr    collectionEntityIpv6Addr optional,
    charstring interfaceList optional // (pattern "^[A-Fa-f0-9]+$")
  }





} with {
  encode "JSON"
}
