///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright Test Competence Center (TCC) ETH 2008                           //
//                                                                           //
// The copyright to the computer  program(s) herein  is the property of TCC. //
// The program(s) may be used and/or copied only with the written permission //
// of TCC or in accordance with  the terms and conditions  stipulated in the //
// agreement/contract under which the program(s) has been supplied.          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
//
//  File:               NS_Types.ttcn
//  Rev:                R1A01
//  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
