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

  import from TS29571_CommonData all

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

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

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

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



  type set SorInfo {
    set of       SteeringInfo    steeringInfoList,
    AckInd    ackInd
  }

  type set SorSecurityInfo {
    SorMac    sorMacIausf,
    CounterSor    counterSor,
    SorMac    sorXmacIue optional
  }

  type set SteeringInfo {
    TS29571_CommonData.PlmnId    plmnId,
    set of       AccessTech    accessTechList optional
  }

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

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

  type boolean AckInd

  type enumerated AccessTech_enum { NR, EUTRAN_IN_WBS1_MODE_AND_NBS1_MODE, EUTRAN_IN_NBS1_MODE_ONLY, EUTRAN_IN_WBS1_MODE_ONLY, UTRAN, GSM_AND_ECGSM_IoT, GSM_WITHOUT_ECGSM_IoT, ECGSM_IoT_ONLY, CDMA_1xRTT, CDMA_HRPD, GSM_COMPACT}

  type union AccessTech {
    AccessTech_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }






} with {
  encode "JSON"
}
