330 lines
7.1 KiB
Plaintext
330 lines
7.1 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// 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: LLC_Types.ttcn
|
|
// Description: This module contains the Logical Link Control protocol (LLC)
|
|
// 44.064 v7.1.0 with attributes for RAW encoding/decoding.
|
|
// Rev: R1A0
|
|
// Prodnr: CNL 113 577
|
|
// Updated: 2008-01-22
|
|
// Contact: http://ttcn.ericsson.se
|
|
// Reference: 3GPP TS 44.064 7.1.0
|
|
|
|
module LLC_Types
|
|
{
|
|
|
|
import from General_Types all;
|
|
|
|
external function enc_PDU_LLC(in PDU_LLC pdu) return octetstring;
|
|
external function dec_PDU_LLC(in octetstring stream) return PDU_LLC;
|
|
|
|
type record Version
|
|
{
|
|
integer version_value (0..15),
|
|
BIT4 spare
|
|
|
|
} with {
|
|
variant (version_value) "FIELDLENGTH(4)";
|
|
}
|
|
|
|
type octetstring IOV_UI length(4)
|
|
|
|
|
|
type octetstring IOV_I length(4)
|
|
|
|
|
|
type record T200
|
|
{
|
|
BIT4 spare,
|
|
integer t200Value
|
|
} with {
|
|
variant (t200Value) "FIELDLENGTH(12)";
|
|
variant (t200Value) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
};
|
|
|
|
|
|
type record N200
|
|
{
|
|
integer retransmissions (0..15),
|
|
BIT4 spare
|
|
} with {
|
|
variant (retransmissions) "FIELDLENGTH(4)";
|
|
}
|
|
|
|
|
|
type record N201_U
|
|
{
|
|
BIT5 spare,
|
|
integer n201UValue
|
|
} with {
|
|
variant (n201UValue) "FIELDLENGTH(11)";
|
|
variant (n201UValue) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
};
|
|
|
|
|
|
type record N201_I
|
|
{
|
|
BIT5 spare,
|
|
integer n201IValue
|
|
}
|
|
with {
|
|
variant (n201IValue) "FIELDLENGTH(11)";
|
|
variant (n201IValue) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
};
|
|
|
|
type record MD
|
|
{
|
|
BIT1 spare,
|
|
integer mDValue
|
|
} with {
|
|
variant (mDValue) "FIELDLENGTH(15)";
|
|
variant (mDValue) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
};
|
|
|
|
|
|
type record MU
|
|
{
|
|
BIT1 spare,
|
|
integer mUValue
|
|
} with {
|
|
variant (mUValue) "FIELDLENGTH(15)";
|
|
variant (mUValue) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
};
|
|
|
|
type integer KD with {variant "FIELDLENGTH(8)";};
|
|
|
|
type integer KU with {variant "FIELDLENGTH(8)";};
|
|
|
|
type octetstring L3param;
|
|
|
|
type octetstring Reset_LLC length(0);
|
|
|
|
type union XID_Data
|
|
{
|
|
Version version,
|
|
IOV_UI iOV_UI,
|
|
IOV_I iOV_I,
|
|
T200 t200,
|
|
N200 n200,
|
|
N201_U n201_U,
|
|
N201_I n201_I,
|
|
MD mD,
|
|
MU mU,
|
|
KD kD,
|
|
KU kU,
|
|
L3param l3param,
|
|
Reset_LLC reset
|
|
}
|
|
|
|
|
|
type union XID_length
|
|
{
|
|
integer short_len,
|
|
integer long_len
|
|
}with {
|
|
variant (short_len) "FIELDLENGTH(2)";
|
|
variant (long_len) "FIELDLENGTH(8)";
|
|
variant (long_len) "BYTEORDER(last)";
|
|
variant (short_len) "FIELDORDER(msb)";
|
|
variant (long_len) "FIELDORDER(msb)";
|
|
|
|
}
|
|
|
|
|
|
type record XID
|
|
{
|
|
BIT1 xl,
|
|
BIT5 typefield,
|
|
XID_length xID_length,
|
|
//Header_XID header_XID,
|
|
XID_Data xID_Data
|
|
} with {
|
|
variant (xID_Data) "CROSSTAG( version, typefield = '00000'B;
|
|
iOV_UI, typefield = '00001'B;
|
|
iOV_I, typefield = '00010'B;
|
|
t200, typefield = '00011'B;
|
|
n200, typefield = '00100'B;
|
|
n201_U, typefield = '00101'B;
|
|
n201_I, typefield = '00110'B;
|
|
mD, typefield = '00111'B;
|
|
mU, typefield = '01000'B;
|
|
kD, typefield = '01001'B;
|
|
kU, typefield = '01010'B;
|
|
l3param, typefield = '01011'B;
|
|
reset, typefield = '01100'B;
|
|
|
|
)";
|
|
variant "FIELDORDER(msb)";
|
|
variant (xID_length) "CROSSTAG( short_len, xl = '0'B;
|
|
long_len, xl = '1'B;)";
|
|
variant (xID_length) "LENGTHTO (xID_Data)"
|
|
|
|
variant (xID_length) "PADDING(yes)"
|
|
};
|
|
|
|
|
|
type record RejectedFrameControlField_UI
|
|
{
|
|
Control_field_UI control_field,
|
|
OCT4 spare
|
|
}
|
|
|
|
|
|
type record RejectedFrameControlField_U
|
|
{
|
|
Control_field_U control_field,
|
|
OCT5 spare
|
|
}
|
|
|
|
|
|
type union RejectedFrameControlField
|
|
{
|
|
RejectedFrameControlField_UI rejectedFrameControlField_UI,
|
|
RejectedFrameControlField_U rejectedFrameControlField_U
|
|
} with {
|
|
variant "TAG(rejectedFrameControlField_UI, control_field.format = '110'B;
|
|
rejectedFrameControlField_U, control_field.format = '111'B;
|
|
)";
|
|
};
|
|
|
|
|
|
type record of XID UA_Information;
|
|
|
|
type record of XID SABM_Information;
|
|
|
|
type record of XID XID_Information;
|
|
|
|
|
|
type octetstring DM_Information length(0);
|
|
|
|
|
|
type record FRMR_Information
|
|
{
|
|
RejectedFrameControlField rejectedFrameControlField,
|
|
BIT4 spare1,
|
|
BIT9 vS,
|
|
BIT1 spare2,
|
|
BIT9 vR,
|
|
BIT1 cR,
|
|
BIT4 spare3,
|
|
BIT1 w4,
|
|
BIT1 w3,
|
|
BIT1 w2,
|
|
BIT1 w1
|
|
} with {
|
|
variant (vS) "BYTEORDER(last)";
|
|
variant (vR) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
};
|
|
|
|
|
|
type record Address_field
|
|
{
|
|
BIT4 sAPI,
|
|
BIT2 spare, // '00'B
|
|
BIT1 cR,
|
|
BIT1 pD //'0' for LLC
|
|
}
|
|
|
|
type record Control_field_U
|
|
{
|
|
BIT4 mBits,
|
|
BIT1 pF,
|
|
BIT3 format // '111'B
|
|
}
|
|
|
|
|
|
|
|
type record Control_field_UI
|
|
|
|
{
|
|
BIT3 format, // '110'B
|
|
BIT2 spare,
|
|
integer nU, //BIT9
|
|
BIT1 e,
|
|
BIT1 pM
|
|
} with {
|
|
|
|
variant (nU) "FIELDLENGTH(9)";
|
|
variant (nU) "BYTEORDER(last)";
|
|
variant "FIELDORDER(msb)";
|
|
}
|
|
|
|
|
|
type union Information_field_U
|
|
{
|
|
UA_Information uA,
|
|
SABM_Information sABM,
|
|
FRMR_Information fRMR,
|
|
DM_Information dM,
|
|
XID_Information xID
|
|
};
|
|
|
|
|
|
type record PDU_LLC_UI
|
|
{
|
|
Address_field address_field,
|
|
Control_field_UI control_field,
|
|
octetstring information_field_UI,
|
|
OCT3 fCS optional
|
|
// fCS ENCODING:
|
|
//'000000'O in send template -> generate CRC,
|
|
// omit in send template -> generate CRC,
|
|
// otherwise send out fCS in send template
|
|
//
|
|
// DECODING:
|
|
// decoder generates '000000'O if CRC OK
|
|
}
|
|
|
|
|
|
|
|
type record PDU_LLC_U
|
|
{
|
|
Address_field address_field,
|
|
Control_field_U control_field,
|
|
Information_field_U information_field_U,
|
|
OCT3 fCS optional
|
|
// ENCODING:
|
|
//'000000'O in send template -> generate CRC,
|
|
// omit in send template -> generate CRC,
|
|
// otherwise send out fCS in send template
|
|
//
|
|
// DECODING:
|
|
// decoder generates '000000'O if CRC OK
|
|
} with {
|
|
variant (information_field_U) "CROSSTAG( uA, control_field.mBits = '0110'B;
|
|
sABM, control_field.mBits = '0111'B;
|
|
fRMR, control_field.mBits = '1000'B;
|
|
dM, control_field.mBits = '0001'B;
|
|
xID, control_field.mBits = '1011'B;
|
|
)";
|
|
};
|
|
|
|
|
|
type union PDU_LLC
|
|
{
|
|
PDU_LLC_UI pDU_LLC_UI,
|
|
PDU_LLC_U pDU_LLC_U
|
|
} with { variant "TAG (
|
|
pDU_LLC_UI, control_field.format ='110'B;
|
|
pDU_LLC_U, control_field.format ='111'B;
|
|
)"
|
|
};
|
|
|
|
|
|
|
|
}with{ encode "RAW"}// end of module
|