///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2017 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:               NS_Types.ttcn
//  Rev:                R2A
//  Prodnr:             CNL 113 578
//  Updated:            2008-01-22
//  Contact:            http://ttcn.ericsson.se
//  Reference:          3GPP TS 48.016 7.3.0
 
module NS_Types
{    // beginning of module

// This module contains the Base Station System (BSS) Serving GPRS Support
// Node (SGSN) interface  Network Sevice protocol
//  48.016 v7.3.0 with attributes for RAW encoding/decoding.
// 
                 
// History:
// ********

import from General_Types all;

external function enc_PDU_NS(in PDU_NS pdu) return octetstring
with { extension "prototype(convert)"
       extension "encode(RAW)"
     } 
                
external function dec_PDU_NS(in octetstring stream) return PDU_NS
with { extension "prototype(convert)"
       extension "decode(RAW)"
     }

type record CauseNS
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
OCT1                     cause
}  with { 
        variant (lengthIndicator) "LENGTHTO (cause)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }

type record NS_VCI  
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
OCT2                     nS_VCI
} with { 
        variant (lengthIndicator) "LENGTHTO (nS_VCI)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }

type record NS_PDU  
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
octetstring              ns_PDU
} with { 
        variant (lengthIndicator) "LENGTHTO (ns_PDU)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }
 
type record BVCI_NS 
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
OCT2                     bVCI
} with { 
        variant (lengthIndicator) "LENGTHTO (bVCI)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }       

type record ListofIP4Elements 
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
IP4_Elements             iP4_Elements
}  with { 
        variant (lengthIndicator) "LENGTHTO (iP4_Elements)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }       

type record IP4_Element
{
OCT4                     ipAddress,
OCT2                     uDP_Port,
OCT1                     signallingWeight,
OCT1                     dataWeight
}

type record of IP4_Element IP4_Elements;

type record ListofIP6Elements 
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
IP6_Elements             iP6_Elements
}  with { 
        variant (lengthIndicator) "LENGTHTO (iP6_Elements)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }       

type record IP6_Element
{
OCT16                    ipAddress,
OCT2                     uDP_Port,
OCT1                     signallingWeight,
OCT1                     dataWeight
}

type record of IP6_Element IP6_Elements;

type record IP_Address_NS
{
OCT1                     iEI, 
OCT1                     addressType,
IPAddress                ipAddress
}with {
  variant (ipAddress) "CROSSTAG
    (
      ip4Address,    addressType = '01'O;
      ip6Address,    addressType = '02'O; 
    )"
}; 
     
type union IPAddress 
{
OCT4                     ip4Address,
OCT16                    ip6Address
}

type record EndFlag
{
BIT1                     eBIT,
BIT7                     spare
}

type record ResetFlag
{
OCT1                     iEI, 
BIT1                     resetBIT,
BIT7                     spare
}

type record MaxNumberOfNSVCs
{
OCT1                     iEI, 
OCT2                     maxNumberOfNSVCs 
}

type record NumberOfIP_Endpoints 
{
OCT1                     iEI, 
OCT2                     numberOfIP_Endpoints 
}


type record NSEI_NS
{
OCT1                     iEI, 
BIT1                     ext,
LIN1_2                   lengthIndicator,
OCT2                     nSEI
} with { 
        variant (lengthIndicator) "LENGTHTO (nSEI)";
        variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                             length2,         ext = '0'B;)";
        variant (ext,lengthIndicator) "FIELDORDER(msb)";
       }       

type record NS_SDU_ControlBits
{
BIT1                     rBit,
BIT1                     cBit,
BIT6                     spare
}

//same type def as LIN2_2a in BSSGP but named differently 
type union LIN1_2
{
integer length1,
integer length2
} with {
        variant (length1) "FIELDLENGTH(7)";
        variant (length2) "FIELDLENGTH(15)";
        variant (length2) "BYTEORDER(last)";
        variant (length1,length2) "FIELDORDER(msb)"
      }        


// PDUs ************************************************************


type record PDU_NS_Alive
{
OCT1                     nsPduType 
}

type record PDU_NS_Alive_Ack
{
OCT1                     nsPduType
}

type record PDU_NS_Block
{
OCT1                     nsPduType,
CauseNS                  causeNS,                        //TLV
NS_VCI                   nS_VCI                          //TLV
}

type record PDU_NS_Block_Ack
{
OCT1                     nsPduType,
NS_VCI                   nS_VCI                          //TLV
}

type record PDU_NS_Reset
{
OCT1                     nsPduType,
CauseNS                  causeNS,                        //TLV
NS_VCI                   nS_VCI,                         //TLV
NSEI_NS                  nSEI_NS                         //TLV      
}

type record PDU_NS_Reset_Ack
{
OCT1                     nsPduType,
NS_VCI                   nS_VCI,                         //TLV
NSEI_NS                  nSEI_NS                         //TLV      
}

type record PDU_NS_Status
{
OCT1                     nsPduType,
CauseNS                  causeNS,                        //TLV
NS_VCI                   nS_VCI              optional,   //TLV   
NS_PDU                   nS_PDU              optional,   //TLV
BVCI_NS                  bVCI_NS             optional,   //TLV
ListofIP4Elements        listofIP4Elements   optional,   //TLV
ListofIP6Elements        listofIP6Elements   optional    //TLV
} with { 
  variant "TAG (
                nS_VCI,                        iEI = '01'O;
                nS_PDU,                        iEI = '02'O;
                bVCI_NS,                       iEI = '03'O;
                listofIP4Elements,             iEI = '05'O;
		listofIP6Elements,             iEI = '06'O                 
        )"
}

type record PDU_NS_Unblock
{
OCT1                     nsPduType
}

type record PDU_NS_Unblock_Ack
{
OCT1                     nsPduType
}

type record PDU_NS_Unitdata
{
OCT1                     nsPduType,
NS_SDU_ControlBits       nS_SDU_ControlBits,              //V
OCT2                     bVCI,                            //V
octetstring              nS_SDU                           //V
// decoder interprets all octets after the 
// first 4 octets as NS SDU
}

type record PDU_SNS_Ack
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,                           //TLV
integer                  transactionID,                     //V
CauseNS                  causeNS             optional,      //TLV
IP_Address_NS            iP_Address_NS       optional,      //TV
ListofIP4Elements        listofIP4Elements   optional,      //TLV
ListofIP6Elements        listofIP6Elements   optional       //TLV
} with {
        variant (transactionID) "FIELDLENGTH(8)";
        variant "TAG (
                causeNS,                           iEI = '00'O;
                iP_Address_NS,                   iEI = '0B'O;
                listofIP4Elements,          iEI = '05'O;
                listofIP6Elements,          iEI = '06'O              
        )"
}

type record PDU_SNS_Add
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,                          //TLV
integer                  transactionID,                    //V
ListofIP4Elements        listofIP4Elements optional,       //TLV
ListofIP6Elements        listofIP6Elements optional        //TLV
} with {
        variant (transactionID) "FIELDLENGTH(8)";
        variant "TAG (
                listofIP4Elements,          iEI = '05'O;
                listofIP6Elements,          iEI = '06'O
         )"              
}

type record PDU_SNS_ChangeWeight
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,                         //TLV
integer                  transactionID,                   //V
ListofIP4Elements        listofIP4Elements optional,      //TLV
ListofIP6Elements        listofIP6Elements optional       //TLV
} with {
        variant (transactionID) "FIELDLENGTH(8)";
        variant "TAG (
                listofIP4Elements,          iEI = '05'O;
                listofIP6Elements,          iEI = '06'O
         )" 
}

type record PDU_SNS_Config
{
OCT1                     nsPduType,
EndFlag                  endFlag,                           //V
NSEI_NS                  nSEI_NS,                           //TLV
ListofIP4Elements        listofIP4Elements optional,        //TLV
ListofIP6Elements        listofIP6Elements optional         //TLV
} with { 
      variant "TAG (
                listofIP4Elements,          iEI = '05'O;
                listofIP6Elements,          iEI = '06'O
         )" 
}



type record PDU_SNS_Config_Ack
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,                               //TLV
CauseNS                  causeNS               optional         //TLV
} with { 
      variant "TAG (causeNS,                   iEI = '00'O;)"
}



type record PDU_SNS_Delete
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,                              //TLV
integer                  transactionID,                        //V
IP_Address_NS            iP_Address_NS         optional,       //TV
ListofIP4Elements        listofIP4Elements     optional,       //TLV
ListofIP6Elements        listofIP6Elements     optional        //TLV
} with {
        variant (transactionID) "FIELDLENGTH(8)";
        variant "TAG (
                iP_Address_NS,                        iEI = '0B'O;
                listofIP4Elements,                iEI = '05'O;
                listofIP6Elements,               iEI = '06'O
        )"
}

type record PDU_SNS_Size
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,                            //TLV
ResetFlag                resetFlag,                          //TV
MaxNumberOfNSVCs         maxNumberOfNSVCs,                   //TV
NumberOfIP_Endpoints     numberOfIP4_Endpoints    optional,  //TV
NumberOfIP_Endpoints     numberOfIP6_Endpoints    optional   //TV
} with { 
      variant "TAG (
                    numberOfIP4_Endpoints,                   iEI = '08'O;      
                    numberOfIP6_Endpoints,                   iEI = '09'O;
      )"  
}


type record PDU_SNS_Size_Ack
{
OCT1                     nsPduType,
NSEI_NS                  nSEI_NS,    
CauseNS                  causeNS             optional       //TLV
} with { 
      variant "TAG (causeNS,                   iEI = '00'O;)"
}



type union PDU_NS
{

PDU_NS_Alive                  pDU_NS_Alive,
PDU_NS_Alive_Ack              pDU_NS_Alive_Ack,
PDU_NS_Block                  pDU_NS_Block,
PDU_NS_Block_Ack              pDU_NS_Block_Ack,
PDU_NS_Reset                  pDU_NS_Reset,
PDU_NS_Reset_Ack              pDU_NS_Reset_Ack,
PDU_NS_Status                 pDU_NS_Status,
PDU_NS_Unblock                pDU_NS_Unblock,
PDU_NS_Unblock_Ack            pDU_NS_Unblock_Ack,
PDU_NS_Unitdata               pDU_NS_Unitdata,
PDU_SNS_Ack                   pDU_SNS_Ack,
PDU_SNS_Add                   pDU_SNS_Add,
PDU_SNS_ChangeWeight          pDU_SNS_ChangeWeight,
PDU_SNS_Config                pDU_SNS_Config,
PDU_SNS_Config_Ack            pDU_SNS_Config_Ack,
PDU_SNS_Delete                pDU_SNS_Delete,
PDU_SNS_Size                  pDU_SNS_Size,
PDU_SNS_Size_Ack              pDU_SNS_Size_Ack

} with { variant "TAG (              
                
                pDU_NS_Alive,           nsPduType ='0A'O;
                pDU_NS_Alive_Ack,       nsPduType ='0B'O;
                pDU_NS_Block,           nsPduType ='04'O;
                pDU_NS_Block_Ack,       nsPduType ='05'O;
                pDU_NS_Reset,           nsPduType ='02'O;
                pDU_NS_Reset_Ack,       nsPduType ='03'O;
                pDU_NS_Status,          nsPduType ='08'O;
                pDU_NS_Unblock,         nsPduType ='06'O;
                pDU_NS_Unblock_Ack,     nsPduType ='07'O;
                pDU_NS_Unitdata,        nsPduType ='00'O;
                pDU_SNS_Ack,            nsPduType ='0C'O;
                pDU_SNS_Add,            nsPduType ='0D'O;
                pDU_SNS_ChangeWeight,   nsPduType ='0E'O;
                pDU_SNS_Config,         nsPduType ='0F'O;
                pDU_SNS_Config_Ack,     nsPduType ='10'O;
                pDU_SNS_Delete,         nsPduType ='11'O;
                pDU_SNS_Size,           nsPduType ='12'O;
                pDU_SNS_Size_Ack,       nsPduType ='13'O

              )"
}


}with{ encode "RAW"} // end of module
