596 lines
24 KiB
Plaintext
596 lines
24 KiB
Plaintext
/******************************************************************************/
|
|
// @copyright Copyright Notification
|
|
// No part may be reproduced except as authorized by written permission.
|
|
// The copyright and the foregoing restriction extend to reproduction in all media.
|
|
// Trademark 2012, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC).
|
|
// All rights reserved.
|
|
// @version: 36.523-3v10.1.0
|
|
// $Date: 2012-09-03 10:54:34 +0200 (Mon, 03 Sep 2012) $
|
|
// $Rev: 7249 $
|
|
/******************************************************************************/
|
|
|
|
module CommonDefs {
|
|
|
|
//----------------------------------------------------------------------------
|
|
// type definitions:
|
|
|
|
type bitstring B1_Type length(1);
|
|
type bitstring B2_Type length(2);
|
|
type bitstring B3_Type length(3);
|
|
type bitstring B4_Type length(4);
|
|
type bitstring B5_Type length(5);
|
|
type bitstring B6_Type length(6);
|
|
type bitstring B7_Type length(7);
|
|
type bitstring B7_15_Type length(7..15); // NOTE: length restriction can only be a range but not two destinct lengths
|
|
type bitstring B8_Type length(8);
|
|
type bitstring B9_Type length(9);
|
|
type bitstring B10_Type length(10);
|
|
type bitstring B11_Type length(11);
|
|
type bitstring B12_Type length(12);
|
|
type bitstring B14_Type length(14);
|
|
type bitstring B15_Type length(15);
|
|
type bitstring B16_Type length(16);
|
|
type bitstring B20_Type length(20);
|
|
type bitstring B24_Type length(24);
|
|
type bitstring B27_Type length(27);
|
|
type bitstring B28_Type length(28);
|
|
type bitstring B32_Type length(32);
|
|
type bitstring B36_Type length(36);
|
|
type bitstring B40_Type length(40);
|
|
type bitstring B41_Type length(41);
|
|
type bitstring B43_Type length(43);
|
|
type bitstring B47_Type length(47);
|
|
type bitstring B48_Type length(48);
|
|
type bitstring B56_Type length(56);
|
|
type bitstring B64_Type length(64);
|
|
type bitstring B80_Type length(80);
|
|
type bitstring B112_Type length(112);
|
|
type bitstring B128_Type length(128);
|
|
type bitstring B160_Type length(160);
|
|
type bitstring B192_Type length(192);
|
|
type bitstring B256_Type length(256);
|
|
type bitstring B32_128_Type length(32..128);
|
|
|
|
type B128_Type B128_Key_Type; /* 128 bit security key */
|
|
type B256_Type B256_Key_Type; /* 256 bit security key */
|
|
|
|
type octetstring O1_Type length(1);
|
|
type octetstring O2_Type length(2);
|
|
type octetstring O3_Type length(3);
|
|
type octetstring O4_Type length(4);
|
|
type octetstring O5_Type length(5);
|
|
type octetstring O6_Type length(6);
|
|
type octetstring O8_Type length(8);
|
|
type octetstring O9_Type length(9);
|
|
type octetstring O10_Type length(10);
|
|
type octetstring O14_Type length(14);
|
|
type octetstring O13_Type length(14);
|
|
type octetstring O15_Type length(15);
|
|
type octetstring O16_Type length(16);
|
|
type octetstring O32_Type length(32);
|
|
type octetstring O43_Type length(43);
|
|
|
|
type hexstring H2_Type length(2);
|
|
type hexstring H4_Type length(4);
|
|
|
|
type boolean Null_Type (true); // dummy type for 'typeless' fields in unions
|
|
type boolean Dummy_Type (true); // dummy type for temporary purposes only
|
|
|
|
const integer tsc_UInt8Max := 255;
|
|
const integer tsc_UInt16Max := 65535;
|
|
const integer tsc_UInt20Max := 1048575;
|
|
const integer tsc_UInt32Max := 4294967295;
|
|
|
|
type integer UInt_Type (0 .. infinity);
|
|
type integer UInt8_Type (0 .. tsc_UInt8Max);
|
|
type integer UInt16_Type (0 .. tsc_UInt16Max);
|
|
type integer UInt20_Type (0 .. tsc_UInt20Max);
|
|
type integer UInt32_Type (0 .. tsc_UInt32Max);
|
|
|
|
type charstring Char1_Type length (1);
|
|
type record of Char1_Type Char1List_Type;
|
|
type record of charstring CharStringList_Type;
|
|
|
|
type record of integer IntegerList_Type;
|
|
|
|
type enumerated SinglePLMN_TestedType {SinglePLMN, MultiPLMN, MultiPLMNinPrimaryBand, MultiPLMNinSecondaryBand}; // @sic R5-123667 sic@
|
|
type enumerated EUTRA_ATTACH_TESTED_Type { EPS_ATTACH_ONLY, COMBINED_ATTACH};
|
|
type enumerated NAS_ATTACH_STATE_Type {ATTACHED, DETACHED};
|
|
type enumerated UTRAN_FDD_TDD_Type {UTRAN_FDD, UTRAN_TDD};
|
|
type enumerated RATComb_Tested_Type {EUTRA_UTRA, EUTRA_GERAN, EUTRA_Only};
|
|
|
|
type enumerated EUTRA_CellId_Type {
|
|
eutra_Cell_NonSpecific,
|
|
eutra_Cell1,
|
|
eutra_Cell2,
|
|
eutra_Cell3,
|
|
eutra_Cell4,
|
|
eutra_Cell6,
|
|
eutra_Cell10,
|
|
eutra_Cell11,
|
|
eutra_Cell12,
|
|
eutra_Cell13,
|
|
eutra_Cell14,
|
|
eutra_Cell23,
|
|
eutra_Cell28,
|
|
eutra_Cell29,
|
|
eutra_Cell30,
|
|
eutra_CellA,
|
|
eutra_CellB,
|
|
eutra_CellC,
|
|
eutra_CellD,
|
|
eutra_CellE,
|
|
eutra_CellG,
|
|
eutra_CellH,
|
|
eutra_CellI,
|
|
eutra_CellJ,
|
|
eutra_CellK,
|
|
eutra_CellL,
|
|
eutra_CellM
|
|
};
|
|
|
|
// To indicate which PTCs are configured (EUTRA alone is included for completeness)
|
|
type enumerated IRAT_ConfiguredPTCs_Type { EUTRA_Only, EUTRA_UTRAN, EUTRA_GERAN, EUTRA_UTRAN_GERAN, EUTRA_CDMA2000, UTRAN_Only } /* @status APPROVED */
|
|
|
|
|
|
// definitions needed for IP and IMS handling
|
|
const integer tsc_NoOfPDNs := 2; /* @status APPROVED */
|
|
const integer tsc_Index_PDN1 := 0; /* @status APPROVED */
|
|
const integer tsc_Index_PDN2 := 1; /* @status APPROVED */
|
|
type enumerated PDN_Index_Type { PDN_1 (0), PDN_2 (1) };
|
|
|
|
//----------------------------------------------------------------------------
|
|
// constant to generate PRBS sequence
|
|
const octetstring tsc_RandomPRBS := /* @status APPROVED */
|
|
'FFE665A5C5CA3452085408ABEECE4B0B813FD337873F2CD1E29AE91BD6C8E14F'O
|
|
& 'DE630F8195688EBE465F09816A8EEB1B83953DD362DAE3B06D5B76D8E3E53087'O
|
|
& 'EA645A09017FD99C3CACBB46DF1CD61DA9C435F89943DF9CC34ADEE31AD6E24F'O
|
|
& 'A1903D53778D949742750DD49DE9CE9E430AD448A14575D89C16025508814020'O //octets 0 .. 127
|
|
& '0555DDC9CBCB9EC31F833F866A5BA390680EAB11282EAE44F5E7658F6B247A0C'O
|
|
& '54A21057F73278595C235077F267A59097E8CEB4EDE49A16FDB36D2485EA3107'O
|
|
& 'D59DC360700D5488BEB9B96C24AF44DF498BC135788C14A8BBEC64A5EF64DA1C'O
|
|
& '5608FEB312D7B738D3E2CFB4C74A7458A3EF9B3C79F3CD348740DFE330780C01'O //octets 128 .. 255
|
|
& 'FFCCCB4B8B9468A410A81157DD9C9617027FA66F0E7E59A3C535D237AD91C29F'O
|
|
& 'BCC61F032AD11D7C8CBE1302D51DD637072A7BA6C5B5C760DAB6EDB1C7CA610F'O
|
|
& 'D4C8B41202FFB3387959768DBE39AC3B53886BF13287BF398695BDC635ADC49F'O
|
|
& '43207AA6EF1B292E84EA1BA93BD39D3C8615A891428AEBB1382C04AA11028040'O //octets 256 .. 383
|
|
& '0AABBB9397973D863F067F0CD4B74720D01D5622505D5C89EBCECB1ED648F418'O
|
|
& 'A94420AFEE64F0B2B846A0EFE4CF4B212FD19D69DBC9342DFB66DA490BD4620F'O
|
|
& 'AB3B86C0E01AA9117D7372D8495E89BE9317826AF118295177D8C94BDEC9B438'O
|
|
& 'AC11FD6625AF6E71A7C59F698E94E8B147DF3678F3E79A690E81BFC660F01803'O //octets 384 .. 511
|
|
& 'FF9996971728D148215022AFBB392C2E04FF4CDE1CFCB3478A6BA46F5B23853F'O
|
|
& '798C3E0655A23AF9197C2605AA3BAC6E0E54F74D8B6B8EC1B56DDB638F94C21F'O
|
|
& 'A991682405FF6670F2B2ED1B7C735876A710D7E2650F7E730D2B7B8C6B5B893E'O
|
|
& '8640F54DDE36525D09D4375277A73A790C2B51228515D7627058095422050080'O //octets 512 .. 639
|
|
& '155777272F2E7B0C7E0CFE19A96E8E41A03AAC44A0BAB913D79D963DAC91E831'O
|
|
& '5288415FDCC9E165708D41DFC99E96425FA33AD3B792685BF6CDB49217A8C41F'O
|
|
& '56770D81C0355222FAE6E5B092BD137D262F04D5E23052A2EFB19297BD936871'O
|
|
& '5823FACC4B5EDCE34F8B3ED31D29D1628FBE6CF1E7CF34D21D037F8CC1E03007'O //octets 640 .. 767
|
|
& 'FF332D2E2E51A29042A0455F7672585C09FE99BC39F9668F14D748DEB6470A7E'O
|
|
& 'F3187C0CAB4475F232F84C0B547758DC1CA9EE9B16D71D836ADBB6C71F29843F'O
|
|
& '5322D0480BFECCE1E565DA36F8E6B0ED4E21AFC4CA1EFCE61A56F718D6B7127D'O
|
|
& '0C81EA9BBC6CA4BA13A86EA4EF4E74F21856A2450A2BAEC4E0B012A8440A0100'O //octets 768 .. 895
|
|
& '2AAEEE4E5E5CF618FC19FC3352DD1C834075588941757227AF3B2C7B5923D062'O
|
|
& 'A51082BFB993C2CAE11A83BF933D2C84BF4675A76F24D0B7ED9B69242F51883E'O
|
|
& 'ACEE1B03806AA445F5CDCB61257A26FA4C5E09ABC460A545DF63252F7B26D0E2'O
|
|
& 'B047F59896BDB9C69F167DA63A53A2C51F7CD9E3CF9E69A43A06FF1983C0600F'O //octets 896 .. 1023
|
|
& 'FE665A5C5CA3452085408ABEECE4B0B813FD337873F2CD1E29AE91BD6C8E14FD'O
|
|
& 'E630F8195688EBE465F09816A8EEB1B83953DD362DAE3B06D5B76D8E3E53087E'O
|
|
& 'A645A09017FD99C3CACBB46DF1CD61DA9C435F89943DF9CC34ADEE31AD6E24FA'O
|
|
& '1903D53778D949742750DD49DE9CE9E430AD448A14575D89C160255088140200'O //octets 1024 .. 1151
|
|
& '555DDC9CBCB9EC31F833F866A5BA390680EAB11282EAE44F5E7658F6B247A0C5'O
|
|
& '4A21057F73278595C235077F267A59097E8CEB4EDE49A16FDB36D2485EA3107D'O
|
|
& '59DC360700D5488BEB9B96C24AF44DF498BC135788C14A8BBEC64A5EF64DA1C5'O
|
|
& '608FEB312D7B738D3E2CFB4C74A7458A3EF9B3C79F3CD348740DFE330780C01F'O //octets 1152 .. 1279
|
|
& 'FCCCB4B8B9468A410A81157DD9C9617027FA66F0E7E59A3C535D237AD91C29FB'O
|
|
& 'CC61F032AD11D7C8CBE1302D51DD637072A7BA6C5B5C760DAB6EDB1C7CA610FD'O
|
|
& '4C8B41202FFB3387959768DBE39AC3B53886BF13287BF398695BDC635ADC49F4'O
|
|
& '3207AA6EF1B292E84EA1BA93BD39D3C8615A891428AEBB1382C04AA110280400'O //octets 1280 .. 1407
|
|
& 'AABBB9397973D863F067F0CD4B74720D01D5622505D5C89EBCECB1ED648F418A'O
|
|
& '94420AFEE64F0B2B846A0EFE4CF4B212FD19D69DBC9342DFB66DA490BD4620FA'O
|
|
& 'B3B86C0E01AA9117D7372D8495E89BE9317826AF118295177D8C94BDEC9B438A'O
|
|
& 'C11FD6625AF6E71A7C59F698E94E8B147DF3678F3E79A690E81BFC660F01803F'O //octets 1408 .. 1535
|
|
& 'F9996971728D148215022AFBB392C2E04FF4CDE1CFCB3478A6BA46F5B23853F7'O
|
|
& '98C3E0655A23AF9197C2605AA3BAC6E0E54F74D8B6B8EC1B56DDB638F94C21FA'O
|
|
& '991682405FF6670F2B2ED1B7C735876A710D7E2650F7E730D2B7B8C6B5B893E8'O
|
|
& '640F54DDE36525D09D4375277A73A790C2B51228515D76270580954220500801'O //octets 1536 .. 1663
|
|
& '55777272F2E7B0C7E0CFE19A96E8E41A03AAC44A0BAB913D79D963DAC91E8315'O
|
|
& '288415FDCC9E165708D41DFC99E96425FA33AD3B792685BF6CDB49217A8C41F5'O
|
|
& '6770D81C0355222FAE6E5B092BD137D262F04D5E23052A2EFB19297BD9368715'O
|
|
& '823FACC4B5EDCE34F8B3ED31D29D1628FBE6CF1E7CF34D21D037F8CC1E03007F'O //octets 1664 .. 1791
|
|
& 'F332D2E2E51A29042A0455F7672585C09FE99BC39F9668F14D748DEB6470A7EF'O
|
|
& '3187C0CAB4475F232F84C0B547758DC1CA9EE9B16D71D836ADBB6C71F29843F5'O
|
|
& '322D0480BFECCE1E565DA36F8E6B0ED4E21AFC4CA1EFCE61A56F718D6B7127D0'O
|
|
& 'C81EA9BBC6CA4BA13A86EA4EF4E74F21856A2450A2BAEC4E0B012A8440A01002'O //octets 1792 .. 1919
|
|
& 'AAEEE4E5E5CF618FC19FC3352DD1C834075588941757227AF3B2C7B5923D062A'O
|
|
& '51082BFB993C2CAE11A83BF933D2C84BF4675A76F24D0B7ED9B69242F51883EA'O
|
|
& 'CEE1B03806AA445F5CDCB61257A26FA4C5E09ABC460A545DF63252F7B26D0E2B'O
|
|
& '047F59896BDB9C69F167DA63A53A2C51F7CD9E3CF9E69A43A06FF1983C0600'O; //octets 1920 .. 2046
|
|
|
|
//----------------------------------------------------------------------------
|
|
// common functions:
|
|
|
|
type integer LineNo_Type;
|
|
|
|
/*
|
|
* @desc local function
|
|
* @param p_FileName
|
|
* @param p_LineNo
|
|
* @param p_Msg
|
|
* @return charstring
|
|
* @status APPROVED
|
|
*/
|
|
function fl_FormatLog(charstring p_FileName,
|
|
LineNo_Type p_LineNo,
|
|
charstring p_Msg) return charstring
|
|
{
|
|
var charstring v_LineNoStr := int2str(p_LineNo);
|
|
|
|
return p_FileName & ":" & v_LineNoStr & ": " & p_Msg; /* common "UNIX style" format as e.g. used by grep;
|
|
* the final format for this output is FFS */
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc function for common error logging
|
|
* @param p_FileName
|
|
* @param p_LineNo
|
|
* @param p_Msg
|
|
* @status APPROVED
|
|
*/
|
|
function f_ErrorLog(charstring p_FileName,
|
|
LineNo_Type p_LineNo,
|
|
charstring p_Msg)
|
|
{
|
|
log(fl_FormatLog(p_FileName, p_LineNo, p_Msg));
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc common function for verdict assignment
|
|
* @param p_Verdict
|
|
* @param p_FileName
|
|
* @param p_LineNo
|
|
* @param p_Msg
|
|
* @status APPROVED
|
|
*/
|
|
function f_SetVerdict(verdicttype p_Verdict,
|
|
charstring p_FileName,
|
|
LineNo_Type p_LineNo,
|
|
charstring p_Msg)
|
|
{
|
|
var charstring v_OutputLine := fl_FormatLog(p_FileName, p_LineNo, p_Msg);
|
|
setverdict(p_Verdict, v_OutputLine);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc Common functions to be called in case unrecoverable errors
|
|
* (i.e. runtimer errors generated by TTCN)
|
|
* @param p_FileName
|
|
* @param p_LineNo
|
|
* @param p_Msg
|
|
* @status APPROVED
|
|
*/
|
|
function FatalError(charstring p_FileName,
|
|
LineNo_Type p_LineNo,
|
|
charstring p_Msg)
|
|
{
|
|
// setverdict(inconc); // setverdict causes problems when FatalError is used in a function called from within a template
|
|
f_ErrorLog(p_FileName, p_LineNo, p_Msg);
|
|
testcase.stop (p_Msg); // This operation now defined in TTCN3 v4.2.1
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc Common function to delay the test case for the given time
|
|
* @param p_DelayTime
|
|
* @status APPROVED
|
|
*/
|
|
function f_Delay ( float p_DelayTime )
|
|
{
|
|
timer t_Delay;
|
|
|
|
t_Delay.start ( p_DelayTime );
|
|
t_Delay.timeout;
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function f_TemplateBit2Int(template (present) integer p_Val,
|
|
integer p_Length) return template bitstring
|
|
{ /* Auxiliary function
|
|
* note: there is no possibility in TTCN-3 to check whether a template parameter
|
|
* which is not a value is "*", "?" or omit
|
|
* => we restrict p_Val to "template (present)", i.e it shall be a value or "?" */
|
|
if (isvalue(p_Val)) {
|
|
return int2bit(valueof(p_Val), p_Length);
|
|
} else {
|
|
return ?;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc returns index of first occurency of any char of p_CharList in p_String starting from p_StartIndex;
|
|
* returns -1 if there is no occurency
|
|
* @param p_String
|
|
* @param p_CharList
|
|
* @param p_StartIndex
|
|
* @return integer
|
|
* @status APPROVED
|
|
*/
|
|
function f_StringFindChar(charstring p_String,
|
|
Char1List_Type p_CharList,
|
|
UInt_Type p_StartIndex) return integer
|
|
{
|
|
var integer v_NoOfChars := lengthof(p_CharList);
|
|
var integer v_Index;
|
|
var integer i;
|
|
var Char1_Type v_Char;
|
|
|
|
if (v_NoOfChars == 0) {
|
|
return -1;
|
|
}
|
|
|
|
for (v_Index:=p_StartIndex; v_Index<lengthof(p_String); v_Index:=v_Index+1) {
|
|
v_Char := p_String[v_Index];
|
|
for (i:=0; i<v_NoOfChars; i:=i+1) {
|
|
if (v_Char == p_CharList[i]) {
|
|
return v_Index;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
function f_StringToLower(charstring p_String) return charstring
|
|
{
|
|
var integer i;
|
|
var integer v_StrLen := lengthof(p_String);
|
|
var integer v_Value;
|
|
var charstring v_String := "";
|
|
|
|
for (i := 0; i < v_StrLen; i := i+1) {
|
|
v_Value := char2int(p_String[i]);
|
|
if ((64 < v_Value) and (v_Value < 91)) {
|
|
v_Value := v_Value + 32;
|
|
}
|
|
v_String[i] := int2char(v_Value);
|
|
}
|
|
return v_String;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc returns list of strings after split
|
|
* @param p_String
|
|
* @param p_SplitCharList
|
|
* @return CharStringList_Type
|
|
* @status APPROVED
|
|
*/
|
|
function f_StringSplit(charstring p_String,
|
|
Char1List_Type p_SplitCharList) return CharStringList_Type
|
|
{
|
|
var CharStringList_Type v_StringList;
|
|
var integer v_Index;
|
|
var integer v_SubStrLen;
|
|
var integer v_StartIndex := 0;
|
|
var integer v_StrLen := lengthof(p_String);
|
|
var integer v_StrCnt := 0;
|
|
var boolean v_Break := false;
|
|
|
|
while (not v_Break) {
|
|
v_Index := f_StringFindChar(p_String, p_SplitCharList, v_StartIndex);
|
|
if (v_Index<0) {
|
|
v_SubStrLen := v_StrLen - v_StartIndex;
|
|
v_Break := true;
|
|
} else {
|
|
v_SubStrLen := v_Index - v_StartIndex;
|
|
}
|
|
v_StringList[v_StrCnt] := substr(p_String, v_StartIndex, v_SubStrLen);
|
|
v_StrCnt := v_StrCnt + 1;
|
|
v_StartIndex := v_Index + 1; // skip the split char
|
|
}
|
|
return v_StringList;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function f_ConvertBoolToBit(boolean p_Bool) return B1_Type
|
|
{
|
|
var B1_Type v_Bit := '0'B;
|
|
if (p_Bool) {
|
|
v_Bit := '1'B;
|
|
}
|
|
return v_Bit;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc return octet-aligned bitstring
|
|
* @param p_Bitstring
|
|
* @return bitstring
|
|
* @status APPROVED
|
|
*/
|
|
function f_OctetAlignedBitString( bitstring p_Bitstring) return bitstring
|
|
{ // @sic R5s100324 change 3 sic@
|
|
var bitstring v_Bitstring := p_Bitstring;
|
|
var integer v_BitLength := lengthof(p_Bitstring);
|
|
var integer v_PaddingLength;
|
|
var integer i;
|
|
|
|
if ((v_BitLength mod 8) > 0) // if not already byte aligned
|
|
{
|
|
v_PaddingLength := 8 - (v_BitLength mod 8);
|
|
for (i:=0; i < v_PaddingLength; i := i+1)
|
|
{
|
|
v_Bitstring := v_Bitstring & '0'B;
|
|
}
|
|
}
|
|
|
|
return v_Bitstring;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc function to extract output string from random test pattern of a certain length and at a starting point
|
|
* @param p_Start
|
|
* @param p_N
|
|
* @return octetstring
|
|
* @status APPROVED
|
|
*/
|
|
function f_GetN_OctetsFromPRBS(UInt_Type p_Start,
|
|
UInt_Type p_N)
|
|
return octetstring
|
|
{
|
|
var integer i;
|
|
var integer k;
|
|
var octetstring v_Noctets :=''O; // output string to be extracted from random test pattern
|
|
|
|
for (i:= 0; i< p_N; i := i+1) {
|
|
k := p_Start + i;
|
|
k := k mod 2047;
|
|
v_Noctets := v_Noctets & tsc_RandomPRBS[k];
|
|
}
|
|
return v_Noctets;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
/*
|
|
* @desc check whether given testase name fits L2 test case
|
|
* @return boolean
|
|
* @status APPROVED
|
|
*/
|
|
function f_TestcaseIsL2Testcase() return boolean
|
|
{
|
|
var charstring v_TestcaseName := testcasename(); // This operation now defined in TTCN3 v4.2.1
|
|
var template charstring v_L2TestcasePattern := pattern "TC_7_*"; /* @sic R5s100136 sic@ */
|
|
return (match(v_TestcaseName, v_L2TestcasePattern));
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function f_TestcaseIsDrbTestcase() return boolean
|
|
{
|
|
var charstring v_TestcaseName := testcasename(); // This operation now defined in TTCN3 v4.2.1
|
|
var template charstring v_L2TestcasePattern := pattern "TC_12_*";
|
|
return (match(v_TestcaseName, v_L2TestcasePattern));
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
type enumerated Gsm7BitPacking_Type { SMS_Packing, CBS_Packing, USSD_Packing };
|
|
|
|
|
|
/*
|
|
* @desc Packing of a 7 bit ASCII string to an 8 bit octet string (TS 23.038 cl. 6.1.2):
|
|
* SMS Packing (TS 23.038 cl. 6.1.2.1)
|
|
* CBS Packing (TS 23.038 cl. 6.1.2.2)
|
|
* USSD Packing (TS 23.038 cl. 6.1.2.3)
|
|
* @param p_Text
|
|
* @param p_Packing
|
|
* @return octetstring
|
|
* @status APPROVED
|
|
*/
|
|
function f_CharPacking_IA5toGsm7Bit(charstring p_Text,
|
|
Gsm7BitPacking_Type p_Packing) return octetstring
|
|
{
|
|
var octetstring v_OctetString := char2oct(p_Text); // "Hallo" -> '48616C6C6F'O
|
|
var bitstring v_BitString := ''B;
|
|
var bitstring v_Padding := ''B;
|
|
var integer v_TextLength := lengthof(p_Text);
|
|
var integer v_BitStringLength := 0;
|
|
var integer v_IntValue;
|
|
var integer v_NoOfOctets;
|
|
var integer v_NoOfPaddingBits;
|
|
var integer v_Index;
|
|
var integer i;
|
|
|
|
if (((p_Packing == SMS_Packing) and (v_TextLength > 160)) or // a maximum of 160 characters for SMS (i.e. 140 octets)
|
|
((p_Packing == CBS_Packing) and (v_TextLength > 93)) or // a maximum of 93 characters for CBS (i.e. 82 octets)
|
|
((p_Packing == USSD_Packing) and (v_TextLength > 182))) { // a maximum of 182 characters for USSD (i.e. 160 octets)
|
|
FatalError(__FILE__, __LINE__, "input string is too long");
|
|
}
|
|
|
|
for (i:=0; i<v_TextLength; i:=i+1) {
|
|
v_IntValue := oct2int(v_OctetString[i]);
|
|
v_BitString := int2bit(v_IntValue, 7) & v_BitString; // concat 7 bits only
|
|
v_BitStringLength := v_BitStringLength + 7;
|
|
}
|
|
// add padding:
|
|
v_NoOfOctets := (v_BitStringLength + 7) / 8;
|
|
v_NoOfPaddingBits := (v_NoOfOctets * 8) - v_BitStringLength;
|
|
if (v_NoOfPaddingBits > 0) {
|
|
if ((p_Packing == USSD_Packing) and (v_NoOfPaddingBits == 7)) {
|
|
v_Padding := '0001101'B; // use <CR> instead of the @ character; see TS 23.038 cl. 6.1.2.3.1
|
|
} else {
|
|
v_Padding := int2bit(0, v_NoOfPaddingBits); // 1..7 padding bits, all 0
|
|
}
|
|
}
|
|
v_BitString := v_Padding & v_BitString;
|
|
|
|
// convert bitstring back to octetstring: the first character is at the end of the bitstring
|
|
// => we need to take the octets from the end of the bitstring
|
|
v_OctetString := ''O;
|
|
for (i:=0; i < v_NoOfOctets; i:=i+1) {
|
|
v_Index := (v_NoOfOctets - (i+1)) * 8; // get start index of the next octet
|
|
v_OctetString[i] := bit2oct(substr(v_BitString, v_Index, 8));
|
|
}
|
|
return v_OctetString;
|
|
}
|
|
|
|
function f_CharPacking_IA5toBCD(charstring p_ASCII_String) return octetstring
|
|
{ /* Packed BCD coding with "swaping of nibbles" as reuired e.g. for encoding of called and calling party numbers in NAS messages (e.g. TS 24.004 cl. 10.5.4.7 and 10.5.4.9);
|
|
when the length of the input string is odd 'F' is aded as padding:
|
|
"0613454120" -> '6031541402'O - even number of digits
|
|
"06134541209" -> '6031541402F9'O - odd number of digits (padding)
|
|
"A6134541209" -> error */
|
|
var integer i;
|
|
var charstring v_BcdString;
|
|
var integer v_Length := lengthof(p_ASCII_String);
|
|
var charstring v_ASCII_String := p_ASCII_String;
|
|
|
|
// check input string
|
|
for (i := 0; i < v_Length; i := i+1) {
|
|
if (not match(p_ASCII_String[i], pattern "[0-9]")) {
|
|
FatalError(__FILE__, __LINE__, "invalid character for BCD string");
|
|
}
|
|
}
|
|
|
|
// add padding (if needed)
|
|
if (v_Length mod 2 != 0) {
|
|
v_ASCII_String := v_ASCII_String & "F";
|
|
}
|
|
|
|
// swap digits
|
|
for (i := 0; i < v_Length; i := i+2) {
|
|
v_BcdString[i] := v_ASCII_String[i+1];
|
|
v_BcdString[i+1] := v_ASCII_String[i];
|
|
}
|
|
|
|
return str2oct(v_BcdString);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function f_BitstringReplaceMSB(bitstring p_Bitstring,
|
|
B1_Type p_NewMSB) return bitstring
|
|
{
|
|
return replace(p_Bitstring, 0, 1, p_NewMSB);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
function f_Bitstring_BitIsSet(bitstring p_Bitstring,
|
|
integer p_Index) return boolean
|
|
{
|
|
if (p_Index >= lengthof(p_Bitstring)) {
|
|
FatalError(__FILE__, __LINE__, "invalid bit position");
|
|
}
|
|
return (substr(p_Bitstring, p_Index, 1) == '1'B);
|
|
}
|
|
|
|
}
|