initial chekin of code received by Ericsson on 20170410
diff --git a/SCCP_CNL113341/demo/SCCP_Testcases.ttcn b/SCCP_CNL113341/demo/SCCP_Testcases.ttcn
new file mode 100644
index 0000000..0f8ba47
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_Testcases.ttcn
@@ -0,0 +1,468 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+//
+// Copyright Test Competence Center (TCC) ETH 2007
+//
+//
+//
+// 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) have been supplied
+//
+//
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: SCCP_TestCases.ttcn
+// Description: SS7 SCCP basic SEA test
+// according to specification ITU-T SS7 SCCP, ANSI ..., TCC ...
+// References: ITU-T: Recommendation Q.711-Q.714,
+// ANSI T1.112-2001,
+// TCC
+// Rev: <RnXnn>
+// Updated: 2007.04.12
+// Contact: http://ttcn.ericsson.se
+//
+
+module SCCP_Testcases
+{//startmodule
+
+modulepar
+{
+ hexstring tsp_own_GT := '0614377760'H;
+ hexstring tsp_remote_GT := '0614375760'H;
+ integer tsp_SSN := 2; //8:MSC 5:MAP see 3.4.2.2/Q.713
+ octetstring tsp_SIO := '83'O;//SCCP national
+ integer tsp_own_SPC := 461087; // =0x07091E
+ integer tsp_remote_SPC := 461086; // =0x07091D
+ integer tsp_SLS := 0;
+ charstring tsp_sccp_serviceType := "mtp3_itu";
+
+ octetstring MTP3_UserPart_SIO;
+ integer MTP3_UserPart_OPC,
+ MTP3_UserPart_DPC,
+ MTP3_UserPart_SLS
+}//modulepar
+
+import from General_Types all;
+
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+
+import from SCCPasp_Types all;
+import from SCCP_Types all;
+import from SCCP_Emulation all;
+
+/*************************************
+* Components
+**************************************/
+
+
+// Model of MSC:
+type component MSC_ST {
+ port MTP3asp_SP_PT CMGW6;
+ //port MTP3asp_PT CMGW6;
+};
+
+
+// Main test component with behaviour SCCPuserA andSCCPuserB
+type component MTC_CT {
+ var SCCP_PAR_Address v_CalledAddress, v_CallingAddress;
+ var integer v_testvalue;
+ var SCCP_CT vc_SCCP_A ;
+ var MSC_SCCP_MTP3_parameters v_BootA;
+ var SCCP_PAR_Connection_Id v_cid_A ;
+
+ port SCCPasp_PT A_PORT; //SCCPuserA
+}
+
+function initBootParams() runs on MTC_CT
+{
+ v_BootA :=
+ { sio:=
+ { ni:= substr(oct2bit(tsp_SIO),0,2),
+ prio:= substr(oct2bit(tsp_SIO),2,2),
+ si:= substr(oct2bit(tsp_SIO),4,4)
+ },
+ opc:=tsp_own_SPC,
+ dpc:=tsp_remote_SPC,
+ sls:=tsp_SLS,
+ sccp_serviceType:=tsp_sccp_serviceType,
+ ssn:= tsp_SSN
+ };
+ return;
+} //initBootParams
+
+function init() runs on MTC_CT //system MSC_ST
+{
+ initBootParams();
+ log("v_BootA:",v_BootA);
+
+ // Protocol Stack A creation & connections:
+ vc_SCCP_A:=SCCP_CT.create;
+ map(vc_SCCP_A:MTP3_SCCP_PORT,system:CMGW6);
+ connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+
+ vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters
+
+
+ log( "init() is done");
+
+}// init
+
+function terminate( ) runs on MTC_CT //system MSC_ST
+{
+ log( "termitate() started");
+ /*while( all component.running != true )
+ {
+ //waits
+ }*/
+ all component.stop;
+ unmap(vc_SCCP_A:MTP3_SCCP_PORT,system:CMGW6);
+ disconnect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+
+ log(" all components stopped");
+ self.stop;
+} //terminate
+
+// function getOddEven returns '0'
+// if even number of dec digit can be found in GT see Q.713
+function getOddEven( in hexstring pl_GT) return bitstring
+{
+ return int2bit( (lengthof(pl_GT) mod 2) ,1);
+}
+
+function getOddEven_ansi( in hexstring pl_GT) return bitstring
+{
+ if( (lengthof(pl_GT) mod 2) == 0 ) { return '0010'B;} //even
+ else { return '0001'B;} //odd
+}
+
+//******************************************************************
+//function setAddresses_gti0001() runs on MTC_CT
+// Sets CalledAddress and CallingAddress as a gti001-type address
+// according to the cfg file.
+//******************************************************************
+
+function setAddresses_gti0001() runs on MTC_CT
+{
+ if( (tsp_sccp_serviceType == "mtp3_itu") or
+ (tsp_sccp_serviceType == "mtp3b_itu") or
+ (tsp_sccp_serviceType == "mtp3_ttc") or
+ (tsp_sccp_serviceType == "mtp3b_ttc")
+ ) {
+ v_CalledAddress :={
+ addressIndicator := {
+ pointCodeIndic := '1'B,
+ ssnIndicator := '1'B,
+ globalTitleIndic := '0001'B,
+ routingIndicator := '0'B
+ },//addressIndicator
+ signPointCode := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn
+ subsystemNumber := tsp_SSN,
+ globalTitle := {
+ gti0001:= {
+ natureOfAddress := '0000011'B,
+ oddeven := getOddEven( tsp_remote_GT ),
+ globalTitleAddress := tsp_remote_GT
+ }
+ }//globalTitle
+ } // v_CalledAddress
+
+ v_CallingAddress :={
+ addressIndicator := {
+ pointCodeIndic := '1'B,
+ ssnIndicator := '1'B,
+ globalTitleIndic := '0001'B,
+ routingIndicator := '0'B
+ },//addressIndicator
+ signPointCode := SCCP_SPC_int2bit(tsp_own_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn
+ subsystemNumber := tsp_SSN,
+ globalTitle:= {
+ gti0001 := {
+ natureOfAddress := '0000011'B,
+ oddeven := getOddEven( tsp_own_GT ),
+ globalTitleAddress := tsp_own_GT
+ }
+ }//globalTitle
+ } // v_CallingAddress
+
+ } else if(
+ (tsp_sccp_serviceType == "mtp3_ansi") or
+ (tsp_sccp_serviceType == "mtp3b_ansi")
+ ) {
+
+ v_CalledAddress :={
+ addressIndicator := {
+ pointCodeIndic := '1'B,
+ ssnIndicator := '1'B,
+ globalTitleIndic := '0001'B,
+ routingIndicator := '0'B
+ },//addressIndicator
+ signPointCode := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn
+ subsystemNumber := tsp_SSN,
+ globalTitle := {
+ gti0011:= {
+ translationType := int2oct(7,1),
+ encodingScheme := getOddEven_ansi( tsp_remote_GT ),
+ numberingPlan := '0111'B, //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1
+ globalTitleAddress:= tsp_remote_GT
+ }
+ }//globalTitle
+ } // v_CalledAddress
+
+ v_CallingAddress :={
+ addressIndicator := {
+ pointCodeIndic := '1'B,
+ ssnIndicator := '1'B,
+ globalTitleIndic := '0001'B,
+ routingIndicator := '0'B
+ },//addressIndicator
+ signPointCode := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn
+ subsystemNumber := tsp_SSN,
+ globalTitle := {
+ gti0011:= {
+ translationType := int2oct(7,1),
+ encodingScheme := getOddEven_ansi( tsp_own_GT ),
+ numberingPlan := '0111'B, //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1
+ globalTitleAddress:= tsp_own_GT
+ }
+ }//globalTitle
+ } // v_CallingAddress
+ }//if
+
+}//setAddresses_gti001
+
+function f_SendAndReceive1N_UNITDATA(in octetstring pl_userdata) runs on MTC_CT
+{
+ var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind;
+ timer TL_timer:= 120.0;
+ TL_timer.start;
+ A_PORT.send( t_ASP_N_UNITDATA_req( v_CalledAddress,
+ v_CallingAddress,
+ '00000001'B, //sequence control
+ '00000001'B, //return option
+ pl_userdata,
+ omit ) );
+ alt {
+ [] A_PORT.receive( tr_ASP_N_UNITDATA_ind ) -> value vl_N_UNITDATA_ind
+ {
+
+ if( (vl_N_UNITDATA_ind.calledAddress == v_CalledAddress ) and
+ (vl_N_UNITDATA_ind.callingAddress == v_CallingAddress) and
+ (vl_N_UNITDATA_ind.userData == pl_userdata) )
+ {
+ log("Correct CalledAddress, CallingAddress and userData received, data are correct");
+ setverdict(pass);
+ }
+ else
+ {
+ log("Some data corrupted");
+ setverdict( fail );
+ }
+ };
+ [] TL_timer.timeout
+ {
+ setverdict( fail );
+ log("Timeout....");
+ };
+ } //alt
+ TL_timer.stop;
+}//f_SendAndReceive1N_UNITDATA
+
+/****************************************************
+Connection Oriented Part
+****************************************************/
+
+/****************************************************
+function f_connect
+Establishes a connection
+(Sends an ASP_SCCP_N_CONNECT_req on A_PORT and waits for
+N_CONNECT_ind on B_PORT. If it is received,
+it sends back an ASP_SCCP_N_CONNECT_res on B_PORT and waits for
+N_CONNECT_cfm on A_PORT)
+****************************************************/
+function f_connect() runs on MTC_CT return boolean
+{
+ var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind;
+ var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm;
+ setverdict(none);
+ v_cid_A := 13;
+ timer TL_timer:= 120.0;
+ TL_timer.start;
+
+ A_PORT.send( t_ASP_N_CONNECT_req( v_CalledAddress,
+ v_CallingAddress,
+ omit, //expeditedDataSel
+ omit, //QoS
+ omit, //userData
+ v_cid_A,
+ omit //importance
+ ) );
+
+ alt {
+ [] A_PORT.receive( tr_ASP_N_CONNECT_cfm ) -> value vl_N_CONNECT_cfm
+ {
+ setverdict( pass );
+ log("f_connect finished successfully");
+ return true;
+ }
+ [] TL_timer.timeout
+ {
+ setverdict( fail );
+ log("Timeout....");
+ return false;
+ }
+ }// alt
+ log("f_connect finished");
+ return false;
+}//f_connect
+
+/****************************************************
+function f_send
+Sends an ASP_SCCP_N_DATA_req on A_PORT and waits for answer in
+A_PORT
+****************************************************/
+function f_send(in octetstring pl_userdata) runs on MTC_CT
+{
+ timer TL_timer:= 120.0;
+ TL_timer.start;
+ A_PORT.send( t_ASP_N_DATA_req ( pl_userdata, v_cid_A, omit) ) ;
+ alt {
+ [] A_PORT.receive
+ {
+ setverdict( pass );
+ log("f_connect finished successfully");
+
+ }
+ [] TL_timer.timeout
+ {
+ setverdict( fail );
+ log("Timeout....");
+
+ }
+
+ } //alt
+}//f_send
+
+//f_disconnect with timeout
+
+function f_disconnect( ) runs on MTC_CT
+{
+ var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind;
+ timer TL_timer:= 25.0;
+ TL_timer.start;
+ A_PORT.send( t_ASP_N_DISCONNECT_req( omit, // respondingAddress
+ 0, //reason : end user originated, see 3.11/Q.713
+ omit, //userData
+ v_cid_A,
+ omit ))
+ alt {
+
+ [] A_PORT.receive
+ {
+ repeat;
+ }
+ [] TL_timer.timeout
+ {
+ setverdict( pass );
+ log("Timeout....");
+ };
+ }//alt
+
+
+}//f_disconnect
+
+//===================================================
+// Testcases
+//===================================================
+
+/****************************************************
+tc_ConnlessSendingShortASP
+Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+and receives it in one ASP_SCCP_N_UNITDATA_req.
+SCCP transfers information
+in udp or (forced) xudp packets.
+****************************************************/
+testcase tc_ConnlessSendingShortASP() runs on MTC_CT
+{
+ var octetstring vl_userdata;
+ init();
+ setAddresses_gti0001();
+ vl_userdata :='12345678901234567890'O;
+ f_SendAndReceive1N_UNITDATA( vl_userdata );
+ terminate();
+ } //tc_ConnlessSendingShortASP
+
+/****************************************************
+ tc_ConnlessSendingLongASP
+ Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+ and receives it in one ASP_SCCP_N_UNITDATA_req.
+ It is used for segmentation and reassembly.
+ SCCP transfers information
+in xudp packets
+****************************************************/
+testcase tc_ConnlessSendingLongASP() runs on MTC_CT system MSC_ST
+{
+ var octetstring vl_userdata;
+ var integer vl_i;
+ init();
+ setAddresses_gti0001();
+ vl_userdata := ''O;
+ for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+ vl_userdata := vl_userdata &'12345678901234567890'O;
+ }
+ f_SendAndReceive1N_UNITDATA( vl_userdata );
+ terminate();
+}//tc_ConnlessSendingLongASP
+
+/****************************************************
+tc_ConnOrientedShortASPSending
+****************************************************/
+testcase tc_ConnOrientedShortASPSending() runs on MTC_CT system MSC_ST
+{
+ var octetstring vl_userdata;
+ init();
+ setAddresses_gti0001();
+ vl_userdata := '12345678901234567890'O;
+ if(f_connect())
+ {
+ f_send(vl_userdata);
+ f_disconnect();
+ }
+ terminate();
+}
+/****************************************************
+tc_ConnOrientedLongASPSending
+****************************************************/
+testcase tc_ConnOrientedLongASPSending() runs on MTC_CT
+{
+ var octetstring vl_userdata;
+ var integer vl_i;
+ init();
+ setAddresses_gti0001();
+ vl_userdata := ''O;
+ for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+ vl_userdata := vl_userdata &'12345678901234567890'O;
+ }
+ if(f_connect())
+ {
+ f_send(vl_userdata);
+ //f_SendAndReceive1N_UNITDATA( vl_userdata );
+ f_disconnect();
+ }
+ terminate();
+}
+/****************************************************
+ CONTROL
+****************************************************/
+control
+{
+ execute( tc_ConnlessSendingShortASP() );
+ execute( tc_ConnlessSendingLongASP() );
+ execute( tc_ConnOrientedShortASPSending());
+ execute( tc_ConnOrientedLongASPSending());
+}
+
+}//module