From ac3598008390c5185f6b71feffe31cb7fa61b9a7 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 12 Apr 2017 12:13:44 +0200 Subject: initial chekin of code received by Ericsson on 20170410 --- COMMON/ProtocolModules_Common.tpd | 45 + COMMON/doc/documentation_note.txt | 13 + COMMON/src/General_Types.ttcn | 382 ++ COMMON/src/MobileDomainDefinitions.asn | 54 + COMMON/src/ProtocolModules_Common.grp | 39 + COMMON/src/UsefulTtcn3Types.ttcn | 99 + COMMON/src/XSD.ttcn | 339 ++ COMMON/src/general_typedefs.ttcn | 236 + COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn | 150 + M3UA_CNL113536/M3UA_CNL113536.tpd | 44 + M3UA_CNL113536/doc/documentation_note.txt | 13 + M3UA_CNL113536/src/M3UA_Types.ttcn | 805 +++ M3UA_CNL113537/demo/Abstract_Socket.cc | 1 + M3UA_CNL113537/demo/Abstract_Socket.hh | 1 + M3UA_CNL113537/demo/BICC_EncDec.cc | 1 + M3UA_CNL113537/demo/BICC_Types.ttcn | 1 + M3UA_CNL113537/demo/General_Types.ttcn | 1 + M3UA_CNL113537/demo/M3UA_Emulation.ttcn | 1 + M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn | 152 + M3UA_CNL113537/demo/M3UA_Types.ttcn | 1 + M3UA_CNL113537/demo/MTP3asp_EncDec.cc | 1 + M3UA_CNL113537/demo/MTP3asp_Types.ttcn | 1 + M3UA_CNL113537/demo/Makefile | 920 +++ M3UA_CNL113537/demo/SCTPasp_PT.cc | 1 + M3UA_CNL113537/demo/SCTPasp_PT.hh | 1 + M3UA_CNL113537/demo/SCTPasp_PortType.ttcn | 1 + M3UA_CNL113537/demo/SCTPasp_Types.ttcn | 1 + M3UA_CNL113537/demo/m3ua_emu.cfg | 21 + M3UA_CNL113537/src/M3UA_Emulation.ttcn | 1307 +++++ MTP3asp_CNL113337/MTP3asp_CNL113337.tpd | 89 + MTP3asp_CNL113337/demo/MTP3asp_PT.cc | 2952 ++++++++++ MTP3asp_CNL113337/demo/MTP3asp_PT.hh | 249 + MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn | 61 + MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn | 324 ++ MTP3asp_CNL113337/demo/Makefile | 353 ++ MTP3asp_CNL113337/demo/mtp3test.ttcn | 292 + MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg | 75 + MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf | Bin 0 -> 143496 bytes MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf | Bin 0 -> 131894 bytes MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf | Bin 0 -> 178705 bytes MTP3asp_CNL113337/src/MTP3asp_EncDec.cc | 20 + MTP3asp_CNL113337/src/MTP3asp_PT.cc | 2952 ++++++++++ MTP3asp_CNL113337/src/MTP3asp_PT.hh | 249 + MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn | 66 + MTP3asp_CNL113337/src/MTP3asp_Types.ttcn | 324 ++ SCCP_CNL113341/SCCP_CNL113341.tpd | 87 + SCCP_CNL113341/demo/General_Types.ttcn | 1 + SCCP_CNL113341/demo/MTP3asp_PT.cc | 1 + SCCP_CNL113341/demo/MTP3asp_PT.hh | 1 + SCCP_CNL113341/demo/MTP3asp_PortType.ttcn | 1 + SCCP_CNL113341/demo/MTP3asp_Types.ttcn | 1 + SCCP_CNL113341/demo/Makefile.ini | 737 +++ .../demo/N_UNITDATAtest_600longdata_xudt_ansi_log | 2141 +++++++ SCCP_CNL113341/demo/SCCP_Emulation.ttcn | 1 + SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp | 1 + SCCP_CNL113341/demo/SCCP_Testcases.cfg | 55 + SCCP_CNL113341/demo/SCCP_Testcases.ttcn | 468 ++ SCCP_CNL113341/demo/SCCP_Types.ttcn | 1 + SCCP_CNL113341/demo/SCCP_selftest.cfg | 52 + SCCP_CNL113341/demo/SCCP_selftest.ttcn | 607 ++ SCCP_CNL113341/demo/SCCPasp_Types.ttcn | 1 + SCCP_CNL113341/src/SCCP_Emulation.ttcn | 6031 ++++++++++++++++++++ SCCP_CNL113341/src/SCCP_EncDec.cc | 19 + SCCP_CNL113341/src/SCCP_Mapping.ttcnpp | 129 + SCCP_CNL113341/src/SCCP_Types.ttcn | 1553 +++++ SCCP_CNL113341/src/SCCPasp_Types.ttcn | 895 +++ SCCP_Test/SCCP_Testcases.cfg | 54 + SCCP_Test/SCCP_Testcases.ttcn | 505 ++ SCTPasp_CNL113469/SCTPasp_CNL113469.tpd | 50 + SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc | Bin 0 -> 64512 bytes SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc | Bin 0 -> 162816 bytes SCTPasp_CNL113469/doc/SCTPasp_FS.pdf | Bin 0 -> 167590 bytes SCTPasp_CNL113469/src/SCTPasp_PT.cc | 1549 +++++ SCTPasp_CNL113469/src/SCTPasp_PT.hh | 157 + SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn | 62 + SCTPasp_CNL113469/src/SCTPasp_Types.ttcn | 201 + bin/General_Types.ttcn | 1 + bin/M3UA_Emulation.ttcn | 1 + bin/M3UA_Types.ttcn | 1 + bin/MTP3asp_PortType.ttcn | 1 + bin/MTP3asp_Types.ttcn | 1 + bin/Makefile | 190 + bin/SCCP_Emulation.ttcn | 1 + bin/SCCP_Mapping.ttcn | 1 + bin/SCCP_Mapping.ttcnpp | 1 + bin/SCCP_Testcases.cfg | 1 + bin/SCCP_Testcases.ttcn | 1 + bin/SCCP_Types.ttcn | 1 + bin/SCCPasp_Types.ttcn | 1 + bin/SCTPasp_PT.cc | 1 + bin/SCTPasp_PT.hh | 1 + bin/SCTPasp_PortType.ttcn | 1 + bin/SCTPasp_Types.ttcn | 1 + bin/install.script | 34 + 94 files changed, 28239 insertions(+) create mode 100644 COMMON/ProtocolModules_Common.tpd create mode 100644 COMMON/doc/documentation_note.txt create mode 100644 COMMON/src/General_Types.ttcn create mode 100644 COMMON/src/MobileDomainDefinitions.asn create mode 100644 COMMON/src/ProtocolModules_Common.grp create mode 100644 COMMON/src/UsefulTtcn3Types.ttcn create mode 100644 COMMON/src/XSD.ttcn create mode 100644 COMMON/src/general_typedefs.ttcn create mode 100644 COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn create mode 100644 M3UA_CNL113536/M3UA_CNL113536.tpd create mode 100644 M3UA_CNL113536/doc/documentation_note.txt create mode 100644 M3UA_CNL113536/src/M3UA_Types.ttcn create mode 120000 M3UA_CNL113537/demo/Abstract_Socket.cc create mode 120000 M3UA_CNL113537/demo/Abstract_Socket.hh create mode 120000 M3UA_CNL113537/demo/BICC_EncDec.cc create mode 120000 M3UA_CNL113537/demo/BICC_Types.ttcn create mode 120000 M3UA_CNL113537/demo/General_Types.ttcn create mode 120000 M3UA_CNL113537/demo/M3UA_Emulation.ttcn create mode 100644 M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn create mode 120000 M3UA_CNL113537/demo/M3UA_Types.ttcn create mode 120000 M3UA_CNL113537/demo/MTP3asp_EncDec.cc create mode 120000 M3UA_CNL113537/demo/MTP3asp_Types.ttcn create mode 100644 M3UA_CNL113537/demo/Makefile create mode 120000 M3UA_CNL113537/demo/SCTPasp_PT.cc create mode 120000 M3UA_CNL113537/demo/SCTPasp_PT.hh create mode 120000 M3UA_CNL113537/demo/SCTPasp_PortType.ttcn create mode 120000 M3UA_CNL113537/demo/SCTPasp_Types.ttcn create mode 100644 M3UA_CNL113537/demo/m3ua_emu.cfg create mode 100644 M3UA_CNL113537/src/M3UA_Emulation.ttcn create mode 100644 MTP3asp_CNL113337/MTP3asp_CNL113337.tpd create mode 100644 MTP3asp_CNL113337/demo/MTP3asp_PT.cc create mode 100644 MTP3asp_CNL113337/demo/MTP3asp_PT.hh create mode 100644 MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn create mode 100644 MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn create mode 100644 MTP3asp_CNL113337/demo/Makefile create mode 100644 MTP3asp_CNL113337/demo/mtp3test.ttcn create mode 100644 MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg create mode 100644 MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf create mode 100644 MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf create mode 100644 MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf create mode 100644 MTP3asp_CNL113337/src/MTP3asp_EncDec.cc create mode 100644 MTP3asp_CNL113337/src/MTP3asp_PT.cc create mode 100644 MTP3asp_CNL113337/src/MTP3asp_PT.hh create mode 100644 MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn create mode 100644 MTP3asp_CNL113337/src/MTP3asp_Types.ttcn create mode 100644 SCCP_CNL113341/SCCP_CNL113341.tpd create mode 120000 SCCP_CNL113341/demo/General_Types.ttcn create mode 120000 SCCP_CNL113341/demo/MTP3asp_PT.cc create mode 120000 SCCP_CNL113341/demo/MTP3asp_PT.hh create mode 120000 SCCP_CNL113341/demo/MTP3asp_PortType.ttcn create mode 120000 SCCP_CNL113341/demo/MTP3asp_Types.ttcn create mode 100644 SCCP_CNL113341/demo/Makefile.ini create mode 100644 SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log create mode 120000 SCCP_CNL113341/demo/SCCP_Emulation.ttcn create mode 120000 SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp create mode 100644 SCCP_CNL113341/demo/SCCP_Testcases.cfg create mode 100644 SCCP_CNL113341/demo/SCCP_Testcases.ttcn create mode 120000 SCCP_CNL113341/demo/SCCP_Types.ttcn create mode 100644 SCCP_CNL113341/demo/SCCP_selftest.cfg create mode 100644 SCCP_CNL113341/demo/SCCP_selftest.ttcn create mode 120000 SCCP_CNL113341/demo/SCCPasp_Types.ttcn create mode 100644 SCCP_CNL113341/src/SCCP_Emulation.ttcn create mode 100644 SCCP_CNL113341/src/SCCP_EncDec.cc create mode 100644 SCCP_CNL113341/src/SCCP_Mapping.ttcnpp create mode 100644 SCCP_CNL113341/src/SCCP_Types.ttcn create mode 100644 SCCP_CNL113341/src/SCCPasp_Types.ttcn create mode 100644 SCCP_Test/SCCP_Testcases.cfg create mode 100644 SCCP_Test/SCCP_Testcases.ttcn create mode 100644 SCTPasp_CNL113469/SCTPasp_CNL113469.tpd create mode 100644 SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc create mode 100644 SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc create mode 100644 SCTPasp_CNL113469/doc/SCTPasp_FS.pdf create mode 100644 SCTPasp_CNL113469/src/SCTPasp_PT.cc create mode 100644 SCTPasp_CNL113469/src/SCTPasp_PT.hh create mode 100644 SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn create mode 100644 SCTPasp_CNL113469/src/SCTPasp_Types.ttcn create mode 120000 bin/General_Types.ttcn create mode 120000 bin/M3UA_Emulation.ttcn create mode 120000 bin/M3UA_Types.ttcn create mode 120000 bin/MTP3asp_PortType.ttcn create mode 120000 bin/MTP3asp_Types.ttcn create mode 100644 bin/Makefile create mode 120000 bin/SCCP_Emulation.ttcn create mode 120000 bin/SCCP_Mapping.ttcn create mode 120000 bin/SCCP_Mapping.ttcnpp create mode 120000 bin/SCCP_Testcases.cfg create mode 120000 bin/SCCP_Testcases.ttcn create mode 120000 bin/SCCP_Types.ttcn create mode 120000 bin/SCCPasp_Types.ttcn create mode 120000 bin/SCTPasp_PT.cc create mode 120000 bin/SCTPasp_PT.hh create mode 120000 bin/SCTPasp_PortType.ttcn create mode 120000 bin/SCTPasp_Types.ttcn create mode 100755 bin/install.script diff --git a/COMMON/ProtocolModules_Common.tpd b/COMMON/ProtocolModules_Common.tpd new file mode 100644 index 00000000..f861d7b4 --- /dev/null +++ b/COMMON/ProtocolModules_Common.tpd @@ -0,0 +1,45 @@ + + + + ProtocolModules_Common + + + + + + + + + Default + + + + + true + true + true + bin/ProtocolModules_Common + true + Level3-Creatingobjectfileswithdependencyupdate + + + bin + + + + + diff --git a/COMMON/doc/documentation_note.txt b/COMMON/doc/documentation_note.txt new file mode 100644 index 00000000..615d8188 --- /dev/null +++ b/COMMON/doc/documentation_note.txt @@ -0,0 +1,13 @@ +Please note that the storage of the documentation of the product has been +moved to the eridoc.ericsson.se from the ClearCase. + +You can access the documentation of the product via the following links: + +The documentation belongs to the R9A revision of the product +can be found here: +http://document.internal.ericsson.com/Download?DocNo=1095-CNL113368&Rev=K&Lang=EN&PRev=Y + +The documentation belongs to the latest revision of the product +can be found here: +http://document.internal.ericsson.com/Download?DocNo=1095-CNL113368&Rev=HIGHEST&Lang=EN&Status=FREE&PRev=Y + diff --git a/COMMON/src/General_Types.ttcn b/COMMON/src/General_Types.ttcn new file mode 100644 index 00000000..bd2dc54e --- /dev/null +++ b/COMMON/src/General_Types.ttcn @@ -0,0 +1,382 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson 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 +* +* Contributors: +* Zoltan Jasz - initial implementation and initial documentation +* Abhishek Gupta +* Attila Balasko +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Janos Kovesdi +* Sandor Palugyai +* Tibor Csondes +******************************************************************************/ +// +// File: General_Types.ttcn +// Rev: R9A +// Prodnr: CNL 113 368 +// Reference: + +module General_Types +{ + +group SimpleNativeTypes { + + //**************************************************** + // Bitstrings + //**************************************************** + + //bitstring with fixed length + type bitstring BIT1n length(1) with { variant "" }; + type bitstring BIT2n length(2) with { variant "" }; + type bitstring BIT3n length(3) with { variant "" }; + type bitstring BIT4n length(4) with { variant "" }; + type bitstring BIT5n length(5) with { variant "" }; + type bitstring BIT6n length(6) with { variant "" }; + type bitstring BIT7n length(7) with { variant "" }; + type bitstring BIT8n length(8) with { variant "" }; + type bitstring BIT9n length(9) with { variant "" }; + type bitstring BIT12n length(12) with { variant "" }; + type bitstring BIT14n length(14) with { variant "" }; + type bitstring BIT15n length(15) with { variant "" }; + type bitstring BIT16n length(16) with { variant "" }; + type bitstring BIT56n length(56) with { variant "" }; + + //bitstring with length interval + type bitstring BIT14_24n length(14..24) with { variant "" }; + + //bitstring to be padded with fixed length + type bitstring BIT1np length(1) with { variant "" }; + type bitstring BIT2np length(2) with { variant "" }; + type bitstring BIT3np length(3) with { variant "" }; + type bitstring BIT4np length(4) with { variant "" }; + type bitstring BIT5np length(5) with { variant "" }; + type bitstring BIT6np length(6) with { variant "" }; + type bitstring BIT7np length(7) with { variant "" }; + type bitstring BIT15np length(15) with { variant "" }; + + //bitstring with fixed length + type bitstring BIT1 length(1) with { variant "FIELDLENGTH(1)" }; + type bitstring BIT2 length(2) with { variant "FIELDLENGTH(2)" }; + type bitstring BIT3 length(3) with { variant "FIELDLENGTH(3)" }; + type bitstring BIT4 length(4) with { variant "FIELDLENGTH(4)" }; + type bitstring BIT5 length(5) with { variant "FIELDLENGTH(5)" }; + type bitstring BIT6 length(6) with { variant "FIELDLENGTH(6)" }; + type bitstring BIT7 length(7) with { variant "FIELDLENGTH(7)" }; + type bitstring BIT8 length(8) with { variant "FIELDLENGTH(8)" }; + type bitstring BIT9 length(9) with { variant "FIELDLENGTH(9)" }; + type bitstring BIT10 length(10) with { variant "FIELDLENGTH(10)" }; + type bitstring BIT11 length(11) with { variant "FIELDLENGTH(11)" }; + type bitstring BIT12 length(12) with { variant "FIELDLENGTH(12)" }; + type bitstring BIT14 length(14) with { variant "FIELDLENGTH(14)" }; + type bitstring BIT15 length(15) with { variant "FIELDLENGTH(15)" }; + type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" }; + type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" }; + type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" }; + type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" }; + + type record of bitstring Bitstrings with { variant "" }; + type Bitstrings BitstringList; + type set of bitstring BitstringSet with { variant "" }; + + //**************************************************** + // Octetstrings + //**************************************************** + + //octetstring with fixed length + type octetstring OCT0n length(0) with { variant "" }; + type octetstring OCT1n length(1) with { variant "" }; + type octetstring OCT2n length(2) with { variant "" }; + type octetstring OCT3n length(3) with { variant "" }; + type octetstring OCT4n length(4) with { variant "" }; + type octetstring OCT5n length(5) with { variant "" }; + type octetstring OCT6n length(6) with { variant "" }; + type octetstring OCT7n length(7) with { variant "" }; + type octetstring OCT8n length(8) with { variant "" }; + type octetstring OCT9n length(9) with { variant "" }; + type octetstring OCT10n length(10) with { variant "" }; + type octetstring OCT11n length(11) with { variant "" }; + type octetstring OCT12n length(12) with { variant "" }; + type octetstring OCT13n length(13) with { variant "" }; + type octetstring OCT14n length(14) with { variant "" }; + type octetstring OCT15n length(15) with { variant "" }; + type octetstring OCT16n length(16) with { variant "" }; + type octetstring OCT17n length(17) with { variant "" }; + type octetstring OCT18n length(18) with { variant "" }; + type octetstring OCT19n length(19) with { variant "" }; + type octetstring OCT20n length(20) with { variant "" }; + type octetstring OCT28n length(28) with { variant "" }; + type octetstring OCT32n length(32) with { variant "" }; + type octetstring OCT34n length(34) with { variant "" }; + type octetstring OCT46n length(46) with { variant "" }; + type octetstring OCT50n length(50) with { variant "" }; + type octetstring OCT69n length(69) with { variant "" }; + type octetstring OCT100n length(100) with { variant "" }; + type octetstring OCT128n length(128) with { variant "" }; + type octetstring OCT500n length(500) with { variant "" }; + type octetstring OCTNn with { variant "" }; + + //octetstring with length interval + type octetstring OCT1_3n length(1..3) with { variant "" }; + type octetstring OCT1_4n length(1..4) with { variant "" }; + type octetstring OCT1_5n length(1..5) with { variant "" }; + type octetstring OCT1_6n length(1..6) with { variant "" }; + type octetstring OCT1_7n length(1..7) with { variant "" }; + type octetstring OCT1_8n length(1..8) with { variant "" }; + type octetstring OCT1_12n length(1..12) with { variant "" }; + type octetstring OCT1_15n length(1..15) with { variant "" }; + type octetstring OCT1_16n length(1..16) with { variant "" }; + type octetstring OCT1_18n length(1..18) with { variant "" }; + type octetstring OCT1_20n length(1..20) with { variant "" }; + type octetstring OCT1_24n length(1..24) with { variant "" }; + type octetstring OCT1_32n length(1..32) with { variant "" }; + type octetstring OCT1_34n length(1..34) with { variant "" }; + type octetstring OCT1_46n length(1..46) with { variant "" }; + type octetstring OCT1_50n length(1..50) with { variant "" }; + type octetstring OCT1_112n length(1..112) with { variant "" }; + type octetstring OCT1_127n length(1..127) with { variant "" }; + type octetstring OCT1_128n length(1..128) with { variant "" }; + type octetstring OCT1_172n length(1..172) with { variant "" }; + type octetstring OCT3_5n length(3..5) with { variant "" }; + type octetstring OCT3_7n length(3..7) with { variant "" }; + type octetstring OCT3_8n length(3..8) with { variant "" }; + type octetstring OCT3_14n length(3..14) with { variant "" }; + type octetstring OCT3_17n length(3..17) with { variant "" }; + type octetstring OCT4_8n length(4..8) with { variant "" }; + + type record of octetstring Octetstrings with { variant "" }; + type Octetstrings OctetstringList; + type set of octetstring OctetstringSet with { variant "" }; + + //**************************************************** + // Charstrings + //**************************************************** + + //charstring with fixed length + type charstring CHAR4 length (4); + + type record of charstring Charstrings with { variant "" }; + type Charstrings CharstringList; + type set of charstring CharstringSet with { variant "" }; + + //**************************************************** + // Hexstrings + //**************************************************** + + //hexstring with fixed length + type hexstring HEX4n length(4) with { variant "" }; + type hexstring HEX6n length(6) with { variant "" }; + type hexstring HEX8n length(8) with { variant "" }; + type hexstring HEX15n length(15) with { variant "" }; + type hexstring HEX16n length(16) with { variant "" }; + type hexstring HEX24n length(24) with { variant "" }; + + //hexstring with length interval + type hexstring HEX0_18n length(0..18) with { variant "" }; + type hexstring HEX1_20n length(1..20) with { variant "" }; + type hexstring HEX1_34n length(1..34) with { variant "" }; + + type record of hexstring Hexstrings with { variant "" }; + type Hexstrings HexstringList; + type set of hexstring HexstringSet with { variant "" }; + + //**************************************************** + // Integers + //**************************************************** + + //integer with fixed bit number + type integer INT3nb (0..7) with { variant "" }; + type integer INT4nb (0..15) with { variant "" }; + type integer INT5nb (0..31) with { variant "" }; + type integer INT8nb (0..255) with { variant "" }; + + //integer with fixed bit number and with padding + type integer INT2nbp (0..3) with { variant "" }; + type integer INT1nbp (0..1) with { variant "" }; + type integer INT3nbp (0..7) with { variant "" }; + type integer INT5nbp (0..31) with { variant "" }; + type integer INT9nbp (0..511) with { variant "" }; + type integer INT13nbp (0..8191) with { variant "" }; + type integer INT15nbp (0..32767) with { variant "" }; + + //**************************************************** + // Structures + //**************************************************** + + //integer record + type record of integer Integers with { variant "" }; + type Integers IntegerList; + type record of Integers Integer_array with { variant "" }; + type set of integer IntegerSet with { variant "" }; + + //**************************************************** + // Floats + //**************************************************** + + type record of float Floats with { variant "" }; + type Floats FloatList; + type set of float FloatSet with { variant "" }; + + //**************************************************** + // Universal Charstrings + //**************************************************** + + type record of universal charstring UniversalCharstrings with { variant "" }; + type UniversalCharstrings UniversalCharstringList; + type set of universal charstring UniversalCharstringSet with { variant "" }; + + //**************************************************** + // Booleans + //**************************************************** + + type record of boolean Booleans with { variant "" }; + type Booleans BooleanList; + type set of boolean BooleanSet with { variant "" }; + + //**************************************************** + // Verdicttypes + //**************************************************** + + type record of verdicttype Verdicttypes with { variant "" }; + type Verdicttypes VerdicttypeList; + type set of verdicttype VerdicttypeSet with { variant "" }; + + //**************************************************** + // Anytypes + //**************************************************** + + type record of anytype Anytypes with { variant "" }; + type Anytypes AnytypeList; + type set of anytype AnytypeSet with { variant "" }; + +} // end group NativeTypes + +//**************************************************** +//**************************************************** +// RAW Encoded Types +//**************************************************** +//**************************************************** + +group SimpleRAWEncodedTypes { + + //**************************************************** + // Bitstrings + //**************************************************** + + //bitstring with fixed length + type bitstring BIT6_BO_LAST length (6) with {variant "BYTEORDER(last)"}; + type bitstring BIT16_BO_LAST length (16) with {variant "BYTEORDER(last)"}; + type bitstring BIT32_BO_LAST length (32) with {variant "BYTEORDER(last)"}; + + //**************************************************** + // Octetstrings + //**************************************************** + //octetstring with fixed length + type octetstring Dummy length(0) with { variant "FIELDLENGTH(0)" }; + type octetstring OCT0 length(0) with { variant "FIELDLENGTH(0)" }; + type octetstring OCT1 length(1) with { variant "FIELDLENGTH(1)" }; + type octetstring OCT2 length(2) with { variant "FIELDLENGTH(2)" }; + type octetstring OCT3 length(3) with { variant "FIELDLENGTH(3)" }; + type octetstring OCT4 length(4) with { variant "FIELDLENGTH(4)" }; + type octetstring OCT5 length(5) with { variant "FIELDLENGTH(5)" }; + type octetstring OCT6 length(6) with { variant "FIELDLENGTH(6)" }; + type octetstring OCT7 length(7) with { variant "FIELDLENGTH(7)" }; + type octetstring OCT8 length(8) with { variant "FIELDLENGTH(8)" }; + type octetstring OCT9 length(9) with { variant "FIELDLENGTH(9)" }; + type octetstring OCT10 length(10) with { variant "FIELDLENGTH(10)" }; + type octetstring OCT11 length(11) with { variant "FIELDLENGTH(11)" }; + type octetstring OCT12 length(12) with { variant "FIELDLENGTH(12)" }; + type octetstring OCT13 length(13) with { variant "FIELDLENGTH(13)" }; + type octetstring OCT14 length(14) with { variant "FIELDLENGTH(14)" }; + type octetstring OCT15 length(15) with { variant "FIELDLENGTH(15)" }; + type octetstring OCT16 length(16) with { variant "FIELDLENGTH(16)" }; + type octetstring OCT17 length(17) with { variant "FIELDLENGTH(17)" }; + type octetstring OCT18 length(18) with { variant "FIELDLENGTH(18)" }; + type octetstring OCT19 length(19) with { variant "FIELDLENGTH(19)" }; + type octetstring OCT20 length(20) with { variant "FIELDLENGTH(20)" }; + type octetstring OCT32 length(32) with { variant "FIELDLENGTH(32)" }; + type octetstring OCT34 length(34) with { variant "FIELDLENGTH(34)" }; + type octetstring OCT46 length(46) with { variant "FIELDLENGTH(46)" }; + + //octetstring with length interval + type octetstring OCT1_260 length(1..260) with { variant "" }; + type octetstring OCT1_8 length(1..8) with { variant "" }; + type octetstring OCT1_12 length(1..12) with { variant "" }; + type octetstring OCT1_32 length(1..32) with { variant "" }; + type octetstring OCT1_50 length(1..50) with { variant "" }; + type octetstring OCT3_8 length(3..8) with { variant "" }; + + type octetstring OCTN with { variant "" }; + + //**************************************************** + // Hexstrings + //**************************************************** + + //hexstring with fixed length + type hexstring HEX1 length(1) with {variant "FIELDLENGTH(1)"}; + + //hexstring with length interval + type hexstring HEX0_16 length(0..16) with { variant "" }; + type hexstring HEX5_16 length(5..16) with { variant "" }; + type hexstring HEX1_32 length(1..32) with { variant "" }; + + + //**************************************************** + // Integers + //**************************************************** + + //integer with fixed octet number + type integer INT1 (0..255) with { variant "FIELDLENGTH(8)" }; + type integer LIN1 (0..255) with { variant "FIELDLENGTH(8)" }; + type integer LIN2 (0..65535) with { variant "FIELDLENGTH(16)" }; + type integer LIN2_BO_LAST (0..65535) with { variant "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)" }; + type integer LIN3_BO_LAST (0..16777215) with { variant "FIELDLENGTH(24), COMP(nosign), BYTEORDER(last)" }; + type integer LIN4_BO_LAST (0..4294967295) with { variant "FIELDLENGTH(32), COMP(nosign), BYTEORDER(last)" }; + + //integer with fixed bit number + type integer INT1b (0..1) with { variant "FIELDLENGTH(1)" }; + type integer INT2b (0..3) with { variant "FIELDLENGTH(2)" }; + type integer INT3b (0..7) with { variant "FIELDLENGTH(3)" }; + type integer INT4b (0..15) with { variant "FIELDLENGTH(4)" }; + type integer INT5b (0..31) with { variant "FIELDLENGTH(5)" }; + type integer INT6b (0..63) with { variant "FIELDLENGTH(6)" }; + type integer INT7b (0..127) with { variant "FIELDLENGTH(7)" }; + type integer INT11b_BO_LAST ( 0 .. 2047 ) with { variant "FIELDLENGTH(11), COMP(nosign), BYTEORDER(last)" }; + type integer INT12b_BO_LAST ( 0 .. 4095 ) with { variant "FIELDLENGTH(12), COMP(nosign), BYTEORDER(last)" }; + type integer INT13b_BO_LAST ( 0 .. 8191 ) with { variant "FIELDLENGTH(13), COMP(nosign), BYTEORDER(last)" }; + type integer INT14b_BO_LAST ( 0 .. 16383 ) with { variant "FIELDLENGTH(14), COMP(nosign), BYTEORDER(last)" }; + type integer INT18b_BO_LAST ( 0 .. 262143 ) with { variant "FIELDLENGTH(18), COMP(nosign), BYTEORDER(last)" }; + type integer INT20b_BO_LAST ( 0 .. 1048575 ) with { variant "FIELDLENGTH(20), COMP(nosign), BYTEORDER(last)" }; + type integer INT31b_BO_LAST ( 0 .. 2147483647 ) with { variant "FIELDLENGTH(31), COMP(nosign), BYTEORDER(last)" }; + +} // end group SimpleRAWEncodedTypes + +group ComponentTypes { + type component Dummy_comptype {} + type component Dummy_CT {} +} // end group ComponentTypes + +group CompositeTypes { + type enumerated Protocols + { mtp3, sccp, isup, bicc, qaal2, gcp, bssap, bssmap, ranap, dtap } + + type record of OCT1 OCT1List with { variant "" }; + type record of OCT2 OCT2List with { variant "" }; + type record of OCT3 OCT3List with { variant "" }; + type record of OCT4 OCT4List with { variant "" }; + type record of OCT5 OCT5List with { variant "" }; + type record of OCT6 OCT6List with { variant "" }; + type record of OCT7 OCT7List with { variant "" }; + + type record of Dummy_comptype ListOfDummy_comptype with { variant "" }; + type record of Dummy_CT ListOfDummy_CT with { variant "" }; + type record of Protocols ProtocolList with { variant "" }; +} // end group CompositeTypes + +} with { encode "RAW" } /* End of module General_Types */ + diff --git a/COMMON/src/MobileDomainDefinitions.asn b/COMMON/src/MobileDomainDefinitions.asn new file mode 100644 index 00000000..0685484c --- /dev/null +++ b/COMMON/src/MobileDomainDefinitions.asn @@ -0,0 +1,54 @@ +-- ******************************************************************************* +-- * Copyright (c) 2004, 2014 Ericsson 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 +-- * +-- * Contributors: +-- * Zoltan Jasz - initial implementation and initial documentation +-- * Abhishek Gupta +-- * Attila Balasko +-- * Endre Kulcsar +-- * Gabor Bettesch +-- * Gabor Szalai +-- * Janos Kovesdi +-- * Sandor Palugyai +-- * Tibor Csondes +-- ******************************************************************************* +-- +-- File: MobileDomainDefinitions.asn +-- Rev: R9A +-- Prodnr: CNL 113 368 +-- Reference: + +MobileDomainDefinitions {ccitt (0) identified-organization (4) etsi (0) + mobileDomain (0) mobileDomainDefinitions (0) version1 (1)} + +DEFINITIONS ::= +BEGIN + +IMPORTS ; + +-- Mobile DomainId + +mobileDomainId OBJECT IDENTIFIER ::= {ccitt (0) identified-organization (4) etsi (0) mobileDomain (0)} + +-- Mobile Subdomains + +gsm-NetworkId OBJECT IDENTIFIER ::= {mobileDomainId gsm-Network (1)} +gsm-AccessId OBJECT IDENTIFIER ::= {mobileDomainId gsm-Access (2)} +gsm-OperationAndMaintenanceId OBJECT IDENTIFIER ::= {mobileDomainId gsm-Operation-Maintenance (3)} +gsm-MessagingId OBJECT IDENTIFIER ::= {mobileDomainId gsm-Messaging (4)} + +-- Common Component Ids for structuring Mobile Subdomains + +CommonComponentId ::= INTEGER (0..9) + +ac-Id CommonComponentId ::= 0 +as-Id CommonComponentId ::= 1 +ase-Id CommonComponentId ::= 2 +moduleId CommonComponentId ::= 3 +er-Id CommonComponentId ::= 4 + +END -- MobileDomainDefinitions diff --git a/COMMON/src/ProtocolModules_Common.grp b/COMMON/src/ProtocolModules_Common.grp new file mode 100644 index 00000000..90214d52 --- /dev/null +++ b/COMMON/src/ProtocolModules_Common.grp @@ -0,0 +1,39 @@ + + + + + + + + + + + + diff --git a/COMMON/src/UsefulTtcn3Types.ttcn b/COMMON/src/UsefulTtcn3Types.ttcn new file mode 100644 index 00000000..911e1a5a --- /dev/null +++ b/COMMON/src/UsefulTtcn3Types.ttcn @@ -0,0 +1,99 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson 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 +* +* Contributors: +* Zoltan Jasz - initial implementation and initial documentation +* Abhishek Gupta +* Attila Balasko +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Janos Kovesdi +* Sandor Palugyai +* Tibor Csondes +******************************************************************************/ +// +// File: UsefulTtcn3Types.ttcn +// Rev: R9A +// Prodnr: CNL 113 368 +// +//////////////////////////////////////////////////////////////////////////////// +module UsefulTtcn3Types { + + + type integer byte (-128 .. 127) with { variant "/* 8 bit */" }; + + type integer unsignedbyte (0 .. 255) with { variant "/*unsigned 8 bit*/" }; + + type integer short (-32768 .. 32767) with { variant "/*16 bit*/" }; + + type integer unsignedshort (0 .. 65535) with { variant "/*unsigned 16 bit*/" }; + + type integer long (-2147483648 .. 2147483647) with { variant "/*32 bit*/" }; + + type integer unsignedlong (0 .. 4294967295) with { variant "/*unsigned 32 bit*/" }; + + type integer longlong /* ( -9223372036854775808 .. 9223372036854775807 ) */ with { variant "/*64 bit*/" }; + + type integer unsignedlonglong /* ( 0 .. 18446744073709551615 ) */ with { variant "/*unsigned 64 bit*/" }; + + type float IEEE754float with { variant "/*IEEE754 float*/" }; + + type float IEEE754double with { variant "/*IEEE754 double*/" }; + + type float IEEE754extfloat with { variant "/*IEEE754 extended float*/" }; + + type float IEEE754extdouble with { variant "/*IEEE754 extended double*/" }; + + type universal charstring utf8string with { variant "/*UTF-8*/" }; + + type universal charstring bmpstring ( char ( 0,0,0,0 ) .. char ( 0,0,255,255) ) with { variant "/*UCS-2*/" }; + + type universal charstring utf16string ( char ( 0,0,0,0 ) .. char ( 0,16,255,255) ) with { variant "/*UTF-16*/" }; + + type universal charstring iso8859string ( char ( 0,0,0,0 ) .. char ( 0,0,0,255) ) with { variant "/*8 bit*/" }; + + type record IDLfixed + { + unsignedshort digits, + short scale, + charstring value_ + } + with { + variant "/*IDL:fixed FORMAL/01-12-01 v.2.6*/"; + }; + + /* + type charstring char length (1); + + NOTE 1: The name of this useful type is the same as the TTCN-3 keyword used to denote universal + charstring values in the quadraple form. In general it is disallowed to use TTCN-3 keywords as + identifiers. The "char" useful type is a solitary exception and allowed only for backward compatibility + with previous versions of the TTCN-3 standard. (except Titan doesn't) + + NOTE 2: The special string "8 bit" defined in clause 28.2.3 may be used with this type to specify a given encoding + for its values. Also, other properties of the base type can be changed by using attribute mechanisms. + */ + + type universal charstring uchar length (1); + + /* + NOTE: Special strings defined in clause 28.2.3 except "8 bit" may be used with this type to specify a given + encoding for its values. Also, other properties of the base type can be changed by using attribute + mechanisms. + */ + + type bitstring bit length (1); + + type hexstring hex length (1); + + type octetstring octet length (1); + +} +with { +encode "XML"; +} diff --git a/COMMON/src/XSD.ttcn b/COMMON/src/XSD.ttcn new file mode 100644 index 00000000..64157a04 --- /dev/null +++ b/COMMON/src/XSD.ttcn @@ -0,0 +1,339 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson 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 +* +* Contributors: +* Zoltan Jasz - initial implementation and initial documentation +* Abhishek Gupta +* Attila Balasko +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Janos Kovesdi +* Sandor Palugyai +* Tibor Csondes +******************************************************************************/ +// +// File: XSD.ttcn +// Rev: R9A +// Prodnr: CNL 113 368 +// +//////////////////////////////////////////////////////////////////////////////// +module XSD { + +import from UsefulTtcn3Types all; + +//These constants are used in the XSD date/time type definitions +const charstring + dash := "-", + cln := ":", + year := "(0(0(0[1-9]|[1-9][0-9])|[1-9][0-9][0-9])|[1-9][0-9][0-9][0-9])", + yearExpansion := "(-([1-9][0-9]#(0,))#(,1))#(,1)", + month := "(0[1-9]|1[0-2])", + dayOfMonth := "(0[1-9]|[12][0-9]|3[01])", + hour := "([01][0-9]|2[0-3])", + minute := "([0-5][0-9])", + second := "([0-5][0-9])", + sFraction := "(.[0-9]#(1,))#(,1)", + endOfDayExt := "24:00:00(.0#(1,))#(,1)", + nums := "[0-9]#(1,)", + ZorTimeZoneExt := "(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))#(,1)", + durTime := "(T[0-9]#(1,)"& + "(H([0-9]#(1,)(M([0-9]#(1,)(S|.[0-9]#(1,)S))#(,1)|.[0-9]#(1,)S|S))#(,1)|"& + "M([0-9]#(1,)(S|.[0-9]#(1,)S)|.[0-9]#(1,)M)#(,1)|"& + "S|"& + ".[0-9]#(1,)S))" + +//anySimpleType + +type XMLCompatibleString AnySimpleType +with { +variant "XSD:anySimpleType"; +}; + +//anyType; + +type record AnyType +{ + record of String attr, + record of String elem_list +} +with { +variant "XSD:anyType"; +variant (attr) "anyAttributes"; +variant (elem_list) "anyElement"; +}; +// String types + +type XMLCompatibleString String +with { +variant "XSD:string"; +}; + +type XMLStringWithNoCRLFHT NormalizedString +with { +variant "XSD:normalizedString"; +}; + +type NormalizedString Token +with { +variant "XSD:token"; +}; + +type XMLStringWithNoWhitespace Name +with { +variant "XSD:Name"; +}; + +type XMLStringWithNoWhitespace NMTOKEN +with { +variant "XSD:NMTOKEN"; +}; + +type Name NCName +with { +variant "XSD:NCName"; +}; + +type NCName ID +with { +variant "XSD:ID"; +}; + +type NCName IDREF +with { +variant "XSD:IDREF"; +}; + +type NCName ENTITY +with { +variant "XSD:ENTITY"; +}; + +type octetstring HexBinary +with { +variant "XSD:hexBinary"; +}; + +type octetstring Base64Binary +with { +variant "XSD:base64Binary"; +}; + +type XMLStringWithNoCRLFHT AnyURI +with { +variant "XSD:anyURI"; +}; + +type charstring Language (pattern "[a-zA-Z]#(1,8)(-\w#(1,8))#(0,)") +with { +variant "XSD:language"; +}; +// Integer types + +type integer Integer +with { +variant "XSD:integer"; +}; + +type integer PositiveInteger (1 .. infinity) +with { +variant "XSD:positiveInteger"; +}; + +type integer NonPositiveInteger (-infinity .. 0) +with { +variant "XSD:nonPositiveInteger"; +}; + +type integer NegativeInteger (-infinity .. -1) +with { +variant "XSD:negativeInteger"; +}; + +type integer NonNegativeInteger (0 .. infinity) +with { +variant "XSD:nonNegativeInteger"; +}; + +type longlong Long +with { +variant "XSD:long"; +}; + +type unsignedlonglong UnsignedLong +with { +variant "XSD:unsignedLong"; +}; + +type long Int +with { +variant "XSD:int"; +}; + +type unsignedlong UnsignedInt +with { +variant "XSD:unsignedInt"; +}; + +type short Short +with { +variant "XSD:short"; +}; + +type unsignedshort UnsignedShort +with { +variant "XSD:unsignedShort"; +}; + +type byte Byte +with { +variant "XSD:byte"; +}; + +type unsignedbyte UnsignedByte +with { +variant "XSD:unsignedByte"; +}; + +// Float types + +type float Decimal +with { +variant "XSD:decimal"; +}; + +type IEEE754float Float +with { +variant "XSD:float"; +}; + +type IEEE754double Double +with { +variant "XSD:double"; +}; + +// Time types + +type charstring Duration (pattern + "{dash}#(,1)P({nums}(Y({nums}(M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|" & + "{durTime}#(,1))|M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|{durTime})") +with { +variant "XSD:duration"; +}; + +type charstring DateTime (pattern + "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}T({hour}{cln}{minute}{cln}{second}" & + "{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" ) +with { +variant "XSD:dateTime"; +}; + +type charstring Time (pattern + "({hour}{cln}{minute}{cln}{second}{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" ) +with { +variant "XSD:time"; +}; + +type charstring Date (pattern + "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) +with { +variant "XSD:date"; +}; + +type charstring GYearMonth (pattern + "{yearExpansion}{year}{dash}{month}{ZorTimeZoneExt}" ) +with { +variant "XSD:gYearMonth"; +}; + +type charstring GYear (pattern + "{yearExpansion}{year}{ZorTimeZoneExt}" ) +with { +variant "XSD:gYear"; +}; + +type charstring GMonthDay (pattern + "{dash}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) +with { +variant "XSD:gMonthDay"; +}; + +type charstring GDay (pattern + "{dash}{dash}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) +with { +variant "XSD:gDay"; +}; + +type charstring GMonth (pattern + "{dash}{dash}{month}{ZorTimeZoneExt}" ) +with { +variant "XSD:gMonth"; +}; + +// Sequence types + +type record of NMTOKEN NMTOKENS +with { +variant "XSD:NMTOKENS"; +}; + +type record of IDREF IDREFS +with { +variant "XSD:IDREFS"; +}; + +type record of ENTITY ENTITIES +with { +variant "XSD:ENTITIES"; +}; + +type record QName +{ + AnyURI uri optional, + NCName name +} +with { +variant "XSD:QName"; +}; + +// Boolean type + +type boolean Boolean +with { +variant "XSD:boolean"; +}; + +//TTCN-3 type definitions supporting the mapping of W3C XML Schema built-in datatypes + +type utf8string XMLCompatibleString +( + char(0,0,0,9)..char(0,0,0,9), + char(0,0,0,10)..char(0,0,0,10), + char(0,0,0,12)..char(0,0,0,12), + char(0,0,0,32)..char(0,0,215,255), + char(0,0,224,0)..char(0,0,255,253), + char(0,1,0,0)..char(0,16,255,253) +) + +type utf8string XMLStringWithNoWhitespace +( + char(0,0,0,33)..char(0,0,215,255), + char(0,0,224,0)..char(0,0,255,253), + char(0,1,0,0)..char(0,16,255,253) +) + +type utf8string XMLStringWithNoCRLFHT +( + char(0,0,0,32)..char(0,0,215,255), + char(0,0,224,0)..char(0,0,255,253), + char(0,1,0,0)..char(0,16,255,253) +) + +} +with{ +encode "XML" +} diff --git a/COMMON/src/general_typedefs.ttcn b/COMMON/src/general_typedefs.ttcn new file mode 100644 index 00000000..6432e533 --- /dev/null +++ b/COMMON/src/general_typedefs.ttcn @@ -0,0 +1,236 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson 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 +* +* Contributors: +* Zoltan Jasz - initial implementation and initial documentation +* Abhishek Gupta +* Attila Balasko +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Janos Kovesdi +* Sandor Palugyai +* Tibor Csondes +******************************************************************************/ +// +// File: general_typedefs.ttcn +// Rev: R9A +// Prodnr: CNL 113 368 +// Reference: + +module general_typedefs +{ + +group SimpleNativeTypes +{ +//octetstring with fixed length +type octetstring OCT0n length(0); +type octetstring OCT1n length(1); +type octetstring OCT2n length(2); +type octetstring OCT3n length(3); +type octetstring OCT4n length(4); +type octetstring OCT5n length(5); +type octetstring OCT6n length(6); +type octetstring OCT7n length(7); +type octetstring OCT8n length(8); +type octetstring OCT9n length(9); +type octetstring OCT10n length(10); +type octetstring OCT11n length(11); +type octetstring OCT12n length(12); +type octetstring OCT13n length(13); +type octetstring OCT14n length(14); +type octetstring OCT15n length(15); +type octetstring OCT16n length(16); +type octetstring OCT17n length(17); +type octetstring OCT18n length(18); +type octetstring OCT19n length(19); +type octetstring OCT20n length(20); +type octetstring OCT28n length(28); +type octetstring OCT32n length(32); +type octetstring OCT34n length(34); +type octetstring OCT46n length(46); +type octetstring OCT50n length(50); +type octetstring OCT69n length(69); +type octetstring OCT100n length(100); +type octetstring OCT128n length(128); +type octetstring OCT500n length(500); +type octetstring OCTNn; + +//octetstring with length interval +type octetstring OCT1_3n length(1..3); +type octetstring OCT1_4n length(1..4); +type octetstring OCT1_5n length(1..5); +type octetstring OCT1_6n length(1..6); +type octetstring OCT1_7n length(1..7); +type octetstring OCT1_8n length(1..8); +type octetstring OCT1_12n length(1..12); +type octetstring OCT1_15n length(1..15); +type octetstring OCT1_16n length(1..16); +type octetstring OCT1_18n length(1..18); +type octetstring OCT1_20n length(1..20); +type octetstring OCT1_24n length(1..24); +type octetstring OCT1_34n length(1..34); +type octetstring OCT1_46n length(1..46); +type octetstring OCT1_50n length(1..50); +type octetstring OCT1_112n length(1..112); +type octetstring OCT1_127n length(1..127); +type octetstring OCT1_128n length(1..128); +type octetstring OCT1_172n length(1..172); +type octetstring OCT3_5n length(3..5); +type octetstring OCT3_7n length(3..7); +type octetstring OCT3_8n length(3..8); +type octetstring OCT3_17n length(3..17); +type octetstring OCT4_8n length(4..8); + +//hexstring with fixed length +type hexstring HEX24n length(24); + +//hexstring with length interval +type hexstring HEX0_18n length(0..18); +type hexstring HEX1_20n length(1..20); + + +//bitstring with fixed length +type bitstring BIT1n length(1); +type bitstring BIT2n length(2); +type bitstring BIT3n length(3); +type bitstring BIT4n length(4); +type bitstring BIT5n length(5); +type bitstring BIT6n length(6); +type bitstring BIT7n length(7); +type bitstring BIT8n length(8); +type bitstring BIT9n length(9); +type bitstring BIT12n length(12); +type bitstring BIT14n length(14); +type bitstring BIT15n length(15); +type bitstring BIT16n length(16); +type bitstring BIT56n length(56); + +//bitstring with length interval +type bitstring BIT14_24n length(14..24); + +//bitstring to be padded with fixed length +type bitstring BIT1np length(1); +type bitstring BIT2np length(2); +type bitstring BIT3np length(3); +type bitstring BIT4np length(4); +type bitstring BIT5np length(5); +type bitstring BIT6np length(6); +type bitstring BIT7np length(7); +type bitstring BIT15np length(15); + +//integer with fixed bit number +type integer INT3nb (0..7); +type integer INT4nb (0..15); +type integer INT5nb (0..31); +type integer INT8nb (0..255); + +//integer with fixed bit number and with padding +type integer INT2nbp (0..3); +type integer INT1nbp (0..1); +type integer INT3nbp (0..7); +type integer INT5nbp (0..31); +type integer INT9nbp (0..511); +type integer INT13nbp (0..8095); +type integer INT15nbp (0..32767); + +}// end group NativeTypes + +group SimpleRAWEncodedTypes +{ +//octetstring with fixed length +type octetstring Dummy length(0) with { variant "FIELDLENGTH(0)" }; +type octetstring OCT0 length(0) with { variant "FIELDLENGTH(0)" }; +type octetstring OCT1 length(1) with { variant "FIELDLENGTH(1)" }; +type octetstring OCT2 length(2) with { variant "FIELDLENGTH(2)" }; +type octetstring OCT3 length(3) with { variant "FIELDLENGTH(3)" }; +type octetstring OCT4 length(4) with { variant "FIELDLENGTH(4)" }; +type octetstring OCT5 length(5) with { variant "FIELDLENGTH(5)" }; +type octetstring OCT6 length(6) with { variant "FIELDLENGTH(6)" }; +type octetstring OCT7 length(7) with { variant "FIELDLENGTH(7)" }; +type octetstring OCT8 length(8) with { variant "FIELDLENGTH(8)" }; +type octetstring OCT9 length(9) with { variant "FIELDLENGTH(9)" }; +type octetstring OCT10 length(10) with { variant "FIELDLENGTH(10)" }; +type octetstring OCT11 length(11) with { variant "FIELDLENGTH(11)" }; +type octetstring OCT12 length(12) with { variant "FIELDLENGTH(12)" }; +type octetstring OCT13 length(13) with { variant "FIELDLENGTH(13)" }; +type octetstring OCT14 length(14) with { variant "FIELDLENGTH(14)" }; +type octetstring OCT15 length(15) with { variant "FIELDLENGTH(15)" }; +type octetstring OCT16 length(16) with { variant "FIELDLENGTH(16)" }; +type octetstring OCT17 length(17) with { variant "FIELDLENGTH(17)" }; +type octetstring OCT18 length(18) with { variant "FIELDLENGTH(18)" }; +type octetstring OCT19 length(19) with { variant "FIELDLENGTH(19)" }; +type octetstring OCT20 length(20) with { variant "FIELDLENGTH(20)" }; +type octetstring OCT32 length(32) with { variant "FIELDLENGTH(32)" }; +type octetstring OCT34 length(34) with { variant "FIELDLENGTH(34)" }; +type octetstring OCT46 length(46) with { variant "FIELDLENGTH(46)" }; + +//octetstring with length interval +type octetstring OCT1_12 length(1..12) with { variant "" }; +type octetstring OCT1_8 length(1..8) with { variant "" }; +type octetstring OCT3_8 length(3..8) with { variant "" }; +type octetstring OCT1_50 length(1..50) with { variant "" }; +type octetstring OCTN with { variant "" }; + +//bitstring with fixed length +type bitstring BIT1 length(1) with { variant "FIELDLENGTH (1)" }; +type bitstring BIT2 length(2) with { variant "FIELDLENGTH(2)" }; +type bitstring BIT3 length(3) with { variant "FIELDLENGTH(3)" }; +type bitstring BIT4 length(4) with { variant "FIELDLENGTH(4)" }; +type bitstring BIT5 length(5) with { variant "FIELDLENGTH(5)" }; +type bitstring BIT6 length(6) with { variant "FIELDLENGTH(6)" }; +type bitstring BIT7 length(7) with { variant "FIELDLENGTH(7)" }; +type bitstring BIT8 length(8) with { variant "FIELDLENGTH(8)" }; +type bitstring BIT9 length(9) with { variant "FIELDLENGTH(9)" }; +type bitstring BIT12 length(12) with { variant "FIELDLENGTH(12)" }; +type bitstring BIT14 length(14) with { variant "FIELDLENGTH(14)" }; +type bitstring BIT15 length(15) with { variant "FIELDLENGTH(15)" }; +type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" }; +type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" }; +type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" }; +type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" }; + +type hexstring HEX1 length(1) with {variant "FIELDLENGTH(1)"}; + +//integer with fixed octet number +type integer INT1 (0..255) with { variant "FIELDLENGTH(8)" }; +type integer LIN1 (0..255) with { variant "FIELDLENGTH(8)" } +type integer LIN2 (0..65535) with { variant "FIELDLENGTH(16)" } + +//integer with fixed bit number +type integer INT7b (0..127) with { variant "FIELDLENGTH(7)" }; + +//integer record +type record of integer Integers; +type record of Integers Integer_array; + +} with {encode "RAW"} // end group SimpleRAWEncodedTypes + + group ComponentTypes + { + type component Dummy_comptype {} + } + + group CompositeTypes + { + type enumerated Protocols + { mtp3, sccp, isup, bicc, qaal2, gcp, bssap, bssmap, ranap, dtap } + + type record of OCT1 OCT1List; + type record of OCT2 OCT2List; + type record of OCT3 OCT3List; + type record of OCT4 OCT4List; + type record of OCT5 OCT5List; + type record of OCT6 OCT6List; + type record of OCT7 OCT7List; + + type record of Dummy_comptype ListOfDummy_comptype; + + type record of Protocols ProtocolList; + } + +}with { encode "RAW"} /* End of module general_typedefs */ diff --git a/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn b/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn new file mode 100644 index 00000000..99f570ad --- /dev/null +++ b/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn @@ -0,0 +1,150 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson 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 +* +* Contributors: +* Zoltan Jasz - initial implementation and initial documentation +* Abhishek Gupta +* Attila Balasko +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Janos Kovesdi +* Sandor Palugyai +* Tibor Csondes +******************************************************************************/ +// +// File: http_www_w3_org_XML_1998_namespace.ttcn +// Rev: R9A +// Prodnr: CNL 113 368 +// Reference: + +module http_www_w3_org_XML_1998_namespace { + + +import from XSD all; + + +/* See http://www.w3.org/XML/1998/namespace.html and + http://www.w3.org/TR/REC-xml for information about this namespace. + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. + + Note that local names in this namespace are intended to be defined + only by the World Wide Web Consortium or its subgroups. The + following names are currently defined in this namespace and should + not be used with conflicting semantics by any Working Group, + specification, or document instance: + + base (as an attribute name): denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification. + + lang (as an attribute name): denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification. + + space (as an attribute name): denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification. + + Father (in any context at all): denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: + + In appreciation for his vision, leadership and dedication + the W3C XML Plenary on this 10th day of February, 2000 + reserves for Jon Bosak in perpetuity the XML name + xml:Father */ + + +/* This schema defines attributes and an attribute group + suitable for use by + schemas wishing to allow xml:base, xml:lang or xml:space attributes + on elements they define. + + To enable this, such a schema must import this schema + for the XML namespace, e.g. as follows: */ +/* < */ +/* schema . . . */ +/* > */ +/* . . . */ +/* < */ +/* import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2001/03/xml.xsd"/ */ +/* > */ +/* Subsequently, qualified reference to any of the attributes + or the group defined below will have the desired effect, e.g. */ +/* < */ +/* type . . . */ +/* > */ +/* . . . */ +/* < */ +/* attributeGroup ref="xml:specialAttrs"/ */ +/* > */ +/* will define a type which will schema-validate an instance + element with any of those attributes */ + + +/* In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + http://www.w3.org/2001/03/xml.xsd. + At the date of issue it can also be found at + http://www.w3.org/2001/xml.xsd. + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML Schema + itself. In other words, if the XML Schema namespace changes, the version + of this document at + http://www.w3.org/2001/xml.xsd will change + accordingly; the version at + http://www.w3.org/2001/03/xml.xsd will not change. */ + + +/* In due course, we should install the relevant ISO 2- and 3-letter + codes as the enumerated possible values . . . */ +type XSD.Language Lang +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +type enumerated Space +{ + default_, + preserve +} +with { +variant "text 'default_' as 'default'"; +variant "name as uncapitalized"; +variant "defaultForEmpty as 'preserve'"; +variant "attribute"; +}; + + +/* See http://www.w3.org/TR/xmlbase/ for + information about this attribute. */ +type XSD.AnyURI Base +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'http://www.w3.org/XML/1998/namespace'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +extension "version R9A" +} diff --git a/M3UA_CNL113536/M3UA_CNL113536.tpd b/M3UA_CNL113536/M3UA_CNL113536.tpd new file mode 100644 index 00000000..c6729023 --- /dev/null +++ b/M3UA_CNL113536/M3UA_CNL113536.tpd @@ -0,0 +1,44 @@ + + + + M3UA_CNL113536 + + + + + + + + + + Default + + + + + true + true + true + bin/M3UA_CNL113536 + + + bin + + + + + diff --git a/M3UA_CNL113536/doc/documentation_note.txt b/M3UA_CNL113536/doc/documentation_note.txt new file mode 100644 index 00000000..eb68bfba --- /dev/null +++ b/M3UA_CNL113536/doc/documentation_note.txt @@ -0,0 +1,13 @@ +Please note that the storage of the documentation of the product has been +moved to the eridoc.ericsson.se from the ClearCase. + +You can access the documentation of the product via the following links: + +The documentation belongs to the R2A revision of the product +can be found here: +http://document.internal.ericsson.com/Download?DocNo=1095-CNL113536&Rev=C&Lang=EN&PRev=Y + +The documentation belongs to the latest revision of the product +can be found here: +http://document.internal.ericsson.com/Download?DocNo=1095-CNL113536&Rev=HIGHEST&Lang=EN&Status=FREE&PRev=Y + diff --git a/M3UA_CNL113536/src/M3UA_Types.ttcn b/M3UA_CNL113536/src/M3UA_Types.ttcn new file mode 100644 index 00000000..d79d8327 --- /dev/null +++ b/M3UA_CNL113536/src/M3UA_Types.ttcn @@ -0,0 +1,805 @@ +/****************************************************************************** +* Copyright (c) 2004, 2015 Ericsson 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 +* +* Contributors: +* Ferenc Kovacs +* Gabor Bettesch +* Gabor Szalai +******************************************************************************/ +// +// File: M3UA_Types.ttcn +// Rev: R2A +// Prodnr: CNL 113 536 +// Reference: + +module M3UA_Types { + +import from General_Types all; + +external function enc_PDU_M3UA(in PDU_M3UA pdu) return octetstring +with { extension "prototype(convert)" + extension "encode(RAW)" + } + +external function dec_PDU_M3UA(in octetstring stream) return PDU_M3UA +with { extension "prototype(convert)" + extension "decode(RAW)" + } + +//++++++++++++++++++++++++++++++++++++++++++++++++++ +// M3UA PARAMETERS +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type octetstring M3UA_OCT0_255 length (0..255); + +type record M3UA_Point_Code +{ + OCT1 mask, + OCT3 affected_Point_Code +} + +type record of M3UA_Point_Code M3UA_Point_Codes; + +type record M3UA_Error_Code +{ + OCT2 tag, + integer lengthInd, + OCT4 errorCode +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,errorCode)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_Routing_Context +{ + OCT2 tag, + integer lengthInd, + octetstring routingContext +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,routingContext)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + variant "PADDING(dword32)"; + } + +type record M3UA_Affected_Point_Codes +{ + OCT2 tag, + integer lengthInd, + M3UA_Point_Codes pointCodes +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,pointCodes)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_Network_Appearance +{ + OCT2 tag, + integer lengthInd, + OCT4 networkAppearance +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,networkAppearance)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_Diagnostic_information +{ + OCT2 tag, + integer lengthInd, + octetstring diagnosticInformation +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,diagnosticInformation)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + variant "PADDING(dword32)"; + } + +type record M3UA_Correlation_ID +{ + OCT2 tag, + integer lengthInd, + OCT4 correlationID +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,correlationID)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_Protocol_Data +{ + OCT2 tag, + integer lengthInd, + OCT4 oPC, + OCT4 dPC, + OCT1 sI, + OCT1 nI, + OCT1 mP, + OCT1 sLS, + octetstring userProtocolData +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,oPC,dPC,sI,nI,mP,sLS, + userProtocolData)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + variant "PADDING(dword32)"; + } + +type record M3UA_Info_String +{ + OCT2 tag, + integer lengthInd, + M3UA_OCT0_255 infoString +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,infoString)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + variant "PADDING(dword32)"; + } + +type record M3UA_Concerned_Destination +{ + OCT2 tag, + integer lengthInd, + OCT1 reserved, + OCT3 concernedDestination +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved, + concernedDestination)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_Congestion_Indicators +{ + OCT2 tag, + integer lengthInd, + OCT1 reserved, + OCT3 congestionLevel +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,congestionLevel)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_User_Cause +{ + OCT2 tag, + integer lengthInd, + OCT2 cause, + OCT2 user +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,cause,user)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_ASP_Identifier +{ + OCT2 tag, + integer lengthInd, + OCT4 aSPIdentifier +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,aSPIdentifier)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + +type record M3UA_Heartbeat_Data +{ + OCT2 tag, + integer lengthInd, + octetstring heartbeat_Data +} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,heartbeat_Data)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + variant "PADDING(dword32)"; + } + +type record M3UA_Traffic_Mode_Type +{ + OCT2 tag, + integer lengthInd, + OCT4 trafficModeType +} with { variant (lengthInd) "LENGTHTO (tag,lengthInd,trafficModeType)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + } + + +//++++++++++++++++++++++++++++++++++++++++++++++++++ +//PDUs +//++++++++++++++++++++++++++++++++++++++++++++++++++ + +// M3UA_ERR PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ERR +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ERR_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ERR_MessageParameters +{ + M3UA_Error_Code error_Code, + M3UA_Routing_Context routing_Context optional, + M3UA_Affected_Point_Codes affected_Point_Codes optional, + M3UA_Network_Appearance network_Appearance optional, + M3UA_Diagnostic_information diagnostic_information optional +} with { variant "TAG(error_Code, tag = '000C'O; + routing_Context, tag = '0006'O; + affected_Point_Codes, tag = '0012'O; + network_Appearance, tag = '0200'O; + diagnostic_information, tag = '0007'O; )" + } + + +// M3UA_NOTIFY +// NOTE1 : NOTIFY should not come and will be dropped if it comes +// NOTE2 : messageParameters is simpified implementation as octetstring +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_NOTIFY +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + octetstring messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + + +// M3UA_DATA PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DATA +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_DATA_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_DATA_MessageParameters +{ + M3UA_Network_Appearance network_Appearance optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Protocol_Data protocol_Data, + M3UA_Correlation_ID correlation_ID optional +} with { variant "TAG(network_Appearance, tag = '0200'O; + routing_Context, tag = '0006'O; + protocol_Data, tag = '0210'O; + correlation_ID, tag = '0013'O; )" + } + + +// M3UA_DUNA PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DUNA +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_DUNA_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_DUNA_MessageParameters +{ + M3UA_Network_Appearance network_Appearance optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Affected_Point_Codes affected_Point_Codes, + M3UA_Info_String info_String optional +} with { variant "TAG(network_Appearance, tag = '0200'O; + routing_Context, tag = '0006'O; + affected_Point_Codes, tag = '0012'O; + info_String, tag = '0004'O )" + } + + +// M3UA_DAVA PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DAVA +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_DAVA_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_DAVA_MessageParameters +{ + M3UA_Network_Appearance network_Appearance optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Affected_Point_Codes affected_Point_Codes, + M3UA_Info_String info_String optional +} with { variant "TAG(network_Appearance, tag = '0200'O; + routing_Context, tag = '0006'O; + affected_Point_Codes, tag = '0012'O; + info_String, tag = '0004'O )" + } + + +// M3UA_DAUD PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DAUD +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_DAUD_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_DAUD_MessageParameters +{ + M3UA_Network_Appearance network_Appearance optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Affected_Point_Codes affected_Point_Codes, + M3UA_Info_String info_String optional +} with { variant "TAG(network_Appearance, tag = '0200'O; + routing_Context, tag = '0006'O; + affected_Point_Codes, tag = '0012'O; + info_String, tag = '0004'O )" + } + + +// M3UA_SCON PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_SCON +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_SCON_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_SCON_MessageParameters +{ + M3UA_Network_Appearance network_Appearance optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Affected_Point_Codes affected_Point_Codes, + M3UA_Concerned_Destination concerned_Destination optional, + M3UA_Congestion_Indicators congestion_Indicators optional, + M3UA_Info_String info_String optional +} with { variant "TAG(network_Appearance, tag = '0200'O; + routing_Context, tag = '0006'O; + affected_Point_Codes, tag = '0012'O; + concerned_Destination, tag = '0206'O; + congestion_Indicators, tag = '0205'O; + info_String, tag = '0004'O )" + } + + +// M3UA_DUPU PDU +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DUPU +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_DUPU_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_DUPU_MessageParameters +{ + M3UA_Network_Appearance network_Appearance optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Affected_Point_Codes affected_Point_Codes, + M3UA_User_Cause user_Cause, + M3UA_Info_String info_String optional +} with { variant "TAG(network_Appearance, tag = '0200'O; + routing_Context, tag = '0006'O; + affected_Point_Codes, tag = '0012'O; + user_Cause, tag = '0204'O; + info_String, tag = '0004'O )" + } + + +// M3UA_DRST PDU +// NOTE1 : DRST should not come and will be dropped if it comes +// NOTE2 : messageParameters is simpified implementation as octetstring +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DRST +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + octetstring messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + + +// M3UA_ASPUP +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPUP +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPUP_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPUP_MessageParameters +{ + M3UA_ASP_Identifier aSP_Identifier optional, + M3UA_Info_String info_String optional +} with { variant "TAG(aSP_Identifier, tag = '0011'O; + info_String, tag = '0004'O; )" + } + + +//M3UA_ASPUP_Ack +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPUP_Ack +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPUP_Ack_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPUP_Ack_MessageParameters +{ + M3UA_Info_String info_String optional +} with { variant "TAG(info_String, tag = '0004'O; )" + } + + +//M3UA_ASPDN +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPDN +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPDN_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPDN_MessageParameters +{ + M3UA_Info_String info_String optional +} with { variant "TAG(info_String, tag = '0004'O; )" + } + + +//M3UA_ASPDN_Ack +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPDN_Ack +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPDN_Ack_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPDN_Ack_MessageParameters +{ + M3UA_Info_String info_String optional +} with { variant "TAG(info_String, tag = '0004'O;)" + } + + +// M3UA_BEAT +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_BEAT +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_BEAT_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_BEAT_MessageParameters +{ + M3UA_Heartbeat_Data heartbeat_Data optional +} with { variant "TAG(heartbeat_Data, tag = '0009'O; )" + } + + +// M3UA_BEAT_Ack +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_BEAT_Ack +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_BEAT_Ack_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_BEAT_Ack_MessageParameters +{ + M3UA_Heartbeat_Data heartbeat_Data optional +} with { variant "TAG(heartbeat_Data, tag = '0009'O; )" + } + + +// M3UA_ASPAC +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPAC +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPAC_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPAC_MessageParameters +{ + M3UA_Traffic_Mode_Type traffic_Mode_Type optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Info_String info_String optional +} with { variant "TAG(traffic_Mode_Type, tag = '000B'O; + routing_Context, tag = '0006'O; + info_String, tag = '0004'O; )" + } + + +// M3UA_ASPAC_Ack +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPAC_Ack +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPAC_Ack_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPAC_Ack_MessageParameters +{ + M3UA_Traffic_Mode_Type traffic_Mode_Type optional, + M3UA_Routing_Context routing_Context optional, + M3UA_Info_String info_String optional +} with { variant "TAG(traffic_Mode_Type, tag = '000B'O; + routing_Context, tag = '0006'O; + info_String, tag = '0004'O; )" + } + + +// M3UA_ASPIA +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPIA +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPIA_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPIA_MessageParameters +{ + M3UA_Routing_Context routing_Context optional, + M3UA_Info_String info_String optional +} with { variant "TAG(routing_Context, tag = '0006'O; + info_String, tag = '0004'O; )" + } + + +// M3UA_ASPIA_Ack +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_ASPIA_Ack +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + M3UA_ASPIA_Ack_MessageParameters messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + +type set M3UA_ASPIA_Ack_MessageParameters +{ + M3UA_Routing_Context routing_Context optional, + M3UA_Info_String info_String optional +} with { variant "TAG(routing_Context, tag = '0006'O; + info_String, tag = '0004'O; )" + } + + +// M3UA_REG_REQ +// NOTE1 : REG REQ should not come and will be dropped if it comes +// NOTE2 : messageParameters is simpified implementation as octetstring +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_REG_REQ +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + octetstring messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + + +// M3UA_REG_RSP +// NOTE1 : REG RSP should not come and will be dropped if it comes +// NOTE2 : messageParameters is simpified implementation as octetstring +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_REG_RSP +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + octetstring messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + + +// M3UA_DEREG_REQ +// NOTE1 : DEREG REQ should not come and will be dropped if it comes +// NOTE2 : messageParameters is simpified implementation as octetstring +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DEREG_REQ +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + octetstring messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + + +// M3UA_DEREG_RSP +// NOTE1 : DEREG RSP should not come and will be dropped if it comes +// NOTE2 : messageParameters is simpified implementation as octetstring +//++++++++++++++++++++++++++++++++++++++++++++++++++ +type record M3UA_DEREG_RSP +{ + OCT1 version, + OCT1 reserved, + OCT2 messageClassAndType, + integer messageLength, + octetstring messageParameters +} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType, + messageLength,messageParameters)"; + variant (messageLength) "FIELDLENGTH(32)"; + variant (messageLength) "BYTEORDER(last)"; + } + + +// Top level PDU +//************************************************************************ +type union PDU_M3UA +{ + M3UA_ERR m3UA_ERR, // Error + M3UA_NOTIFY m3UA_NOTIFY, // Notify - should not come + M3UA_DATA m3UA_DATA, // Payload data + M3UA_DUNA m3UA_DUNA, // Destination Unavailable + M3UA_DAVA m3UA_DAVA, // Destination Available + M3UA_DAUD m3UA_DAUD, // Destination State Audit + M3UA_SCON m3UA_SCON, // Signaling Congestion + M3UA_DUPU m3UA_DUPU, // Destination User Part Unavailable + M3UA_DRST m3UA_DRST, // DRST - should not come + M3UA_ASPUP m3UA_ASPUP, // ASP up + M3UA_ASPDN m3UA_ASPDN, // ASP down + M3UA_BEAT m3UA_BEAT, // Heartbeat + M3UA_BEAT_Ack m3UA_BEAT_Ack, // Heartbeat Ack + M3UA_ASPUP_Ack m3UA_ASPUP_Ack, // ASP up ack + M3UA_ASPDN_Ack m3UA_ASPDN_Ack, // ASP down ack + M3UA_ASPAC m3UA_ASPAC, // ASP Active + M3UA_ASPIA m3UA_ASPIA, // ASP Inactive + M3UA_ASPAC_Ack m3UA_ASPAC_Ack, // ASP Active Ack + M3UA_ASPIA_Ack m3UA_ASPIA_Ack, // ASP Inactive + M3UA_REG_REQ m3UA_REG_REQ, // REG REQ - should not come + M3UA_REG_RSP m3UA_REG_RSP, // REG RSP - should not come + M3UA_DEREG_REQ m3UA_DEREG_REQ, // DEREG REQ - should not come + M3UA_DEREG_RSP m3UA_DEREG_RSP // DEREG RSP - should not come +} with { variant "TAG( + m3UA_ERR, messageClassAndType = '0000'O; //MGMT Class (0), + m3UA_NOTIFY, messageClassAndType = '0001'O; //MGMT Class (0), + m3UA_DATA, messageClassAndType = '0101'O; //Transf msg Class(1), + m3UA_DUNA, messageClassAndType = '0201'O; //SSNM Class(2), + m3UA_DAVA, messageClassAndType = '0202'O; //SSNM Class(2), + m3UA_DAUD, messageClassAndType = '0203'O; //SSNM Class(2), + m3UA_SCON, messageClassAndType = '0204'O; //SSNM Class(2), + m3UA_DUPU, messageClassAndType = '0205'O; //SSNM Class(2), + m3UA_DRST, messageClassAndType = '0206'O; //SSNM Class(2), + m3UA_ASPUP, messageClassAndType = '0301'O; //ASPSM Class(3), + m3UA_ASPDN, messageClassAndType = '0302'O; //ASPSM Class(3), + m3UA_BEAT, messageClassAndType = '0303'O; //ASPSM Class(3), + m3UA_ASPUP_Ack, messageClassAndType = '0304'O; //ASPSM Class(3), + m3UA_ASPDN_Ack, messageClassAndType = '0305'O; //ASPSM Class(3), + m3UA_BEAT_Ack, messageClassAndType = '0306'O; //ASPSM Class(3), + m3UA_ASPAC, messageClassAndType = '0401'O; //ASPTM Class(4), + m3UA_ASPIA, messageClassAndType = '0402'O; //ASPTM Class(4), + m3UA_ASPAC_Ack, messageClassAndType = '0403'O; //ASPTM Class(4), + m3UA_ASPIA_Ack, messageClassAndType = '0404'O; //ASPTM Class(4), + m3UA_REG_REQ, messageClassAndType = '0901'O; //RKM Class(9), + m3UA_REG_RSP, messageClassAndType = '0902'O; //RKM Class(9), + m3UA_DEREG_REQ, messageClassAndType = '0903'O; //RKM Class(9), + m3UA_DEREG_RSP, messageClassAndType = '0904'O; )" //RKM Class(9), + } +} with { encode "RAW"} diff --git a/M3UA_CNL113537/demo/Abstract_Socket.cc b/M3UA_CNL113537/demo/Abstract_Socket.cc new file mode 120000 index 00000000..6d1b3f35 --- /dev/null +++ b/M3UA_CNL113537/demo/Abstract_Socket.cc @@ -0,0 +1 @@ +../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc \ No newline at end of file diff --git a/M3UA_CNL113537/demo/Abstract_Socket.hh b/M3UA_CNL113537/demo/Abstract_Socket.hh new file mode 120000 index 00000000..ecb6c036 --- /dev/null +++ b/M3UA_CNL113537/demo/Abstract_Socket.hh @@ -0,0 +1 @@ +../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh \ No newline at end of file diff --git a/M3UA_CNL113537/demo/BICC_EncDec.cc b/M3UA_CNL113537/demo/BICC_EncDec.cc new file mode 120000 index 00000000..f3f7144d --- /dev/null +++ b/M3UA_CNL113537/demo/BICC_EncDec.cc @@ -0,0 +1 @@ +../../../ProtocolModules/BICC_Q.1902.1_CNL113359/src/BICC_EncDec.cc \ No newline at end of file diff --git a/M3UA_CNL113537/demo/BICC_Types.ttcn b/M3UA_CNL113537/demo/BICC_Types.ttcn new file mode 120000 index 00000000..de200f7a --- /dev/null +++ b/M3UA_CNL113537/demo/BICC_Types.ttcn @@ -0,0 +1 @@ +../../../ProtocolModules/BICC_Q.1902.1_CNL113359/src/BICC_Types.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/General_Types.ttcn b/M3UA_CNL113537/demo/General_Types.ttcn new file mode 120000 index 00000000..354ebf3f --- /dev/null +++ b/M3UA_CNL113537/demo/General_Types.ttcn @@ -0,0 +1 @@ +../../../ProtocolModules/COMMON/src/General_Types.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/M3UA_Emulation.ttcn b/M3UA_CNL113537/demo/M3UA_Emulation.ttcn new file mode 120000 index 00000000..bf12ab9e --- /dev/null +++ b/M3UA_CNL113537/demo/M3UA_Emulation.ttcn @@ -0,0 +1 @@ +../src/M3UA_Emulation.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn b/M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn new file mode 100644 index 00000000..4c1e86af --- /dev/null +++ b/M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn @@ -0,0 +1,152 @@ +module M3UA_Emulation_Test +{ + +//import from MTP3asp_PortType all; +import from MTP3asp_Types all; +import from BICC_Types all; +import from M3UA_Emulation all; +import from SCTPasp_PortType all; + +modulepar +{ + SCTP_Association_Address tsp_address := { 0, "", 0, "" }; + // float tsp_serverWait := 5.0; + // boolean tsp_serverTest := false; +} + +type port MTP3asp_PT_Int message +{ + out ASP_MTP3_TRANSFERreq; + in ASP_MTP3_TRANSFERind; +} with {extension "internal"} + +type component BICC_CT +{ + port MTP3asp_PT_Int BICC_MTP3_PORT; +} + +type component MTC_CT +{ + var BICC_CT vlc_BICC_COMPONENT_1; + var M3UA_CT vlc_M3UA_COMPONENT_1; + port SCTPasp_PT SCTP_PORT; + +// var BICC_CT vlc_BICC_COMPONENT_2; +// port MTP3asp_PT M3UA_PORT; +} + +function f_testconfig_bicc(SCTP_Association_Address pl_address) runs on MTC_CT +{ + vlc_BICC_COMPONENT_1 := BICC_CT.create; + vlc_M3UA_COMPONENT_1 := M3UA_CT.create; + connect(vlc_BICC_COMPONENT_1:BICC_MTP3_PORT, + vlc_M3UA_COMPONENT_1:MTP3_SP_PORT); + map(system:SCTP_PORT, vlc_M3UA_COMPONENT_1:SCTP_PORT); + vlc_M3UA_COMPONENT_1.start(f_M3UA_Emulation(pl_address)); +} + +function f_testconfig_end_demo_bicc() runs on MTC_CT +{ + unmap(system:SCTP_PORT, vlc_M3UA_COMPONENT_1:SCTP_PORT); + disconnect(vlc_BICC_COMPONENT_1:BICC_MTP3_PORT, vlc_M3UA_COMPONENT_1:MTP3_SP_PORT); + vlc_M3UA_COMPONENT_1.stop; +} + +template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_BICC := +{ sio := { + ni := '10'B, + prio := ?, + si := '1101'B + }, + opc := ?, + dpc := ?, + sls := ?, + data := ? +} + +function f_init_BICC_bicc() runs on BICC_CT +{ + var PDU_BICC vl_PDU_BICC; + var ASP_MTP3_TRANSFERind vl_ASP_MTP3_TRANSFERind; + var ASP_MTP3_TRANSFERreq vl_ASP_MTP3_TRANSFERreq; + + vl_PDU_BICC := { + BICC_GRA := { + CIC := '00000000'O, + MType := '00010111'B, + var_part_ptr := 1, + RngSts := + { range := '1F'O, + status := ''O + } + } + } + + vl_ASP_MTP3_TRANSFERreq := { + sio := { + ni := '10'B, + prio := '00'B, + si := '1101'B + }, + opc := 115, + dpc := 300, + sls := 0, + data := enc_PDU_BICC(vl_PDU_BICC) + } + + timer T_Timer := 5.0; + T_Timer.start; + alt { + [] BICC_MTP3_PORT.receive(tr_ASP_MTP3_TRANSFERind_BICC) + -> value vl_ASP_MTP3_TRANSFERind { + log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind); + vl_PDU_BICC := dec_PDU_BICC(vl_ASP_MTP3_TRANSFERind.data); + log("received BICC message: ", vl_PDU_BICC); + setverdict(pass); + BICC_MTP3_PORT.send(vl_ASP_MTP3_TRANSFERreq); + T_Timer.stop; + } + [] BICC_MTP3_PORT.receive(ASP_MTP3_TRANSFERind : ?) + -> value vl_ASP_MTP3_TRANSFERind { + log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind); + repeat; + } + [] BICC_MTP3_PORT.receive { + setverdict(fail); + } + [] T_Timer.timeout { + setverdict(fail); + } + } + + T_Timer.start; + alt { + [] BICC_MTP3_PORT.receive(tr_ASP_MTP3_TRANSFERind_BICC) + -> value vl_ASP_MTP3_TRANSFERind { + log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind); + vl_PDU_BICC := dec_PDU_BICC(vl_ASP_MTP3_TRANSFERind.data); + log("received BICC message: ", vl_PDU_BICC); + repeat; + } + [] BICC_MTP3_PORT.receive(ASP_MTP3_TRANSFERind : ?) + -> value vl_ASP_MTP3_TRANSFERind { + log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind); + repeat; + } + [] BICC_MTP3_PORT.receive { + } + [] T_Timer.timeout { + } + } + +} + +testcase tc_M3UA_demo_bicc() runs on MTC_CT +{ + f_testconfig_bicc(tsp_address); + vlc_BICC_COMPONENT_1.start(f_init_BICC_bicc()); + vlc_BICC_COMPONENT_1.done; + f_testconfig_end_demo_bicc(); +} + +} diff --git a/M3UA_CNL113537/demo/M3UA_Types.ttcn b/M3UA_CNL113537/demo/M3UA_Types.ttcn new file mode 120000 index 00000000..ca43cb34 --- /dev/null +++ b/M3UA_CNL113537/demo/M3UA_Types.ttcn @@ -0,0 +1 @@ +../../../ProtocolModules/M3UA_CNL113536/src/M3UA_Types.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/MTP3asp_EncDec.cc b/M3UA_CNL113537/demo/MTP3asp_EncDec.cc new file mode 120000 index 00000000..88f10839 --- /dev/null +++ b/M3UA_CNL113537/demo/MTP3asp_EncDec.cc @@ -0,0 +1 @@ +../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc \ No newline at end of file diff --git a/M3UA_CNL113537/demo/MTP3asp_Types.ttcn b/M3UA_CNL113537/demo/MTP3asp_Types.ttcn new file mode 120000 index 00000000..9f03c54e --- /dev/null +++ b/M3UA_CNL113537/demo/MTP3asp_Types.ttcn @@ -0,0 +1 @@ +../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/Makefile b/M3UA_CNL113537/demo/Makefile new file mode 100644 index 00000000..ffc0aeb0 --- /dev/null +++ b/M3UA_CNL113537/demo/Makefile @@ -0,0 +1,920 @@ +# This Makefile was generated by the Makefile Generator +# of the TTCN-3 Test Executor version 1.7.pre1 build 7 +# for Gabor Bettesch (ethgbh@mwux018) on Tue May 29 11:06:47 2007 + +# Copyright 2000-2007 Test Competence Center, Ericsson R & D, Hungary +# For trouble reporting use the tool MTTSMS. +# For TR writers guide please visit the web page: http://ttcn.ericsson.se + +# The following make commands are available: +# - make, make all Builds the executable test suite. +# - make archive Archives all source files. +# - make check Checks the semantics of TTCN-3 and ASN.1 modules. +# - make clean Removes all generated files. +# - make compile Translates TTCN-3 and ASN.1 modules to C++. +# - make dep Creates/updates dependency list. +# - make objects Builds the object files without linking the executable. +# - make tags Creates/updates tags file using ctags. + +# WARNING! This Makefile can be used with GNU make only. +# Other versions of make may report syntax errors in it. + +# +# Do NOT touch this line... +# +.PHONY: all archive check clean dep objects + +# +# Set these variables... +# + +# The path of your TTCN-3 Test Executor installation: +# Uncomment this line to override the environment variable. +# TTCN3_DIR = + +# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32) +PLATFORM = LINUX + +# Your C++ compiler: +CXX = g++ + +# Flags for the C++ preprocessor (and makedepend as well): +CPPFLAGS = -D$(PLATFORM) -DTARGET_TEST -I$(TTCN3_DIR)/include -I$(SCTP_DIR)/include + +# Flags for the C++ compiler: +CXXFLAGS = -Wall + +# Flags for the linker: +LDFLAGS = + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS = -L + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3-parallel + +# The path of your OpenSSL installation: +# If you do not have your own one, leave it unchanged. +OPENSSL_DIR = $(TTCN3_DIR) + +# Directory to store the archived source files: +ARCHIVE_DIR = backup + +SCTP_DIR = /usr/local/lksctp-tools-1.0.6 +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = General_Types.ttcn BICC_Types.ttcn M3UA_Emulation.ttcn M3UA_Emulation_Test.ttcn M3UA_Types.ttcn SCTPasp_PortType.ttcn SCTPasp_Types.ttcn MTP3asp_Types.ttcn +#MTP3asp_PortType.ttcn +# ASN.1 modules of this project: +ASN1_MODULES = + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) + +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = Abstract_Socket.cc BICC_EncDec.cc SCTPasp_PT.cc MTP3asp_EncDec.cc +USER_HEADERS = Abstract_Socket.hh SCTPasp_PT.hh +#MTP3asp_PT.hh MTP3asp_PT.cc +# Object files of this project that are needed for the executable test suite: +OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) + +# Other files of the project (Makefile, configuration files, etc.) +# that will be added to the archived source files: +OTHER_FILES = m3ua_emu.cfg Makefile + +# The name of the executable test suite: +TARGET = M3UA_Emulation_Test + +# +# Do not modify these unless you know what you are doing... +# Platform specific additional libraries: +# +SOLARIS_LIBS = -lsocket -lnsl +SOLARIS8_LIBS = -lsocket -lnsl +LINUX_LIBS = +FREEBSD_LIBS = +WIN32_LIBS = + +# +# Rules for building the executable... +# + +all: $(TARGET) ; + +objects: $(OBJECTS) ; + +$(TARGET): $(OBJECTS) + $(CXX) $(LDFLAGS) -o $@ $^ \ + -L$(TTCN3_DIR)/lib -L$(SCTP_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +check: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) $^ + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) $^ - $? + touch $@ + +browserdata.dat: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -B -s $(COMPILER_FLAGS) $^ + +tags: $(TTCN3_MODULES) $(ASN1_MODULES) \ +$(USER_HEADERS) $(USER_SOURCES) + $(TTCN3_DIR)/bin/ctags_ttcn3 --line-directives=yes $^ + +clean: + -$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile \ + browserdata.dat tags *.log + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) + makedepend $(CPPFLAGS) $^ + +archive: + mkdir -p $(ARCHIVE_DIR) + tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \ + | gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz + +# +# Add your rules here if necessary... +# + +# DO NOT DELETE + +General_Types.o: General_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +General_Types.o: /usr/include/string.h /usr/include/features.h +General_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +General_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +General_Types.o: /usr/include/stdio.h /usr/include/bits/types.h +General_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h +General_Types.o: /usr/include/_G_config.h /usr/include/wchar.h +General_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h +General_Types.o: /usr/include/bits/stdio_lim.h +General_Types.o: /usr/include/bits/sys_errlist.h +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +General_Types.o: /usr/include/stdlib.h /usr/include/sys/types.h +General_Types.o: /usr/include/time.h /usr/include/endian.h +General_Types.o: /usr/include/bits/endian.h /usr/include/sys/select.h +General_Types.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +General_Types.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +General_Types.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +General_Types.o: /usr/include/sys/time.h +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +General_Types.o: /usr/include/regex.h +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +BICC_Types.o: BICC_Types.hh General_Types.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +BICC_Types.o: /usr/include/string.h /usr/include/features.h +BICC_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +BICC_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +BICC_Types.o: /usr/include/stdio.h /usr/include/bits/types.h +BICC_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h +BICC_Types.o: /usr/include/_G_config.h /usr/include/wchar.h +BICC_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h +BICC_Types.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h +BICC_Types.o: /usr/include/sys/types.h /usr/include/time.h +BICC_Types.o: /usr/include/endian.h /usr/include/bits/endian.h +BICC_Types.o: /usr/include/sys/select.h /usr/include/bits/select.h +BICC_Types.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +BICC_Types.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +BICC_Types.o: /usr/include/alloca.h +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +BICC_Types.o: /usr/include/sys/time.h +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +BICC_Types.o: /usr/include/regex.h +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +M3UA_Emulation.o: M3UA_Emulation.hh M3UA_Types.hh General_Types.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +M3UA_Emulation.o: /usr/include/string.h /usr/include/features.h +M3UA_Emulation.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +M3UA_Emulation.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +M3UA_Emulation.o: /usr/include/stdio.h /usr/include/bits/types.h +M3UA_Emulation.o: /usr/include/bits/typesizes.h /usr/include/libio.h +M3UA_Emulation.o: /usr/include/_G_config.h /usr/include/wchar.h +M3UA_Emulation.o: /usr/include/bits/wchar.h /usr/include/gconv.h +M3UA_Emulation.o: /usr/include/bits/stdio_lim.h +M3UA_Emulation.o: /usr/include/bits/sys_errlist.h +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +M3UA_Emulation.o: /usr/include/stdlib.h /usr/include/sys/types.h +M3UA_Emulation.o: /usr/include/time.h /usr/include/endian.h +M3UA_Emulation.o: /usr/include/bits/endian.h /usr/include/sys/select.h +M3UA_Emulation.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +M3UA_Emulation.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +M3UA_Emulation.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +M3UA_Emulation.o: /usr/include/sys/time.h +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +M3UA_Emulation.o: /usr/include/regex.h +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +M3UA_Emulation.o: SCTPasp_PortType.hh SCTPasp_Types.hh SCTPasp_PT.hh +M3UA_Emulation.o: /usr/include/sys/socket.h /usr/include/sys/uio.h +M3UA_Emulation.o: /usr/include/bits/uio.h /usr/include/bits/socket.h +M3UA_Emulation.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +M3UA_Emulation.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +M3UA_Emulation.o: /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h +M3UA_Emulation.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h +M3UA_Emulation.o: /usr/include/netinet/in.h /usr/include/stdint.h +M3UA_Emulation.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h +M3UA_Emulation.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h +M3UA_Emulation.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h +M3UA_Emulation.o: /usr/include/linux/stddef.h /usr/include/linux/compiler.h +M3UA_Emulation.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h +M3UA_Emulation.o: MTP3asp_Types.hh +M3UA_Emulation_Test.o: M3UA_Emulation_Test.hh BICC_Types.hh General_Types.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +M3UA_Emulation_Test.o: /usr/include/string.h /usr/include/features.h +M3UA_Emulation_Test.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +M3UA_Emulation_Test.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +M3UA_Emulation_Test.o: /usr/include/stdio.h /usr/include/bits/types.h +M3UA_Emulation_Test.o: /usr/include/bits/typesizes.h /usr/include/libio.h +M3UA_Emulation_Test.o: /usr/include/_G_config.h /usr/include/wchar.h +M3UA_Emulation_Test.o: /usr/include/bits/wchar.h /usr/include/gconv.h +M3UA_Emulation_Test.o: /usr/include/bits/stdio_lim.h +M3UA_Emulation_Test.o: /usr/include/bits/sys_errlist.h +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +M3UA_Emulation_Test.o: /usr/include/stdlib.h /usr/include/sys/types.h +M3UA_Emulation_Test.o: /usr/include/time.h /usr/include/endian.h +M3UA_Emulation_Test.o: /usr/include/bits/endian.h /usr/include/sys/select.h +M3UA_Emulation_Test.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +M3UA_Emulation_Test.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +M3UA_Emulation_Test.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +M3UA_Emulation_Test.o: /usr/include/sys/time.h +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +M3UA_Emulation_Test.o: /usr/include/regex.h +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +M3UA_Emulation_Test.o: M3UA_Emulation.hh M3UA_Types.hh SCTPasp_PortType.hh +M3UA_Emulation_Test.o: SCTPasp_Types.hh SCTPasp_PT.hh +M3UA_Emulation_Test.o: /usr/include/sys/socket.h /usr/include/sys/uio.h +M3UA_Emulation_Test.o: /usr/include/bits/uio.h /usr/include/bits/socket.h +M3UA_Emulation_Test.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +M3UA_Emulation_Test.o: /usr/include/bits/local_lim.h +M3UA_Emulation_Test.o: /usr/include/linux/limits.h +M3UA_Emulation_Test.o: /usr/include/bits/posix2_lim.h +M3UA_Emulation_Test.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h +M3UA_Emulation_Test.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h +M3UA_Emulation_Test.o: /usr/include/stdint.h /usr/include/bits/in.h +M3UA_Emulation_Test.o: /usr/include/bits/byteswap.h +M3UA_Emulation_Test.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h +M3UA_Emulation_Test.o: /usr/include/linux/types.h +M3UA_Emulation_Test.o: /usr/include/linux/posix_types.h +M3UA_Emulation_Test.o: /usr/include/linux/stddef.h +M3UA_Emulation_Test.o: /usr/include/linux/compiler.h +M3UA_Emulation_Test.o: /usr/include/asm/posix_types.h +M3UA_Emulation_Test.o: /usr/include/asm/types.h MTP3asp_Types.hh +M3UA_Types.o: M3UA_Types.hh General_Types.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +M3UA_Types.o: /usr/include/string.h /usr/include/features.h +M3UA_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +M3UA_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +M3UA_Types.o: /usr/include/stdio.h /usr/include/bits/types.h +M3UA_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h +M3UA_Types.o: /usr/include/_G_config.h /usr/include/wchar.h +M3UA_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h +M3UA_Types.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h +M3UA_Types.o: /usr/include/sys/types.h /usr/include/time.h +M3UA_Types.o: /usr/include/endian.h /usr/include/bits/endian.h +M3UA_Types.o: /usr/include/sys/select.h /usr/include/bits/select.h +M3UA_Types.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +M3UA_Types.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +M3UA_Types.o: /usr/include/alloca.h +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +M3UA_Types.o: /usr/include/sys/time.h +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +M3UA_Types.o: /usr/include/regex.h +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +SCTPasp_PortType.o: SCTPasp_PortType.hh SCTPasp_Types.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +SCTPasp_PortType.o: /usr/include/string.h /usr/include/features.h +SCTPasp_PortType.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +SCTPasp_PortType.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +SCTPasp_PortType.o: /usr/include/stdio.h /usr/include/bits/types.h +SCTPasp_PortType.o: /usr/include/bits/typesizes.h /usr/include/libio.h +SCTPasp_PortType.o: /usr/include/_G_config.h /usr/include/wchar.h +SCTPasp_PortType.o: /usr/include/bits/wchar.h /usr/include/gconv.h +SCTPasp_PortType.o: /usr/include/bits/stdio_lim.h +SCTPasp_PortType.o: /usr/include/bits/sys_errlist.h +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +SCTPasp_PortType.o: /usr/include/stdlib.h /usr/include/sys/types.h +SCTPasp_PortType.o: /usr/include/time.h /usr/include/endian.h +SCTPasp_PortType.o: /usr/include/bits/endian.h /usr/include/sys/select.h +SCTPasp_PortType.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +SCTPasp_PortType.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +SCTPasp_PortType.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +SCTPasp_PortType.o: /usr/include/sys/time.h +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +SCTPasp_PortType.o: /usr/include/regex.h +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh SCTPasp_PT.hh +SCTPasp_PortType.o: /usr/include/sys/socket.h /usr/include/sys/uio.h +SCTPasp_PortType.o: /usr/include/bits/uio.h /usr/include/bits/socket.h +SCTPasp_PortType.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +SCTPasp_PortType.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +SCTPasp_PortType.o: /usr/include/bits/posix2_lim.h +SCTPasp_PortType.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h +SCTPasp_PortType.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h +SCTPasp_PortType.o: /usr/include/stdint.h /usr/include/bits/in.h +SCTPasp_PortType.o: /usr/include/bits/byteswap.h +SCTPasp_PortType.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h +SCTPasp_PortType.o: /usr/include/linux/types.h +SCTPasp_PortType.o: /usr/include/linux/posix_types.h +SCTPasp_PortType.o: /usr/include/linux/stddef.h /usr/include/linux/compiler.h +SCTPasp_PortType.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h +SCTPasp_Types.o: SCTPasp_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +SCTPasp_Types.o: /usr/include/string.h /usr/include/features.h +SCTPasp_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +SCTPasp_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +SCTPasp_Types.o: /usr/include/stdio.h /usr/include/bits/types.h +SCTPasp_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h +SCTPasp_Types.o: /usr/include/_G_config.h /usr/include/wchar.h +SCTPasp_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h +SCTPasp_Types.o: /usr/include/bits/stdio_lim.h +SCTPasp_Types.o: /usr/include/bits/sys_errlist.h +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +SCTPasp_Types.o: /usr/include/stdlib.h /usr/include/sys/types.h +SCTPasp_Types.o: /usr/include/time.h /usr/include/endian.h +SCTPasp_Types.o: /usr/include/bits/endian.h /usr/include/sys/select.h +SCTPasp_Types.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +SCTPasp_Types.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +SCTPasp_Types.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +SCTPasp_Types.o: /usr/include/sys/time.h +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +SCTPasp_Types.o: /usr/include/regex.h +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +MTP3asp_Types.o: MTP3asp_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +MTP3asp_Types.o: /usr/include/string.h /usr/include/features.h +MTP3asp_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +MTP3asp_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +MTP3asp_Types.o: /usr/include/stdio.h /usr/include/bits/types.h +MTP3asp_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h +MTP3asp_Types.o: /usr/include/_G_config.h /usr/include/wchar.h +MTP3asp_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h +MTP3asp_Types.o: /usr/include/bits/stdio_lim.h +MTP3asp_Types.o: /usr/include/bits/sys_errlist.h +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +MTP3asp_Types.o: /usr/include/stdlib.h /usr/include/sys/types.h +MTP3asp_Types.o: /usr/include/time.h /usr/include/endian.h +MTP3asp_Types.o: /usr/include/bits/endian.h /usr/include/sys/select.h +MTP3asp_Types.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +MTP3asp_Types.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +MTP3asp_Types.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +MTP3asp_Types.o: /usr/include/sys/time.h +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +MTP3asp_Types.o: /usr/include/regex.h +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +Abstract_Socket.o: Abstract_Socket.hh /usr/include/sys/socket.h +Abstract_Socket.o: /usr/include/features.h /usr/include/sys/cdefs.h +Abstract_Socket.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +Abstract_Socket.o: /usr/include/gnu/stubs-32.h /usr/include/sys/uio.h +Abstract_Socket.o: /usr/include/sys/types.h /usr/include/bits/types.h +Abstract_Socket.o: /usr/include/bits/typesizes.h /usr/include/time.h +Abstract_Socket.o: /usr/include/endian.h /usr/include/bits/endian.h +Abstract_Socket.o: /usr/include/sys/select.h /usr/include/bits/select.h +Abstract_Socket.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +Abstract_Socket.o: /usr/include/sys/sysmacros.h +Abstract_Socket.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/uio.h +Abstract_Socket.o: /usr/include/bits/socket.h /usr/include/limits.h +Abstract_Socket.o: /usr/include/bits/posix1_lim.h +Abstract_Socket.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +Abstract_Socket.o: /usr/include/bits/posix2_lim.h +Abstract_Socket.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h +Abstract_Socket.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h +Abstract_Socket.o: /usr/include/stdint.h /usr/include/bits/wchar.h +Abstract_Socket.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +Abstract_Socket.o: /usr/include/string.h /usr/include/stdio.h +Abstract_Socket.o: /usr/include/libio.h /usr/include/_G_config.h +Abstract_Socket.o: /usr/include/wchar.h /usr/include/gconv.h +Abstract_Socket.o: /usr/include/bits/stdio_lim.h +Abstract_Socket.o: /usr/include/bits/sys_errlist.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +Abstract_Socket.o: /usr/include/stdlib.h /usr/include/alloca.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +Abstract_Socket.o: /usr/include/sys/time.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +Abstract_Socket.o: /usr/include/regex.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +Abstract_Socket.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h +Abstract_Socket.o: /usr/include/bits/confname.h /usr/include/getopt.h +Abstract_Socket.o: /usr/include/strings.h /usr/include/errno.h +Abstract_Socket.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +Abstract_Socket.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +Abstract_Socket.o: /usr/include/asm-generic/errno-base.h /usr/include/netdb.h +Abstract_Socket.o: /usr/include/rpc/netdb.h /usr/include/bits/netdb.h +Abstract_Socket.o: /usr/include/sys/stat.h /usr/include/bits/stat.h +Abstract_Socket.o: /usr/include/netinet/tcp.h /usr/include/arpa/inet.h +Abstract_Socket.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h +Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/memory.h +BICC_EncDec.o: BICC_Types.hh General_Types.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +BICC_EncDec.o: /usr/include/string.h /usr/include/features.h +BICC_EncDec.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +BICC_EncDec.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +BICC_EncDec.o: /usr/include/stdio.h /usr/include/bits/types.h +BICC_EncDec.o: /usr/include/bits/typesizes.h /usr/include/libio.h +BICC_EncDec.o: /usr/include/_G_config.h /usr/include/wchar.h +BICC_EncDec.o: /usr/include/bits/wchar.h /usr/include/gconv.h +BICC_EncDec.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h +BICC_EncDec.o: /usr/include/sys/types.h /usr/include/time.h +BICC_EncDec.o: /usr/include/endian.h /usr/include/bits/endian.h +BICC_EncDec.o: /usr/include/sys/select.h /usr/include/bits/select.h +BICC_EncDec.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +BICC_EncDec.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +BICC_EncDec.o: /usr/include/alloca.h +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +BICC_EncDec.o: /usr/include/sys/time.h +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +BICC_EncDec.o: /usr/include/regex.h +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +SCTPasp_PT.o: SCTPasp_PT.hh SCTPasp_PortType.hh SCTPasp_Types.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +SCTPasp_PT.o: /usr/include/string.h /usr/include/features.h +SCTPasp_PT.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +SCTPasp_PT.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +SCTPasp_PT.o: /usr/include/stdio.h /usr/include/bits/types.h +SCTPasp_PT.o: /usr/include/bits/typesizes.h /usr/include/libio.h +SCTPasp_PT.o: /usr/include/_G_config.h /usr/include/wchar.h +SCTPasp_PT.o: /usr/include/bits/wchar.h /usr/include/gconv.h +SCTPasp_PT.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h +SCTPasp_PT.o: /usr/include/sys/types.h /usr/include/time.h +SCTPasp_PT.o: /usr/include/endian.h /usr/include/bits/endian.h +SCTPasp_PT.o: /usr/include/sys/select.h /usr/include/bits/select.h +SCTPasp_PT.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +SCTPasp_PT.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +SCTPasp_PT.o: /usr/include/alloca.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +SCTPasp_PT.o: /usr/include/sys/time.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +SCTPasp_PT.o: /usr/include/regex.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh +SCTPasp_PT.o: /usr/include/sys/socket.h /usr/include/sys/uio.h +SCTPasp_PT.o: /usr/include/bits/uio.h /usr/include/bits/socket.h +SCTPasp_PT.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h +SCTPasp_PT.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h +SCTPasp_PT.o: /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h +SCTPasp_PT.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h +SCTPasp_PT.o: /usr/include/netinet/in.h /usr/include/stdint.h +SCTPasp_PT.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h +SCTPasp_PT.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h +SCTPasp_PT.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h +SCTPasp_PT.o: /usr/include/linux/stddef.h /usr/include/linux/compiler.h +SCTPasp_PT.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h +SCTPasp_PT.o: /usr/include/arpa/inet.h /usr/include/unistd.h +SCTPasp_PT.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h +SCTPasp_PT.o: /usr/include/getopt.h /usr/include/netdb.h +SCTPasp_PT.o: /usr/include/rpc/netdb.h /usr/include/bits/netdb.h +SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/memory.h /usr/include/fcntl.h +SCTPasp_PT.o: /usr/include/bits/fcntl.h /usr/include/errno.h +SCTPasp_PT.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +SCTPasp_PT.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +SCTPasp_PT.o: /usr/include/asm-generic/errno-base.h +MTP3asp_EncDec.o: MTP3asp_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/version.h +MTP3asp_EncDec.o: /usr/include/string.h /usr/include/features.h +MTP3asp_EncDec.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +MTP3asp_EncDec.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h +MTP3asp_EncDec.o: /usr/include/stdio.h /usr/include/bits/types.h +MTP3asp_EncDec.o: /usr/include/bits/typesizes.h /usr/include/libio.h +MTP3asp_EncDec.o: /usr/include/_G_config.h /usr/include/wchar.h +MTP3asp_EncDec.o: /usr/include/bits/wchar.h /usr/include/gconv.h +MTP3asp_EncDec.o: /usr/include/bits/stdio_lim.h +MTP3asp_EncDec.o: /usr/include/bits/sys_errlist.h +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh +MTP3asp_EncDec.o: /usr/include/stdlib.h /usr/include/sys/types.h +MTP3asp_EncDec.o: /usr/include/time.h /usr/include/endian.h +MTP3asp_EncDec.o: /usr/include/bits/endian.h /usr/include/sys/select.h +MTP3asp_EncDec.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +MTP3asp_EncDec.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +MTP3asp_EncDec.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh +MTP3asp_EncDec.o: /usr/include/sys/time.h +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh +MTP3asp_EncDec.o: /usr/include/regex.h +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh +MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh diff --git a/M3UA_CNL113537/demo/SCTPasp_PT.cc b/M3UA_CNL113537/demo/SCTPasp_PT.cc new file mode 120000 index 00000000..2b931e95 --- /dev/null +++ b/M3UA_CNL113537/demo/SCTPasp_PT.cc @@ -0,0 +1 @@ +../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_PT.cc \ No newline at end of file diff --git a/M3UA_CNL113537/demo/SCTPasp_PT.hh b/M3UA_CNL113537/demo/SCTPasp_PT.hh new file mode 120000 index 00000000..e37473f5 --- /dev/null +++ b/M3UA_CNL113537/demo/SCTPasp_PT.hh @@ -0,0 +1 @@ +../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_PT.hh \ No newline at end of file diff --git a/M3UA_CNL113537/demo/SCTPasp_PortType.ttcn b/M3UA_CNL113537/demo/SCTPasp_PortType.ttcn new file mode 120000 index 00000000..4394e347 --- /dev/null +++ b/M3UA_CNL113537/demo/SCTPasp_PortType.ttcn @@ -0,0 +1 @@ +../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/SCTPasp_Types.ttcn b/M3UA_CNL113537/demo/SCTPasp_Types.ttcn new file mode 120000 index 00000000..71876a06 --- /dev/null +++ b/M3UA_CNL113537/demo/SCTPasp_Types.ttcn @@ -0,0 +1 @@ +../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn \ No newline at end of file diff --git a/M3UA_CNL113537/demo/m3ua_emu.cfg b/M3UA_CNL113537/demo/m3ua_emu.cfg new file mode 100644 index 00000000..9533515d --- /dev/null +++ b/M3UA_CNL113537/demo/m3ua_emu.cfg @@ -0,0 +1,21 @@ +[LOGGING] +LogSourceInfo := Yes +FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING + +[EXECUTE] +M3UA_Emulation_Test.tc_M3UA_demo_bicc + +[TESTPORT_PARAMETERS] +system.SCTP_PORT.debug := "yes" + +[MODULE_PARAMETERS] +M3UA_Emulation.tsp_logVerbose := true; +M3UA_Emulation.tsp_M3UA_Server_Mode := false; +M3UA_Emulation_Test.tsp_address := +{ + local_sctp_port := 2905, + local_ip_addr := "10.6.70.19", + remote_sctp_port := 2905, + remote_ip_addr := "159.107.193.33" +} diff --git a/M3UA_CNL113537/src/M3UA_Emulation.ttcn b/M3UA_CNL113537/src/M3UA_Emulation.ttcn new file mode 100644 index 00000000..7a4a7e9b --- /dev/null +++ b/M3UA_CNL113537/src/M3UA_Emulation.ttcn @@ -0,0 +1,1307 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2009 // +// // +// 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: M3UA_Emulation.ttcn +// Reference: M3UA Protocol Emulation +// Rev: R1B01 +// Prodnr: CNL 113 537 +// Updated: 2009-01-06 +// Contact: http://ttcn.ericsson.se + +module M3UA_Emulation +{ + +modulepar +{ + boolean tsp_logVerbose := false; + float tsp_Timer := 2.0; // General timer used in M3UA emulation. + float tsp_ASPUP_Resend_Timer := 2.0; + float tsp_ASPAC_Resend_Timer := 2.0; + float tsp_Assoc_Restart_Timer := 60.0; + float tsp_Heartbeat_Timer := 30.0; + integer tsp_SCTP_PayloadProtocolID := 3; // 3 for M3UA. + boolean tsp_Enable_M3UA_Heartbeat := false; // Send SCTP packets periodically. + boolean tsp_SCTP_Server_Mode := false; + boolean tsp_M3UA_Server_Mode := false; +} + +import from General_Types all; +import from M3UA_Types all; +import from SCTPasp_Types all; +import from SCTPasp_PortType all; +import from MTP3asp_Types all; + +type record of ASP_MTP3_TRANSFERreq TRANSFERreq_Buffer; + +type record SCTP_Association_Address +{ + integer local_sctp_port, + charstring local_ip_addr, + integer remote_sctp_port, + charstring remote_ip_addr +} + +// Definition of M3UA_Entity which contains M3UA entity data. +type record M3UA_Entity +{ + M3UA_CommStatus commStatus optional, + integer sCTP_Assoc_ID optional, + SCTP_Association_Address assoc +} + +// Type for status of SCTP communication for an M3UA entity. +type enumerated M3UA_CommStatus +{ + aSP_Down_initial_State (0), + aSP_Down_sCTP_Initialize_Done (1), + aSP_Down_sCTP_Associate_done (2), + aSP_Down_commUP_Received (3), + aSP_Down_ASPUP_Sent (4), + aSP_Inactive (5), + aSP_Inact_ASPAC_Sent (6), + aSP_Active (7) // aSPAC_Ack_Received +} + +// We need an internal port to communicate with the MTP3 side. +// internal in name +type port MTP3asp_SP_PT_Int message +{ + in ASP_MTP3_TRANSFERreq; + out ASP_MTP3_TRANSFERind; + // out ASP_MTP3_PAUSE; + // out ASP_MTP3_RESUME; + // out ASP_MTP3_STATUS; +} with { + extension "internal" +} + +// M3UA emulation component. +type component M3UA_CT +{ + var M3UA_Entity v_Entity; + var TRANSFERreq_Buffer v_TRANSFERreq_Buffer := {}; + + var ASP_SCTP v_ASP_SCTP; + var ASP_SCTP_SEND_FAILED v_ASP_SCTP_SEND_FAILED; + var ASP_SCTP_RESULT v_ASP_SCTP_RESULT; + var ASP_SCTP_Connected v_ASP_SCTP_Connected; + var ASP_SCTP_ASSOC_CHANGE v_ASP_SCTP_ASSOC_CHANGE; + var ASP_SCTP_SHUTDOWN_EVENT v_ASP_SCTP_SHUTDOWN_EVENT; + + var PDU_M3UA v_PDU_M3UA; + + // Component timers. + timer T_Timer := tsp_Timer; + timer T_ASPUP_resend := tsp_ASPUP_Resend_Timer; + timer T_ASPAC_resend := tsp_ASPAC_Resend_Timer; + timer T_Heartbeat := tsp_Heartbeat_Timer; + timer T_Assoc_restart := tsp_Assoc_Restart_Timer; + + // Port declarations. + port MTP3asp_SP_PT_Int MTP3_SP_PORT; // Port towards MTP3/M3UA. + port SCTPasp_PT SCTP_PORT; // Port towards target through SCTP. +} + +//******************************** +// Start of SCTP related templates +//******************************** +template ASP_SCTP t_S_SCTP_Send + (in template integer pl_associationID, + in template integer pl_streamID, + in template octetstring pl_userData, + in template integer pl_protocolID) := +{ + client_id := pl_associationID, + sinfo_stream := pl_streamID, + sinfo_ppid := pl_protocolID, + data := pl_userData +} + +template ASP_SCTP_SEND_FAILED t_ASP_SCTP_SEND_FAILED + (in template integer pl_streamID) := +{ + client_id := pl_streamID +} + +template ASP_SCTP_Listen t_ASP_SCTP_Listen + (template charstring pl_local_hostname, + template integer pl_local_portnumber) := +{ + local_hostname := pl_local_hostname, + local_portnumber := pl_local_portnumber +} + +template ASP_SCTP_Connected tr_ASP_SCTP_Connected + (template integer pl_client_id, + template charstring pl_local_hostname, + template integer pl_local_portnumber, + template charstring pl_peer_hostname, + template integer pl_peer_portnumber) := +{ + client_id := pl_client_id, + local_hostname := pl_local_hostname, + local_portnumber := pl_local_portnumber, + peer_hostname := pl_peer_hostname, + peer_portnumber := pl_peer_portnumber +} + +template ASP_SCTP_ConnectFrom t_ASP_SCTP_ConnectFrom + (template charstring pl_local_hostname, + template integer pl_local_portnumber, + template charstring pl_peer_hostname, + template integer pl_peer_portnumber) := +{ + local_hostname := pl_local_hostname, + local_portnumber := pl_local_portnumber, + peer_hostname := pl_peer_hostname, + peer_portnumber := pl_peer_portnumber +} + +template ASP_SCTP_RESULT t_ASP_SCTP_RESULT + (template integer pl_client_id, + template boolean pl_error_status, + template charstring pl_error_message) := +{ + client_id := pl_client_id, + error_status := pl_error_status, + error_message := pl_error_message +} + +template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_CommunicationUp + (in template integer pl_associationID) := +{ + client_id := pl_associationID, + sac_state := SCTP_COMM_UP +} + +template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_CommunicationLost + (in template integer pl_associationID) := +{ + client_id := pl_associationID, + sac_state := SCTP_COMM_LOST +} + +template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_ShutdownComplete + (in template integer pl_associationID) := +{ + client_id := pl_associationID, + sac_state := SCTP_SHUTDOWN_COMP +} + +template ASP_SCTP_SHUTDOWN_EVENT tr_S_SCTP_ShutdownEvent + (in template integer pl_associationID) := +{ + client_id := pl_associationID +} + +template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_Restart + (in template integer pl_associationID) := +{ + client_id := pl_associationID, + sac_state := SCTP_RESTART +} + +template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_CANT_STR_ASSOC + (in template integer pl_associationID) := +{ + client_id := pl_associationID, + sac_state := SCTP_CANT_STR_ASSOC +} + +template ASP_SCTP tr_S_SCTP_DataArrive + (in template integer pl_associationID, + in template integer pl_streamID, + in template integer pl_protocolID, + in template PDU_SCTP pl_data) := +{ + client_id := pl_associationID, + sinfo_stream := pl_streamID, + sinfo_ppid := pl_protocolID, + data := pl_data +} + +template ASP_SCTP_Close t_ASP_SCTP_Close + (in template integer pl_associationID) := +{ + client_id := pl_associationID +} +//****************************** +// End of SCTP related templates +//****************************** + +//***************************** +// Start of M3UA PDU templates. +//***************************** +template PDU_M3UA t_PDU_M3UA_ASPUP + (in template M3UA_ASP_Identifier pl_aSP_Identifier, + in template M3UA_Info_String pl_info_String) := +{ + m3UA_ASPUP := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0301'O, + messageLength := 0, + messageParameters := { + aSP_Identifier := pl_aSP_Identifier, + info_String := pl_info_String + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPUP_Ack := +{ + m3UA_ASPUP_Ack := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0304'O, + messageLength := 0, + messageParameters := { + info_String := omit + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPDN := +{ + m3UA_ASPDN := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0302'O, + messageLength := 0, + messageParameters := { + info_String := omit + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPDN_Ack := +{ + m3UA_ASPDN_Ack := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0305'O, + messageLength := 0, + messageParameters := { + info_String := omit + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPAC + (in template M3UA_Traffic_Mode_Type pl_traffic_Mode_Type, + in template M3UA_Routing_Context pl_routing_Context, + in template M3UA_Info_String pl_info_String) := +{ + m3UA_ASPAC := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0401'O, + messageLength := 0, + messageParameters := { + traffic_Mode_Type := pl_traffic_Mode_Type, + routing_Context := pl_routing_Context, + info_String := pl_info_String + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPAC_Ack + (in template M3UA_Traffic_Mode_Type pl_traffic_mode_type, + in template M3UA_Routing_Context pl_routing_Context) := +{ + m3UA_ASPAC_Ack := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0403'O, + messageLength := 0, + messageParameters := { + traffic_Mode_Type := pl_traffic_mode_type, + routing_Context := pl_routing_Context, + info_String := omit + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPIA + (in template M3UA_Routing_Context pl_routing_Context, + in template M3UA_Info_String pl_info_String) := +{ + m3UA_ASPIA := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0402'O, + messageLength := 0, + messageParameters := { + routing_Context := pl_routing_Context, + info_String := pl_info_String + } + } +} + +template PDU_M3UA t_PDU_M3UA_ASPIA_Ack + (in template M3UA_Routing_Context pl_routing_Context) := +{ + m3UA_ASPIA_Ack := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0404'O, + messageLength := 0, + messageParameters := { + routing_Context := pl_routing_Context, + info_String := omit + } + } +} + +template PDU_M3UA t_PDU_M3UA_Heartbeat + (in template M3UA_Heartbeat_Data pl_heartbeat_Data) := +{ + m3UA_BEAT := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0303'O, + messageLength := 0, + messageParameters := { + heartbeat_Data := pl_heartbeat_Data + } + } +} + +template PDU_M3UA t_PDU_M3UA_Beat_Ack + (in template M3UA_Heartbeat_Data pl_heartbeat_Data) := +{ + m3UA_BEAT_Ack := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0306'O, + messageLength := 0, + messageParameters := { + heartbeat_Data := pl_heartbeat_Data + } + } +} + +template PDU_M3UA t_PDU_M3UA_DATA + (in template M3UA_Network_Appearance pl_network_Appearance, + in template M3UA_Routing_Context pl_routing_Context, + in template M3UA_Protocol_Data pl_protocol_Data, + in template M3UA_Correlation_ID pl_correlation_ID) := +{ + m3UA_DATA := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0101'O, + messageLength := 0, + messageParameters := { + network_Appearance := pl_network_Appearance, + routing_Context := pl_routing_Context, + protocol_Data := pl_protocol_Data, + correlation_ID := pl_correlation_ID + } + } +} + +template PDU_M3UA t_PDU_M3UA_DAVA + (in template M3UA_Network_Appearance pl_network_Appearance, + in template M3UA_Routing_Context pl_routing_Context, + in template M3UA_Affected_Point_Codes pl_affected_Point_Codes, + in template M3UA_Info_String pl_info_String) := +{ + m3UA_DAVA := { + version := '01'O, + reserved := '00'O, + messageClassAndType := '0202'O, + messageLength := 0, + messageParameters := { + network_Appearance := pl_network_Appearance, + routing_Context := pl_routing_Context, + affected_Point_Codes := pl_affected_Point_Codes, + info_String := pl_info_String + } + } +} +//************************** +// End of M3UA PDU templates +//************************** + +//********************************** +// Start of M3UA parameter templates +//********************************** +template M3UA_Protocol_Data t_M3UA_Protocol_Data + (template OCT4 pl_oPC, + template OCT4 pl_dPC, + template OCT1 pl_sI, + template OCT1 pl_nI, + template OCT1 pl_mP, + template OCT1 pl_sLS, + template octetstring pl_userProtocolData) := +{ + tag := '0210'O, + lengthInd := 0, + oPC := pl_oPC, + dPC := pl_dPC, + sI := pl_sI, + nI := pl_nI, + mP := pl_mP, + sLS := pl_sLS, + userProtocolData := pl_userProtocolData +} +//******************************** +// End of M3UA parameter templates +//******************************** + +//*********************************** +// Dynamic part of the M3UA emulation +//*********************************** + +function f_M3UA_Emulation(SCTP_Association_Address pl_Boot) runs on M3UA_CT +{ + // Initialize parameters from the test case. + v_Entity.assoc := pl_Boot; + v_Entity.commStatus := aSP_Down_initial_State; + + // At this point, we assume that the ports are already connected and mapped + // properly by the user. + log("*************************************************"); + log("M3UA emulation initiated, the test can be started"); + log("*************************************************"); + + f_Initialize_SCTP(); + + // Start the main function in an infinte loop. + f_M3UA_ScanEvents(); +} + +// Initialize the SCTP layer with parameters read from the configuration file. +// We have only a single association. +function f_Initialize_SCTP() runs on M3UA_CT +{ + v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done; + if (tsp_SCTP_Server_Mode) { + // Send out a LISTEN message. The communication status doesn't change + // here. + SCTP_PORT.send + (t_ASP_SCTP_Listen(v_Entity.assoc.local_ip_addr, + v_Entity.assoc.local_sctp_port)); + } + else { + // Send ConnectFrom sequentially, wait for RESULT messages. + f_Associate(); + T_Assoc_restart.start; + } + + if (tsp_SCTP_PayloadProtocolID == 3) { + if (not tsp_M3UA_Server_Mode) { + T_ASPUP_resend.start; + T_ASPAC_resend.start; + } + if (tsp_Enable_M3UA_Heartbeat) { + T_Heartbeat.start; + } + } +} + +// Associate SCTP connection for a M3UA entity. +function f_Associate() runs on M3UA_CT +{ + SCTP_PORT.send(t_ASP_SCTP_ConnectFrom + (v_Entity.assoc.local_ip_addr, + v_Entity.assoc.local_sctp_port, + v_Entity.assoc.remote_ip_addr, + v_Entity.assoc.remote_sctp_port)); + + T_Timer.start; + alt { + [] SCTP_PORT.receive(t_ASP_SCTP_RESULT(*, ?, *)) -> value v_ASP_SCTP_RESULT { + if (v_ASP_SCTP_RESULT.error_status) { + log("Connect failed: ", v_ASP_SCTP_RESULT.error_message); + } + else { + v_Entity.sCTP_Assoc_ID := v_ASP_SCTP_RESULT.client_id; + v_Entity.commStatus := aSP_Down_sCTP_Associate_done; + log("SCTP_ConnectResult -> connection established from: ", + v_Entity.assoc.local_ip_addr, ":", v_Entity.assoc.local_sctp_port, + " to server: ", v_Entity.assoc.remote_ip_addr, ":", + v_Entity.assoc.remote_sctp_port, " association #", + v_Entity.sCTP_Assoc_ID); + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to ", + v_Entity.commStatus); + } + } + T_Timer.stop; + } + [] T_Timer.timeout { + log("----------------------------------------------"); + log("No response received to t_ASP_SCTP_ConnectFrom"); + log("----------------------------------------------"); + setverdict(fail); + // mtc.stop; + } + } +} + +// Starts M3UA emulation execution. +function f_M3UA_ScanEvents() runs on M3UA_CT +{ + var ASP_MTP3_TRANSFERreq vl_ASP_MTP3_TRANSFERreq; + + alt { + [] MTP3_SP_PORT.receive(ASP_MTP3_TRANSFERreq : ?) + -> value vl_ASP_MTP3_TRANSFERreq { + f_Send_MTP3_TRANSFERreq(vl_ASP_MTP3_TRANSFERreq); + repeat; + } + [] as_SCTP_CommunicationUp() + [] as_SCTP_DataArrive() + [] as_SCTP_Connected() + [] as_Unexpected_SCTP_Events() + [] as_handleM3UA_timers() + [] as_handleSCTP_timers() + } +} + +function f_Send_MTP3_TRANSFERreq(ASP_MTP3_TRANSFERreq pl_ASP_MTP3_TRANSFERreq) + runs on M3UA_CT +{ + if (v_Entity.commStatus == aSP_Active) { + if (tsp_SCTP_PayloadProtocolID == 3) { // M3UA + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 1, + enc_PDU_M3UA + (valueof + (t_PDU_M3UA_DATA + (omit, + omit, + t_M3UA_Protocol_Data + (int2oct(pl_ASP_MTP3_TRANSFERreq.opc, 4), // OPC + int2oct(pl_ASP_MTP3_TRANSFERreq.dpc, 4), // DPC + bit2oct('0000'B & pl_ASP_MTP3_TRANSFERreq.sio.si), // SIO + bit2oct('000000'B & pl_ASP_MTP3_TRANSFERreq.sio.ni), + bit2oct('000000'B & pl_ASP_MTP3_TRANSFERreq.sio.prio), + int2oct(pl_ASP_MTP3_TRANSFERreq.sls, 1), // SLS + pl_ASP_MTP3_TRANSFERreq.data), + omit))), + tsp_SCTP_PayloadProtocolID)); + } + else { // Non-M3UA + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 1, + pl_ASP_MTP3_TRANSFERreq.data, + tsp_SCTP_PayloadProtocolID)); + } + if (tsp_logVerbose) { + log("MTP3_SP_PORT: ASP_MTP3_TRANSFERreq received -> message sent " & + "via SCTP"); + } + } + else { + // If the SCTP association is not yet running, we have to buffer the data + // messages arrived from the MTP3 side. Sending of buffered data messages + // should occure when the SCTP association is up and before sending the + // data message in reply for a new ASP_MTP3_TRANSFERreq data message. The + // buffer should be checked before sending. + v_TRANSFERreq_Buffer[sizeof(v_TRANSFERreq_Buffer)] := + pl_ASP_MTP3_TRANSFERreq; + if (tsp_logVerbose) { + log("MTP3_SP_PORT: ASP_MTP3_TRANSFERreq received in an inactive state " & + "-> message was buffered"); + } + } +} + +// Handle communication up messages of users which performed associate earlier. +// We have only one association. +altstep as_SCTP_CommunicationUp() runs on M3UA_CT +{ + [] SCTP_PORT.receive(tr_S_SCTP_CommunicationUp(?)) + -> value v_ASP_SCTP_ASSOC_CHANGE { + if (v_Entity.sCTP_Assoc_ID == v_ASP_SCTP_ASSOC_CHANGE.client_id) { + if (v_Entity.commStatus == aSP_Down_sCTP_Associate_done) { + v_Entity.commStatus := aSP_Down_commUP_Received; + if (tsp_SCTP_PayloadProtocolID != 3) { // Non-M3UA + v_Entity.commStatus := aSP_Active; + var integer v_i; + for (v_i := 0; v_i < sizeof(v_TRANSFERreq_Buffer); v_i := v_i + 1) { + log("Sending buffered message #", v_i); + f_Send_MTP3_TRANSFERreq(v_TRANSFERreq_Buffer[v_i]); + } + v_TRANSFERreq_Buffer := {}; + // MTP3_SP_PORT.send(ASP_MTP3_RESUME : {}); + } + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + if ((not tsp_M3UA_Server_Mode) and + (tsp_SCTP_PayloadProtocolID == 3)) { // M3UA + f_ASPUP_Sending(); + } + } + else { + if (tsp_logVerbose) { + log("SCTP_CommunicationUp received in wrong state (i.e. not after " & + "SCTP_Associate is done) in state: ", v_Entity.commStatus); + } + } + } + else { + if (tsp_logVerbose) { + log("Association does not exists, received in CommunicationUp"); + } + } + repeat; + } +} + +// This altstep handles the data received from SCTP. +altstep as_SCTP_DataArrive() runs on M3UA_CT +{ + [] SCTP_PORT.receive(tr_S_SCTP_DataArrive + (?, // associationID + ?, // streamID + ?, // protocolID + ? // data + )) -> value v_ASP_SCTP { + // Checking the identifier for the association is not necessary, because we + // have only only one association. + if (f_Assoc_Exists(v_ASP_SCTP.client_id)) { + if (tsp_logVerbose) { + log("Message received on association #", v_Entity.sCTP_Assoc_ID); + } + if (tsp_SCTP_PayloadProtocolID == 3) { // M3UA + v_PDU_M3UA := dec_PDU_M3UA(v_ASP_SCTP.data); + f_handle_M3UA_msg(v_PDU_M3UA); + } + else { // Non-M3UA + f_handle_nonM3UA_msg(v_ASP_SCTP.data); + } + } + else{ + log("Message received on unknown association #", v_Entity.sCTP_Assoc_ID, + " -> closing connection"); + SCTP_PORT.send(t_ASP_SCTP_Close(v_Entity.sCTP_Assoc_ID)); + log("SCTP connection closed"); + } + repeat; + } +} + +// Handle the SCTP connected messages. It is sent from the SCTP side and it +// signals, that we're on the right track to create the association. This is +// for server mode. +altstep as_SCTP_Connected() runs on M3UA_CT +{ + [tsp_SCTP_Server_Mode] SCTP_PORT.receive(tr_ASP_SCTP_Connected(?, ?, ?, ?, ?)) + -> value v_ASP_SCTP_Connected { + // Message from the configured endpoint. + if ((v_ASP_SCTP_Connected.local_portnumber == + v_Entity.assoc.local_sctp_port) and + (v_ASP_SCTP_Connected.local_hostname == + v_Entity.assoc.local_ip_addr) and + (v_ASP_SCTP_Connected.peer_portnumber == + v_Entity.assoc.remote_sctp_port) and + (v_ASP_SCTP_Connected.peer_hostname == + v_Entity.assoc.remote_ip_addr)) { + v_Entity.sCTP_Assoc_ID := v_ASP_SCTP_Connected.client_id; + v_Entity.commStatus := aSP_Down_sCTP_Associate_done; + log("ASP_SCTP_Connected -> accepted connection from client: ", + v_ASP_SCTP_Connected.peer_hostname, ":", + v_ASP_SCTP_Connected.peer_portnumber, " on server: ", + v_ASP_SCTP_Connected.local_hostname, ":", + v_ASP_SCTP_Connected.local_portnumber, " with association #", + v_Entity.sCTP_Assoc_ID); + } + else { + log("ASP_SCTP_Connected -> connection from unknown client: ", + v_ASP_SCTP_Connected.peer_hostname, ":", + v_ASP_SCTP_Connected.peer_portnumber); + } + repeat; + } +} + +// Handle error messages of users. +altstep as_Unexpected_SCTP_Events() runs on M3UA_CT +{ + // Handle communications lost message. State of user with given index jumps + // back to initial state and stays there. That user will not be able to + // communicate anymore. + [] SCTP_PORT.receive(tr_S_SCTP_CommunicationLost(?)) + -> value v_ASP_SCTP_ASSOC_CHANGE { + if (f_Assoc_Exists(v_ASP_SCTP_ASSOC_CHANGE.client_id)) { + if (v_Entity.commStatus == aSP_Active) { + // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {}); + } + v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done; + v_Entity.sCTP_Assoc_ID := omit; + if (tsp_logVerbose) { + log("SCTP_CommunicationLost received"); + log("Association #", v_Entity.sCTP_Assoc_ID, " cleared, state " & + "changed to: ", v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("Association does not exist, received in CommunicationLost"); + } + } + repeat; + } + [] SCTP_PORT.receive(tr_S_SCTP_ShutdownComplete(?)) + -> value v_ASP_SCTP_ASSOC_CHANGE { + if (f_Assoc_Exists(v_ASP_SCTP_ASSOC_CHANGE.client_id)) { + if (v_Entity.commStatus == aSP_Active) { + // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {}); + } + v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done; + if (tsp_logVerbose) { + log("SCTP_ShutdownComplete received"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("Association does not exist, received in ShutdownComplete"); + } + } + repeat; + } + [] SCTP_PORT.receive(tr_S_SCTP_ShutdownEvent(?)) + -> value v_ASP_SCTP_SHUTDOWN_EVENT { + if (f_Assoc_Exists(v_ASP_SCTP_SHUTDOWN_EVENT.client_id)) { + if (v_Entity.commStatus == aSP_Active) { + // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {}); + } + v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done; + if (tsp_logVerbose) { + log("SCTP_ShutdownEvent received"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("Association does not exist, received in ShutdownEvent"); + } + } + repeat; + } + [] SCTP_PORT.receive(tr_ASP_SCTP_Connected(?, ?, ?, ?, ?)) + -> value v_ASP_SCTP_Connected { + log("Unexpected ASP_SCTP_Connected"); + repeat; + } + [] SCTP_PORT.receive(tr_S_SCTP_Restart(?)) -> value v_ASP_SCTP_ASSOC_CHANGE { + if (f_Assoc_Exists(v_ASP_SCTP_ASSOC_CHANGE.client_id)) { + log("SCTP_Restart received"); + v_Entity.commStatus := aSP_Down_commUP_Received; + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("Association does not exist, received in SCTP_Restart"); + } + } + repeat; + } + [] SCTP_PORT.receive(t_ASP_SCTP_SEND_FAILED(?)) + -> value v_ASP_SCTP_SEND_FAILED { + log("SCTP_Send failed for association #", v_Entity.sCTP_Assoc_ID); + if (f_Assoc_Exists(v_ASP_SCTP_SEND_FAILED.client_id)) { + // Daemon sends an error status message here. + // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {}); + } + else { + log("Send error received for association that doesn't exist"); + } + repeat; + } + [] SCTP_PORT.receive(tr_S_SCTP_CANT_STR_ASSOC(?)) { + repeat; + } + [] SCTP_PORT.receive { + repeat; + } +} + +// After reception of SCTP_CommunicationUp M3UA ASPUP/ASPAC is resent by the +// entity if it didn't receive ASPUP_Ack/ASPAC_Ack. +altstep as_handleM3UA_timers() runs on M3UA_CT +{ + [] T_ASPUP_resend.timeout { + if ((v_Entity.commStatus == aSP_Down_commUP_Received) or + (v_Entity.commStatus == aSP_Down_ASPUP_Sent)) { + // Try to send ASPUP again. + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPUP(omit, omit))), + tsp_SCTP_PayloadProtocolID)); + v_Entity.commStatus := aSP_Down_ASPUP_Sent; + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + T_ASPUP_resend.start; + repeat; + } + + [] T_ASPAC_resend.timeout { + if ((v_Entity.commStatus == aSP_Inactive) or + (v_Entity.commStatus == aSP_Inact_ASPAC_Sent)) { + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPAC(omit, omit, omit))), + tsp_SCTP_PayloadProtocolID)); + v_Entity.commStatus := aSP_Inact_ASPAC_Sent; + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + T_ASPAC_resend.start; + repeat; + } + + [tsp_Enable_M3UA_Heartbeat] T_Heartbeat.timeout { + if (v_Entity.commStatus == aSP_Active) { + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA(valueof(t_PDU_M3UA_Heartbeat(omit))), + tsp_SCTP_PayloadProtocolID)); + if (tsp_logVerbose) { + log("Heartbeat sent to association #", v_Entity.sCTP_Assoc_ID); + } + } + T_Heartbeat.start; + repeat; + } +} + +// Handles SCTP timer events. In server mode we don't associate. +altstep as_handleSCTP_timers() runs on M3UA_CT +{ + [not tsp_SCTP_Server_Mode] T_Assoc_restart.timeout { + if (v_Entity.commStatus == aSP_Down_sCTP_Initialize_Done) { + f_Associate(); + } + T_Assoc_restart.start; + repeat; + } +} + +// After reception of SCTP CommunicationUp messages M3UA ASPUP is sent by +// every entity and the M3UA ASPUP_Ack is received by every entity. +function f_ASPUP_Sending() runs on M3UA_CT +{ + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, // streamID + enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPUP(omit, omit))), + tsp_SCTP_PayloadProtocolID)); + v_Entity.commStatus := aSP_Down_ASPUP_Sent; + if (tsp_logVerbose) { + log("M3UA_ASPUP sent"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } +} + + +// Test if an association with assocID exists or not. We have only one +// association at the moment, we just check if the given assocID is the same, +// that is associated with our single entity. If we would have more entities +// in a table, the index of it should be returned instead of a boolean value. +function f_Assoc_Exists(integer pl_assocID) runs on M3UA_CT return boolean +{ + if (v_Entity.sCTP_Assoc_ID == pl_assocID) { + return true; + } + else { + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " not found"); + } + } + return false; +} + +function f_handle_M3UA_msg(PDU_M3UA pl_PDU_M3UA) runs on M3UA_CT +{ + if (ischosen(pl_PDU_M3UA.m3UA_DATA)) { + if (v_Entity.commStatus == aSP_Active) { + // Send ASP_MTP3_TRANSFERind message. + MTP3_SP_PORT.send + (valueof + (tr_ASP_MTP3_TRANSFERind_sio + (substr(oct2bit(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.nI), 6, 2), + substr(oct2bit(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.mP), 6, 2), + substr(oct2bit(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.sI), 4, 4), + oct2int(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.oPC), + oct2int(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.dPC), + oct2int(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.sLS), + pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.userProtocolData))); + if (tsp_logVerbose) { + log("MTP3_SP_PORT: Data received -> TRANSFERind sent"); + } + } + else { + // Buffering indication messages? + if (tsp_logVerbose) { + log("MTP3_SP_PORT: Data received, no user connected -> discard"); + } + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_BEAT)) { + if (v_Entity.commStatus == aSP_Active) { + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA + (valueof + (t_PDU_M3UA_Beat_Ack + (pl_PDU_M3UA.m3UA_BEAT.messageParameters.heartbeat_Data))), + tsp_SCTP_PayloadProtocolID)); + if (tsp_logVerbose) { + log("M3UA_BEAT received -> M3UA_BEAT_Ack sent"); + } + } + else { + if (tsp_logVerbose) { + log("M3UA_BEAT received in wrong state"); + } + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_BEAT_Ack)) { + if (tsp_logVerbose) { + log("Received M3UA_BEAT_Ack -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_ERR)) { + if (tsp_logVerbose) { + log("Received M3UA_ERR -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_NOTIFY)) { + if (tsp_logVerbose) { + log("Received M3UA_NOTIFY -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_DUNA)) { + if (tsp_logVerbose) { + log("Received M3UA_DUNA -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_DAVA)) { + if (tsp_logVerbose) { + log("Received M3UA_DAVA -> discard"); + } + } + // In server mode ASP_M3UA_DAUD messages can be received. In response the + // server must send ASP_M3UA_DAVA messages. It's not checked if we're + // servers or not. + else if (ischosen(pl_PDU_M3UA.m3UA_DAUD)) { + if ((v_Entity.commStatus == aSP_Inactive) or + (v_Entity.commStatus == aSP_Inact_ASPAC_Sent) or + (v_Entity.commStatus == aSP_Active)) { + // Send ASP_M3UA_DAVA message. + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA + (valueof + (t_PDU_M3UA_DAVA + (pl_PDU_M3UA.m3UA_DAUD.messageParameters.network_Appearance, + pl_PDU_M3UA.m3UA_DAUD.messageParameters.routing_Context, + pl_PDU_M3UA.m3UA_DAUD.messageParameters.affected_Point_Codes, + pl_PDU_M3UA.m3UA_DAUD.messageParameters.info_String))), + tsp_SCTP_PayloadProtocolID)); + if (tsp_logVerbose) { + log("M3UA_DAUD received -> DAVA sent"); + } + } + else { + if (tsp_logVerbose) { + log("M3UA_DAUD received in wrong state"); + } + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_SCON)) { + if (tsp_logVerbose) { + log("Received M3UA_SCON -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_DUPU)) { + if (tsp_logVerbose) { + log("Received M3UA_DUPU -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_DRST)) { + if (tsp_logVerbose) { + log("Received M3UA_DRST -> discard"); + } + } + // In server mode we can receive M3UA_ASPUP messages. The answer will be a + // M3UA_ASPUP_Ack message to the client. + else if (ischosen(pl_PDU_M3UA.m3UA_ASPUP)) { + if (((v_Entity.commStatus == aSP_Down_commUP_Received) or + (v_Entity.commStatus == aSP_Down_ASPUP_Sent)) and + tsp_M3UA_Server_Mode) { + v_Entity.commStatus := aSP_Inactive; + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPUP_Ack)), + tsp_SCTP_PayloadProtocolID)); + if (tsp_logVerbose) { + log("M3UA_ASPUP received -> M3UA_ASPUP_Ack sent"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("M3UA_ASPUP received in wrong state or the emulation is not in " & + "M3UA server mode"); + } + } + } + // Receives a M3UA_ASPDN message and sends a M3UA_ASPDN_Ack message in + // response. + else if (ischosen(pl_PDU_M3UA.m3UA_ASPDN)) { + if ((v_Entity.commStatus == aSP_Inactive) or + (v_Entity.commStatus == aSP_Inact_ASPAC_Sent) or + (v_Entity.commStatus == aSP_Active)) { + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPDN_Ack)), + tsp_SCTP_PayloadProtocolID)); + if (v_Entity.commStatus == aSP_Active) { + // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {}); + } + v_Entity.commStatus := aSP_Down_commUP_Received; + if (tsp_logVerbose) { + log("M3UA_ASPDN received -> ASPDN_Ack sent"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("ASPDN received in wrong state or the emulation is not in M3UA " & + "server mode"); + } + } + } + // The M3UA client receives M3UA_ASPUP_Ack messages from the server. In + // response of a M3UA_ASPUP message sent by the client. + else if (ischosen(pl_PDU_M3UA.m3UA_ASPUP_Ack)) { + if (((v_Entity.commStatus == aSP_Down_ASPUP_Sent) or + (v_Entity.commStatus == aSP_Inactive)) and + not tsp_M3UA_Server_Mode) { + v_Entity.commStatus := aSP_Inactive; + if (tsp_logVerbose) { + log("M3UA_ASPUP_Ack received -> send M3UA_ASPAC"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPAC(omit, omit, omit))), + tsp_SCTP_PayloadProtocolID)); + // The state changes again after sending the M3UA_ASPAC message. + v_Entity.commStatus := aSP_Inact_ASPAC_Sent; + if (tsp_logVerbose) { + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("M3UA_ASPUP_Ack received in wrong state or the emulation is not " & + "in M3UA client mode"); + } + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_ASPDN_Ack)) { + if (tsp_logVerbose) { + log("Received M3UA_ASPDN_Ack -> discard"); + } + } + // M3UA_ASPAC messages are received on the server side. The server sends a + // M3UA_ASPAC_Ack message back to the client. This step makes the + // association active on both sides. + else if (ischosen(pl_PDU_M3UA.m3UA_ASPAC)) { + if (((v_Entity.commStatus == aSP_Inactive) or + (v_Entity.commStatus == aSP_Inact_ASPAC_Sent)) and + tsp_M3UA_Server_Mode) { + v_Entity.commStatus := aSP_Active; + if (tsp_logVerbose) { + log("M3UA_ASPAC received -> M3UA_ASPAC_Ack sent"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + var integer v_i; + for (v_i := 0; v_i < sizeof(v_TRANSFERreq_Buffer); v_i := v_i + 1) { + log("Sending buffered message #", v_i); + f_Send_MTP3_TRANSFERreq(v_TRANSFERreq_Buffer[v_i]); + } + v_TRANSFERreq_Buffer := {}; + // Send M3UA_ASPAC_Ack. + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA + (valueof + (t_PDU_M3UA_ASPAC_Ack + (pl_PDU_M3UA.m3UA_ASPAC.messageParameters.traffic_Mode_Type, + pl_PDU_M3UA.m3UA_ASPAC.messageParameters.routing_Context))), + tsp_SCTP_PayloadProtocolID)); + // MTP3_SP_PORT.send(ASP_MTP3_RESUME : {}); + } + else { + if (tsp_logVerbose) { + log("M3UA_ASPAC received in wrong state or the emulation is not in " & + "M3UA server mode"); + } + } + } + // The client receives M3UA_ASPAC_Ack messages from the server. The + // association will be activated. The buffered messages should be send here. + else if (ischosen(pl_PDU_M3UA.m3UA_ASPAC_Ack)) { + if (((v_Entity.commStatus == aSP_Inact_ASPAC_Sent) or + (v_Entity.commStatus == aSP_Active)) and + not tsp_M3UA_Server_Mode) { + // MTP3_SP_PORT.send(ASP_MTP3_RESUME : {}); + v_Entity.commStatus := aSP_Active; + if (tsp_logVerbose) { + log("ASPAC_Ack received for association #", v_Entity.sCTP_Assoc_ID); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + var integer v_i; + for (v_i := 0; v_i < sizeof(v_TRANSFERreq_Buffer); v_i := v_i + 1) { + log("Sending buffered message #", v_i); + f_Send_MTP3_TRANSFERreq(v_TRANSFERreq_Buffer[v_i]); + } + v_TRANSFERreq_Buffer := {}; + } + else { + if (tsp_logVerbose) { + log("M3UA_ASPAC_Ack received in wrong state on association #", + v_Entity.sCTP_Assoc_ID, " or the emulation is not in M3UA " & + "client mode"); + } + } + } + // Receives a M3UA_ASPIA message and sends back a M3UA_ASPIA_Ack message in + // response. + else if (ischosen(pl_PDU_M3UA.m3UA_ASPIA)) { + if (v_Entity.commStatus == aSP_Active) { + SCTP_PORT.send + (t_S_SCTP_Send + (v_Entity.sCTP_Assoc_ID, + 0, + enc_PDU_M3UA + (valueof + (t_PDU_M3UA_ASPIA_Ack + (pl_PDU_M3UA.m3UA_ASPIA.messageParameters.routing_Context))), + tsp_SCTP_PayloadProtocolID)); + // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {}); + v_Entity.commStatus := aSP_Inactive; + if (tsp_logVerbose) { + log("M3UA_ASPIA received -> M3UA_ASPIA_Ack sent"); + log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ", + v_Entity.commStatus); + } + } + else { + if (tsp_logVerbose) { + log("M3UA_ASPIA received in wrong state or the emulation is not " & + "running in M3UA server mode"); + } + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_ASPIA_Ack)) { + if (tsp_logVerbose) { + log("Received M3UA_ASPIA_Ack -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_REG_REQ)) { + if (tsp_logVerbose) { + log("Received M3UA_REG_REQ -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_REG_RSP)) { + if (tsp_logVerbose) { + log("Received M3UA_REG_RSP -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_DEREG_REQ)) { + if (tsp_logVerbose) { + log("Received M3UA_DEREG_REQ -> discard"); + } + } + else if (ischosen(pl_PDU_M3UA.m3UA_DEREG_RSP)) { + if (tsp_logVerbose) { + log("Received M3UA_DEREG_RSP -> discard"); + } + } +} + +function f_handle_nonM3UA_msg(octetstring pl_PDU) runs on M3UA_CT +{ + if (v_Entity.commStatus == aSP_Active) { + // Send TRANSFERind message. + MTP3_SP_PORT.send(valueof + (tr_ASP_MTP3_TRANSFERind_sio + ('00'B, + '00'B, + '0000'B, + 0, + 0, + 0, + pl_PDU))); + if (tsp_logVerbose) { + log("Non-M3UA DATA received -> TRANSFERind sent"); + } + } + else { + if (tsp_logVerbose) { + log("DATA received, but no user connected -> discard"); + } + } +} + +} diff --git a/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd b/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd new file mode 100644 index 00000000..bc2b89ee --- /dev/null +++ b/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd @@ -0,0 +1,89 @@ + + + + MTP3asp_CNL113337 + + + + + + + + + + + + + + + + + + TARGET_TEST + + + + + true + true + true + bin/MTP3asp_CNL113337 + + TARGET_TEST + + Level 3 - Creating object files with dependency update + + + bin + + + + + + + true + true + true + bin/MTP3asp_CNL113337 + + TARGET_TEST + + Level 3 - Creating object files with dependency update + + + bin + + + + + + + true + true + true + bin/MTP3asp_CNL113337 + Level 3 - Creating object files with dependency update + + + bin + + + + + diff --git a/MTP3asp_CNL113337/demo/MTP3asp_PT.cc b/MTP3asp_CNL113337/demo/MTP3asp_PT.cc new file mode 100644 index 00000000..37bab8f0 --- /dev/null +++ b/MTP3asp_CNL113337/demo/MTP3asp_PT.cc @@ -0,0 +1,2952 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2012 // +// // +// 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: MTP3asp_PT.cc +// Description: Implementation of port MTP3asp_PT +// This test port is written to connect TTCN-3 to SEA according +// to specification ITU-T SS7 MTP3, ANSI, TCC, IETF, MPT +// Reference: ITU-T Recommendation Q.704, RFC3332 +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2012-05-24 +// Contact: http://ttcn.ericsson.se + +// IMPORTANT MODIFICATION: +// mtp3_ttc uses ALWAYS 16 bits long SPCs, regardless of mtp3_ni sio + +#include "MTP3asp_PT.hh" + +#include "MTP3asp_Types.hh" +#include "MTP3asp_PortType.hh" + +#include +#include +#include +#include +#include +#include +#include + + +// Constans for M3UA, see rfc 3332 and 2/1056-FCPW 101 86/P-1 +// Constants for decoding M3UA common headers +#define M3UA_VER_OFFS 0 +#define M3UA_CLS_OFFS 2 +#define M3UA_TYP_OFFS 3 +#define M3UA_LGT_OFFS 4 +#define M3UA_MSG_OFFS 8 +#define M3UA_MSG_LENGTH_LENGTH 4 + +// Constants for M3UA protocol +//Msg classes +#define M3UA_MSG_CLS_MGMT 0x00 +#define M3UA_MSG_CLS_TRNSFM 0x01 +#define M3UA_MSG_CLS_SSNM 0x02 +#define M3UA_MSG_CLS_ASPSM 0x03 +#define M3UA_MSG_CLS_ASPTM 0x04 +#define M3UA_MSG_CLS_RKM 0x09 +//Msg types +#define M3UA_MSG_TYP_MGMT_ERR 0x00 +#define M3UA_MSG_TYP_MGMT_NTFY 0x01 + +#define M3UA_MSG_TYP_TRSNFM_DATA 0x01 + +#define M3UA_MSG_TYP_SSNM_DUNA 0x01 +#define M3UA_MSG_TYP_SSNM_DAVA 0x02 +#define M3UA_MSG_TYP_SSNM_DAUD 0x03 +#define M3UA_MSG_TYP_SSNM_SCON 0x04 +#define M3UA_MSG_TYP_SSNM_DUPU 0x05 +#define M3UA_MSG_TYP_SSNM_DRST 0x06 + +#define M3UA_MSG_TYP_ASPSM_ASPUP 0x01 +#define M3UA_MSG_TYP_ASPSM_ASPDN 0x02 +#define M3UA_MSG_TYP_ASPSM_BEAT 0x03 +#define M3UA_MSG_TYP_ASPSM_ASPUPAck 0x04 +#define M3UA_MSG_TYP_ASPSM_ASPDNAck 0x05 +#define M3UA_MSG_TYP_ASPSM_BEATAck 0x06 + +#define M3UA_MSG_TYP_ASPTM_ASPAC 0x01 +#define M3UA_MSG_TYP_ASPTM_ASPIA 0x02 +#define M3UA_MSG_TYP_ASPTM_ASPACAck 0x03 +#define M3UA_MSG_TYP_ASPTM_ASPIAAck 0x04 + +#define M3UA_MSG_TYP_RKM_REGREQ 0x01 +#define M3UA_MSG_TYP_RKM_REGRSP 0x02 +#define M3UA_MSG_TYP_RKM_DEREGREQ 0x03 +#define M3UA_MSG_TYP_RKM_DEREGRESP 0x04 + +//parameters +//common for all adaptation layer +#define PAR_PREFIX_COMMON 0x00 +#define PAR_INFO_STR 0x04 +#define PAR_ROUTING_CTX 0x06 +#define PAR_DIAG_INFO 0x07 +#define PAR_HEART_BEAT 0x09 +#define PAR_TRAFFMODE_T 0x0b +#define PAR_ERROR_CODE 0x0c +#define PAR_STATUS 0x0d +#define PAR_ASP_ID 0x11 +#define PAR_AFFECTED_PC 0x12 +#define PAR_CORREL_ID 0x13 + +//M3UA specific +#define PAR_PREFIX_M3UA 0x02 +#define PAR_NETW_APP 0x00 +#define PAR_USR_O_CAUSE 0x04 +#define PAR_CNGST_IND 0x05 +#define PAR_CNCRD_IND 0x06 +#define PAR_ROUTING_KEY 0x07 +#define PAR_REG_RSLT 0x08 +#define PAR_DEREG_RSLT 0x09 +#define PAR_LOC_RK_ID 0x0a +#define PAR_DPC 0x0b +#define PAR_SI 0x0c +#define PAR_OPC_LIST 0x0e +#define PAR_CIRC_RNG 0x0f +#define PAR_PROT_DATA 0x10 +#define PAR_REG_STAT 0x12 +#define PAR_DEREG_STAT 0x13 + +// error codes: +#define PAR_ERRC_IVER 0x01 +#define PAR_ERRC_UNSMC 0x03 +#define PAR_ERRC_UNSMT 0x04 +#define PAR_ERRC_UNTMT 0x05 +#define PAR_ERRC_UNEM 0x06 +#define PAR_ERRC_PERR 0x07 +#define PAR_ERRC_ISI 0x09 +#define PAR_ERRC_RMB 0x0D +#define PAR_ERRC_ASPIDR 0x0E +#define PAR_ERRC_IASPID 0x0F +#define PAR_ERRC_IPARV 0x11 +#define PAR_ERRC_PARFE 0x12 +#define PAR_ERRC_UPAR 0x13 +#define PAR_ERRC_DSU 0x14 +#define PAR_ERRC_INA 0x15 +#define PAR_ERRC_MP 0x16 +#define PAR_ERRC_IRC 0x19 +#define PAR_ERRC_NCFAS 0x1A + + +// -------------------------- +// Basic Test Port functions +// -------------------------- +using namespace MTP3asp__Types; +namespace MTP3asp__PortType { + +//external functions +//########################################################## + +//f__MTP3__SEA__connect (for MTP3asp_PT) +BOOLEAN f__MTP3__SEA__connect(MTP3asp__PT& portRef, + const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http) +{ + return f__MTP3__SEA__connect__extern(portRef,Hostname,Port,EntityName,Http); +} +//------------ + +//f__MTP3__SEA__disconnect (for MTP3asp_PT) +BOOLEAN f__MTP3__SEA__disconnect(MTP3asp__PT& portRef) +{ + return f__MTP3__SEA__disconnect__extern(portRef); +} +//------------ + +//f__MTP3__SEA__connect__extern +BOOLEAN f__MTP3__SEA__connect__extern(MTP3asp__PT_PROVIDER& portRef, + const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http) +{ +#ifndef TARGET_TEST + if (portRef.dynamicConnection && (!(portRef.connectionUp))) + { + delete [] portRef.hostname; + int len = strlen(Hostname); + portRef.hostname = new char[len + 1]; + memcpy(portRef.hostname, Hostname, len + 1); + + portRef.httpport = Port; + + delete [] portRef.entityname; + len = strlen(EntityName); + portRef.entityname = new char[len + 1]; + memcpy(portRef.entityname, EntityName, len + 1); + + if(Http) + portRef.MTP3_open_channel(TRUE); + else + portRef.MTP3_open_channel(FALSE); + + if(portRef.wait_for_open()) + { + portRef.user_connect(); + portRef.connectionUp = TRUE; + return TRUE; + } + } + else +#endif + portRef.log("Dynamic connection feature is not active or already connected."); + return FALSE; +} +//------------ + +//f__MTP3__SEA__disconnect__extern +BOOLEAN f__MTP3__SEA__disconnect__extern(MTP3asp__PT_PROVIDER& portRef) +{ +#ifndef TARGET_TEST + if (portRef.connectionUp) + { + portRef.MTP3_close_connection(); + portRef.connectionUp = FALSE; + return TRUE; + } +#endif + return FALSE; +} +//------------ + +// Test Port constructor +MTP3asp__PT_PROVIDER::MTP3asp__PT_PROVIDER(const char *par_port_name) + : PORT(par_port_name) +{ + MTP_fd=-1; + httpport=-1; + hostname=NULL; + destinationname = NULL; + dynamicConnection = FALSE; + + const char *str="b303d76a-266c-11d4-b8f5-08002090d3da"; + int len = strlen(str); + iid_string= new char[len + 1]; + memcpy(iid_string, str, len + 1); + + entityname=NULL; + Filter=Loop=-1; + Sut_Pc=Tester_Pc=-1; + Ni_is_set = FALSE; + MTPServiceType = MTP3itu; + M3UA_version = 1; + M3UAState = AssocDown; // unnecessary... + mtp3_ni=0; +#ifndef TARGET_TEST + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; +#endif + forward_pause = FALSE; + forward_resume = FALSE; + forward_status = FALSE; +} +//------------ + +// Test Port destructor +MTP3asp__PT_PROVIDER::~MTP3asp__PT_PROVIDER() +{ + delete [] hostname; + delete [] entityname; + delete [] iid_string; +} +//------------ + +// set_parameter +void MTP3asp__PT_PROVIDER::set_parameter(const char *parameter_name, + const char *parameter_value) +{ + log("set_parameter: %s = %s",parameter_name,parameter_value); + if (!strcmp(parameter_name,"Hostname")) + { + delete [] hostname; + int len = strlen(parameter_value); + hostname = new char[len + 1]; + memcpy(hostname, parameter_value, len + 1); + } + else if (!strcmp(parameter_name, "HttpPort")) + { + httpport = atoi(parameter_value); + } + else if (!strcmp(parameter_name,"EntityName")) + { + delete [] entityname; + int len = strlen(parameter_value); + entityname= new char[len + 1]; + memcpy(entityname, parameter_value, len + 1); + } + else if (!strcmp(parameter_name,"DestinationName")) + { + delete [] destinationname; + int len = strlen(parameter_value); + destinationname= new char[len + 1]; + memcpy(destinationname, parameter_value, len + 1); + } + else if (!strcmp(parameter_name,"Filter")) + { + if (!strcmp(parameter_value,"ON")) Filter = MTP3_ON; + else Filter = MTP3_OFF; + } + else if (!strcmp(parameter_name,"Loop")) + { + if (!strcmp(parameter_value,"ON")) Loop = MTP3_ON; + else Loop = MTP3_OFF; + } + else if (!strcmp(parameter_name,"NI")) + { + Ni_is_set = TRUE; + mtp3_ni = atoi(parameter_value); + debuglog("Network indicator is set to %i",mtp3_ni); + } + else if (!strcmp(parameter_name,"SUT_Pc")) + { + Sut_Pc = atoi(parameter_value); + } + else if (!strcmp(parameter_name,"TESTER_Pc")) + { + Tester_Pc = atoi(parameter_value); + } + else if (!strcmp(parameter_name,"M3UA_version")) + { + M3UA_version = atoi(parameter_value); + debuglog("%d",M3UA_version); + } +#ifndef TARGET_TEST + else if (!strcmp(parameter_name,"DynamicConnection")) + { + if (!strcasecmp(parameter_value,"ON")) + { + dynamicConnection = TRUE; + } + } +#endif + else if (!strcmp(parameter_name,"MTP3ServiceType")) + { + if (!strcmp(parameter_value,"TargetM3UA")) + { +#ifndef TARGET_TEST + error("TargetM3UA not supported, since TARGET_TEST not in Makefile"); +#else + log("MTP3ServiceType is set to TargetM3UA"); + user_map_p = &MTP3asp__PT_PROVIDER::Target_user_map; + user_unmap_p = &MTP3asp__PT_PROVIDER::Target_user_unmap; + MTPServiceType = TargetM3UA; +#endif + } + else if (!strcmp(parameter_value,"TargetSTC")) + { +#ifndef TARGET_TEST + error("TargetSTC not supported, since TARGET_TEST not in Makefile"); +#else + log("MTP3ServiceType is set to TargetSTC"); + user_map_p = &MTP3asp__PT_PROVIDER::TargetSTC_user_map; + user_unmap_p = &MTP3asp__PT_PROVIDER::Target_user_unmap; //Same as by Target M3UA + MTPServiceType = TargetSTC; +#endif + } +#ifndef TARGET_TEST + else if (!strcmp(parameter_value,"M3UA")) + { //M3UA + log("MTP3ServiceType is set to M3UA"); + interpreter = &MTP3asp__PT_PROVIDER::M3UA_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::M3UA_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::M3UA_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::M3UA_user_unmap; + MTPServiceType = M3UA; + } + else if (!strcmp(parameter_value,"MTP3itu")) + { + log("MTP3ServiceType is set to MTP3itu"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3itu; + } + else if ( !strcmp(parameter_value,"MTP3ansi")) + { + log("MTP3ServiceType is set to MTP3ansi"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3ansi; + } + else if ( !strcmp(parameter_value,"MTP3ttc")) + { + log("MTP3ServiceType is set to MTP3ttc"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3ttc; + } + else if ( !strcmp(parameter_value,"MTP3mpt")) + { + log("MTP3ServiceType is set to MTP3mpt"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3mpt; + } + else if ( !strcmp(parameter_value,"MTP3bttc")) + { + log("MTP3ServiceType is set to MTP3bttc"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3bttc; + } + else if ( !strcmp(parameter_value,"MTP3iup")) + { + log("MTP3ServiceType is set to MTP3iup"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3iup; + } + else if ( !strcmp(parameter_value,"STC")) + { + log("MTP3ServiceType is set to STC"); + interpreter = &MTP3asp__PT_PROVIDER::STC_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::STC_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::STC_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::STC_user_unmap; + MTPServiceType = STC; + } +#endif + else + { + log("Unsupported MTP3ServiceType: %s, falling back to MTP3itu", + parameter_value); + } + } + else if(strcasecmp(parameter_name, "forward_pause") == 0) + { + if (strcasecmp(parameter_value,"forward") == 0) + forward_pause = TRUE; + else if(strcasecmp(parameter_value,"ignore") == 0) + forward_pause = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" , + parameter_value, parameter_name); + } + else if(strcasecmp(parameter_name, "forward_resume") == 0) + { + if (strcasecmp(parameter_value,"forward") == 0) + forward_resume = TRUE; + else if(strcasecmp(parameter_value,"ignore") == 0) + forward_resume = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" , + parameter_value, parameter_name); + } + else if(strcasecmp(parameter_name, "forward_status") == 0) + { + if (strcasecmp(parameter_value,"forward") == 0) + forward_status = TRUE; + else if(strcasecmp(parameter_value,"ignore") == 0) + forward_status = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" , + parameter_value, parameter_name); + } + else +#ifdef TARGET_TEST + if(!parameter_set(parameter_name ,parameter_value)) //TCP parameters +#endif + log("Unsupported parameter: %s", parameter_name); +} +//------------ + +// User map +void MTP3asp__PT_PROVIDER::user_map(const char *system_port) +{ + if (user_map_p == NULL) + error("Parameter MTP3ServiceType should be set to TargetM3UA in TARGET_TEST mode!"); + + (this->*user_map_p)(system_port); +} +//------------ + +// User unmap +void MTP3asp__PT_PROVIDER::user_unmap(const char *system_port) +{ + (this->*user_unmap_p)(system_port); +} +//------------ + +#ifndef TARGET_TEST +// User connect +void MTP3asp__PT_PROVIDER::user_connect() +{ + (this->*user_connect_p)(); +} +//------------ +#endif + +//User start +void MTP3asp__PT_PROVIDER::user_start() +{ debuglog("user start ordered"); +} +//------------ + +//User stop +void MTP3asp__PT_PROVIDER::user_stop() +{ debuglog("User stop ordered"); +} +//------------ + +//Event Handler +void MTP3asp__PT_PROVIDER::Handle_Fd_Event(int fd, + boolean is_readable, boolean is_writable, boolean is_error) +{ + if (MTPServiceType == TargetM3UA ) + { +#ifdef TARGET_TEST + //In case of target Abstract Socket handles the received message + Handle_Socket_Event(fd, is_readable, is_writable, is_error); +#endif + } +#ifndef TARGET_TEST + else + { + int result; + + result = MPH_ProcessConnection(myConnection); + + if (result <= 0) + { + MPH_CloseConnection(myConnection); + if (result == 0) log("Connection closed by peer."); + else log("Error in incoming message."); + } + } +#endif +} + +void MTP3asp__PT_PROVIDER::Handle_Timeout(double time_since_last_call) +{ +#ifdef TARGET_TEST + Handle_Timeout_Event(time_since_last_call); +#endif +} +//------------ + +//Outgoing send +void MTP3asp__PT_PROVIDER::outgoing_send(const ASP__MTP3__TRANSFERreq& send_par) +{ + MTP3__Field__sio sio_field = send_par.sio(); +#ifndef TARGET_TEST + int si=bit2int(sio_field.si()); +#endif + + OCTETSTRING sio_oct = bit2oct(sio_field.ni()+sio_field.prio()+sio_field.si()); + OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc + + //Message sending by testing on Target + if (MTPServiceType == TargetM3UA) + { +#ifdef TARGET_TEST + OCTETSTRING tcpData = int2oct(1,1); //Message type + tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length + tcpData = tcpData + sio_oct; + tcpData = tcpData + int2oct(send_par.opc(),4); + tcpData = tcpData + int2oct(send_par.dpc(),4); + tcpData = tcpData + int2oct(send_par.sls(),1); + tcpData = tcpData + send_par.data(); + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Transfer Req message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); +#endif + return; + } + //Message sending by testing on Target + if (MTPServiceType == TargetSTC) + { +#ifdef TARGET_TEST + OCTETSTRING tcpData = int2oct(1,1); //Message type + tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + send_par.data(); + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Transfer Req (STC) message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); +#endif + return; + } +#ifndef TARGET_TEST + if (dynamicConnection &&(!connectionUp)) + { + warn("Connection was not activated via function f_M3UA_SEA_connect."); + return; + } + + unsigned int offset; + int MSU_length = send_par.data().lengthof(); + int M3UA_par_length; + int length; + int labellen; // sio+routinglabel length + + switch ( MTPServiceType) + { + case STC: + length = MSU_length; + memcpy(buffer, send_par.data(), send_par.data().lengthof()); + break; + case MTP3iup: + if(si==4) + { + offset = 0; + labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte) + length = MSU_length+labellen; + buffer[0] = *((const unsigned char*)sio_oct); + SetPointCodesIUP(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + } + else + { + offset = 0; + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + } + break; + case MTP3itu: + offset = 0; + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3ansi: + offset = 0; + labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4 + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3ttc: + offset = 0; + //if (mtp3_ni==0){ labellen=5;} + //else { + labellen=6; + //} //TTC: sio(1byte) +routing label(6byte) see ... + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3bttc: + offset = 0; + buffer[offset] = *((const unsigned char*)bttc_oct); + offset += 1; + labellen=7; //routing label(7byte) + length = 1 + MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3mpt: + offset = 0; + if (mtp3_ni==2) + { labellen=8;} //MPT national: sio(1byte) +routing label(7byte) + else + { labellen=5;} //MPT international: sio(1byte) +routing label(4byte) + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, + send_par.data(), send_par.data().lengthof()); + break; + case M3UA : + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 test port debug: Message to be encoded is: {"); + send_par.data().log(); + TTCN_Logger::log_event(" "); + if( M3UAState != AssocActive ) + { + TTCN_Logger::log_event(" M3UAState is not ready to send data. Its state code: %d",AssocActive); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + return; + } + //calculating lengths + M3UA_par_length = MSU_length + 16; // ProtocolData parameter + // header length=16 <== see f + TTCN_Logger::log_event(", Adjusted M3UA_par_length to %d to support 16 octets M3UA param header",M3UA_par_length); + length = 8 + M3UA_par_length; //msg length = header+par + TTCN_Logger::log_event(", M3UA MSU_length is %d ==> there should be %d padding octets", MSU_length, 4-(MSU_length%4)); + if (MSU_length%4) { //should be padded to be multiple of 4 octets + length += 4 - (MSU_length%4); //padding shall be counted in msg + //length, but not in par_length + } + TTCN_Logger::log_event(", Set msg length (which includes 8 octets M3UA hdr) to %d ",length); + + //filling the first part of the buffer + //common msg hdr ====================================== + buffer[0] = M3UA_version; + buffer[1] = 0x00; //spare + buffer[2] = M3UA_MSG_CLS_TRNSFM; // msg class + buffer[3] = M3UA_MSG_TYP_TRSNFM_DATA; // msg type + encode_32b_int(buffer+4, length); //msg length, 4 bytes + //ProtocolData parameter header========================= + //tag + buffer[M3UA_MSG_OFFS] = PAR_PREFIX_M3UA; //par. tag 1st octet + buffer[M3UA_MSG_OFFS+1] = PAR_PROT_DATA; // par tag 2nd octet + //length, NOTE: should not contain the padding bytes! + encode_16b_int(buffer+M3UA_MSG_OFFS+2,M3UA_par_length); + //OPC,DPC + encode_32b_int(buffer+M3UA_MSG_OFFS+4,send_par.opc()); + encode_32b_int(buffer+M3UA_MSG_OFFS+8,send_par.dpc()); + //SI, NI, MP, SLS + buffer[M3UA_MSG_OFFS+12] = bit2int(sio_field.si()); // SI LSb aligned + buffer[M3UA_MSG_OFFS+13] = bit2int(sio_field.ni()); // NI LSb aligned + buffer[M3UA_MSG_OFFS+14] = bit2int(sio_field.prio()); //MP LSb + //aligned + buffer[M3UA_MSG_OFFS+15] = 0xFF & send_par.sls(); //SLS + // finally the MTP3 MSU itself.... + offset = M3UA_MSG_OFFS + 16; + TTCN_Logger::log_event(", buffer offset is now set to %d", offset); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + //append MTP3 MSU + memcpy(buffer + offset, send_par.data(), send_par.data().lengthof()); + + //padding + for (int ii = 0; ii< (MSU_length%4); ++ii) buffer[offset+MSU_length+ii]= 0x00; + break; + default: + error("Invalid MTP3ServiceType setting!"); + } + if (TTCN_Logger::log_this_event(TTCN_DEBUG)) + { + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("The encoded buffer is: {"); + OCTETSTRING(length, buffer).log(); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + } + send_msg(buffer, length); +#endif +} +//------------ + +void MTP3asp__PT_PROVIDER::log(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); +} +//------------ + +void MTP3asp__PT_PROVIDER::warn(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_WARNING); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); +} +//------------ + +void MTP3asp__PT_PROVIDER::debuglog(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); +} +//------------ + +void MTP3asp__PT_PROVIDER::error(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_ERROR); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); + TTCN_error("Fatal error in MTP3 Test Port %s.", get_name()); +} +//------------ + +void MTP3asp__PT_PROVIDER::close_log_event() +{ + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); +} +//------------ + + +#ifndef TARGET_TEST +// -------------------------------------------- +// Functions and definitions for test with SEA +// -------------------------------------------- + +// Functions of MPH toolkit +// --------------------------- +void connectCallback(CONNECTION* con, int channel, void *clientData) +{ + ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel succeeded " + "(channel number is %u)", channel); + ((MTP3asp__PT_PROVIDER *)clientData)->set_channel(channel); + if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection) + ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 1; +} + +void messageCallback(CONNECTION* con, int channel, int length, + unsigned char *msg, void *clientData) +{ + ((MTP3asp__PT_PROVIDER *)clientData)->log("Incoming message from channel: %d",channel); + ((MTP3asp__PT_PROVIDER *)clientData)->doInterpret(msg,length,channel,con); +} + +void closeCallback(CONNECTION* con, int channel, void *clientData) +{ + ((MTP3asp__PT_PROVIDER *)clientData)->log("Closed channel: %d", channel); +} + +void errorCallback(CONNECTION* con, char *name, char *errorMessage, + void *clientData) +{ + if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection) + { + ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel %s failed: %s", name, errorMessage); + ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 2; + } + else + ((MTP3asp__PT_PROVIDER *)clientData)->error("Opening channel %s failed: %s", + name, errorMessage); +} +//------------ + +//MTP3_open_channel +void MTP3asp__PT_PROVIDER::MTP3_open_channel(boolean http) +{ + int result; + int Mphport; + char *perrorString; + if( Loop == MTP3_ON ) + { + MTP_fd=-1; + myConnection = NULL; + log("MTP3_open_channel finished for LOOP"); + return; + } + + if(http) + { + Mphport = MPH_GetMphPort(hostname,httpport,&perrorString); + } + else + { + Mphport = httpport; + } + + if (Mphport == -1) + error("GetMphPort failed: %s", *perrorString); + + result = MPH_StringToIid(iid_string, &iid); + if (result == -1) + error("Converting %s to MPH_IID failed.", iid_string); + + myConnection = MPH_OpenConnection(hostname, Mphport); + if (myConnection == NULL) + error("Opening connection to %s:%d failed.", hostname, Mphport); + + MPH_OpenChannel(myConnection, + entityname, + &iid, + connectCallback, + messageCallback, + closeCallback, + errorCallback, + this); + + MTP_fd = MPH_GetConnectionFd(myConnection); + if (MTP_fd != -1) + Handler_Add_Fd_Read(MTP_fd); + else + error("Incorrect file descriptor: %d.", MTP_fd); +} +//------------ + +// MTP3_close_connection +void MTP3asp__PT_PROVIDER::MTP3_close_connection() +{ + MPH_CloseConnection(myConnection); + Handler_Remove_Fd_Read(MTP_fd); + close( MTP_fd ); + //Uninstall_Handler(); // Unnecessary if only socket MTP_fd is in use +} +//------------ + +// wait_for_open +boolean MTP3asp__PT_PROVIDER::wait_for_open() +{ + conn_state = 0; + while(conn_state==0) + { + pollfd pollFd = { MTP_fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) { + log("MPH channel opening time out"); + return FALSE; + } + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) { + log("MPH channel opening error (%d)", (nEvents < 0) ? errno : 0); + return FALSE; + } + Handle_Fd_Event(MTP_fd, TRUE, FALSE, FALSE); + } + if(conn_state == 1) //connectCallback received + { + conn_state = 0; + return TRUE; + } + else //errorCallback received + { + conn_state = 0; + return FALSE; + } +} +//------------ + +//send msg +void MTP3asp__PT_PROVIDER::send_msg(unsigned char *outbuff, int length) +{ + OCTETSTRING buff(length,outbuff); + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3/M3UA Test Port (%s): {", get_name()); + TTCN_Logger::log_event("outgoing buffer= "); + buff.log(); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + if (Loop == MTP3_ON) + { + log("Message looped back"); + doInterpret(outbuff, length, channel, myConnection); + } else + { + MPH_SendMessage(myConnection,channel,length,outbuff); + log("Message sent on channel %d", channel); + } +} +//------------ + +//Check TestPortVariables +void MTP3asp__PT_PROVIDER::Check_TestPort_Variables() +{ + if(!dynamicConnection) + { + if (httpport==-1) error("Parameter HttpPort is not set."); + if (hostname==NULL) error("Parameter Hostname is not set."); + if (entityname==NULL) error("Parameter EntityName is not set."); + } + if (Filter==-1) error("Parameter Filter is not set."); + if (Loop==-1) error("Parameter Loop is not set."); + if (Sut_Pc==-1) error("Parameter SUT_Pc is not set."); + if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set."); + if (!Ni_is_set) error("Parameter NI is not set."); +} +//------------ + +// ------------------------------------------------- +// STC Functions and definitions for test with SEA +// ------------------------------------------------- +void MTP3asp__PT_PROVIDER::Check_TestPort_Variables_STC() +{ + if(!dynamicConnection) + { + if (httpport==-1) error("Parameter HttpPort is not set."); + if (hostname==NULL) error("Parameter Hostname is not set."); + if (entityname==NULL) error("Parameter EntityName is not set."); + } +} +//------------ + +//STC user map +void MTP3asp__PT_PROVIDER::STC_user_map(const char *system_port) +{ + debuglog("Function STC_user_map started"); + Check_TestPort_Variables_STC(); + if(dynamicConnection) + { + connectionUp = FALSE; + } + else + { + MTP3_open_channel(TRUE); + STC_user_connect(); + } +} +//------------ + +//STC user connect +void MTP3asp__PT_PROVIDER::STC_user_connect() +{ +} + +//STC user unmap +void MTP3asp__PT_PROVIDER::STC_user_unmap(const char *system_port) +{ + MTP3_close_connection(); + dynamicConnection = FALSE; +} +//------------ + +//STC interpreter +void MTP3asp__PT_PROVIDER::STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) +{ + if ((length==0) || (inbuffer==NULL)) + { + log("0 byte long message received -> packet dropped."); + return; + } + + if (length==1) + { + log("1 byte long internal SEA message received -> packet dropped."); + return; + } + + if ( !strcmp((const char*)inbuffer,"start") ) + { + log("start message received from SEA"); + return; + } + else if (!strcmp((const char*)inbuffer,"stop")) + { + log("stop message received from SEA"); + return; + } + + // writing out the contents of the buffer + OCTETSTRING buff(length,inbuffer); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("incoming buffer: "); + buff.log(); + TTCN_Logger::end_event(); + + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + recv_sio.ni()= int2bit(0,2); + recv_sio.prio()= int2bit(0,2); + recv_sio.si()= int2bit(0,4); + recv_msg.sio() = recv_sio; + recv_msg.sls() = 0; + recv_msg.opc() = 0; + recv_msg.dpc() = 0; + recv_msg.data() = OCTETSTRING(length, &inbuffer[0]); + incoming_message( recv_msg ); +} + +// ------------------------------------------------- +// MTP3 Functions and definitions for test with SEA +// ------------------------------------------------- + +// SLTM messages for MTP3 +// ----------------------- +unsigned char ttcn_in_sltm[] = { + 'T','T','C','N','-','3',' ','E','x','e','c','u','t','o','r'}; + +const int sizeof_ttcn_in_sltm=15; + +// ITU: +unsigned char sltm_msg_itu[] = +{ + 0x1, //SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!! + 0x0, 0x0, 0x0, 0x0, //4 bytes for label (dpc, opc,sls) + 0x11, //Heading code ITU, see Q.707/5.4 + 0xF0, //spare+Length of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_msg_itu=7+15; + +// ANSI: +unsigned char sltm_msg_ansi[]= +{ + 0xB1, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label + 0x11, // Heading Code ANSI T1.111.7-2001 + 0xF0, // SLC(is 0 OK???)+Length in bytes of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_ansi=10+15; + +// TTC: +unsigned char sltm_msg_ttc_national[]= +{ + 0x81, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!! + 0x11, // Heading Code + 0xF0, // SLC(is 0 OK???)+Length in bytes of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_msg_ttc_national=9+15; + +// BTTC: +unsigned char sltm_msg_bttc_national[]= +{ + 0x0, // extra octet, ignored + 0x81, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!! + 0x23, // Heading Code + 'T', 'T' +}; +const int sizeof_sltm_msg_bttc_national=1+8+2; + +// MPT: +unsigned char sltm_msg_mpt_national[]= +{ + 0x81, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label + 0x11, // Heading Code + 0xF0, // SLC(is 0 OK???)+Length in bytes of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_msg_mpt_national=10+15; +//------------ + + +// coder functions for MTP3 +// ------------------------- +// unsigned int<-> unsigned char array +// Integer encode/decode functions that will encode/decode from/to +// Result: Least Significant Byte first (in lowest address) = LSB = Little Endian +void MTP3asp__PT_PROVIDER::encode_56bLSB_int(unsigned char *to, unsigned long long int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; + from >>= 8; + to[4] = from & 0xFF; + from >>= 8; + to[5] = from & 0xFF; + from >>= 8; + to[6] = from & 0xFF; +} +//------------ + +unsigned long long int MTP3asp__PT_PROVIDER::decode_56bLSB_int(const unsigned char *from) +{ + typedef unsigned long long int ull; + return ((ull) from[0]) | + ((ull) from[1] <<8)| + ((ull) from[2] << 16)| + ((ull) from[3] << 24)| + ((ull) from[4] << 32)| + ((ull) from[5] << 40)| + ((ull) from[6] << 48); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_48bLSB_int(unsigned char *to, unsigned long long int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; + from >>= 8; + to[4] = from & 0xFF; + from >>= 8; + to[5] = from & 0xFF; +} +//------------ + +unsigned long long int MTP3asp__PT_PROVIDER::decode_48bLSB_int(const unsigned char *from) +{ + typedef unsigned long long int ull; + return ((ull) from[0]) | + ((ull) from[1] <<8)| + ((ull) from[2] << 16)| + ((ull) from[3] << 24)| + ((ull) from[4] << 32)| + ((ull) from[5] << 40); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_40bLSB_int(unsigned char *to, unsigned long long int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; + from >>= 8; + to[4] = from & 0xFF; +} +//------------ + +unsigned long long int MTP3asp__PT_PROVIDER::decode_40bLSB_int(const unsigned char *from) +{ + typedef unsigned long long int ull; + return ((ull) from[0]) | + ((ull) from[1] <<8)| + ((ull) from[2] << 16)| + ((ull) from[3] << 24)| + ((ull) from[4] << 32); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_32bLSB_int(unsigned char *to, unsigned int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_32bLSB_int(const unsigned char *from) +{ + return from[0] | (from[1] << 8) | (from[2] << 16) | (from[3] << 24); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_24bLSB_int(unsigned char *to, int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_24bLSB_int(const unsigned char *from) +{ + return from[0] | (from[1] << 8) | (from[2] << 16); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_16bLSB_int(unsigned char *to, int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_16bLSB_int(const unsigned char *from) +{ + return from[0] | (from[1] << 8); +} +//------------ + +//MTP3 user map +void MTP3asp__PT_PROVIDER::MTP3_user_map(const char *system_port) +{ + debuglog("Function MTP3_user_map started"); + Check_TestPort_Variables(); + if(dynamicConnection) + { + connectionUp = FALSE; + } + else + { + MTP3_open_channel(TRUE); + MTP3_user_connect(); + } + debuglog("Function MTP3_user_map finished"); +} +//------------ + +//MTP3 user connect +void MTP3asp__PT_PROVIDER::MTP3_user_connect() +{ + // Sending out an SLTM message: + unsigned char * sltm_msg; + unsigned int offset = 0; + int sizeof_msg; + switch( MTPServiceType) + { + case MTP3itu: + case MTP3iup: + sltm_msg=sltm_msg_itu; + sizeof_msg=sizeof_sltm_msg_itu; + break; + case MTP3ansi: + sltm_msg=sltm_msg_ansi; + sizeof_msg=sizeof_sltm_ansi; + break; + case MTP3ttc: + /* if (mtp3_ni == 0){ + sltm_msg=sltm_msg_itu; + sizeof_msg=sizeof_sltm_msg_itu; + } + else { + */ + sltm_msg=sltm_msg_ttc_national; + sizeof_msg=sizeof_sltm_msg_ttc_national; + // } + break; + case MTP3bttc: + sltm_msg=sltm_msg_bttc_national; + sizeof_msg=sizeof_sltm_msg_bttc_national; + offset = 1; + break; + case MTP3mpt: + if (mtp3_ni == 2) + { + sltm_msg = sltm_msg_mpt_national; + sizeof_msg = sizeof_sltm_msg_mpt_national; + } else + { + sltm_msg = sltm_msg_itu; + sizeof_msg = sizeof_sltm_msg_itu; + } + break; + default: + sltm_msg=sltm_msg_itu; + sizeof_msg=sizeof_sltm_msg_itu; + break; + } + stored_bttc_octet = 0; + unsigned char sio = ((unsigned char) mtp3_ni) << 6; + + if (Ni_is_set) + { sltm_msg[0+offset] = sio | 0x1; } + else + { sltm_msg[0+offset] = 0x1; };//SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!! + + SetPointCodes(0, Tester_Pc, Sut_Pc, sltm_msg + 1 +offset); // common for ITU, ANSI and TTC + log("MTP3/SLTM message sending..."); + send_msg(sltm_msg, sizeof_msg); +} +//MTP3 user unmap +void MTP3asp__PT_PROVIDER::MTP3_user_unmap(const char *system_port) +{ + MTP3_close_connection(); + dynamicConnection = FALSE; +} + +//MTP3 interpreter +void MTP3asp__PT_PROVIDER::MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) +{ + if ((length==0) || (inbuffer==NULL)) + { + log("0 byte long message received -> packet dropped."); + return; + } + + if (length==1) + { + log("1 byte long internal SEA message received -> packet dropped."); + return; + } + + if ( !strcmp((const char*)inbuffer,"start") ) + { + log("start message received from SEA"); + return; + } + else if (!strcmp((const char*)inbuffer,"stop")) + { + log("stop message received from SEA"); + return; + } + + // writing out the contents of the buffer + OCTETSTRING buff(length,inbuffer); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("incoming buffer: "); + buff.log(); + TTCN_Logger::end_event(); + + unsigned int offset = 0; + if ( MTPServiceType==MTP3bttc ) + { + stored_bttc_octet = inbuffer[0]; + offset = 1; + } + int labellen; // sio+routinglabel length + int rec_ni = (inbuffer[offset]) >> 6; //network indicator + if (rec_ni != mtp3_ni) + error("Received NI is different from sent NI."); + + unsigned char sio = inbuffer[offset]; + unsigned int si = sio&0x0F; + + if ( MTPServiceType==MTP3itu ) + { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + } + else if ( MTPServiceType==MTP3iup ) + { + if(si==4) + labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte) + else + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + } + else if ( MTPServiceType==MTP3ansi ) + { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4 + } + else if (MTPServiceType==MTP3ttc) + { labellen=6; //new (2004-03-02): 6= sio(1byte)+ routing label(5bytes) + } + else if (MTPServiceType==MTP3mpt) + { + if ( mtp3_ni == 2) + {labellen=8;} //MPT national: sio(1byte) +routing label(7byte) + else + {labellen=5;} //MPT international: sio(1byte) +routing label(4byte) + } + else if (MTPServiceType==MTP3bttc) + { labellen=7; //7= sio(1byte)+ routing label(6bytes) + } + else + { log("incorrect MTPServiceType - programming error-> packet dropped"); + return; + } + + // checking SIO field (first incoming byte) - management or test message + switch (si) + { + case 0: processing_MTP3_management_msg(inbuffer+offset,length-offset); + return; + case 1: //MTP3itu + case 2: processing_MTP3_test_msg(inbuffer+offset,length-offset); //MTP3ansi + return; + default: + break; + } + + // filling up TTCN structure + if ((Loop==MTP3_ON) || (!Filter) || (Filter&&Check_PcMatch(Sut_Pc,Tester_Pc,&inbuffer[offset+1]))) + { + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + BITSTRING sio_bit = oct2bit(OCTETSTRING(1,inbuffer+offset)); + recv_sio.ni()= substr(sio_bit,0,2); + recv_sio.prio()= substr(sio_bit,2,2); + recv_sio.si()= substr(sio_bit,4,4); + recv_msg.sio() = recv_sio; + unsigned int sls,opc,dpc; + if ( (MTPServiceType==MTP3iup) && (si==4) ) + GetPointCodesIUP(sls,opc,dpc,&inbuffer[1]); + else + GetPointCodes(sls,opc,dpc,&inbuffer[offset+1]); + recv_msg.sls() = sls; + recv_msg.opc() = opc; + recv_msg.dpc() = dpc; + int len; + len= length-labellen-offset; //len= length-labellen; + recv_msg.data() = OCTETSTRING(len, &inbuffer[offset+labellen]); + incoming_message( recv_msg ); + } + else + { log("The rooting label (OPC, DPC) not matched with the filter setting -> packet dropped."); + return; + } +} + +void MTP3asp__PT_PROVIDER::processing_MTP3_management_msg(unsigned char* inbuff,int len) +{ + int outlen=0; + int labellen; // sio+routinglabel length + int chm_addlen; // (Changeback) additional length = Heading Code + SLC+ (changeback codes) + int mim_addlen; // (MIM) -"- + unsigned int offset = 0; + OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc + + if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup) + { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + chm_addlen = 2; + mim_addlen = 1; + } + else if ( MTPServiceType==MTP3ansi ) + { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T.1.111.4 + chm_addlen = 3; + mim_addlen = 2; + } + else if (MTPServiceType==MTP3ttc) + { //if ( mtp3_ni == 0 ) { labellen=5;} //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + //else { + labellen=6; + //} //sio(1byte)+ routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704. + } + else if (MTPServiceType==MTP3mpt) + { if ( mtp3_ni == 2 ) { labellen=8; } + else { labellen=5; } + chm_addlen = 2; + mim_addlen = 1; + } + else if (MTPServiceType==MTP3bttc) + { labellen=7;//sio(1byte)+routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704 + offset = 1; + } + else + { log("incorrect MTPServiceType- programming error-> packet dropped"); + return; + } + + if (MTPServiceType==MTP3bttc) + { + buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front + buffer[1]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[2],&inbuff[1],len)) + { log("incorrect incoming management message -> packet dropped."); + return; + } + } + else + { + buffer[0]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[1],&inbuff[1],len)) + { log("incorrect incoming management message -> packet dropped."); + return; + } + } + + // Changeover & changeback(CHM) see ITU: Q.704/15.4.1 ANSI: T.1.111.4/15.2-4 + if (inbuff[labellen]==0x51) //CBD + { + outlen=labellen+chm_addlen; + if (len packet dropped."); + return; + } + else + { buffer[offset + labellen]= 0x61; // Heading Code <- CBA + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],len-labellen-1); + outlen = len; + } + } + else if (inbuff[labellen]==0x16) //MIM H0=6=Mgmt inhibit msg, H1=1=LIN + { + outlen=labellen+mim_addlen; + if (len packet dropped."); + return; + } + else + { + buffer[offset + labellen]= 0x56; // LIN -> LID ; LID = link inhibit denied + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); //SLC+spare+... + outlen = len; + } + } + else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup)) + { + if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE)); + return; + } + +/* else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup)) //TRM H0=7, H1=1 : TRA + { + outlen=labellen+1; + if (len packet dropped."); + return; + } + else + { + outlen = len; + } + }*/ + else + { log("This management message type is not supported -> packet dropped."); + return; + } + + // send message + log("function processing_MTP3_management_msg sends a msg"); + send_msg(buffer, outlen+offset); +} + +// processing MTP3 test msg +// Signalling link test message handling according to Q.707 (ITU) and T1.111.7-2001 (ANSI) +void MTP3asp__PT_PROVIDER::processing_MTP3_test_msg(unsigned char* inbuff,int len) +{ + int outlen=0; + int labellen; // sio+routinglabel length + int addlen; //Heading Code+length indicator + //unsigned int ni; //network indicator + OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc + unsigned int offset = 0; + if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup) + { + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + addlen = 2; //HC(1 byte)+length ind(1 byte) see Q.707/5.8 + } + else if ( MTPServiceType==MTP3ansi ) + { + labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4 + addlen = 2; //HC(1byte) +(length ind+SLC(1byte)) see T1.111.7-2001/5 + } + else if (MTPServiceType==MTP3ttc) + { + /* if (mtp3_ni == 0) { + debuglog("processing_MTP3_test_msg/TTC (Japanese) international"); + labellen=5; //TTC (Japanese) international + addlen=2; + } else { + */ + labellen=6; // previously 7 + // TTC national [ 56bits=sio(1byte)+routing label ] + // r.label= dpc(2bytes)+opc(2bytes)+sls(4bit)+12bits (?) + addlen=2; + //} + } + else if (MTPServiceType==MTP3mpt) + { + if (mtp3_ni == 2) + { labellen=8; //MPT national + addlen=2; + } + else + { labellen=5; // MPT international + addlen=2; + } + } + else if (MTPServiceType==MTP3bttc) + { + labellen=7; + addlen=2; + offset = 1; + } + else + { log("incorrect MTPServiceType - programming error-> packet dropped"); + return; + } + + if (MTPServiceType==MTP3bttc) + { + buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front + buffer[1]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[2],&inbuff[1],len)) + { + log("incorrect incoming test message -> packet dropped."); + return; + } + } + else + { + buffer[0]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[1],&inbuff[1],len)) + { + log("incorrect incoming test message -> packet dropped."); + return; + } + } + + // Test message handling: SLTM->SLTA, SRT->SRA, SLTA->TRA, others only logged + debuglog("\n==>Test message handling: msg type:%x\n", inbuff[labellen] ); // temporary + switch( inbuff[labellen] ) + { + case 0x11: //SLTM + log("MTP3/SLTM message received"); + outlen=labellen+addlen; + if (len packet dropped."); + return; + } + else + { buffer[offset + labellen]= 0x21; // SLTA + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); + outlen = len; + } + break; + case 0x21: //SLTA + if(!strncmp((const char *)(inbuff+labellen+addlen),(const char *)ttcn_in_sltm,sizeof_ttcn_in_sltm)) + { + log("MTP3/SLTA message received for SLTM sent by Test Port-> TRA message sent"); + buffer[offset]--; + buffer[offset + labellen]= 0x17; // TRA + outlen = labellen+1; + return; +// if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE)); + } + else + { + log("MTP3/SLTA message received -> packet dropped"); + return; + } + break; + case 0x23: // TTC (Japanese) SRT (Signalling Routing Test signal) + log("MTP3ttc/SRT message received"); + outlen=labellen+addlen; + if (len packet dropped."); + return; + } + else + { buffer[offset + labellen]= 0x84; // TTC (Japanese) SRA + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); + outlen = len; + } + break; + case 0x84: // TTC (Japanese) SRA (Signalling Routing test Ack signal) + log("MTP3ttc/SRA message received -> packet dropped"); + return; + default: + log("This management message type is not supported -> packet dropped "); + return; + } + + // send message + log("function processing_MTP3_test_msg sends a message"); + send_msg( buffer,outlen+offset); +} + +// Point Code Manipulation (Get/Set/Change) +// ------------------------------------------------- +void MTP3asp__PT_PROVIDER::GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg) +{ + unsigned int label; + sls=0; opc=0; dpc=0; + unsigned long long int Label; + + switch( MTPServiceType) + { + case MTP3itu: + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; //dpc = (label&0x00003FFF); + debuglog("Function GetPointCodes called for service type MTP3itu"); + break; + case MTP3iup: + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; //dpc = (label&0x00003FFF); + debuglog("Function GetPointCodes called for service type MTP3iup"); + break; + case MTP3ansi: + Label=decode_56bLSB_int(msg); + sls = (Label >> 48) & 0xFF; //sls = (Label&0x00FF000000000000)>>48; + opc = (Label >> 24) & 0xFFFFFF;//opc = (Label&0x0000FFFFFF000000)>>24; + dpc = Label & 0xFFFFFF; //dpc = (Label&0x0000000000FFFFFF); + debuglog("Function GetPointCodes called for service type MTP3ansi"); + break; + case MTP3ttc: + /* + if( mtp3_ni == 0) + { + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; + debuglog("Function GetPointCodes called for service type MTP3ttc/international"); + } else + {*/ + Label=decode_48bLSB_int(msg); //0x010203040506 + sls = (Label>>32)&0xF; // sls = (Label&0x000F00000000)>>32; // only 4 bits!!! + opc = (Label>>16)&0xFFFF;//opc = (Label&0x0000FFFF0000)>>16; + dpc = Label&0xFFFF; //dpc = (Label&0x00000000FFFF); + debuglog("Function GetPointCodes called for service type MTP3ttc/national"); + //} + break; + case MTP3bttc: + Label=decode_48bLSB_int(msg); + sls = (Label>>32)&0xF; // sls = (Label&0x000F00000000)>>32; // only 4 bits!!! + opc = (Label>>16)&0xFFFF;//opc = (Label&0x0000FFFF0000)>>16; + dpc = Label&0xFFFF; //dpc = (Label&0x00000000FFFF); + debuglog("Function GetPointCodes called for service type MTP3bttc/national"); + break; + case MTP3mpt: + if( mtp3_ni == 2) + { + Label=decode_56bLSB_int(msg); + sls = (Label >> 48) & 0xFF; //sls = (Label&0x00FF000000000000)>>48; + opc = (Label >> 24) & 0xFFFFFF;//opc = (Label&0x0000FFFFFF000000)>>24; + dpc = Label & 0xFFFFFF; //dpc = (Label&0x0000000000FFFFFF); + debuglog("Function GetPointCodes called for service type MTP3mpt(nat)"); + } + else + { + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; //dpc = (label&0x00003FFF); + debuglog("Function GetPointCodes called for service type MTP3mpt(int)"); + } + break; + default: + break; + } + debuglog("sls:%u opc:%u, dpc:%u",sls,opc,dpc); +} +//------------ + +void MTP3asp__PT_PROVIDER::GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg) +{ + debuglog("Function GetPointCodesIUP called"); + cic=0; opc=0; dpc=0; + unsigned long long int Label; + Label=decode_40bLSB_int(msg); //0x0102030405 + cic = (Label>>28)&0xFFF; //cic = (label&0xFFF0000000)>>28; + opc = (Label>>14)&0x3FFF; //opc = (label&0x000FFFC000)>>14; + dpc = Label&0x3FFF; //dpc = (label&0x0000003FFF); + debuglog("cic:%u opc:%u, dpc:%u",cic,opc,dpc); +} + +void MTP3asp__PT_PROVIDER::SetPointCodes(unsigned int sls,unsigned int opc,unsigned int dpc, unsigned char* msg) +{ + unsigned long long int Sls,Opc,Dpc; + + switch( MTPServiceType) + { + case MTP3itu: + encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3itu"); + break; + case MTP3iup: + encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3iup"); + break; + case MTP3ansi: + Sls=sls; Opc=opc; Dpc=dpc; + encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3ansi"); + break; + case MTP3ttc: + /* if ( mtp3_ni == 0 ){ + encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3ttc/international"); + } else { + */ + Sls=sls; Opc=opc; Dpc=dpc; + encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3ttc/national"); + //} + break; + case MTP3bttc: + Sls=sls; Opc=opc; Dpc=dpc; + encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3bttc/national"); + break; + case MTP3mpt: + if ( mtp3_ni == 2 ) + { Sls=sls; Opc=opc; Dpc=dpc; + encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3mpt(nat)"); + } + else + { encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3mpt(int)"); + } + break; + default: + break; + } +} +//------------ + +void MTP3asp__PT_PROVIDER::SetPointCodesIUP(unsigned int cic,unsigned int opc,unsigned int dpc, unsigned char* msg) +{ + unsigned long long int Cic,Opc,Dpc; + Cic=cic; Opc=opc; Dpc=dpc; + debuglog("Function SetPointCodesIUP called"); + encode_40bLSB_int( msg, ((Cic<<28)|(Opc<<14)|Dpc )); +} + +//Changes the Point codes: dpc<->opc ie. destination <->orig +// inbuff starts from dpc i.e doesn't contain sio !!!! +int MTP3asp__PT_PROVIDER::ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len) +{ + switch( MTPServiceType) + { + case MTP3itu: + case MTP3iup: + if (len<5) + { warn("MTP3itu:len<5. Too short message!"); return 0; }; + break; + case MTP3ansi: + if (len<9 ) return 0; + break; + case MTP3ttc: + //if ( mtp3_ni == 0 && len<5) + //{ warn("MTP3ttc:len<5. Too short message!"); return 0; } + //else + if (len<6) + { warn("MTP3ttc:len<6. Too short message!"); return 0; } + break; + case MTP3bttc: + if (len<7) + { warn("MTP3bttc:len<7. Too short message!"); return 0; } + break; + case MTP3mpt: + if ( mtp3_ni == 2 && len<8) + { warn("MTP3mpt:len<8. Too short message!"); return 0; } + else if (len<5) + { warn("MTP3mpt:len<5. Too short message!"); return 0; } + break; + default: + warn("Unknown MTPServiceType!!!"); + break; + } + unsigned int sls,opc,dpc; + GetPointCodes(sls,opc,dpc,inbuff); + SetPointCodes(sls,dpc,opc,outbuff); + return 1; +} +//------------ + +int MTP3asp__PT_PROVIDER::Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff) +{ + unsigned int temp_opc,temp_dpc,temp_sls; + + GetPointCodes(temp_sls,temp_opc,temp_dpc,buff); + if ( (temp_opc == opc) && (temp_dpc == dpc) ) return 1; + return 0; +} +//------------ + + +// ------------------------------------------------- +// M3UA Functions and definitions for test with SEA +// ------------------------------------------------- + +// Structures for M3UA +static unsigned char aspup_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version + 0x00, //reserved + M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM + M3UA_MSG_TYP_ASPSM_ASPUP, //Msg type: ASPUP + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets + // ,PAR_PREFIX_COMMON, //optional Info string tag, in included, then msg + // PAR_INFO_STR //msg length should be +20, that is 28=0x1c + // 0x00,0x0f, // length: "TTCN-3 Executor" is 15 chars + // 'T', 'T', 'C', 'N', + // '-', '3', ' ', 'E', + // 'x', 'e', 'c', 'u', + // 't', 'o', 'r', 0x00 //las octet is padding +}; +const int sizeof_aspup_msg = 8; + +static unsigned char aspupack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version + 0x00, //reserved + M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM + M3UA_MSG_TYP_ASPSM_ASPUPAck, //Msg type: ASPUP + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspupack_msg = 8; + +static unsigned char aspac_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPTM, //Msg class + M3UA_MSG_TYP_ASPTM_ASPAC, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspac_msg = 8; + +// ASP Active Acknowledge msg: +static unsigned char aspac_ack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPTM, //Msg class + M3UA_MSG_TYP_ASPTM_ASPACAck, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspac_ack_msg = 8; + +static unsigned char aspia_ack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPTM, //Msg class + M3UA_MSG_TYP_ASPTM_ASPIAAck, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspia_ack_msg = 8; + +// ASP DOWN Acknowledge msg: +static unsigned char aspdn_ack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPSM, //Msg class + M3UA_MSG_TYP_ASPSM_ASPDNAck, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspdn_ack_msg = 8; + +//ASP Destination Available msg: +static unsigned char dava_1apc_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + //or updated doc 2/1056-FCPW 101 86/P-1 + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_SSNM, //Msg class + M3UA_MSG_TYP_SSNM_DAVA, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x10, // length ends, 16 octets + //Affected point code + PAR_PREFIX_COMMON, + PAR_AFFECTED_PC, + 0x00, //par length begins (2 octets) + 0x08, //length ends, 8 octets + 0x00, // point code placeholder begins + 0x00, // + 0x00, // + 0x00 // point code placeholder ends +}; +const int sizeof_dava_1apc_msg = 16; + +static unsigned char duna_1apc_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_SSNM, //Msg class + M3UA_MSG_TYP_SSNM_DUNA, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x10, // length ends, 16 octets + //Affected point code + PAR_PREFIX_COMMON, + PAR_AFFECTED_PC, + 0x00, //par length begins (2 octets) + 0x08, //length ends, 8 octets + 0x00, // point code placeholder begins + 0x00, // + 0x00, // + 0x00 // point code placeholder ends +}; +const int sizeof_duna_1apc_msg = 16; + +static unsigned char error_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_MGMT, //Msg class + M3UA_MSG_TYP_MGMT_ERR, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x18, // length ends, 16+8 octets + // Error code field: + PAR_PREFIX_COMMON, + PAR_ERROR_CODE, + 0x00, //par length begins (2 octets) + 0x08, //length ends, 8 octets + 0x00, // error code placeholder begins (M3UA_MSG_OFFS+4) + 0x00, // + 0x00, // + 0x00, // error code placeholder ends + // additional field: + 0x00, // M3UA_MSG_OFFS+8 + 0x00, // Routing context or Network Appearanance or APC or DI = error_code_id + 0x00, // par length begins (2 octets) + 0x08, // length ends, 8 octets + 0x00, // value placeholder begins M3UA_MSG_OFFS+12 + 0x00, // + 0x00, // + 0x00 // value place holder ends +}; +const int sizeof_error_msg = 24; + +void MTP3asp__PT_PROVIDER::M3UA_user_unmap(const char *system_port) +{ + MTP3_close_connection(); + dynamicConnection = FALSE; +} +//------------ + +void MTP3asp__PT_PROVIDER::M3UA_user_map(const char *system_port) +{ + M3UAState = AssocDown; + Check_TestPort_Variables(); + if(dynamicConnection) + { + connectionUp = FALSE; + } + else + { + MTP3_open_channel(TRUE); + M3UA_user_connect(); + } +} +//------------ + +void MTP3asp__PT_PROVIDER::M3UA_user_connect() +{ + M3UAState = AssocEstabl; + // Sending out an ASPUP message + log("Message ASPUP will be sent"); + send_msg(aspup_msg, sizeof_aspup_msg); + // NOTE: the ASPUPAck will be handled by M3UA_interpreter, which + // also will take care of sending ASPAC upon receiving the ASPUPAck +} +//------------ + +// M3UA_interpreter +void MTP3asp__PT_PROVIDER::M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) +{ + if ((length==0) || (inbuffer==NULL)) + { warn("0 byte long message received -> packet dropped."); + return; + } + + if (length==1) + { + log("1 byte long internal SEA message received -> packet dropped."); + return; + } + + if ( !strcmp((const char*)inbuffer,"start") ) + { log("start message received from SEA"); + return; + } + else if (!strcmp((const char*)inbuffer,"stop")) + { log("stop message received from SEA"); + return; + } + + // writing out the contents of the buffer + OCTETSTRING buff(length,inbuffer); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("incoming buffer: "); + buff.log(); + TTCN_Logger::end_event(); + + // version checking + if ( inbuffer[M3UA_VER_OFFS] != M3UA_version ) + { warn("Incompatible M3UA protocol version in header -> packet dropped"); + return; + } + + //length checking + unsigned int indicated_length = decode_32b_int(inbuffer + M3UA_LGT_OFFS ); + if ( indicated_length != (unsigned)length) + warn("Length in common header (%d) mismatches received buffer length (%d)," + "Assuming that it is because of the omission of final parameter padding" + "in indicated length",indicated_length, length); + + // checking MSG class + int unprocessed_chars = 0; + switch (inbuffer[M3UA_CLS_OFFS]) + { + case M3UA_MSG_CLS_MGMT: + unprocessed_chars = processing_M3UA_MGMT_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_TRNSFM : + unprocessed_chars = processing_M3UA_Transfer_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_SSNM : + unprocessed_chars = processing_M3UA_SSNM_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_ASPSM : + unprocessed_chars = processing_M3UA_ASPSM_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_ASPTM : + unprocessed_chars = processing_M3UA_ASPTM_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_RKM : + unprocessed_chars = processing_M3UA_RKM_msg(inbuffer, length); + break; + default: + unprocessed_chars = processing_M3UA_unsupported_msg_class(inbuffer, length); + break; + } + debuglog("%d chars remained unprocessed (might be due to padding)", unprocessed_chars); +} +//------------ + +//processing M3UA MGMT msg +int MTP3asp__PT_PROVIDER::processing_M3UA_MGMT_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_MGMT_msg"); + int offset = M3UA_MSG_OFFS; //pointer for processing + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: Mgmt, "); + switch (inbuffer[M3UA_TYP_OFFS])//msg type + { + case M3UA_MSG_TYP_MGMT_ERR: + TTCN_Logger::log_event("type: ERROR-> ignored"); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + break; + case M3UA_MSG_TYP_MGMT_NTFY: + TTCN_Logger::log_event("type: NOTIFY -> ignored"); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + break; + default: + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + TTCN_Logger::log_event("Unsupported M3UA msg type %x of class MGMT -> packet dropped.", inbuffer[M3UA_TYP_OFFS]); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + break; + } + return length - offset; +} +//------------ + +//processing M3UA SSNM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_SSNM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_SSNM_msg"); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: SSNM, "); + int offset = M3UA_MSG_OFFS; //pointer for processing + + switch (inbuffer[M3UA_TYP_OFFS]) + { + case M3UA_MSG_TYP_SSNM_DAUD: + while (offset <= length-8 ) //processing potential params + { + switch (inbuffer[offset++]) //1st octet of tag + { + case PAR_PREFIX_COMMON: + TTCN_Logger::log_event (" DAUD: COMMON parameter "); + switch (inbuffer[offset++]) //2nd octet of COMMON tag + { + case PAR_ROUTING_CTX: + TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + case PAR_INFO_STR: + TTCN_Logger::log_event ("Info String (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + case PAR_AFFECTED_PC: + TTCN_Logger::log_event ("Affected Point Code -> will send DUNA/DAVA, "); + TTCN_Logger::log_event("will ignore remainder parameters after APC}"); + TTCN_Logger::end_event(); + Send_DAVA_DUNA_to_APCinDAUD(Tester_Pc, inbuffer, offset); + return length-offset; + default: + TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x-> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]); + send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + break; + } + break; + case PAR_PREFIX_M3UA: + TTCN_Logger::log_event ("DAUD: M3UA parameter: "); + switch (inbuffer[offset++]) //2nd octet of M3UA tag + { + case PAR_NETW_APP: + TTCN_Logger::log_event ("Network Appearance (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + default: + TTCN_Logger::log_event ("invalid M3UA param tag:0x%02x%02x-> skipped", + PAR_PREFIX_M3UA, inbuffer[offset-1]); + send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + } + break; + default: //1st octet of tag + TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]); + close_log_event(); + return length -offset; + break; + } + } + break; + case M3UA_MSG_TYP_SSNM_DAVA: // Destination Available // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DAVA -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_DUNA: // Destination Unavailable // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DUNA -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_SCON: // Signalling Congestion // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_SCON -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_DUPU: //Destinationn User Part Unavailable // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DUPU -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_DRST: //Destination Restricted // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DRST -> ignored"); + close_log_event(); + break; + default: //msg type + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + TTCN_Logger::log_event("Unsupported M3UA msg type -> packet dropped."); + close_log_event(); + break; + } + return length - offset; +} +//------------ + +//processing M3UA ASPSM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_ASPSM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_ASPSM_msg"); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: ASPSM, "); + + int offset = M3UA_MSG_OFFS; //pointer for processing + switch (inbuffer[M3UA_TYP_OFFS]) + { + case M3UA_MSG_TYP_ASPSM_ASPUP: + TTCN_Logger::log_event("type: ASPSM_ASPUP -> ASPUPAck will be sent"); + close_log_event(); + send_msg(aspupack_msg, sizeof_aspupack_msg); + break; + case M3UA_MSG_TYP_ASPSM_ASPDN: + TTCN_Logger::log_event("type: ASPSM_ASPDN -> ASPDNAck will be sent"); + close_log_event(); + send_msg(aspdn_ack_msg, sizeof_aspdn_ack_msg); + break; + case M3UA_MSG_TYP_ASPSM_BEAT: + TTCN_Logger::log_event("type: ASPSM_BEAT -> ASPSM_BEATAck will be sent"); + close_log_event(); + //Sending back the packet as acknowledge: + inbuffer[M3UA_TYP_OFFS]= M3UA_MSG_TYP_ASPSM_BEATAck; + send_msg(inbuffer, length); + break; + case M3UA_MSG_TYP_ASPSM_ASPUPAck: + TTCN_Logger::log_event("type: ASPSM_ASPUPAck -> ASPAC will be sent"); + M3UAState = AssocInac; + TTCN_Logger::log_event(" M3UAState's been changed to AssocInac"); + close_log_event(); + send_msg(aspac_msg, sizeof_aspac_msg ); + break; + case M3UA_MSG_TYP_ASPSM_ASPDNAck: + M3UAState = AssocDown; + TTCN_Logger::log_event(" M3UAState's been changed to AssocDown"); + TTCN_Logger::log_event("type: ASPSM_ASPDNAck -> nothing will be sent"); + close_log_event(); + break; + case M3UA_MSG_TYP_ASPSM_BEATAck: + TTCN_Logger::log_event("type: ASPSM_BEATAck -> nothing will be sent"); + close_log_event(); + break; + default: + TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS])); + close_log_event(); + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + break; + } + return length - offset; +} +//------------ + +//processing M3UA ASPTM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_ASPTM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_ASPTM_msg"); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: ASPTM, "); + + int offset = M3UA_MSG_OFFS; //pointer for processing + switch (inbuffer[M3UA_TYP_OFFS]) + { + case M3UA_MSG_TYP_ASPTM_ASPAC: //ASP Active + M3UAState = AssocActive; + TTCN_Logger::log_event("type: ASPTM_ASPAC -> ASPACAck will be sent"); + close_log_event(); + send_msg(aspac_ack_msg, sizeof_aspac_ack_msg); + break; + case M3UA_MSG_TYP_ASPTM_ASPIA: //ASP InActive + TTCN_Logger::log_event("type: ASPTM_ASPIA -> ASPIAAck will be sent"); + close_log_event(); + send_msg(aspia_ack_msg, sizeof_aspia_ack_msg); + break; + case M3UA_MSG_TYP_ASPTM_ASPACAck: + M3UAState = AssocActive; + TTCN_Logger::log_event("type: ASPTM_ASPACAck -> nothing will be sent"); + TTCN_Logger::log_event("M3UAState's been changed to AssocActive."); + close_log_event(); + break; + case M3UA_MSG_TYP_ASPTM_ASPIAAck: + TTCN_Logger::log_event("type: ASPTM_ASPIAAck -> nothing will be sent"); + close_log_event(); + break; + default: + TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS])); + close_log_event(); + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + break; + } + return length - offset; +} +//------------ + +//processing M3UA RKM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_RKM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_RKM_msg"); + int offset = M3UA_MSG_OFFS; //pointer for processing + warn("Unsupported M3UA msg class M3UA_RKM -> packet dropped."); + return length - offset; +} +//------------ + +//processing M3UA unsupported msg class +int MTP3asp__PT_PROVIDER::processing_M3UA_unsupported_msg_class(unsigned char* inbuffer,int length) +{ + warn("Unsupported M3UA msg class -> packet dropped."); + send_M3UA_error_msg( PAR_ERRC_UNSMC, inbuffer[M3UA_CLS_OFFS] ); + int offset = M3UA_MSG_OFFS; //pointer for processing + return length - offset; +} +//------------ + +// processing_M3UA_Transfer_msg - called if the msg class is "Transfer" i.e M3UA_MSG_CLS_TRNSFM: +int MTP3asp__PT_PROVIDER::processing_M3UA_Transfer_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_M3UA_Transfer_msg"); + int offset = M3UA_MSG_OFFS; //pointer for processing + unsigned int recv_opc, recv_dpc,recv_si, recv_ni, recv_mp,recv_sls =0; + int param_length = 0; + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: DataTrnsf, "); + + switch (inbuffer[M3UA_TYP_OFFS]) //msg type + { + case M3UA_MSG_TYP_TRSNFM_DATA: + TTCN_Logger::log_event("msg type DATA, "); + while (offset <= length-8) //processing potential params + { + switch (inbuffer[offset++]) //1st octet of tag. Offset already incremented after the 'case' ! + { + case PAR_PREFIX_COMMON: + TTCN_Logger::log_event (" DATA: COMMON parameter, "); + switch (inbuffer[offset++]) //2nd octet of tag + { + case PAR_ROUTING_CTX: + TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), "); + // Send back an error msg + skip_par_after_tag(inbuffer, offset); + break; + case PAR_CORREL_ID: + TTCN_Logger::log_event ("Correlation ID (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + default: + TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x -> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + break; + } + case PAR_PREFIX_M3UA: + TTCN_Logger::log_event ("DATA: M3UA parameter: "); + switch (inbuffer[offset++]) //2nd octet of M3UA tag + { + case PAR_PROT_DATA: + //--------------------------------------------- + TTCN_Logger::log_event ("Protocol Data"); + // retrieving length + param_length = decode_16b_int(inbuffer+offset); offset+=2; + TTCN_Logger::log_event(", DATA: Length of Protocol Data parameter is %d",param_length); + // retrieving M3UA protocol data paremeter opc, dpc, si, ni, mp, + // sls + recv_opc = decode_32b_int(inbuffer+offset); offset +=4; + recv_dpc = decode_32b_int(inbuffer+offset); offset +=4; + recv_si = (unsigned int)(inbuffer[offset++]); + recv_ni = (unsigned int)(inbuffer[offset++]); + recv_mp = (unsigned int)(inbuffer[offset++]); + recv_sls = (unsigned int)(inbuffer[offset++]); + TTCN_Logger::log_event(", DATA: decoded Protocol Data parameter:"); + // filling up TTCN structure + if ((Loop==MTP3_ON) || + (!Filter) || + (Filter && + (recv_opc == (unsigned)Sut_Pc) && (recv_dpc == (unsigned)Tester_Pc) && + (recv_ni == (unsigned)mtp3_ni) + )) + { + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + recv_sio.ni()= int2bit(recv_ni,2); + recv_sio.prio()= int2bit(recv_mp,2); + recv_sio.si()= int2bit(recv_si,4); + recv_msg.sio() = recv_sio; + recv_msg.sls() = recv_sls; + recv_msg.opc()= recv_opc; + recv_msg.dpc() = recv_dpc;; + recv_msg.data() = OCTETSTRING(param_length-16, // 16 octet paramheader + 5 routing label + &inbuffer[offset]); + recv_msg.log(); + close_log_event(); + incoming_message ( recv_msg ); + offset += param_length-16; + return length - offset; + } + else + { + close_log_event(); + log("Either the received M3UA(OPC, DPC, SI) fields, or the embedded MTP3 rooting label (OPC, DPC) not matched with the filter setting -> packet dropped."); + return length - offset; + } + break; + default: + TTCN_Logger::log_event ("invalid M3UA param tag:0x%02x%02x-> skipped", PAR_PREFIX_M3UA, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + } + break; + default: + TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]); + close_log_event(); + return length -offset; + break; + } + }// Checking parameter tag (offset packet dropped", + (unsigned int)(inbuffer[M3UA_TYP_OFFS])); + close_log_event(); + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + break; + } + + return length -offset; +} + +// Set M3UA SingleAPC - Stores field Single Affected Point Code +void MTP3asp__PT_PROVIDER::Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par) +{ + //setting par type to APC + apc_par[0] = PAR_PREFIX_COMMON; + apc_par[1] = PAR_AFFECTED_PC; + //setting the length to 4+4 = 8 + apc_par[2] = 0x00; + apc_par[3] = 0x08; + //setting the mask + apc_par[4] = 0x00; + //setting the pc + encode_24b_int(apc_par+5,pc); +} + +// Send DAVA DUNA to APCinDAUD +void MTP3asp__PT_PROVIDER::Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int & offset) +{ + unsigned int length = decode_16b_int(inbuffer+offset); + offset +=2; + unsigned int current_pc; + + //checking the length + if ((length < 8) || (length%4)) + { warn("Invalid length in APC parameter -> not processed"); + return; + } + + for (unsigned int i = 4 ; i < length; i += 4) + { + if (inbuffer[offset++] == 0x00) // mask===>single pc + { + current_pc = decode_24b_int(inbuffer+offset); + offset +=3; + if (dava_sep == current_pc) //dava + { Set_M3UA_SingleAPC(dava_sep, dava_1apc_msg+M3UA_MSG_OFFS); + log("DAVA will be sent for pc=%d", dava_sep); + send_msg(dava_1apc_msg, sizeof_dava_1apc_msg); + } + else //duna + { Set_M3UA_SingleAPC(current_pc, duna_1apc_msg+M3UA_MSG_OFFS); + log("DUNA will be sent for pc=%d", current_pc); + send_msg(duna_1apc_msg, sizeof_duna_1apc_msg); + } + } + else //masked pc + { warn("Unsupported masking (mask=0x%02x) for PC=%d in APC parameter -> ignored", + inbuffer[offset-1], current_pc); + } + } + return; +} + +// send M3UA error msg +// send an eror msg with error_code. Additional parameter matches to the error code: +void MTP3asp__PT_PROVIDER::send_M3UA_error_msg(unsigned int error_code, unsigned int add_par ) +{ + encode_16b_int( error_msg+M3UA_MSG_OFFS+4, error_code); + encode_16b_int( error_msg+M3UA_MSG_OFFS+8, add_par); + send_msg(error_msg, sizeof_error_msg ); +}; + +// Coder functions for M3UA: int -> unsigned char array +//------------------------------------------------------ +// Result:Less significant byte in highest address +// Most Significant Byte first (in lowest address) = MSB = Big Endian = Network Byte Order +void MTP3asp__PT_PROVIDER::encode_32b_int(unsigned char *to, unsigned int from) +{ + to[3] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[0] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_32b_int(const unsigned char *from) +{ + return from[3] | (from[2] << 8) | (from[1] << 16) | (from[0] << 24); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_24b_int(unsigned char *to, unsigned int from) +{ + to[2] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[0] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_24b_int(const unsigned char *from) +{ + return from[2] | (from[1] << 8) | (from[0] << 16); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_16b_int(unsigned char *to, int from) +{ + to[1] = from & 0xFF; + from >>= 8; + to[0] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_16b_int(const unsigned char *from) +{ + return from[1] | (from[0] << 8); +} +//------------ + +//skip par after tag +void MTP3asp__PT_PROVIDER::skip_par_after_tag(unsigned char* inbuffer, int &offset) +{ + offset += decode_16b_int(inbuffer+offset)-2; //the length contains + //the param hdr. itself + if (offset%4) offset += 4-(offset%4); //skipping padding +} +//------------ +#endif + + + +#ifdef TARGET_TEST +// -------------------------- +// Functions for Target testing +// -------------------------- +// In case of target this function handles the received message +void MTP3asp__PT_PROVIDER::message_incoming(const unsigned char* msg, int messageLength, int) +{ + OCTETSTRING rcvData = OCTETSTRING(messageLength, msg); + + int msgType = oct2int(substr(rcvData,0,1)); + switch (msgType) + { + case 0: //TRANSFERind message received + if(Tcp_is_up) //Registration was already performed + { + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + BITSTRING sio_bit = oct2bit(substr(rcvData,5,1)); + recv_sio.ni()= substr(sio_bit,0,2); + recv_sio.prio()= substr(sio_bit,2,2); + recv_sio.si()= substr(sio_bit,4,4); + recv_msg.sio() = recv_sio; + recv_msg.opc() = oct2int(substr(rcvData,6,4)); + recv_msg.dpc() = oct2int(substr(rcvData,10,4)); + recv_msg.sls() = oct2int(substr(rcvData,14,1)); + recv_msg.data() = substr(rcvData,15,rcvData.lengthof()-15); + if (Tcp_is_up == 1) //No unregistration ongoing + incoming_message(recv_msg); + else //Unregistration ongoing + log("Received ASP_MTP3_TRANSFERind is ignored since unregistration is started."); + } + else + error("Message was received before successful registration in M3UA server."); + break; + + case 4: //Status message received + { + int status = oct2int(substr(rcvData,5,1)); + if(Tcp_is_up == 2) // Unregistration ongoing + { + const char * rcvDat = oct2str(rcvData); + log("Message \"%s\" received. Status = %i", rcvDat, status); + if (status == 2) + { + log("Unregistration performed."); + Tcp_is_up = 0; + } + else if (status == 3) + error("Unsuccessful unregistration."); + else if (status == 5) { + if(forward_status) { + incoming_message(ASP__MTP3__STATUS(NULL_VALUE)); + } + else { + warn("Invalid STATUS message received from M3UA server with status code=%d.", status); + } + } + } + else if(Tcp_is_up == 1) // Active state + { + if (status == 5) { + if(forward_status) { + incoming_message(ASP__MTP3__STATUS(NULL_VALUE)); + } + } + else { + warn("Invalid STATUS message received from M3UA server with status code=%d.", status); + } + } + else // Registration ongoing + { + const char * rcvDat = oct2str(rcvData); + log("Message \"%s\" received. Status = %i", rcvDat, status); + if (status == 0) + { + log("Registration performed."); + Tcp_is_up = 1; + } + else { + error("Unsuccessful registration."); + } + } + } + break; + case 5: + { + if(forward_pause) incoming_message(ASP__MTP3__PAUSE(NULL_VALUE)); + } + break; + case 6: + { + if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE)); + } + break; + + + default: //Unexpected message received + warn("Invalid message received from M3UA server."); + } +} + +void MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables() +{ + if (Sut_Pc==-1) error("Parameter SUT_Pc is not set."); + if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set."); + if (!Ni_is_set) error("Parameter NI is not set."); + if (M3UA_version==0) error("Parameter M3UA_version cannot be set to 0 in TargetM3UA mode."); + +//packet header + header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB); +} + +void MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables_STC() +{ + if( destinationname == NULL) error("Parameter DestinationName is not set in TargetSTC mode."); + + header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB); +} + +void MTP3asp__PT_PROVIDER::Target_user_map(const char *system_port) +{ + Tcp_is_up = 0; + Check_Target_TestPort_Variables(); + map_user(); + + OCTETSTRING tcpData = int2oct(2,1); //Message type + if( destinationname == NULL) + tcpData = tcpData + int2oct(char2oct(system_port).lengthof()+15,4); //Length + else + tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4); + tcpData = tcpData + int2oct(mtp3_ni,1); + tcpData = tcpData + int2oct(Sut_Pc,4); + tcpData = tcpData + int2oct(Tester_Pc,4); + tcpData = tcpData + int2oct(M3UA_version,1); + if( destinationname == NULL) + tcpData = tcpData + char2oct(system_port); + else + tcpData = tcpData + char2oct(destinationname); + + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Registration message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); + + int fd = get_socket_fd(); + pollfd pollFd = { fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) + error("No response received for REGISTER message. Exiting after timeout."); + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) + error("No response received for REGISTER message. Exiting after error (%d)", + (nEvents < 0) ? errno : 0); + Handle_Fd_Event(fd, TRUE, FALSE, FALSE); +} + +void MTP3asp__PT_PROVIDER::TargetSTC_user_map(const char *system_port) +{ + Tcp_is_up = 0; + Check_Target_TestPort_Variables_STC(); + map_user(); + + OCTETSTRING tcpData = int2oct(2,1); //Message type + tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4); + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + char2oct(destinationname); + + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Registration message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); + + int fd = get_socket_fd(); + pollfd pollFd = { fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) + error("No response received for REGISTER message. Exiting after timeout."); + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) + error("No response received for REGISTER message. Exiting after error (%d)", + (nEvents < 0) ? errno : 0); + Handle_Fd_Event(fd, TRUE, FALSE, FALSE); +} + +void MTP3asp__PT_PROVIDER::Target_user_unmap(const char *system_port) +{ + OCTETSTRING tcpData = int2oct(3,1); //Message type + tcpData = tcpData + int2oct(6,4); //Length + tcpData = tcpData + int2oct(0,1); + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Unregistration message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); + + Tcp_is_up = 2; //Unregistration ongoing + + while (Tcp_is_up == 2) + { + int fd = get_socket_fd(); + pollfd pollFd = { fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) + error("No response received for UNREGISTER message. Exiting after timeout."); + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) + error("No response received for UNREGISTER message. Exiting after error (%d)", + (nEvents < 0) ? errno : 0); + Handle_Fd_Event(fd, TRUE, FALSE, FALSE); + } + unmap_user(); +} +#endif +} diff --git a/MTP3asp_CNL113337/demo/MTP3asp_PT.hh b/MTP3asp_CNL113337/demo/MTP3asp_PT.hh new file mode 100644 index 00000000..340f24ff --- /dev/null +++ b/MTP3asp_CNL113337/demo/MTP3asp_PT.hh @@ -0,0 +1,249 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2009 // +// // +// 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: MTP3asp_PT.hh +// Description: Implementation of port MTP3asp_PT +// This test port is written to connect ttcn to SEA +// according to specification ITU-T SS7 MTP3, ANSI, TCC, MPT, IETF, +// Reference: ITU-T Recommendation Q.704, RFC3332 +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2009-04-03 +// Contact: http://ttcn.ericsson.se + + +#ifndef MTP3asp_PT_HH +#define MTP3asp_PT_HH + +#include + +#ifdef TARGET_TEST +#include "Abstract_Socket.hh" +#endif + +#ifndef TARGET_TEST +#include "mphclib.h" +#endif + + +#define MAXSIZE 1532 //+32 needed for M3UA +#define MTP3_ON 1 +#define MTP3_OFF 0 +namespace MTP3asp__Types { + class ASP__MTP3__TRANSFERind; + class ASP__MTP3__PAUSE; + class ASP__MTP3__RESUME; + class ASP__MTP3__STATUS; + class ASP__MTP3__TRANSFERreq; +} +namespace MTP3asp__PortType { + +class MTP3asp__PT_PROVIDER : public PORT +#ifdef TARGET_TEST + , public Abstract_Socket +#endif + { +protected: + // pointer to member: user_map/unmap methods + typedef void (MTP3asp__PT_PROVIDER::*usermap_t)(const char *system_port); + // pointer to member: user_connect methods + typedef void (MTP3asp__PT_PROVIDER::*userconnect_t)(); + // pointer to member: interpreter methods +#ifndef TARGET_TEST + typedef void (MTP3asp__PT_PROVIDER::*interpreter_t)(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + + void M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + void M3UA_user_map(const char *system_port); + void M3UA_user_connect(); + void M3UA_user_unmap(const char *system_port); + void MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + void MTP3_user_map(const char *system_port); // common for MTP3 ITU and MTP3 ANSI + void MTP3_user_connect(); + void MTP3_user_unmap(const char *system_port);// common for MTP3 ITU and MTP3 ANSI + void STC_user_connect(); + void STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + void STC_user_map(const char *system_port); + void STC_user_unmap(const char *system_port); +#endif +#ifdef TARGET_TEST + //Map and unmap for target + void Target_user_map(const char *system_port); + void Target_user_unmap(const char *system_port); + void TargetSTC_user_map(const char *system_port); +#endif + +public: + MTP3asp__PT_PROVIDER(const char *par_port_name=NULL); + ~MTP3asp__PT_PROVIDER(); + + typedef enum { MTP3itu, MTP3ansi, MTP3ttc, MTP3mpt, M3UA, TargetM3UA, MTP3bttc,MTP3iup, STC, TargetSTC } MTPServiceType_t ; + + MTPServiceType_t MTPServiceType ; // ctor default is MTP3itu + void set_parameter(const char *parameter_name, const char *parameter_value); + void error(const char *msg, ...); + void log(const char *msg, ...); +#ifndef TARGET_TEST + void user_connect(); + + void set_channel(int chnl) {channel=chnl;}; + void MTP3_open_channel(boolean http); + void MTP3_close_connection(); + + boolean wait_for_open(); + int conn_state; + + interpreter_t interpreter; // pointer to interpreter members, ctor default is MTP3_ITU_interpreter + void doInterpret(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) + { (this->*interpreter)(inbuffer,length,from_channel, con); } +#endif + //parameter handling + boolean dynamicConnection, connectionUp; + char *hostname; + int httpport; + char *entityname; + int MTP_fd; + +protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void debuglog(const char *msg, ...); + void warn(const char *msg, ...); + void close_log_event(); + + usermap_t user_map_p ; // pointer to user_map members, default is MTP3itu + usermap_t user_unmap_p; // pointer to user_unmap members, default is MTP3itu + userconnect_t user_connect_p; + + void user_start(); + void user_stop(); + + void outgoing_send(const MTP3asp__Types::ASP__MTP3__TRANSFERreq& send_par); + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__TRANSFERind& incoming_par) = 0; + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__PAUSE& incoming_par) = 0; + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__RESUME& incoming_par) = 0; + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__STATUS& incoming_par) = 0; +#ifndef TARGET_TEST + void encode_56bLSB_int(unsigned char *to, unsigned long long int from); + long long unsigned int decode_56bLSB_int(const unsigned char *from); + void encode_48bLSB_int(unsigned char *to, unsigned long long int from); + long long unsigned int decode_48bLSB_int(const unsigned char *from); + void encode_40bLSB_int(unsigned char *to, unsigned long long int from); + long long unsigned int decode_40bLSB_int(const unsigned char *from); + void encode_32bLSB_int(unsigned char *to, unsigned int from); + unsigned int decode_32bLSB_int(const unsigned char *from); + void encode_24bLSB_int(unsigned char *to, int from); + unsigned int decode_24bLSB_int(const unsigned char *from); + void encode_16bLSB_int(unsigned char *to, int from); + unsigned int decode_16bLSB_int(const unsigned char *from); + void encode_32b_int(unsigned char *to, unsigned int from); + unsigned int decode_32b_int(const unsigned char *from); + void encode_24b_int(unsigned char *to, unsigned int from); + unsigned int decode_24b_int(const unsigned char *from); + void encode_16b_int(unsigned char *to, int from); + unsigned int decode_16b_int(const unsigned char *from); + void skip_par_after_tag(unsigned char* inbuffer, int &offset); + + void GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg); + void GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg); + void SetPointCodes(unsigned int sls, unsigned int opc, unsigned int dpc, unsigned char* msg); + void SetPointCodesIUP(unsigned int cic, unsigned int opc, unsigned int dpc, unsigned char* msg); + int ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len); + void Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par); //for ITU and ANSI + bool Check_M3UA_SingleITUAPC(unsigned int pc, unsigned char* apc_par); + void Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int &offset ); + void processing_MTP3_management_msg(unsigned char* inbuff,int len); + void processing_MTP3_test_msg(unsigned char* inbuff,int len); + int processing_M3UA_MGMT_msg(unsigned char* inbuff,int len); + int processing_M3UA_Transfer_msg(unsigned char* inbuff,int len); + int processing_M3UA_SSNM_msg(unsigned char* inbuff,int len); + int processing_M3UA_ASPSM_msg(unsigned char* inbuff,int len); + int processing_M3UA_ASPTM_msg(unsigned char* inbuff,int len); + int processing_M3UA_RKM_msg(unsigned char* inbuff,int len); + int processing_M3UA_unsupported_msg_class(unsigned char* inbuff,int len); + int Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff); + void send_msg(unsigned char *outbuff, int length); + void send_M3UA_error_msg(unsigned int error_code, unsigned int add_par ); + void Check_TestPort_Variables(); + void Check_TestPort_Variables_STC(); +#endif +#ifdef TARGET_TEST + void Check_Target_TestPort_Variables(); + void Check_Target_TestPort_Variables_STC(); + + //Functions for abstract socket handling + void message_incoming(const unsigned char*, int length, int client_id = -1); + void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); } + void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); } + void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); } + void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); } + void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); } + void Handler_Uninstall() { Uninstall_Handler(); } + void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) { + Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic); + } + const char* local_address_name() { return "localIPAddr";} + const char* local_port_name() { return "localPort";} + const char* remote_address_name(){ return "M3UAtarget_TCP_IPAddr";} + const char* remote_port_name() { return "M3UAtarget_TCP_Port";} + const char* halt_on_connection_reset_name(){ return "halt_on_connection_reset";} + const char* server_mode_name() { return "client_mode";} + const char* socket_debugging_name(){ return "socket_debugging";} + const char* nagling_name() { return "nagling";} + const char* server_backlog_name(){ return "server_backlog";} + const PacketHeaderDescr* Get_Header_Descriptor() const {return header_descr;} +#endif + +private: + void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); + void Handle_Timeout(double time_since_last_call); + + unsigned char M3UA_version; + int channel; + unsigned char buffer[MAXSIZE]; + char *destinationname; + char *iid_string; + boolean Ni_is_set; + int Loop,Filter,Sut_Pc,Tester_Pc; + typedef enum { AssocDown, AssocEstabl, AssocInac, AssocActive} M3UAStateType_t; + M3UAStateType_t M3UAState; + int mtp3_ni; // network indicator in case of MTP3 + int stored_bttc_octet; // used for storage of an additional first byte in MTP3bttc + +#ifndef TARGET_TEST + MPH_IID iid; + CONNECTION *myConnection; +#endif + bool forward_resume, forward_pause, forward_status; +#ifdef TARGET_TEST + int Tcp_is_up; + PacketHeaderDescr *header_descr; + bool is_packet_hdr_length_offset, is_packet_hdr_nr_bytes_in_length, + is_packet_hdr_byte_order; + int packet_hdr_length_offset, packet_hdr_nr_bytes_in_length; + PacketHeaderDescr::HeaderByteOrder packet_hdr_byte_order; +#endif +}; + +extern BOOLEAN f__MTP3__SEA__connect__extern + (MTP3asp__PT_PROVIDER& portRef, const CHARSTRING& Hostname, + const INTEGER& Port, const CHARSTRING& EntityName,const BOOLEAN& Http); + +extern BOOLEAN f__MTP3__SEA__disconnect__extern + (MTP3asp__PT_PROVIDER& portRef); + +} +#endif diff --git a/MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn b/MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn new file mode 100644 index 00000000..86b7a83e --- /dev/null +++ b/MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn @@ -0,0 +1,61 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// 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) have been supplied // +// // +/////////////////////////////////////////////////////////////////////////////// +// +// File: MTP3asp_PortType.ttcn +// Reference: ITU-T Recommendation Q.704, RFC3332 +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2008-02-07 +// Contact: http://ttcn.ericsson.se + +module MTP3asp_PortType +{ + + import from MTP3asp_Types all; +// ************************************************************************* +// * MTP3 port type definitions * +// ************************************************************************* + + // MTP3 port type used by the component up to the MTP3 SAP + // (eg. any component connected to the MTP3 test port) + type port MTP3asp_PT message + { + in ASP_MTP3_TRANSFERind; + in ASP_MTP3_PAUSE; + in ASP_MTP3_RESUME; + in ASP_MTP3_STATUS; + out ASP_MTP3_TRANSFERreq; + } with {extension "provider"} + + // MTP3 port type used by the component up to the MTP3 SAP + // (e.g. the distribution component) + type port MTP3asp_SP_PT message + { + in ASP_MTP3_TRANSFERreq; + out ASP_MTP3_TRANSFERind; + } + with {extension "internal"} + +//Connecting functions +//---------------------------- +external function f_MTP3_SEA_connect + ( inout MTP3asp_PT portRef, + in charstring Hostname, + in integer Port, + in charstring EntityName, + in boolean Http //or MPH Port is provided + )return boolean; + +external function f_MTP3_SEA_disconnect + ( inout MTP3asp_PT portRef + )return boolean; + +}//eof module diff --git a/MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn b/MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn new file mode 100644 index 00000000..e96f4201 --- /dev/null +++ b/MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn @@ -0,0 +1,324 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2006 // +// // +// 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: MTP3asp_Types.ttcn +// Description: CCSS7 Message Transfer Part primitive (ASP) definitions +// according to specification ITU-T SS7 MTP3, +// Reference: ITU-T Recommendation Q.704, RFC3332, ANSI T.1.111.1-2001, TCC +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2007-09-17 +// Contact: http://ttcn.ericsson.se +// +module MTP3asp_Types.objid + { + itu_t(0) identified_organization (4) etsi(0) reserved(127) + etsi_identified_organization(0) ericsson(5) testing (0) + generic(0) mtp3(0) v96(3) aspDefinitions(3) patchNo(0) + } + +{//start of the module + +// ************************************************************************* +// External encoding/decoding functions +// ************************************************************************* + +external function enc_MTP3_to_M3UAserver_msg (in MTP3_to_M3UAserver_msg pdu) + return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; + +external function dec_MTP3_to_M3UAserver_msg(in octetstring stream) + return MTP3_to_M3UAserver_msg + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + + +// ************************************************************************* +// * Type Definitions Part * +// ************************************************************************* +group Types +{ + group MessageTypes + { + group ASPs + { + //*********************************************************************** + //* ASP type definitions * + //* Note, that ASP types shall be TTCN-3 definitions to allow * + //* the use of anytype in the data field * + //*********************************************************************** + + type record MTP3_Field_sio + { + bitstring ni length(2), + bitstring prio length(2), + bitstring si length(4) + } with { variant "FIELDORDER(msb)"; + }; + + type record ASP_MTP3_TRANSFERind + { + MTP3_Field_sio sio, + integer opc, + integer dpc, + integer sls, + octetstring data + } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (sls) "FIELDLENGTH(8)" + }; + + type record ASP_MTP3_PAUSE {}; + + type record ASP_MTP3_RESUME {}; + + type record ASP_MTP3_STATUS {}; + + type record ASP_MTP3_TRANSFERreq + { + MTP3_Field_sio sio, + integer opc, + integer dpc, + integer sls, + octetstring data + } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (sls) "FIELDLENGTH(8)" + }; + }//end group ASPs + + //*********************************************************************** + //* Type definition of the message which is sent between MTP3 test port * + //* and SCTP server over TCP. * + //*********************************************************************** + group MTP3_SCTPserver + { + type record ASP_REGISTER_M3UA + { + integer ni (0..3), + integer sut_pc, + integer tester_pc, + integer m3ua_version, + charstring entity + } with { variant (ni) "FIELDLENGTH(8)"; + variant (sut_pc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (tester_pc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (m3ua_version) "FIELDLENGTH(8)" + }; + + + // Possible values: + // MTP3_to_SCTPserver_data/status: + const integer reg_ok_status := 0; + const integer reg_error_status := 1; + const integer unreg_ok_status := 2; + const integer unreg_error_status := 3; + + const integer send_error_status := 5; + const integer kill_status := 255; + + // MTP3_to_SCTPserver_data/pause: + const integer SCTP_COMLOST_pause := 0; + const integer M3UA_ASPDN_pause := 1; + const integer M3UA_ASPIA_pause := 2; + + // MTP3_to_SCTPserver_data/resume: + const integer ok_resume := 0; + + type union MTP3_to_SCTPserver_data + { + ASP_MTP3_TRANSFERind transfer_ind, + ASP_MTP3_TRANSFERreq transfer_req, + ASP_REGISTER_M3UA register, + integer unregister (0..255), + integer status (0..255), + integer pause (0..255), + integer resume (0..255) + } + + // MTP3_to_M3UAserver_msg/msgType: + const integer transfer_ind_msgType := 0; + const integer transfer_req_msgType := 1; + const integer register_msgType := 2; + const integer unregister_msgType := 3; + const integer status_msgType := 4; + const integer pause_msgType := 5; + const integer resume_msgType := 6; + + type record MTP3_to_M3UAserver_msg + { + integer msgType (0..255), + integer msgLength, + MTP3_to_SCTPserver_data data + } with { variant (data) "CROSSTAG( + transfer_ind, msgType = transfer_ind_msgType; + transfer_req, msgType = transfer_req_msgType; + register, msgType = register_msgType; + unregister, msgType = unregister_msgType; + status, msgType = status_msgType; + pause, msgType = pause_msgType; + resume, msgType = resume_msgType )"; + variant (msgLength) "FIELDLENGTH(32)"; + variant (msgLength) "LENGTHTO(msgType,msgLength,data)"; + variant (msgLength) "BYTEORDER(last)" + }; + }//end group MTP3_SCTPserver + }//end group Messagetypes +} with {encode "RAW"}//Types + +group Templates +{ + group MessageTemplates + { + group ASPtemplates + { + // ******************************************************************* + // * ASP template definitions * + // ******************************************************************* + + // Base templates + // These general templates can be used as an example or as a base + // template for other templates. + template ASP_MTP3_TRANSFERind t_ASP_MTP3_TRANSFERind + ( + template MTP3_Field_sio pl_SIO, + template integer pl_OPC, + template integer pl_DPC, + template integer pl_SLS, + template octetstring pl_data + ):= + { + sio := pl_SIO, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_sio + ( + template bitstring pl_NI, + template bitstring pl_PRIO, + template bitstring pl_SI, + template integer pl_OPC, + template integer pl_DPC, + template integer pl_SLS, + template octetstring pl_data + ):= + { + sio := + { + ni := pl_NI, + prio := pl_PRIO, + si := pl_SI + }, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind := + { + sio := ?, + opc := ?, + dpc := ?, + sls := ?, + data := ? + } + + template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq + ( + MTP3_Field_sio pl_SIO, + integer pl_OPC, + integer pl_DPC, + integer pl_SLS, + octetstring pl_data + ):= + { + sio := pl_SIO, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq_sio + ( + template bitstring pl_NI, + template bitstring pl_PRIO, + template bitstring pl_SI, + template integer pl_OPC, + template integer pl_DPC, + template integer pl_SLS, + template octetstring pl_data + ):= + { + sio := + { + ni := pl_NI, + prio := pl_PRIO, + si := pl_SI + }, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq := + { + sio := ?, + opc := ?, + dpc := ?, + sls := ?, + data := ? + } + + template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_stc := + { + sio := + { + ni := '00'B, + prio := '00'B, + si := '0000'B + }, + opc := 0, + dpc := 0, + sls := 0, + data := ? + } + + template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq_stc + ( template octetstring pl_data ):= + { + sio := + { + ni := '00'B, + prio := '00'B, + si := '0000'B + }, + opc := 0, + dpc := 0, + sls := 0, + data := pl_data + } + + }//end group ASPtemplates + }//end group Messagetemplates +}//end group Templates + +}//end module + + diff --git a/MTP3asp_CNL113337/demo/Makefile b/MTP3asp_CNL113337/demo/Makefile new file mode 100644 index 00000000..53b19d35 --- /dev/null +++ b/MTP3asp_CNL113337/demo/Makefile @@ -0,0 +1,353 @@ +# This Makefile was generated by the compiler +# of the TTCN-3 Test Executor version 1.4.pl3 +# for Attila Balasko (ethbaat@duna199) on Mon Sep 15 15:48:45 2003 + +# Copyright 2000-2003 Conformance Center, Ericsson R & D, Hungary +# Please send bug reports and comments to Szabo.Janos@eth.ericsson.se + +# The following make commands are available: +# - make, make all Builds the executable test suite. +# - make compile Translates TTCN-3 and ASN.1 modules to C++. +# - make clean Removes all generated files. +# - make dep Creates/updates dependency list. +# - make archive Archives all source files. + +# +# Set these variables... +# + +# The path of your TTCN-3 Test Executor installation: +# Uncomment this line to override the environment variable. +# TTCN3_DIR = + +# Your platform: (SOLARIS, LINUX, FREEBSD or WIN32) +PLATFORM = SOLARIS8 + +# Your C++ compiler: +CXX = g++ + +# Flags for the C++ preprocessor (and makedepend as well): +CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(SEA_DIR)/include + +# Flags for the C++ compiler: +CXXFLAGS = -Wall + +# Flags for the linker: +LDFLAGS = + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS = -L + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3-parallel + +# The path of your OpenSSL installation: +# If you do not have your own one, leave it unchanged. +OPENSSL_DIR = $(TTCN3_DIR) + +# Directory to store the archived source files: +# Note: you can set any directory except ./archive +ARCHIVE_DIR = ./backup + +SEA_DIR = /vobs/ttcn/TCC_Releases/Other/SEA_LATEST +# +# You may change these variables. Add your files if necessary... +# + +# The TTCN-3 modules needed for this project: +TTCN3_MODULES = mtp3test.ttcn MTP3asp_Types.ttcn MTP3asp_PortType.ttcn +# The ASN.1 modules needed for this project: +ASN1_MODULES = + +# C++ source & header files generated by TTCN-3 & ASN.1 compilers: +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +# Source & header files of Test Ports and your other modules: +USER_SOURCES = MTP3asp_PT.cc +USER_HEADERS = MTP3asp_PT.hh + +# All object files needed for the executable test suite: +#OBJECTS = mtp3test.o MTP3_ASPs.o general_typedefs.o MTP3user_porttype.o +OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) +# The name of the executable test suite: +TARGET = mtp3test + +#The names of the config files (to archive): +TARGET_CONFIGS = mtp3test_MTP3_ansi2.cfg +# +# Do not modify these unless you know what you are doing... +# +SOLARIS_LIBS = -lxnet +LINUX_LIBS = +FREEBSD_LIBS = +WIN32_LIBS = + +# +# Rules for building the executable... +# +all: $(TARGET) ; + +$(TARGET): $(OBJECTS) + $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) $(SEA_DIR)/lib/libmphclib.a -lxml2 + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) $(TTCN3_MODULES) \ + $(ASN1_MODULES) - $? + touch $@ + +clean: + -$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile *.log + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(USER_SOURCES) $(GENERATED_SOURCES) + +archive: + mkdir -p $(ARCHIVE_DIR) + tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) $(TARGET_CONFIGS) Makefile \ + | gzip >$(ARCHIVE_DIR)/$(TARGET)-`date '+%y%m%d-%H%M'`.tgz + +# +# Add your rules here if necessary... +# + +# DO NOT DELETE + +MTP3asp_PT.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +MTP3asp_PT.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +MTP3asp_PT.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +MTP3asp_PT.o: /usr/include/stdio_impl.h /usr/include/stdlib.h +MTP3asp_PT.o: /usr/include/iso/stdlib_iso.h /usr/include/sys/types.h +MTP3asp_PT.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +MTP3asp_PT.o: /usr/include/sys/select.h /usr/include/sys/time.h +MTP3asp_PT.o: /usr/include/time.h /usr/include/iso/time_iso.h +MTP3asp_PT.o: /usr/include/netinet/in.h /usr/include/sys/stream.h +MTP3asp_PT.o: /usr/include/sys/vnode.h /usr/include/sys/t_lock.h +MTP3asp_PT.o: /usr/include/sys/machlock.h /usr/include/sys/param.h +MTP3asp_PT.o: /usr/include/sys/unistd.h /usr/include/sys/mutex.h +MTP3asp_PT.o: /usr/include/sys/rwlock.h /usr/include/sys/semaphore.h +MTP3asp_PT.o: /usr/include/sys/condvar.h /usr/include/sys/time_impl.h +MTP3asp_PT.o: /usr/include/sys/cred.h /usr/include/sys/uio.h +MTP3asp_PT.o: /usr/include/sys/resource.h /usr/include/vm/seg_enum.h +MTP3asp_PT.o: /usr/include/sys/poll.h /usr/include/sys/strmdep.h +MTP3asp_PT.o: /usr/include/sys/model.h /usr/include/sys/strft.h +MTP3asp_PT.o: /usr/include/sys/byteorder.h /usr/include/netdb.h +MTP3asp_PT.o: /usr/include/sys/socket.h /usr/include/sys/netconfig.h +MTP3asp_PT.o: /usr/include/sys/un.h /usr/include/net/if_dl.h +MTP3asp_PT.o: /usr/include/sys/wait.h /usr/include/sys/siginfo.h +MTP3asp_PT.o: /usr/include/sys/machsig.h /usr/include/sys/procset.h +MTP3asp_PT.o: /usr/include/unistd.h /usr/include/arpa/inet.h +MTP3asp_PT.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +MTP3asp_PT.o: /usr/include/string.h /usr/include/iso/string_iso.h +MTP3asp_PT.o: MTP3asp_PT.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh +MTP3asp_PT.o: /usr/include/regex.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh +MTP3asp_PT.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +MTP3asp_PT.o: MTP3asp_Types.hh MTP3asp_PortType.hh +mtp3test.o: mtp3test.hh MTP3asp_PortType.hh MTP3asp_Types.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h +mtp3test.o: /usr/include/string.h /usr/include/iso/string_iso.h +mtp3test.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +mtp3test.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +mtp3test.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +mtp3test.o: /usr/include/stdio_impl.h +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh +mtp3test.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +mtp3test.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +mtp3test.o: /usr/include/sys/time.h /usr/include/sys/types.h +mtp3test.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +mtp3test.o: /usr/include/sys/select.h /usr/include/time.h +mtp3test.o: /usr/include/iso/time_iso.h +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh +mtp3test.o: /usr/include/regex.h +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh +mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh +mtp3test.o: MTP3asp_PT.hh +mtp3test.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +MTP3asp_Types.o: MTP3asp_Types.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h +MTP3asp_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h +MTP3asp_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +MTP3asp_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +MTP3asp_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +MTP3asp_Types.o: /usr/include/stdio_impl.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh +MTP3asp_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +MTP3asp_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +MTP3asp_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h +MTP3asp_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +MTP3asp_Types.o: /usr/include/sys/select.h /usr/include/time.h +MTP3asp_Types.o: /usr/include/iso/time_iso.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh +MTP3asp_Types.o: /usr/include/regex.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh +MTP3asp_PortType.o: MTP3asp_PortType.hh MTP3asp_Types.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h +MTP3asp_PortType.o: /usr/include/string.h /usr/include/iso/string_iso.h +MTP3asp_PortType.o: /usr/include/sys/feature_tests.h +MTP3asp_PortType.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h +MTP3asp_PortType.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h +MTP3asp_PortType.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh +MTP3asp_PortType.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +MTP3asp_PortType.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +MTP3asp_PortType.o: /usr/include/sys/time.h /usr/include/sys/types.h +MTP3asp_PortType.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +MTP3asp_PortType.o: /usr/include/sys/select.h /usr/include/time.h +MTP3asp_PortType.o: /usr/include/iso/time_iso.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh +MTP3asp_PortType.o: /usr/include/regex.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh +MTP3asp_PortType.o: MTP3asp_PT.hh +MTP3asp_PortType.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h diff --git a/MTP3asp_CNL113337/demo/mtp3test.ttcn b/MTP3asp_CNL113337/demo/mtp3test.ttcn new file mode 100644 index 00000000..1c842503 --- /dev/null +++ b/MTP3asp_CNL113337/demo/mtp3test.ttcn @@ -0,0 +1,292 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright Test Competence Center (TCC) ETH 2003 +// +// 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: mtp3test.cc +// Description: basic test for MTP3asp_PT +// Rev: +// Prodnr: CNL 113 337 +// Updated: 2004.06.02 +// Contact: http://ttcn.ericsson.se + + +module mtp3test +{ + +modulepar +{ + //mtp3test specific data: + //OCT1n MTP3_UserPart_SIO; + MTP3_Field_sio MTP3_UserPart_SIO; + integer MTP3_UserPart_OPC, + MTP3_UserPart_DPC, + MTP3_UserPart_SLS +};//modulepar + +import from MTP3asp_Types all; +import from MTP3asp_PortType all; + +/************************************* +* Components +**************************************/ + +/* +**************** 1: 2: ************************ +* MTP3UserPart * <---------> * MTP3/M3UA in MSC * +**************** (MTP3port)************************ +1: MTP3asp_PT MTP3_PCO alias: e.g. CMGW6 + +*/ + +type record of MTP3UserPart_CT CompArray; + +type component MTC_CT +{ + port MTP3asp_PT MTC_PCO; + var MTP3UserPart_CT vc_MTP3UserPart_BSC1A; + var MTP3UserPart_CT vc_MTP3UserPart_BSC1B; + var MTP3UserPart_CT vc_MTP3UserPart_BSC1C; + var MTP3UserPart_CT vc_MTP3UserPart_CMGW3; + var MTP3UserPart_CT vc_MTP3UserPart_CMGW6; + var MTP3UserPart_CT vc_MTP3UserPart_CMGW9; + var MTP3UserPart_CT vc_compArray[6]; +}; + +// Model of MSC: +type component MSC_SCT +{ + port MTP3asp_PT BSC1A; + port MTP3asp_PT BSC1B; + port MTP3asp_PT BSC1C; + port MTP3asp_PT CMGW3; + port MTP3asp_PT CMGW6; + port MTP3asp_PT CMGW9; +}; + +//Model of SS7 MTP3 User Part for Self Test. Only logs the messages +type component MTP3UserPart_CT +{ + var ASP_MTP3_TRANSFERind v_MTP3_TRANSFERind; + var ASP_MTP3_TRANSFERreq v_MTP3_TRANSFERreq; + port MTP3asp_PT MTP3_PCO; + // port ... to the upper layers +} // end component type definition + +/* +function MTC_delay(integer time) runs on MTC_CT { + timer t:=time; + t.start; + setverdict(none); + alt{ []t.timeout {} } + } +*/ + +function mtp3_selftest( ) runs on MTP3UserPart_CT +{ + timer t_Guard := 6.0; + log( "mtp3_selftest started"); + t_Guard.start; + setverdict(none); + alt + { + [] MTP3_PCO.receive ( ASP_MTP3_TRANSFERind:?) -> value v_MTP3_TRANSFERind + { + log("ASP_MTP3_TRANSFERind: received"); + setverdict(pass); + repeat; + } + [] MTP3_PCO.receive + { + log("Unknown signal received"); + setverdict(pass); + repeat; + } + [] t_Guard.timeout + { log("timeout reached");} + } //alt + log("mtp3_selftest finished"); +} + +function f_init( ) runs on MTC_CT +{ + vc_MTP3UserPart_BSC1A := MTP3UserPart_CT.create; + vc_MTP3UserPart_BSC1B := MTP3UserPart_CT.create; + vc_MTP3UserPart_BSC1C := MTP3UserPart_CT.create; + vc_MTP3UserPart_CMGW3 := MTP3UserPart_CT.create; + vc_MTP3UserPart_CMGW6 := MTP3UserPart_CT.create; + vc_MTP3UserPart_CMGW9 := MTP3UserPart_CT.create; + + map(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A); + map(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B); + map(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C); + map(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3); + map(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6); + map(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9); + + log("tc_3 map is ready"); +} + +function f_start() runs on MTC_CT +{ + vc_MTP3UserPart_BSC1A.start( mtp3userpart_test() ); + vc_MTP3UserPart_BSC1B.start( mtp3userpart_test() ); + vc_MTP3UserPart_BSC1C.start( mtp3userpart_test() ); + vc_MTP3UserPart_CMGW3.start( mtp3userpart_test() ); + vc_MTP3UserPart_CMGW6.start( mtp3userpart_test() ); + vc_MTP3UserPart_CMGW9.start( mtp3userpart_test() ); +} + +function f_terminate() runs on MTC_CT +{ + all component.done; + unmap(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A); + unmap(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B); + unmap(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C); + unmap(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3); + unmap(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6); + unmap(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9); +} + +function mtp3userpart_test( ) runs on MTP3UserPart_CT { + timer t_Guard := 5.0; + log( "mtp3userpart_test started"); + v_MTP3_TRANSFERreq := + { + sio := MTP3_UserPart_SIO, + opc := MTP3_UserPart_OPC, + dpc := MTP3_UserPart_DPC, + sls := 0, + data:= '010203040506070809000102030405060708090000010203040506070809000000'O + }; + MTP3_PCO.send( v_MTP3_TRANSFERreq ); + t_Guard.start; + setverdict(none); + alt + { + [] MTP3_PCO.receive ( ASP_MTP3_TRANSFERind:? ) -> value v_MTP3_TRANSFERind + { + log("ASP_MTP3_TRANSFERind: received"); + setverdict(pass); + repeat; + } + [] MTP3_PCO.receive + { + log("Unknown signal received"); + setverdict(pass); + repeat; + } + [] t_Guard.timeout + { + //setverdict(inconc); + log("timeout reached"); + } + } //alt + log("mtp3userpart_test finished"); +} + +testcase tc_1() runs on MTC_CT system MSC_SCT +{ + log ("tc_1 started"); + var MTP3UserPart_CT vc_MTP3userpart; + vc_MTP3userpart := MTP3UserPart_CT.create; + map(vc_MTP3userpart:MTP3_PCO, system:CMGW6); + log("map is ready"); + vc_MTP3userpart.start( mtp3_selftest() ); + //MTC_delay(6); + vc_MTP3userpart.done; + unmap(vc_MTP3userpart:MTP3_PCO, system:CMGW6); + log ("tc_1 finished"); +} + +// TC2: Testcase sending one simple message "MTP-transfer-req" and waiting +testcase tc_2() runs on MTC_CT system MSC_SCT +{ + log ("tc_2 started"); + var MTP3UserPart_CT vc_MTP3userpart; + vc_MTP3userpart := MTP3UserPart_CT.create; + map(vc_MTP3userpart:MTP3_PCO, system:CMGW6); + log("map is ready"); + vc_MTP3userpart.start( mtp3userpart_test() ); + //MTC_delay(6); + vc_MTP3userpart.done; + unmap(vc_MTP3userpart:MTP3_PCO, system:CMGW6); + log ("tc_2 finished"); +} + +testcase tc_3() runs on MTC_CT system MSC_SCT +{ + log ("tc_3 started"); + vc_MTP3UserPart_BSC1A := MTP3UserPart_CT.create; + vc_MTP3UserPart_BSC1B := MTP3UserPart_CT.create; + vc_MTP3UserPart_BSC1C := MTP3UserPart_CT.create; + vc_MTP3UserPart_CMGW3 := MTP3UserPart_CT.create; + vc_MTP3UserPart_CMGW6 := MTP3UserPart_CT.create; + vc_MTP3UserPart_CMGW9 := MTP3UserPart_CT.create; + + map(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A); + map(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B); + map(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C); + map(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3); + map(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6); + map(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9); + + log("tc_3 map is ready"); + vc_MTP3UserPart_BSC1A.start( mtp3userpart_test() ); + vc_MTP3UserPart_BSC1B.start( mtp3userpart_test() ); + vc_MTP3UserPart_BSC1C.start( mtp3userpart_test() ); + vc_MTP3UserPart_CMGW3.start( mtp3userpart_test() ); + vc_MTP3UserPart_CMGW6.start( mtp3userpart_test() ); + vc_MTP3UserPart_CMGW9.start( mtp3userpart_test() ); + + //MTC_delay(6); + all component.done; + unmap(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A); + unmap(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B); + unmap(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C); + unmap(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3); + unmap(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6); + unmap(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9); + log ("tc_3 finished"); +} + +// tc_4 is the same as tc_3 but organized by arrays and cycles +testcase tc_4() runs on MTC_CT system MSC_SCT +{ + f_init(); + f_start(); + f_terminate(); +} + +testcase tc_5() runs on MTC_CT +{ + var ASP_MTP3_TRANSFERreq vl_MTP3_TRANSFERreq := + { sio := + { ni := '00'B, + prio := '00'B, + si := '0000'B + }, + opc := 0, + dpc := 0, + sls := 0, + data:= '010203040506070809000102030405060708090000010203040506070809000000'O + }; + + map(self:MTC_PCO,system:MTC_PCO); + MTC_PCO.send(vl_MTP3_TRANSFERreq); + MTC_PCO.receive; + unmap(self:MTC_PCO,system:MTC_PCO); +} + +control +{ + execute (tc_1()); +} + +}//module diff --git a/MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg b/MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg new file mode 100644 index 00000000..35b3e09a --- /dev/null +++ b/MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg @@ -0,0 +1,75 @@ +[LOGGING] +#FileName := "mtp3test_MTP3_ansi2.cfg" +FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING + +[EXECUTE] +#Loopback +#mtp3test.TC0 +#SEA test cases, LOOP := OFF +#mtp3test.tc_1 +#mtp3test.tc_2 +#mtp3test.tc_3 +mtp3test.tc_4 +[TESTPORT_PARAMETERS] +// ******************************************************* +// * DO NOT FORGET TO SET THE FOLLOWING TWO LINE TO YOUR SEA * +// ******************************************************* +system.*.Hostname := "zaire" //sea server name +system.*.HttpPort := "5000" //sea http port +system.*.Loop:= "ON" +system.*.Filter:= "OFF" +system.*.MTP3ServiceType := "MTP3itu" // ["MTP3itu" (default)|"MTP3ansi" | "M3UA" | "MTP3ttc" | "MTP3mpt" ] + +system.CMGW3.EntityName := "S7ST-0" //device name to connect +system.CMGW3.NI:= "2" +system.CMGW3.SUT_Pc:= "461088" +system.CMGW3.TESTER_Pc:= "461089" +system.CMGW3.M3UA_version:= "1" + +system.CMGW6.EntityName := "S7ST-1" //device name to connect +system.CMGW6.NI:= "2" +system.CMGW6.SUT_Pc:= "461086" // 07-09-30 =0x07091E see command: s7stp:st=s7stg-0&&-32; +system.CMGW6.TESTER_Pc:= "461087" //07-09-31=0x07091F +system.CMGW6.M3UA_version:= "1" + +system.CMGW9.EntityName := "S7ST-2" //device name to connect +system.CMGW9.NI:= "2" +system.CMGW9.SUT_Pc:= "461088" +system.CMGW9.TESTER_Pc:= "461089" +system.CMGW9.M3UA_version:= "1" + +system.BSC1A.EntityName := "S7ST-3" //device name to connect +system.BSC1A.NI:= "2" +system.BSC1A.SUT_Pc:= "461088" +system.BSC1A.TESTER_Pc:= "461089" +system.BSC1A.M3UA_version:= "1" + +system.BSC1B.EntityName := "S7ST-4" //device name to connect +system.BSC1B.NI:= "2" +system.BSC1B.SUT_Pc:= "461088" +system.BSC1B.TESTER_Pc:= "461089" +system.BSC1B.M3UA_version:= "1" + +system.BSC1C.EntityName := "S7ST-5" //device name to connect +system.BSC1C.NI:= "2" +system.BSC1C.SUT_Pc:= "461088" +system.BSC1C.TESTER_Pc:= "461089" +system.BSC1C.M3UA_version:= "1" + +[MODULE_PARAMETERS] + +// MTP3_user_part for test suite 'mtp3userpart_test' in mtp3test.ttcn +MTP3_UserPart_SIO := +{ + ni := '10'B, + prio := '00'B, + si := '1110'B +}; +MTP3_UserPart_OPC := 461087 // =0x07091E +MTP3_UserPart_DPC := 461086 // +MTP3_UserPart_SLS := 0; + +[MAIN_CONTROLLER] +TCPPort := 9999 +NumHCs := 1 diff --git a/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf new file mode 100644 index 00000000..b6cf46f1 Binary files /dev/null and b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf differ diff --git a/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf new file mode 100644 index 00000000..4e8b25c6 Binary files /dev/null and b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf differ diff --git a/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf new file mode 100644 index 00000000..0c6b3d78 Binary files /dev/null and b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf differ diff --git a/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc b/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc new file mode 100644 index 00000000..394d7269 --- /dev/null +++ b/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc @@ -0,0 +1,20 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// 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: MTP3asp_EncDec.cc +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2007-09-17 +// Contact: http://ttcn.ericsson.se +/////////////////////////////////////////////////////////////////////////////// + +// Please note: Because the encoder/decoder functions are generated by the +// TITAN, the MTP3asp_EncDec.cc is kept only for compatibility issue and +// should be removed from the projects. diff --git a/MTP3asp_CNL113337/src/MTP3asp_PT.cc b/MTP3asp_CNL113337/src/MTP3asp_PT.cc new file mode 100644 index 00000000..37bab8f0 --- /dev/null +++ b/MTP3asp_CNL113337/src/MTP3asp_PT.cc @@ -0,0 +1,2952 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2012 // +// // +// 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: MTP3asp_PT.cc +// Description: Implementation of port MTP3asp_PT +// This test port is written to connect TTCN-3 to SEA according +// to specification ITU-T SS7 MTP3, ANSI, TCC, IETF, MPT +// Reference: ITU-T Recommendation Q.704, RFC3332 +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2012-05-24 +// Contact: http://ttcn.ericsson.se + +// IMPORTANT MODIFICATION: +// mtp3_ttc uses ALWAYS 16 bits long SPCs, regardless of mtp3_ni sio + +#include "MTP3asp_PT.hh" + +#include "MTP3asp_Types.hh" +#include "MTP3asp_PortType.hh" + +#include +#include +#include +#include +#include +#include +#include + + +// Constans for M3UA, see rfc 3332 and 2/1056-FCPW 101 86/P-1 +// Constants for decoding M3UA common headers +#define M3UA_VER_OFFS 0 +#define M3UA_CLS_OFFS 2 +#define M3UA_TYP_OFFS 3 +#define M3UA_LGT_OFFS 4 +#define M3UA_MSG_OFFS 8 +#define M3UA_MSG_LENGTH_LENGTH 4 + +// Constants for M3UA protocol +//Msg classes +#define M3UA_MSG_CLS_MGMT 0x00 +#define M3UA_MSG_CLS_TRNSFM 0x01 +#define M3UA_MSG_CLS_SSNM 0x02 +#define M3UA_MSG_CLS_ASPSM 0x03 +#define M3UA_MSG_CLS_ASPTM 0x04 +#define M3UA_MSG_CLS_RKM 0x09 +//Msg types +#define M3UA_MSG_TYP_MGMT_ERR 0x00 +#define M3UA_MSG_TYP_MGMT_NTFY 0x01 + +#define M3UA_MSG_TYP_TRSNFM_DATA 0x01 + +#define M3UA_MSG_TYP_SSNM_DUNA 0x01 +#define M3UA_MSG_TYP_SSNM_DAVA 0x02 +#define M3UA_MSG_TYP_SSNM_DAUD 0x03 +#define M3UA_MSG_TYP_SSNM_SCON 0x04 +#define M3UA_MSG_TYP_SSNM_DUPU 0x05 +#define M3UA_MSG_TYP_SSNM_DRST 0x06 + +#define M3UA_MSG_TYP_ASPSM_ASPUP 0x01 +#define M3UA_MSG_TYP_ASPSM_ASPDN 0x02 +#define M3UA_MSG_TYP_ASPSM_BEAT 0x03 +#define M3UA_MSG_TYP_ASPSM_ASPUPAck 0x04 +#define M3UA_MSG_TYP_ASPSM_ASPDNAck 0x05 +#define M3UA_MSG_TYP_ASPSM_BEATAck 0x06 + +#define M3UA_MSG_TYP_ASPTM_ASPAC 0x01 +#define M3UA_MSG_TYP_ASPTM_ASPIA 0x02 +#define M3UA_MSG_TYP_ASPTM_ASPACAck 0x03 +#define M3UA_MSG_TYP_ASPTM_ASPIAAck 0x04 + +#define M3UA_MSG_TYP_RKM_REGREQ 0x01 +#define M3UA_MSG_TYP_RKM_REGRSP 0x02 +#define M3UA_MSG_TYP_RKM_DEREGREQ 0x03 +#define M3UA_MSG_TYP_RKM_DEREGRESP 0x04 + +//parameters +//common for all adaptation layer +#define PAR_PREFIX_COMMON 0x00 +#define PAR_INFO_STR 0x04 +#define PAR_ROUTING_CTX 0x06 +#define PAR_DIAG_INFO 0x07 +#define PAR_HEART_BEAT 0x09 +#define PAR_TRAFFMODE_T 0x0b +#define PAR_ERROR_CODE 0x0c +#define PAR_STATUS 0x0d +#define PAR_ASP_ID 0x11 +#define PAR_AFFECTED_PC 0x12 +#define PAR_CORREL_ID 0x13 + +//M3UA specific +#define PAR_PREFIX_M3UA 0x02 +#define PAR_NETW_APP 0x00 +#define PAR_USR_O_CAUSE 0x04 +#define PAR_CNGST_IND 0x05 +#define PAR_CNCRD_IND 0x06 +#define PAR_ROUTING_KEY 0x07 +#define PAR_REG_RSLT 0x08 +#define PAR_DEREG_RSLT 0x09 +#define PAR_LOC_RK_ID 0x0a +#define PAR_DPC 0x0b +#define PAR_SI 0x0c +#define PAR_OPC_LIST 0x0e +#define PAR_CIRC_RNG 0x0f +#define PAR_PROT_DATA 0x10 +#define PAR_REG_STAT 0x12 +#define PAR_DEREG_STAT 0x13 + +// error codes: +#define PAR_ERRC_IVER 0x01 +#define PAR_ERRC_UNSMC 0x03 +#define PAR_ERRC_UNSMT 0x04 +#define PAR_ERRC_UNTMT 0x05 +#define PAR_ERRC_UNEM 0x06 +#define PAR_ERRC_PERR 0x07 +#define PAR_ERRC_ISI 0x09 +#define PAR_ERRC_RMB 0x0D +#define PAR_ERRC_ASPIDR 0x0E +#define PAR_ERRC_IASPID 0x0F +#define PAR_ERRC_IPARV 0x11 +#define PAR_ERRC_PARFE 0x12 +#define PAR_ERRC_UPAR 0x13 +#define PAR_ERRC_DSU 0x14 +#define PAR_ERRC_INA 0x15 +#define PAR_ERRC_MP 0x16 +#define PAR_ERRC_IRC 0x19 +#define PAR_ERRC_NCFAS 0x1A + + +// -------------------------- +// Basic Test Port functions +// -------------------------- +using namespace MTP3asp__Types; +namespace MTP3asp__PortType { + +//external functions +//########################################################## + +//f__MTP3__SEA__connect (for MTP3asp_PT) +BOOLEAN f__MTP3__SEA__connect(MTP3asp__PT& portRef, + const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http) +{ + return f__MTP3__SEA__connect__extern(portRef,Hostname,Port,EntityName,Http); +} +//------------ + +//f__MTP3__SEA__disconnect (for MTP3asp_PT) +BOOLEAN f__MTP3__SEA__disconnect(MTP3asp__PT& portRef) +{ + return f__MTP3__SEA__disconnect__extern(portRef); +} +//------------ + +//f__MTP3__SEA__connect__extern +BOOLEAN f__MTP3__SEA__connect__extern(MTP3asp__PT_PROVIDER& portRef, + const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http) +{ +#ifndef TARGET_TEST + if (portRef.dynamicConnection && (!(portRef.connectionUp))) + { + delete [] portRef.hostname; + int len = strlen(Hostname); + portRef.hostname = new char[len + 1]; + memcpy(portRef.hostname, Hostname, len + 1); + + portRef.httpport = Port; + + delete [] portRef.entityname; + len = strlen(EntityName); + portRef.entityname = new char[len + 1]; + memcpy(portRef.entityname, EntityName, len + 1); + + if(Http) + portRef.MTP3_open_channel(TRUE); + else + portRef.MTP3_open_channel(FALSE); + + if(portRef.wait_for_open()) + { + portRef.user_connect(); + portRef.connectionUp = TRUE; + return TRUE; + } + } + else +#endif + portRef.log("Dynamic connection feature is not active or already connected."); + return FALSE; +} +//------------ + +//f__MTP3__SEA__disconnect__extern +BOOLEAN f__MTP3__SEA__disconnect__extern(MTP3asp__PT_PROVIDER& portRef) +{ +#ifndef TARGET_TEST + if (portRef.connectionUp) + { + portRef.MTP3_close_connection(); + portRef.connectionUp = FALSE; + return TRUE; + } +#endif + return FALSE; +} +//------------ + +// Test Port constructor +MTP3asp__PT_PROVIDER::MTP3asp__PT_PROVIDER(const char *par_port_name) + : PORT(par_port_name) +{ + MTP_fd=-1; + httpport=-1; + hostname=NULL; + destinationname = NULL; + dynamicConnection = FALSE; + + const char *str="b303d76a-266c-11d4-b8f5-08002090d3da"; + int len = strlen(str); + iid_string= new char[len + 1]; + memcpy(iid_string, str, len + 1); + + entityname=NULL; + Filter=Loop=-1; + Sut_Pc=Tester_Pc=-1; + Ni_is_set = FALSE; + MTPServiceType = MTP3itu; + M3UA_version = 1; + M3UAState = AssocDown; // unnecessary... + mtp3_ni=0; +#ifndef TARGET_TEST + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; +#endif + forward_pause = FALSE; + forward_resume = FALSE; + forward_status = FALSE; +} +//------------ + +// Test Port destructor +MTP3asp__PT_PROVIDER::~MTP3asp__PT_PROVIDER() +{ + delete [] hostname; + delete [] entityname; + delete [] iid_string; +} +//------------ + +// set_parameter +void MTP3asp__PT_PROVIDER::set_parameter(const char *parameter_name, + const char *parameter_value) +{ + log("set_parameter: %s = %s",parameter_name,parameter_value); + if (!strcmp(parameter_name,"Hostname")) + { + delete [] hostname; + int len = strlen(parameter_value); + hostname = new char[len + 1]; + memcpy(hostname, parameter_value, len + 1); + } + else if (!strcmp(parameter_name, "HttpPort")) + { + httpport = atoi(parameter_value); + } + else if (!strcmp(parameter_name,"EntityName")) + { + delete [] entityname; + int len = strlen(parameter_value); + entityname= new char[len + 1]; + memcpy(entityname, parameter_value, len + 1); + } + else if (!strcmp(parameter_name,"DestinationName")) + { + delete [] destinationname; + int len = strlen(parameter_value); + destinationname= new char[len + 1]; + memcpy(destinationname, parameter_value, len + 1); + } + else if (!strcmp(parameter_name,"Filter")) + { + if (!strcmp(parameter_value,"ON")) Filter = MTP3_ON; + else Filter = MTP3_OFF; + } + else if (!strcmp(parameter_name,"Loop")) + { + if (!strcmp(parameter_value,"ON")) Loop = MTP3_ON; + else Loop = MTP3_OFF; + } + else if (!strcmp(parameter_name,"NI")) + { + Ni_is_set = TRUE; + mtp3_ni = atoi(parameter_value); + debuglog("Network indicator is set to %i",mtp3_ni); + } + else if (!strcmp(parameter_name,"SUT_Pc")) + { + Sut_Pc = atoi(parameter_value); + } + else if (!strcmp(parameter_name,"TESTER_Pc")) + { + Tester_Pc = atoi(parameter_value); + } + else if (!strcmp(parameter_name,"M3UA_version")) + { + M3UA_version = atoi(parameter_value); + debuglog("%d",M3UA_version); + } +#ifndef TARGET_TEST + else if (!strcmp(parameter_name,"DynamicConnection")) + { + if (!strcasecmp(parameter_value,"ON")) + { + dynamicConnection = TRUE; + } + } +#endif + else if (!strcmp(parameter_name,"MTP3ServiceType")) + { + if (!strcmp(parameter_value,"TargetM3UA")) + { +#ifndef TARGET_TEST + error("TargetM3UA not supported, since TARGET_TEST not in Makefile"); +#else + log("MTP3ServiceType is set to TargetM3UA"); + user_map_p = &MTP3asp__PT_PROVIDER::Target_user_map; + user_unmap_p = &MTP3asp__PT_PROVIDER::Target_user_unmap; + MTPServiceType = TargetM3UA; +#endif + } + else if (!strcmp(parameter_value,"TargetSTC")) + { +#ifndef TARGET_TEST + error("TargetSTC not supported, since TARGET_TEST not in Makefile"); +#else + log("MTP3ServiceType is set to TargetSTC"); + user_map_p = &MTP3asp__PT_PROVIDER::TargetSTC_user_map; + user_unmap_p = &MTP3asp__PT_PROVIDER::Target_user_unmap; //Same as by Target M3UA + MTPServiceType = TargetSTC; +#endif + } +#ifndef TARGET_TEST + else if (!strcmp(parameter_value,"M3UA")) + { //M3UA + log("MTP3ServiceType is set to M3UA"); + interpreter = &MTP3asp__PT_PROVIDER::M3UA_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::M3UA_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::M3UA_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::M3UA_user_unmap; + MTPServiceType = M3UA; + } + else if (!strcmp(parameter_value,"MTP3itu")) + { + log("MTP3ServiceType is set to MTP3itu"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3itu; + } + else if ( !strcmp(parameter_value,"MTP3ansi")) + { + log("MTP3ServiceType is set to MTP3ansi"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3ansi; + } + else if ( !strcmp(parameter_value,"MTP3ttc")) + { + log("MTP3ServiceType is set to MTP3ttc"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3ttc; + } + else if ( !strcmp(parameter_value,"MTP3mpt")) + { + log("MTP3ServiceType is set to MTP3mpt"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3mpt; + } + else if ( !strcmp(parameter_value,"MTP3bttc")) + { + log("MTP3ServiceType is set to MTP3bttc"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3bttc; + } + else if ( !strcmp(parameter_value,"MTP3iup")) + { + log("MTP3ServiceType is set to MTP3iup"); + interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::MTP3_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap; + MTPServiceType = MTP3iup; + } + else if ( !strcmp(parameter_value,"STC")) + { + log("MTP3ServiceType is set to STC"); + interpreter = &MTP3asp__PT_PROVIDER::STC_interpreter; + user_map_p = &MTP3asp__PT_PROVIDER::STC_user_map; + user_connect_p = &MTP3asp__PT_PROVIDER::STC_user_connect; + user_unmap_p = &MTP3asp__PT_PROVIDER::STC_user_unmap; + MTPServiceType = STC; + } +#endif + else + { + log("Unsupported MTP3ServiceType: %s, falling back to MTP3itu", + parameter_value); + } + } + else if(strcasecmp(parameter_name, "forward_pause") == 0) + { + if (strcasecmp(parameter_value,"forward") == 0) + forward_pause = TRUE; + else if(strcasecmp(parameter_value,"ignore") == 0) + forward_pause = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" , + parameter_value, parameter_name); + } + else if(strcasecmp(parameter_name, "forward_resume") == 0) + { + if (strcasecmp(parameter_value,"forward") == 0) + forward_resume = TRUE; + else if(strcasecmp(parameter_value,"ignore") == 0) + forward_resume = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" , + parameter_value, parameter_name); + } + else if(strcasecmp(parameter_name, "forward_status") == 0) + { + if (strcasecmp(parameter_value,"forward") == 0) + forward_status = TRUE; + else if(strcasecmp(parameter_value,"ignore") == 0) + forward_status = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" , + parameter_value, parameter_name); + } + else +#ifdef TARGET_TEST + if(!parameter_set(parameter_name ,parameter_value)) //TCP parameters +#endif + log("Unsupported parameter: %s", parameter_name); +} +//------------ + +// User map +void MTP3asp__PT_PROVIDER::user_map(const char *system_port) +{ + if (user_map_p == NULL) + error("Parameter MTP3ServiceType should be set to TargetM3UA in TARGET_TEST mode!"); + + (this->*user_map_p)(system_port); +} +//------------ + +// User unmap +void MTP3asp__PT_PROVIDER::user_unmap(const char *system_port) +{ + (this->*user_unmap_p)(system_port); +} +//------------ + +#ifndef TARGET_TEST +// User connect +void MTP3asp__PT_PROVIDER::user_connect() +{ + (this->*user_connect_p)(); +} +//------------ +#endif + +//User start +void MTP3asp__PT_PROVIDER::user_start() +{ debuglog("user start ordered"); +} +//------------ + +//User stop +void MTP3asp__PT_PROVIDER::user_stop() +{ debuglog("User stop ordered"); +} +//------------ + +//Event Handler +void MTP3asp__PT_PROVIDER::Handle_Fd_Event(int fd, + boolean is_readable, boolean is_writable, boolean is_error) +{ + if (MTPServiceType == TargetM3UA ) + { +#ifdef TARGET_TEST + //In case of target Abstract Socket handles the received message + Handle_Socket_Event(fd, is_readable, is_writable, is_error); +#endif + } +#ifndef TARGET_TEST + else + { + int result; + + result = MPH_ProcessConnection(myConnection); + + if (result <= 0) + { + MPH_CloseConnection(myConnection); + if (result == 0) log("Connection closed by peer."); + else log("Error in incoming message."); + } + } +#endif +} + +void MTP3asp__PT_PROVIDER::Handle_Timeout(double time_since_last_call) +{ +#ifdef TARGET_TEST + Handle_Timeout_Event(time_since_last_call); +#endif +} +//------------ + +//Outgoing send +void MTP3asp__PT_PROVIDER::outgoing_send(const ASP__MTP3__TRANSFERreq& send_par) +{ + MTP3__Field__sio sio_field = send_par.sio(); +#ifndef TARGET_TEST + int si=bit2int(sio_field.si()); +#endif + + OCTETSTRING sio_oct = bit2oct(sio_field.ni()+sio_field.prio()+sio_field.si()); + OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc + + //Message sending by testing on Target + if (MTPServiceType == TargetM3UA) + { +#ifdef TARGET_TEST + OCTETSTRING tcpData = int2oct(1,1); //Message type + tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length + tcpData = tcpData + sio_oct; + tcpData = tcpData + int2oct(send_par.opc(),4); + tcpData = tcpData + int2oct(send_par.dpc(),4); + tcpData = tcpData + int2oct(send_par.sls(),1); + tcpData = tcpData + send_par.data(); + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Transfer Req message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); +#endif + return; + } + //Message sending by testing on Target + if (MTPServiceType == TargetSTC) + { +#ifdef TARGET_TEST + OCTETSTRING tcpData = int2oct(1,1); //Message type + tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + send_par.data(); + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Transfer Req (STC) message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); +#endif + return; + } +#ifndef TARGET_TEST + if (dynamicConnection &&(!connectionUp)) + { + warn("Connection was not activated via function f_M3UA_SEA_connect."); + return; + } + + unsigned int offset; + int MSU_length = send_par.data().lengthof(); + int M3UA_par_length; + int length; + int labellen; // sio+routinglabel length + + switch ( MTPServiceType) + { + case STC: + length = MSU_length; + memcpy(buffer, send_par.data(), send_par.data().lengthof()); + break; + case MTP3iup: + if(si==4) + { + offset = 0; + labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte) + length = MSU_length+labellen; + buffer[0] = *((const unsigned char*)sio_oct); + SetPointCodesIUP(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + } + else + { + offset = 0; + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + } + break; + case MTP3itu: + offset = 0; + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3ansi: + offset = 0; + labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4 + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3ttc: + offset = 0; + //if (mtp3_ni==0){ labellen=5;} + //else { + labellen=6; + //} //TTC: sio(1byte) +routing label(6byte) see ... + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3bttc: + offset = 0; + buffer[offset] = *((const unsigned char*)bttc_oct); + offset += 1; + labellen=7; //routing label(7byte) + length = 1 + MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof()); + break; + case MTP3mpt: + offset = 0; + if (mtp3_ni==2) + { labellen=8;} //MPT national: sio(1byte) +routing label(7byte) + else + { labellen=5;} //MPT international: sio(1byte) +routing label(4byte) + length = MSU_length + labellen; //SIF+SIO ; + //append MTP3 MSU + buffer[offset] = *((const unsigned char*)sio_oct); + SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(), + buffer + offset + 1); + memcpy(buffer + offset + labellen, + send_par.data(), send_par.data().lengthof()); + break; + case M3UA : + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 test port debug: Message to be encoded is: {"); + send_par.data().log(); + TTCN_Logger::log_event(" "); + if( M3UAState != AssocActive ) + { + TTCN_Logger::log_event(" M3UAState is not ready to send data. Its state code: %d",AssocActive); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + return; + } + //calculating lengths + M3UA_par_length = MSU_length + 16; // ProtocolData parameter + // header length=16 <== see f + TTCN_Logger::log_event(", Adjusted M3UA_par_length to %d to support 16 octets M3UA param header",M3UA_par_length); + length = 8 + M3UA_par_length; //msg length = header+par + TTCN_Logger::log_event(", M3UA MSU_length is %d ==> there should be %d padding octets", MSU_length, 4-(MSU_length%4)); + if (MSU_length%4) { //should be padded to be multiple of 4 octets + length += 4 - (MSU_length%4); //padding shall be counted in msg + //length, but not in par_length + } + TTCN_Logger::log_event(", Set msg length (which includes 8 octets M3UA hdr) to %d ",length); + + //filling the first part of the buffer + //common msg hdr ====================================== + buffer[0] = M3UA_version; + buffer[1] = 0x00; //spare + buffer[2] = M3UA_MSG_CLS_TRNSFM; // msg class + buffer[3] = M3UA_MSG_TYP_TRSNFM_DATA; // msg type + encode_32b_int(buffer+4, length); //msg length, 4 bytes + //ProtocolData parameter header========================= + //tag + buffer[M3UA_MSG_OFFS] = PAR_PREFIX_M3UA; //par. tag 1st octet + buffer[M3UA_MSG_OFFS+1] = PAR_PROT_DATA; // par tag 2nd octet + //length, NOTE: should not contain the padding bytes! + encode_16b_int(buffer+M3UA_MSG_OFFS+2,M3UA_par_length); + //OPC,DPC + encode_32b_int(buffer+M3UA_MSG_OFFS+4,send_par.opc()); + encode_32b_int(buffer+M3UA_MSG_OFFS+8,send_par.dpc()); + //SI, NI, MP, SLS + buffer[M3UA_MSG_OFFS+12] = bit2int(sio_field.si()); // SI LSb aligned + buffer[M3UA_MSG_OFFS+13] = bit2int(sio_field.ni()); // NI LSb aligned + buffer[M3UA_MSG_OFFS+14] = bit2int(sio_field.prio()); //MP LSb + //aligned + buffer[M3UA_MSG_OFFS+15] = 0xFF & send_par.sls(); //SLS + // finally the MTP3 MSU itself.... + offset = M3UA_MSG_OFFS + 16; + TTCN_Logger::log_event(", buffer offset is now set to %d", offset); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + //append MTP3 MSU + memcpy(buffer + offset, send_par.data(), send_par.data().lengthof()); + + //padding + for (int ii = 0; ii< (MSU_length%4); ++ii) buffer[offset+MSU_length+ii]= 0x00; + break; + default: + error("Invalid MTP3ServiceType setting!"); + } + if (TTCN_Logger::log_this_event(TTCN_DEBUG)) + { + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("The encoded buffer is: {"); + OCTETSTRING(length, buffer).log(); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + } + send_msg(buffer, length); +#endif +} +//------------ + +void MTP3asp__PT_PROVIDER::log(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); +} +//------------ + +void MTP3asp__PT_PROVIDER::warn(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_WARNING); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); +} +//------------ + +void MTP3asp__PT_PROVIDER::debuglog(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); +} +//------------ + +void MTP3asp__PT_PROVIDER::error(const char *msg, ...) +{ + TTCN_Logger::begin_event(TTCN_ERROR); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + va_list ap; + va_start(ap, msg); + TTCN_Logger::log_event_va_list(msg, ap); + va_end(ap); + TTCN_Logger::end_event(); + TTCN_error("Fatal error in MTP3 Test Port %s.", get_name()); +} +//------------ + +void MTP3asp__PT_PROVIDER::close_log_event() +{ + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); +} +//------------ + + +#ifndef TARGET_TEST +// -------------------------------------------- +// Functions and definitions for test with SEA +// -------------------------------------------- + +// Functions of MPH toolkit +// --------------------------- +void connectCallback(CONNECTION* con, int channel, void *clientData) +{ + ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel succeeded " + "(channel number is %u)", channel); + ((MTP3asp__PT_PROVIDER *)clientData)->set_channel(channel); + if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection) + ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 1; +} + +void messageCallback(CONNECTION* con, int channel, int length, + unsigned char *msg, void *clientData) +{ + ((MTP3asp__PT_PROVIDER *)clientData)->log("Incoming message from channel: %d",channel); + ((MTP3asp__PT_PROVIDER *)clientData)->doInterpret(msg,length,channel,con); +} + +void closeCallback(CONNECTION* con, int channel, void *clientData) +{ + ((MTP3asp__PT_PROVIDER *)clientData)->log("Closed channel: %d", channel); +} + +void errorCallback(CONNECTION* con, char *name, char *errorMessage, + void *clientData) +{ + if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection) + { + ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel %s failed: %s", name, errorMessage); + ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 2; + } + else + ((MTP3asp__PT_PROVIDER *)clientData)->error("Opening channel %s failed: %s", + name, errorMessage); +} +//------------ + +//MTP3_open_channel +void MTP3asp__PT_PROVIDER::MTP3_open_channel(boolean http) +{ + int result; + int Mphport; + char *perrorString; + if( Loop == MTP3_ON ) + { + MTP_fd=-1; + myConnection = NULL; + log("MTP3_open_channel finished for LOOP"); + return; + } + + if(http) + { + Mphport = MPH_GetMphPort(hostname,httpport,&perrorString); + } + else + { + Mphport = httpport; + } + + if (Mphport == -1) + error("GetMphPort failed: %s", *perrorString); + + result = MPH_StringToIid(iid_string, &iid); + if (result == -1) + error("Converting %s to MPH_IID failed.", iid_string); + + myConnection = MPH_OpenConnection(hostname, Mphport); + if (myConnection == NULL) + error("Opening connection to %s:%d failed.", hostname, Mphport); + + MPH_OpenChannel(myConnection, + entityname, + &iid, + connectCallback, + messageCallback, + closeCallback, + errorCallback, + this); + + MTP_fd = MPH_GetConnectionFd(myConnection); + if (MTP_fd != -1) + Handler_Add_Fd_Read(MTP_fd); + else + error("Incorrect file descriptor: %d.", MTP_fd); +} +//------------ + +// MTP3_close_connection +void MTP3asp__PT_PROVIDER::MTP3_close_connection() +{ + MPH_CloseConnection(myConnection); + Handler_Remove_Fd_Read(MTP_fd); + close( MTP_fd ); + //Uninstall_Handler(); // Unnecessary if only socket MTP_fd is in use +} +//------------ + +// wait_for_open +boolean MTP3asp__PT_PROVIDER::wait_for_open() +{ + conn_state = 0; + while(conn_state==0) + { + pollfd pollFd = { MTP_fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) { + log("MPH channel opening time out"); + return FALSE; + } + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) { + log("MPH channel opening error (%d)", (nEvents < 0) ? errno : 0); + return FALSE; + } + Handle_Fd_Event(MTP_fd, TRUE, FALSE, FALSE); + } + if(conn_state == 1) //connectCallback received + { + conn_state = 0; + return TRUE; + } + else //errorCallback received + { + conn_state = 0; + return FALSE; + } +} +//------------ + +//send msg +void MTP3asp__PT_PROVIDER::send_msg(unsigned char *outbuff, int length) +{ + OCTETSTRING buff(length,outbuff); + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3/M3UA Test Port (%s): {", get_name()); + TTCN_Logger::log_event("outgoing buffer= "); + buff.log(); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + if (Loop == MTP3_ON) + { + log("Message looped back"); + doInterpret(outbuff, length, channel, myConnection); + } else + { + MPH_SendMessage(myConnection,channel,length,outbuff); + log("Message sent on channel %d", channel); + } +} +//------------ + +//Check TestPortVariables +void MTP3asp__PT_PROVIDER::Check_TestPort_Variables() +{ + if(!dynamicConnection) + { + if (httpport==-1) error("Parameter HttpPort is not set."); + if (hostname==NULL) error("Parameter Hostname is not set."); + if (entityname==NULL) error("Parameter EntityName is not set."); + } + if (Filter==-1) error("Parameter Filter is not set."); + if (Loop==-1) error("Parameter Loop is not set."); + if (Sut_Pc==-1) error("Parameter SUT_Pc is not set."); + if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set."); + if (!Ni_is_set) error("Parameter NI is not set."); +} +//------------ + +// ------------------------------------------------- +// STC Functions and definitions for test with SEA +// ------------------------------------------------- +void MTP3asp__PT_PROVIDER::Check_TestPort_Variables_STC() +{ + if(!dynamicConnection) + { + if (httpport==-1) error("Parameter HttpPort is not set."); + if (hostname==NULL) error("Parameter Hostname is not set."); + if (entityname==NULL) error("Parameter EntityName is not set."); + } +} +//------------ + +//STC user map +void MTP3asp__PT_PROVIDER::STC_user_map(const char *system_port) +{ + debuglog("Function STC_user_map started"); + Check_TestPort_Variables_STC(); + if(dynamicConnection) + { + connectionUp = FALSE; + } + else + { + MTP3_open_channel(TRUE); + STC_user_connect(); + } +} +//------------ + +//STC user connect +void MTP3asp__PT_PROVIDER::STC_user_connect() +{ +} + +//STC user unmap +void MTP3asp__PT_PROVIDER::STC_user_unmap(const char *system_port) +{ + MTP3_close_connection(); + dynamicConnection = FALSE; +} +//------------ + +//STC interpreter +void MTP3asp__PT_PROVIDER::STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) +{ + if ((length==0) || (inbuffer==NULL)) + { + log("0 byte long message received -> packet dropped."); + return; + } + + if (length==1) + { + log("1 byte long internal SEA message received -> packet dropped."); + return; + } + + if ( !strcmp((const char*)inbuffer,"start") ) + { + log("start message received from SEA"); + return; + } + else if (!strcmp((const char*)inbuffer,"stop")) + { + log("stop message received from SEA"); + return; + } + + // writing out the contents of the buffer + OCTETSTRING buff(length,inbuffer); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("incoming buffer: "); + buff.log(); + TTCN_Logger::end_event(); + + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + recv_sio.ni()= int2bit(0,2); + recv_sio.prio()= int2bit(0,2); + recv_sio.si()= int2bit(0,4); + recv_msg.sio() = recv_sio; + recv_msg.sls() = 0; + recv_msg.opc() = 0; + recv_msg.dpc() = 0; + recv_msg.data() = OCTETSTRING(length, &inbuffer[0]); + incoming_message( recv_msg ); +} + +// ------------------------------------------------- +// MTP3 Functions and definitions for test with SEA +// ------------------------------------------------- + +// SLTM messages for MTP3 +// ----------------------- +unsigned char ttcn_in_sltm[] = { + 'T','T','C','N','-','3',' ','E','x','e','c','u','t','o','r'}; + +const int sizeof_ttcn_in_sltm=15; + +// ITU: +unsigned char sltm_msg_itu[] = +{ + 0x1, //SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!! + 0x0, 0x0, 0x0, 0x0, //4 bytes for label (dpc, opc,sls) + 0x11, //Heading code ITU, see Q.707/5.4 + 0xF0, //spare+Length of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_msg_itu=7+15; + +// ANSI: +unsigned char sltm_msg_ansi[]= +{ + 0xB1, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label + 0x11, // Heading Code ANSI T1.111.7-2001 + 0xF0, // SLC(is 0 OK???)+Length in bytes of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_ansi=10+15; + +// TTC: +unsigned char sltm_msg_ttc_national[]= +{ + 0x81, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!! + 0x11, // Heading Code + 0xF0, // SLC(is 0 OK???)+Length in bytes of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_msg_ttc_national=9+15; + +// BTTC: +unsigned char sltm_msg_bttc_national[]= +{ + 0x0, // extra octet, ignored + 0x81, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!! + 0x23, // Heading Code + 'T', 'T' +}; +const int sizeof_sltm_msg_bttc_national=1+8+2; + +// MPT: +unsigned char sltm_msg_mpt_national[]= +{ + 0x81, //SIO + 0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label + 0x11, // Heading Code + 0xF0, // SLC(is 0 OK???)+Length in bytes of the following string: + 'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r' +}; +const int sizeof_sltm_msg_mpt_national=10+15; +//------------ + + +// coder functions for MTP3 +// ------------------------- +// unsigned int<-> unsigned char array +// Integer encode/decode functions that will encode/decode from/to +// Result: Least Significant Byte first (in lowest address) = LSB = Little Endian +void MTP3asp__PT_PROVIDER::encode_56bLSB_int(unsigned char *to, unsigned long long int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; + from >>= 8; + to[4] = from & 0xFF; + from >>= 8; + to[5] = from & 0xFF; + from >>= 8; + to[6] = from & 0xFF; +} +//------------ + +unsigned long long int MTP3asp__PT_PROVIDER::decode_56bLSB_int(const unsigned char *from) +{ + typedef unsigned long long int ull; + return ((ull) from[0]) | + ((ull) from[1] <<8)| + ((ull) from[2] << 16)| + ((ull) from[3] << 24)| + ((ull) from[4] << 32)| + ((ull) from[5] << 40)| + ((ull) from[6] << 48); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_48bLSB_int(unsigned char *to, unsigned long long int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; + from >>= 8; + to[4] = from & 0xFF; + from >>= 8; + to[5] = from & 0xFF; +} +//------------ + +unsigned long long int MTP3asp__PT_PROVIDER::decode_48bLSB_int(const unsigned char *from) +{ + typedef unsigned long long int ull; + return ((ull) from[0]) | + ((ull) from[1] <<8)| + ((ull) from[2] << 16)| + ((ull) from[3] << 24)| + ((ull) from[4] << 32)| + ((ull) from[5] << 40); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_40bLSB_int(unsigned char *to, unsigned long long int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; + from >>= 8; + to[4] = from & 0xFF; +} +//------------ + +unsigned long long int MTP3asp__PT_PROVIDER::decode_40bLSB_int(const unsigned char *from) +{ + typedef unsigned long long int ull; + return ((ull) from[0]) | + ((ull) from[1] <<8)| + ((ull) from[2] << 16)| + ((ull) from[3] << 24)| + ((ull) from[4] << 32); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_32bLSB_int(unsigned char *to, unsigned int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[3] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_32bLSB_int(const unsigned char *from) +{ + return from[0] | (from[1] << 8) | (from[2] << 16) | (from[3] << 24); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_24bLSB_int(unsigned char *to, int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_24bLSB_int(const unsigned char *from) +{ + return from[0] | (from[1] << 8) | (from[2] << 16); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_16bLSB_int(unsigned char *to, int from) +{ + to[0] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_16bLSB_int(const unsigned char *from) +{ + return from[0] | (from[1] << 8); +} +//------------ + +//MTP3 user map +void MTP3asp__PT_PROVIDER::MTP3_user_map(const char *system_port) +{ + debuglog("Function MTP3_user_map started"); + Check_TestPort_Variables(); + if(dynamicConnection) + { + connectionUp = FALSE; + } + else + { + MTP3_open_channel(TRUE); + MTP3_user_connect(); + } + debuglog("Function MTP3_user_map finished"); +} +//------------ + +//MTP3 user connect +void MTP3asp__PT_PROVIDER::MTP3_user_connect() +{ + // Sending out an SLTM message: + unsigned char * sltm_msg; + unsigned int offset = 0; + int sizeof_msg; + switch( MTPServiceType) + { + case MTP3itu: + case MTP3iup: + sltm_msg=sltm_msg_itu; + sizeof_msg=sizeof_sltm_msg_itu; + break; + case MTP3ansi: + sltm_msg=sltm_msg_ansi; + sizeof_msg=sizeof_sltm_ansi; + break; + case MTP3ttc: + /* if (mtp3_ni == 0){ + sltm_msg=sltm_msg_itu; + sizeof_msg=sizeof_sltm_msg_itu; + } + else { + */ + sltm_msg=sltm_msg_ttc_national; + sizeof_msg=sizeof_sltm_msg_ttc_national; + // } + break; + case MTP3bttc: + sltm_msg=sltm_msg_bttc_national; + sizeof_msg=sizeof_sltm_msg_bttc_national; + offset = 1; + break; + case MTP3mpt: + if (mtp3_ni == 2) + { + sltm_msg = sltm_msg_mpt_national; + sizeof_msg = sizeof_sltm_msg_mpt_national; + } else + { + sltm_msg = sltm_msg_itu; + sizeof_msg = sizeof_sltm_msg_itu; + } + break; + default: + sltm_msg=sltm_msg_itu; + sizeof_msg=sizeof_sltm_msg_itu; + break; + } + stored_bttc_octet = 0; + unsigned char sio = ((unsigned char) mtp3_ni) << 6; + + if (Ni_is_set) + { sltm_msg[0+offset] = sio | 0x1; } + else + { sltm_msg[0+offset] = 0x1; };//SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!! + + SetPointCodes(0, Tester_Pc, Sut_Pc, sltm_msg + 1 +offset); // common for ITU, ANSI and TTC + log("MTP3/SLTM message sending..."); + send_msg(sltm_msg, sizeof_msg); +} +//MTP3 user unmap +void MTP3asp__PT_PROVIDER::MTP3_user_unmap(const char *system_port) +{ + MTP3_close_connection(); + dynamicConnection = FALSE; +} + +//MTP3 interpreter +void MTP3asp__PT_PROVIDER::MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) +{ + if ((length==0) || (inbuffer==NULL)) + { + log("0 byte long message received -> packet dropped."); + return; + } + + if (length==1) + { + log("1 byte long internal SEA message received -> packet dropped."); + return; + } + + if ( !strcmp((const char*)inbuffer,"start") ) + { + log("start message received from SEA"); + return; + } + else if (!strcmp((const char*)inbuffer,"stop")) + { + log("stop message received from SEA"); + return; + } + + // writing out the contents of the buffer + OCTETSTRING buff(length,inbuffer); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("incoming buffer: "); + buff.log(); + TTCN_Logger::end_event(); + + unsigned int offset = 0; + if ( MTPServiceType==MTP3bttc ) + { + stored_bttc_octet = inbuffer[0]; + offset = 1; + } + int labellen; // sio+routinglabel length + int rec_ni = (inbuffer[offset]) >> 6; //network indicator + if (rec_ni != mtp3_ni) + error("Received NI is different from sent NI."); + + unsigned char sio = inbuffer[offset]; + unsigned int si = sio&0x0F; + + if ( MTPServiceType==MTP3itu ) + { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + } + else if ( MTPServiceType==MTP3iup ) + { + if(si==4) + labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte) + else + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + } + else if ( MTPServiceType==MTP3ansi ) + { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4 + } + else if (MTPServiceType==MTP3ttc) + { labellen=6; //new (2004-03-02): 6= sio(1byte)+ routing label(5bytes) + } + else if (MTPServiceType==MTP3mpt) + { + if ( mtp3_ni == 2) + {labellen=8;} //MPT national: sio(1byte) +routing label(7byte) + else + {labellen=5;} //MPT international: sio(1byte) +routing label(4byte) + } + else if (MTPServiceType==MTP3bttc) + { labellen=7; //7= sio(1byte)+ routing label(6bytes) + } + else + { log("incorrect MTPServiceType - programming error-> packet dropped"); + return; + } + + // checking SIO field (first incoming byte) - management or test message + switch (si) + { + case 0: processing_MTP3_management_msg(inbuffer+offset,length-offset); + return; + case 1: //MTP3itu + case 2: processing_MTP3_test_msg(inbuffer+offset,length-offset); //MTP3ansi + return; + default: + break; + } + + // filling up TTCN structure + if ((Loop==MTP3_ON) || (!Filter) || (Filter&&Check_PcMatch(Sut_Pc,Tester_Pc,&inbuffer[offset+1]))) + { + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + BITSTRING sio_bit = oct2bit(OCTETSTRING(1,inbuffer+offset)); + recv_sio.ni()= substr(sio_bit,0,2); + recv_sio.prio()= substr(sio_bit,2,2); + recv_sio.si()= substr(sio_bit,4,4); + recv_msg.sio() = recv_sio; + unsigned int sls,opc,dpc; + if ( (MTPServiceType==MTP3iup) && (si==4) ) + GetPointCodesIUP(sls,opc,dpc,&inbuffer[1]); + else + GetPointCodes(sls,opc,dpc,&inbuffer[offset+1]); + recv_msg.sls() = sls; + recv_msg.opc() = opc; + recv_msg.dpc() = dpc; + int len; + len= length-labellen-offset; //len= length-labellen; + recv_msg.data() = OCTETSTRING(len, &inbuffer[offset+labellen]); + incoming_message( recv_msg ); + } + else + { log("The rooting label (OPC, DPC) not matched with the filter setting -> packet dropped."); + return; + } +} + +void MTP3asp__PT_PROVIDER::processing_MTP3_management_msg(unsigned char* inbuff,int len) +{ + int outlen=0; + int labellen; // sio+routinglabel length + int chm_addlen; // (Changeback) additional length = Heading Code + SLC+ (changeback codes) + int mim_addlen; // (MIM) -"- + unsigned int offset = 0; + OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc + + if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup) + { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + chm_addlen = 2; + mim_addlen = 1; + } + else if ( MTPServiceType==MTP3ansi ) + { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T.1.111.4 + chm_addlen = 3; + mim_addlen = 2; + } + else if (MTPServiceType==MTP3ttc) + { //if ( mtp3_ni == 0 ) { labellen=5;} //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + //else { + labellen=6; + //} //sio(1byte)+ routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704. + } + else if (MTPServiceType==MTP3mpt) + { if ( mtp3_ni == 2 ) { labellen=8; } + else { labellen=5; } + chm_addlen = 2; + mim_addlen = 1; + } + else if (MTPServiceType==MTP3bttc) + { labellen=7;//sio(1byte)+routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704 + offset = 1; + } + else + { log("incorrect MTPServiceType- programming error-> packet dropped"); + return; + } + + if (MTPServiceType==MTP3bttc) + { + buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front + buffer[1]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[2],&inbuff[1],len)) + { log("incorrect incoming management message -> packet dropped."); + return; + } + } + else + { + buffer[0]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[1],&inbuff[1],len)) + { log("incorrect incoming management message -> packet dropped."); + return; + } + } + + // Changeover & changeback(CHM) see ITU: Q.704/15.4.1 ANSI: T.1.111.4/15.2-4 + if (inbuff[labellen]==0x51) //CBD + { + outlen=labellen+chm_addlen; + if (len packet dropped."); + return; + } + else + { buffer[offset + labellen]= 0x61; // Heading Code <- CBA + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],len-labellen-1); + outlen = len; + } + } + else if (inbuff[labellen]==0x16) //MIM H0=6=Mgmt inhibit msg, H1=1=LIN + { + outlen=labellen+mim_addlen; + if (len packet dropped."); + return; + } + else + { + buffer[offset + labellen]= 0x56; // LIN -> LID ; LID = link inhibit denied + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); //SLC+spare+... + outlen = len; + } + } + else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup)) + { + if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE)); + return; + } + +/* else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup)) //TRM H0=7, H1=1 : TRA + { + outlen=labellen+1; + if (len packet dropped."); + return; + } + else + { + outlen = len; + } + }*/ + else + { log("This management message type is not supported -> packet dropped."); + return; + } + + // send message + log("function processing_MTP3_management_msg sends a msg"); + send_msg(buffer, outlen+offset); +} + +// processing MTP3 test msg +// Signalling link test message handling according to Q.707 (ITU) and T1.111.7-2001 (ANSI) +void MTP3asp__PT_PROVIDER::processing_MTP3_test_msg(unsigned char* inbuff,int len) +{ + int outlen=0; + int labellen; // sio+routinglabel length + int addlen; //Heading Code+length indicator + //unsigned int ni; //network indicator + OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc + unsigned int offset = 0; + if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup) + { + labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1 + addlen = 2; //HC(1 byte)+length ind(1 byte) see Q.707/5.8 + } + else if ( MTPServiceType==MTP3ansi ) + { + labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4 + addlen = 2; //HC(1byte) +(length ind+SLC(1byte)) see T1.111.7-2001/5 + } + else if (MTPServiceType==MTP3ttc) + { + /* if (mtp3_ni == 0) { + debuglog("processing_MTP3_test_msg/TTC (Japanese) international"); + labellen=5; //TTC (Japanese) international + addlen=2; + } else { + */ + labellen=6; // previously 7 + // TTC national [ 56bits=sio(1byte)+routing label ] + // r.label= dpc(2bytes)+opc(2bytes)+sls(4bit)+12bits (?) + addlen=2; + //} + } + else if (MTPServiceType==MTP3mpt) + { + if (mtp3_ni == 2) + { labellen=8; //MPT national + addlen=2; + } + else + { labellen=5; // MPT international + addlen=2; + } + } + else if (MTPServiceType==MTP3bttc) + { + labellen=7; + addlen=2; + offset = 1; + } + else + { log("incorrect MTPServiceType - programming error-> packet dropped"); + return; + } + + if (MTPServiceType==MTP3bttc) + { + buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front + buffer[1]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[2],&inbuff[1],len)) + { + log("incorrect incoming test message -> packet dropped."); + return; + } + } + else + { + buffer[0]=inbuff[0]; //SIO + if (!ChangePointCodes(&buffer[1],&inbuff[1],len)) + { + log("incorrect incoming test message -> packet dropped."); + return; + } + } + + // Test message handling: SLTM->SLTA, SRT->SRA, SLTA->TRA, others only logged + debuglog("\n==>Test message handling: msg type:%x\n", inbuff[labellen] ); // temporary + switch( inbuff[labellen] ) + { + case 0x11: //SLTM + log("MTP3/SLTM message received"); + outlen=labellen+addlen; + if (len packet dropped."); + return; + } + else + { buffer[offset + labellen]= 0x21; // SLTA + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); + outlen = len; + } + break; + case 0x21: //SLTA + if(!strncmp((const char *)(inbuff+labellen+addlen),(const char *)ttcn_in_sltm,sizeof_ttcn_in_sltm)) + { + log("MTP3/SLTA message received for SLTM sent by Test Port-> TRA message sent"); + buffer[offset]--; + buffer[offset + labellen]= 0x17; // TRA + outlen = labellen+1; + return; +// if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE)); + } + else + { + log("MTP3/SLTA message received -> packet dropped"); + return; + } + break; + case 0x23: // TTC (Japanese) SRT (Signalling Routing Test signal) + log("MTP3ttc/SRT message received"); + outlen=labellen+addlen; + if (len packet dropped."); + return; + } + else + { buffer[offset + labellen]= 0x84; // TTC (Japanese) SRA + memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); + outlen = len; + } + break; + case 0x84: // TTC (Japanese) SRA (Signalling Routing test Ack signal) + log("MTP3ttc/SRA message received -> packet dropped"); + return; + default: + log("This management message type is not supported -> packet dropped "); + return; + } + + // send message + log("function processing_MTP3_test_msg sends a message"); + send_msg( buffer,outlen+offset); +} + +// Point Code Manipulation (Get/Set/Change) +// ------------------------------------------------- +void MTP3asp__PT_PROVIDER::GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg) +{ + unsigned int label; + sls=0; opc=0; dpc=0; + unsigned long long int Label; + + switch( MTPServiceType) + { + case MTP3itu: + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; //dpc = (label&0x00003FFF); + debuglog("Function GetPointCodes called for service type MTP3itu"); + break; + case MTP3iup: + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; //dpc = (label&0x00003FFF); + debuglog("Function GetPointCodes called for service type MTP3iup"); + break; + case MTP3ansi: + Label=decode_56bLSB_int(msg); + sls = (Label >> 48) & 0xFF; //sls = (Label&0x00FF000000000000)>>48; + opc = (Label >> 24) & 0xFFFFFF;//opc = (Label&0x0000FFFFFF000000)>>24; + dpc = Label & 0xFFFFFF; //dpc = (Label&0x0000000000FFFFFF); + debuglog("Function GetPointCodes called for service type MTP3ansi"); + break; + case MTP3ttc: + /* + if( mtp3_ni == 0) + { + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; + debuglog("Function GetPointCodes called for service type MTP3ttc/international"); + } else + {*/ + Label=decode_48bLSB_int(msg); //0x010203040506 + sls = (Label>>32)&0xF; // sls = (Label&0x000F00000000)>>32; // only 4 bits!!! + opc = (Label>>16)&0xFFFF;//opc = (Label&0x0000FFFF0000)>>16; + dpc = Label&0xFFFF; //dpc = (Label&0x00000000FFFF); + debuglog("Function GetPointCodes called for service type MTP3ttc/national"); + //} + break; + case MTP3bttc: + Label=decode_48bLSB_int(msg); + sls = (Label>>32)&0xF; // sls = (Label&0x000F00000000)>>32; // only 4 bits!!! + opc = (Label>>16)&0xFFFF;//opc = (Label&0x0000FFFF0000)>>16; + dpc = Label&0xFFFF; //dpc = (Label&0x00000000FFFF); + debuglog("Function GetPointCodes called for service type MTP3bttc/national"); + break; + case MTP3mpt: + if( mtp3_ni == 2) + { + Label=decode_56bLSB_int(msg); + sls = (Label >> 48) & 0xFF; //sls = (Label&0x00FF000000000000)>>48; + opc = (Label >> 24) & 0xFFFFFF;//opc = (Label&0x0000FFFFFF000000)>>24; + dpc = Label & 0xFFFFFF; //dpc = (Label&0x0000000000FFFFFF); + debuglog("Function GetPointCodes called for service type MTP3mpt(nat)"); + } + else + { + label= decode_32bLSB_int(msg); + sls = (label>>28)&0xF; //sls = (label&0xF0000000)>>28; + opc = (label>>14)&0x3FFF; //opc = (label&0x0FFFC000)>>14; + dpc = label&0x3FFF; //dpc = (label&0x00003FFF); + debuglog("Function GetPointCodes called for service type MTP3mpt(int)"); + } + break; + default: + break; + } + debuglog("sls:%u opc:%u, dpc:%u",sls,opc,dpc); +} +//------------ + +void MTP3asp__PT_PROVIDER::GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg) +{ + debuglog("Function GetPointCodesIUP called"); + cic=0; opc=0; dpc=0; + unsigned long long int Label; + Label=decode_40bLSB_int(msg); //0x0102030405 + cic = (Label>>28)&0xFFF; //cic = (label&0xFFF0000000)>>28; + opc = (Label>>14)&0x3FFF; //opc = (label&0x000FFFC000)>>14; + dpc = Label&0x3FFF; //dpc = (label&0x0000003FFF); + debuglog("cic:%u opc:%u, dpc:%u",cic,opc,dpc); +} + +void MTP3asp__PT_PROVIDER::SetPointCodes(unsigned int sls,unsigned int opc,unsigned int dpc, unsigned char* msg) +{ + unsigned long long int Sls,Opc,Dpc; + + switch( MTPServiceType) + { + case MTP3itu: + encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3itu"); + break; + case MTP3iup: + encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3iup"); + break; + case MTP3ansi: + Sls=sls; Opc=opc; Dpc=dpc; + encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3ansi"); + break; + case MTP3ttc: + /* if ( mtp3_ni == 0 ){ + encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3ttc/international"); + } else { + */ + Sls=sls; Opc=opc; Dpc=dpc; + encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3ttc/national"); + //} + break; + case MTP3bttc: + Sls=sls; Opc=opc; Dpc=dpc; + encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3bttc/national"); + break; + case MTP3mpt: + if ( mtp3_ni == 2 ) + { Sls=sls; Opc=opc; Dpc=dpc; + encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc)); + debuglog("Function SetPointCodes called for service type MTP3mpt(nat)"); + } + else + { encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc )); + debuglog("Function SetPointCodes called for service type MTP3mpt(int)"); + } + break; + default: + break; + } +} +//------------ + +void MTP3asp__PT_PROVIDER::SetPointCodesIUP(unsigned int cic,unsigned int opc,unsigned int dpc, unsigned char* msg) +{ + unsigned long long int Cic,Opc,Dpc; + Cic=cic; Opc=opc; Dpc=dpc; + debuglog("Function SetPointCodesIUP called"); + encode_40bLSB_int( msg, ((Cic<<28)|(Opc<<14)|Dpc )); +} + +//Changes the Point codes: dpc<->opc ie. destination <->orig +// inbuff starts from dpc i.e doesn't contain sio !!!! +int MTP3asp__PT_PROVIDER::ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len) +{ + switch( MTPServiceType) + { + case MTP3itu: + case MTP3iup: + if (len<5) + { warn("MTP3itu:len<5. Too short message!"); return 0; }; + break; + case MTP3ansi: + if (len<9 ) return 0; + break; + case MTP3ttc: + //if ( mtp3_ni == 0 && len<5) + //{ warn("MTP3ttc:len<5. Too short message!"); return 0; } + //else + if (len<6) + { warn("MTP3ttc:len<6. Too short message!"); return 0; } + break; + case MTP3bttc: + if (len<7) + { warn("MTP3bttc:len<7. Too short message!"); return 0; } + break; + case MTP3mpt: + if ( mtp3_ni == 2 && len<8) + { warn("MTP3mpt:len<8. Too short message!"); return 0; } + else if (len<5) + { warn("MTP3mpt:len<5. Too short message!"); return 0; } + break; + default: + warn("Unknown MTPServiceType!!!"); + break; + } + unsigned int sls,opc,dpc; + GetPointCodes(sls,opc,dpc,inbuff); + SetPointCodes(sls,dpc,opc,outbuff); + return 1; +} +//------------ + +int MTP3asp__PT_PROVIDER::Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff) +{ + unsigned int temp_opc,temp_dpc,temp_sls; + + GetPointCodes(temp_sls,temp_opc,temp_dpc,buff); + if ( (temp_opc == opc) && (temp_dpc == dpc) ) return 1; + return 0; +} +//------------ + + +// ------------------------------------------------- +// M3UA Functions and definitions for test with SEA +// ------------------------------------------------- + +// Structures for M3UA +static unsigned char aspup_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version + 0x00, //reserved + M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM + M3UA_MSG_TYP_ASPSM_ASPUP, //Msg type: ASPUP + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets + // ,PAR_PREFIX_COMMON, //optional Info string tag, in included, then msg + // PAR_INFO_STR //msg length should be +20, that is 28=0x1c + // 0x00,0x0f, // length: "TTCN-3 Executor" is 15 chars + // 'T', 'T', 'C', 'N', + // '-', '3', ' ', 'E', + // 'x', 'e', 'c', 'u', + // 't', 'o', 'r', 0x00 //las octet is padding +}; +const int sizeof_aspup_msg = 8; + +static unsigned char aspupack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version + 0x00, //reserved + M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM + M3UA_MSG_TYP_ASPSM_ASPUPAck, //Msg type: ASPUP + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspupack_msg = 8; + +static unsigned char aspac_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPTM, //Msg class + M3UA_MSG_TYP_ASPTM_ASPAC, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspac_msg = 8; + +// ASP Active Acknowledge msg: +static unsigned char aspac_ack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPTM, //Msg class + M3UA_MSG_TYP_ASPTM_ASPACAck, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspac_ack_msg = 8; + +static unsigned char aspia_ack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPTM, //Msg class + M3UA_MSG_TYP_ASPTM_ASPIAAck, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspia_ack_msg = 8; + +// ASP DOWN Acknowledge msg: +static unsigned char aspdn_ack_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_ASPSM, //Msg class + M3UA_MSG_TYP_ASPSM_ASPDNAck, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x08 // length ends = 8 octets +}; +const int sizeof_aspdn_ack_msg = 8; + +//ASP Destination Available msg: +static unsigned char dava_1apc_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + //or updated doc 2/1056-FCPW 101 86/P-1 + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_SSNM, //Msg class + M3UA_MSG_TYP_SSNM_DAVA, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x10, // length ends, 16 octets + //Affected point code + PAR_PREFIX_COMMON, + PAR_AFFECTED_PC, + 0x00, //par length begins (2 octets) + 0x08, //length ends, 8 octets + 0x00, // point code placeholder begins + 0x00, // + 0x00, // + 0x00 // point code placeholder ends +}; +const int sizeof_dava_1apc_msg = 16; + +static unsigned char duna_1apc_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_SSNM, //Msg class + M3UA_MSG_TYP_SSNM_DUNA, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x10, // length ends, 16 octets + //Affected point code + PAR_PREFIX_COMMON, + PAR_AFFECTED_PC, + 0x00, //par length begins (2 octets) + 0x08, //length ends, 8 octets + 0x00, // point code placeholder begins + 0x00, // + 0x00, // + 0x00 // point code placeholder ends +}; +const int sizeof_duna_1apc_msg = 16; + +static unsigned char error_msg[] = +{ + //common MsUA msg hdr, see M3UA PS + //Doc no. 1/1056-FCP 103 3571/F Uen, RevA + 0x01, //Release Version: 01 + 0x00, //reserved + M3UA_MSG_CLS_MGMT, //Msg class + M3UA_MSG_TYP_MGMT_ERR, //Msg type + 0x00, //Msg length begins (4 octets) + 0x00, // + 0x00, // + 0x18, // length ends, 16+8 octets + // Error code field: + PAR_PREFIX_COMMON, + PAR_ERROR_CODE, + 0x00, //par length begins (2 octets) + 0x08, //length ends, 8 octets + 0x00, // error code placeholder begins (M3UA_MSG_OFFS+4) + 0x00, // + 0x00, // + 0x00, // error code placeholder ends + // additional field: + 0x00, // M3UA_MSG_OFFS+8 + 0x00, // Routing context or Network Appearanance or APC or DI = error_code_id + 0x00, // par length begins (2 octets) + 0x08, // length ends, 8 octets + 0x00, // value placeholder begins M3UA_MSG_OFFS+12 + 0x00, // + 0x00, // + 0x00 // value place holder ends +}; +const int sizeof_error_msg = 24; + +void MTP3asp__PT_PROVIDER::M3UA_user_unmap(const char *system_port) +{ + MTP3_close_connection(); + dynamicConnection = FALSE; +} +//------------ + +void MTP3asp__PT_PROVIDER::M3UA_user_map(const char *system_port) +{ + M3UAState = AssocDown; + Check_TestPort_Variables(); + if(dynamicConnection) + { + connectionUp = FALSE; + } + else + { + MTP3_open_channel(TRUE); + M3UA_user_connect(); + } +} +//------------ + +void MTP3asp__PT_PROVIDER::M3UA_user_connect() +{ + M3UAState = AssocEstabl; + // Sending out an ASPUP message + log("Message ASPUP will be sent"); + send_msg(aspup_msg, sizeof_aspup_msg); + // NOTE: the ASPUPAck will be handled by M3UA_interpreter, which + // also will take care of sending ASPAC upon receiving the ASPUPAck +} +//------------ + +// M3UA_interpreter +void MTP3asp__PT_PROVIDER::M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) +{ + if ((length==0) || (inbuffer==NULL)) + { warn("0 byte long message received -> packet dropped."); + return; + } + + if (length==1) + { + log("1 byte long internal SEA message received -> packet dropped."); + return; + } + + if ( !strcmp((const char*)inbuffer,"start") ) + { log("start message received from SEA"); + return; + } + else if (!strcmp((const char*)inbuffer,"stop")) + { log("stop message received from SEA"); + return; + } + + // writing out the contents of the buffer + OCTETSTRING buff(length,inbuffer); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("incoming buffer: "); + buff.log(); + TTCN_Logger::end_event(); + + // version checking + if ( inbuffer[M3UA_VER_OFFS] != M3UA_version ) + { warn("Incompatible M3UA protocol version in header -> packet dropped"); + return; + } + + //length checking + unsigned int indicated_length = decode_32b_int(inbuffer + M3UA_LGT_OFFS ); + if ( indicated_length != (unsigned)length) + warn("Length in common header (%d) mismatches received buffer length (%d)," + "Assuming that it is because of the omission of final parameter padding" + "in indicated length",indicated_length, length); + + // checking MSG class + int unprocessed_chars = 0; + switch (inbuffer[M3UA_CLS_OFFS]) + { + case M3UA_MSG_CLS_MGMT: + unprocessed_chars = processing_M3UA_MGMT_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_TRNSFM : + unprocessed_chars = processing_M3UA_Transfer_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_SSNM : + unprocessed_chars = processing_M3UA_SSNM_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_ASPSM : + unprocessed_chars = processing_M3UA_ASPSM_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_ASPTM : + unprocessed_chars = processing_M3UA_ASPTM_msg(inbuffer, length); + break; + case M3UA_MSG_CLS_RKM : + unprocessed_chars = processing_M3UA_RKM_msg(inbuffer, length); + break; + default: + unprocessed_chars = processing_M3UA_unsupported_msg_class(inbuffer, length); + break; + } + debuglog("%d chars remained unprocessed (might be due to padding)", unprocessed_chars); +} +//------------ + +//processing M3UA MGMT msg +int MTP3asp__PT_PROVIDER::processing_M3UA_MGMT_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_MGMT_msg"); + int offset = M3UA_MSG_OFFS; //pointer for processing + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: Mgmt, "); + switch (inbuffer[M3UA_TYP_OFFS])//msg type + { + case M3UA_MSG_TYP_MGMT_ERR: + TTCN_Logger::log_event("type: ERROR-> ignored"); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + break; + case M3UA_MSG_TYP_MGMT_NTFY: + TTCN_Logger::log_event("type: NOTIFY -> ignored"); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + break; + default: + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + TTCN_Logger::log_event("Unsupported M3UA msg type %x of class MGMT -> packet dropped.", inbuffer[M3UA_TYP_OFFS]); + TTCN_Logger::log_event("}"); + TTCN_Logger::end_event(); + break; + } + return length - offset; +} +//------------ + +//processing M3UA SSNM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_SSNM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_SSNM_msg"); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: SSNM, "); + int offset = M3UA_MSG_OFFS; //pointer for processing + + switch (inbuffer[M3UA_TYP_OFFS]) + { + case M3UA_MSG_TYP_SSNM_DAUD: + while (offset <= length-8 ) //processing potential params + { + switch (inbuffer[offset++]) //1st octet of tag + { + case PAR_PREFIX_COMMON: + TTCN_Logger::log_event (" DAUD: COMMON parameter "); + switch (inbuffer[offset++]) //2nd octet of COMMON tag + { + case PAR_ROUTING_CTX: + TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + case PAR_INFO_STR: + TTCN_Logger::log_event ("Info String (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + case PAR_AFFECTED_PC: + TTCN_Logger::log_event ("Affected Point Code -> will send DUNA/DAVA, "); + TTCN_Logger::log_event("will ignore remainder parameters after APC}"); + TTCN_Logger::end_event(); + Send_DAVA_DUNA_to_APCinDAUD(Tester_Pc, inbuffer, offset); + return length-offset; + default: + TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x-> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]); + send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + break; + } + break; + case PAR_PREFIX_M3UA: + TTCN_Logger::log_event ("DAUD: M3UA parameter: "); + switch (inbuffer[offset++]) //2nd octet of M3UA tag + { + case PAR_NETW_APP: + TTCN_Logger::log_event ("Network Appearance (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + default: + TTCN_Logger::log_event ("invalid M3UA param tag:0x%02x%02x-> skipped", + PAR_PREFIX_M3UA, inbuffer[offset-1]); + send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + } + break; + default: //1st octet of tag + TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]); + close_log_event(); + return length -offset; + break; + } + } + break; + case M3UA_MSG_TYP_SSNM_DAVA: // Destination Available // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DAVA -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_DUNA: // Destination Unavailable // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DUNA -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_SCON: // Signalling Congestion // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_SCON -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_DUPU: //Destinationn User Part Unavailable // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DUPU -> ignored"); + close_log_event(); + break; + case M3UA_MSG_TYP_SSNM_DRST: //Destination Restricted // Notification to the user part ????? + TTCN_Logger::log_event("type: SSNM_DRST -> ignored"); + close_log_event(); + break; + default: //msg type + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + TTCN_Logger::log_event("Unsupported M3UA msg type -> packet dropped."); + close_log_event(); + break; + } + return length - offset; +} +//------------ + +//processing M3UA ASPSM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_ASPSM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_ASPSM_msg"); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: ASPSM, "); + + int offset = M3UA_MSG_OFFS; //pointer for processing + switch (inbuffer[M3UA_TYP_OFFS]) + { + case M3UA_MSG_TYP_ASPSM_ASPUP: + TTCN_Logger::log_event("type: ASPSM_ASPUP -> ASPUPAck will be sent"); + close_log_event(); + send_msg(aspupack_msg, sizeof_aspupack_msg); + break; + case M3UA_MSG_TYP_ASPSM_ASPDN: + TTCN_Logger::log_event("type: ASPSM_ASPDN -> ASPDNAck will be sent"); + close_log_event(); + send_msg(aspdn_ack_msg, sizeof_aspdn_ack_msg); + break; + case M3UA_MSG_TYP_ASPSM_BEAT: + TTCN_Logger::log_event("type: ASPSM_BEAT -> ASPSM_BEATAck will be sent"); + close_log_event(); + //Sending back the packet as acknowledge: + inbuffer[M3UA_TYP_OFFS]= M3UA_MSG_TYP_ASPSM_BEATAck; + send_msg(inbuffer, length); + break; + case M3UA_MSG_TYP_ASPSM_ASPUPAck: + TTCN_Logger::log_event("type: ASPSM_ASPUPAck -> ASPAC will be sent"); + M3UAState = AssocInac; + TTCN_Logger::log_event(" M3UAState's been changed to AssocInac"); + close_log_event(); + send_msg(aspac_msg, sizeof_aspac_msg ); + break; + case M3UA_MSG_TYP_ASPSM_ASPDNAck: + M3UAState = AssocDown; + TTCN_Logger::log_event(" M3UAState's been changed to AssocDown"); + TTCN_Logger::log_event("type: ASPSM_ASPDNAck -> nothing will be sent"); + close_log_event(); + break; + case M3UA_MSG_TYP_ASPSM_BEATAck: + TTCN_Logger::log_event("type: ASPSM_BEATAck -> nothing will be sent"); + close_log_event(); + break; + default: + TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS])); + close_log_event(); + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + break; + } + return length - offset; +} +//------------ + +//processing M3UA ASPTM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_ASPTM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_ASPTM_msg"); + TTCN_Logger::begin_event(TTCN_PORTEVENT); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: ASPTM, "); + + int offset = M3UA_MSG_OFFS; //pointer for processing + switch (inbuffer[M3UA_TYP_OFFS]) + { + case M3UA_MSG_TYP_ASPTM_ASPAC: //ASP Active + M3UAState = AssocActive; + TTCN_Logger::log_event("type: ASPTM_ASPAC -> ASPACAck will be sent"); + close_log_event(); + send_msg(aspac_ack_msg, sizeof_aspac_ack_msg); + break; + case M3UA_MSG_TYP_ASPTM_ASPIA: //ASP InActive + TTCN_Logger::log_event("type: ASPTM_ASPIA -> ASPIAAck will be sent"); + close_log_event(); + send_msg(aspia_ack_msg, sizeof_aspia_ack_msg); + break; + case M3UA_MSG_TYP_ASPTM_ASPACAck: + M3UAState = AssocActive; + TTCN_Logger::log_event("type: ASPTM_ASPACAck -> nothing will be sent"); + TTCN_Logger::log_event("M3UAState's been changed to AssocActive."); + close_log_event(); + break; + case M3UA_MSG_TYP_ASPTM_ASPIAAck: + TTCN_Logger::log_event("type: ASPTM_ASPIAAck -> nothing will be sent"); + close_log_event(); + break; + default: + TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS])); + close_log_event(); + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + break; + } + return length - offset; +} +//------------ + +//processing M3UA RKM msg +int MTP3asp__PT_PROVIDER::processing_M3UA_RKM_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_RKM_msg"); + int offset = M3UA_MSG_OFFS; //pointer for processing + warn("Unsupported M3UA msg class M3UA_RKM -> packet dropped."); + return length - offset; +} +//------------ + +//processing M3UA unsupported msg class +int MTP3asp__PT_PROVIDER::processing_M3UA_unsupported_msg_class(unsigned char* inbuffer,int length) +{ + warn("Unsupported M3UA msg class -> packet dropped."); + send_M3UA_error_msg( PAR_ERRC_UNSMC, inbuffer[M3UA_CLS_OFFS] ); + int offset = M3UA_MSG_OFFS; //pointer for processing + return length - offset; +} +//------------ + +// processing_M3UA_Transfer_msg - called if the msg class is "Transfer" i.e M3UA_MSG_CLS_TRNSFM: +int MTP3asp__PT_PROVIDER::processing_M3UA_Transfer_msg(unsigned char* inbuffer,int length) +{ + debuglog("Entering function:processing_M3UA_Transfer_msg"); + int offset = M3UA_MSG_OFFS; //pointer for processing + unsigned int recv_opc, recv_dpc,recv_si, recv_ni, recv_mp,recv_sls =0; + int param_length = 0; + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name()); + TTCN_Logger::log_event("decoded msg class: DataTrnsf, "); + + switch (inbuffer[M3UA_TYP_OFFS]) //msg type + { + case M3UA_MSG_TYP_TRSNFM_DATA: + TTCN_Logger::log_event("msg type DATA, "); + while (offset <= length-8) //processing potential params + { + switch (inbuffer[offset++]) //1st octet of tag. Offset already incremented after the 'case' ! + { + case PAR_PREFIX_COMMON: + TTCN_Logger::log_event (" DATA: COMMON parameter, "); + switch (inbuffer[offset++]) //2nd octet of tag + { + case PAR_ROUTING_CTX: + TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), "); + // Send back an error msg + skip_par_after_tag(inbuffer, offset); + break; + case PAR_CORREL_ID: + TTCN_Logger::log_event ("Correlation ID (unsupported par) -> skipped), "); + skip_par_after_tag(inbuffer, offset); + break; + default: + TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x -> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + break; + } + case PAR_PREFIX_M3UA: + TTCN_Logger::log_event ("DATA: M3UA parameter: "); + switch (inbuffer[offset++]) //2nd octet of M3UA tag + { + case PAR_PROT_DATA: + //--------------------------------------------- + TTCN_Logger::log_event ("Protocol Data"); + // retrieving length + param_length = decode_16b_int(inbuffer+offset); offset+=2; + TTCN_Logger::log_event(", DATA: Length of Protocol Data parameter is %d",param_length); + // retrieving M3UA protocol data paremeter opc, dpc, si, ni, mp, + // sls + recv_opc = decode_32b_int(inbuffer+offset); offset +=4; + recv_dpc = decode_32b_int(inbuffer+offset); offset +=4; + recv_si = (unsigned int)(inbuffer[offset++]); + recv_ni = (unsigned int)(inbuffer[offset++]); + recv_mp = (unsigned int)(inbuffer[offset++]); + recv_sls = (unsigned int)(inbuffer[offset++]); + TTCN_Logger::log_event(", DATA: decoded Protocol Data parameter:"); + // filling up TTCN structure + if ((Loop==MTP3_ON) || + (!Filter) || + (Filter && + (recv_opc == (unsigned)Sut_Pc) && (recv_dpc == (unsigned)Tester_Pc) && + (recv_ni == (unsigned)mtp3_ni) + )) + { + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + recv_sio.ni()= int2bit(recv_ni,2); + recv_sio.prio()= int2bit(recv_mp,2); + recv_sio.si()= int2bit(recv_si,4); + recv_msg.sio() = recv_sio; + recv_msg.sls() = recv_sls; + recv_msg.opc()= recv_opc; + recv_msg.dpc() = recv_dpc;; + recv_msg.data() = OCTETSTRING(param_length-16, // 16 octet paramheader + 5 routing label + &inbuffer[offset]); + recv_msg.log(); + close_log_event(); + incoming_message ( recv_msg ); + offset += param_length-16; + return length - offset; + } + else + { + close_log_event(); + log("Either the received M3UA(OPC, DPC, SI) fields, or the embedded MTP3 rooting label (OPC, DPC) not matched with the filter setting -> packet dropped."); + return length - offset; + } + break; + default: + TTCN_Logger::log_event ("invalid M3UA param tag:0x%02x%02x-> skipped", PAR_PREFIX_M3UA, inbuffer[offset-1]); + skip_par_after_tag(inbuffer, offset); + } + break; + default: + TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]); + close_log_event(); + return length -offset; + break; + } + }// Checking parameter tag (offset packet dropped", + (unsigned int)(inbuffer[M3UA_TYP_OFFS])); + close_log_event(); + send_M3UA_error_msg( PAR_ERRC_UNSMT, inbuffer[M3UA_TYP_OFFS]); + break; + } + + return length -offset; +} + +// Set M3UA SingleAPC - Stores field Single Affected Point Code +void MTP3asp__PT_PROVIDER::Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par) +{ + //setting par type to APC + apc_par[0] = PAR_PREFIX_COMMON; + apc_par[1] = PAR_AFFECTED_PC; + //setting the length to 4+4 = 8 + apc_par[2] = 0x00; + apc_par[3] = 0x08; + //setting the mask + apc_par[4] = 0x00; + //setting the pc + encode_24b_int(apc_par+5,pc); +} + +// Send DAVA DUNA to APCinDAUD +void MTP3asp__PT_PROVIDER::Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int & offset) +{ + unsigned int length = decode_16b_int(inbuffer+offset); + offset +=2; + unsigned int current_pc; + + //checking the length + if ((length < 8) || (length%4)) + { warn("Invalid length in APC parameter -> not processed"); + return; + } + + for (unsigned int i = 4 ; i < length; i += 4) + { + if (inbuffer[offset++] == 0x00) // mask===>single pc + { + current_pc = decode_24b_int(inbuffer+offset); + offset +=3; + if (dava_sep == current_pc) //dava + { Set_M3UA_SingleAPC(dava_sep, dava_1apc_msg+M3UA_MSG_OFFS); + log("DAVA will be sent for pc=%d", dava_sep); + send_msg(dava_1apc_msg, sizeof_dava_1apc_msg); + } + else //duna + { Set_M3UA_SingleAPC(current_pc, duna_1apc_msg+M3UA_MSG_OFFS); + log("DUNA will be sent for pc=%d", current_pc); + send_msg(duna_1apc_msg, sizeof_duna_1apc_msg); + } + } + else //masked pc + { warn("Unsupported masking (mask=0x%02x) for PC=%d in APC parameter -> ignored", + inbuffer[offset-1], current_pc); + } + } + return; +} + +// send M3UA error msg +// send an eror msg with error_code. Additional parameter matches to the error code: +void MTP3asp__PT_PROVIDER::send_M3UA_error_msg(unsigned int error_code, unsigned int add_par ) +{ + encode_16b_int( error_msg+M3UA_MSG_OFFS+4, error_code); + encode_16b_int( error_msg+M3UA_MSG_OFFS+8, add_par); + send_msg(error_msg, sizeof_error_msg ); +}; + +// Coder functions for M3UA: int -> unsigned char array +//------------------------------------------------------ +// Result:Less significant byte in highest address +// Most Significant Byte first (in lowest address) = MSB = Big Endian = Network Byte Order +void MTP3asp__PT_PROVIDER::encode_32b_int(unsigned char *to, unsigned int from) +{ + to[3] = from & 0xFF; + from >>= 8; + to[2] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[0] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_32b_int(const unsigned char *from) +{ + return from[3] | (from[2] << 8) | (from[1] << 16) | (from[0] << 24); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_24b_int(unsigned char *to, unsigned int from) +{ + to[2] = from & 0xFF; + from >>= 8; + to[1] = from & 0xFF; + from >>= 8; + to[0] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_24b_int(const unsigned char *from) +{ + return from[2] | (from[1] << 8) | (from[0] << 16); +} +//------------ + +void MTP3asp__PT_PROVIDER::encode_16b_int(unsigned char *to, int from) +{ + to[1] = from & 0xFF; + from >>= 8; + to[0] = from & 0xFF; +} +//------------ + +unsigned int MTP3asp__PT_PROVIDER::decode_16b_int(const unsigned char *from) +{ + return from[1] | (from[0] << 8); +} +//------------ + +//skip par after tag +void MTP3asp__PT_PROVIDER::skip_par_after_tag(unsigned char* inbuffer, int &offset) +{ + offset += decode_16b_int(inbuffer+offset)-2; //the length contains + //the param hdr. itself + if (offset%4) offset += 4-(offset%4); //skipping padding +} +//------------ +#endif + + + +#ifdef TARGET_TEST +// -------------------------- +// Functions for Target testing +// -------------------------- +// In case of target this function handles the received message +void MTP3asp__PT_PROVIDER::message_incoming(const unsigned char* msg, int messageLength, int) +{ + OCTETSTRING rcvData = OCTETSTRING(messageLength, msg); + + int msgType = oct2int(substr(rcvData,0,1)); + switch (msgType) + { + case 0: //TRANSFERind message received + if(Tcp_is_up) //Registration was already performed + { + ASP__MTP3__TRANSFERind recv_msg; + MTP3__Field__sio recv_sio; + BITSTRING sio_bit = oct2bit(substr(rcvData,5,1)); + recv_sio.ni()= substr(sio_bit,0,2); + recv_sio.prio()= substr(sio_bit,2,2); + recv_sio.si()= substr(sio_bit,4,4); + recv_msg.sio() = recv_sio; + recv_msg.opc() = oct2int(substr(rcvData,6,4)); + recv_msg.dpc() = oct2int(substr(rcvData,10,4)); + recv_msg.sls() = oct2int(substr(rcvData,14,1)); + recv_msg.data() = substr(rcvData,15,rcvData.lengthof()-15); + if (Tcp_is_up == 1) //No unregistration ongoing + incoming_message(recv_msg); + else //Unregistration ongoing + log("Received ASP_MTP3_TRANSFERind is ignored since unregistration is started."); + } + else + error("Message was received before successful registration in M3UA server."); + break; + + case 4: //Status message received + { + int status = oct2int(substr(rcvData,5,1)); + if(Tcp_is_up == 2) // Unregistration ongoing + { + const char * rcvDat = oct2str(rcvData); + log("Message \"%s\" received. Status = %i", rcvDat, status); + if (status == 2) + { + log("Unregistration performed."); + Tcp_is_up = 0; + } + else if (status == 3) + error("Unsuccessful unregistration."); + else if (status == 5) { + if(forward_status) { + incoming_message(ASP__MTP3__STATUS(NULL_VALUE)); + } + else { + warn("Invalid STATUS message received from M3UA server with status code=%d.", status); + } + } + } + else if(Tcp_is_up == 1) // Active state + { + if (status == 5) { + if(forward_status) { + incoming_message(ASP__MTP3__STATUS(NULL_VALUE)); + } + } + else { + warn("Invalid STATUS message received from M3UA server with status code=%d.", status); + } + } + else // Registration ongoing + { + const char * rcvDat = oct2str(rcvData); + log("Message \"%s\" received. Status = %i", rcvDat, status); + if (status == 0) + { + log("Registration performed."); + Tcp_is_up = 1; + } + else { + error("Unsuccessful registration."); + } + } + } + break; + case 5: + { + if(forward_pause) incoming_message(ASP__MTP3__PAUSE(NULL_VALUE)); + } + break; + case 6: + { + if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE)); + } + break; + + + default: //Unexpected message received + warn("Invalid message received from M3UA server."); + } +} + +void MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables() +{ + if (Sut_Pc==-1) error("Parameter SUT_Pc is not set."); + if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set."); + if (!Ni_is_set) error("Parameter NI is not set."); + if (M3UA_version==0) error("Parameter M3UA_version cannot be set to 0 in TargetM3UA mode."); + +//packet header + header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB); +} + +void MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables_STC() +{ + if( destinationname == NULL) error("Parameter DestinationName is not set in TargetSTC mode."); + + header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB); +} + +void MTP3asp__PT_PROVIDER::Target_user_map(const char *system_port) +{ + Tcp_is_up = 0; + Check_Target_TestPort_Variables(); + map_user(); + + OCTETSTRING tcpData = int2oct(2,1); //Message type + if( destinationname == NULL) + tcpData = tcpData + int2oct(char2oct(system_port).lengthof()+15,4); //Length + else + tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4); + tcpData = tcpData + int2oct(mtp3_ni,1); + tcpData = tcpData + int2oct(Sut_Pc,4); + tcpData = tcpData + int2oct(Tester_Pc,4); + tcpData = tcpData + int2oct(M3UA_version,1); + if( destinationname == NULL) + tcpData = tcpData + char2oct(system_port); + else + tcpData = tcpData + char2oct(destinationname); + + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Registration message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); + + int fd = get_socket_fd(); + pollfd pollFd = { fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) + error("No response received for REGISTER message. Exiting after timeout."); + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) + error("No response received for REGISTER message. Exiting after error (%d)", + (nEvents < 0) ? errno : 0); + Handle_Fd_Event(fd, TRUE, FALSE, FALSE); +} + +void MTP3asp__PT_PROVIDER::TargetSTC_user_map(const char *system_port) +{ + Tcp_is_up = 0; + Check_Target_TestPort_Variables_STC(); + map_user(); + + OCTETSTRING tcpData = int2oct(2,1); //Message type + tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4); + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,4); + tcpData = tcpData + int2oct(0,1); + tcpData = tcpData + char2oct(destinationname); + + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Registration message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); + + int fd = get_socket_fd(); + pollfd pollFd = { fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) + error("No response received for REGISTER message. Exiting after timeout."); + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) + error("No response received for REGISTER message. Exiting after error (%d)", + (nEvents < 0) ? errno : 0); + Handle_Fd_Event(fd, TRUE, FALSE, FALSE); +} + +void MTP3asp__PT_PROVIDER::Target_user_unmap(const char *system_port) +{ + OCTETSTRING tcpData = int2oct(3,1); //Message type + tcpData = tcpData + int2oct(6,4); //Length + tcpData = tcpData + int2oct(0,1); + send_outgoing((const unsigned char*)tcpData,tcpData.lengthof()); + + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name()); + TTCN_Logger::log_event_str("Unregistration message sent: "); + tcpData.log(); + TTCN_Logger::end_event(); + + Tcp_is_up = 2; //Unregistration ongoing + + while (Tcp_is_up == 2) + { + int fd = get_socket_fd(); + pollfd pollFd = { fd, POLLIN, 0 }; + int nEvents = poll(&pollFd, 1, 3000 /* ms */); + if (nEvents == 0) + error("No response received for UNREGISTER message. Exiting after timeout."); + if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) + error("No response received for UNREGISTER message. Exiting after error (%d)", + (nEvents < 0) ? errno : 0); + Handle_Fd_Event(fd, TRUE, FALSE, FALSE); + } + unmap_user(); +} +#endif +} diff --git a/MTP3asp_CNL113337/src/MTP3asp_PT.hh b/MTP3asp_CNL113337/src/MTP3asp_PT.hh new file mode 100644 index 00000000..340f24ff --- /dev/null +++ b/MTP3asp_CNL113337/src/MTP3asp_PT.hh @@ -0,0 +1,249 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2009 // +// // +// 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: MTP3asp_PT.hh +// Description: Implementation of port MTP3asp_PT +// This test port is written to connect ttcn to SEA +// according to specification ITU-T SS7 MTP3, ANSI, TCC, MPT, IETF, +// Reference: ITU-T Recommendation Q.704, RFC3332 +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2009-04-03 +// Contact: http://ttcn.ericsson.se + + +#ifndef MTP3asp_PT_HH +#define MTP3asp_PT_HH + +#include + +#ifdef TARGET_TEST +#include "Abstract_Socket.hh" +#endif + +#ifndef TARGET_TEST +#include "mphclib.h" +#endif + + +#define MAXSIZE 1532 //+32 needed for M3UA +#define MTP3_ON 1 +#define MTP3_OFF 0 +namespace MTP3asp__Types { + class ASP__MTP3__TRANSFERind; + class ASP__MTP3__PAUSE; + class ASP__MTP3__RESUME; + class ASP__MTP3__STATUS; + class ASP__MTP3__TRANSFERreq; +} +namespace MTP3asp__PortType { + +class MTP3asp__PT_PROVIDER : public PORT +#ifdef TARGET_TEST + , public Abstract_Socket +#endif + { +protected: + // pointer to member: user_map/unmap methods + typedef void (MTP3asp__PT_PROVIDER::*usermap_t)(const char *system_port); + // pointer to member: user_connect methods + typedef void (MTP3asp__PT_PROVIDER::*userconnect_t)(); + // pointer to member: interpreter methods +#ifndef TARGET_TEST + typedef void (MTP3asp__PT_PROVIDER::*interpreter_t)(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + + void M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + void M3UA_user_map(const char *system_port); + void M3UA_user_connect(); + void M3UA_user_unmap(const char *system_port); + void MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + void MTP3_user_map(const char *system_port); // common for MTP3 ITU and MTP3 ANSI + void MTP3_user_connect(); + void MTP3_user_unmap(const char *system_port);// common for MTP3 ITU and MTP3 ANSI + void STC_user_connect(); + void STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con); + void STC_user_map(const char *system_port); + void STC_user_unmap(const char *system_port); +#endif +#ifdef TARGET_TEST + //Map and unmap for target + void Target_user_map(const char *system_port); + void Target_user_unmap(const char *system_port); + void TargetSTC_user_map(const char *system_port); +#endif + +public: + MTP3asp__PT_PROVIDER(const char *par_port_name=NULL); + ~MTP3asp__PT_PROVIDER(); + + typedef enum { MTP3itu, MTP3ansi, MTP3ttc, MTP3mpt, M3UA, TargetM3UA, MTP3bttc,MTP3iup, STC, TargetSTC } MTPServiceType_t ; + + MTPServiceType_t MTPServiceType ; // ctor default is MTP3itu + void set_parameter(const char *parameter_name, const char *parameter_value); + void error(const char *msg, ...); + void log(const char *msg, ...); +#ifndef TARGET_TEST + void user_connect(); + + void set_channel(int chnl) {channel=chnl;}; + void MTP3_open_channel(boolean http); + void MTP3_close_connection(); + + boolean wait_for_open(); + int conn_state; + + interpreter_t interpreter; // pointer to interpreter members, ctor default is MTP3_ITU_interpreter + void doInterpret(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con) + { (this->*interpreter)(inbuffer,length,from_channel, con); } +#endif + //parameter handling + boolean dynamicConnection, connectionUp; + char *hostname; + int httpport; + char *entityname; + int MTP_fd; + +protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void debuglog(const char *msg, ...); + void warn(const char *msg, ...); + void close_log_event(); + + usermap_t user_map_p ; // pointer to user_map members, default is MTP3itu + usermap_t user_unmap_p; // pointer to user_unmap members, default is MTP3itu + userconnect_t user_connect_p; + + void user_start(); + void user_stop(); + + void outgoing_send(const MTP3asp__Types::ASP__MTP3__TRANSFERreq& send_par); + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__TRANSFERind& incoming_par) = 0; + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__PAUSE& incoming_par) = 0; + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__RESUME& incoming_par) = 0; + virtual void incoming_message + (const MTP3asp__Types::ASP__MTP3__STATUS& incoming_par) = 0; +#ifndef TARGET_TEST + void encode_56bLSB_int(unsigned char *to, unsigned long long int from); + long long unsigned int decode_56bLSB_int(const unsigned char *from); + void encode_48bLSB_int(unsigned char *to, unsigned long long int from); + long long unsigned int decode_48bLSB_int(const unsigned char *from); + void encode_40bLSB_int(unsigned char *to, unsigned long long int from); + long long unsigned int decode_40bLSB_int(const unsigned char *from); + void encode_32bLSB_int(unsigned char *to, unsigned int from); + unsigned int decode_32bLSB_int(const unsigned char *from); + void encode_24bLSB_int(unsigned char *to, int from); + unsigned int decode_24bLSB_int(const unsigned char *from); + void encode_16bLSB_int(unsigned char *to, int from); + unsigned int decode_16bLSB_int(const unsigned char *from); + void encode_32b_int(unsigned char *to, unsigned int from); + unsigned int decode_32b_int(const unsigned char *from); + void encode_24b_int(unsigned char *to, unsigned int from); + unsigned int decode_24b_int(const unsigned char *from); + void encode_16b_int(unsigned char *to, int from); + unsigned int decode_16b_int(const unsigned char *from); + void skip_par_after_tag(unsigned char* inbuffer, int &offset); + + void GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg); + void GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg); + void SetPointCodes(unsigned int sls, unsigned int opc, unsigned int dpc, unsigned char* msg); + void SetPointCodesIUP(unsigned int cic, unsigned int opc, unsigned int dpc, unsigned char* msg); + int ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len); + void Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par); //for ITU and ANSI + bool Check_M3UA_SingleITUAPC(unsigned int pc, unsigned char* apc_par); + void Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int &offset ); + void processing_MTP3_management_msg(unsigned char* inbuff,int len); + void processing_MTP3_test_msg(unsigned char* inbuff,int len); + int processing_M3UA_MGMT_msg(unsigned char* inbuff,int len); + int processing_M3UA_Transfer_msg(unsigned char* inbuff,int len); + int processing_M3UA_SSNM_msg(unsigned char* inbuff,int len); + int processing_M3UA_ASPSM_msg(unsigned char* inbuff,int len); + int processing_M3UA_ASPTM_msg(unsigned char* inbuff,int len); + int processing_M3UA_RKM_msg(unsigned char* inbuff,int len); + int processing_M3UA_unsupported_msg_class(unsigned char* inbuff,int len); + int Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff); + void send_msg(unsigned char *outbuff, int length); + void send_M3UA_error_msg(unsigned int error_code, unsigned int add_par ); + void Check_TestPort_Variables(); + void Check_TestPort_Variables_STC(); +#endif +#ifdef TARGET_TEST + void Check_Target_TestPort_Variables(); + void Check_Target_TestPort_Variables_STC(); + + //Functions for abstract socket handling + void message_incoming(const unsigned char*, int length, int client_id = -1); + void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); } + void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); } + void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); } + void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); } + void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); } + void Handler_Uninstall() { Uninstall_Handler(); } + void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) { + Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic); + } + const char* local_address_name() { return "localIPAddr";} + const char* local_port_name() { return "localPort";} + const char* remote_address_name(){ return "M3UAtarget_TCP_IPAddr";} + const char* remote_port_name() { return "M3UAtarget_TCP_Port";} + const char* halt_on_connection_reset_name(){ return "halt_on_connection_reset";} + const char* server_mode_name() { return "client_mode";} + const char* socket_debugging_name(){ return "socket_debugging";} + const char* nagling_name() { return "nagling";} + const char* server_backlog_name(){ return "server_backlog";} + const PacketHeaderDescr* Get_Header_Descriptor() const {return header_descr;} +#endif + +private: + void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); + void Handle_Timeout(double time_since_last_call); + + unsigned char M3UA_version; + int channel; + unsigned char buffer[MAXSIZE]; + char *destinationname; + char *iid_string; + boolean Ni_is_set; + int Loop,Filter,Sut_Pc,Tester_Pc; + typedef enum { AssocDown, AssocEstabl, AssocInac, AssocActive} M3UAStateType_t; + M3UAStateType_t M3UAState; + int mtp3_ni; // network indicator in case of MTP3 + int stored_bttc_octet; // used for storage of an additional first byte in MTP3bttc + +#ifndef TARGET_TEST + MPH_IID iid; + CONNECTION *myConnection; +#endif + bool forward_resume, forward_pause, forward_status; +#ifdef TARGET_TEST + int Tcp_is_up; + PacketHeaderDescr *header_descr; + bool is_packet_hdr_length_offset, is_packet_hdr_nr_bytes_in_length, + is_packet_hdr_byte_order; + int packet_hdr_length_offset, packet_hdr_nr_bytes_in_length; + PacketHeaderDescr::HeaderByteOrder packet_hdr_byte_order; +#endif +}; + +extern BOOLEAN f__MTP3__SEA__connect__extern + (MTP3asp__PT_PROVIDER& portRef, const CHARSTRING& Hostname, + const INTEGER& Port, const CHARSTRING& EntityName,const BOOLEAN& Http); + +extern BOOLEAN f__MTP3__SEA__disconnect__extern + (MTP3asp__PT_PROVIDER& portRef); + +} +#endif diff --git a/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn b/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn new file mode 100644 index 00000000..7c5a06b4 --- /dev/null +++ b/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn @@ -0,0 +1,66 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// 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) have been supplied // +// // +/////////////////////////////////////////////////////////////////////////////// +// +// File: MTP3asp_PortType.ttcn +// Reference: ITU-T Recommendation Q.704, RFC3332 +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2008-02-07 +// Contact: http://ttcn.ericsson.se + +module MTP3asp_PortType +{ + + import from MTP3asp_Types all; +// ************************************************************************* +// * MTP3 port type definitions * +// ************************************************************************* + + // MTP3 port type used by the component up to the MTP3 SAP + // (eg. any component connected to the MTP3 test port) + type port MTP3asp_PT message + { + in ASP_MTP3_TRANSFERind; + in ASP_MTP3_PAUSE; + in ASP_MTP3_RESUME; + in ASP_MTP3_STATUS; + out ASP_MTP3_TRANSFERreq; + } with {extension "provider internal"} //!!ethlel + + // MTP3 port type used by the component up to the MTP3 SAP + // (e.g. the distribution component) + type port MTP3asp_SP_PT message + { + in ASP_MTP3_TRANSFERreq; + out ASP_MTP3_TRANSFERind; + } + with {extension "internal"} + +//Connecting functions +//---------------------------- +/* +ethlel + +external function f_MTP3_SEA_connect + ( inout MTP3asp_PT portRef, + in charstring Hostname, + in integer Port, + in charstring EntityName, + in boolean Http //or MPH Port is provided + )return boolean; + +external function f_MTP3_SEA_disconnect + ( inout MTP3asp_PT portRef + )return boolean; +*/ + + +}//eof module diff --git a/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn b/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn new file mode 100644 index 00000000..e96f4201 --- /dev/null +++ b/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn @@ -0,0 +1,324 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2006 // +// // +// 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: MTP3asp_Types.ttcn +// Description: CCSS7 Message Transfer Part primitive (ASP) definitions +// according to specification ITU-T SS7 MTP3, +// Reference: ITU-T Recommendation Q.704, RFC3332, ANSI T.1.111.1-2001, TCC +// Rev: R11A01 +// Prodnr: CNL 113 337 +// Updated: 2007-09-17 +// Contact: http://ttcn.ericsson.se +// +module MTP3asp_Types.objid + { + itu_t(0) identified_organization (4) etsi(0) reserved(127) + etsi_identified_organization(0) ericsson(5) testing (0) + generic(0) mtp3(0) v96(3) aspDefinitions(3) patchNo(0) + } + +{//start of the module + +// ************************************************************************* +// External encoding/decoding functions +// ************************************************************************* + +external function enc_MTP3_to_M3UAserver_msg (in MTP3_to_M3UAserver_msg pdu) + return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; + +external function dec_MTP3_to_M3UAserver_msg(in octetstring stream) + return MTP3_to_M3UAserver_msg + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + + +// ************************************************************************* +// * Type Definitions Part * +// ************************************************************************* +group Types +{ + group MessageTypes + { + group ASPs + { + //*********************************************************************** + //* ASP type definitions * + //* Note, that ASP types shall be TTCN-3 definitions to allow * + //* the use of anytype in the data field * + //*********************************************************************** + + type record MTP3_Field_sio + { + bitstring ni length(2), + bitstring prio length(2), + bitstring si length(4) + } with { variant "FIELDORDER(msb)"; + }; + + type record ASP_MTP3_TRANSFERind + { + MTP3_Field_sio sio, + integer opc, + integer dpc, + integer sls, + octetstring data + } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (sls) "FIELDLENGTH(8)" + }; + + type record ASP_MTP3_PAUSE {}; + + type record ASP_MTP3_RESUME {}; + + type record ASP_MTP3_STATUS {}; + + type record ASP_MTP3_TRANSFERreq + { + MTP3_Field_sio sio, + integer opc, + integer dpc, + integer sls, + octetstring data + } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (sls) "FIELDLENGTH(8)" + }; + }//end group ASPs + + //*********************************************************************** + //* Type definition of the message which is sent between MTP3 test port * + //* and SCTP server over TCP. * + //*********************************************************************** + group MTP3_SCTPserver + { + type record ASP_REGISTER_M3UA + { + integer ni (0..3), + integer sut_pc, + integer tester_pc, + integer m3ua_version, + charstring entity + } with { variant (ni) "FIELDLENGTH(8)"; + variant (sut_pc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (tester_pc) "BYTEORDER(last), FIELDLENGTH(32)"; + variant (m3ua_version) "FIELDLENGTH(8)" + }; + + + // Possible values: + // MTP3_to_SCTPserver_data/status: + const integer reg_ok_status := 0; + const integer reg_error_status := 1; + const integer unreg_ok_status := 2; + const integer unreg_error_status := 3; + + const integer send_error_status := 5; + const integer kill_status := 255; + + // MTP3_to_SCTPserver_data/pause: + const integer SCTP_COMLOST_pause := 0; + const integer M3UA_ASPDN_pause := 1; + const integer M3UA_ASPIA_pause := 2; + + // MTP3_to_SCTPserver_data/resume: + const integer ok_resume := 0; + + type union MTP3_to_SCTPserver_data + { + ASP_MTP3_TRANSFERind transfer_ind, + ASP_MTP3_TRANSFERreq transfer_req, + ASP_REGISTER_M3UA register, + integer unregister (0..255), + integer status (0..255), + integer pause (0..255), + integer resume (0..255) + } + + // MTP3_to_M3UAserver_msg/msgType: + const integer transfer_ind_msgType := 0; + const integer transfer_req_msgType := 1; + const integer register_msgType := 2; + const integer unregister_msgType := 3; + const integer status_msgType := 4; + const integer pause_msgType := 5; + const integer resume_msgType := 6; + + type record MTP3_to_M3UAserver_msg + { + integer msgType (0..255), + integer msgLength, + MTP3_to_SCTPserver_data data + } with { variant (data) "CROSSTAG( + transfer_ind, msgType = transfer_ind_msgType; + transfer_req, msgType = transfer_req_msgType; + register, msgType = register_msgType; + unregister, msgType = unregister_msgType; + status, msgType = status_msgType; + pause, msgType = pause_msgType; + resume, msgType = resume_msgType )"; + variant (msgLength) "FIELDLENGTH(32)"; + variant (msgLength) "LENGTHTO(msgType,msgLength,data)"; + variant (msgLength) "BYTEORDER(last)" + }; + }//end group MTP3_SCTPserver + }//end group Messagetypes +} with {encode "RAW"}//Types + +group Templates +{ + group MessageTemplates + { + group ASPtemplates + { + // ******************************************************************* + // * ASP template definitions * + // ******************************************************************* + + // Base templates + // These general templates can be used as an example or as a base + // template for other templates. + template ASP_MTP3_TRANSFERind t_ASP_MTP3_TRANSFERind + ( + template MTP3_Field_sio pl_SIO, + template integer pl_OPC, + template integer pl_DPC, + template integer pl_SLS, + template octetstring pl_data + ):= + { + sio := pl_SIO, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_sio + ( + template bitstring pl_NI, + template bitstring pl_PRIO, + template bitstring pl_SI, + template integer pl_OPC, + template integer pl_DPC, + template integer pl_SLS, + template octetstring pl_data + ):= + { + sio := + { + ni := pl_NI, + prio := pl_PRIO, + si := pl_SI + }, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind := + { + sio := ?, + opc := ?, + dpc := ?, + sls := ?, + data := ? + } + + template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq + ( + MTP3_Field_sio pl_SIO, + integer pl_OPC, + integer pl_DPC, + integer pl_SLS, + octetstring pl_data + ):= + { + sio := pl_SIO, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq_sio + ( + template bitstring pl_NI, + template bitstring pl_PRIO, + template bitstring pl_SI, + template integer pl_OPC, + template integer pl_DPC, + template integer pl_SLS, + template octetstring pl_data + ):= + { + sio := + { + ni := pl_NI, + prio := pl_PRIO, + si := pl_SI + }, + opc := pl_OPC, + dpc := pl_DPC, + sls := pl_SLS, + data := pl_data + } + + template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq := + { + sio := ?, + opc := ?, + dpc := ?, + sls := ?, + data := ? + } + + template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_stc := + { + sio := + { + ni := '00'B, + prio := '00'B, + si := '0000'B + }, + opc := 0, + dpc := 0, + sls := 0, + data := ? + } + + template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq_stc + ( template octetstring pl_data ):= + { + sio := + { + ni := '00'B, + prio := '00'B, + si := '0000'B + }, + opc := 0, + dpc := 0, + sls := 0, + data := pl_data + } + + }//end group ASPtemplates + }//end group Messagetemplates +}//end group Templates + +}//end module + + diff --git a/SCCP_CNL113341/SCCP_CNL113341.tpd b/SCCP_CNL113341/SCCP_CNL113341.tpd new file mode 100644 index 00000000..31e51537 --- /dev/null +++ b/SCCP_CNL113341/SCCP_CNL113341.tpd @@ -0,0 +1,87 @@ + + + + SCCP_CNL113341 + + + + + + + + + + + + + + + + + + + USE_MTP3_DISTRIBUTOR + + + + + true + true + true + bin/SCCP_CNL113341 + Level 3 - Creating object files with dependency update + + + bin + + + + + + + true + true + true + bin/SCCP_CNL113341 + + USE_MTP3_DISTRIBUTOR + + Level 3 - Creating object files with dependency update + + + bin + + + + + + + true + true + true + bin/SCCP_CNL113341 + Level 3 - Creating object files with dependency update + + + bin + + + + + diff --git a/SCCP_CNL113341/demo/General_Types.ttcn b/SCCP_CNL113341/demo/General_Types.ttcn new file mode 120000 index 00000000..354ebf3f --- /dev/null +++ b/SCCP_CNL113341/demo/General_Types.ttcn @@ -0,0 +1 @@ +../../../ProtocolModules/COMMON/src/General_Types.ttcn \ No newline at end of file diff --git a/SCCP_CNL113341/demo/MTP3asp_PT.cc b/SCCP_CNL113341/demo/MTP3asp_PT.cc new file mode 120000 index 00000000..44d08bbf --- /dev/null +++ b/SCCP_CNL113341/demo/MTP3asp_PT.cc @@ -0,0 +1 @@ +../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_PT.cc \ No newline at end of file diff --git a/SCCP_CNL113341/demo/MTP3asp_PT.hh b/SCCP_CNL113341/demo/MTP3asp_PT.hh new file mode 120000 index 00000000..30dfc24c --- /dev/null +++ b/SCCP_CNL113341/demo/MTP3asp_PT.hh @@ -0,0 +1 @@ +../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_PT.hh \ No newline at end of file diff --git a/SCCP_CNL113341/demo/MTP3asp_PortType.ttcn b/SCCP_CNL113341/demo/MTP3asp_PortType.ttcn new file mode 120000 index 00000000..19948640 --- /dev/null +++ b/SCCP_CNL113341/demo/MTP3asp_PortType.ttcn @@ -0,0 +1 @@ +../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn \ No newline at end of file diff --git a/SCCP_CNL113341/demo/MTP3asp_Types.ttcn b/SCCP_CNL113341/demo/MTP3asp_Types.ttcn new file mode 120000 index 00000000..9f03c54e --- /dev/null +++ b/SCCP_CNL113341/demo/MTP3asp_Types.ttcn @@ -0,0 +1 @@ +../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn \ No newline at end of file diff --git a/SCCP_CNL113341/demo/Makefile.ini b/SCCP_CNL113341/demo/Makefile.ini new file mode 100644 index 00000000..4e764a32 --- /dev/null +++ b/SCCP_CNL113341/demo/Makefile.ini @@ -0,0 +1,737 @@ +# This Makefile was generated by the Makefile Generator +# of the TTCN-3 Test Executor version 1.7.pl0 +# for Gabor Bettesch (ethgbh@mwux018) on Tue Apr 3 10:18:42 2007 + +# Copyright 2000-2007 Test Competence Center, Ericsson R & D, Hungary +# For trouble reporting use the tool MTTSMS. +# For TR writers guide please visit the web page: http://ttcn.ericsson.se + +# The following make commands are available: +# - make, make all Builds the executable test suite. +# - make archive Archives all source files. +# - make check Checks the semantics of TTCN-3 and ASN.1 modules. +# - make clean Removes all generated files. +# - make compile Translates TTCN-3 and ASN.1 modules to C++. +# - make dep Creates/updates dependency list. +# - make objects Builds the object files without linking the executable. +# - make preprocess Preprocess TTCN-3 files. +# - make tags Creates/updates tags file using ctags. + +# WARNING! This Makefile can be used with GNU make only. +# Other versions of make may report syntax errors in it. + +# +# Do NOT touch this line... +# +.PHONY: all archive check clean dep objects preprocess + +# +# Set these variables... +# + +# The path of your TTCN-3 Test Executor installation: +# Uncomment this line to override the environment variable. +# TTCN3_DIR = + +# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32) +PLATFORM = SOLARIS8 + +# Your C++ compiler: +CXX = g++ + +# C preprocessor used for TTCN-3 files: +CPP = cpp + +# Flags for the C++ preprocessor (and makedepend as well): +CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(SEA_DIR)/include + +# Flags for preprocessing TTCN-3 files: +CPPFLAGS_TTCN3 = + +# Flags for the C++ compiler: +CXXFLAGS = -Wall + +# Flags for the linker: +LDFLAGS = + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS = -L + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3-parallel + +# The path of your OpenSSL installation: +# If you do not have your own one, leave it unchanged. +OPENSSL_DIR = $(TTCN3_DIR) + +SEA_DIR = /vobs/ttcn/TCC_Releases/Other/SEA_LATEST +# Directory to store the archived source files: +ARCHIVE_DIR = backup + +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = General_Types.ttcn MTP3asp_PortType.ttcn MTP3asp_Types.ttcn SCCP_Emulation.ttcn SCCP_Types.ttcn SCCPasp_Types.ttcn SCCP_selftest.ttcn SCCP_Testcases.ttcn + +# TTCN-3 modules to preprocess: +TTCN3_PP_MODULES = SCCP_Mapping.ttcnpp + +# Files to include in TTCN-3 preprocessed modules: +TTCN3_INCLUDES = + +# ASN.1 modules of this project: +ASN1_MODULES = + +# TTCN-3 source files generated by the C preprocessor: +PREPROCESSED_TTCN3_MODULES = SCCP_Mapping.ttcn + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(TTCN3_PP_MODULES:.ttcnpp=.cc) $(ASN1_MODULES:.asn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) + +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = MTP3asp_PT.cc +USER_HEADERS = MTP3asp_PT.hh + +# Object files of this project that are needed for the executable test suite: +OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) + +# Other files of the project (Makefile, configuration files, etc.) +# that will be added to the archived source files: +OTHER_FILES = Makefile SCCP_selftest.cfg + +# The name of the executable test suite: +TARGET = SCCP_selftest + +# +# Do not modify these unless you know what you are doing... +# Platform specific additional libraries: +# +SOLARIS_LIBS = -lsocket -lnsl +SOLARIS8_LIBS = -lsocket -lnsl +LINUX_LIBS = +FREEBSD_LIBS = +WIN32_LIBS = + +# +# Rules for building the executable... +# + +all: $(TARGET) ; + +objects: $(OBJECTS) ; + +$(TARGET): $(OBJECTS) + $(CXX) $(LDFLAGS) -o $@ $^ \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) \ + $(SEA_DIR)/lib/libmphclib.a + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +%.ttcn: %.ttcnpp $(TTCN3_INCLUDES) + $(CPP) -x c -nostdinc $(CPPFLAGS_TTCN3) $< $@ + +preprocess: $(PREPROCESSED_TTCN3_MODULES) ; + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +check: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) $^ + +compile: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) $^ - $? + touch $@ + +browserdata.dat: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -B -s $(COMPILER_FLAGS) $^ + +tags: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) \ +$(USER_HEADERS) $(USER_SOURCES) + $(TTCN3_DIR)/bin/ctags_ttcn3 --line-directives=yes $^ + +clean: + -$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) $(PREPROCESSED_TTCN3_MODULES) compile \ + browserdata.dat tags *.log + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) + makedepend $(CPPFLAGS) $^ + +archive: + mkdir -p $(ARCHIVE_DIR) + tar -cvhf - $(TTCN3_MODULES) $(TTCN3_PP_MODULES) \ + $(TTCN3_INCLUDES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \ + | gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz + +# +# Add your rules here if necessary... +# + +# DO NOT DELETE + +General_Types.o: General_Types.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +General_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h +General_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +General_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +General_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +General_Types.o: /usr/include/stdio_impl.h +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +General_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +General_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +General_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h +General_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +General_Types.o: /usr/include/sys/select.h /usr/include/time.h +General_Types.o: /usr/include/iso/time_iso.h +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +General_Types.o: /usr/include/regex.h +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +MTP3asp_PortType.o: MTP3asp_PortType.hh MTP3asp_Types.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +MTP3asp_PortType.o: /usr/include/string.h /usr/include/iso/string_iso.h +MTP3asp_PortType.o: /usr/include/sys/feature_tests.h +MTP3asp_PortType.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h +MTP3asp_PortType.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h +MTP3asp_PortType.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +MTP3asp_PortType.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +MTP3asp_PortType.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +MTP3asp_PortType.o: /usr/include/sys/time.h /usr/include/sys/types.h +MTP3asp_PortType.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +MTP3asp_PortType.o: /usr/include/sys/select.h /usr/include/time.h +MTP3asp_PortType.o: /usr/include/iso/time_iso.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +MTP3asp_PortType.o: /usr/include/regex.h +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +MTP3asp_PortType.o: MTP3asp_PT.hh +MTP3asp_PortType.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +MTP3asp_Types.o: MTP3asp_Types.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +MTP3asp_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h +MTP3asp_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +MTP3asp_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +MTP3asp_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +MTP3asp_Types.o: /usr/include/stdio_impl.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +MTP3asp_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +MTP3asp_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +MTP3asp_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h +MTP3asp_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +MTP3asp_Types.o: /usr/include/sys/select.h /usr/include/time.h +MTP3asp_Types.o: /usr/include/iso/time_iso.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +MTP3asp_Types.o: /usr/include/regex.h +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_Emulation.o: SCCP_Emulation.hh SCCP_Mapping.hh SCCP_Types.hh +SCCP_Emulation.o: MTP3asp_PortType.hh MTP3asp_Types.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +SCCP_Emulation.o: /usr/include/string.h /usr/include/iso/string_iso.h +SCCP_Emulation.o: /usr/include/sys/feature_tests.h +SCCP_Emulation.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h +SCCP_Emulation.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h +SCCP_Emulation.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +SCCP_Emulation.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +SCCP_Emulation.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +SCCP_Emulation.o: /usr/include/sys/time.h /usr/include/sys/types.h +SCCP_Emulation.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +SCCP_Emulation.o: /usr/include/sys/select.h /usr/include/time.h +SCCP_Emulation.o: /usr/include/iso/time_iso.h +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +SCCP_Emulation.o: /usr/include/regex.h +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_Emulation.o: MTP3asp_PT.hh +SCCP_Emulation.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +SCCP_Emulation.o: SCCPasp_Types.hh General_Types.hh +SCCP_Types.o: SCCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +SCCP_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h +SCCP_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +SCCP_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +SCCP_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +SCCP_Types.o: /usr/include/stdio_impl.h +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +SCCP_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +SCCP_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +SCCP_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h +SCCP_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +SCCP_Types.o: /usr/include/sys/select.h /usr/include/time.h +SCCP_Types.o: /usr/include/iso/time_iso.h +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +SCCP_Types.o: /usr/include/regex.h +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_Types.o: MTP3asp_PT.hh +SCCP_Types.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +SCCP_Types.o: SCCPasp_Types.hh General_Types.hh +SCCPasp_Types.o: SCCPasp_Types.hh General_Types.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +SCCPasp_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h +SCCPasp_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +SCCPasp_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +SCCPasp_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +SCCPasp_Types.o: /usr/include/stdio_impl.h +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +SCCPasp_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +SCCPasp_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +SCCPasp_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h +SCCPasp_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +SCCPasp_Types.o: /usr/include/sys/select.h /usr/include/time.h +SCCPasp_Types.o: /usr/include/iso/time_iso.h +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +SCCPasp_Types.o: /usr/include/regex.h +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_selftest.o: SCCP_selftest.hh SCCP_Emulation.hh SCCP_Mapping.hh +SCCP_selftest.o: SCCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +SCCP_selftest.o: /usr/include/string.h /usr/include/iso/string_iso.h +SCCP_selftest.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +SCCP_selftest.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +SCCP_selftest.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +SCCP_selftest.o: /usr/include/stdio_impl.h +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +SCCP_selftest.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +SCCP_selftest.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +SCCP_selftest.o: /usr/include/sys/time.h /usr/include/sys/types.h +SCCP_selftest.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +SCCP_selftest.o: /usr/include/sys/select.h /usr/include/time.h +SCCP_selftest.o: /usr/include/iso/time_iso.h +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +SCCP_selftest.o: /usr/include/regex.h +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_selftest.o: MTP3asp_PT.hh +SCCP_selftest.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +SCCP_selftest.o: SCCPasp_Types.hh General_Types.hh +SCCP_Testcases.o: SCCP_Testcases.hh SCCP_Emulation.hh SCCP_Mapping.hh +SCCP_Testcases.o: SCCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +SCCP_Testcases.o: /usr/include/string.h /usr/include/iso/string_iso.h +SCCP_Testcases.o: /usr/include/sys/feature_tests.h +SCCP_Testcases.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h +SCCP_Testcases.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h +SCCP_Testcases.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +SCCP_Testcases.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +SCCP_Testcases.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +SCCP_Testcases.o: /usr/include/sys/time.h /usr/include/sys/types.h +SCCP_Testcases.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +SCCP_Testcases.o: /usr/include/sys/select.h /usr/include/time.h +SCCP_Testcases.o: /usr/include/iso/time_iso.h +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +SCCP_Testcases.o: /usr/include/regex.h +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_Testcases.o: MTP3asp_PT.hh +SCCP_Testcases.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +SCCP_Testcases.o: SCCPasp_Types.hh General_Types.hh +SCCP_Mapping.o: SCCP_Mapping.hh SCCP_Types.hh MTP3asp_PortType.hh +SCCP_Mapping.o: MTP3asp_Types.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +SCCP_Mapping.o: /usr/include/string.h /usr/include/iso/string_iso.h +SCCP_Mapping.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +SCCP_Mapping.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +SCCP_Mapping.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +SCCP_Mapping.o: /usr/include/stdio_impl.h +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +SCCP_Mapping.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h +SCCP_Mapping.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +SCCP_Mapping.o: /usr/include/sys/time.h /usr/include/sys/types.h +SCCP_Mapping.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +SCCP_Mapping.o: /usr/include/sys/select.h /usr/include/time.h +SCCP_Mapping.o: /usr/include/iso/time_iso.h +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +SCCP_Mapping.o: /usr/include/regex.h +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +SCCP_Mapping.o: MTP3asp_PT.hh +SCCP_Mapping.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +SCCP_Mapping.o: SCCPasp_Types.hh General_Types.hh +MTP3asp_PT.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h +MTP3asp_PT.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h +MTP3asp_PT.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h +MTP3asp_PT.o: /usr/include/stdio_impl.h /usr/include/stdlib.h +MTP3asp_PT.o: /usr/include/iso/stdlib_iso.h /usr/include/sys/types.h +MTP3asp_PT.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h +MTP3asp_PT.o: /usr/include/sys/select.h /usr/include/sys/time.h +MTP3asp_PT.o: /usr/include/time.h /usr/include/iso/time_iso.h +MTP3asp_PT.o: /usr/include/netinet/in.h /usr/include/sys/stream.h +MTP3asp_PT.o: /usr/include/sys/vnode.h /usr/include/sys/t_lock.h +MTP3asp_PT.o: /usr/include/sys/machlock.h /usr/include/sys/param.h +MTP3asp_PT.o: /usr/include/sys/unistd.h /usr/include/sys/mutex.h +MTP3asp_PT.o: /usr/include/sys/rwlock.h /usr/include/sys/semaphore.h +MTP3asp_PT.o: /usr/include/sys/condvar.h /usr/include/sys/time_impl.h +MTP3asp_PT.o: /usr/include/sys/cred.h /usr/include/sys/uio.h +MTP3asp_PT.o: /usr/include/sys/resource.h /usr/include/vm/seg_enum.h +MTP3asp_PT.o: /usr/include/sys/poll.h /usr/include/sys/strmdep.h +MTP3asp_PT.o: /usr/include/sys/model.h /usr/include/sys/strft.h +MTP3asp_PT.o: /usr/include/sys/byteorder.h /usr/include/netdb.h +MTP3asp_PT.o: /usr/include/sys/socket.h /usr/include/sys/netconfig.h +MTP3asp_PT.o: /usr/include/sys/un.h /usr/include/net/if_dl.h +MTP3asp_PT.o: /usr/include/sys/wait.h /usr/include/sys/siginfo.h +MTP3asp_PT.o: /usr/include/sys/machsig.h /usr/include/sys/procset.h +MTP3asp_PT.o: /usr/include/unistd.h /usr/include/arpa/inet.h +MTP3asp_PT.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h +MTP3asp_PT.o: /usr/include/string.h /usr/include/iso/string_iso.h +MTP3asp_PT.o: MTP3asp_PT.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh +MTP3asp_PT.o: /usr/include/regex.h +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh +MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh +MTP3asp_PT.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h +MTP3asp_PT.o: MTP3asp_Types.hh MTP3asp_PortType.hh diff --git a/SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log b/SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log new file mode 100644 index 00000000..b8b30219 --- /dev/null +++ b/SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log @@ -0,0 +1,2141 @@ +18:21:32.381643 hc TTCN-3 Host Controller started on duna199. +18:21:32.385186 hc The address of MC was set to duna199[159.107.196.57]:38400 +18:21:32.387940 hc Connected to MC. +18:21:41.084400 hc Processing configuration data received from MC. +18:21:41.161669 hc Module SCCP has the following parameters: tsp_maxLocalReference := 16777216.000000, tsp_max_ConnectionId := 16777216.000000, tsp_force_xudt := 1, tsp_SIF_MaxLength := 272 +18:21:41.162623 hc Module SCCP_selftest has the following parameters: tsp_own_GT := '14377760'H, tsp_remote_GT := '14375760'H, tsp_SSN := 2, tsp_SIO := '83'O, tsp_own_SPC := 16382, tsp_remote_SPC := 16383, tsp_SLS := 0, tsp_sccp_serviceType := "mtp3_ansi" +18:21:41.163400 hc Module SCCP_typedefs has the following parameters: tspc_timer_T_conn_est := 120.000000, tspc_timer_T_ias := 600.000000, tspc_timer_T_iar := 1260.000000, tspc_timer_T_rel := 20.000000, tspc_timer_T_repeat_rel := 20.000000, tspc_timer_T_int := 60.000000, tspc_timer_T_guard := 1500.000000, tspc_timer_T_reset := 20.000000, tspc_timer_T_internal_reset := 0.000000, tspc_timer_guard := 120.000000 +18:21:41.164026 hc Initializing module MTP3_ASPs. +18:21:41.164735 hc Initialization of module MTP3_ASPs finished. +18:21:41.165299 hc Initializing module SCCP. +18:21:41.166336 hc Initializing module general_typedefs. +18:21:41.166948 hc Initialization of module general_typedefs finished. +18:21:41.167549 hc Initializing module SCCP_typedefs. +18:21:41.168099 hc Initializing module SCCP_ASPs. +18:21:41.169077 hc Initialization of module SCCP_ASPs finished. +18:21:41.169895 hc Initialization of module SCCP_typedefs finished. +18:21:41.171837 hc Initialization of module SCCP finished. +18:21:41.172467 hc Initializing module SCCP_EncDec. +18:21:41.173044 hc Initialization of module SCCP_EncDec finished. +18:21:41.173588 hc Initializing module SCCP_selftest. +18:21:41.174158 hc Initialization of module SCCP_selftest finished. +18:21:41.175585 hc Configuration file was processed successfully. +18:21:41.191379 hc MTC was created. Process id: 25833. +18:21:41.236537 mtc TTCN-3 Main Test Component started on duna199. +18:21:41.242045 mtc Connected to MC. +18:21:45.199426 mtc Executing test case tc_ConnlessSendingShortASP in module SCCP_selftest. +18:21:45.200795 mtc Test case tc_ConnlessSendingShortASP started. +18:21:45.201500 mtc Ports of component type MTC_CT were initialized. +18:21:45.202177 mtc Port PCO_A was started. +18:21:45.202752 mtc Port PCO_B was started. +18:21:45.204047 mtc v_Boot: { + own_GT := '14377760'H, + remote_GT := '14375760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16382, + remote_SPC := 16383, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} +18:21:45.204729 mtc v_BootB: { + own_GT := '14375760'H, + remote_GT := '14377760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16383, + remote_SPC := 16382, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} +18:21:45.205333 mtc Creating new PTC with component type MTPsim_CT. +18:21:45.221298 hc PTC was created. Component reference: 3, component type: MTPsim_CT, process id: 25834. +18:21:45.264675 3 TTCN-3 Parallel Test Component started on duna199. Component reference: 3, component type: MTPsim_CT. +18:21:45.269726 3 Connected to MC. +18:21:45.270497 mtc PTC was created. Component reference: 3. +18:21:45.271118 mtc Creating new PTC with component type SCCP_EncDec_comptype. +18:21:45.272412 3 Ports of component type MTPsim_CT were initialized. +18:21:45.274405 3 Port MTP_portA was started. +18:21:45.275097 3 Port MTP_portB was started. +18:21:45.309134 hc PTC was created. Component reference: 4, component type: SCCP_EncDec_comptype, process id: 25835. +18:21:45.349568 4 TTCN-3 Parallel Test Component started on duna199. Component reference: 4, component type: SCCP_EncDec_comptype. +18:21:45.355068 4 Connected to MC. +18:21:45.356259 mtc PTC was created. Component reference: 4. +18:21:45.356923 mtc Creating new PTC with component type SCCP_comptype. +18:21:45.358309 4 Ports of component type SCCP_EncDec_comptype were initialized. +18:21:45.359056 4 Port MTP3sccpEncDec_PCO was started. +18:21:45.359861 4 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered +18:21:45.360447 4 Port MTP3user_sccp_PCO was started. +18:21:45.392629 hc PTC was created. Component reference: 5, component type: SCCP_comptype, process id: 25836. +18:21:45.420667 5 TTCN-3 Parallel Test Component started on duna199. Component reference: 5, component type: SCCP_comptype. +18:21:45.426421 5 Connected to MC. +18:21:45.427258 mtc PTC was created. Component reference: 5. +18:21:45.427896 mtc Connecting ports 4:MTP3user_sccp_PCO and 3:MTP_portA. +18:21:45.431119 4 Port MTP3user_sccp_PCO is waiting for connection from 3:MTP_portA on TCP port 38406. +18:21:45.433281 3 Port MTP_portA has established the connection with 4:MTP3user_sccp_PCO. +18:21:45.435413 mtc Connect operation finished. +18:21:45.436566 mtc Connecting ports 5:MTP3sccp_PCO and 4:MTP3sccpEncDec_PCO. +18:21:45.437940 4 Port MTP3user_sccp_PCO has accepted the connection from 3:MTP_portA. +18:21:45.439013 5 Ports of component type SCCP_comptype were initialized. +18:21:45.439756 5 Port MTP3sccp_PCO was started. +18:21:45.440445 5 Port SCCP_PCO was started. +18:21:45.442861 5 Port MTP3sccp_PCO is waiting for connection from 4:MTP3sccpEncDec_PCO on TCP port 38408. +18:21:45.445256 4 Port MTP3sccpEncDec_PCO has established the connection with 5:MTP3sccp_PCO. +18:21:45.463598 mtc Connect operation finished. +18:21:45.464271 mtc Connecting ports mtc:PCO_A and 5:SCCP_PCO. +18:21:45.471897 mtc Port PCO_A is waiting for connection from 5:SCCP_PCO on TCP port 38410. +18:21:45.475092 5 Port MTP3sccp_PCO has accepted the connection from 4:MTP3sccpEncDec_PCO. +18:21:45.478859 mtc Port PCO_A has accepted the connection from 5:SCCP_PCO. +18:21:45.479620 mtc Connect operation finished. +18:21:45.480218 mtc Creating new PTC with component type SCCP_EncDec_comptype. +18:21:45.481484 5 Port SCCP_PCO has established the connection with mtc:PCO_A. +18:21:45.515409 hc PTC was created. Component reference: 6, component type: SCCP_EncDec_comptype, process id: 25837. +18:21:45.536738 6 TTCN-3 Parallel Test Component started on duna199. Component reference: 6, component type: SCCP_EncDec_comptype. +18:21:45.542075 6 Connected to MC. +18:21:45.542872 mtc PTC was created. Component reference: 6. +18:21:45.543505 mtc Creating new PTC with component type SCCP_comptype. +18:21:45.544857 6 Ports of component type SCCP_EncDec_comptype were initialized. +18:21:45.545594 6 Port MTP3sccpEncDec_PCO was started. +18:21:45.547107 6 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered +18:21:45.547695 6 Port MTP3user_sccp_PCO was started. +18:21:45.563127 hc PTC was created. Component reference: 7, component type: SCCP_comptype, process id: 25838. +18:21:45.606608 7 TTCN-3 Parallel Test Component started on duna199. Component reference: 7, component type: SCCP_comptype. +18:21:45.611933 7 Connected to MC. +18:21:45.612740 mtc PTC was created. Component reference: 7. +18:21:45.613371 mtc Connecting ports 6:MTP3user_sccp_PCO and 3:MTP_portB. +18:21:45.622919 6 Port MTP3user_sccp_PCO is waiting for connection from 3:MTP_portB on TCP port 38414. +18:21:45.625194 3 Port MTP_portB has established the connection with 6:MTP3user_sccp_PCO. +18:21:45.628002 mtc Connect operation finished. +18:21:45.628661 mtc Connecting ports 7:MTP3sccp_PCO and 6:MTP3sccpEncDec_PCO. +18:21:45.630008 6 Port MTP3user_sccp_PCO has accepted the connection from 3:MTP_portB. +18:21:45.631064 7 Ports of component type SCCP_comptype were initialized. +18:21:45.631815 7 Port MTP3sccp_PCO was started. +18:21:45.632502 7 Port SCCP_PCO was started. +18:21:45.634990 7 Port MTP3sccp_PCO is waiting for connection from 6:MTP3sccpEncDec_PCO on TCP port 38416. +18:21:45.654225 6 Port MTP3sccpEncDec_PCO has established the connection with 7:MTP3sccp_PCO. +18:21:45.657305 mtc Connect operation finished. +18:21:45.657970 mtc Connecting ports mtc:PCO_B and 7:SCCP_PCO. +18:21:45.660027 mtc Port PCO_B is waiting for connection from 7:SCCP_PCO on TCP port 38418. +18:21:45.661448 7 Port MTP3sccp_PCO has accepted the connection from 6:MTP3sccpEncDec_PCO. +18:21:45.664441 mtc Port PCO_B has accepted the connection from 7:SCCP_PCO. +18:21:45.665199 mtc Connect operation finished. +18:21:45.666237 mtc Starting function MTPsim_EventHandler() on component 3. +18:21:45.667397 mtc Function MTPsim_EventHandler was started. +18:21:45.668124 mtc Starting function ScanRAWPorts() on component 4. +18:21:45.669265 mtc Function ScanRAWPorts was started. +18:21:45.669965 mtc Starting function SCCPStart( { + own_GT := '14377760'H, + remote_GT := '14375760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16382, + remote_SPC := 16383, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) on component 5. +18:21:45.671152 mtc Function SCCPStart was started. +18:21:45.671741 mtc Starting function ScanRAWPorts() on component 6. +18:21:45.672848 mtc Function ScanRAWPorts was started. +18:21:45.673470 mtc Starting function SCCPStart( { + own_GT := '14375760'H, + remote_GT := '14377760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16383, + remote_SPC := 16382, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) on component 7. +18:21:45.674608 mtc Function SCCPStart was started. +18:21:45.675177 mtc init() is done +18:21:45.677985 mtc Start timer: 120 s +18:21:45.679932 mtc Sent on PCO_A to 5 N_UNITDATA_req { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '12345678901234567890'O, + importance := omit +} +18:21:45.696998 3 Starting function MTPsim_EventHandler() +18:21:45.698443 4 Starting function ScanRAWPorts() +18:21:45.701026 5 Received on SCCP_PCO from mtc N_UNITDATA_req { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '12345678901234567890'O, + importance := omit +} id 1 +18:21:45.702391 5 Starting function SCCPStart( { + own_GT := '14377760'H, + remote_GT := '14375760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16382, + remote_SPC := 16383, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) +18:21:45.722883 5 v_sccp_pdu_maxlen:265 +18:21:45.725239 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_req. +18:21:45.726734 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_res. +18:21:45.727329 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DATA_req. +18:21:45.727949 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DISCONNECT_req. +18:21:45.728805 5 Message with id 1 was extracted from the queue of SCCP_PCO. +18:21:45.730071 5 Encoding PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } +} +18:21:45.731289 5 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O +18:21:45.732056 5 Encoding PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } +} +18:21:45.732925 5 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O +18:21:45.734284 5 Random generator was initialized with seed 13.733935. +18:21:45.735117 5 Function rnd() returned 0.227768. +18:21:45.737985 5 Sent on MTP3sccp_PCO to 4 ASP_MTP3_TRANSFERreq_sccp { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 10, + data := '12345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '3A4F07'O + }, + importance := omit + }, + eop := omit + } + } +} +18:21:45.755078 5 Last remaining Segment:'0000'B +18:21:45.758317 4 Received on MTP3sccpEncDec_PCO from 5 ASP_MTP3_TRANSFERreq_sccp { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 10, + data := '12345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '3A4F07'O + }, + importance := omit + }, + eop := omit + } + } +} id 1 +18:21:45.759685 4 Message with id 1 was extracted from the queue of MTP3sccpEncDec_PCO. +18:21:45.760414 4 Encoding PDU_SCCP: { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 10, + data := '12345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '3A4F07'O + }, + importance := omit + }, + eop := omit + } +} +18:21:45.782218 4 Encoded PDU_SCCP: '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O +18:21:45.783241 4 Sent on MTP3user_sccp_PCO to 3 ASP_MTP3_TRANSFERreq { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O +} +18:21:45.784644 3 Received on MTP_portA from 4 ASP_MTP3_TRANSFERreq { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O +} id 1 +18:21:45.785139 3 Message with id 1 was extracted from the queue of MTP_portA. +18:21:45.786161 3 Sent on MTP_portB to 6 ASP_MTP3_TRANSFERind { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O +} +18:21:45.787838 6 Received on MTP3user_sccp_PCO from 3 ASP_MTP3_TRANSFERind { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O +} id 1 +18:21:45.788900 6 Starting function ScanRAWPorts() +18:21:45.789920 6 Message with id 1 was extracted from the queue of MTP3user_sccp_PCO. +18:21:45.790662 6 Decoding PDU_SCCP: '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O +18:21:45.795388 6 Decoded PDU_SCCP: { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 36, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 10, + data := '12345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '3A4F07'O + }, + importance := omit + }, + eop := omit + } +} +18:21:45.821005 6 Sent on MTP3sccpEncDec_PCO to 7 PDU_SCCP_ExtUnitdata { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 36, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 10, + data := '12345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '3A4F07'O + }, + importance := omit + }, + eop := omit +} +18:21:45.822432 7 Port SCCP_PCO has established the connection with mtc:PCO_B. +18:21:45.824903 7 Received on MTP3sccp_PCO from 6 PDU_SCCP_ExtUnitdata { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 36, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 10, + data := '12345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '3A4F07'O + }, + importance := omit + }, + eop := omit +} id 1 +18:21:45.845099 7 Starting function SCCPStart( { + own_GT := '14375760'H, + remote_GT := '14377760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16383, + remote_SPC := 16382, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) +18:21:45.846866 7 v_sccp_pdu_maxlen:265 +18:21:45.849069 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Unitdata. +18:21:45.849964 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_UnitdataService. +18:21:45.850594 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRequest. +18:21:45.851248 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionConfirm. +18:21:45.851881 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Released. +18:21:45.852527 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ProtDataUnitError. +18:21:45.853160 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ReleaseComplete. +18:21:45.853741 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_InactivityTest. +18:21:45.854352 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetRequest. +18:21:45.873504 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetConfirm. +18:21:45.874250 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRefused. +18:21:45.874833 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_DataForm1. +18:21:45.876205 7 Message with id 1 was extracted from the queue of MTP3sccp_PCO. +18:21:45.877338 7 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O +18:21:45.878490 7 Decoded PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } +} +18:21:45.879493 7 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O +18:21:45.880295 7 Decoded PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } +} +18:21:45.881403 7 Sent on SCCP_PCO to mtc N_UNITDATA_ind { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '12345678901234567890'O, + importance := omit +} +18:21:45.900251 mtc Received on PCO_B from 7 N_UNITDATA_ind { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '12345678901234567890'O, + importance := omit +} id 1 +18:21:45.900917 mtc Message with id 1 was extracted from the queue of PCO_B. +18:21:45.901304 mtc Correct CalledAddress, CallingAddress and userData received, data are correct +18:21:45.901623 mtc setverdict(pass): none -> pass +18:21:45.901959 mtc Stop timer: 120 s +18:21:45.902282 mtc termitate() started +18:21:45.902595 mtc Stopping all components. +18:21:45.907581 3 Stop was requested from MC. +18:21:45.907937 3 Stopping test component execution. +18:21:45.940594 3 Function MTPsim_EventHandler was stopped. PTC terminates. +18:21:45.941545 3 Port MTP_portA was stopped. +18:21:45.942176 3 Port MTP_portB was stopped. +18:21:45.943023 3 Removing unterminated connection between ports MTP_portA and 4:MTP3user_sccp_PCO. +18:21:45.944438 3 Removing unterminated connection between ports MTP_portB and 6:MTP3user_sccp_PCO. +18:21:45.945612 3 Ports of component type MTPsim_CT were shut down. +18:21:45.963063 3 getverdict: none +18:21:45.965312 3 Disconnected from MC. +18:21:45.965518 3 TTCN-3 Parallel Test Component finished. +18:21:45.967406 4 Connection of port MTP3user_sccp_PCO to 3:MTP_portA is lost. +18:21:45.969323 4 Port MTP3user_sccp_PCO was disconnected from 3:MTP_portA. +18:21:45.970071 4 Stop was requested from MC. +18:21:45.970686 4 Stopping test component execution. +18:21:45.997674 4 Function ScanRAWPorts was stopped. PTC terminates. +18:21:45.998715 4 Port MTP3sccpEncDec_PCO was stopped. +18:21:45.999329 4 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered +18:21:45.999934 4 Port MTP3user_sccp_PCO was stopped. +18:21:46.000781 4 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 5:MTP3sccp_PCO. +18:21:46.002220 4 Ports of component type SCCP_EncDec_comptype were shut down. +18:21:46.002866 4 getverdict: none +18:21:46.004760 4 Disconnected from MC. +18:21:46.004970 4 TTCN-3 Parallel Test Component finished. +18:21:46.032470 5 Connection of port MTP3sccp_PCO to 4:MTP3sccpEncDec_PCO is lost. +18:21:46.033807 5 Port MTP3sccp_PCO was disconnected from 4:MTP3sccpEncDec_PCO. +18:21:46.034467 5 Stop was requested from MC. +18:21:46.035074 5 Stopping test component execution. +18:21:46.051967 5 Function SCCPStart was stopped. PTC terminates. +18:21:46.052955 5 Port MTP3sccp_PCO was stopped. +18:21:46.053550 5 Port SCCP_PCO was stopped. +18:21:46.054596 5 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_A. +18:21:46.056442 mtc Connection of port PCO_A to 5:SCCP_PCO is lost. +18:21:46.058014 mtc Port PCO_A was disconnected from 5:SCCP_PCO. +18:21:46.059058 5 Ports of component type SCCP_comptype were shut down. +18:21:46.059660 5 getverdict: none +18:21:46.061555 5 Disconnected from MC. +18:21:46.061761 5 TTCN-3 Parallel Test Component finished. +18:21:46.063188 6 Connection of port MTP3user_sccp_PCO to 3:MTP_portB is lost. +18:21:46.065270 6 Port MTP3user_sccp_PCO was disconnected from 3:MTP_portB. +18:21:46.067053 6 Stop was requested from MC. +18:21:46.068350 6 Stopping test component execution. +18:21:46.115081 6 Function ScanRAWPorts was stopped. PTC terminates. +18:21:46.116539 6 Port MTP3sccpEncDec_PCO was stopped. +18:21:46.117177 6 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered +18:21:46.117788 6 Port MTP3user_sccp_PCO was stopped. +18:21:46.118635 6 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 7:MTP3sccp_PCO. +18:21:46.120040 6 Ports of component type SCCP_EncDec_comptype were shut down. +18:21:46.120672 6 getverdict: none +18:21:46.122539 6 Disconnected from MC. +18:21:46.122745 6 TTCN-3 Parallel Test Component finished. +18:21:46.124069 7 Connection of port MTP3sccp_PCO to 6:MTP3sccpEncDec_PCO is lost. +18:21:46.126591 7 Port MTP3sccp_PCO was disconnected from 6:MTP3sccpEncDec_PCO. +18:21:46.127348 7 Stop was requested from MC. +18:21:46.127955 7 Stopping test component execution. +18:21:46.152223 7 Function SCCPStart was stopped. PTC terminates. +18:21:46.153287 7 Port MTP3sccp_PCO was stopped. +18:21:46.153893 7 Port SCCP_PCO was stopped. +18:21:46.154936 7 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_B. +18:21:46.156829 mtc Connection of port PCO_B to 7:SCCP_PCO is lost. +18:21:46.158368 mtc Port PCO_B was disconnected from 7:SCCP_PCO. +18:21:46.159390 7 Ports of component type SCCP_comptype were shut down. +18:21:46.159990 7 getverdict: none +18:21:46.161049 mtc All components were stopped. +18:21:46.161673 mtc Disconnecting ports 4:MTP3user_sccp_PCO and 3:MTP_portA. +18:21:46.162687 mtc Disconnect operation finished. +18:21:46.163293 mtc Disconnecting ports 5:MTP3sccp_PCO and 4:MTP3sccpEncDec_PCO. +18:21:46.164303 mtc Disconnect operation finished. +18:21:46.164908 mtc Disconnecting ports mtc:PCO_A and 5:SCCP_PCO. +18:21:46.179989 mtc Disconnect operation finished. +18:21:46.180736 mtc Disconnecting ports 6:MTP3user_sccp_PCO and 3:MTP_portB. +18:21:46.181756 mtc Disconnect operation finished. +18:21:46.182361 mtc Disconnecting ports 7:MTP3sccp_PCO and 6:MTP3sccpEncDec_PCO. +18:21:46.183375 mtc Disconnect operation finished. +18:21:46.183981 mtc Disconnecting ports mtc:PCO_B and 7:SCCP_PCO. +18:21:46.184989 mtc Disconnect operation finished. +18:21:46.185569 mtc all components stopped +18:21:46.186455 mtc Stopping test component execution. +18:21:46.201652 mtc Test case tc_ConnlessSendingShortASP was stopped. +18:21:46.202665 mtc Port PCO_A was stopped. +18:21:46.203282 mtc Port PCO_B was stopped. +18:21:46.205397 mtc Ports of component type MTC_CT were shut down. +18:21:46.207477 7 Disconnected from MC. +18:21:46.207705 7 TTCN-3 Parallel Test Component finished. +18:21:46.208587 mtc Waiting for PTCs to finish. +18:21:46.209933 mtc Setting final verdict of the test case. +18:21:46.211165 mtc Local verdict of MTC: pass +18:21:46.211855 mtc Local verdict of PTC with component reference 3: none (pass -> pass) +18:21:46.212456 mtc Local verdict of PTC with component reference 4: none (pass -> pass) +18:21:46.213073 mtc Local verdict of PTC with component reference 5: none (pass -> pass) +18:21:46.213661 mtc Local verdict of PTC with component reference 6: none (pass -> pass) +18:21:46.214802 mtc Local verdict of PTC with component reference 7: none (pass -> pass) +18:21:46.215478 mtc Test case tc_ConnlessSendingShortASP finished. Verdict: pass +18:21:46.217171 mtc Executing test case tc_ConnlessSendingLongASP in module SCCP_selftest. +18:21:46.240225 mtc Test case tc_ConnlessSendingLongASP started. +18:21:46.240961 mtc Ports of component type MTC_CT were initialized. +18:21:46.241578 mtc Port PCO_A was started. +18:21:46.242161 mtc Port PCO_B was started. +18:21:46.242817 mtc v_Boot: { + own_GT := '14377760'H, + remote_GT := '14375760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16382, + remote_SPC := 16383, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} +18:21:46.243457 mtc v_BootB: { + own_GT := '14375760'H, + remote_GT := '14377760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16383, + remote_SPC := 16382, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} +18:21:46.244084 mtc Creating new PTC with component type MTPsim_CT. +18:21:46.245603 hc Test component with component reference 7 finished. Process statistics: { + process id: 25838, + exit status: 0, + user time: 0.020000 s, + system time: 0.020000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:21:46.246717 hc Test component with component reference 6 finished. Process statistics: { + process id: 25837, + exit status: 0, + user time: 0.050000 s, + system time: 0.030000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:21:46.247491 hc Test component with component reference 5 finished. Process statistics: { + process id: 25836, + exit status: 0, + user time: 0.020000 s, + system time: 0.030000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:21:46.264668 hc Test component with component reference 4 finished. Process statistics: { + process id: 25835, + exit status: 0, + user time: 0.040000 s, + system time: 0.030000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:21:46.265568 hc Test component with component reference 3 finished. Process statistics: { + process id: 25834, + exit status: 0, + user time: 0.050000 s, + system time: 0.020000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:21:46.280706 hc PTC was created. Component reference: 8, component type: MTPsim_CT, process id: 25839. +18:21:46.327713 8 TTCN-3 Parallel Test Component started on duna199. Component reference: 8, component type: MTPsim_CT. +18:21:46.333051 8 Connected to MC. +18:21:46.333975 8 Ports of component type MTPsim_CT were initialized. +18:21:46.334733 8 Port MTP_portA was started. +18:21:46.335352 8 Port MTP_portB was started. +18:21:46.336555 mtc PTC was created. Component reference: 8. +18:21:46.337460 mtc Creating new PTC with component type SCCP_EncDec_comptype. +18:21:46.353606 hc PTC was created. Component reference: 9, component type: SCCP_EncDec_comptype, process id: 25840. +18:21:46.398779 9 TTCN-3 Parallel Test Component started on duna199. Component reference: 9, component type: SCCP_EncDec_comptype. +18:21:46.404037 9 Connected to MC. +18:21:46.404841 mtc PTC was created. Component reference: 9. +18:21:46.405504 mtc Creating new PTC with component type SCCP_comptype. +18:21:46.407469 9 Ports of component type SCCP_EncDec_comptype were initialized. +18:21:46.408208 9 Port MTP3sccpEncDec_PCO was started. +18:21:46.409009 9 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered +18:21:46.409590 9 Port MTP3user_sccp_PCO was started. +18:21:46.424385 hc PTC was created. Component reference: 10, component type: SCCP_comptype, process id: 25841. +18:21:46.468205 10 TTCN-3 Parallel Test Component started on duna199. Component reference: 10, component type: SCCP_comptype. +18:21:46.473262 10 Connected to MC. +18:21:46.474045 mtc PTC was created. Component reference: 10. +18:21:46.474720 mtc Connecting ports 9:MTP3user_sccp_PCO and 8:MTP_portA. +18:21:46.478439 9 Port MTP3user_sccp_PCO is waiting for connection from 8:MTP_portA on TCP port 38423. +18:21:46.480561 8 Port MTP_portA has established the connection with 9:MTP3user_sccp_PCO. +18:21:46.482674 mtc Connect operation finished. +18:21:46.483347 mtc Connecting ports 10:MTP3sccp_PCO and 9:MTP3sccpEncDec_PCO. +18:21:46.484727 9 Port MTP3user_sccp_PCO has accepted the connection from 8:MTP_portA. +18:21:46.486409 10 Ports of component type SCCP_comptype were initialized. +18:21:46.487183 10 Port MTP3sccp_PCO was started. +18:21:46.487857 10 Port SCCP_PCO was started. +18:21:46.490270 10 Port MTP3sccp_PCO is waiting for connection from 9:MTP3sccpEncDec_PCO on TCP port 38425. +18:21:46.492618 9 Port MTP3sccpEncDec_PCO has established the connection with 10:MTP3sccp_PCO. +18:21:46.494771 mtc Connect operation finished. +18:21:46.495446 mtc Connecting ports mtc:PCO_A and 10:SCCP_PCO. +18:21:46.497895 mtc Port PCO_A is waiting for connection from 10:SCCP_PCO on TCP port 38427. +18:21:46.499342 10 Port MTP3sccp_PCO has accepted the connection from 9:MTP3sccpEncDec_PCO. +18:21:46.501885 mtc Port PCO_A has accepted the connection from 10:SCCP_PCO. +18:21:46.502633 mtc Connect operation finished. +18:21:46.503254 mtc Creating new PTC with component type SCCP_EncDec_comptype. +18:21:46.504536 10 Port SCCP_PCO has established the connection with mtc:PCO_A. +18:21:46.535166 hc PTC was created. Component reference: 11, component type: SCCP_EncDec_comptype, process id: 25842. +18:21:46.563650 11 TTCN-3 Parallel Test Component started on duna199. Component reference: 11, component type: SCCP_EncDec_comptype. +18:21:46.569136 11 Connected to MC. +18:21:46.569930 mtc PTC was created. Component reference: 11. +18:21:46.570585 mtc Creating new PTC with component type SCCP_comptype. +18:21:46.572003 11 Ports of component type SCCP_EncDec_comptype were initialized. +18:21:46.572757 11 Port MTP3sccpEncDec_PCO was started. +18:21:46.573568 11 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered +18:21:46.574160 11 Port MTP3user_sccp_PCO was started. +18:21:46.607218 hc PTC was created. Component reference: 12, component type: SCCP_comptype, process id: 25843. +18:21:46.634527 12 TTCN-3 Parallel Test Component started on duna199. Component reference: 12, component type: SCCP_comptype. +18:21:46.640248 12 Connected to MC. +18:21:46.641259 mtc PTC was created. Component reference: 12. +18:21:46.641935 mtc Connecting ports 11:MTP3user_sccp_PCO and 8:MTP_portB. +18:21:46.645205 11 Port MTP3user_sccp_PCO is waiting for connection from 8:MTP_portB on TCP port 38431. +18:21:46.647813 8 Port MTP_portB has established the connection with 11:MTP3user_sccp_PCO. +18:21:46.650037 mtc Connect operation finished. +18:21:46.650705 mtc Connecting ports 12:MTP3sccp_PCO and 11:MTP3sccpEncDec_PCO. +18:21:46.652085 11 Port MTP3user_sccp_PCO has accepted the connection from 8:MTP_portB. +18:21:46.653166 12 Ports of component type SCCP_comptype were initialized. +18:21:46.653902 12 Port MTP3sccp_PCO was started. +18:21:46.654568 12 Port SCCP_PCO was started. +18:21:46.674133 12 Port MTP3sccp_PCO is waiting for connection from 11:MTP3sccpEncDec_PCO on TCP port 38433. +18:21:46.677229 11 Port MTP3sccpEncDec_PCO has established the connection with 12:MTP3sccp_PCO. +18:21:46.679496 mtc Connect operation finished. +18:21:46.680172 mtc Connecting ports mtc:PCO_B and 12:SCCP_PCO. +18:21:46.682231 mtc Port PCO_B is waiting for connection from 12:SCCP_PCO on TCP port 38435. +18:21:46.683671 12 Port MTP3sccp_PCO has accepted the connection from 11:MTP3sccpEncDec_PCO. +18:21:46.687028 mtc Port PCO_B has accepted the connection from 12:SCCP_PCO. +18:21:46.687831 mtc Connect operation finished. +18:21:46.688466 mtc Starting function MTPsim_EventHandler() on component 8. +18:21:46.689847 8 Starting function MTPsim_EventHandler() +18:21:46.690910 mtc Function MTPsim_EventHandler was started. +18:21:46.691559 mtc Starting function ScanRAWPorts() on component 9. +18:21:46.692675 mtc Function ScanRAWPorts was started. +18:21:46.693326 mtc Starting function SCCPStart( { + own_GT := '14377760'H, + remote_GT := '14375760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16382, + remote_SPC := 16383, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) on component 10. +18:21:46.694511 mtc Function SCCPStart was started. +18:21:46.695121 mtc Starting function ScanRAWPorts() on component 11. +18:21:46.696900 mtc Function ScanRAWPorts was started. +18:21:46.697568 mtc Starting function SCCPStart( { + own_GT := '14375760'H, + remote_GT := '14377760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16383, + remote_SPC := 16382, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) on component 12. +18:21:46.698723 mtc Function SCCPStart was started. +18:21:46.699310 mtc init() is done +18:21:46.700287 mtc Start timer: 120 s +18:21:46.701466 mtc Sent on PCO_A to 10 N_UNITDATA_req { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O, + importance := omit +} +18:21:46.718626 9 Starting function ScanRAWPorts() +18:21:46.721380 10 Received on SCCP_PCO from mtc N_UNITDATA_req { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O, + importance := omit +} id 1 +18:21:46.742310 10 Starting function SCCPStart( { + own_GT := '14377760'H, + remote_GT := '14375760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16382, + remote_SPC := 16383, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) +18:21:46.743647 10 v_sccp_pdu_maxlen:265 +18:21:46.746564 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_req. +18:21:46.747527 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_res. +18:21:46.748104 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DATA_req. +18:21:46.766884 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DISCONNECT_req. +18:21:46.767864 10 Message with id 1 was extracted from the queue of SCCP_PCO. +18:21:46.769126 10 Encoding PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } +} +18:21:46.770337 10 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O +18:21:46.771120 10 Encoding PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } +} +18:21:46.771979 10 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O +18:21:46.773573 10 Random generator was initialized with seed 14.773216. +18:21:46.774419 10 Function rnd() returned 0.171705. +18:21:46.777342 10 Sent on MTP3sccp_PCO to 9 ASP_MTP3_TRANSFERreq_sccp { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 225, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0001'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } + } +} +18:21:46.797926 9 Received on MTP3sccpEncDec_PCO from 10 ASP_MTP3_TRANSFERreq_sccp { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 225, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0001'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } + } +} id 1 +18:21:46.818423 9 Message with id 1 was extracted from the queue of MTP3sccpEncDec_PCO. +18:21:46.819292 9 Encoding PDU_SCCP: { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 225, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0001'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } +} +18:21:46.840033 9 Encoded PDU_SCCP: '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O +18:21:46.841117 9 Sent on MTP3user_sccp_PCO to 8 ASP_MTP3_TRANSFERreq { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O +} +18:21:46.860927 8 Received on MTP_portA from 9 ASP_MTP3_TRANSFERreq { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O +} id 1 +18:21:46.861875 8 Message with id 1 was extracted from the queue of MTP_portA. +18:21:46.862805 8 Sent on MTP_portB to 11 ASP_MTP3_TRANSFERind { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O +} +18:21:46.864468 10 Sent on MTP3sccp_PCO to 9 ASP_MTP3_TRANSFERreq_sccp { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 75, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '0'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } + } +} +18:21:46.884418 9 Received on MTP3sccpEncDec_PCO from 10 ASP_MTP3_TRANSFERreq_sccp { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 75, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '0'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } + } +} id 2 +18:21:46.885361 9 Message with id 2 was extracted from the queue of MTP3sccpEncDec_PCO. +18:21:46.886556 9 Encoding PDU_SCCP: { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 0, + pointer2 := 0, + pointer3 := 0, + pointer4 := 0, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 75, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '0'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } +} +18:21:46.905406 9 Encoded PDU_SCCP: '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O +18:21:46.906838 9 Sent on MTP3user_sccp_PCO to 8 ASP_MTP3_TRANSFERreq { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O +} +18:21:46.907795 8 Received on MTP_portA from 9 ASP_MTP3_TRANSFERreq { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O +} id 2 +18:21:46.908539 8 Message with id 2 was extracted from the queue of MTP_portA. +18:21:46.909214 8 Sent on MTP_portB to 11 ASP_MTP3_TRANSFERind { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O +} +18:21:46.928654 10 Last remaining Segment:'0000'B +18:21:46.930294 11 Received on MTP3user_sccp_PCO from 8 ASP_MTP3_TRANSFERind { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O +} id 1 +18:21:46.931267 11 Received on MTP3user_sccp_PCO from 8 ASP_MTP3_TRANSFERind { + sio := '83'O, + opc := 16382, + dpc := 16383, + sls := 0, + data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O +} id 2 +18:21:46.932508 11 Starting function ScanRAWPorts() +18:21:46.933526 11 Message with id 1 was extracted from the queue of MTP3user_sccp_PCO. +18:21:46.934374 11 Decoding PDU_SCCP: '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O +18:21:46.958297 11 Decoded PDU_SCCP: { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 251, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 225, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0001'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } +} +18:21:46.960010 11 Sent on MTP3sccpEncDec_PCO to 12 PDU_SCCP_ExtUnitdata { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 251, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 225, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0001'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit +} +18:21:46.979542 11 Message with id 2 was extracted from the queue of MTP3user_sccp_PCO. +18:21:46.980311 11 Decoding PDU_SCCP: '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O +18:21:46.982225 11 Decoded PDU_SCCP: { + extudata := { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 101, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 75, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '0'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit + } +} +18:21:47.002800 11 Sent on MTP3sccpEncDec_PCO to 12 PDU_SCCP_ExtUnitdata { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 101, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 75, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '0'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit +} +18:21:47.004232 12 Port SCCP_PCO has established the connection with mtc:PCO_B. +18:21:47.007365 12 Received on MTP3sccp_PCO from 11 PDU_SCCP_ExtUnitdata { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 251, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 225, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0001'B, + reserved := '00'B, + class := '0'B, + firstSegm := '1'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit +} id 1 +18:21:47.027803 12 Received on MTP3sccp_PCO from 11 PDU_SCCP_ExtUnitdata { + messageType := xudt (17), + protClass := { + class := '0000'B, + messageHandling := '0000'B + }, + hopCounter := 15, + pointer1 := 4, + pointer2 := 15, + pointer3 := 26, + pointer4 := 101, + calledPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737506'O + }, + callingPAddress := { + paramLength := 11, + addr := '07FF3F0002077241737706'O + }, + data := { + paramLength := 75, + data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O + }, + optionalPart := { + segmentation := { + paramName := con_SCCP_segm (16), + paramLength := 4, + remainingSegment := '0000'B, + reserved := '00'B, + class := '0'B, + firstSegm := '0'B, + segmLocalRef := '2BF4DA'O + }, + importance := omit + }, + eop := omit +} id 2 +18:21:47.029096 12 Starting function SCCPStart( { + own_GT := '14375760'H, + remote_GT := '14377760'H, + SSN := 2, + SIO := '83'O, + own_SPC := 16383, + remote_SPC := 16382, + SLS := 0, + sccp_serviceType := "mtp3_ansi" +} ) +18:21:47.049950 12 v_sccp_pdu_maxlen:265 +18:21:47.052171 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Unitdata. +18:21:47.053061 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_UnitdataService. +18:21:47.053634 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRequest. +18:21:47.054301 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionConfirm. +18:21:47.054874 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Released. +18:21:47.055523 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ProtDataUnitError. +18:21:47.056867 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ReleaseComplete. +18:21:47.057484 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_InactivityTest. +18:21:47.058038 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetRequest. +18:21:47.058620 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetConfirm. +18:21:47.059177 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRefused. +18:21:47.059766 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_DataForm1. +18:21:47.060612 12 Message with id 1 was extracted from the queue of MTP3sccp_PCO. +18:21:47.061431 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Unitdata. +18:21:47.062036 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_UnitdataService. +18:21:47.080392 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRequest. +18:21:47.081093 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionConfirm. +18:21:47.081697 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Released. +18:21:47.082255 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ProtDataUnitError. +18:21:47.082850 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ReleaseComplete. +18:21:47.083413 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_InactivityTest. +18:21:47.083998 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetRequest. +18:21:47.084553 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetConfirm. +18:21:47.085145 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRefused. +18:21:47.085972 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_DataForm1. +18:21:47.086667 12 Message with id 2 was extracted from the queue of MTP3sccp_PCO. +18:21:47.087691 12 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O +18:21:47.088831 12 Decoded PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } +} +18:21:47.089819 12 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O +18:21:47.096495 12 Decoded PDU_SCCP_Address_ansi: { + addressIndicator := { + ssnIndicator := '1'B, + pointCodeIndic := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B, + reserved := '0'B + }, + signPointCode := { + present := '000000000011111111111111'B + }, + subsystemNumber := { + present := 2 + }, + globalTitle := { + gti0001 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } +} +18:21:47.097820 12 Sent on SCCP_PCO to mtc N_UNITDATA_ind { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O, + importance := omit +} +18:21:47.099690 mtc Received on PCO_B from 12 N_UNITDATA_ind { + calledAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14375760'H + } + } + }, + callingAddress := { + addressIndicator := { + pointCodeIndic := '1'B, + ssnIndicator := '1'B, + globalTitleIndic := '0001'B, + routingIndicator := '0'B + }, + signPointCode := '000000000011111111111111'B, + subsystemNumber := 2, + globalTitle := { + gti0011 := { + translationType := '07'O, + encodingScheme := '0010'B, + numberingPlan := '0111'B, + globalTitleAddress := '14377760'H + } + } + }, + sequenceControl := '00000000'B, + returnOption := '00000000'B, + userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O, + importance := omit +} id 1 +18:21:47.101242 mtc Message with id 1 was extracted from the queue of PCO_B. +18:21:47.101965 mtc Correct CalledAddress, CallingAddress and userData received, data are correct +18:21:47.102580 mtc setverdict(pass): none -> pass +18:21:47.103230 mtc Stop timer: 120 s +18:21:47.103850 mtc termitate() started +18:21:47.104464 mtc Stopping all components. +18:21:47.106496 8 Stop was requested from MC. +18:21:47.107164 8 Stopping test component execution. +18:21:47.123129 8 Function MTPsim_EventHandler was stopped. PTC terminates. +18:21:47.124103 8 Port MTP_portA was stopped. +18:21:47.124749 8 Port MTP_portB was stopped. +18:21:47.125610 8 Removing unterminated connection between ports MTP_portA and 9:MTP3user_sccp_PCO. +18:21:47.127704 8 Removing unterminated connection between ports MTP_portB and 11:MTP3user_sccp_PCO. +18:21:47.128884 8 Ports of component type MTPsim_CT were shut down. +18:21:47.129510 8 getverdict: none +18:21:47.131756 8 Disconnected from MC. +18:21:47.131976 8 TTCN-3 Parallel Test Component finished. +18:21:47.133209 9 Connection of port MTP3user_sccp_PCO to 8:MTP_portA is lost. +18:21:47.135184 9 Port MTP3user_sccp_PCO was disconnected from 8:MTP_portA. +18:21:47.136358 9 Stop was requested from MC. +18:21:47.137032 9 Stopping test component execution. +18:21:47.162489 9 Function ScanRAWPorts was stopped. PTC terminates. +18:21:47.163557 9 Port MTP3sccpEncDec_PCO was stopped. +18:21:47.164160 9 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered +18:21:47.164766 9 Port MTP3user_sccp_PCO was stopped. +18:21:47.165617 9 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 10:MTP3sccp_PCO. +18:21:47.167692 9 Ports of component type SCCP_EncDec_comptype were shut down. +18:21:47.168343 9 getverdict: none +18:21:47.170258 9 Disconnected from MC. +18:21:47.170470 9 TTCN-3 Parallel Test Component finished. +18:21:47.171868 10 Connection of port MTP3sccp_PCO to 9:MTP3sccpEncDec_PCO is lost. +18:21:47.173933 10 Port MTP3sccp_PCO was disconnected from 9:MTP3sccpEncDec_PCO. +18:21:47.174646 10 Stop was requested from MC. +18:21:47.175246 10 Stopping test component execution. +18:21:47.200504 10 Function SCCPStart was stopped. PTC terminates. +18:21:47.201545 10 Port MTP3sccp_PCO was stopped. +18:21:47.202136 10 Port SCCP_PCO was stopped. +18:21:47.203172 10 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_A. +18:21:47.204521 mtc Connection of port PCO_A to 10:SCCP_PCO is lost. +18:21:47.206622 mtc Port PCO_A was disconnected from 10:SCCP_PCO. +18:21:47.207704 10 Ports of component type SCCP_comptype were shut down. +18:21:47.208293 10 getverdict: none +18:21:47.210197 10 Disconnected from MC. +18:21:47.210401 10 TTCN-3 Parallel Test Component finished. +18:21:47.211716 11 Connection of port MTP3user_sccp_PCO to 8:MTP_portB is lost. +18:21:47.213172 11 Port MTP3user_sccp_PCO was disconnected from 8:MTP_portB. +18:21:47.214488 11 Stop was requested from MC. +18:21:47.215141 11 Stopping test component execution. +18:21:47.240282 11 Function ScanRAWPorts was stopped. PTC terminates. +18:21:47.241361 11 Port MTP3sccpEncDec_PCO was stopped. +18:21:47.241973 11 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered +18:21:47.242584 11 Port MTP3user_sccp_PCO was stopped. +18:21:47.243436 11 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 12:MTP3sccp_PCO. +18:21:47.244858 11 Ports of component type SCCP_EncDec_comptype were shut down. +18:21:47.245503 11 getverdict: none +18:21:47.247937 11 Disconnected from MC. +18:21:47.248146 11 TTCN-3 Parallel Test Component finished. +18:21:47.249639 12 Connection of port MTP3sccp_PCO to 11:MTP3sccpEncDec_PCO is lost. +18:21:47.251689 12 Port MTP3sccp_PCO was disconnected from 11:MTP3sccpEncDec_PCO. +18:21:47.252406 12 Stop was requested from MC. +18:21:47.252990 12 Stopping test component execution. +18:21:47.344052 12 Function SCCPStart was stopped. PTC terminates. +18:21:47.345109 12 Port MTP3sccp_PCO was stopped. +18:21:47.346393 12 Port SCCP_PCO was stopped. +18:21:47.347503 12 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_B. +18:21:47.348853 mtc Connection of port PCO_B to 12:SCCP_PCO is lost. +18:21:47.350357 mtc Port PCO_B was disconnected from 12:SCCP_PCO. +18:21:47.351354 12 Ports of component type SCCP_comptype were shut down. +18:21:47.351934 12 getverdict: none +18:21:47.352955 mtc All components were stopped. +18:21:47.353582 mtc Disconnecting ports 9:MTP3user_sccp_PCO and 8:MTP_portA. +18:21:47.354590 mtc Disconnect operation finished. +18:21:47.355197 mtc Disconnecting ports 10:MTP3sccp_PCO and 9:MTP3sccpEncDec_PCO. +18:21:47.356662 mtc Disconnect operation finished. +18:21:47.357283 mtc Disconnecting ports mtc:PCO_A and 10:SCCP_PCO. +18:21:47.358282 mtc Disconnect operation finished. +18:21:47.358890 mtc Disconnecting ports 11:MTP3user_sccp_PCO and 8:MTP_portB. +18:21:47.359898 mtc Disconnect operation finished. +18:21:47.360508 mtc Disconnecting ports 12:MTP3sccp_PCO and 11:MTP3sccpEncDec_PCO. +18:21:47.361519 mtc Disconnect operation finished. +18:21:47.362127 mtc Disconnecting ports mtc:PCO_B and 12:SCCP_PCO. +18:21:47.363126 mtc Disconnect operation finished. +18:21:47.363708 mtc all components stopped +18:21:47.364307 mtc Stopping test component execution. +18:21:47.365131 mtc Test case tc_ConnlessSendingLongASP was stopped. +18:21:47.366208 mtc Port PCO_A was stopped. +18:21:47.366555 mtc Port PCO_B was stopped. +18:21:47.368393 mtc Ports of component type MTC_CT were shut down. +18:21:47.368667 mtc Waiting for PTCs to finish. +18:21:47.370662 mtc Setting final verdict of the test case. +18:21:47.371019 mtc Local verdict of MTC: pass +18:21:47.371339 mtc Local verdict of PTC with component reference 8: none (pass -> pass) +18:21:47.371635 mtc Local verdict of PTC with component reference 9: none (pass -> pass) +18:21:47.371948 mtc Local verdict of PTC with component reference 10: none (pass -> pass) +18:21:47.372245 mtc Local verdict of PTC with component reference 11: none (pass -> pass) +18:21:47.372560 mtc Local verdict of PTC with component reference 12: none (pass -> pass) +18:21:47.372855 mtc Test case tc_ConnlessSendingLongASP finished. Verdict: pass +18:21:47.402761 12 Disconnected from MC. +18:21:47.402997 12 TTCN-3 Parallel Test Component finished. +18:22:04.264666 mtc Verdict statistics: 0 none (0.00 %), 2 pass (100.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 0 error (0.00 %). +18:22:04.265451 mtc Test execution summary: 2 test cases were executed. Overall verdict: pass. +18:22:04.266260 mtc Exit was requested from MC. Terminating MTC. +18:22:04.269127 mtc Disconnected from MC. +18:22:04.269382 mtc TTCN-3 Main Test Component finished. +18:22:04.270509 hc Test component with component reference 12 finished. Process statistics: { + process id: 25843, + exit status: 0, + user time: 0.020000 s, + system time: 0.070000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:22:04.271775 hc Test component with component reference 11 finished. Process statistics: { + process id: 25842, + exit status: 0, + user time: 0.020000 s, + system time: 0.030000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:22:04.272732 hc Test component with component reference 10 finished. Process statistics: { + process id: 25841, + exit status: 0, + user time: 0.010000 s, + system time: 0.040000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:22:04.274094 hc Test component with component reference 9 finished. Process statistics: { + process id: 25840, + exit status: 0, + user time: 0.020000 s, + system time: 0.020000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:22:04.301155 hc Test component with component reference 1 finished. Process statistics: { + process id: 25833, + exit status: 0, + user time: 0.050000 s, + system time: 0.100000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:22:04.302181 hc Test component with component reference 8 finished. Process statistics: { + process id: 25839, + exit status: 0, + user time: 0.020000 s, + system time: 0.030000 s, + maximum resident set size: 0, + integral resident set size: 0, + page faults not requiring physical I/O: 0, + page faults requiring physical I/O: 0, + swaps: 0, + block input operations: 0, + block output operations 0, + messages sent: 0, + messages received: 0, + signals received: 0, + voluntary context switches: 0, + involuntary context switches: 0 +} +18:22:04.303133 hc Exit was requested from MC. Terminating HC. +18:22:04.314953 hc Disconnected from MC. +18:22:04.315230 hc TTCN-3 Host Controller finished on duna199. diff --git a/SCCP_CNL113341/demo/SCCP_Emulation.ttcn b/SCCP_CNL113341/demo/SCCP_Emulation.ttcn new file mode 120000 index 00000000..fae96059 --- /dev/null +++ b/SCCP_CNL113341/demo/SCCP_Emulation.ttcn @@ -0,0 +1 @@ +../src/SCCP_Emulation.ttcn \ No newline at end of file diff --git a/SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp b/SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp new file mode 120000 index 00000000..aabd0d40 --- /dev/null +++ b/SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp @@ -0,0 +1 @@ +../src/SCCP_Mapping.ttcnpp \ No newline at end of file diff --git a/SCCP_CNL113341/demo/SCCP_Testcases.cfg b/SCCP_CNL113341/demo/SCCP_Testcases.cfg new file mode 100644 index 00000000..ae1c4724 --- /dev/null +++ b/SCCP_CNL113341/demo/SCCP_Testcases.cfg @@ -0,0 +1,55 @@ +[LOGGING] +#FileName := "SCCP_selftest.cfg" +FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := LOG_ALL +#ConsoleMask := TTCN_TESTCASE | TTCN_PORTEVENT | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT +#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +LogSourceInfo := Yes + +[EXECUTE] +#SCCP_selftest.tc_ConnlessSendingShortASP +#SCCP_selftest.tc_ConnlessSendingLongASP +#SCCP_selftest.tc_ConnOrientedShortASPSending +#SCCP_Testcases.tc_ConnlessSendingLongASP +SCCP_Testcases.tc_ConnOrientedShortASPSending + +[TESTPORT_PARAMETERS] +// ******************************************************* +// * DO NOT FORGET TO SET THE FOLLOWING TWO LINE TO YOUR SEA * +// ******************************************************* +system.*.Hostname := "karasea" //sea server name +system.*.HttpPort := "5001" //sea http port +system.*.IID_String := "b303d76a-266c-11d4-b8f5-08002090d3da" + //Device Type ID +system.*.Loop:= "OFF" +system.*.Filter:= "OFF" +system.*.MTP3ServiceType := "MTP3ttc" // ["MTP3itu" (default)|"MTP3ansi" | "M3UA" |"MTP3tcc] + +// CMGW6 -> SCTP_ASSOC_10.2.110.102 +// CMGW3 data: SCTP_ASSOC_10.2.110.2 +system.CMGW6.EntityName := "SAALH-0" //"S7ST-0" //device name to connect +system.CMGW6.NI := "2" +system.CMGW6.SUT_Pc := "2300" +system.CMGW6.TESTER_Pc := "2351" +system.CMGW6.M3UA_version:= "1" + +[MODULE_PARAMETERS] +tsp_own_GT := '14377760'H +tsp_remote_GT := '14375760'H +tsp_SSN := 8 //8:MSC 5:MAP see 3.4.2.2/Q.713 +tsp_SIO := '83'O //SCCP national +tsp_own_SPC := 2351 +tsp_remote_SPC := 2300// max value on 14 bits +tsp_SLS := 0 +#[tsp_sccp_serviceType := "mtp3_itu" |"mtp3b_itu"|"mtp3_ansi"|"mtp3b_ansi"| "mtp3b_tcc"] +tsp_sccp_serviceType := "mtp3_ttc" + +#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 : +#tsp_translationType := 7 +tsp_SIF_MaxLength := 272 +tsp_force_xudt := 0 // 1:yes, 0:no + +[MAIN_CONTROLLER] +TCPPort := 7145 +NumHCs := 1 diff --git a/SCCP_CNL113341/demo/SCCP_Testcases.ttcn b/SCCP_CNL113341/demo/SCCP_Testcases.ttcn new file mode 100644 index 00000000..0f8ba47c --- /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: +// 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 diff --git a/SCCP_CNL113341/demo/SCCP_Types.ttcn b/SCCP_CNL113341/demo/SCCP_Types.ttcn new file mode 120000 index 00000000..9aa343b8 --- /dev/null +++ b/SCCP_CNL113341/demo/SCCP_Types.ttcn @@ -0,0 +1 @@ +../src/SCCP_Types.ttcn \ No newline at end of file diff --git a/SCCP_CNL113341/demo/SCCP_selftest.cfg b/SCCP_CNL113341/demo/SCCP_selftest.cfg new file mode 100644 index 00000000..67e0762d --- /dev/null +++ b/SCCP_CNL113341/demo/SCCP_selftest.cfg @@ -0,0 +1,52 @@ +[LOGGING] +#FileName := "SCCP_selftest.cfg" +FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := LOG_ALL +ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT +#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +#LogFile := "My.log" +#TimeStampFormat := Time +LogSourceInfo := Yes + +[EXECUTE] +SCCP_selftest.tc_ConnlessSendingShortASP +#SCCP_selftest.tc_ConnlessSendingLongASP +[TESTPORT_PARAMETERS] +// ******************************************************* +// * DO NOT FORGET TO SET THE FOLLOWING TWO LINE TO YOUR SEA * +// ******************************************************* +system.*.Hostname := "karasea" //sea server name +system.*.HttpPort := "5000" //sea http port +system.*.IID_String := "b303d76a-266c-11d4-b8f5-08002090d3da" + //Device Type ID +system.*.Loop:= "ON" +system.*.Filter:= "OFF" +system.*.MTP3ServiceType := "MTP3ttc" //"MTP3itu" ["MTP3itu" (default)|"MTP3ansi" | "M3UA" | "MTP3ttc" ] + +// CMGW6 -> SCTP_ASSOC_10.2.110.102 +// CMGW3 data: SCTP_ASSOC_10.2.110.2 +system.CMGW6.EntityName := "S7ST-0" //device name to connect +system.CMGW6.NI := "2" +system.CMGW6.SUT_Pc:= "461086" // 07-09-30 =0x07091E see command: s7stp:st=s7stg-0&&-32; +system.CMGW6.TESTER_Pc:= "461087" //07-09-31=0x07091F +system.CMGW6.M3UA_version:= "1" + +[MODULE_PARAMETERS] +//for sccp: +tsp_own_GT := '14377760'H +tsp_remote_GT := '14375760'H +tsp_SSN := 2 //8:MSC 5:MAP see 3.4.2.2/Q.713 +tsp_SIO := '03'O //SCCP national +tsp_own_SPC := 2351 //16382 +tsp_remote_SPC := 2300 //16383 // max value on 14 bits +#tsp_own_SPC := 461087 // =0x07091E +#tsp_remote_SPC := 461086 // =0x07091D +tsp_SLS := 0 +#tsp_sccp_serviceType := "mtp3_itu" +#tsp_sccp_serviceType := "mtp3_ansi" +tsp_sccp_serviceType := "mtp3_ttc" + +#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 : +#tsp_translationType := 7 +tsp_SIF_MaxLength := 272 +tsp_force_xudt := 1 // 1:yes, 0:no diff --git a/SCCP_CNL113341/demo/SCCP_selftest.ttcn b/SCCP_CNL113341/demo/SCCP_selftest.ttcn new file mode 100644 index 00000000..c6497045 --- /dev/null +++ b/SCCP_CNL113341/demo/SCCP_selftest.ttcn @@ -0,0 +1,607 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// +// 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_selftest.ttcn +// Description: SS7 SCCP basic test +// according to specification ITU-T SS7 SCCP, ANSI ..., TCC ... +// References: ITU-T: Recommendation Q.711-Q.714, +// ANSI , +// TCC +// Rev: +// Updated: 2007-04.12 +// Contact: http://ttcn.ericsson.se +// + +module SCCP_selftest +{//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" +}//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; + + +//================================================================== +// MTPsim component +// Description: Simulates two MTP stacks for two MTP3-User +// to implement this configuration: +// MTPsim includes MTP3/1 and MTP3/2 +// MTPsim only receives TRANSFER_req and sends TRANSFER_ind +// with the same content +// +----------+ +----------+ +// |SCCP-userA| <--->|SCCP-userB| = MTC +// +----------+ +----------+ +// | A | B +// +----------+ +----------+ +// | SCCP A | <--->| SCCP B | +// +----------+ +----------+ +// | A | B +// +-----------------------------+ +// | MTP3 1. | MTP3 2.| = MTP3sim +// +----------------------------+ +// +//================================================================== + +group MTPsim +{ + + +type component MTPsim_CT { + port MTP3asp_SP_PT MTP_A_PORT + port MTP3asp_SP_PT MTP_B_PORT +} + +function MTPsim_EventHandler( ) runs on MTPsim_CT +{ + var ASP_MTP3_TRANSFERreq vl_MTP3_TRANSFERreq; + var ASP_MTP3_TRANSFERind vl_MTP3_TRANSFERind + alt{ + [] MTP_A_PORT.receive( ASP_MTP3_TRANSFERreq:? ) -> value vl_MTP3_TRANSFERreq + + { + MTP_B_PORT.send( t_ASP_MTP3_TRANSFERind( + vl_MTP3_TRANSFERreq.sio, + vl_MTP3_TRANSFERreq.opc, + vl_MTP3_TRANSFERreq.dpc, + vl_MTP3_TRANSFERreq.sls, + vl_MTP3_TRANSFERreq.data ) ) ; + repeat; + }//A.receive + [] MTP_B_PORT.receive( ASP_MTP3_TRANSFERreq:? ) -> value vl_MTP3_TRANSFERreq + + { + MTP_A_PORT.send( t_ASP_MTP3_TRANSFERind ( + vl_MTP3_TRANSFERreq.sio, + vl_MTP3_TRANSFERreq.opc, + vl_MTP3_TRANSFERreq.dpc, + vl_MTP3_TRANSFERreq.sls, + vl_MTP3_TRANSFERreq.data )); + repeat; + }//B.receive + + }//alt + +} //MTPsim_EventHandler + +}//group MTPsim + +// Main test component with behaviour SCCPuserA andSCCPuserB +type component MTC_CT { + var SCCP_PAR_Address v_CalledAddress, v_CallingAddress; + var integer v_testvalue; + var MTPsim_CT vc_MTPsim; + var SCCP_CT vc_SCCP_A, vc_SCCP_B; + var MSC_SCCP_MTP3_parameters v_BootA; + var MSC_SCCP_MTP3_parameters v_BootB; + var SCCP_PAR_Connection_Id v_cid_A, v_cid_B; + + port SCCPasp_PT A_PORT; //SCCPuserA + port SCCPasp_PT B_PORT //SCCPuserB + +} + +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 + }; + + v_BootB := + { sio:= + { ni:= substr(oct2bit(tsp_SIO),0,2), + prio:= substr(oct2bit(tsp_SIO),2,2), + si:= substr(oct2bit(tsp_SIO),4,4) + }, + opc:=tsp_remote_SPC, + dpc:=tsp_own_SPC, + sls:=tsp_SLS, + sccp_serviceType:=tsp_sccp_serviceType, + ssn:= tsp_SSN + }; + return; +} //initBootParams +function init() runs on MTC_CT +{ + + + initBootParams(); + log("v_BootA:",v_BootA); + log("v_BootB: ",v_BootB); + vc_MTPsim:= MTPsim_CT.create; + + // Protocol Stack A creation & connections: + vc_SCCP_A:=SCCP_CT.create; + connect(vc_SCCP_A:MTP3_SCCP_PORT,vc_MTPsim:MTP_A_PORT); + connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT); + + // Protocol Stack B creation & connections: + vc_SCCP_B:=SCCP_CT.create; + connect(vc_SCCP_B:MTP3_SCCP_PORT,vc_MTPsim:MTP_B_PORT); + connect(self:B_PORT,vc_SCCP_B:SCCP_SP_PORT); + + // Start stacks: + vc_MTPsim.start( MTPsim_EventHandler() ); + + vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters !!! cont here!!! + + vc_SCCP_B.start( SCCPStart(v_BootB)); + log( "init() is done"); + +}// init + +function terminate( ) runs on MTC_CT +{ + log( "termitate() started"); + /*while( all component.running != true ) + { + //waits + }*/ + all component.stop; + disconnect(vc_SCCP_A:MTP3_SCCP_PORT, vc_MTPsim:MTP_A_PORT); + disconnect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT); + + disconnect(vc_SCCP_B:MTP3_SCCP_PORT,vc_MTPsim:MTP_B_PORT); + disconnect(self:B_PORT,vc_SCCP_B: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 getOddEvenEnc( 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_Emulation.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_Emulation.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_Emulation.ttcn + subsystemNumber := tsp_SSN, + globalTitle := { + gti0011:= { + translationType := int2oct(7,1), + encodingScheme := getOddEvenEnc( 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_Emulation.ttcn + subsystemNumber := tsp_SSN, + globalTitle := { + gti0011:= { + translationType := int2oct(7,1), + encodingScheme := getOddEvenEnc( 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 + else + { + log( "wrong tsp_sccp_serviceType ->exit "); + setverdict( fail ); + } +}//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:= 40.0; + TL_timer.start; + log("A_PORT.send follows"); + log("Addresses:",v_CalledAddress, v_CallingAddress); + A_PORT.send( t_ASP_N_UNITDATA_req( v_CalledAddress, + v_CallingAddress, + '00000001'B, //sequence control + '00000001'B, //return option + pl_userdata, + omit ) ); + log("A_PORT.send executed"); + alt { + [] B_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"); + log("Original data:", v_CalledAddress, v_CallingAddress, pl_userdata); + 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:= 40.0; + TL_timer.start; + // A Sends ASP_SCCP_N_CONNECT_req , receives + A_PORT.send( t_ASP_N_CONNECT_req( v_CalledAddress, + v_CallingAddress, + omit, //expeditedDataSel + omit, //QoS + omit, //userData + v_cid_A, + omit //importance + ) ); + alt { + [] B_PORT.receive( tr_ASP_N_CONNECT_ind ) -> value vl_N_CONNECT_ind + { + v_cid_B := vl_N_CONNECT_ind.connectionId; + B_PORT.send( t_ASP_N_CONNECT_res( omit,// respondingAddress + omit,//expeditedDataSel + omit,//qualityOfService + omit, //userData + v_cid_B, + omit //importance + )); + } + [] B_PORT.receive + { + log( "unexpected asp received for ASP_SCCP_N_CONNECT_req, failed"); + setverdict( fail ); + return false; + } + [] TL_timer.timeout + { + setverdict( pass ); + log("Timeout...."); + return false; + } + } + + // receives ASP_SCCP_N_CONNECT_cfm + 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( pass ); + 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 +B_PORT +****************************************************/ +function f_send(in octetstring pl_userdata) runs on MTC_CT +{ + var ASP_SCCP_N_DATA_ind vl_N_DATA_ind; + timer TL_timer:= 120.0; + TL_timer.start; + A_PORT.send( t_ASP_N_DATA_req ( pl_userdata, v_cid_A, omit) ) ; + alt { + [] B_PORT.receive( tr_ASP_N_DATA_ind ) -> value vl_N_DATA_ind + { + if( vl_N_DATA_ind.userData == pl_userdata ) + { + log( "userData received correctly" ); + setverdict( pass ); + } + else + { + log("user data mismatch error in f_send()") + setverdict(fail); + } + + }//B_PORT.receive( tr_ASP_N_DATA_ind ) + + [] B_PORT.receive + { + log( "unexpected asp received for ASP_SCCP_N_DATA_req, failed"); + setverdict( fail ); + } + [] TL_timer.timeout + { + setverdict( pass ); + 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:= 5.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 { + [] B_PORT.receive(tr_ASP_N_DISCONNECT_ind) -> value vl_N_DISCONNECT_ind + { + setverdict( pass ); + } + [] B_PORT.receive + { + log("unexpected asp received on B_PORT instead of ASP_SCCP_N_DISCONNECT_ind"); + //repeat; + setverdict(fail); + } + [] TL_timer.timeout + { + setverdict( fail ); + log("Timeout...."); + }; + }//alt + + //give time for inner release complete (rlc): + alt { + [] TL_timer.timeout + { + setverdict( pass ); + log("Stopped with expected timeout"); + }; + } +}//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 +{ + 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 +{ + 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 diff --git a/SCCP_CNL113341/demo/SCCPasp_Types.ttcn b/SCCP_CNL113341/demo/SCCPasp_Types.ttcn new file mode 120000 index 00000000..f7668d7f --- /dev/null +++ b/SCCP_CNL113341/demo/SCCPasp_Types.ttcn @@ -0,0 +1 @@ +../src/SCCPasp_Types.ttcn \ No newline at end of file diff --git a/SCCP_CNL113341/src/SCCP_Emulation.ttcn b/SCCP_CNL113341/src/SCCP_Emulation.ttcn new file mode 100644 index 00000000..5e269cc5 --- /dev/null +++ b/SCCP_CNL113341/src/SCCP_Emulation.ttcn @@ -0,0 +1,6031 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// 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) have been supplied // +// // +/////////////////////////////////////////////////////////////////////////////// +// File: SCCP_Emulation.ttcn +// Description: SS7 SCCP definitions and dynamic part according to +// specification ITU-T SS7 SCCP, ANSI ..., ttc ... +// References: ITU-T: Recommendation Q.711-Q.714, +// ANSI : T1.111-2001 (MTP) and T1.112-2001 (SCCP) +// TTC : JT-Q711 +// Rev: R6A05 +// Prodnr: CNL 113 341 +// Updated: 2009-01-26 +// Contact: http://ttcn.ericsson.se + +module SCCP_Emulation +{//startmodule + +modulepar +{ + float tsp_maxLocalReference := 16777216.0; //loc ref= 0...tsp_maxLocalReference-1 + float tsp_max_ConnectionId := 16777216.0; //max connection id = 0..tsp_max_ConnectionId -1 + integer tsp_force_xudt := 0; + integer tsp_SIF_MaxLength := 272 +} + +import from General_Types all; +import from MTP3asp_Types all; +import from MTP3asp_PortType all; +import from SCCP_Types all; +import from SCCPasp_Types all; +import from SCCP_Mapping all; + +group SCCPConstants +{//startgroup SCCPConstants + +//------------------------------------------------------------------------------ +// Subsystem Numbers +//------------------------------------------------------------------------------ + +const integer cg_SSN_notKnown:=0; +const integer cg_SSN_sCCPmanagement:=1; +const integer cg_SSN_reservedForITU:=2; +const integer cg_SSN_iSUP:=3; +const integer cg_SSN_oMAP:=4; +const integer cg_SSN_mAP:=5; +const integer cg_SSN_hLR:=6; +const integer cg_SSN_vLR:=7; +const integer cg_SSN_mSC:=8; +const integer cg_SSN_eIC:=9; +const integer cg_SSN_aUC:=10; +const integer cg_SSN_isdnSS:=11; +const integer cg_SSN_reservedForIntUse:=12; +const integer cg_SSN_bISDNe2e:=13; +const integer cg_SSN_tCtestResponder:=14; +const integer cg_SSN_rANAP:=142; +const integer cg_SSN_bSSAP:=254; +// TCAP has not SSN + +//------------------------------------------------------------------------------ +// Routing Indicator values ITU: 3.4.1/Q713. +//------------------------------------------------------------------------------ +const BIT1n cg_route_on_SSN := '1'B; +const BIT1n cg_route_on_GT := '0'B; + +//------------------------------------------------------------------------------ +// Release Cause +//------------------------------------------------------------------------------ + + +const integer cg_Rel_endUserOrig:=0; +const integer cg_Rel_endUserCong:=1; +const integer cg_Rel_endUserFailure:=2; +const integer cg_Rel_sCCPUserOrig:=3; +const integer cg_Rel_remProcError:=4; +const integer cg_Rel_inconsConnData:=5; +const integer cg_Rel_accessFailure:=6; +const integer cg_Rel_accessCongestion:=7; +const integer cg_Rel_subsystFailure:=8; +const integer cg_Rel_subsystCongest:=9; +const integer cg_Rel_mTPFailure:=10; +const integer cg_Rel_networkCongest:=11; +const integer cg_Rel_expResetTimer:=12; +const integer cg_Rel_expRecInacTimer:=13; +const integer cg_Rel_reserved:=14; +const integer cg_Rel_unqualified:=15; +const integer cg_Rel_sCCPFailure:=16; + +//------------------------------------------------------------------------------ +// Return Cause +//------------------------------------------------------------------------------ + +const integer cg_Ret_noTransl4AddrNature:=0; +const integer cg_Ret_noTransl4SpecifAddr:=1; +const integer cg_Ret_subsystemCongestion:=2; +const integer cg_Ret_subsystemFailure:=3; +const integer cg_Ret_unequippedUser:=4; +const integer cg_Ret_mTPFailure:=5; +const integer cg_Ret_networkCongestion:=6; +const integer cg_Ret_unqualified:=7; +const integer cg_Ret_errorMessageTransport:=8; +const integer cg_Ret_errorLocalProcessing:=9; +const integer cg_Ret_destNoReassembly:=10; +const integer cg_Ret_sCCPFailure:=11; +const integer cg_Ret_hopCounterViolation:=12; +const integer cg_Ret_segmeNotSupported:=13; +const integer cg_Ret_segmentationFailure:=14; + +//------------------------------------------------------------------------------ +// Reset Cause +//------------------------------------------------------------------------------ + + +const integer cg_Res_endUserOrig:=0; +const integer cg_Res_sCCPUserOrig:=1; +const integer cg_Res_messOutOfOrder_incPs:=2; +const integer cg_Res_messOutOfOrder_incPr:=3; +const integer cg_Res_remProcErr_messOutOfWindow:=4; +const integer cg_Res_remProcErr_IncPsAfterReinit:=5; +const integer cg_Res_remProcErr_general:=6; +const integer cg_Res_remEndUserOperational:=7; +const integer cg_Res_networkOperational:=8; +const integer cg_Res_accessOperational:=9; +const integer cg_Res_networkCongestion:=10; +const integer cg_Res_reserved:=11; +const integer cg_Res_unqualified:=12; + +//------------------------------------------------------------------------------ +//Error Cause +//------------------------------------------------------------------------------ + +const integer cg_Err_unassignedDestinationLRN:=0 ; +const integer cg_Err_inconsistentSourceLRN:=1 ; +const integer cg_Err_pointCodeMismatch:=2 ; +const integer cg_Err_serviceClassMismatch:=3 ; +const integer cg_Err_unqualified:=4 ; + +//------------------------------------------------------------------------------ +//Refusal Cause +//------------------------------------------------------------------------------ + +const integer cg_Ref_endUserOrigin:=0; +const integer cg_Ref_endUserConges:=1; +const integer cg_Ref_endUserFailure:=2; +const integer cg_Ref_sCCPUserOrigin:=3; +const integer cg_Ref_destAddrUnkn:=4; +const integer cg_Ref_destInaccess:=5; +const integer cg_Ref_qOSNotAvail_nonTransient:=6; +const integer cg_Ref_qOSNotAvail_transient:=7; +const integer cg_Ref_accessFailure:=8; +const integer cg_Ref_accessCongestion:=9; +const integer cg_Ref_subsystemFailure:=10; +const integer cg_Ref_subsystemCongest:=11; +const integer cg_Ref_expConnEstTimer:=12; +const integer cg_Ref_incomUserData:=13; +const integer cg_Ref_reserved:=14; +const integer cg_Ref_unqualified:=15; +const integer cg_Ref_hopCounterViol:=16; +const integer cg_Ref_sCCPFailure:=17; +const integer cg_Ref_noTransl4address:=18; +const integer cg_Ref_unequippedUser:=19; + +//------------------------------------------------------------------------------ +// Originator +//------------------------------------------------------------------------------ + +const integer cg_Undefined:=0; +const integer cg_NSU:=1; +const integer cg_NSP:=2; + + +//------------------------------------------------------------------------------ +// CREF Reason +//------------------------------------------------------------------------------ + +const integer cg_CREF_endUserOrig:=0; +const integer cg_CREF_endUserCong:=1; +const integer cg_CREF_endUserFailure:=2; +const integer cg_CREF_SCCPUserOrig:=3; +const integer cg_CREF_destAddrUnknwn_NT:=4; +const integer cg_CREF_destInaccg_T:=5; +const integer cg_CREF_QOSUnavail_NT:=6; +const integer cg_CREF_QOSUnavail_T:=7; +const integer cg_CREF_accessFailure:=8; +const integer cg_CREF_accessCong:=9; +const integer cg_CREF_destInaccg_NT:=10; +const integer cg_CREF_subsystCong:=11; +const integer cg_CREF_unspec_T:=12; +const integer cg_CREF_incompInfo:=13; +const integer cg_CREF_unspec_NT:=15; +const integer cg_CREF_undef:=16; +const integer cg_CREF_hopCntrViolation:=18; + +//------------------------------------------------------------------------------ +// DISC Reason +//------------------------------------------------------------------------------ + +const integer cg_DISC_normal:=20; +const integer cg_DISC_endUserCong:=21; +const integer cg_DISC_endUserFailure:=22; +const integer cg_DISC_SCCPUserOrig:=23; +const integer cg_DISC_abnormal_T:=24; +const integer cg_DISC_accessFailure:=28; +const integer cg_DISC_accessCong:=29; +const integer cg_DISC_abnormal_NT:=30; +const integer cg_DISC_subsystCong:=31; +const integer cg_DISC_undef:=32; +const integer cg_DISC_incompInfo:=33; +const integer cg_DISC_abnormal:=35; + +//------------------------------------------------------------------------------ +// RESET Reason +//------------------------------------------------------------------------------ +const integer cg_RESET_userSynch:= 40 ; +const integer cg_RESET_unspec:= 41 ; +const integer cg_RESET_netCong:= 42 ; +const integer cg_RESET_undef:= 43 ; + +//------------------------------------------------------------------------------ +//Mapping Refusal Cause to Reason and Originator A.1/Q.713 +//------------------------------------------------------------------------------ + +const integer cg_Mapping_RefCause_Orig[19]:= +{ + cg_NSU, + cg_NSU, + cg_NSU, + cg_NSU, + cg_NSP, + cg_NSP, + cg_NSP, + cg_NSP, + cg_NSU, + cg_NSU, + cg_NSP, + cg_NSU, + cg_NSP, + cg_NSU, + cg_NSP, + cg_Undefined, + cg_NSP, + cg_NSP, + cg_NSP +}; + + +const integer cg_Mapping_RefCause_Reason[19]:= +{ + cg_CREF_endUserOrig, + cg_CREF_endUserCong, + cg_CREF_endUserFailure, + cg_CREF_SCCPUserOrig, + cg_CREF_destAddrUnknwn_NT, + cg_CREF_destInaccg_T, + cg_CREF_QOSUnavail_NT, + cg_CREF_QOSUnavail_T, + cg_CREF_accessFailure, + cg_CREF_accessCong, + cg_CREF_destInaccg_NT, + cg_CREF_subsystCong, + cg_CREF_unspec_T, + cg_CREF_incompInfo, + cg_CREF_unspec_T, + cg_CREF_undef, + cg_CREF_hopCntrViolation, + cg_CREF_destAddrUnknwn_NT, + cg_CREF_destInaccg_NT +}; + +//------------------------------------------------------------------------------ +//Mapping Release Cause to Reason and Originator A.2/Q.713 +//------------------------------------------------------------------------------ + +const integer cg_Mapping_RelCause_Orig[17]:= +{ + cg_NSU, + cg_NSU, + cg_NSU, + cg_NSU, + cg_NSP, + cg_NSP, + cg_NSU, + cg_NSU, + cg_NSP, + cg_NSU, + cg_NSP, + cg_NSP, + cg_NSP, + cg_NSP, + cg_Undefined, + cg_Undefined, + cg_NSP +}; + +//mapping CREF-> ASP_SCCP_N_DISCONNECT_ind: +//Reason:=cg_Mapping_RefCause_Reason[RefCause]; +//Originator:=cg_Mapping_RefCause_Orig[RefCause]; + + +//mapping ASP_SCCP_N_DISCONNECT_req-> CREF: +// + +const integer cg_Mapping_RelCause_Reason[17]:= { + cg_DISC_normal, + cg_DISC_endUserCong, + cg_DISC_endUserFailure, + cg_DISC_SCCPUserOrig, + cg_DISC_abnormal_T, + cg_DISC_abnormal_T, + cg_DISC_accessFailure, + cg_DISC_accessCong, + cg_DISC_abnormal_NT, + cg_DISC_subsystCong, + cg_DISC_abnormal_NT, + cg_DISC_abnormal_T, + cg_DISC_abnormal_T, + cg_DISC_abnormal_T, + cg_DISC_undef, + cg_DISC_undef, + cg_DISC_abnormal_NT +}; + + + +//mapping RLSD-> ASP_SCCP_N_DISCONNECT_ind: +//Reason:=cg_Mapping_RelCause_Reason[RelCause]; +//Originator:=cg_Mapping_RelCause_Orig[RelCause]; + +//mapping ASP_SCCP_N_DISCONNECT_req-> RLSD: +// + + +//------------------------------------------------------------------------------ +//Mapping Reset Cause to Reason and Originator A.2/Q.713 +//------------------------------------------------------------------------------ + + +const integer cg_Mapping_ResCause_Orig[12]:= { + cg_NSU, + cg_NSU, + cg_NSP, + cg_NSP, + cg_NSP, + cg_NSP, + cg_NSP, + cg_NSU, + cg_NSP, + cg_NSU, + cg_NSP, + cg_Undefined +}; + + +const integer cg_Mapping_ResCause_Reason[12]:= { + cg_RESET_userSynch, + cg_RESET_userSynch, + cg_RESET_unspec, + cg_RESET_unspec, + cg_RESET_unspec, + cg_RESET_unspec, + cg_RESET_unspec, + cg_RESET_userSynch, + cg_RESET_unspec, + cg_RESET_userSynch, + cg_RESET_netCong, + cg_RESET_undef +}; + +//mapping RSR-> ASP_SCCP_N_DISCONNECT_ind: +//Reason:=cg_Mapping_ResCause_Reason[ResCause]; +//Originator:=cg_Mapping_ResCause_Orig[ResCause]; + +//mapping ASP_SCCP_N_DISCONNECT_req-> RSR: +// + +const integer cg_TimerArraySize := 16; + +}//endgroup SCCPConstants + +//****************************************************************************** +// PDU templates +//****************************************************************************** + + +group PDUTemplateDefinitionsSending +{ + + + +//****************************************************************************** +// Message Connection Request (CR) (Q713 $4.2) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ConnectionRequest t_PDU_SCCP_ConnectionRequest +( + SCCP_param_SourceLocalReference pl_SLR, + SCCP_param_ProtocolClass pl_Proto_Class, + SCCP_param_CPartyAddressEnc pl_CalledAddress, +template SCCP_param_Credit_opt pl_credit, +template SCCP_param_CPartyAddressEnc_opt pl_CallingAddress , +template SCCP_param_Data_opt pl_Data, +template SCCP_param_HopCounter_opt pl_HopCntr, +template SCCP_param_Importance_opt pl_Imp, +template SCCP_param_EndOfOptionalParams pl_eop + +):= + { + messageType:=cr, + sourceLocRef:=pl_SLR, + protClass:=pl_Proto_Class, + pointer1:=2, + pointer2:=0, + calledPAddress:=pl_CalledAddress, + optionalPart:= { + credit:=pl_credit, + callingPAddress:=pl_CallingAddress, + data:=pl_Data, + hopCounter:=pl_HopCntr, + importance:=pl_Imp + }, + eop:=pl_eop + } + + + +//****************************************************************************** +// Message Connection Confirm (CC) (Q713 $4.3) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ConnectionConfirm t_PDU_SCCP_ConnectionConfirm +( + SCCP_param_DestLocalReference pl_DLR, + SCCP_param_SourceLocalReference pl_SLR, + SCCP_param_ProtocolClass pl_Proto_Class, +template SCCP_param_Credit_opt pl_credit, +template SCCP_param_CPartyAddressEnc_opt pl_CalledAddress, +template SCCP_param_Data_opt pl_Data, +template SCCP_param_Importance_opt pl_Imp, +template SCCP_param_EndOfOptionalParams pl_eop +):= + { + messageType:=cc, + destLocRef:=pl_DLR, + sourceLocRef:=pl_SLR, + protClass:=pl_Proto_Class, + pointer1:=1, + optionalPart:= { + credit:=pl_credit, + calledPAddress:=pl_CalledAddress, + data:=pl_Data, + importance:=pl_Imp + }, + eop:=pl_eop + } + + +//****************************************************************************** +// Message Connection Refused (CREF) (Q713 $4.4) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ConnectionRefused t_PDU_SCCP_ConnectionRefused +( + SCCP_param_DestLocalReference pl_DLR, + SCCP_param_RefusalCause pl_RefCause, +template SCCP_param_CPartyAddressEnc_opt pl_CalledAddress, +template SCCP_param_Data_opt pl_Data, +template SCCP_param_Importance_opt pl_Imp, +template SCCP_param_EndOfOptionalParams pl_eop +):= + { + messageType:=cref, + destLocRef:=pl_DLR, + refusalCause:=pl_RefCause, + pointer1:=1, + optionalPart:= { + calledPAddress:=pl_CalledAddress, + data:=pl_Data, + importance:=pl_Imp + }, + eop:=pl_eop + } + + +//****************************************************************************** +// Message Released (RLSD) (Q713 $4.5) +//****************************************************************************** + + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_Released t_PDU_SCCP_Released +( + OCT3 pl_DLR, + OCT3 pl_SLR, + SCCP_param_ReleaseCause pl_RelCause, +template SCCP_param_Data_opt pl_Data, +template SCCP_param_Importance_opt pl_Imp, +template SCCP_param_EndOfOptionalParams pl_eop +):= + { + messageType:=rlsd, + destLocRef:=pl_DLR, + sourceLocRef:=pl_SLR, + releaseCause:=pl_RelCause, + pointer1:=1, + optionalPart:= { + data:=pl_Data, + importance:=pl_Imp + }, + eop:=pl_eop + } + +//****************************************************************************** +// Message Release Complete (RLC) (Q713 $4.6) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ReleaseComplete t_PDU_SCCP_ReleaseComplete +( + OCT3 pl_DLR, + OCT3 pl_SLR +):= + { + messageType:=rlc, + destLocRef:=pl_DLR, + sourceLocRef:=pl_SLR + } + + + +//****************************************************************************** +// Message Data form 1 (DT1) (Q713 $4.7) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_DataForm1 t_PDU_SCCP_DataForm1 +( + OCT3 pl_DLR, + SCCP_param_SegmentingReassembl pl_SegmReasm, + SCCP_param_Data pl_Data +):= + { + messageType:=dt1, + destLocRef:=pl_DLR, + segmentingReassembl:=pl_SegmReasm, + pointer1:=1, + data:=pl_Data + } + + + +//****************************************************************************** +// Message Data form 2 (DT2) (Q713 $4.8) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + +//****************************************************************************** +// Message Data Acknowledgement (AK) (Q713 $4.9) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// Message Unitdata (UDT) (Q713 $4.10) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_Unitdata t_PDU_SCCP_Unitdata +( + SCCP_param_ProtocolClass pl_Proto_Class, + SCCP_param_CPartyAddressEnc pl_CalledAddress, + SCCP_param_CPartyAddressEnc pl_CallingAddress, + SCCP_param_Data pl_Data +):= + { + messageType :=udt, + protClass :=pl_Proto_Class, + pointer1:=3, + pointer2:=0, + pointer3:=0, + calledPAddress := pl_CalledAddress, + callingPAddress := pl_CallingAddress, + data:=pl_Data + } + + + +//****************************************************************************** +// Message Unitdata service (UDTS) (Q713 $4.11) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_UnitdataService t_PDU_SCCP_UnitdataService +( + SCCP_param_ReturnCause pl_RetCause, + SCCP_param_CPartyAddressEnc pl_CalledAddress, + SCCP_param_CPartyAddressEnc pl_CallingAddress, + SCCP_param_Data pl_Data +):= + { + messageType:=udts, + returnCause:=pl_RetCause, + pointer1:=3, + pointer2:=0, + pointer3:=0, + calledPAddress:=pl_CalledAddress, + callingPAddress:=pl_CallingAddress, + data:=pl_Data + } + +//****************************************************************************** +// Message Expedited Data (ED) (Q713 $4.12) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// Message Expedited Data Acknowledgement (EA) (Q713 $4.13) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + +//****************************************************************************** +// Message Reset Request (RSR) (Q713 $4.14) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ResetRequest t_PDU_SCCP_ResetRequest +( + SCCP_param_DestLocalReference pl_DLR, + SCCP_param_SourceLocalReference pl_SLR, + SCCP_param_ResetCause pl_ResCause +):= + { + messageType:=rsr, + destLocRef:=pl_DLR, + sourceLocRef:=pl_SLR, + resetCause:=pl_ResCause + } + + +//****************************************************************************** +// Message Reset Confirmation (RSC) (Q713 $4.15) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ + template PDU_SCCP_ResetConfirm t_PDU_SCCP_ResetConfirm + ( + SCCP_param_DestLocalReference pl_DLR, + SCCP_param_SourceLocalReference pl_SLR + ):= + { + messageType:=rsr, + destLocRef:=pl_DLR, + sourceLocRef:=pl_SLR + } + +//****************************************************************************** +// Message Protocol data unit error (ERR) (Q713 $4.16) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ProtDataUnitError t_PDU_SCCP_ProtDataUnitError +( + SCCP_param_DestLocalReference pl_DLR, + SCCP_param_ErrorCause pl_ErrCause +):= + { + messageType:=rsr, + destLocRef:=pl_DLR, + errorCause:=pl_ErrCause + } + + +//****************************************************************************** +// Message Inactivity test (IT) (Q713 $4.17) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_InactivityTest t_PDU_SCCP_InactivityTest +( + SCCP_param_DestLocalReference pl_DLR, + SCCP_param_SourceLocalReference pl_SLR, + SCCP_param_ProtocolClass pl_Proto_Class, + SCCP_param_SequencingSegmenting pl_SeqSegm, + SCCP_param_Credit pl_credit +):= + { + messageType:=it, + destLocRef:=pl_DLR, + sourceLocRef:=pl_SLR, + protClass:=pl_Proto_Class, + sequencingSegmenting:=pl_SeqSegm, + credit:=pl_credit + } + + +//****************************************************************************** +// Message Extended Unitdata (XUDT) (Q713 $4.18) +//****************************************************************************** +//------------------------------------------------------------------------------ + +template PDU_SCCP_ExtUnitdata t_PDU_SCCP_ExtUnitdata +( + SCCP_param_ProtocolClass pl_Proto_Class, + SCCP_param_HopCounter pl_hopCounter, + SCCP_param_CPartyAddressEnc pl_calledPAddress, + SCCP_param_CPartyAddressEnc pl_callingPAddress, + SCCP_param_Data pl_data, +template SCCP_param_Segmentation_opt pl_segm, +template SCCP_param_Importance_opt pl_imp +):= + { + messageType:= xudt, + protClass:=pl_Proto_Class, + hopCounter:=pl_hopCounter, + pointer1:=0, + pointer2:=0, + pointer3:=0, + pointer4:=0, + calledPAddress:=pl_calledPAddress, + callingPAddress:=pl_callingPAddress, + data := pl_data, + optionalPart:= { + segmentation:=pl_segm, + importance := pl_imp + }, + eop:= { paramName:=con_SCCP_eop } + } + + +//****************************************************************************** +// Message Extended Unitdata Service(XUDTS) (Q713 $4.19) +//****************************************************************************** +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + + +//****************************************************************************** +// Message Long Unitdata (LUDT) (Q713 $4.20) +//****************************************************************************** +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// Message Long Unitdata Service (LUDTS) (Q713 $4.21) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// SCCP management messages (Q713 $5.3) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + + +}//endgroup PDUTemplateDefinitionsSending + +//****************************************************************************** + +group PDUTemplateDefinitionsReceiving +{ + + + +//****************************************************************************** +// Message Connection Request (CR) (Q713 $4.2) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ + template PDU_SCCP_ConnectionRequest tr_PDU_SCCP_ConnectionRequest:= + { + messageType:=cr, + sourceLocRef:=?, + protClass:=?, + pointer1:=?, + pointer2:=?, + calledPAddress:=?, + optionalPart:= { + credit:=*, + callingPAddress:=*, + data:=*, + hopCounter:=*, + importance:=* + }, + eop:=* + } + + + +//****************************************************************************** +// Message Connection Confirm (CC) (Q713 $4.3) +//****************************************************************************** + + + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ConnectionConfirm tr_PDU_SCCP_ConnectionConfirm:= +{ + messageType:=cc, + destLocRef:=?, + sourceLocRef:=?, + protClass:=?, + pointer1:=?, + optionalPart:= { + credit:=*, + calledPAddress:=*, + data:=*, + importance:=* + }, + eop:=* +} + + +//****************************************************************************** +// Message Connection Refused (CREF) (Q713 $4.4) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_ConnectionRefused tr_PDU_SCCP_ConnectionRefused:= +{ + messageType:=cref, + destLocRef:=?, + refusalCause:=?, + pointer1:=?, + optionalPart:= { + calledPAddress:=*, + data:=*, + importance:=* + }, + eop:=* +} + + +//****************************************************************************** +// Message Released (RLSD) (Q713 $4.5) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_Released tr_PDU_SCCP_Released:= +{ + messageType:=rlsd, + destLocRef:=?, + sourceLocRef:=?, + releaseCause:=?, + pointer1:=?, + optionalPart:= { + data:=*, + importance:=* + }, + eop:=* +} + + + +//****************************************************************************** +// Message Release Complete (RLC) (Q713 $4.6) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ + +template PDU_SCCP_ReleaseComplete tr_PDU_SCCP_ReleaseComplete:= +{ + messageType:=rlc, + destLocRef:=?, + sourceLocRef:=? +} + + + +//****************************************************************************** +// Message Data form 1 (DT1) (Q713 $4.7) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ +template PDU_SCCP_DataForm1 tr_PDU_SCCP_DataForm1:= +{ + messageType:=dt1, + destLocRef:=?, + segmentingReassembl:=?, + pointer1:=?, + data:=? +} + +//****************************************************************************** +// Message Data form 2 (DT2) (Q713 $4.8) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + +//****************************************************************************** +// Message Data Acknowledgement (AK) (Q713 $4.9) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// Message Unitdata (UDT) (Q713 $4.10) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ + +template PDU_SCCP_Unitdata tr_PDU_SCCP_Unitdata:= +{ + messageType:=udt, + protClass:=?, + pointer1:=?, + pointer2:=?, + pointer3:=?, + calledPAddress:=?, + callingPAddress:=?, + data:=? +} + +//****************************************************************************** +// Message Unitdata service (UDTS) (Q713 $4.11) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Message definition +//------------------------------------------------------------------------------ + +template PDU_SCCP_UnitdataService tr_PDU_SCCP_UnitdataService:= +{ + messageType:=udts, + returnCause:=?, + pointer1:=?, + pointer2:=?, + pointer3:=?, + calledPAddress:=?, + callingPAddress:=?, + data:=? +} + +//****************************************************************************** +// Message Expedited Data (ED) (Q713 $4.12) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// Message Expedited Data Acknowledgement (EA) (Q713 $4.13) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + +//****************************************************************************** +// Message Reset Request (RSR) (Q713 $4.14) +//****************************************************************************** + +template PDU_SCCP_ResetRequest tr_PDU_SCCP_ResetRequest:= +{ + messageType:=rsr, + destLocRef:=?, + sourceLocRef:=?, + resetCause:=? +} + +//****************************************************************************** +// Message Reset Confirmation (RSC) (Q713 $4.15) +//****************************************************************************** + +template PDU_SCCP_ResetConfirm tr_PDU_SCCP_ResetConfirm:= +{ + messageType:=rsr, + destLocRef:=?, + sourceLocRef:=? +} + +//****************************************************************************** +// Message Protocol data unit error (ERR) (Q713 $4.16) +//****************************************************************************** + +template PDU_SCCP_ProtDataUnitError tr_PDU_SCCP_ProtDataUnitError:= +{ + messageType:=rsr, + destLocRef:=?, + errorCause:=? +} + +//****************************************************************************** +// Message Inactivity test (IT) (Q713 $4.17) +//****************************************************************************** + +template PDU_SCCP_InactivityTest tr_PDU_SCCP_InactivityTest:= +{ + messageType:=it, + destLocRef:=?, + sourceLocRef:=?, + protClass:=?, + sequencingSegmenting:=?, + credit:=? +} + +//****************************************************************************** +// Message Extended Unitdata (XUDT) (Q713 $4.18) +//****************************************************************************** + + +template PDU_SCCP_ExtUnitdata tr_PDU_SCCP_ExtUnitdata := +{ + messageType:=xudt, + protClass:= ?, //connection oriented but no flow control + hopCounter:=?, + pointer1:=?, + pointer2:=?, + pointer3:=?, + pointer4:=?, + calledPAddress:=?, + callingPAddress:=?, + data := ?, + optionalPart:= { + segmentation:=*, + importance := * + }, + eop:= * +} + +//------------------------------------------------------------------------------ + +//****************************************************************************** +// Message Extended Unitdata Service(XUDTS) (Q713 $4.19) +//****************************************************************************** +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + +//****************************************************************************** +// Message Long Unitdata (LUDT) (Q713 $4.20) +//****************************************************************************** +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// Message Long Unitdata Service (LUDTS) (Q713 $4.21) +//****************************************************************************** + +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + +//****************************************************************************** +// SCCP management messages (Q713 $5.3) +//****************************************************************************** +//------------------------------------------------------------------------------ +// Not supported +//------------------------------------------------------------------------------ + + + +}//endgroup PDUTemplateDefinitionsReceiving + +type record of boolean Timer_Snapshot; +type enumerated TimerIdentifierType {conn_est, ias, iar, rel, repeat_rel, int, reset,internal_reset, t_guard}; + + +type component SCCP_CT +{ //startcomponent SCCP_CT + + //Component variables + //*************************************************************** + // Connection Oriented Signalling: + // StateTransition-> ConnectionData; + var ConnectionData ConnectionTable[16]; //16 connections 0 to 15 + var integer v_session; // actual conn. oriented session index + + // Connectioenless Signalling: + //== sending == + var OCT3 segmLocRefTable[16]; + var integer v_segmLocRefIndex; // last index in segmLocRefTable, cyclical incremented + //==receiving== + var ClessRcvBuff ClessRcvBuffTable[16]; + + var integer v_reference; // not used ??? + + var hexstring v_own_GT; + var hexstring v_remote_GT; + var integer v_SSN; + var OCT1 v_SIO; + var integer v_NI; //network indicator, if NI<2 => international + var integer v_own_SPC; + var integer v_remote_SPC; + var integer v_SLS; + + var SCCP_ServiceType v_SCCPServiceType; //enum: itu, ansi, ttc or mpt + //var v_maxLocalReference; // Local Reference max. value, see in SCCP.ttcn + var integer v_PC_length; //length of point code, calculated at start! NOT USED + var integer v_RoutingLabelLen; //in bytes + var integer v_sccp_data_maxlen; // dt1 payload length upper limit + var integer v_sccp_pdu_maxlen; // SIF len -routing label len + + var Timer_Snapshot v_T_conn_est; + var Timer_Snapshot v_T_ias; + var Timer_Snapshot v_T_iar; + var Timer_Snapshot v_T_rel; + var Timer_Snapshot v_T_repeat_rel; + var Timer_Snapshot v_T_int; + var Timer_Snapshot v_T_reset; + var Timer_Snapshot v_T_internal_reset; + var Timer_Snapshot v_T_guard; + //var Timer_Snapshot v_T_T_guard; + //*************************************************************** + + port SCCPasp_SP_PT SCCP_SP_PORT;//port type defined in SCCP_ASPs + port MTP3asp_SCCP_PT MTP3_SCCP_PORT; + + //component timers + + timer T_conn_est[cg_TimerArraySize]:= { tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est, + tspc_timer_T_conn_est,tspc_timer_T_conn_est }; + + timer T_ias[cg_TimerArraySize]:= { tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias, + tspc_timer_T_ias,tspc_timer_T_ias }; + + timer T_iar[cg_TimerArraySize]:= { tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar, + tspc_timer_T_iar,tspc_timer_T_iar }; + + timer T_rel[cg_TimerArraySize]:= { tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel, + tspc_timer_T_rel,tspc_timer_T_rel }; + + timer T_repeat_rel[cg_TimerArraySize]:= { tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel, + tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel }; + + timer T_int[cg_TimerArraySize]:= { tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int, + tspc_timer_T_int,tspc_timer_T_int }; + + +/* timer T_T_guard[cg_TimerArraySize]:= { tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard, + tspc_timer_T_guard,tspc_timer_T_guard }; +*/ + + timer T_reset[cg_TimerArraySize]:= { tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset, + tspc_timer_T_reset,tspc_timer_T_reset }; + + + timer T_internal_reset[cg_TimerArraySize]:= { tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset, + tspc_timer_T_internal_reset,tspc_timer_T_internal_reset }; + + + timer T_guard[cg_TimerArraySize]:= { tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard, + tspc_timer_guard,tspc_timer_guard }; + +}//endcomponent SCCP_CT + + +group SCCPFunctions +{//startgroup SCCPFunctions + //****************************************************************** + function f_StartTimer(TimerIdentifierType pl_TimerIdentifier,integer pl_TimerIndex,float pl_duration := -1.0) runs on SCCP_CT + //****************************************************************** + { + select (pl_TimerIdentifier) + { + case(conn_est) + { + if(pl_duration < 0.0){ + T_conn_est[pl_TimerIndex].start; + v_T_conn_est[pl_TimerIndex] := true; + } + else{ + T_conn_est[pl_TimerIndex].start(pl_duration); + v_T_conn_est[pl_TimerIndex] := true; + } + } + case(ias) + { + if(pl_duration < 0.0){ + T_ias[pl_TimerIndex].start; + v_T_ias[pl_TimerIndex] := true; + } + else{ + T_ias[pl_TimerIndex].start(pl_duration); + v_T_ias[pl_TimerIndex] := true; + } + } + case(iar) + { + if(pl_duration < 0.0){ + T_iar[pl_TimerIndex].start; + v_T_iar[pl_TimerIndex] := true; + } + else{ + T_iar[pl_TimerIndex].start(pl_duration); + v_T_iar[pl_TimerIndex] := true; + } + } + case(rel) + { + if(pl_duration < 0.0){ + T_rel[pl_TimerIndex].start; + v_T_rel[pl_TimerIndex] := true; + } + else{ + T_rel[pl_TimerIndex].start(pl_duration); + v_T_rel[pl_TimerIndex] := true; + } + } + case(repeat_rel) + { + if(pl_duration < 0.0){ + T_repeat_rel[pl_TimerIndex].start; + v_T_repeat_rel[pl_TimerIndex] := true; + } + else{ + T_repeat_rel[pl_TimerIndex].start(pl_duration); + v_T_repeat_rel[pl_TimerIndex] := true; + } + } + case(int) + { + if(pl_duration < 0.0){ + T_int[pl_TimerIndex].start; + v_T_int[pl_TimerIndex] := true; + } + else{ + T_int[pl_TimerIndex].start(pl_duration); + v_T_int[pl_TimerIndex] := true; + } + } + case(reset) + { + if(pl_duration < 0.0){ + T_reset[pl_TimerIndex].start; + v_T_reset[pl_TimerIndex] := true; + } + else{ + T_reset[pl_TimerIndex].start(pl_duration); + v_T_reset[pl_TimerIndex] := true; + } + } + case(internal_reset) + { + if(pl_duration < 0.0){ + T_internal_reset[pl_TimerIndex].start; + v_T_internal_reset[pl_TimerIndex] := true; + } + else{ + T_internal_reset[pl_TimerIndex].start(pl_duration); + v_T_internal_reset[pl_TimerIndex] := true; + } + } + case(t_guard) + { + if(pl_duration < 0.0){ + T_guard[pl_TimerIndex].start; + v_T_guard[pl_TimerIndex] := true; + } + else{ + T_guard[pl_TimerIndex].start(pl_duration); + v_T_guard[pl_TimerIndex] := true; + } + } + case else + {log("Warning: Incorrect Timer!")} + } + } + //****************************************************************** + function f_StopTimer(TimerIdentifierType pl_TimerIdentifier,integer pl_TimerIndex) runs on SCCP_CT + //****************************************************************** + { + select (pl_TimerIdentifier) + { + case(conn_est) + { + T_conn_est[pl_TimerIndex].stop; + v_T_conn_est[pl_TimerIndex] := false; + } + case(ias) + { + T_ias[pl_TimerIndex].stop; + v_T_ias[pl_TimerIndex] := false; + } + case(iar) + { + T_iar[pl_TimerIndex].stop; + v_T_iar[pl_TimerIndex] := false; + } + case(rel) + { + T_rel[pl_TimerIndex].stop; + v_T_rel[pl_TimerIndex] := false; + } + case(repeat_rel) + { + T_repeat_rel[pl_TimerIndex].stop; + v_T_repeat_rel[pl_TimerIndex] := false; + } + case(int) + { + T_int[pl_TimerIndex].stop; + v_T_int[pl_TimerIndex] := false; + } + case(reset) + { + T_reset[pl_TimerIndex].stop; + v_T_reset[pl_TimerIndex] := false; + } + case(internal_reset) + { + T_internal_reset[pl_TimerIndex].stop; + v_T_internal_reset[pl_TimerIndex] := false; + } + case(t_guard) + { + T_guard[pl_TimerIndex].stop; + v_T_guard[pl_TimerIndex] := false; + } + case else + {log("Warning: Incorrect Timer!")} + } + } + + //****************************************************************** + function f_initialize_timer_states() runs on SCCP_CT + //****************************************************************** + { + var integer i; + for (i:=0; i= 2) { v_RoutingLabelLen := 5; } + else { v_RoutingLabelLen := 4; } + } + else if( v_SCCPServiceType == m3ua ) + { + v_RoutingLabelLen := 4; // not really... + //v_sccp_data_maxlen := 261; + } + else if ( (v_SCCPServiceType == mtp3_mpt)) + { + if(v_NI== 2) { v_RoutingLabelLen := 7; } + else { v_RoutingLabelLen := 4; } + } + else + { + log( "Wrong SCCPServiceType value was selected in the config file"); + log("Modified for default value 'mtp3_itu'."); + v_SCCPServiceType := mtp3_itu; + v_RoutingLabelLen := 4; //itu + + } + + // mtp3_itu_b i.e. itu mtp3b + // SCCP_ansi_b i.e ansi mtp3b settings ??? + //272= max length of SIF, see Fig3-3B/T1.111.4-2001 + //temp for test: 10 ? + //tsp_SIF_MaxLength = 272 + v_sccp_pdu_maxlen := tsp_SIF_MaxLength - v_RoutingLabelLen; // -; //7: msg_type+locref+ptr+len + log("v_sccp_pdu_maxlen:",v_sccp_pdu_maxlen); + v_sccp_data_maxlen := v_sccp_pdu_maxlen-7; // dt1 payload // -7: msg_type+locref+ptr+len + + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + ConnectionTable[vl_j].localReference :='000000'O; + ConnectionTable[vl_j].remoteReference:='000000'O; + ConnectionTable[vl_j].state :=idle; + ConnectionTable[vl_j].connectionId :=0; + ConnectionTable[vl_j].reassembler_buffer.buffer :=''O; + ConnectionTable[vl_j].reassembler_buffer.actlen := 0; + ConnectionTable[vl_j].reassembler_buffer.maxlen := 16*v_sccp_data_maxlen; //???? + segmLocRefTable[vl_j] := '000000'O; + reallocate_ClessRcvBuff(vl_j); + + }//endfor + + //starts SCCP execution + ScanEvents(); + }//endfunction of SCCPStart + + + //****************************************************************** + function ReleaseResources(in integer pl_session) runs on SCCP_CT + //****************************************************************** + {//startfunction + + //release resources + ConnectionTable[pl_session].remoteReference:='000000'O; + ConnectionTable[pl_session].localReference:='000000'O; + ConnectionTable[pl_session].connectionId:=0; + Stop_sessionTimers(pl_session); + ConnectionTable[pl_session].state:=idle; + ConnectionTable[pl_session].reassembler_buffer.buffer:=''O; + ConnectionTable[pl_session].reassembler_buffer.actlen:=0; + }//endfunction ReleaseResources + + //****************************************************************** + function GuardTimer_Expired(in integer pl_session) runs on SCCP_CT + //no answer to ASP_SCCP_N_CONNECT_ind received + //****************************************************************** + {//startfunction + + //local declarations + var PDU_SCCP vl_PDU_SCCP; + + //Action Table follows + + if (ConnectionTable[pl_session].state==connection_pending_IC) + {//startif + + //send Released-this should disconnect the other end + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference; + vl_PDU_SCCP.released.releaseCause:=cg_Rel_endUserOrig; + vl_PDU_SCCP.released.pointer1:=0; + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + //release resources, return to idle + ReleaseResources(pl_session); + + }//endif + + }//endfunction GuardTimer_Expired + + + //****************************************************************** + function InternalResetTimer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + {//startfunction + + //local declarations + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_RESET_ind vl_N_RESET_ind; + + //Action Table follows + + if (ConnectionTable[pl_session].state==active) + {//startif + //send ASP_SCCP_N_RESET_ind + //assemble ASP_SCCP_N_ASP + vl_N_RESET_ind.originator:=cg_NSP; + vl_N_RESET_ind.reason:=cg_DISC_abnormal_T; + vl_N_RESET_ind.connectionId:=ConnectionTable[pl_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_RESET_ind( + vl_N_RESET_ind.originator, + vl_N_RESET_ind.reason, + vl_N_RESET_ind.connectionId + ));//send ASP_SCCP_N_RESET_ind + //send Reset Request + + vl_PDU_SCCP.resetreq.messageType:=rsr; + vl_PDU_SCCP.resetreq.destLocRef:=ConnectionTable[pl_session].remoteReference; + vl_PDU_SCCP.resetreq.sourceLocRef:=ConnectionTable[pl_session].localReference; + vl_PDU_SCCP.resetreq.resetCause:=cg_Res_endUserOrig; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Reset Request + + //start reset timer + + f_StartTimer(reset,pl_session); + //restart send inactivity timer + f_StopTimer(ias,pl_session);//to avoid warnings + f_StartTimer(ias,pl_session); + //reset variables etc. + //change state + ConnectionTable[pl_session].state:=reset_bothway; + + }//endif + }//InternalResetTimer_Expired + + //****************************************************************** + function Reset_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + {//startfunction + + //local declarations + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + //Action Table follows + if (ConnectionTable[pl_session].state==reset_bothway) + {//startif + + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_NSP; + vl_N_DISCONNECT_ind.reason:=cg_DISC_abnormal_T; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[pl_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //release resources, stop inactivity timers, change state to idle + ReleaseResources(pl_session); + }//endif + + }//Reset_Timer_Expired + + //****************************************************************** + function Interval_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + {//startfunction + + //Action Table follows + if (ConnectionTable[pl_session].state==disconnect_pending) + { + log ("Interval timer expired"); + //release resources + ReleaseResources(pl_session); + } + + }//Interval_Timer_Expired + + + + //****************************************************************** + function RepeatRelease_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + { + + //local declarations + var PDU_SCCP vl_PDU_SCCP; + + //Action Table follows + if (ConnectionTable[pl_session].state==disconnect_pending) + { + //assemble and route MTP3_ASP + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference; + vl_PDU_SCCP.released.releaseCause:=cg_Res_endUserOrig; + vl_PDU_SCCP.released.pointer1:=0; + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + //restart repeat release timer + f_StopTimer(repeat_rel,pl_session);//to avoid warnings + f_StartTimer(repeat_rel,pl_session); + //no state change, return + } + + }//RepeatRelease_Timer_Expired + + + //****************************************************************** + function Release_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + { + + //local declarations + var PDU_SCCP vl_PDU_SCCP; + + //Action Table follows + if (ConnectionTable[pl_session].state==disconnect_pending) + { + //assemble and route MTP3_ASP + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference; + vl_PDU_SCCP.released.releaseCause:=cg_Res_endUserOrig;//? + vl_PDU_SCCP.released.pointer1:=0; + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + f_StartTimer(repeat_rel,pl_session); + f_StartTimer(int,pl_session); + //no state change, return + + }//endif + + }//Release_Timer_Expired + + + //****************************************************************** + function ReceiveInactivity_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + { + //local declarations + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + //Action Table follows + if (ConnectionTable[pl_session].state==idle){} + else if (ConnectionTable[pl_session].state==active) + { + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_NSP; + vl_N_DISCONNECT_ind.reason:=cg_DISC_endUserFailure;//? + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[pl_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //stop inactivity timers + f_StopTimer(ias,pl_session); + f_StopTimer(iar,pl_session); + + //assemble and route MTP3_ASP + + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference; + vl_PDU_SCCP.released.releaseCause:=cg_Rel_expRecInacTimer; + vl_PDU_SCCP.released.pointer1:=0;// No options + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + //start release timer + f_StartTimer(rel,pl_session); + ConnectionTable[pl_session].state:=disconnect_pending; + + }//endif + + }//ReceiveInactivity_Timer_Expired + + + //****************************************************************** + function SendInactivity_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + { + + //local declarations + var PDU_SCCP vl_PDU_SCCP; + + //Action Table follows + + if (ConnectionTable[pl_session].state==active) + { + + //assemble and route MTP3_ASP + vl_PDU_SCCP.inacttest.messageType :=it; + vl_PDU_SCCP.inacttest.destLocRef :=ConnectionTable[pl_session].remoteReference; + vl_PDU_SCCP.inacttest.sourceLocRef:=ConnectionTable[pl_session].localReference; + + vl_PDU_SCCP.inacttest.protClass:={ + class:='0010'B, + messageHandling:='0000'B + };//protocol class 2 + + vl_PDU_SCCP.inacttest.sequencingSegmenting:={ + reserved:='0'B, + p_s:='0000000'B, + more:='0'B, + pr:='0000000'B + };//it will be ignored + + vl_PDU_SCCP.inacttest.credit:='00'O; + //Param name credit(9), length 1, credit 0 -it will be mercifully ignored anyhow + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send inactivity test + + //restart send inactivity timer + f_StopTimer(ias,pl_session);//to avoid warnings + f_StartTimer(ias,pl_session); + + }//endif + + }//endfunction + + //****************************************************************** + function Conn_Timer_Expired(integer pl_session) runs on SCCP_CT + //****************************************************************** + { + + //local declarations + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + if (ConnectionTable[pl_session].state==connection_pending_OG) + { + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_NSP; + vl_N_DISCONNECT_ind.reason:=cg_DISC_abnormal_T; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[pl_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //release resources + ReleaseResources(pl_session); + } + else if (ConnectionTable[pl_session].state==wait_conn_confirm) + { + ReleaseResources(pl_session); + } + + }//Conn_Timer_Expired + + //****************************************************************** + function GenerateLocalReference() runs on SCCP_CT return OCT3 + //****************************************************************** + { + var OCT3 vl_LocalReference; + + do + { + vl_LocalReference := int2oct(float2int(rnd()*tsp_maxLocalReference), 3 ); + } + while ( Retrieve_session( vl_LocalReference ) != -1 ); + return vl_LocalReference; + + }//GenerateLocalReference + + //****************************************************************** + function GenerateConnectionId() runs on SCCP_CT return integer + //****************************************************************** + { + var integer vl_ConnectionId; + + do { vl_ConnectionId := float2int(rnd()*tsp_max_ConnectionId); } + while ( Retrieve_session_connectionId( vl_ConnectionId ) != -1 ); + + return vl_ConnectionId; + }//GenerateConnectionId + + //****************************************************************** + function Stop_sessionTimers ( integer pl_session) runs on SCCP_CT + //****************************************************************** + { + if (T_conn_est[pl_session].running) + { f_StopTimer(conn_est,pl_session);} + if (T_ias[pl_session].running) + { f_StopTimer(ias,pl_session);} + if (T_iar[pl_session].running) + { f_StopTimer(iar,pl_session);} + if (T_rel[pl_session].running) + { f_StopTimer(rel,pl_session);} + if (T_repeat_rel[pl_session].running) + { f_StopTimer(repeat_rel,pl_session);} + if (T_int[pl_session].running) + { f_StopTimer(int,pl_session);} + // if (T_T_guard[pl_session].running) + // { f_StopTimer(t_t_guard,pl_session);} + if (T_reset[pl_session].running) + { f_StopTimer(reset,pl_session);} + //T_reassembly[pl_session].stop; + + }//Stop_sessionTimers + + //****************************************************************** + function CheckIdleIndividuals() runs on SCCP_CT return integer + //****************************************************************** + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if (ConnectionTable[vl_j].state==idle) + { + log("First idle individual index:",vl_j); + return vl_j; + } + } + + return -1; + + }//CheckIdleIndividuals + + //****************************************************************** + function ConnectionAlreadyEstablished( OCT3 pl_LocRef) runs on SCCP_CT return boolean + //****************************************************************** + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if (ConnectionTable[vl_j].localReference==pl_LocRef) + { + return true; + } + } + return false; + + } //ConnectionAlreadyEstablished + + //****************************************************************** + function ConnectionAlreadyEstablished_remote( OCT3 pl_LocRef) runs on SCCP_CT return boolean + //****************************************************************** + { + var integer vl_j; + + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if (ConnectionTable[vl_j].remoteReference==pl_LocRef) + { + return true; + } + } + return false; + + } //ConnectionAlreadyEstablished_remote + + //****************************************************************** + function ConnectionAlreadyEstablished_connectionId(integer pl_ConnId) runs on SCCP_CT return boolean + //****************************************************************** + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if (ConnectionTable[vl_j].connectionId==pl_ConnId) + { + return true; + } + } + + return false; + + } //ConnectionAlreadyEstablished_connectionId + + //****************************************************************** + function Retrieve_session( OCT3 pl_LocRef ) runs on SCCP_CT return integer + //****************************************************************** + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + + if (ConnectionTable[vl_j].localReference==pl_LocRef) + { + log("Session index based on local reference:",vl_j); + return vl_j; + } + } + + return -1; + + } //Retrieve_session + + //****************************************************************** + function Retrieve_session_remote( OCT3 pl_LocRef ) + runs on SCCP_CT return integer + //****************************************************************** + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if (ConnectionTable[vl_j].remoteReference==pl_LocRef) + { + log("Session index based on remote reference:",vl_j); + return vl_j; + } + } + return -1; + + } //Retrieve_session_remote + + //****************************************************************** + function Retrieve_session_connectionId( integer pl_ConnId ) + runs on SCCP_CT return integer + //****************************************************************** + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if (ConnectionTable[vl_j].connectionId==pl_ConnId) + { + log("Session index based on connection ID:",vl_j); + return vl_j; + } + } + return -1; + + } //Retrieve_session_connectionId + + //================================================================== + // Connectionless Segmented Data Handling/ + //================================================================== + //================================================================== + // SENDING: SCCP->MTP3 Segmentation Local Reference Handling + // Handles segmLocRefTable,v_segmLocRefIndex, + // which are defined in SCCP_typedefs.ttcn + //================================================================== + + //****************************************************************** + //function exist_segmLocalRef + //****************************************************************** + + function exist_segmLocalRef( in OCT3 pl_segLocRef) + runs on SCCP_CT return boolean + { + if( get_segmLocalRefIndex(pl_segLocRef) == -1 ) { return false;} + else { return true; }; + } //exist_segmLocalRef + + //****************************************************************** + //function get_segLocalRefIndex + //****************************************************************** + + function get_segmLocalRefIndex(in OCT3 pl_segmLocRef) + runs on SCCP_CT return integer + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if( segmLocRefTable[vl_j] == pl_segmLocRef ) { return vl_j;} + } + return -1; + }//get_segLocalRefIndex + + //****************************************************************** + //function reset_segmLocalRef + //****************************************************************** + function reset_segmLocalRef(in OCT3 pl_segmLocRef) + runs on SCCP_CT + { + var integer vl_j; + vl_j:= get_segmLocalRefIndex( pl_segmLocRef ) + segmLocRefTable[vl_j] := '000000'O; + } + + //****************************************************************** + // function create_segmLocalRef + //****************************************************************** + + function create_segmLocalRef() + runs on SCCP_CT return OCT3 + { + var OCT3 vl_segmLocRef; + v_segmLocRefIndex := (v_segmLocRefIndex +1) mod 16; + do + { + vl_segmLocRef := int2oct(float2int( rnd() *tsp_maxLocalReference), 3 ); + } + while ( exist_segmLocalRef( vl_segmLocRef ) ); + + return vl_segmLocRef; + }//create_segmLocalRef + + //================================================================== + // RECEIVING CONNECTIONLESS PDUs BY SCCP + //================================================================== + + //****************************************************************** + //function exist_ClessRcvBuff + //****************************************************************** + function exist_ClessRcvBuff( in OCT3 pl_segmRemRef) + runs on SCCP_CT return boolean + { + if( get_ClessRcvBuffIndex(pl_segmRemRef) == -1 ) { return false;} + else { return true; }; + } //exist_ClessRcvBuff + + //****************************************************************** + //function get_segRemoteRefIndex + //****************************************************************** + function get_ClessRcvBuffIndex(in OCT3 pl_segmRemRef) + runs on SCCP_CT return integer + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if( ClessRcvBuffTable[vl_j].segmRemoteRef == pl_segmRemRef ) + { return vl_j;} + } + return -1; + }//get_ClessRcvBuffIndex + + //****************************************************************** + //function get_idle_ClessRcvBuffIndex + //****************************************************************** + function get_idle_ClessRcvBuffIndex( ) + runs on SCCP_CT return integer + { + var integer vl_j; + for (vl_j:=0;vl_j<16;vl_j:=vl_j+1) + { + if( ClessRcvBuffTable[vl_j].state == segmLocRef_idle ) { return vl_j;} + } + return -1; + }//get_idle_ClessRcvBuffIndex + + //****************************************************************** + //function allocate_ClessRcvBuff + //****************************************************************** + function allocate_ClessRcvBuff(in OCT3 pl_segmRemRef) + runs on SCCP_CT return integer + { + var OCT3 vl_segmRemRef; + var integer vl_j; + + if( exist_ClessRcvBuff(pl_segmRemRef) ){ return -1;}; + + vl_j := get_idle_ClessRcvBuffIndex(); + ClessRcvBuffTable[vl_j].state := segmLocRef_busy; + ClessRcvBuffTable[vl_j].segmRemoteRef := pl_segmRemRef; + ClessRcvBuffTable[vl_j].reassembler_buffer.buffer:=''O; + ClessRcvBuffTable[vl_j].reassembler_buffer.actlen:=0; + return vl_j; + + }//allocate_ClessRcvBuff + //****************************************************************** + //function reallocate_ClessRcvBuff + //****************************************************************** + function reallocate_ClessRcvBuff(in integer pl_index ) + runs on SCCP_CT + { + ClessRcvBuffTable[pl_index].state := segmLocRef_idle; + // maybe unnecessaryy + ClessRcvBuffTable[pl_index].segmRemoteRef := '000000'O; + ClessRcvBuffTable[pl_index].reassembler_buffer.buffer:=''O; + ClessRcvBuffTable[pl_index].reassembler_buffer.actlen:=0; + return; + } + + //****************************************************************** + //function store_segmData + //****************************************************************** + function store_segmData(in integer pl_index, in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata) + runs on SCCP_CT + { + ClessRcvBuffTable[pl_index].reassembler_buffer.buffer:= + ClessRcvBuffTable[pl_index].reassembler_buffer.buffer& + pl_PDU_SCCP_ExtUnitdata.data.data; + ClessRcvBuffTable[pl_index].reassembler_buffer.actlen:= + ClessRcvBuffTable[pl_index].reassembler_buffer.actlen+ + pl_PDU_SCCP_ExtUnitdata.data.paramLength; + } //store_segmData + + //****************************************************************** + //function send_ClessRcvBuff_in_N_UNITDATAind + //****************************************************************** + function send_ClessRcvBuff_in_N_UNITDATAind ( + in integer pl_index, + in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata) + runs on SCCP_CT + { + var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind; + + vl_N_UNITDATA_ind.calledAddress := + ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.calledPAddress ); + + vl_N_UNITDATA_ind.callingAddress := + ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.callingPAddress ); + + vl_N_UNITDATA_ind.sequenceControl:= + '0000000'B&pl_PDU_SCCP_ExtUnitdata.protClass.class[3]; + if( pl_PDU_SCCP_ExtUnitdata.protClass.messageHandling == '1000'B ) + { vl_N_UNITDATA_ind.returnOption := '00000001'B; } + else + { vl_N_UNITDATA_ind.returnOption := '00000000'B; } + + vl_N_UNITDATA_ind.userData := ClessRcvBuffTable[pl_index].reassembler_buffer.buffer; + + vl_N_UNITDATA_ind.importance := omit; + + SCCP_SP_PORT.send( vl_N_UNITDATA_ind ); + + return; + }//send_ClessRcvBuff_in_N_UNITDATAind + + //****************************************************************** + //function send_ClessData_in_N_UNITDATAind + // unbuffered data sending + //****************************************************************** + + function send_ClessData_in_N_UNITDATAind ( + in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata) + runs on SCCP_CT + { + var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind; + + vl_N_UNITDATA_ind.calledAddress := + ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.calledPAddress ); + + vl_N_UNITDATA_ind.callingAddress := + ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.callingPAddress ); + + vl_N_UNITDATA_ind.sequenceControl:= + '0000000'B&pl_PDU_SCCP_ExtUnitdata.protClass.class[3]; + if( pl_PDU_SCCP_ExtUnitdata.protClass.messageHandling == '1000'B ) + { vl_N_UNITDATA_ind.returnOption := '00000001'B; } + else + { vl_N_UNITDATA_ind.returnOption := '00000000'B; } + + vl_N_UNITDATA_ind.userData := pl_PDU_SCCP_ExtUnitdata.data.data; + + vl_N_UNITDATA_ind.importance := omit; + + SCCP_SP_PORT.send( vl_N_UNITDATA_ind ); + return; + }//send_ClessData_in_N_UNITDATAind + + //****************************************************************** + // CONN.ORIENTED SEGMENTING/REASSEMBLING + //****************************************************************** + + //****************************************************************** + // SEGMENTING + //****************************************************************** + + //****************************************************************** + // function sending_dataform1s_in_ASP_MTP_TRANSFERreqs + // segmentates data and sends segments in dataform1 messages + // included in asp_MTP3_TRANSFERreq PDUs + // == segmentation - connection oriented case == + // counterpair: buffered_sending_ASP_N_DATA_ind + //****************************************************************** + function sending_dataform1s_in_ASP_MTP_TRANSFERreqs( in ASP_SCCP_N_DATA_req pl_N_DATA_req ) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var integer vl_len; + var integer vl_actdatalen; + var SCCP_PAR_UserData vl_data; + var integer vl_from; // first position in vl_data to be sent + vl_data := pl_N_DATA_req.userData; + vl_from := 0; + // fixed part of messages: + vl_PDU_SCCP.dataform1.messageType:=dt1; + vl_PDU_SCCP.dataform1.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.dataform1.segmentingReassembl:={ + more:='1'B, + reserved:='0000000'B + }; + vl_PDU_SCCP.dataform1.pointer1:=1; + // variable part of messages: + vl_len := lengthof(vl_data); + + while ( vl_len > 0 ) + { + + log("vl_len:",vl_len); + log("vl_from",vl_from); + if(vl_len > v_sccp_data_maxlen) + { + vl_actdatalen := v_sccp_data_maxlen; + vl_PDU_SCCP.dataform1.segmentingReassembl.more :='1'B; + } + else + { + vl_actdatalen := vl_len; + vl_PDU_SCCP.dataform1.segmentingReassembl.more :='0'B; + }; + + vl_PDU_SCCP.dataform1.data.data:= substr( vl_data, vl_from, vl_actdatalen); + vl_PDU_SCCP.dataform1.data.paramLength:= vl_actdatalen; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Data Form1 + + log( "data sent by MTP3_SCCP_PORT: ",vl_PDU_SCCP.dataform1.data.data); + + //restart send inactivity timer + f_StopTimer(ias,v_session);//to avoid warnings + f_StartTimer(ias,v_session); + + vl_from := vl_from + vl_actdatalen; + vl_len := vl_len - vl_actdatalen; + + }//while + } //sending_dataform1s_in_ASP_MTP_TRANSFERreqs + + //****************************************************************** + // REASSEMBLING + //****************************************************************** + + //****************************************************************** + // function buffered_sending_ASP_N_DATA_ind + // counterpair of sending_dataform1s_in_ASP_MTP_TRANSFERreqs + //****************************************************************** + + function buffered_sending_ASP_N_DATA_ind( in PDU_SCCP_DataForm1 pl_PDU_SCCP_DataForm1 ) + runs on SCCP_CT + { + // Investigate this shorcut (not implemented): + // if actlen==0 and more==0=> send immediately + + // DT1 should be put to the reassembly buffer + var integer vl_newbufflen; + log("DT1 will be put to the reassembly buffer"); + //log( ConnectionTable[v_session].connectionId ); + vl_newbufflen := ConnectionTable[v_session].reassembler_buffer.actlen + + pl_PDU_SCCP_DataForm1.data.paramLength; + + if( vl_newbufflen <= ConnectionTable[v_session].reassembler_buffer.maxlen) + { + ConnectionTable[v_session].reassembler_buffer.buffer := + ConnectionTable[v_session].reassembler_buffer.buffer & + pl_PDU_SCCP_DataForm1.data.data; + ConnectionTable[v_session].reassembler_buffer.actlen := vl_newbufflen; + log("DT1 data has been put to the reassembly buffer"); + } + else + { + //send as much as possible OR error ???? NOT READY YET !!!! + //CONT HERE, ask LAFA + log("Unexpected/unimplemented program branch"); + } + + // sending: + if( pl_PDU_SCCP_DataForm1.segmentingReassembl.more == '0'B ) + { + log("DT1/segmentingReassembl/more==0 received=> send ASP_SCCP_N_DATA comes"); + //send: + SCCP_SP_PORT.send( t_ASP_N_DATA_ind( + ConnectionTable[v_session].reassembler_buffer.buffer, + ConnectionTable[v_session].connectionId, + omit)); + + //restart send inactivity timer + f_StopTimer(ias,v_session);//to avoid warnings + f_StartTimer(ias,v_session); + + // clear the buffer: + ConnectionTable[v_session].reassembler_buffer.buffer :=''O; + ConnectionTable[v_session].reassembler_buffer.actlen := 0; + } + else + { + log("DT1/segmentingReassembl/more==1 received=> sent to buffer only"); + } + }//buffered_sending_ASP_N_DATA_ind + + + //****************************************************************** + // CONVERSIONS + //****************************************************************** + // + // Differences between standards are hidden here !!!! + // + // 3 different functions working on different structures with the + // virtually indentical code + + //****************************************************************** + // Functions coding ASP address into octetstream + //****************************************************************** + + // ITU + + function ConvertASPAddressToEncodedAddress_itu( in SCCP_PAR_Address pl_ASPAddress) + runs on SCCP_CT + return SCCP_param_CPartyAddressEnc + { + + var SCCP_param_CPartyAddress_itu vl_PDUAddress; //structured fit to encoding + var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded; + + vl_PDUAddress.addressIndicator.pointCodeIndic:= + pl_ASPAddress.addressIndicator.pointCodeIndic; + + vl_PDUAddress.addressIndicator.ssnIndicator:= + pl_ASPAddress.addressIndicator.ssnIndicator; + + vl_PDUAddress.addressIndicator.globalTitleIndic:= + pl_ASPAddress.addressIndicator.globalTitleIndic; + + vl_PDUAddress.addressIndicator.routingIndicator:= + pl_ASPAddress.addressIndicator.routingIndicator; + + vl_PDUAddress.addressIndicator.reserved:='0'B; + // if (ischosen(pl_ASPAddress.signPointCode) ) not used because it is mandatory field (???) + + //----signPointCode handling + if ( ispresent( pl_ASPAddress.signPointCode )) { + vl_PDUAddress.signPointCode := + '00'B&pl_ASPAddress.signPointCode; + } else { + vl_PDUAddress.signPointCode := omit; + }; + + //----subsystemNumber handling + if ( ispresent( pl_ASPAddress.subsystemNumber ) ){ + vl_PDUAddress.subsystemNumber := pl_ASPAddress.subsystemNumber; + } else { + vl_PDUAddress.subsystemNumber :=omit; + }; + + // --- globalTitle handling-- + if ( ispresent(pl_ASPAddress.globalTitle)) + {//startif1 + + var SCCP_ASPfield_GlobalTitle tmpGT ; + tmpGT := pl_ASPAddress.globalTitle; + + if (ischosen(tmpGT.gti0001)) + { + vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress; + vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven; + vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0010)) + { + vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType; + vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0011)) + { + vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType; + vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme; + vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan; + vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0100)) + { + vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType; + vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme; + vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan; + vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress; + vl_PDUAddress.globalTitle.gti0100.reserved:='0'B; + vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress; + } + } + else + { + vl_PDUAddress.globalTitle := omit; + }; + + vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_itu( vl_PDUAddress); + vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr); + + return vl_PDUAddressEncoded; + + } //ConvertASPAddressToEncodedAddress_itu + + //****************************************************************** + + // ANSI + function ConvertASPAddressToEncodedAddress_ansi(in SCCP_PAR_Address pl_ASPAddress) + runs on SCCP_CT return SCCP_param_CPartyAddressEnc + { + + var SCCP_param_CPartyAddress_ansi vl_PDUAddress; //structured fit to encoding + var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded; + + vl_PDUAddress.addressIndicator.pointCodeIndic:= + pl_ASPAddress.addressIndicator.pointCodeIndic; + + vl_PDUAddress.addressIndicator.ssnIndicator:= + pl_ASPAddress.addressIndicator.ssnIndicator; + + vl_PDUAddress.addressIndicator.globalTitleIndic:= + pl_ASPAddress.addressIndicator.globalTitleIndic; + + vl_PDUAddress.addressIndicator.routingIndicator:= + pl_ASPAddress.addressIndicator.routingIndicator; + + vl_PDUAddress.addressIndicator.reserved:='1'B; + + //----signPointCode handling + if ( ispresent( pl_ASPAddress.signPointCode )){ + vl_PDUAddress.signPointCode := pl_ASPAddress.signPointCode; + } else { + vl_PDUAddress.signPointCode := omit; + }; + + //----subsystemNumber handling + if ( ispresent( pl_ASPAddress.subsystemNumber )) { + vl_PDUAddress.subsystemNumber:=pl_ASPAddress.subsystemNumber; + } else { + vl_PDUAddress.subsystemNumber :=omit; + }; + + if (ispresent(pl_ASPAddress.globalTitle)) + {//startif1 + + var SCCP_ASPfield_GlobalTitle tmpGT := pl_ASPAddress.globalTitle; + + + if (ischosen(tmpGT.gti0010)) + { + vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType; + vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0011)) //ansi gti001, meaning: + //used GT: SCCP_field_GlobalTitle_TT_NP_ES + { + //the left side is ANSI!!!: + vl_PDUAddress.globalTitle.gti0001.translationType:=tmpGT.gti0011.translationType; + vl_PDUAddress.globalTitle.gti0001.encodingScheme:=tmpGT.gti0011.encodingScheme; + vl_PDUAddress.globalTitle.gti0001.numberingPlan:=tmpGT.gti0011.numberingPlan; + vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress; + }; + + } + else + { + vl_PDUAddress.globalTitle := omit; + }; + + // SCCP_param_CPartyAddress_ansi -> octetstring + vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_ansi( vl_PDUAddress); + vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr); + + return vl_PDUAddressEncoded + + } //ConvertASPAddressToEncodedAddress_ansi + + // ttc national: + + function ConvertASPAddressToEncodedAddress_ttc( in SCCP_PAR_Address pl_ASPAddress) + runs on SCCP_CT + return SCCP_param_CPartyAddressEnc + { + + var SCCP_param_CPartyAddress_ttc vl_PDUAddress; //structured fit to encoding + var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded; + + vl_PDUAddress.addressIndicator.pointCodeIndic:= + pl_ASPAddress.addressIndicator.pointCodeIndic; + + vl_PDUAddress.addressIndicator.ssnIndicator:= + pl_ASPAddress.addressIndicator.ssnIndicator; + + vl_PDUAddress.addressIndicator.globalTitleIndic:= + pl_ASPAddress.addressIndicator.globalTitleIndic; + + vl_PDUAddress.addressIndicator.routingIndicator:= + pl_ASPAddress.addressIndicator.routingIndicator; + + vl_PDUAddress.addressIndicator.reserved:='1'B; + + //----signPointCode handling + if ( ispresent( pl_ASPAddress.signPointCode )) { + vl_PDUAddress.signPointCode := pl_ASPAddress.signPointCode; + } else { + vl_PDUAddress.signPointCode := omit; + }; + + //----subsystemNumber handling + if ( ispresent( pl_ASPAddress.subsystemNumber ) ){ + vl_PDUAddress.subsystemNumber:= pl_ASPAddress.subsystemNumber; + } else { + vl_PDUAddress.subsystemNumber :=omit; + }; + + // --- globalTitle handling-- + if ( ispresent(pl_ASPAddress.globalTitle)) + {//startif1 + + var SCCP_ASPfield_GlobalTitle tmpGT ; + tmpGT := pl_ASPAddress.globalTitle; + + if (ischosen(tmpGT.gti0001)) + { + vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress; + vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven; + vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0010)) + { + vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType; + vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0011)) + { + vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType; + vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme; + vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan; + vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0100)) + { + vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType; + vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme; + vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan; + vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress; + vl_PDUAddress.globalTitle.gti0100.reserved:='0'B; + vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress; + }; + } + else + { + vl_PDUAddress.globalTitle := omit; + }; + + vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_ttc( vl_PDUAddress); + vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr); + + return vl_PDUAddressEncoded; + + } //ConvertASPAddressToEncodedAddress_ttc + + // mpt national: + + function ConvertASPAddressToEncodedAddress_mpt( in SCCP_PAR_Address pl_ASPAddress) + runs on SCCP_CT + return SCCP_param_CPartyAddressEnc + { + + var SCCP_param_CPartyAddress_mpt vl_PDUAddress; //structured fit to encoding + var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded; + + vl_PDUAddress.addressIndicator.pointCodeIndic:= + pl_ASPAddress.addressIndicator.pointCodeIndic; + + vl_PDUAddress.addressIndicator.ssnIndicator:= + pl_ASPAddress.addressIndicator.ssnIndicator; + + vl_PDUAddress.addressIndicator.globalTitleIndic:= + pl_ASPAddress.addressIndicator.globalTitleIndic; + + vl_PDUAddress.addressIndicator.routingIndicator:= + pl_ASPAddress.addressIndicator.routingIndicator; + + vl_PDUAddress.addressIndicator.reserved:='1'B; + + //----signPointCode handling + if ( ispresent( pl_ASPAddress.signPointCode )) { + vl_PDUAddress.signPointCode := pl_ASPAddress.signPointCode; + } else { + vl_PDUAddress.signPointCode := omit; + }; + + //----subsystemNumber handling + if ( ispresent( pl_ASPAddress.subsystemNumber ) ){ + vl_PDUAddress.subsystemNumber:= pl_ASPAddress.subsystemNumber; + } else { + vl_PDUAddress.subsystemNumber :=omit; + }; + + // --- globalTitle handling-- + if ( ispresent(pl_ASPAddress.globalTitle)) + {//startif1 + + var SCCP_ASPfield_GlobalTitle tmpGT ; + tmpGT := pl_ASPAddress.globalTitle; + + if (ischosen(tmpGT.gti0001)) + { + vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress; + vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven; + vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0010)) + { + vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType; + vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0011)) + { + vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType; + vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme; + vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan; + vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress; + } + else if (ischosen(tmpGT.gti0100)) + { + vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType; + vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme; + vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan; + vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress; + vl_PDUAddress.globalTitle.gti0100.reserved:='0'B; + vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress; + }; + } + else + { + vl_PDUAddress.globalTitle := omit; + }; + + vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_mpt( vl_PDUAddress); + vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr); + + return vl_PDUAddressEncoded; + + } //ConvertASPAddressToEncodedAddress_mpt + + //****************************************************************** + + //****************************************************************** + // CONVERSION / DECODING + //****************************************************************** + + //****************************************************************** + // function ConvertPDUEncodedAddressToASPAddress_itu + // converts Encoded PDU Address into sturctured ASP Address + // according to ITU + //****************************************************************** + function ConvertPDUEncodedAddressToASPAddress_itu( in SCCP_param_CPartyAddressEnc pl_PDUAddress) + runs on SCCP_CT return SCCP_PAR_Address + { + var SCCP_PAR_Address vl_ASPAddress; + var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc + var SCCP_param_CPartyAddress_itu vl_PDUAddress; + + //new code detail (ethbaat 2003.11.04: + // decoding from octetstring to structure "SCCP_param_CPartyAddress_itu": + vl_PDUAddress := dec_PDU_SCCP_Address_itu( pl_PDUAddress.addr ); + + vl_ASPAddress.addressIndicator.pointCodeIndic := + vl_PDUAddress.addressIndicator.pointCodeIndic; + + vl_ASPAddress.addressIndicator.ssnIndicator := + vl_PDUAddress.addressIndicator.ssnIndicator; + + vl_ASPAddress.addressIndicator.globalTitleIndic := + vl_PDUAddress.addressIndicator.globalTitleIndic; + + vl_ASPAddress.addressIndicator.routingIndicator := + vl_PDUAddress.addressIndicator.routingIndicator; + + if (ispresent ( vl_PDUAddress.signPointCode)) { + vl_ASPAddress.signPointCode:= substr(vl_PDUAddress.signPointCode,2,14); + } + else { + vl_ASPAddress.signPointCode := omit; //ethbaat 2003.11.04 + } + + if (ispresent (vl_PDUAddress.subsystemNumber )) { //always suggested ... + vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber; + } + else { + vl_ASPAddress.subsystemNumber:=omit; //ethbaat 2003.11.04 + } + + if( ispresent( vl_PDUAddress.globalTitle ) ){ + if (ischosen (vl_PDUAddress.globalTitle.gti0001)) + { + tmpGT.gti0001.natureOfAddress:=vl_PDUAddress.globalTitle.gti0001.natureOfAddress; + tmpGT.gti0001.oddeven:=vl_PDUAddress.globalTitle.gti0001.oddeven; + tmpGT.gti0001.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0010)) + { + tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType; + tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0011)) + { + tmpGT.gti0011.translationType :=vl_PDUAddress.globalTitle.gti0011.translationType; + tmpGT.gti0011.encodingScheme :=vl_PDUAddress.globalTitle.gti0011.encodingScheme; + tmpGT.gti0011.numberingPlan :=vl_PDUAddress.globalTitle.gti0011.numberingPlan; + tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0011.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0100)) + { + tmpGT.gti0100.translationType :=vl_PDUAddress.globalTitle.gti0100.translationType; + tmpGT.gti0100.encodingScheme :=vl_PDUAddress.globalTitle.gti0100.encodingScheme; + tmpGT.gti0100.numberingPlan :=vl_PDUAddress.globalTitle.gti0100.numberingPlan; + tmpGT.gti0100.natureOfAddress :=vl_PDUAddress.globalTitle.gti0100.natureOfAddress + //tmpGT.gti0100.reserved:='00'B; + tmpGT.gti0100.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0100.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + } + } + else + { + vl_ASPAddress.globalTitle:= omit; + }; + + return vl_ASPAddress; + } //ConvertPDUEncodedAddressToASPAddress_itu + + //****************************************************************** + // function ConvertPDUEncodedAddressToASPAddress_ansi + // converts Encoded PDU Address into sturctured ASP Address + // according to ANSI + //****************************************************************** + + function ConvertPDUEncodedAddressToASPAddress_ansi( in SCCP_param_CPartyAddressEnc pl_PDUAddress) + runs on SCCP_CT return SCCP_PAR_Address + { + var SCCP_PAR_Address vl_ASPAddress; + var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc + var SCCP_param_CPartyAddress_ansi vl_PDUAddress; + + //new code detail (ethbaat 2003.11.04: + // decoding from octetstring to structure "SCCP_param_CPartyAddress_itu": + vl_PDUAddress := dec_PDU_SCCP_Address_ansi( pl_PDUAddress.addr ); + + vl_ASPAddress.addressIndicator.pointCodeIndic := + vl_PDUAddress.addressIndicator.pointCodeIndic; + + vl_ASPAddress.addressIndicator.ssnIndicator := + vl_PDUAddress.addressIndicator.ssnIndicator; + + vl_ASPAddress.addressIndicator.globalTitleIndic := + vl_PDUAddress.addressIndicator.globalTitleIndic; + + vl_ASPAddress.addressIndicator.routingIndicator := + vl_PDUAddress.addressIndicator.routingIndicator; + + if (ispresent (vl_PDUAddress.signPointCode )) { + vl_ASPAddress.signPointCode:= vl_PDUAddress.signPointCode; + } + else { + //vl_ASPAddress.signPointCode.pointCode:='0000000000000000'B; //or empty??? ( 16len bitstring + vl_ASPAddress.signPointCode:= omit; //ethbaat 2003.11.11 + } + + if (ispresent (vl_PDUAddress.subsystemNumber)) { //always suggested ... + vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber; + } + else { + vl_ASPAddress.subsystemNumber:=omit; //ethbaat 2003.11.04 + //vl_ASPAddress.subsystemNumber:= 0; + }; + + if( ispresent( vl_PDUAddress.globalTitle ) ){ + if (ischosen (vl_PDUAddress.globalTitle.gti0001)) + { + tmpGT.gti0011.translationType :=vl_PDUAddress.globalTitle.gti0001.translationType; + tmpGT.gti0011.encodingScheme :=vl_PDUAddress.globalTitle.gti0001.encodingScheme; + tmpGT.gti0011.numberingPlan :=vl_PDUAddress.globalTitle.gti0001.numberingPlan; + tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + } + if (ischosen (vl_PDUAddress.globalTitle.gti0010)) + { + tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType; + tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + }; + } + else + { + vl_ASPAddress.globalTitle:= omit; + }; + + return vl_ASPAddress; + } //ConvertPDUEncodedAddressToASPAddress_ansi + + //****************************************************************** + // function ConvertPDUEncodedAddressToASPAddress_ttc + // converts Encoded PDU Address into sturctured ASP Address + // according to ttc + //****************************************************************** + function ConvertPDUEncodedAddressToASPAddress_ttc( in SCCP_param_CPartyAddressEnc pl_PDUAddress) + runs on SCCP_CT return SCCP_PAR_Address + { + var SCCP_PAR_Address vl_ASPAddress; + var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc + var SCCP_param_CPartyAddress_ttc vl_PDUAddress; + + //new code detail (ethbaat 2003.11.04: + // decoding from octetstring to structure "SCCP_param_CPartyAddress_itu": + vl_PDUAddress := dec_PDU_SCCP_Address_ttc( pl_PDUAddress.addr ); + + vl_ASPAddress.addressIndicator.pointCodeIndic := + vl_PDUAddress.addressIndicator.pointCodeIndic; + + vl_ASPAddress.addressIndicator.ssnIndicator := + vl_PDUAddress.addressIndicator.ssnIndicator; + + vl_ASPAddress.addressIndicator.globalTitleIndic := + vl_PDUAddress.addressIndicator.globalTitleIndic; + + vl_ASPAddress.addressIndicator.routingIndicator := + vl_PDUAddress.addressIndicator.routingIndicator; + + if (ispresent ( vl_PDUAddress.signPointCode)) { + vl_ASPAddress.signPointCode:= vl_PDUAddress.signPointCode; //old:substr(vl_PDUAddress.signPointCode,2,16); + } + else { + vl_ASPAddress.signPointCode := omit; //ethbaat 2003.11.04 + } + + if (ispresent (vl_PDUAddress.subsystemNumber )) { //always suggested ... + vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber; + } + else { + vl_ASPAddress.subsystemNumber:=omit; //ethbaat 2003.11.04 + } + + if( ispresent( vl_PDUAddress.globalTitle)){ + if (ischosen (vl_PDUAddress.globalTitle.gti0001)) + { + tmpGT.gti0001.natureOfAddress:=vl_PDUAddress.globalTitle.gti0001.natureOfAddress; + tmpGT.gti0001.oddeven:=vl_PDUAddress.globalTitle.gti0001.oddeven; + tmpGT.gti0001.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0010)) + { + tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType; + tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0011)) + { + tmpGT.gti0011.translationType :=vl_PDUAddress.globalTitle.gti0011.translationType; + tmpGT.gti0011.encodingScheme :=vl_PDUAddress.globalTitle.gti0011.encodingScheme; + tmpGT.gti0011.numberingPlan :=vl_PDUAddress.globalTitle.gti0011.numberingPlan; + tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0011.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0100)) + { + tmpGT.gti0100.translationType :=vl_PDUAddress.globalTitle.gti0100.translationType; + tmpGT.gti0100.encodingScheme :=vl_PDUAddress.globalTitle.gti0100.encodingScheme; + tmpGT.gti0100.numberingPlan :=vl_PDUAddress.globalTitle.gti0100.numberingPlan; + tmpGT.gti0100.natureOfAddress :=vl_PDUAddress.globalTitle.gti0100.natureOfAddress; + //tmpGT.gti0100.reserved:='00'B; + tmpGT.gti0100.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0100.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + }; + } + else + { + vl_ASPAddress.globalTitle:= omit; + }; + + return vl_ASPAddress; + } //ConvertPDUEncodedAddressToASPAddress_ttc + + //****************************************************************** + // function ConvertPDUEncodedAddressToASPAddress_mpt + // converts Encoded PDU Address into sturctured ASP Address + // according to mpt + //****************************************************************** + function ConvertPDUEncodedAddressToASPAddress_mpt( in SCCP_param_CPartyAddressEnc pl_PDUAddress) + runs on SCCP_CT return SCCP_PAR_Address + { + var SCCP_PAR_Address vl_ASPAddress; + var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc + var SCCP_param_CPartyAddress_mpt vl_PDUAddress; + + vl_PDUAddress := dec_PDU_SCCP_Address_mpt( pl_PDUAddress.addr ); + + vl_ASPAddress.addressIndicator.pointCodeIndic := + vl_PDUAddress.addressIndicator.pointCodeIndic; + + vl_ASPAddress.addressIndicator.ssnIndicator := + vl_PDUAddress.addressIndicator.ssnIndicator; + + vl_ASPAddress.addressIndicator.globalTitleIndic := + vl_PDUAddress.addressIndicator.globalTitleIndic; + + vl_ASPAddress.addressIndicator.routingIndicator := + vl_PDUAddress.addressIndicator.routingIndicator; + + if (ispresent ( vl_PDUAddress.signPointCode)) { + vl_ASPAddress.signPointCode:= vl_PDUAddress.signPointCode; + } + else { + vl_ASPAddress.signPointCode := omit; + } + + if (ispresent (vl_PDUAddress.subsystemNumber )) { //always suggested ... + vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber; + } + else { + vl_ASPAddress.subsystemNumber:=omit; + } + + if( ispresent( vl_PDUAddress.globalTitle)){ + if (ischosen (vl_PDUAddress.globalTitle.gti0001)) + { + tmpGT.gti0001.natureOfAddress:=vl_PDUAddress.globalTitle.gti0001.natureOfAddress; + tmpGT.gti0001.oddeven:=vl_PDUAddress.globalTitle.gti0001.oddeven; + tmpGT.gti0001.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0010)) + { + tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType; + tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress; + vl_ASPAddress.globalTitle:=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0011)) + { + tmpGT.gti0011.translationType :=vl_PDUAddress.globalTitle.gti0011.translationType; + tmpGT.gti0011.encodingScheme :=vl_PDUAddress.globalTitle.gti0011.encodingScheme; + tmpGT.gti0011.numberingPlan :=vl_PDUAddress.globalTitle.gti0011.numberingPlan; + tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0011.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + } + else if (ischosen (vl_PDUAddress.globalTitle.gti0100)) + { + tmpGT.gti0100.translationType :=vl_PDUAddress.globalTitle.gti0100.translationType; + tmpGT.gti0100.encodingScheme :=vl_PDUAddress.globalTitle.gti0100.encodingScheme; + tmpGT.gti0100.numberingPlan :=vl_PDUAddress.globalTitle.gti0100.numberingPlan; + tmpGT.gti0100.natureOfAddress :=vl_PDUAddress.globalTitle.gti0100.natureOfAddress; + //tmpGT.gti0100.reserved:='00'B; + tmpGT.gti0100.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0100.globalTitleAddress; + vl_ASPAddress.globalTitle :=tmpGT; + }; + } + else + { + vl_ASPAddress.globalTitle:= omit; + }; + + return vl_ASPAddress; + } //ConvertPDUEncodedAddressToASPAddress_mpt + + //================================================================== + // MAIN CONVERSION FUNCTIONS: + //================================================================== + + //****************************************************************** + // function ConvertASPAddressToEncodedAddress + // converts ASP address structure to PDU address structure + // THIS IS THE MAIN ENCODE FUNCTION (coordinator) + //****************************************************************** + + function ConvertASPAddressToEncodedAddress( in SCCP_PAR_Address pl_ASPAddress) + runs on SCCP_CT return SCCP_param_CPartyAddressEnc + { + var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded; + if( ( v_SCCPServiceType == mtp3_itu) or + ( v_SCCPServiceType == mtp3b_itu)) + { + return ConvertASPAddressToEncodedAddress_itu( pl_ASPAddress ); + } + else if( (v_SCCPServiceType == mtp3_ansi) or + (v_SCCPServiceType == mtp3b_ansi)) + { + return ConvertASPAddressToEncodedAddress_ansi( pl_ASPAddress ); + } + else if((v_SCCPServiceType == mtp3_ttc) or + (v_SCCPServiceType == mtp3b_ttc)) + { + if( (v_SIO == '83'O) or (v_SIO == '43'O) or (v_SIO == 'C3'O) ) //ttc national + { + return ConvertASPAddressToEncodedAddress_ttc( pl_ASPAddress ); + } + else + { //international == itu + return ConvertASPAddressToEncodedAddress_itu( pl_ASPAddress ); + } + }//if1 + else if((v_SCCPServiceType == mtp3_mpt)) + { + if( v_NI == 2 ) //mpt national + { + return ConvertASPAddressToEncodedAddress_mpt( pl_ASPAddress ); + } + else + { //international == itu + return ConvertASPAddressToEncodedAddress_itu( pl_ASPAddress ); + } + }//if1 + else { + log("Error in ConvertASPAddressToEncodedAddress: Unknown SCCPServiceType"); + stop; + } + return vl_PDUAddressEncoded; // error!!! + } + + //****************************************************************** + // function ConvertPDUEncodedAddressToASPAddress + // converts Encoded PDU Address into sturctured ASP Address + // THIS IS THE MAIN DECODE FUNCTION (coordinator) + //****************************************************************** + + + function ConvertPDUEncodedAddressToASPAddress( in SCCP_param_CPartyAddressEnc pl_PDUAddress) + runs on SCCP_CT return SCCP_PAR_Address + { + var SCCP_PAR_Address vl_dummyretval; + + if( (v_SCCPServiceType == mtp3_itu) or + (v_SCCPServiceType == mtp3b_itu) ) + { + return ConvertPDUEncodedAddressToASPAddress_itu( pl_PDUAddress ); + } + else if( (v_SCCPServiceType == mtp3_ansi) or + (v_SCCPServiceType == mtp3b_ansi) ) + { + return ConvertPDUEncodedAddressToASPAddress_ansi( pl_PDUAddress ); + } + else if( (v_SCCPServiceType == mtp3_ttc) or + (v_SCCPServiceType == mtp3b_ttc)){ + if( (v_SIO == '83'O) or (v_SIO == '43'O) or (v_SIO == 'C3'O) ) + { + //ttc national + return ConvertPDUEncodedAddressToASPAddress_ttc( pl_PDUAddress ); + } + else { + return ConvertPDUEncodedAddressToASPAddress_itu( pl_PDUAddress ); + } + } + else if((v_SCCPServiceType == mtp3_mpt)) + { + if( v_NI == 2 ) //mpt national + { + return ConvertPDUEncodedAddressToASPAddress_mpt( pl_PDUAddress ); + } + else + { //international == itu + return ConvertPDUEncodedAddressToASPAddress_itu( pl_PDUAddress ); + } + } + else { + log("Error in function ConvertPDUEncodedAddressToASPAddress, Unknown SCCPSCCPType"); + stop; + } + return vl_dummyretval; + }//ConvertPDUEncodedAddressToASPAddress +/* +//************************************************************************* +//************************************************************************* +//EncDec ComponentBehaviour +//************************************************************************* +//************************************************************************* + + // TO DO:Desk check it! As I see, it's OK, but the meaning has been changed\ + // because structure of PDU_SCCP has been changed + + //************************************************************************* + function ScanRAWPorts() runs on SCCP_EncDec_CT + //************************************************************************* + { + //local declarations + var ASP_MTP3_TRANSFERind vl_ASP_MTP3_TRANSFERind; + var ASP_MTP3_TRANSFERreq vl_ASP_MTP3_TRANSFERreq; + var ASP_MTP3_TRANSFERreq_sccp vl_ASP_MTP3_TRANSFERreq_sccp + + var PDU_SCCP vl_PDU_SCCP; + var integer vl_msg_type; + + while (true) + { + alt + { + + //******************************************************************** + //message received from SCCP , containing a PDU to be encoded + //******************************************************************** + + []MTP3_SCCP_SP_PORT.receive( tr_ASP_MTP3_TRANSFERreq_sccp) -> value vl_ASP_MTP3_TRANSFERreq_sccp + { + var bitstring vl_sio_bit := oct2bit(vl_ASP_MTP3_TRANSFERreq_sccp.sio); + var MTP3_Field_sio vl_sio_struct; + vl_sio_struct.ni := substr(vl_sio_bit,0,2); + vl_sio_struct.prio := substr(vl_sio_bit,2,2); + vl_sio_struct.si := substr(vl_sio_bit,4,4); + + MTP3_PORT.send(t_ASP_MTP3_TRANSFERreq( + vl_sio_struct, + vl_ASP_MTP3_TRANSFERreq_sccp.opc, + vl_ASP_MTP3_TRANSFERreq_sccp.dpc, + vl_ASP_MTP3_TRANSFERreq_sccp.sls, + enc_PDU_SCCP(vl_ASP_MTP3_TRANSFERreq_sccp.data) + )); + } + + //******************************************************************** + //message received from MTP3 , containing an octetstring to be decoded: + //******************************************************************** + + []MTP3_PORT.receive(tr_ASP_MTP3_TRANSFERind) -> value vl_ASP_MTP3_TRANSFERind + {//startStatementBlock + if (vl_ASP_MTP3_TRANSFERind.sio.si != '0011'B) + { + log("The received message is not SCCP. Ignored."); + repeat; + } + vl_msg_type:= oct2int( vl_ASP_MTP3_TRANSFERind.data[0] ); + + select(vl_msg_type) + { + case (xudt) // '11'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + MTP3_SCCP_SP_PORT.send( vl_PDU_SCCP.extudata ); + } + case (udt) //'09'O + { + //decode octetstring + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_Unitdata( + vl_PDU_SCCP.unitdata.protClass, + vl_PDU_SCCP.unitdata.calledPAddress, + vl_PDU_SCCP.unitdata.callingPAddress, + vl_PDU_SCCP.unitdata.data)); + + }//endif + case (dt1)//'06'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_DataForm1( + vl_PDU_SCCP.dataform1.destLocRef, + vl_PDU_SCCP.dataform1.segmentingReassembl, + vl_PDU_SCCP.dataform1.data + )); + } + case (cr) //'01'O + {//startif + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + if (ispresent(vl_PDU_SCCP.connrequest.eop)) + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRequest( + vl_PDU_SCCP.connrequest.sourceLocRef, + vl_PDU_SCCP.connrequest.protClass, + vl_PDU_SCCP.connrequest.calledPAddress, + vl_PDU_SCCP.connrequest.optionalPart.credit, + vl_PDU_SCCP.connrequest.optionalPart.callingPAddress, + vl_PDU_SCCP.connrequest.optionalPart.data, + vl_PDU_SCCP.connrequest.optionalPart.hopCounter, + vl_PDU_SCCP.connrequest.optionalPart.importance, + vl_PDU_SCCP.connrequest.eop + )); + } + else + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRequest( + vl_PDU_SCCP.connrequest.sourceLocRef, + vl_PDU_SCCP.connrequest.protClass, + vl_PDU_SCCP.connrequest.calledPAddress, + vl_PDU_SCCP.connrequest.optionalPart.credit, + vl_PDU_SCCP.connrequest.optionalPart.callingPAddress, + vl_PDU_SCCP.connrequest.optionalPart.data, + vl_PDU_SCCP.connrequest.optionalPart.hopCounter, + vl_PDU_SCCP.connrequest.optionalPart.importance, + omit + )); + } + + } + case (cc) //'02'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + if (ispresent(vl_PDU_SCCP.connconfirm.eop)) + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionConfirm( + vl_PDU_SCCP.connconfirm.destLocRef, + vl_PDU_SCCP.connconfirm.sourceLocRef, + vl_PDU_SCCP.connconfirm.protClass, + vl_PDU_SCCP.connconfirm.optionalPart.credit, + vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress, + vl_PDU_SCCP.connconfirm.optionalPart.data, + vl_PDU_SCCP.connconfirm.optionalPart.importance, + vl_PDU_SCCP.connconfirm.eop )); + } + else + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionConfirm( + vl_PDU_SCCP.connconfirm.destLocRef, + vl_PDU_SCCP.connconfirm.sourceLocRef, + vl_PDU_SCCP.connconfirm.protClass, + vl_PDU_SCCP.connconfirm.optionalPart.credit, + vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress, + vl_PDU_SCCP.connconfirm.optionalPart.data, + vl_PDU_SCCP.connconfirm.optionalPart.importance, + omit)); + } + + } + case (udts) //'0A'O + {//startif + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_UnitdataService( + vl_PDU_SCCP.udataserv.returnCause, + vl_PDU_SCCP.udataserv.calledPAddress, + vl_PDU_SCCP.udataserv.callingPAddress, + vl_PDU_SCCP.udataserv.data)); + + }//endif + case (rlsd) //'04'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + if (ispresent(vl_PDU_SCCP.released.eop)) + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_Released( + vl_PDU_SCCP.released.destLocRef, + vl_PDU_SCCP.released.sourceLocRef, + vl_PDU_SCCP.released.releaseCause, + vl_PDU_SCCP.released.optionalPart.data, + vl_PDU_SCCP.released.optionalPart.importance, + vl_PDU_SCCP.released.eop + )); + } + else + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_Released( + vl_PDU_SCCP.released.destLocRef, + vl_PDU_SCCP.released.sourceLocRef, + vl_PDU_SCCP.released.releaseCause, + vl_PDU_SCCP.released.optionalPart.data, + vl_PDU_SCCP.released.optionalPart.importance, + omit + )); + } + + } + case (err)//'0F'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ProtDataUnitError( + vl_PDU_SCCP.pduerror.destLocRef, + vl_PDU_SCCP.pduerror.errorCause + )); + } + case (rlc)//'05'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ReleaseComplete( + vl_PDU_SCCP.relcomp.destLocRef, + vl_PDU_SCCP.relcomp.sourceLocRef + )); + } + case (it)//'10'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_InactivityTest( + vl_PDU_SCCP.inacttest.destLocRef, + vl_PDU_SCCP.inacttest.sourceLocRef, + vl_PDU_SCCP.inacttest.protClass, + vl_PDU_SCCP.inacttest.sequencingSegmenting, + vl_PDU_SCCP.inacttest.credit + )); + } + case (rsr)//'0D'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ResetRequest( + vl_PDU_SCCP.resetreq.destLocRef, + vl_PDU_SCCP.resetreq.sourceLocRef, + vl_PDU_SCCP.resetreq.resetCause + )); + } + case (rsc)//'0E'O + { + + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ResetConfirm( + vl_PDU_SCCP.resconf.destLocRef, + vl_PDU_SCCP.resconf.sourceLocRef + )); + }//endif + case (cref)//'03'O + { + vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data); + + if (ispresent(vl_PDU_SCCP.connrefused.eop)) + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRefused( + vl_PDU_SCCP.connrefused.destLocRef, + vl_PDU_SCCP.connrefused.refusalCause, + vl_PDU_SCCP.connrefused.optionalPart.calledPAddress, + vl_PDU_SCCP.connrefused.optionalPart.data, + vl_PDU_SCCP.connrefused.optionalPart.importance, + vl_PDU_SCCP.connrefused.eop + )); + } + else + { + MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRefused( + vl_PDU_SCCP.connrefused.destLocRef, + vl_PDU_SCCP.connrefused.refusalCause, + vl_PDU_SCCP.connrefused.optionalPart.calledPAddress, + vl_PDU_SCCP.connrefused.optionalPart.data, + vl_PDU_SCCP.connrefused.optionalPart.importance, + omit + )); + } + } + case (xudts,ludt,ludts) + { + log ("Unsupported connectionless message ((-XUDT or)) XUDTS or LUDT or LUDTS - received and discarded"); + } + case (dt2,ak,ed,ea ) + { + log ("Unsupported connection-oriented message -DT2 or AK or ED or EA - received and discarded"); + } + case else { log ("Unrecognized message received and discarded"); } + } + }//endStatementBlock + + }//endalt + + }//endwhile + + }//endfunction +*/ + +//****************************************************************** +// +// working functions for ScanEvents +// +//****************************************************************** + +//****************************************************************** +// Part 1 : Receiving msg on port "MTP3_SCCP_PORT" +//****************************************************************** + + + //****************************************************************** + // processing_PDU_SCCP_Unitdata + //****************************************************************** + function processing_PDU_SCCP_Unitdata( in PDU_SCCP_Unitdata pl_PDU_SCCP_Unitdata) + runs on SCCP_CT + { + //var PDU_SCCP_Unitdata vl_PDU_SCCP_Unitdata; + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind; + + vl_PDU_SCCP.unitdata:= pl_PDU_SCCP_Unitdata; + + // it should be decoded to structure to read if it is a mgmt message or not + vl_N_UNITDATA_ind.calledAddress := + ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_Unitdata.calledPAddress); + + if ( ispresent(vl_N_UNITDATA_ind.calledAddress.subsystemNumber) and + vl_N_UNITDATA_ind.calledAddress.subsystemNumber != cg_SSN_sCCPmanagement) + //SCCP mgmt message + {//startif1 + + //no SCCP or node congestion assumed + //'route on SSN' assumed + + //subsystems are assumed equipped and available + //as the message is received from MTP3 , DPC is assumed to be matching the PC of the own node without + // any further checks + + //assemble ASP_SCCP_N_ + vl_N_UNITDATA_ind.callingAddress:= + ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_Unitdata.callingPAddress); + + // Wrong old: + //vl_N_UNITDATA_ind.sequenceControl:= + // '0000000'B&pl_PDU_SCCP_Unitdata.protClass.class[0]; // Q.713/3.6 0.bit=1=>seq msb??? + + vl_N_UNITDATA_ind.sequenceControl:= + '0000000'B&pl_PDU_SCCP_Unitdata.protClass.class[3]; + + if( pl_PDU_SCCP_Unitdata.protClass.messageHandling == '1000'B ) + { vl_N_UNITDATA_ind.returnOption := '00000001'B; } + else + { vl_N_UNITDATA_ind.returnOption := '00000000'B; } + + //connectionless-class 0 or 1 + //protocol class 0- SCCP_sequence_ctrl_off + //protocol class 1- SCCP_sequence_ctrl_on + // wrong: vl_N_UNITDATA_ind.returnOption :='0000000'B&pl_PDU_SCCP_Unitdata.protClass.messageHandling[3]; + + //only two values( '0000'B -no special options + //and '1000'B -return message on error) assumed + //octetstring vs. length+octetstring + vl_N_UNITDATA_ind.userData :=pl_PDU_SCCP_Unitdata.data.data; + vl_N_UNITDATA_ind.importance := omit; + SCCP_SP_PORT.send( vl_N_UNITDATA_ind ); + + + }//endif1 + else { //startelse1-SCCPmanagement message + + log ("SCCP management message received"); + var octetstring vl_data; + vl_data:=pl_PDU_SCCP_Unitdata.data.data; + + vl_PDU_SCCP.unitdata.messageType:=udt ; + vl_PDU_SCCP.unitdata.calledPAddress:=pl_PDU_SCCP_Unitdata.callingPAddress; + vl_PDU_SCCP.unitdata.callingPAddress:=pl_PDU_SCCP_Unitdata.calledPAddress; + + if ((vl_data[0]=='03'O) and //SST message + ((v_SSN==0) or (oct2int(vl_data[1])==v_SSN))) //right SSN + {//startif2 + + //send Unitdata with SSA + vl_PDU_SCCP.unitdata.data.data[0]:='01'O;//Change to SSA + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Unitdata_SSA + + }//endif2 + else if ((vl_data[0]=='02'O) and //SSP message + ((v_SSN==0) or (oct2int(vl_data[1])==v_SSN))) //right SSN + {//startif2 + + //send Unitdata with SST + vl_PDU_SCCP.unitdata.data.data[0]:='03'O;//Change to SST + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Unitdata_SST + + }//endif2 + else if ((vl_data[0]=='01'O) and //SSA message + ((v_SSN==0) or (oct2int(vl_data[1])==v_SSN))) //right SSN + {//startif2 + + //send Unitdata with SS + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP ));//send Unitdata_SSA + + }//endif2 + else + { + log("Unsupported (or containing inconsistent SSN)SCCP management message received and discarded") + } + }//endelse1 + return; + } // processing_PDU_SCCP_Unitdata() + + //****************************************************************** + // processing_PDU_SCCP_UnitdataService + //****************************************************************** + function processing_PDU_SCCP_UnitdataService( in PDU_SCCP_UnitdataService pl_PDU_SCCP_UnitdataService ) + runs on SCCP_CT + { + + var ASP_SCCP_N_NOTICE_ind vl_N_NOTICE_ind; + + //no SCCP or node congestion assumed + //'route on SSN' assumed + + //subsystems are assumed equipped and available + //as the message is received from MTP3 , DPC is assumed to be the PC of the own node without + // any further checks + + //assemble ASP_SCCP_N_ + + vl_N_NOTICE_ind.calledAddress :=ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_UnitdataService.calledPAddress ); + vl_N_NOTICE_ind.callingAddress:=ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_UnitdataService.callingPAddress); + //one to one mapping between reasonForReturn and returnCause -Q713 A5 + vl_N_NOTICE_ind.reasonForReturn := pl_PDU_SCCP_UnitdataService.returnCause ; + vl_N_NOTICE_ind.userData := pl_PDU_SCCP_UnitdataService.data.data ; + + SCCP_SP_PORT.send( t_ASP_N_NOTICE_ind( + vl_N_NOTICE_ind.calledAddress , + vl_N_NOTICE_ind.callingAddress, + vl_N_NOTICE_ind.reasonForReturn, + vl_N_NOTICE_ind.userData , + omit)); + + }// processing_PDU_SCCP_UnitdataService + + + //****************************************************************** + // processing_PDU_SCCP_ConnectionRequest + //****************************************************************** + function processing_PDU_SCCP_ConnectionRequest( in PDU_SCCP_ConnectionRequest pl_PDU_SCCP_ConnectionRequest) + runs on SCCP_CT + { + //no SCCP or node congestion assumed + //we assume that routing is done on SSN; we are in the dest.node + //SS is equipped and available + + //check if connection already established + //local reference not assigned yet; search has to be done based on remote reference, + // to prevent erroneous situations + //for all other MTP3_ASPs, search is done based on destLocRef, containing the local + //reference sent to the neighbouring node + + if (ConnectionAlreadyEstablished_remote(pl_PDU_SCCP_ConnectionRequest.sourceLocRef)) + {//startif3 + v_session :=Retrieve_session_remote(pl_PDU_SCCP_ConnectionRequest.sourceLocRef); + //Action Table follows + + if (ConnectionTable[v_session].state==idle) + { log("CR received with reference for an already established conn. in state:idle");}//no source ref known + else if (ConnectionTable[v_session].state==active) + { log("CR received with reference for an already established conn. in state:active");} + else if (ConnectionTable[v_session].state==reset_bothway) + { log("CR received with reference for an already established conn. in state:reset_bothway");} + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("CR received with reference for an already established conn. in state:connection_pending_IC");} + //discard message, return + else if (ConnectionTable[v_session].state==disconnect_pending) + { log("CR received with reference for an already established conn. in state:disconnect_pending");}//discard message, return + else if (ConnectionTable[v_session].state==reset_IC) {//startif4 + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the dummy timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + + }//endif4 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif4 + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + }//endif4 + }//endif3 + else {//startelse + + //************************************************************************* + //connection not yet established - new v_session + //check if resources available + v_session:=CheckIdleIndividuals() + + //idle individual found , resources available, 0<=v_session<=15 + if ( v_session!=-1 ) + {//startif3 + // + ConnectionTable[v_session].localReference := GenerateLocalReference(); + ConnectionTable[v_session].remoteReference:= pl_PDU_SCCP_ConnectionRequest.sourceLocRef; + //local reference assigned here!!(see Fig. C.3/Q714) + + ConnectionTable[v_session].connectionId := GenerateConnectionId(); + + //once local reference is assigned , a session is considered established + //determine protocol class + //assemble ASP_SCCP_N_ + //start guard timer T_guard ;if no answer to ASP_SCCP_N_CONNECT_ind is received, timer will release + + var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind; + f_StartTimer(t_guard,v_session); + + vl_N_CONNECT_ind.calledAddress:=ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_ConnectionRequest.calledPAddress); + + if (ispresent(pl_PDU_SCCP_ConnectionRequest.optionalPart)) + { + if (ispresent(pl_PDU_SCCP_ConnectionRequest.optionalPart.callingPAddress)) + {//startif4 + + //temporary variable to avoid type conversion problems + var SCCP_param_CPartyAddressEnc vl_PDUAddress; + vl_PDUAddress.addr := pl_PDU_SCCP_ConnectionRequest.optionalPart.callingPAddress.addr; + vl_PDUAddress.paramLength := pl_PDU_SCCP_ConnectionRequest.optionalPart.callingPAddress.paramLength; + vl_N_CONNECT_ind.callingAddress:= ConvertPDUEncodedAddressToASPAddress(vl_PDUAddress); + + }//endif4 + else {vl_N_CONNECT_ind.callingAddress:=omit} + + if (ispresent(pl_PDU_SCCP_ConnectionRequest.optionalPart.data)) + {//startif4 + //temporary variable to avoid type conversion problems + var SCCP_param_Data_opt vl_SCCP_param_Data_opt; + + vl_SCCP_param_Data_opt:=pl_PDU_SCCP_ConnectionRequest.optionalPart.data; + vl_N_CONNECT_ind.userData:=vl_SCCP_param_Data_opt.data; + + }//endif4 + else {vl_N_CONNECT_ind.userData:=omit} + } + else + { + vl_N_CONNECT_ind.callingAddress:=omit; + vl_N_CONNECT_ind.userData:=omit; + } + + vl_N_CONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_CONNECT_ind( + vl_N_CONNECT_ind.calledAddress, + vl_N_CONNECT_ind.callingAddress, + omit, + vl_N_CONNECT_ind.userData, //ethcky + vl_N_CONNECT_ind.connectionId, + omit));//send ASP_SCCP_N_CONNECT_ind + + //restart send inactivity timer (baat) + f_StopTimer(ias,v_session);//to avoid warnings + f_StartTimer(ias,v_session); + ConnectionTable[v_session].state:=connection_pending_IC; + + }//endif3 + + //no idle individual found , no resources available , v_session=-1 + if (v_session==-1) + {//startif3 + + var PDU_SCCP vl_PDU_SCCP; + //assemble and route MTP3 ASP + vl_PDU_SCCP.connrefused.messageType:=cref; + vl_PDU_SCCP.connrefused.destLocRef:=pl_PDU_SCCP_ConnectionRequest.sourceLocRef; + vl_PDU_SCCP.connrefused.refusalCause:=1;//End user congestion + vl_PDU_SCCP.connrefused.pointer1:=0;// No options + vl_PDU_SCCP.connrefused.optionalPart:=omit; + vl_PDU_SCCP.connrefused.eop:=omit; + MTP3_SCCP_PORT.send ( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Connection refused, no idle individuals + //return to idle + }//endif3 + }//endelse + + }//processing_PDU_SCCP_ConnectionRequest + +//****************************************************************** +// processing_PDU_SCCP_ConnectionConfirm +//****************************************************************** + function processing_PDU_SCCP_ConnectionConfirm( in PDU_SCCP_ConnectionConfirm pl_PDU_SCCP_ConnectionConfirm) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm; + + log(pl_PDU_SCCP_ConnectionConfirm); + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ConnectionConfirm.destLocRef)) + {//startif2 + v_session :=Retrieve_session(pl_PDU_SCCP_ConnectionConfirm.destLocRef); + //Action Table follows + if (ConnectionTable[v_session].state==idle) + { + //assemble and route MTP3_ASP + + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + //then return to idle + } + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("CC received in state:connection_pending_IC"); }//discard message, return + else if (ConnectionTable[v_session].state==disconnect_pending) + { log("CC received in state:disconnect_pending"); }//discard message, return + else if (ConnectionTable[v_session].state==active) + { log("CC received in state:active"); }//do nothing, return + else if (ConnectionTable[v_session].state==reset_bothway) + { log("CC received in state:reset_bothway"); }// + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + //stop connection timer + f_StopTimer(conn_est,v_session); + //start inactivity timers + f_StartTimer(ias,v_session); + f_StartTimer(iar,v_session); + //assign protocol class:=2, associate remote reference + ConnectionTable[v_session].remoteReference:=pl_PDU_SCCP_ConnectionConfirm.sourceLocRef; + //assemble ASP_SCCP_N_ + vl_N_CONNECT_cfm.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_CONNECT_cfm( + omit, + omit, + omit, + vl_N_CONNECT_cfm.connectionId, + omit + ));//send ASP_SCCP_N_CONNECT_confirm + + ConnectionTable[v_session].state:=active; + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm)//connection is confirmed , + // but it has meanwhile been disconnected by the user + {//startif3 + //stop connection timer + f_StopTimer(conn_est,v_session); + //associate remote reference to connection + ConnectionTable[v_session].remoteReference:=pl_PDU_SCCP_ConnectionConfirm.sourceLocRef; + //assemble and route MTP3_ASP + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[v_session].localReference; + vl_PDU_SCCP.released.releaseCause:=cg_DISC_normal; + vl_PDU_SCCP.released.pointer1:=0;//No options + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + //start release timer + f_StartTimer(rel,v_session); + ConnectionTable[v_session].state:=disconnect_pending; + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + + }//endif3 + else { log("CC received in an unexpected state"); } + }//endif2 + else {//startelse -Connection confirm received with destLocRef not in ConnectionTable + //send ERR + + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=pl_PDU_SCCP_ConnectionConfirm.sourceLocRef; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + }//endelse + + }//processing_PDU_SCCP_ConnectionConfirm + + //****************************************************************** + // processing_PDU_SCCP_Released + //****************************************************************** + function processing_PDU_SCCP_Released( in PDU_SCCP_Released pl_PDU_SCCP_Released) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + //Store data parameter + var template SCCP_PAR_UserData tl_data := omit; + if (ispresent(pl_PDU_SCCP_Released.optionalPart)) + { + if (ispresent(pl_PDU_SCCP_Released.optionalPart.data)) + { + tl_data := pl_PDU_SCCP_Released.optionalPart.data.data; + } + } + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_Released.destLocRef)) + {//startif1 + v_session :=Retrieve_session(pl_PDU_SCCP_Released.destLocRef); + //check if remote reference is correct -Table B.2 /Q.714 + if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_Released.sourceLocRef) + {//startif2 + //Action Table follows + if (ConnectionTable[v_session].state==idle)//C.3- 1/6 ????nem valoszinu hogy ez eloallhat + {//startif3 + + //assemble and route MTP3_ASP + vl_PDU_SCCP.relcomp.messageType:=rlc; + vl_PDU_SCCP.relcomp.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.relcomp.sourceLocRef:=ConnectionTable[v_session].localReference; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete + //then return to idle + }//endif3 + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("RLSD received in state:connection_pending_IC");}//discard message, return + else if (ConnectionTable[v_session].state==disconnect_pending) + { log("RLSD received in state:disconnect_pending");}//discard message, return + else if (ConnectionTable[v_session].state==active) + {//startif3 + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.reason:=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + tl_data, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //assemble and route MTP3_ASP + + vl_PDU_SCCP.relcomp.messageType :=rlc; + vl_PDU_SCCP.relcomp.destLocRef :=pl_PDU_SCCP_Released.sourceLocRef; + vl_PDU_SCCP.relcomp.sourceLocRef:=pl_PDU_SCCP_Released.destLocRef; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Release complete + + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + //assemble and route MTP3_ASP + vl_PDU_SCCP.relcomp.messageType :=rlc; + vl_PDU_SCCP.relcomp.destLocRef :=pl_PDU_SCCP_Released.sourceLocRef; + vl_PDU_SCCP.relcomp.sourceLocRef:=pl_PDU_SCCP_Released.destLocRef; + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete + + //stop connection timer + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + + vl_N_DISCONNECT_ind.originator :=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.reason :=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + tl_data, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + //assemble and route MTP3_ASP + vl_PDU_SCCP.relcomp.messageType :=rlc; + vl_PDU_SCCP.relcomp.destLocRef :=pl_PDU_SCCP_Released.sourceLocRef; + vl_PDU_SCCP.relcomp.sourceLocRef :=pl_PDU_SCCP_Released.destLocRef; + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.reason :=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + tl_data, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //release resources, stop inactivity timers, change state to idle + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==reset_bothway) + {//startif3 + //assemble ASP_SCCP_N_ + + vl_N_DISCONNECT_ind.originator:=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.reason :=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause]; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + tl_data, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //release resources, stop inactivity timers, change state to idle + ReleaseResources(v_session); + + }//endif3 + else { log("RLSD received in an unexpected state"); } + }//endif2 + else {//remote reference inconsistent, error action follows + + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef :=pl_PDU_SCCP_Released.sourceLocRef; + vl_PDU_SCCP.pduerror.errorCause :=cg_Err_inconsistentSourceLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + }//endelse + }//endif1 + else {//Released(Y,X) received with destLocRef not in ConnectionTable + //send RLC(X,Y) + + vl_PDU_SCCP.relcomp.messageType :=rlc; + vl_PDU_SCCP.relcomp.destLocRef :=pl_PDU_SCCP_Released.sourceLocRef; + vl_PDU_SCCP.relcomp.sourceLocRef:=pl_PDU_SCCP_Released.destLocRef; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete + + }//endelse + }//processing_PDU_SCCP_Released + + //****************************************************************** + // processing_PDU_SCCP_ProtDataUnitError + //****************************************************************** + function processing_PDU_SCCP_ProtDataUnitError( in PDU_SCCP_ProtDataUnitError pl_PDU_SCCP_ProtDataUnitError) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ProtDataUnitError.destLocRef)) + {//startif2 + v_session :=Retrieve_session(pl_PDU_SCCP_ProtDataUnitError.destLocRef); + //Action Table follows + + if (ConnectionTable[v_session].state==idle) + {//startif3 + //assemble and route MTP3_ASP + + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN; + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + //then return to idle + + }//endif3 + else if (ConnectionTable[v_session].state==disconnect_pending) + { log("PDUError received in state:disconnect_pending ");}//discard message, return + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("PDUError received in state:connection_pending_IC ");}//discard message, return + else if (ConnectionTable[v_session].state==reset_bothway) + {//startif3 + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator :=cg_Undefined; + vl_N_DISCONNECT_ind.reason :=pl_PDU_SCCP_ProtDataUnitError.errorCause;//? + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //release resources, stop inactivity timers, change state to idle + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==active) + {//startif3 + if (pl_PDU_SCCP_ProtDataUnitError.errorCause!=cg_Err_serviceClassMismatch) + {//startif4 + + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_Undefined; + vl_N_DISCONNECT_ind.reason:=pl_PDU_SCCP_ProtDataUnitError.errorCause;//? + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + + }//endif4 + else {//startelse -Service class mismatch + + //assemble ASP_SCCP_N_ + + vl_N_DISCONNECT_ind.originator :=cg_Undefined; + vl_N_DISCONNECT_ind.reason :=pl_PDU_SCCP_ProtDataUnitError.errorCause; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //stop inactivity timers + f_StopTimer(iar,v_session); + f_StopTimer(ias,v_session); + //send Released + //assemble and route MTP3_ASP + + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[v_session].localReference; + vl_PDU_SCCP.released.releaseCause:=cg_Rel_inconsConnData; + vl_PDU_SCCP.released.pointer1:=0;//No optional part + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + //start release timer + f_StartTimer(rel,v_session); + //change state to diconnect pending + ConnectionTable[v_session].state:=disconnect_pending; + + }//endelse + + }//endif3 + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + //stop connection timer + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + + vl_N_DISCONNECT_ind.originator :=cg_Undefined; + vl_N_DISCONNECT_ind.reason :=pl_PDU_SCCP_ProtDataUnitError.errorCause; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + + + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_Undefined; + vl_N_DISCONNECT_ind.reason:=pl_PDU_SCCP_ProtDataUnitError.errorCause; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + + //release resources, stop inactivity timers, change state to idle + ReleaseResources(v_session); + + }//endif3 + else { log("PDUError received in an unexpected state"); } + }//endif2 + else {}//PDU_Error received with destLocRef not in ConnectionTable + + }//processing_PDU_SCCP_ProtDataUnitError + + //****************************************************************** + // processing_PDU_SCCP_ReleaseComplete + //****************************************************************** + function processing_PDU_SCCP_ReleaseComplete(in PDU_SCCP_ReleaseComplete pl_PDU_SCCP_ReleaseComplete) + runs on SCCP_CT + { + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ReleaseComplete.destLocRef)) + {//startif1 + + v_session :=Retrieve_session(pl_PDU_SCCP_ReleaseComplete.destLocRef); + //check if remote reference is correct -Table B.2 /Q.714 + if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_ReleaseComplete.sourceLocRef) + {//startif2 + + //Action Table follows + if (ConnectionTable[v_session].state==idle) + { log("RLC received in state: idle"); }//C.3 1/6-do nothing-return to idle state + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("RLC received in state: connection_pending_IC"); }//discard message, return + else if (ConnectionTable[v_session].state==active) + { log("RLC received in state: active"); }//do nothing, return + else if (ConnectionTable[v_session].state==reset_bothway) + { log("RLC received in state:reset_bothway "); }// + else if (ConnectionTable[v_session].state==disconnect_pending) + {//startif3 + log("RLC received in state:disconnect_pending "); + //log("release resources"); + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_NSU; + vl_N_DISCONNECT_ind.reason:=cg_DISC_normal; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + log("RLC received in state:wait_conn_confirm"); + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + log("RLC received in state:reset_IC"); + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + }//endif3 + else { log("RLC received in an unexpected state"); } + + }//endif2 + else {}//remote reference inconsistent, discard + + }//endif1 + else {}//Release complete received with destLocRef not in ConnectionTable + //discard + + }//processing_PDU_SCCP_ReleaseComplete + + //****************************************************************** + // processing_PDU_SCCP_InactivityTest + //****************************************************************** + function processing_PDU_SCCP_InactivityTest( in PDU_SCCP_InactivityTest pl_PDU_SCCP_InactivityTest) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_InactivityTest.destLocRef)) + {//startif1 + v_session :=Retrieve_session(pl_PDU_SCCP_InactivityTest.destLocRef); + + //check if remote reference is correct -Table B.2 /Q.714 + if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_InactivityTest.sourceLocRef) + {//startif2 + + //Action Table follows + if (ConnectionTable[v_session].state==idle) + { log("IT received in state :idle "); }//C.3 1/6-do nothing-return to idle state + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("IT received in state : connection_pending_IC"); }//discard message, return + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + + //stop connection timer + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator := cg_NSU; + vl_N_DISCONNECT_ind.reason := cg_DISC_normal; + vl_N_DISCONNECT_ind.connectionId := ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + + }//endif3 + else if (ConnectionTable[v_session].state==disconnect_pending) {} + else if (ConnectionTable[v_session].state==reset_bothway) {}// + else if (ConnectionTable[v_session].state==active) + {//startif3 + //source reference number assumed OK + //or: + //if (ConnectionTable[v_session].remoteReference!=pl_PDU_SCCP_InactivityTest.sourceLocRef) + // release connection + //protocol class assumed 2 + //restart receive inactivity timer + f_StopTimer(iar,v_session);//to avoid warnings + f_StartTimer(iar,v_session); + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + + }//endif3 + else { log("IT received in an unexpected state"); } + }//endif2 + else {//remote reference inconsistent, error action follows + //message received with remote reference not the same as stored + // two RLSD messages are sent back, one to the sored and to the received remote reference + //sent first RLSD-see B.2/Q.714 + + vl_PDU_SCCP.released.messageType :=rlsd; + vl_PDU_SCCP.released.destLocRef :=pl_PDU_SCCP_InactivityTest.sourceLocRef; + vl_PDU_SCCP.released.sourceLocRef:=pl_PDU_SCCP_InactivityTest.destLocRef; + vl_PDU_SCCP.released.releaseCause:=cg_Rel_inconsConnData; + vl_PDU_SCCP.released.pointer1:=0; + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + //sent second RLSD-see B.2/Q.714 + vl_PDU_SCCP.released.destLocRef :=ConnectionTable[v_session].remoteReference; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released + + }//endelse + + }//endif1 + else {}//Inactivity test received with destLocRef not in ConnectionTable + //discard + + }//processing_PDU_SCCP_InactivityTest + + //****************************************************************** + // processing_PDU_SCCP_ResetRequest + //****************************************************************** + function processing_PDU_SCCP_ResetRequest ( in PDU_SCCP_ResetRequest pl_PDU_SCCP_ResetRequest) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ResetRequest.destLocRef)) + {//startif1 + v_session :=Retrieve_session(pl_PDU_SCCP_ResetRequest.destLocRef); + //check if remote reference is correct -Table B.2 /Q.714 + + if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_ResetRequest.sourceLocRef) + {//startif2 + //Action Table follows + if (ConnectionTable[v_session].state==idle) + {//startif3 + + //assemble and route MTP3_ASP + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN; + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + //then return to idle + + }//endif3 + else if (ConnectionTable[v_session].state==connection_pending_IC) {}//discard message, return + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + //stop connection timer + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + vl_N_DISCONNECT_ind.originator:=cg_NSU; + vl_N_DISCONNECT_ind.reason:=cg_DISC_normal; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==disconnect_pending) {} + else if (ConnectionTable[v_session].state==reset_bothway) + {//startif3 + + //assemble ASP_SCCP_N_ + var ASP_SCCP_N_RESET_cfm vl_N_RESET_cfm; + vl_N_RESET_cfm.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_RESET_cfm(vl_N_RESET_cfm.connectionId));//send ASP_SCCP_N_RESET_cfm + + //stop reset timer + f_StopTimer(reset,v_session); + + //restart receive inactivity timer + f_StopTimer(iar,v_session);//to avoid warnings + f_StartTimer(iar,v_session); + //change state + ConnectionTable[v_session].state:=reset_IC; + }//endif3 + else if (ConnectionTable[v_session].state==active) + {//startif3 + //restart receive inactivity timer + f_StopTimer(iar,v_session);//to avoid warnings + f_StartTimer(iar,v_session); + //send ASP_SCCP_N_RESET_ind + //assemble ASP_SCCP_N_ + var ASP_SCCP_N_RESET_ind vl_N_RESET_ind; + vl_N_RESET_ind.originator:=cg_NSU; + vl_N_RESET_ind.reason:=cg_RESET_unspec; + vl_N_RESET_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_RESET_ind( + vl_N_RESET_ind.originator, + vl_N_RESET_ind.reason, + vl_N_RESET_ind.connectionId + ));//send ASP_SCCP_N_RESET_ind + + //reset variables + ConnectionTable[v_session].state:=reset_IC; + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + }//endif3 + else { log("RESREQ received in an unexpected state"); } + }//endif2 + else {//remote reference inconsistent, error action follows + + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=pl_PDU_SCCP_ResetRequest.sourceLocRef; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_inconsistentSourceLRN; + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + + }//endelse + }//endif1 + else {//startelse-Reset request received with destLocRef not in ConnectionTable + + //send ERR + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=pl_PDU_SCCP_ResetRequest.sourceLocRef; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + + }//endelse + + }//processing_PDU_SCCP_ResetRequest + + //****************************************************************** + // processing_PDU_SCCP_ResetConfirm + //****************************************************************** + function processing_PDU_SCCP_ResetConfirm ( in PDU_SCCP_ResetConfirm pl_PDU_SCCP_ResetConfirm) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ResetConfirm.destLocRef)) + {//startif1 + v_session :=Retrieve_session(pl_PDU_SCCP_ResetConfirm.destLocRef); + + //check if remote reference is correct -Table B.2 /Q.714 + if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_ResetConfirm.sourceLocRef) + {//startif2 + //Action Table follows + + if (ConnectionTable[v_session].state==idle) + { log("RSC received in state:idle ");}//do nothing-return to idle state, no source ref known + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log("RSC received in state:connection_pending_IC ");}//discard message, return + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + //stop connection timer + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ASP + + vl_N_DISCONNECT_ind.originator:=cg_NSU; + vl_N_DISCONNECT_ind.reason:=cg_DISC_normal; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==disconnect_pending) + { log("RSC received in state:disconnect_pending");} + else if (ConnectionTable[v_session].state==reset_bothway) + {//startif3 + //assemble ASP_SCCP_N_ + var ASP_SCCP_N_RESET_cfm vl_N_RESET_cfm; + vl_N_RESET_cfm.connectionId:=ConnectionTable[v_session].connectionId; + SCCP_SP_PORT.send( t_ASP_N_RESET_cfm( + vl_N_RESET_cfm.connectionId + ));//send ASP_SCCP_N_RESET_cfm + + //stop reset timer + f_StopTimer(reset,v_session); + + //restart receive inactivity timer + f_StopTimer(iar,v_session);//to avoid warnings + f_StartTimer(iar,v_session); + //change state + ConnectionTable[v_session].state:=reset_IC; + }//endif3 + else if (ConnectionTable[v_session].state==active) + {//startif3 + //do nothing-return to idle state + log("RSC received in state:active"); + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + }//endif3 + else { log("ResConf received in an unexpected state"); } + }//endif2 + else {//remote reference inconsistent, error action follows + + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef :=pl_PDU_SCCP_ResetConfirm.sourceLocRef; + vl_PDU_SCCP.pduerror.errorCause :=cg_Err_inconsistentSourceLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + + }//endelse + }//endif1 + else {//startelse-Reset confirm received with destLocRef not in ConnectionTable + + //send ERR + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef :=pl_PDU_SCCP_ResetConfirm.sourceLocRef; + vl_PDU_SCCP.pduerror.errorCause :=cg_Err_unassignedDestinationLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + }//endelse + }//processing_PDU_SCCP_ResetConfirm + + //****************************************************************** + // processing_PDU_SCCP_ConnectionRefused + //****************************************************************** + function processing_PDU_SCCP_ConnectionRefused ( in PDU_SCCP_ConnectionRefused pl_PDU_SCCP_ConnectionRefused) + runs on SCCP_CT + { + //Store data parameter + var template SCCP_PAR_UserData tl_data := omit; + if (ispresent(pl_PDU_SCCP_ConnectionRefused.optionalPart)) + { + if (ispresent(pl_PDU_SCCP_ConnectionRefused.optionalPart.data)) + { + tl_data := pl_PDU_SCCP_ConnectionRefused.optionalPart.data.data; + } + } + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ConnectionRefused.destLocRef)) + {//startif2 + v_session :=Retrieve_session(pl_PDU_SCCP_ConnectionRefused.destLocRef); + //Action Table follows + + if (ConnectionTable[v_session].state==idle) + { log ("CREF received in state:idle");} //do nothing , return to idle, source ref unknown + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log ("CREF received in state:connection_pending_IC");} + else if (ConnectionTable[v_session].state==active) + { log ("CREF received in state:active");}//do nothing, return + else if (ConnectionTable[v_session].state==disconnect_pending) + { log ("CREF received in state:disconnect_pending");}//discard message, return + else if (ConnectionTable[v_session].state==reset_bothway) + { log ("CREF received in state:reset_bothway");}// + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + //stop connection timer + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_Mapping_RefCause_Orig[pl_PDU_SCCP_ConnectionRefused.refusalCause]; + vl_N_DISCONNECT_ind.reason:=cg_Mapping_RefCause_Reason[pl_PDU_SCCP_ConnectionRefused.refusalCause]; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + tl_data, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + + }//endif3 + else { log("CREF received in an unexpected state"); } + + }//endif2 + else { log("CREF received with destLocRef not in state table"); } + //Connection refused with destLocRef not in ConnectionTable + //discard + + } //processing_PDU_SCCP_ConnectionRefused + + //****************************************************************** + // processing_PDU_SCCP_DataForm1 + //****************************************************************** + function processing_PDU_SCCP_DataForm1 ( in PDU_SCCP_DataForm1 pl_PDU_SCCP_DataForm1) + runs on SCCP_CT + { + + //check if connection already established + if (ConnectionAlreadyEstablished(pl_PDU_SCCP_DataForm1.destLocRef)) + {//startif2 + v_session :=Retrieve_session(pl_PDU_SCCP_DataForm1.destLocRef); + //Action Table follows + + if (ConnectionTable[v_session].state==idle) + {//startif3 + var PDU_SCCP vl_PDU_SCCP; + //assemble and route MTP3_ASP + vl_PDU_SCCP.pduerror.messageType:=err; + vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error + + //then return to idle + }//endif3 + else if (ConnectionTable[v_session].state==connection_pending_IC) + { log ("DT1 received in state:connection_pending_IC");}//discard message, return + else if (ConnectionTable[v_session].state==disconnect_pending) + { log ("DT1 received in state:disconnect_pending");}//discard message, return + else if (ConnectionTable[v_session].state==reset_bothway) + { log ("DT1 received in state:reset_bothway");}// + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif3 + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + f_StopTimer(conn_est,v_session); + //assemble ASP_SCCP_N_ + vl_N_DISCONNECT_ind.originator:=cg_NSU; + vl_N_DISCONNECT_ind.reason:=cg_DISC_normal; + vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==wait_conn_confirm) + {//startif3 + + //stop connection timer + f_StopTimer(conn_est,v_session); + //release resources + ReleaseResources(v_session); + }//endif3 + else if (ConnectionTable[v_session].state==active) + {//startif3 + + var ASP_SCCP_N_DATA_ind vl_N_DATA_ind; + //restart receive inactivity timer + f_StopTimer(iar,v_session);//to avoid warnings + f_StartTimer(iar,v_session); + + buffered_sending_ASP_N_DATA_ind( pl_PDU_SCCP_DataForm1 ) + //MODIFY-> protocol class assumed 2; M bit assumed 0 (no segm/reassembly) + + }//endif3 + else if (ConnectionTable[v_session].state==reset_IC) + {//startif3 + + //discard received message + f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately + //state changed to active + ConnectionTable[v_session].state:=active; + + }//endif3 + else { log("DT1 received in an unexpected state"); } + + }//endif2 + else { log("DT1 received with destLocRef not in ConnectionTable"); } + //DT1 received with destLocRef not in ConnectionTable + //discard + + }//processing_PDU_SCCP_DataForm1 + + + //****************************************************************** + // processing_PDU_SCCP_ExtUnitdata + //****************************************************************** + function processing_PDU_SCCP_ExtUnitdata ( in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata) + runs on SCCP_CT + { + var integer vl_index; + var OCT3 vl_segmRemoteRef; + if( ispresent( pl_PDU_SCCP_ExtUnitdata.optionalPart) and + ispresent( pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation) ) + { + vl_segmRemoteRef:= pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation.segmLocalRef; + if( pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation.firstSegm =='1'B ) + { + vl_index:=allocate_ClessRcvBuff( vl_segmRemoteRef); + } + else + { + vl_index:=get_ClessRcvBuffIndex( vl_segmRemoteRef ); + }; + if (vl_index == -1) + { + log("Buffer allocation failed, message ignored."); + return; + } + + store_segmData(vl_index,pl_PDU_SCCP_ExtUnitdata); + if( pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation.remainingSegment == '0000'B ) + { + send_ClessRcvBuff_in_N_UNITDATAind( vl_index,pl_PDU_SCCP_ExtUnitdata ); + reallocate_ClessRcvBuff( vl_index ); + } + } + else + { // not segmented case: + send_ClessData_in_N_UNITDATAind( pl_PDU_SCCP_ExtUnitdata ); + } + return; + + }//processing_PDU_SCCP_ExtUnitdata + +//****************************************************************** +// Part 2 Receiving msg on port "SCCP_PORT" (User Part) +//****************************************************************** + +//****************************************************************** +// processing_ASP_N_CONNECT_req +// / ASP_SCCP_N_CONNECT_req , originating node / +//****************************************************************** + function processing_ASP_N_CONNECT_req( in ASP_SCCP_N_CONNECT_req pl_N_CONNECT_req ) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + + if (ConnectionAlreadyEstablished_connectionId(pl_N_CONNECT_req.connectionId)) + // assume connectionId present + {//startif1 + + //something went wrong, we already have a session with the same connection Id + v_session :=Retrieve_session_connectionId(pl_N_CONNECT_req.connectionId); + //table of error actions + + }//endif1 + else + {//startelse1 + + //check if resources available + v_session:=CheckIdleIndividuals(); + if (v_session==-1) //No idle individual found + {//startif2 + + //assemble ASP_SCCP_N_ASP + vl_N_DISCONNECT_ind.originator:=cg_NSP; // network service provider + vl_N_DISCONNECT_ind.reason:=cg_CREF_unspec_T; + vl_N_DISCONNECT_ind.connectionId:=pl_N_CONNECT_req.connectionId; + + SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind( + vl_N_DISCONNECT_ind.originator, + omit, + vl_N_DISCONNECT_ind.reason, + omit, + vl_N_DISCONNECT_ind.connectionId, + omit + ));//send ASP_SCCP_N_DISCONNECT_ind + //return to idle + }//endif2 + + if ((v_session<=15)and (v_session>=0)) + {//startif2 + + //assign local reference, SLS:=tsp_MTP3_SLS, protocol class:=2 + ConnectionTable[v_session].localReference:=int2oct(pl_N_CONNECT_req.connectionId,3); + ConnectionTable[v_session].connectionId :=pl_N_CONNECT_req.connectionId; + + //to simplify generation of local reference, connectionID received from user is sent as such + //only local reference is assigned at this point + //send connection request, no coupling + //DPC :remote node + //no coupling reqrd. + //compatibility OK + //no restriction + //assemble and route MTP3_ASP + vl_PDU_SCCP.connrequest.messageType:=cr; + vl_PDU_SCCP.connrequest.sourceLocRef:=ConnectionTable[v_session].localReference; + // send local reference just assigned! + vl_PDU_SCCP.connrequest.protClass:={ + class:='0010'B, + messageHandling:='0000'B + };//class 2 + vl_PDU_SCCP.connrequest.pointer1:=2; + vl_PDU_SCCP.connrequest.calledPAddress:=ConvertASPAddressToEncodedAddress(pl_N_CONNECT_req.calledAddress); //new! + vl_PDU_SCCP.connrequest.pointer2:=vl_PDU_SCCP.connrequest.calledPAddress.paramLength+2; //automatic? + + if(ispresent(pl_N_CONNECT_req.callingAddress)) + {//startif3 + + //temporary variable to avoid type conversion problems + var SCCP_param_CPartyAddressEnc_opt vl_SCCP_param_CPartyAddressEnc_opt; + var SCCP_param_CPartyAddressEnc vl_SCCP_param_CPartyAddressEnc; + + vl_SCCP_param_CPartyAddressEnc:= + ConvertASPAddressToEncodedAddress(pl_N_CONNECT_req.callingAddress); + + vl_SCCP_param_CPartyAddressEnc_opt.paramName :=con_SCCP_cgPA; + vl_SCCP_param_CPartyAddressEnc_opt.paramLength:=vl_SCCP_param_CPartyAddressEnc.paramLength; + vl_SCCP_param_CPartyAddressEnc_opt.addr :=vl_SCCP_param_CPartyAddressEnc.addr; + + vl_PDU_SCCP.connrequest.optionalPart.callingPAddress:=vl_SCCP_param_CPartyAddressEnc_opt; + + }//endif3 + else { vl_PDU_SCCP.connrequest.optionalPart.callingPAddress:=omit } + + if(ispresent(pl_N_CONNECT_req.userData)) + {//startif3 + + //temporary variable to avoid type conversion problems + var SCCP_param_Data_opt vl_SCCP_param_Data_opt; + + vl_SCCP_param_Data_opt.paramName:=con_SCCP_data; + vl_SCCP_param_Data_opt.data:=pl_N_CONNECT_req.userData; + vl_SCCP_param_Data_opt.paramLength:=lengthof(vl_SCCP_param_Data_opt.data); + vl_PDU_SCCP.connrequest.optionalPart.data:=vl_SCCP_param_Data_opt; + + }//endif3 + else { vl_PDU_SCCP.connrequest.optionalPart.data:=omit} + + if(ispresent(pl_N_CONNECT_req.callingAddress) or + ispresent(pl_N_CONNECT_req.userData)) + { + vl_PDU_SCCP.connrequest.optionalPart.credit:=omit; + vl_PDU_SCCP.connrequest.optionalPart.hopCounter:=omit; + vl_PDU_SCCP.connrequest.optionalPart.importance:=omit; + + vl_PDU_SCCP.connrequest.eop:= {paramName:=con_SCCP_eop}; + } + else + { + vl_PDU_SCCP.connrequest.optionalPart := omit; + vl_PDU_SCCP.connrequest.eop := omit; + } + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Connection request + + //start connection timer + f_StartTimer(conn_est,v_session); + ConnectionTable[v_session].state:=connection_pending_OG; + }//endif2 + + }//endelse + + }//processing_ASP_N_CONNECT_req + //****************************************************************** + //End ASP_SCCP_N_CONNECT_req , originating node + //****************************************************************** + + //****************************************************************** + // processing_ASP_N_CONNECT_resp + //****************************************************************** + function processing_ASP_N_CONNECT_res( in ASP_SCCP_N_CONNECT_res pl_N_CONNECT_res ) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + + // first see if session exists in the ConnectionTable + //search done based on Connection ID + + if (ConnectionAlreadyEstablished_connectionId(pl_N_CONNECT_res.connectionId)) + //assume connectionId present + {//startif1 + //retrieve session + v_session :=Retrieve_session_connectionId(pl_N_CONNECT_res.connectionId); + + //Action Table follows + + if (ConnectionTable[v_session].state==idle) + { + log("N_CONNECT_resp received in state:idle"); + //do nothing-return to idle state + } + else if (ConnectionTable[v_session].state==connection_pending_IC) + {//startif2 + + //assign SLS:=tsp_MTP3_SLS, assign protocol class=2 (CO, no flow ctrl.) + + //assemble and route MTP3_ASP + + vl_PDU_SCCP.connconfirm.messageType:=cc; + vl_PDU_SCCP.connconfirm.sourceLocRef:=ConnectionTable[v_session].localReference; + vl_PDU_SCCP.connconfirm.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.connconfirm.protClass.class:='0010'B;//protocol class 2 + vl_PDU_SCCP.connconfirm.protClass.messageHandling:='0000'B;//no special treatment + + if(ispresent(pl_N_CONNECT_res.respondingAddress)) + {//startif3 + + //temporary variable to avoid type conversion problems + var SCCP_param_CPartyAddressEnc_opt vl_SCCP_param_CPartyAddressEnc_opt; + var SCCP_param_CPartyAddressEnc vl_SCCP_param_CPartyAddressEnc; + + vl_SCCP_param_CPartyAddressEnc:= + ConvertASPAddressToEncodedAddress(pl_N_CONNECT_res.respondingAddress); + + vl_SCCP_param_CPartyAddressEnc_opt.paramName := con_SCCP_cdPA; // cgPA->cdPA ethbaat, 2003.11.06 + vl_SCCP_param_CPartyAddressEnc_opt.paramLength:= vl_SCCP_param_CPartyAddressEnc.paramLength; + vl_SCCP_param_CPartyAddressEnc_opt.addr := vl_SCCP_param_CPartyAddressEnc.addr; + + vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress:= vl_SCCP_param_CPartyAddressEnc_opt; + }//endif3 + else { vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress:=omit } + + if(ispresent(pl_N_CONNECT_res.userData)) + {//startif3 + + //temporary variable to avoid type conversion problems + var SCCP_param_Data_opt vl_SCCP_param_Data_opt; + + vl_SCCP_param_Data_opt.paramName:=con_SCCP_data; + vl_SCCP_param_Data_opt.data:=pl_N_CONNECT_res.userData; // corrected by ethbaat 2003.10.16 + vl_SCCP_param_Data_opt.paramLength:=lengthof(vl_SCCP_param_Data_opt.data); + + vl_PDU_SCCP.connconfirm.optionalPart.data:=vl_SCCP_param_Data_opt; + }//endif3 + else {vl_PDU_SCCP.connconfirm.optionalPart.data:=omit} + + if(ispresent(pl_N_CONNECT_res.respondingAddress) or + ispresent(pl_N_CONNECT_res.userData)) + { + vl_PDU_SCCP.connconfirm.pointer1:=1; + vl_PDU_SCCP.connconfirm.optionalPart.credit:=omit; + vl_PDU_SCCP.connconfirm.optionalPart.importance:=omit; + vl_PDU_SCCP.connconfirm.eop:= {paramName:=con_SCCP_eop}; + } + else + { + vl_PDU_SCCP.connconfirm.pointer1:=0; + vl_PDU_SCCP.connconfirm.optionalPart := omit; + vl_PDU_SCCP.connconfirm.eop:=omit; + } + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send connection confirm + + f_StartTimer(ias,v_session); // ??? check them!!! + f_StartTimer(iar,v_session); //start inactivity timers + ConnectionTable[v_session].state:=active;//state change + + }//endif2 + else { log("N_CONNECT_resp received in an unexpected state");} + + }//endif1 + + }//processing_ASP_N_CONNECT_resp + + //****************************************************************** + // processing_ASP_N_DATA_req + //****************************************************************** + + function processing_ASP_N_DATA_req( in ASP_SCCP_N_DATA_req pl_N_DATA_req ) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + + // first see if session exists in the ConnectionTable + + if (ConnectionAlreadyEstablished_connectionId(pl_N_DATA_req.connectionId)) + //assume connectionId present + {//startif1 + + //retrieve v_session + v_session :=Retrieve_session_connectionId(pl_N_DATA_req.connectionId); + + //Action Table follows + if (ConnectionTable[v_session].state==idle) + { log ("N_DATA_req received in idle state");} + else if (ConnectionTable[v_session].state==reset_bothway) + { log ("N_DATA_req received in reset_bothway state");} + else if (ConnectionTable[v_session].state==active) + {//startif2 + sending_dataform1s_in_ASP_MTP_TRANSFERreqs(pl_N_DATA_req); + //no change of state, remains active + }//endif2 + else { log ("N_DATA_req received in an unexpected state"); } + + }//endif1 + else { log("N_DATA_req with Connection ID not in the state table -- illegal request"); } + + }//processing_ASP_N_DATA_req + + //****************************************************************** + // processing_ASP_N_DISCONNECT_req + //****************************************************************** + + function processing_ASP_N_DISCONNECT_req( in ASP_SCCP_N_DISCONNECT_req pl_N_DISCONNECT_req ) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var boolean vl_opt_part_present:=false; + + // first see if session exists in the ConnectionTable + + if (ConnectionAlreadyEstablished_connectionId(pl_N_DISCONNECT_req.connectionId)) + //assume connectionId present + {//startif1 + + //retrieve v_session + v_session :=Retrieve_session_connectionId(pl_N_DISCONNECT_req.connectionId); + + //Action Table follows + if (ConnectionTable[v_session].state==idle) + { log ("N_DISCONNECT_req received in state:idle");} + else if (ConnectionTable[v_session].state==connection_pending_IC) + {//startif2 + + //assemble and route MTP3_ASP + vl_PDU_SCCP.connrefused.messageType:=cref; + vl_PDU_SCCP.connrefused.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.connrefused.refusalCause:=pl_N_DISCONNECT_req.reason; + vl_PDU_SCCP.connrefused.pointer1:=0; //No optional part + vl_PDU_SCCP.connrefused.optionalPart:=omit; + vl_PDU_SCCP.connrefused.eop:=omit; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send connection refused + + //release resources + ReleaseResources(v_session); + + }//endif2 + else if (ConnectionTable[v_session].state==active) + {//startif2 + + //stop inactivity timers + f_StopTimer(ias,v_session); + f_StopTimer(iar,v_session); + + //assemble and route MTP3_ASP + + vl_PDU_SCCP.released.messageType:=rlsd; + vl_PDU_SCCP.released.destLocRef:=ConnectionTable[v_session].remoteReference; + vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[v_session].localReference; + vl_PDU_SCCP.released.releaseCause:=pl_N_DISCONNECT_req.reason; + if(ispresent(pl_N_DISCONNECT_req.userData)){ + vl_opt_part_present:=true; + vl_PDU_SCCP.released.optionalPart.data.paramName:=con_SCCP_data; + vl_PDU_SCCP.released.optionalPart.data.paramLength:=lengthof(pl_N_DISCONNECT_req.userData); + vl_PDU_SCCP.released.optionalPart.data.data:=pl_N_DISCONNECT_req.userData; + } else { + vl_PDU_SCCP.released.optionalPart.data:=omit; + } + if(ispresent(pl_N_DISCONNECT_req.importance)){ + vl_opt_part_present:=true; + vl_PDU_SCCP.released.optionalPart.importance.paramName:=con_SCCP_imp + vl_PDU_SCCP.released.optionalPart.importance.paramLength:=1 + vl_PDU_SCCP.released.optionalPart.importance.importance:=pl_N_DISCONNECT_req.importance + vl_PDU_SCCP.released.optionalPart.importance.reserved:='00000'B + } else { + vl_PDU_SCCP.released.optionalPart.importance:=omit; + } + if(vl_opt_part_present){ + vl_PDU_SCCP.released.pointer1:=1; + vl_PDU_SCCP.released.eop.paramName:=con_SCCP_eop; + } else { + vl_PDU_SCCP.released.pointer1:=0;//No optional part + vl_PDU_SCCP.released.optionalPart:=omit; + vl_PDU_SCCP.released.eop:=omit; + } + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send released + + //start release timer + f_StartTimer(rel,v_session); + + ConnectionTable[v_session].state:=disconnect_pending; + + }//endif2 + else if (ConnectionTable[v_session].state==connection_pending_OG) + {//startif2 + + //change state to "wait connection confirm " + ConnectionTable[v_session].state:=wait_conn_confirm; + //and return + + }//endif2 + else { log("N_DISCONNECT_req received in an unexpected state");} + + }//endif1 + + }//processing_ASP_N_DISCONNECT_req + + + //****************************************************************** + // function SCCP_SPC_int2bit - working function to processing_ASP_N_UNITDATA_req + // v_sio is local to SCCP_CT + // SCCPServiceType + //****************************************************************** + function SCCP_SPC_int2bit( in integer pl_SPC, in SCCP_ServiceType pl_SCCP_ServiceType, in octetstring pl_SIO ) + return SCCP_ASPfield_SignallingPointCode + { + var SCCP_ASPfield_SignallingPointCode vl_SPC; //bitstring + vl_SPC :='0000000000000000'B; + + if( (pl_SCCP_ServiceType == mtp3_itu) or (pl_SCCP_ServiceType == mtp3b_itu)) + { + //vl_SPC := '00'B&int2bit( pl_SPC, 14); + vl_SPC := int2bit( pl_SPC, 14); + } + else if ( (pl_SCCP_ServiceType == mtp3_ansi) or (pl_SCCP_ServiceType == mtp3b_ansi) ) + { + vl_SPC := int2bit( pl_SPC, 24); + } + else if( (pl_SCCP_ServiceType == mtp3_ttc) or (pl_SCCP_ServiceType == mtp3b_ttc) ) + { + if( (pl_SIO == '83'O) or (pl_SIO == '43'O) or (pl_SIO == 'C3'O) ) //ttc national + { + vl_SPC := int2bit( pl_SPC, 16); + } + else if( pl_SIO == '03'O ) //ttc international + { + //vl_SPC := '00'B&int2bit( pl_SPC, 14); + vl_SPC := int2bit( pl_SPC, 14); + } + else { log ( "SIO setting error"); } + } + else if( pl_SCCP_ServiceType == mtp3_mpt ) + { + var integer vl_NI := oct2int(pl_SIO)/64; + if( vl_NI == 2 ) //mpt national + { + vl_SPC := int2bit( pl_SPC, 24); + } + else //mpt international + { + vl_SPC := int2bit( pl_SPC, 14); + } + } + else + { log ( "ServiceType setting error. Use values", + "mtp3_itu, mtp3b_itu, mtp3_ansi, mtp3b_ansi,", + " mtp3_ttc, mtp3b_ttc, mtp3_mpt or m3ua"); + } + + return vl_SPC; + + }// SCCP_SPC_int2bit + + //****************************************************************** + // sending_udt_in_ASP_MTP_TRANSFERreqs + // sends data in one step + //****************************************************************** + function sending_udt_in_ASP_MTP_TRANSFERreqs( in SCCP_param_ProtocolClass pl_protClass, + in SCCP_param_CPartyAddressEnc pl_CalledPAddress, + in SCCP_param_CPartyAddressEnc pl_CallingPAddress, + in SCCP_param_Data pl_data) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + vl_PDU_SCCP.unitdata.messageType := udt ; + vl_PDU_SCCP.unitdata.protClass := pl_protClass; + vl_PDU_SCCP.unitdata.calledPAddress := pl_CalledPAddress; + vl_PDU_SCCP.unitdata.callingPAddress:= pl_CallingPAddress; + vl_PDU_SCCP.unitdata.data := pl_data; + vl_PDU_SCCP.unitdata.pointer1 := 0; + vl_PDU_SCCP.unitdata.pointer2 := 0; + vl_PDU_SCCP.unitdata.pointer3 := 0; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Unitdata + return; + + }//sending_udt_in_ASP_MTP_TRANSFERreqs + + //****************************************************************** + // sending_xudt_in_ASP_MTP_TRANSFERreqs + // segmentates and sends data to the encoder + //****************************************************************** + function sending_xudt_in_ASP_MTP_TRANSFERreqs(in SCCP_param_ProtocolClass pl_protClass, + in SCCP_param_CPartyAddressEnc pl_CalledPAddress, + in SCCP_param_CPartyAddressEnc pl_CallingPAddress, + in SCCP_param_Data pl_data) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var integer vl_actdatalen; //without length of paramLength field + var integer vl_len; // remaining data length without length of paramLength field + var integer vl_from; + var integer vl_overhead; + var integer vl_maxdatalen; + var integer vl_numberofPDUs; // ... to be sent + + vl_PDU_SCCP.extudata.messageType := xudt ; //len:1 + vl_PDU_SCCP.extudata.hopCounter := 15; // check it in spec. //len:1 + vl_PDU_SCCP.extudata.protClass := pl_protClass; //len:1 + vl_PDU_SCCP.extudata.pointer1 := 0; //len:4 + vl_PDU_SCCP.extudata.pointer2 := 0; + vl_PDU_SCCP.extudata.pointer3 := 0; + vl_PDU_SCCP.extudata.pointer4 := 0; + vl_PDU_SCCP.extudata.calledPAddress := pl_CalledPAddress; + vl_PDU_SCCP.extudata.callingPAddress := pl_CallingPAddress; + + vl_overhead := 15 + + (vl_PDU_SCCP.extudata.calledPAddress.paramLength+1) + + (vl_PDU_SCCP.extudata.callingPAddress.paramLength+1); + + vl_len := pl_data.paramLength; + vl_maxdatalen := v_sccp_pdu_maxlen - vl_overhead -1; // -1:paramLength + vl_numberofPDUs := vl_len/vl_maxdatalen; // 0 if 1 PDU exists + + // init segmentation: + vl_PDU_SCCP.extudata.optionalPart.segmentation.segmLocalRef:= create_segmLocalRef(); + vl_PDU_SCCP.extudata.optionalPart.segmentation.firstSegm := '1'B; //'yes' + vl_PDU_SCCP.extudata.optionalPart.segmentation.paramName := con_SCCP_segm; + vl_PDU_SCCP.extudata.optionalPart.segmentation.paramLength := 4; + vl_PDU_SCCP.extudata.optionalPart.segmentation.remainingSegment := int2bit(vl_numberofPDUs,4); + vl_PDU_SCCP.extudata.optionalPart.segmentation.reserved := '00'B; + + if( pl_protClass.class == '0001'B ) + { vl_PDU_SCCP.extudata.optionalPart.segmentation.class := '1'B; } + else + { vl_PDU_SCCP.extudata.optionalPart.segmentation.class := '0'B; }; + + vl_PDU_SCCP.extudata.optionalPart.importance:= omit; //len:0 + vl_PDU_SCCP.extudata.eop.paramName := con_SCCP_eop; //len:0 + + vl_from := 0; + + while ( vl_len > 0 ) + { + vl_PDU_SCCP.extudata.optionalPart.segmentation.remainingSegment := int2bit(vl_numberofPDUs,4); + + if ( vl_len > vl_maxdatalen ) + { vl_actdatalen := vl_maxdatalen; } + else + { vl_actdatalen := vl_len; }; + + vl_PDU_SCCP.extudata.data.data := substr( pl_data.data, vl_from, vl_actdatalen ); + vl_PDU_SCCP.extudata.data.paramLength := vl_actdatalen; + + MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp + (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //send PDU_SCCP_ExtUnitdata + + vl_PDU_SCCP.extudata.optionalPart.segmentation.firstSegm := '0'B; //'no' + + vl_numberofPDUs := vl_numberofPDUs -1 ; + vl_from := vl_from + vl_actdatalen; + vl_len := vl_len - vl_actdatalen; + }//while + + log("Last remaining Segment:", vl_PDU_SCCP.extudata.optionalPart.segmentation.remainingSegment ); + + // not necessary, remove it: + //reset_segmLocalRef(vl_PDU_SCCP.extudata.optionalPart.segmentation.segmLocalRef); + return; + }//sending_xudt_in_ASP_MTP_TRANSFERreqs + + //****************************************************************** + // processing_ASP_N_UNITDATA_req + //****************************************************************** + + function processing_ASP_N_UNITDATA_req( in ASP_SCCP_N_UNITDATA_req pl_N_UNITDATA_req ) + runs on SCCP_CT + { + var PDU_SCCP vl_PDU_SCCP; + var SCCP_param_ProtocolClass vl_protClass; + var SCCP_param_CPartyAddressEnc vl_CalledPAddress, vl_CallingPAddress; + var integer vl_overhead_length; + var SCCP_param_Data vl_data; + + // Protocol class mapping : + // old: vl_protClass.messageHandling:='0000'B;//no special options + + // 3.6/ Q.713: bit1-4 + if ( ispresent(pl_N_UNITDATA_req.sequenceControl) and + (substr(pl_N_UNITDATA_req.sequenceControl,7,1) == '1'B) ) //least significant bit! + { vl_protClass.class:='0001'B; } + else + { vl_protClass.class:='0000'B; } //changed to 0000 from 0001 ethbaat 2003-11-13 + + // 3.6/ Q.713: bit 5-8: + if ( ispresent(pl_N_UNITDATA_req.returnOption) and + (substr(pl_N_UNITDATA_req.returnOption,7,1) == '1'B) ) //least significant bit! + { vl_protClass.messageHandling:='1000'B} + else + { vl_protClass.messageHandling:='0000'B} + + //Called Address mapping: + if (pl_N_UNITDATA_req.calledAddress.addressIndicator.pointCodeIndic=='1'B) //DPC included + {//startif1 + + if (bit2int(pl_N_UNITDATA_req.calledAddress.signPointCode) == v_remote_SPC ) // remote SPC + {//startif2 + vl_CalledPAddress:= + ConvertASPAddressToEncodedAddress(pl_N_UNITDATA_req.calledAddress); + } + else + { + log("The remote SPC in ASP_SCCP_N_UNITDATA_req is not the same as the one you called by StartSCCP.ASP dropped") + return; + } + + }//endif1 + else + { //DPC not present, use values local for component + + var SCCP_PAR_Address vl_SCCP_PAR_Address; + vl_SCCP_PAR_Address := pl_N_UNITDATA_req.calledAddress; + + if ( v_remote_SPC > 0) + { + vl_SCCP_PAR_Address.addressIndicator.pointCodeIndic :='1'B; // 3.4.1/Q713. + vl_SCCP_PAR_Address.addressIndicator.routingIndicator := cg_route_on_SSN; + // 14,24 or 16 bits: + vl_SCCP_PAR_Address.signPointCode := SCCP_SPC_int2bit( v_remote_SPC, v_SCCPServiceType, v_SIO); + } + // vl_SCCP_PAR_Address.addressIndicator.ssnIndicator unchanged + // vl_SCCP_PAR_Address.addressIndicator.globalTitleIndic unchanged + // vl_SCCP_PAR_Address.subsystemNumber unchanged + // vl_SCCP_PAR_Address.globalTitle unchanged + + vl_CalledPAddress := + ConvertASPAddressToEncodedAddress(vl_SCCP_PAR_Address); + + }//endif1 + + vl_CallingPAddress := + ConvertASPAddressToEncodedAddress(pl_N_UNITDATA_req.callingAddress); + + vl_data.data := pl_N_UNITDATA_req.userData; + vl_data.paramLength:= lengthof( pl_N_UNITDATA_req.userData); + + // unitdata overhead calculation: + // msg type: 1; prot class: 2; 3 pointers: 3=> total:6 + vl_overhead_length := (vl_CalledPAddress.paramLength+1) + + (vl_CallingPAddress.paramLength +1)+ 6 ; + + if( (tsp_force_xudt==0) and + (vl_overhead_length + vl_data.paramLength + 1) <= v_sccp_pdu_maxlen ) + { + sending_udt_in_ASP_MTP_TRANSFERreqs(vl_protClass, + vl_CalledPAddress, + vl_CallingPAddress, + vl_data ); + } + else + { + sending_xudt_in_ASP_MTP_TRANSFERreqs(vl_protClass, + vl_CalledPAddress, + vl_CallingPAddress, + vl_data ); + } + + }//processing_ASP_N_UNITDATA_req + +//****************************************************************** +//****************************************************************** +function ScanEvents() runs on SCCP_CT +//****************************************************************** +//****************************************************************** +{//startfunction + + var PDU_SCCP vl_PDU_SCCP; + + var ASP_SCCP_N_CONNECT_req vl_N_CONNECT_req; + var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind; + var ASP_SCCP_N_CONNECT_res vl_N_CONNECT_res; + var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm; + var ASP_SCCP_N_DATA_req vl_N_DATA_req; + var ASP_SCCP_N_DATA_ind vl_N_DATA_ind; + var ASP_SCCP_N_DISCONNECT_req vl_N_DISCONNECT_req; + var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind; + var ASP_SCCP_N_UNITDATA_req vl_N_UNITDATA_req; + var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind; + var ASP_SCCP_N_NOTICE_ind vl_N_NOTICE_ind; + + var integer i; + //this function scans the MTP3 and user port for incoming messages and checks timers for timeout + + f_initialize_timer_states(); + + while (true) + {//startwhile + + alt + //****************************************************************** + {//startalt0 + //****************************************************************** + [] MTP3_SCCP_PORT.receive(PDU_SCCP : ? ) -> value vl_PDU_SCCP + { + //****************************************************************** + //Unitdata received at destination node + //****************************************************************** + if (ischosen(vl_PDU_SCCP.unitdata)) + { + // vl_PDU_SCCP.unitdata.pointer1 :=3; + // vl_PDU_SCCP.unitdata.pointer2 :=0; + // vl_PDU_SCCP.unitdata.pointer3 :=0; + processing_PDU_SCCP_Unitdata( vl_PDU_SCCP.unitdata ); + } + + //****************************************************************** + //Data received at destination node + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.dataform1)) + { + // vl_PDU_SCCP.dataform1.pointer1 :=1; + processing_PDU_SCCP_DataForm1( vl_PDU_SCCP.dataform1 ); + } + + //****************************************************************** + //Extended unitdata received at destination node + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.extudata)) + { + // vl_PDU_SCCP.extudata.pointer1 :=0; + // vl_PDU_SCCP.extudata.pointer2 :=0; + // vl_PDU_SCCP.extudata.pointer3 :=0; + // vl_PDU_SCCP.extudata.pointer4 :=0; + processing_PDU_SCCP_ExtUnitdata( vl_PDU_SCCP.extudata ); + } + + //****************************************************************** + //Connection request received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.connrequest)) + { + // vl_PDU_SCCP.connrequest.pointer1 :=2; + // vl_PDU_SCCP.connrequest.pointer2 :=0; + processing_PDU_SCCP_ConnectionRequest( vl_PDU_SCCP.connrequest ); + } + + //****************************************************************** + //Connection confirm received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.connconfirm)) + { + // vl_PDU_SCCP.connconfirm.pointer1 :=1; + processing_PDU_SCCP_ConnectionConfirm( vl_PDU_SCCP.connconfirm ); + } + + //****************************************************************** + //Released received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.released)) + { + // vl_PDU_SCCP.released.pointer1 :=1; + processing_PDU_SCCP_Released( vl_PDU_SCCP.released ); + } + + //****************************************************************** + //Release complete received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.relcomp)) + { + processing_PDU_SCCP_ReleaseComplete( vl_PDU_SCCP.relcomp ); + } + + //****************************************************************** + //Unitdata service received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.udataserv)) + { + // vl_PDU_SCCP.udataserv.pointer1 :=3; + // vl_PDU_SCCP.udataserv.pointer2 :=0; + // vl_PDU_SCCP.udataserv.pointer3 :=0; + processing_PDU_SCCP_UnitdataService( vl_PDU_SCCP.udataserv ); + } + + //****************************************************************** + //PDU_Error received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.pduerror)) + { + processing_PDU_SCCP_ProtDataUnitError( vl_PDU_SCCP.pduerror ); + } + + //****************************************************************** + //Inactivity test received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.inacttest)) + { + processing_PDU_SCCP_InactivityTest( vl_PDU_SCCP.inacttest ); + } + + //****************************************************************** + //Reset request received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.resetreq)) + { + processing_PDU_SCCP_ResetRequest( vl_PDU_SCCP.resetreq ); + } + + //****************************************************************** + //Reset confirm received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.resconf)) + { + processing_PDU_SCCP_ResetConfirm( vl_PDU_SCCP.resconf ); + } + + //****************************************************************** + //Connection refused received + //****************************************************************** + else if (ischosen(vl_PDU_SCCP.connrefused)) + { + // vl_PDU_SCCP.connrefused.pointer1 :=1; + processing_PDU_SCCP_ConnectionRefused( vl_PDU_SCCP.connrefused ); + } + else + { log ("Unsupported message received and discarded"); } + } + + []MTP3_SCCP_PORT.receive + { log("Unsupported or unrecognized message discarded after reception") } + + //****************************************************************** + //****************************************************************** + ////start second alternative-message received on user port + //****************************************************************** + //****************************************************************** + + [] SCCP_SP_PORT.check + {//start second alternative + + alt { //startalt1-subalternatives vill follow + + //****************************************************************** + //N_DATA_req + //****************************************************************** + [] SCCP_SP_PORT.receive( tr_ASP_N_DATA_req)-> value vl_N_DATA_req + { processing_ASP_N_DATA_req(vl_N_DATA_req); } + + //****************************************************************** + //N_UNITDATA_req at originating node + //****************************************************************** + [] SCCP_SP_PORT.receive( tr_ASP_N_UNITDATA_req ) -> value vl_N_UNITDATA_req + { processing_ASP_N_UNITDATA_req(vl_N_UNITDATA_req); } + + //****************************************************************** + //N_CONNECT_req , originating node + //****************************************************************** + [] SCCP_SP_PORT.receive( tr_ASP_N_CONNECT_req) -> value vl_N_CONNECT_req + { processing_ASP_N_CONNECT_req( vl_N_CONNECT_req);} + + //****************************************************************** + //N_CONNECT_resp + //****************************************************************** + [] SCCP_SP_PORT.receive( tr_ASP_N_CONNECT_res)-> value vl_N_CONNECT_res + { processing_ASP_N_CONNECT_res(vl_N_CONNECT_res); } + + //****************************************************************** + //N_DISCONNECT_req + //****************************************************************** + [] SCCP_SP_PORT.receive( tr_ASP_N_DISCONNECT_req)-> value vl_N_DISCONNECT_req + { processing_ASP_N_DISCONNECT_req(vl_N_DISCONNECT_req); } + + //****************************************************************** + //N_RESET_resp //will not be received!! + //****************************************************************** + //[] SCCP_SP_PORT.receive( tr_ASP_N_RESET_resp)-> value vl_N_RESET_resp; + + //****************************************************************** + //N_RESET_req //will not be received!! + //****************************************************************** + //[] SCCP_SP_PORT.receive( tr_ASP_N_RESET_req)-> value vl_N_RESET_req; + + //****************************************************************** + //If none of the above , then message is removed from the top of the + //stack and discarded + //****************************************************************** + [] SCCP_SP_PORT.receive + { } + + }//endalt1 + + }//end second alternative-message received on user port + + //****************************************************************** + //connection timer expired + //****************************************************************** + [v_T_conn_est[0]] T_conn_est[0].timeout {Conn_Timer_Expired(0); + v_T_conn_est[0] := false;} + [v_T_conn_est[1]] T_conn_est[1].timeout {Conn_Timer_Expired(1); + v_T_conn_est[1] := false;} + [v_T_conn_est[2]] T_conn_est[2].timeout {Conn_Timer_Expired(2); + v_T_conn_est[2] := false;} + [v_T_conn_est[3]] T_conn_est[3].timeout {Conn_Timer_Expired(3); + v_T_conn_est[3] := false;} + [v_T_conn_est[4]] T_conn_est[4].timeout {Conn_Timer_Expired(4); + v_T_conn_est[4] := false;} + [v_T_conn_est[5]] T_conn_est[5].timeout {Conn_Timer_Expired(5); + v_T_conn_est[5] := false;} + [v_T_conn_est[6]] T_conn_est[6].timeout {Conn_Timer_Expired(6); + v_T_conn_est[6] := false;} + [v_T_conn_est[7]] T_conn_est[7].timeout {Conn_Timer_Expired(7); + v_T_conn_est[7] := false;} + [v_T_conn_est[8]] T_conn_est[8].timeout {Conn_Timer_Expired(8); + v_T_conn_est[8] := false;} + [v_T_conn_est[9]] T_conn_est[9].timeout {Conn_Timer_Expired(9); + v_T_conn_est[9] := false;} + [v_T_conn_est[10]] T_conn_est[10].timeout {Conn_Timer_Expired(10); + v_T_conn_est[10] := false;} + [v_T_conn_est[11]] T_conn_est[11].timeout {Conn_Timer_Expired(11); + v_T_conn_est[11] := false;} + [v_T_conn_est[12]] T_conn_est[12].timeout {Conn_Timer_Expired(12); + v_T_conn_est[12] := false;} + [v_T_conn_est[13]] T_conn_est[13].timeout {Conn_Timer_Expired(13); + v_T_conn_est[13] := false;} + [v_T_conn_est[14]] T_conn_est[14].timeout {Conn_Timer_Expired(14); + v_T_conn_est[14] := false;} + [v_T_conn_est[15]] T_conn_est[15].timeout {Conn_Timer_Expired(15); + v_T_conn_est[15] := false;} + + //****************************************************************** + //send inactivity timer expired + //****************************************************************** + + [v_T_ias[0]] T_ias[0].timeout {SendInactivity_Timer_Expired(0); + v_T_ias[0] := false;} + [v_T_ias[1]] T_ias[1].timeout {SendInactivity_Timer_Expired(1); + v_T_ias[1] := false;} + [v_T_ias[2]] T_ias[2].timeout {SendInactivity_Timer_Expired(2); + v_T_ias[2] := false;} + [v_T_ias[3]] T_ias[3].timeout {SendInactivity_Timer_Expired(3); + v_T_ias[3] := false;} + [v_T_ias[4]] T_ias[4].timeout {SendInactivity_Timer_Expired(4); + v_T_ias[4] := false;} + [v_T_ias[5]] T_ias[5].timeout {SendInactivity_Timer_Expired(5); + v_T_ias[5] := false;} + [v_T_ias[6]] T_ias[6].timeout {SendInactivity_Timer_Expired(6); + v_T_ias[6] := false;} + [v_T_ias[7]] T_ias[7].timeout {SendInactivity_Timer_Expired(7); + v_T_ias[7] := false;} + [v_T_ias[8]] T_ias[8].timeout {SendInactivity_Timer_Expired(8); + v_T_ias[8] := false;} + [v_T_ias[9]] T_ias[9].timeout {SendInactivity_Timer_Expired(9); + v_T_ias[i] := false;} + [v_T_ias[10]] T_ias[10].timeout {SendInactivity_Timer_Expired(10); + v_T_ias[10] := false;} + [v_T_ias[11]] T_ias[11].timeout {SendInactivity_Timer_Expired(11); + v_T_ias[11] := false;} + [v_T_ias[12]] T_ias[12].timeout {SendInactivity_Timer_Expired(12); + v_T_ias[12] := false;} + [v_T_ias[13]] T_ias[13].timeout {SendInactivity_Timer_Expired(13); + v_T_ias[13] := false;} + [v_T_ias[14]] T_ias[14].timeout {SendInactivity_Timer_Expired(14); + v_T_ias[14] := false;} + [v_T_ias[15]] T_ias[15].timeout {SendInactivity_Timer_Expired(15); + v_T_ias[15] := false;} + + //****************************************************************** + //receive inactivity timer expired + //****************************************************************** + [v_T_iar[0]] T_iar[0].timeout {ReceiveInactivity_Timer_Expired(0); + v_T_iar[0] := false;} + [v_T_iar[1]] T_iar[1].timeout {ReceiveInactivity_Timer_Expired(1); + v_T_iar[1] := false;} + [v_T_iar[2]] T_iar[2].timeout {ReceiveInactivity_Timer_Expired(2); + v_T_iar[2] := false;} + [v_T_iar[3]] T_iar[3].timeout {ReceiveInactivity_Timer_Expired(3); + v_T_iar[3] := false;} + [v_T_iar[4]] T_iar[4].timeout {ReceiveInactivity_Timer_Expired(4); + v_T_iar[4] := false;} + [v_T_iar[5]] T_iar[5].timeout {ReceiveInactivity_Timer_Expired(5); + v_T_iar[5] := false;} + [v_T_iar[6]] T_iar[6].timeout {ReceiveInactivity_Timer_Expired(6); + v_T_iar[6] := false;} + [v_T_iar[7]] T_iar[7].timeout {ReceiveInactivity_Timer_Expired(7); + v_T_iar[7] := false;} + [v_T_iar[8]] T_iar[8].timeout {ReceiveInactivity_Timer_Expired(8); + v_T_iar[8] := false;} + [v_T_iar[9]] T_iar[9].timeout {ReceiveInactivity_Timer_Expired(9); + v_T_iar[9] := false;} + [v_T_iar[10]] T_iar[10].timeout {ReceiveInactivity_Timer_Expired(10); + v_T_iar[10] := false;} + [v_T_iar[11]] T_iar[11].timeout {ReceiveInactivity_Timer_Expired(11); + v_T_iar[11] := false;} + [v_T_iar[12]] T_iar[12].timeout {ReceiveInactivity_Timer_Expired(12); + v_T_iar[12] := false;} + [v_T_iar[13]] T_iar[13].timeout {ReceiveInactivity_Timer_Expired(13); + v_T_iar[13] := false;} + [v_T_iar[14]] T_iar[14].timeout {ReceiveInactivity_Timer_Expired(14); + v_T_iar[14] := false;} + [v_T_iar[15]] T_iar[15].timeout {ReceiveInactivity_Timer_Expired(15); + v_T_iar[15] := false;} + + //****************************************************************** + //release timer expired + //****************************************************************** + [v_T_rel[0]] T_rel[0].timeout {Release_Timer_Expired(0); + v_T_rel[0] := false;} + [v_T_rel[1]] T_rel[1].timeout {Release_Timer_Expired(1); + v_T_rel[1] := false;} + [v_T_rel[2]] T_rel[2].timeout {Release_Timer_Expired(2); + v_T_rel[2] := false;} + [v_T_rel[3]] T_rel[3].timeout {Release_Timer_Expired(3); + v_T_rel[3] := false;} + [v_T_rel[4]] T_rel[4].timeout {Release_Timer_Expired(4); + v_T_rel[4] := false;} + [v_T_rel[5]] T_rel[5].timeout {Release_Timer_Expired(5); + v_T_rel[5] := false;} + [v_T_rel[6]] T_rel[6].timeout {Release_Timer_Expired(6); + v_T_rel[6] := false;} + [v_T_rel[7]] T_rel[7].timeout {Release_Timer_Expired(7); + v_T_rel[7] := false;} + [v_T_rel[8]] T_rel[8].timeout {Release_Timer_Expired(8); + v_T_rel[8] := false;} + [v_T_rel[9]] T_rel[9].timeout {Release_Timer_Expired(9); + v_T_rel[9] := false;} + [v_T_rel[10]] T_rel[10].timeout {Release_Timer_Expired(10); + v_T_rel[10] := false;} + [v_T_rel[11]] T_rel[11].timeout {Release_Timer_Expired(11); + v_T_rel[11] := false;} + [v_T_rel[12]] T_rel[12].timeout {Release_Timer_Expired(12); + v_T_rel[12] := false;} + [v_T_rel[13]] T_rel[13].timeout {Release_Timer_Expired(13); + v_T_rel[13] := false;} + [v_T_rel[14]] T_rel[14].timeout {Release_Timer_Expired(14); + v_T_rel[14] := false;} + [v_T_rel[15]] T_rel[15].timeout {Release_Timer_Expired(15); + v_T_rel[15] := false;} + + //****************************************************************** + //repeat release timer expired + //****************************************************************** + + [v_T_repeat_rel[0]] T_repeat_rel[0].timeout {RepeatRelease_Timer_Expired(0); + v_T_repeat_rel[0] := false;} + [v_T_repeat_rel[1]] T_repeat_rel[1].timeout {RepeatRelease_Timer_Expired(1); + v_T_repeat_rel[1] := false;} + [v_T_repeat_rel[2]] T_repeat_rel[2].timeout {RepeatRelease_Timer_Expired(2); + v_T_repeat_rel[2] := false;} + [v_T_repeat_rel[3]] T_repeat_rel[3].timeout {RepeatRelease_Timer_Expired(3); + v_T_repeat_rel[3] := false;} + [v_T_repeat_rel[4]] T_repeat_rel[4].timeout {RepeatRelease_Timer_Expired(4); + v_T_repeat_rel[4] := false;} + [v_T_repeat_rel[5]] T_repeat_rel[5].timeout {RepeatRelease_Timer_Expired(5); + v_T_repeat_rel[5] := false;} + [v_T_repeat_rel[6]] T_repeat_rel[6].timeout {RepeatRelease_Timer_Expired(6); + v_T_repeat_rel[6] := false;} + [v_T_repeat_rel[7]] T_repeat_rel[7].timeout {RepeatRelease_Timer_Expired(7); + v_T_repeat_rel[7] := false;} + [v_T_repeat_rel[8]] T_repeat_rel[8].timeout {RepeatRelease_Timer_Expired(8); + v_T_repeat_rel[8] := false;} + [v_T_repeat_rel[9]] T_repeat_rel[9].timeout {RepeatRelease_Timer_Expired(9); + v_T_repeat_rel[9] := false;} + [v_T_repeat_rel[10]] T_repeat_rel[10].timeout {RepeatRelease_Timer_Expired(10); + v_T_repeat_rel[10] := false;} + [v_T_repeat_rel[11]] T_repeat_rel[11].timeout {RepeatRelease_Timer_Expired(11); + v_T_repeat_rel[11] := false;} + [v_T_repeat_rel[12]] T_repeat_rel[12].timeout {RepeatRelease_Timer_Expired(12); + v_T_repeat_rel[12] := false;} + [v_T_repeat_rel[13]] T_repeat_rel[13].timeout {RepeatRelease_Timer_Expired(13); + v_T_repeat_rel[13] := false;} + [v_T_repeat_rel[14]] T_repeat_rel[14].timeout {RepeatRelease_Timer_Expired(14); + v_T_repeat_rel[14] := false;} + [v_T_repeat_rel[15]] T_repeat_rel[15].timeout {RepeatRelease_Timer_Expired(15); + v_T_repeat_rel[15] := false;} + + //****************************************************************** + //interval timer expired + //****************************************************************** + [v_T_int[0]] T_int[0].timeout {Interval_Timer_Expired(0); + v_T_int[0] := false;} + [v_T_int[1]] T_int[1].timeout {Interval_Timer_Expired(1); + v_T_int[1] := false;} + [v_T_int[2]] T_int[2].timeout {Interval_Timer_Expired(2); + v_T_int[2] := false;} + [v_T_int[3]] T_int[3].timeout {Interval_Timer_Expired(3); + v_T_int[3] := false;} + [v_T_int[4]] T_int[4].timeout {Interval_Timer_Expired(4); + v_T_int[4] := false;} + [v_T_int[5]] T_int[5].timeout {Interval_Timer_Expired(5); + v_T_int[5] := false;} + [v_T_int[6]] T_int[6].timeout {Interval_Timer_Expired(6); + v_T_int[6] := false;} + [v_T_int[7]] T_int[7].timeout {Interval_Timer_Expired(7); + v_T_int[7] := false;} + [v_T_int[8]] T_int[8].timeout {Interval_Timer_Expired(8); + v_T_int[8] := false;} + [v_T_int[9]] T_int[9].timeout {Interval_Timer_Expired(9); + v_T_int[9] := false;} + [v_T_int[10]] T_int[10].timeout {Interval_Timer_Expired(10); + v_T_int[10] := false;} + [v_T_int[11]] T_int[11].timeout {Interval_Timer_Expired(11); + v_T_int[11] := false;} + [v_T_int[12]] T_int[12].timeout {Interval_Timer_Expired(12); + v_T_int[12] := false;} + [v_T_int[13]] T_int[13].timeout {Interval_Timer_Expired(13); + v_T_int[13] := false;} + [v_T_int[14]] T_int[14].timeout {Interval_Timer_Expired(14); + v_T_int[14] := false;} + [v_T_int[15]] T_int[15].timeout {Interval_Timer_Expired(15); + v_T_int[15] := false;} + + //****************************************************************** + //reset timer expired + //****************************************************************** + [v_T_reset[0]] T_reset[0].timeout {Reset_Timer_Expired(0); + v_T_reset[0] := false;} + [v_T_reset[1]] T_reset[1].timeout {Reset_Timer_Expired(1); + v_T_reset[1] := false;} + [v_T_reset[2]] T_reset[2].timeout {Reset_Timer_Expired(2); + v_T_reset[2] := false;} + [v_T_reset[3]] T_reset[3].timeout {Reset_Timer_Expired(3); + v_T_reset[3] := false;} + [v_T_reset[4]] T_reset[4].timeout {Reset_Timer_Expired(4); + v_T_reset[4] := false;} + [v_T_reset[5]] T_reset[5].timeout {Reset_Timer_Expired(5); + v_T_reset[5] := false;} + [v_T_reset[6]] T_reset[6].timeout {Reset_Timer_Expired(6); + v_T_reset[6] := false;} + [v_T_reset[7]] T_reset[7].timeout {Reset_Timer_Expired(7); + v_T_reset[7] := false;} + [v_T_reset[8]] T_reset[8].timeout {Reset_Timer_Expired(8); + v_T_reset[8] := false;} + [v_T_reset[9]] T_reset[9].timeout {Reset_Timer_Expired(9); + v_T_reset[9] := false;} + [v_T_reset[10]] T_reset[10].timeout {Reset_Timer_Expired(10); + v_T_reset[10] := false;} + [v_T_reset[11]] T_reset[11].timeout {Reset_Timer_Expired(11); + v_T_reset[11] := false;} + [v_T_reset[12]] T_reset[12].timeout {Reset_Timer_Expired(12); + v_T_reset[12] := false;} + [v_T_reset[13]] T_reset[13].timeout {Reset_Timer_Expired(13); + v_T_reset[13] := false;} + [v_T_reset[14]] T_reset[14].timeout {Reset_Timer_Expired(14); + v_T_reset[14] := false;} + [v_T_reset[15]] T_reset[15].timeout {Reset_Timer_Expired(15); + v_T_reset[15] := false;} + + //****************************************************************** + //internal_reset timer expired-sending internal signals! + //****************************************************************** + [v_T_internal_reset[0]] T_internal_reset[0].timeout {InternalResetTimer_Expired(0); + v_T_internal_reset[0] := false;} + [v_T_internal_reset[1]] T_internal_reset[1].timeout {InternalResetTimer_Expired(1); + v_T_internal_reset[1] := false;} + [v_T_internal_reset[2]] T_internal_reset[2].timeout {InternalResetTimer_Expired(2); + v_T_internal_reset[2] := false;} + [v_T_internal_reset[3]] T_internal_reset[3].timeout {InternalResetTimer_Expired(3); + v_T_internal_reset[3] := false;} + [v_T_internal_reset[4]] T_internal_reset[4].timeout {InternalResetTimer_Expired(4); + v_T_internal_reset[4] := false;} + [v_T_internal_reset[5]] T_internal_reset[5].timeout {InternalResetTimer_Expired(5); + v_T_internal_reset[5] := false;} + [v_T_internal_reset[6]] T_internal_reset[6].timeout {InternalResetTimer_Expired(6); + v_T_internal_reset[6] := false;} + [v_T_internal_reset[7]] T_internal_reset[7].timeout {InternalResetTimer_Expired(7); + v_T_internal_reset[7] := false;} + [v_T_internal_reset[8]] T_internal_reset[8].timeout {InternalResetTimer_Expired(8); + v_T_internal_reset[8] := false;} + [v_T_internal_reset[9]] T_internal_reset[9].timeout {InternalResetTimer_Expired(9); + v_T_internal_reset[9] := false;} + [v_T_internal_reset[10]] T_internal_reset[10].timeout {InternalResetTimer_Expired(10); + v_T_internal_reset[10] := false;} + [v_T_internal_reset[11]] T_internal_reset[11].timeout {InternalResetTimer_Expired(11); + v_T_internal_reset[11] := false;} + [v_T_internal_reset[12]] T_internal_reset[12].timeout {InternalResetTimer_Expired(12); + v_T_internal_reset[12] := false;} + [v_T_internal_reset[13]] T_internal_reset[13].timeout {InternalResetTimer_Expired(13); + v_T_internal_reset[13] := false;} + [v_T_internal_reset[14]] T_internal_reset[14].timeout {InternalResetTimer_Expired(14); + v_T_internal_reset[14] := false;} + [v_T_internal_reset[15]] T_internal_reset[15].timeout {InternalResetTimer_Expired(15); + v_T_internal_reset[15] := false;} + + //****************************************************************** + //guard timer expired - no answer to ASP_SCCP_N_CONNECT_ind received + //****************************************************************** + [v_T_guard[0]] T_guard[0].timeout {GuardTimer_Expired(0); + v_T_guard[0] := false;} + [v_T_guard[1]] T_guard[1].timeout {GuardTimer_Expired(1); + v_T_guard[1] := false;} + [v_T_guard[2]] T_guard[2].timeout {GuardTimer_Expired(2); + v_T_guard[2] := false;} + [v_T_guard[3]] T_guard[3].timeout {GuardTimer_Expired(3); + v_T_guard[3] := false;} + [v_T_guard[4]] T_guard[4].timeout {GuardTimer_Expired(4); + v_T_guard[4] := false;} + [v_T_guard[5]] T_guard[5].timeout {GuardTimer_Expired(5); + v_T_guard[5] := false;} + [v_T_guard[6]] T_guard[6].timeout {GuardTimer_Expired(6); + v_T_guard[6] := false;} + [v_T_guard[7]] T_guard[7].timeout {GuardTimer_Expired(7); + v_T_guard[7] := false;} + [v_T_guard[8]] T_guard[8].timeout {GuardTimer_Expired(8); + v_T_guard[8] := false;} + [v_T_guard[9]] T_guard[9].timeout {GuardTimer_Expired(9); + v_T_guard[9] := false;} + [v_T_guard[10]] T_guard[10].timeout {GuardTimer_Expired(10); + v_T_guard[10] := false;} + [v_T_guard[11]] T_guard[11].timeout {GuardTimer_Expired(11); + v_T_guard[11] := false;} + [v_T_guard[12]] T_guard[12].timeout {GuardTimer_Expired(12); + v_T_guard[12] := false;} + [v_T_guard[13]] T_guard[13].timeout {GuardTimer_Expired(13); + v_T_guard[13] := false;} + [v_T_guard[14]] T_guard[14].timeout {GuardTimer_Expired(14); + v_T_guard[14] := false;} + [v_T_guard[15]] T_guard[15].timeout {GuardTimer_Expired(15); + v_T_guard[15] := false;} + + + }//endalt0 + + //****************************************************************** + }//endwhile + //****************************************************************** + +}//endfunction ScanEvents + +//****************************************************************** +}//endgroup SCCPFunctions +//****************************************************************** + +}//endmodule diff --git a/SCCP_CNL113341/src/SCCP_EncDec.cc b/SCCP_CNL113341/src/SCCP_EncDec.cc new file mode 100644 index 00000000..f00b08a9 --- /dev/null +++ b/SCCP_CNL113341/src/SCCP_EncDec.cc @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// 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_EncDec.cc +// Rev: R6A05 +// Prodnr: CNL 113 341 +// Updated: 2007-09-17 +// Contact: http://ttcn.ericsson.se + +// Please note: Because the encoder/decoder functions are generated by the +// TITAN, the SCCP_EncDec.cc is kept only for compatibility issue and +// should be removed from the projects. diff --git a/SCCP_CNL113341/src/SCCP_Mapping.ttcnpp b/SCCP_CNL113341/src/SCCP_Mapping.ttcnpp new file mode 100644 index 00000000..0de496b7 --- /dev/null +++ b/SCCP_CNL113341/src/SCCP_Mapping.ttcnpp @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2012 // +// // +// 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_Mapping.ttcnpp +// Description: SCCP <-> MTP3 dual faced port definition +// Rev: R6A05 +// Prodnr: CNL 113 341 +// Updated: 2012-11-05 +// Contact: http://ttcn.ericsson.se +module SCCP_Mapping +{ +import from MTP3asp_Types all; +import from MTP3asp_PortType all; +import from SCCP_Types all; +import from SCCPasp_Types all; + +// ************************************************************************* +// ************************************************************************* +//SCCP Component related declarations +// ************************************************************************* +// ************************************************************************* + +type integer UnhandledProtocol; + +// SCCPasp_SP_PT SCCP_SP_PORT +//+-----------------+-----------------+ +//| SCCP_CT / +//| / +//+-----------------+-----------------+ +//MTP3asp_SCCP_PT MTP3_SCCP_PORT +// | +// + +//#ifdef USE_MTP3_DISTRIBUTOR +//Version to internal port +type port MTP3asp_SCCP_PT message +{ + in PDU_SCCP; + out ASP_MTP3_TRANSFERreq_sccp; +} +with +{ extension + "internal user MTP3asp_PT + out(ASP_MTP3_TRANSFERreq_sccp + -> ASP_MTP3_TRANSFERreq: function(f_enc_SCCP_to_MTP)) + in( ASP_MTP3_TRANSFERind + -> PDU_SCCP: function(f_dec_MTP_to_SCCP), + - : discard; + ASP_MTP3_PAUSE -> -: discard; + ASP_MTP3_RESUME -> -: discard; + ASP_MTP3_STATUS -> -: discard) + " +} +/*#else +//Version to external port +type port MTP3asp_SCCP_PT message +{ + in PDU_SCCP; + in UnhandledProtocol; + out ASP_MTP3_TRANSFERreq_sccp; +} +with +{ extension + "user MTP3asp_PT + out(ASP_MTP3_TRANSFERreq_sccp + -> ASP_MTP3_TRANSFERreq: function(f_enc_SCCP_to_MTP)) + in( ASP_MTP3_TRANSFERind -> + PDU_SCCP: function(f_dec_MTP_to_SCCP), + UnhandledProtocol: function(f_dec_MTP_to_UnhandledProtocol); + ASP_MTP3_PAUSE -> -: discard; + ASP_MTP3_RESUME -> -: discard; + ASP_MTP3_STATUS -> -: discard) + " +} + +function f_dec_MTP_to_UnhandledProtocol(in ASP_MTP3_TRANSFERind pl_in, out UnhandledProtocol pl_out) return integer +{ + pl_out := 1; + return 0; +} with {extension "prototype(backtrack)" } + +#endif +*/ + +function f_enc_SCCP_to_MTP + (in ASP_MTP3_TRANSFERreq_sccp pl_in, + out ASP_MTP3_TRANSFERreq pl_out) return integer +{ + var bitstring vl_sio_bit := oct2bit(pl_in.sio); + var MTP3_Field_sio vl_sio_struct; + vl_sio_struct.ni := substr(vl_sio_bit,0,2); + vl_sio_struct.prio := substr(vl_sio_bit,2,2); + vl_sio_struct.si := substr(vl_sio_bit,4,4); + + pl_out := + { + sio := vl_sio_struct, + opc := pl_in.opc, + dpc := pl_in.dpc, + sls := pl_in.sls, + data:= enc_PDU_SCCP(pl_in.data) + } + return 0; +} with {extension "prototype(backtrack)" } + +function f_dec_MTP_to_SCCP + (in ASP_MTP3_TRANSFERind pl_in, + out PDU_SCCP pl_out) return integer +{ + if (pl_in.sio.si != '0011'B) + { + log("The received message is not SCCP. Ignored."); + return 1; + } + pl_out := dec_PDU_SCCP(pl_in.data); + + return 0; +} with {extension "prototype(backtrack)" } + + + +} diff --git a/SCCP_CNL113341/src/SCCP_Types.ttcn b/SCCP_CNL113341/src/SCCP_Types.ttcn new file mode 100644 index 00000000..168c317a --- /dev/null +++ b/SCCP_CNL113341/src/SCCP_Types.ttcn @@ -0,0 +1,1553 @@ +//////////////////////////////////////////////////////////////////////////////// +// // +// 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) have been supplied // +// // +/////////////////////////////////////////////////////////////////////////////// +// File: SCCP_Types.ttcn +// Description: SS7 SCCP definitions according to specification +// ITU-T SS7 SCCP, ANSI ..., ttc ..., mpt +// Reference: ITU-T: Recommendation Q.711-Q.714 (07/96) +// ANSI: T1.112-2001 +// ttc: JT-Q711 -JT-Q714 (ver 2, 04/97) +// Rev: R6A05 +// Prodnr: CNL 113 341 +// Updated: 2008-05-08 +// Contact: http://ttcn.ericsson.se + +module SCCP_Types.objid { itu_t(0) identified_organization (4) etsi(0) + reserved(127) etsi_identified_organization(0) ericsson(5) + testing (0) generic(0) sccp(1) v3(3) typeDefinitions(2) patchNo(3)} + +{//start of the module + +modulepar +{//startparameters + +//------------------Protocol Timer Values---------------------------------- + +//Waiting for connection confirm message -1 to 2 minutes + + float tspc_timer_T_conn_est:=120.0; + + //Delay to send a message on a conn IT on a + //connection section when there are no + //messages to send + //5 to 10 minutes + + float tspc_timer_T_ias:=600.0; + //Waiting to receive a message on a connection + //section + //11 to 21 minutes + float tspc_timer_T_iar:=1260.0; + //Waiting for release complete message -10 to 20 seconds + + float tspc_timer_T_rel:=20.0; + //Waiting for release complete message; or to + //repeat sending released message after the + //initial T(rel) expiry + //10 to 20 seconds + float tspc_timer_T_repeat_rel:=20.0; + + //Waiting for release complete message; or to + //release connection resources, freeze the LRN + //and alert a maintenance function after the + //initial T(rel) expiry + //extending to 1 minute + float tspc_timer_T_int:=60.0; + + //Waiting to resume normal procedure for + //temporary connection sections during the + //restart procedure + //23 to 25 minutes + float tspc_timer_T_guard:=1500.0; + + //Waiting to release temporary connection + //section or alert maintenance function after + //reset request message is sent + //10 to 20 seconds + float tspc_timer_T_reset:=20.0; + //Waiting to receive all the segments of the + //remaining segments single segmented + //message after receiving the first segment + //10 to 20 seconds + + // float tspc_timer_T_reasssembly; + + float tspc_timer_T_internal_reset:=0.0; + //zero-only for sending internal signals!! + + + float tspc_timer_guard :=120.0 + //the same as tspc_timer_T_conn_est:1 or 2 minutes + +}//end parameters + + + +import from General_Types all; +import from MTP3asp_Types all; +//import from MTP3asp_PortType all; + +import from SCCPasp_Types all; + +external function enc_PDU_SCCP( in PDU_SCCP pdu) return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; +external function dec_PDU_SCCP( in octetstring o) return PDU_SCCP + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + +// Address encoder/decoder for itu: +external function enc_PDU_SCCP_Address_itu( in SCCP_param_CPartyAddress_itu pdu) return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; +external function dec_PDU_SCCP_Address_itu( in octetstring o) return SCCP_param_CPartyAddress_itu + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + +// Address encoder/decoder for ansi: +external function enc_PDU_SCCP_Address_ansi( in SCCP_param_CPartyAddress_ansi pdu) return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; +external function dec_PDU_SCCP_Address_ansi( in octetstring o) return SCCP_param_CPartyAddress_ansi + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + +// Address encoder/decoder for ttc: +external function enc_PDU_SCCP_Address_ttc( in SCCP_param_CPartyAddress_ttc pdu) return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; +external function dec_PDU_SCCP_Address_ttc( in octetstring o) return SCCP_param_CPartyAddress_ttc + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + +// Address encoder/decoder for mpt: +external function enc_PDU_SCCP_Address_mpt( in SCCP_param_CPartyAddress_mpt pdu) return octetstring + with { extension "prototype(convert)" + extension "encode(RAW)" + }; +external function dec_PDU_SCCP_Address_mpt( in octetstring o) return SCCP_param_CPartyAddress_mpt + with { extension "prototype(convert)" + extension "decode(RAW)" + }; + +group Types +{ + group FieldDefinitions + { + //--------------------------------------------------------------------------- + // Field Parameter Name (ITU:$3/Q713 $3, ANSI:Table 2/T1.112.3-2001 + //--------------------------------------------------------------------------- + type integer SCCP_field_ParameterName with { variant "FIELDLENGTH(8)"}; + const SCCP_field_ParameterName con_SCCP_eop :=0, con_SCCP_dLocRef:=1, + con_SCCP_sLocRef:=2, con_SCCP_cdPA:=3, + con_SCCP_cgPA:=4, con_SCCP_protclass:=5, + con_SCCP_segmReas:=6, con_SCCP_recSeqNum:=7, + con_SCCP_seqSegm:=8, con_SCCP_credit:=9, + con_SCCP_relCause:=10, con_SCCP_retCause:=11, + con_SCCP_resCause:=12, con_SCCP_errorCause:=13, + con_SCCP_refCause:=14, con_SCCP_data:=15, + con_SCCP_segm:=16, con_SCCP_hopCount:=17, + con_SCCP_imp:=18, con_SCCP_longData:=19, + con_SCCP_mti:=248, con_SCCP_ins:=249, + con_SCCP_isni:=250; + + + //EOP End of optional parameters, DLocRef Destination local reference, + //SLocRef Source local reference, CdPA Called party address, + //CgPA Calling party address, ProtClass Protocol class, + //SegmReas Segmenting/reassembling, RecSeqNum Receive sequence number, + //SeqSegm Sequencing/segmenting, Credit Credit, + //RelCause Release cause, RetCau Return cause, + //ResCau Reset cause, ErrCau Error cause, + //RefCau Refusal cause, Data Data, + //SEGM Segmentation, HopCount Hop counter, + //IMP Importance, LongData Long data, + // --- only in ANSI:--- + //MTI Message Type Interworking + //INS + //ISNI + //ISNI + + //--------------------------------------------------------------------------- + // Field Address Indicator (ITU: Q713 $3.4.1, ANSI: T1.112.3 $3.4.1) + //--------------------------------------------------------------------------- + type record SCCP_field_AddressIndicator_itu + { + BIT1 pointCodeIndic, + BIT1 ssnIndicator, + BIT4 globalTitleIndic, + BIT1 routingIndicator, + BIT1 reserved + } + with { variant "" } + + // field order is interesting at coding/decoding + type record SCCP_field_AddressIndicator_ansi + { + BIT1 ssnIndicator, + BIT1 pointCodeIndic, + BIT4 globalTitleIndic, + BIT1 routingIndicator, + BIT1 reserved + } + with { variant "" } + + //--------------------------------------------------------------------------- + // Subfield Signalling Point Code (Q713 $3.4.2.1) + //--------------------------------------------------------------------------- + // use functions SCCP_getSPC and SCCP_setSPC to handle it!!! + + type BIT16 SCCP_field_SignallingPointCode_itu; // TO BE DEFINED: msb or lsb ??? + type BIT24 SCCP_field_SignallingPointCode_ansi; // TO BE DEFINED: msb or lsb ??? + type BIT16 SCCP_field_SignallingPointCode_ttc; // TO BE DEFINED: msb or lsb ??? + type BIT24 SCCP_field_SignallingPointCode_mpt; // TO BE DEFINED: msb or lsb ??? + //--------------------------------------------------------------------------- + // Subfield Subsystem Number (Q713 $3.4.2.2) + //--------------------------------------------------------------------------- + //values declared in SCCPConstants in SCCP.ttcn + + type integer SCCP_field_SubsystemNumber + with { variant "FIELDLENGTH(8)" }; + + + //--------------------------------------------------------------------------- + // Subfield Global Title (ITU: Q713 $3.4.2.3, ANSI T1.112.3 $3.4.2.3 + //--------------------------------------------------------------------------- + + //--------------------------------------------------------------------------- + // Subfield Global Title, Nature of address only + //ITU: GTI=0001, Q713 $3.4.2.3.1 + //ANSI: - + + type record SCCP_field_GlobalTitle_NoA + { + BIT7 natureOfAddress, + BIT1 oddeven, + hexstring globalTitleAddress + //it should be hexstring, number digits are in BCD; + //hexstring is already supported yet by ETH compiler + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Global Title, Translation type only ( + // ITU: GTI=0010, Q713 $3.4.2.3.2 + // ANSI: GTI=0010, Figure6A/T1.112.3 + + type record SCCP_field_GlobalTitle_TT + { + OCT1 translationType, + hexstring globalTitleAddress + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Global Title, Translation type & numbering plan & encoding scheme + // ITU: GTI=0011, Q713 $3.4.2.3.3) + // ANSI GTI=0001, Figure6/T1.112.3 + + type record SCCP_field_GlobalTitle_TT_NP_ES + { + OCT1 translationType, + BIT4 encodingScheme, + BIT4 numberingPlan, + hexstring globalTitleAddress + } + with { variant "" } + + + //----------------------------------------------------------------------------- + // Global Title, Translation type & numbering plan & encoding scheme & nature of + // address + // GTI=0100, Q713 $3.4.2.3.4) + // ANSI: - + + // Suggested to change name to SCCP_field_GlobalTitle_TT_NP_ES_NoA + + type record SCCP_field_SignallingPointCode_TT_NP_ES_NoA + { + OCT1 translationType, + BIT4 encodingScheme, + BIT4 numberingPlan, + BIT7 natureOfAddress, + BIT1 reserved, + hexstring globalTitleAddress + } + with { variant "" } + + + type union SCCP_field_GlobalTitle_itu + { + SCCP_field_GlobalTitle_NoA gti0001, + SCCP_field_GlobalTitle_TT gti0010, + SCCP_field_GlobalTitle_TT_NP_ES gti0011, + SCCP_field_SignallingPointCode_TT_NP_ES_NoA gti0100 + } + with { variant "" } + // no TAG is added as alternatives depend on the gti field of the address indicator + + type union SCCP_field_GlobalTitle_ansi + { + SCCP_field_GlobalTitle_TT_NP_ES gti0001, + SCCP_field_GlobalTitle_TT gti0010 + } + with { variant "" } + +//--------------------------------------------------------------------------- +// Field Protocol Class (Q713 $3.6) +//--------------------------------------------------------------------------- +//type enumerated SCCP_field_ProtocolClass +// { class0 (0), class1(1), class2(2), class3(3) } +// with { variant "FIELDLENGTH(4)" } +//ethgry(2002-08-01): replaced by BIT4 + +//--------------------------------------------------------------------------- +// Field Importance (Q713 $3.19) +//--------------------------------------------------------------------------- + type integer SCCP_field_Importance + with { variant "FIELDLENGTH(3)" } + + +}//endgroup FieldDefinitions + + +group ParameterDefinitions +{ + //--------------------------------------------------------------------------- + // Parameter Message Type (Q713 $2.1) + //--------------------------------------------------------------------------- + type integer SCCP_param_MessageType with { variant "FIELDLENGTH(8)" } + const SCCP_param_MessageType cr:=1, cc:=2, cref:=3, + rlsd:=4, rlc:=5, dt1:=6, dt2:=7, + ak:=8, udt:=9, udts:=10, ed:=11, + ea:=12, rsr:=13, rsc:=14, err:=15, + it:=16, xudt:=17, xudts:=18, ludt:=19, + ludts:=20; + + + //CR Connection request, CC Connection confirm, CREF Connection refused, + //RLSD Released, RLC Release complete, DT1 Data form 1, + //DT2 Data form 2, AK Data acknowledgement, UDT Unitdata, + //UDTS Unitdata service, ED Expedited data, EA Expedited data acknowledgement, + //RSR Reset request, RSC Reset confirm, ERR Protocol data unit error, + //IT Inactivity test, XUDT Extended unitdata, XUDTS Extended unitdata service, + //LUDT Long unitdata, LUDTS Long unitdata service + + + //--------------------------------------------------------------------------- + // End of Optional Parameters (Q713 $3.1) + //--------------------------------------------------------------------------- + type record SCCP_param_EndOfOptionalParams + { + SCCP_field_ParameterName paramName (con_SCCP_eop) + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Parameter Destination Local Reference (Q713 $3.2) + //--------------------------------------------------------------------------- + type octetstring SCCP_param_DestLocalReference + with { variant "FIELDLENGTH(3)"} + + + //--------------------------------------------------------------------------- + // Parameter Source Local Reference (Q713 $3.3) + //--------------------------------------------------------------------------- + + type octetstring SCCP_param_SourceLocalReference + with { variant "FIELDLENGTH(3)" } + + + //--------------------------------------------------------------------------- + // Parameter Called/Calling Party Address (Q713 $3.4/$3.5) + //--------------------------------------------------------------------------- + /* Removed 2004.02.16 by ethbaat: + + type union SCCP_superfield_SignallingPointCode_itu + { + SCCP_field_SignallingPointCode_itu present, + Dummy absent + } with { variant "" } + + + type union SCCP_superfield_SignallingPointCode_ansi + { + SCCP_field_SignallingPointCode_ansi present, + Dummy absent + } with { variant "" } + + type union SCCP_superfield_SignallingPointCode_ttc + { + SCCP_field_SignallingPointCode_ttc present, + Dummy absent + } with { variant "" } + + type union SCCP_superfield_SubsystemNumber + { + SCCP_field_SubsystemNumber present, + Dummy absent + } with { variant "" } + + */ + + // Standard Independent Encoded Calling/Called Party Address: + // used in SCCP.ttcn/Convert + + // this address is used everywhere in SCCP inside: + type octetstring SCCP_CPartyAddressEnc_addr with { variant ""}; + + type record SCCP_param_CPartyAddressEnc + { + LIN1 paramLength, + SCCP_CPartyAddressEnc_addr addr + } with { variant (paramLength) "LENGTHTO( addr )"} + + // Structured, decoded versions: + + type record SCCP_param_CPartyAddress_itu { + + SCCP_field_AddressIndicator_itu addressIndicator, + SCCP_field_SignallingPointCode_itu signPointCode optional, + SCCP_field_SubsystemNumber subsystemNumber optional, + SCCP_field_GlobalTitle_itu globalTitle optional + } + with { variant (signPointCode) "PRESENCE( addressIndicator.pointCodeIndic = '1'B)"; + variant (subsystemNumber) "PRESENCE( addressIndicator.ssnIndicator = '1'B)"; + variant (globalTitle) "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B, + addressIndicator.globalTitleIndic = '0010'B, + addressIndicator.globalTitleIndic = '0011'B, + addressIndicator.globalTitleIndic = '0100'B}), + CROSSTAG( + gti0001, addressIndicator.globalTitleIndic = '0001'B; + gti0010, addressIndicator.globalTitleIndic = '0010'B; + gti0011, addressIndicator.globalTitleIndic = '0011'B; + gti0100, addressIndicator.globalTitleIndic = '0100'B)" + } + + type record SCCP_param_CPartyAddress_ansi + { + SCCP_field_AddressIndicator_ansi addressIndicator, + SCCP_field_SubsystemNumber subsystemNumber optional, + SCCP_field_SignallingPointCode_ansi signPointCode optional, + SCCP_field_GlobalTitle_ansi globalTitle optional + } + with { + variant (subsystemNumber) "PRESENCE( addressIndicator.ssnIndicator = '1'B )"; + variant (signPointCode) "PRESENCE( addressIndicator.pointCodeIndic = '1'B )"; + variant (globalTitle) "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B, + addressIndicator.globalTitleIndic = '0010'B}), + CROSSTAG( + gti0001, addressIndicator.globalTitleIndic = '0001'B; + gti0010, addressIndicator.globalTitleIndic = '0010'B)" + } + + type record SCCP_param_CPartyAddress_ttc { + + SCCP_field_AddressIndicator_itu addressIndicator, + SCCP_field_SignallingPointCode_ttc signPointCode optional, + SCCP_field_SubsystemNumber subsystemNumber optional, + SCCP_field_GlobalTitle_itu globalTitle optional + } + with { variant (signPointCode) "PRESENCE( addressIndicator.pointCodeIndic = '1'B)"; + variant (subsystemNumber) "PRESENCE( addressIndicator.ssnIndicator = '1'B)"; + variant (globalTitle) "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B, + addressIndicator.globalTitleIndic = '0010'B, + addressIndicator.globalTitleIndic = '0011'B, + addressIndicator.globalTitleIndic = '0100'B}), + CROSSTAG( + gti0001, addressIndicator.globalTitleIndic = '0001'B; + gti0010, addressIndicator.globalTitleIndic = '0010'B; + gti0011, addressIndicator.globalTitleIndic = '0011'B; + gti0100, addressIndicator.globalTitleIndic = '0100'B)" + } + + type record SCCP_param_CPartyAddress_mpt { + + SCCP_field_AddressIndicator_itu addressIndicator, + SCCP_field_SignallingPointCode_mpt signPointCode optional, + SCCP_field_SubsystemNumber subsystemNumber optional, + SCCP_field_GlobalTitle_itu globalTitle optional + } + with { variant (signPointCode) "PRESENCE( addressIndicator.pointCodeIndic = '1'B)"; + variant (subsystemNumber) "PRESENCE( addressIndicator.ssnIndicator = '1'B)"; + variant (globalTitle) "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B, + addressIndicator.globalTitleIndic = '0010'B, + addressIndicator.globalTitleIndic = '0011'B, + addressIndicator.globalTitleIndic = '0100'B}), + CROSSTAG( + gti0001, addressIndicator.globalTitleIndic = '0001'B; + gti0010, addressIndicator.globalTitleIndic = '0010'B; + gti0011, addressIndicator.globalTitleIndic = '0011'B; + gti0100, addressIndicator.globalTitleIndic = '0100'B)" + } + +// type record SCCP_param_CPartyAddress_opt_itu + type record SCCP_param_CPartyAddressEnc_opt + { + SCCP_field_ParameterName paramName(con_SCCP_cdPA, con_SCCP_cgPA), + LIN1 paramLength, + SCCP_CPartyAddressEnc_addr addr + } with { variant (paramLength) "LENGTHTO( addr )"} + + //--------------------------------------------------------------------------- + // Parameter Protocol Class (Q713 $3.6) + //--------------------------------------------------------------------------- + type record SCCP_param_ProtocolClass + { + BIT4 class, + BIT4 messageHandling + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Parameter Segmenting/reassembling (Q713 $3.7) + //--------------------------------------------------------------------------- + type record SCCP_param_SegmentingReassembl + { + BIT1 more, + BIT7 reserved + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Parameter Receive Sequence Number (Q713 $3.8) + //--------------------------------------------------------------------------- + type record SCCP_param_RecSeqNumber + { + BIT1 reserved, + BIT7 pr + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Parameter Sequencing/Segmenting (Q713 $3.9) + //--------------------------------------------------------------------------- + type record SCCP_param_SequencingSegmenting + { + BIT1 reserved, + BIT7 p_s, + BIT1 more, + BIT7 pr + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Parameter Credit(Q713 $3.10) + //--------------------------------------------------------------------------- + type octetstring SCCP_param_Credit + with { variant "FIELDLENGTH(1)" }//ethlel0813 + + + type record SCCP_param_Credit_opt + { + SCCP_field_ParameterName paramName(con_SCCP_credit), + LIN1 paramLength, // always 1! + OCT1 credit + } + with { variant "" } + + +//--------------------------------------------------------------------------- +// Parameter Release Cause(Q713 $3.11) +//--------------------------------------------------------------------------- +//type enumerated SCCP_param_ReleaseCause +// { endUserOrig(0), endUserCong(1), endUserFailure(2), sCCPUserOrig(3), +// remProcError(4), inconsConnData(5), accessFailure(6), accessCongestion(7), +// subsystFailure(8), subsystCongest(9), mTPFailure(10), networkCongest(11), +// expResetTimer(12), expRecInacTimer(13), reserved(14), unqualified(15), +// sCCPFailure(16) +// } +// with { variant "FIELDLENGTH(8)" } + +//values declared in SCCPConstants in SCCP.ttcn + + type integer SCCP_param_ReleaseCause + with { variant "FIELDLENGTH(8), COMP(nosign)" }; + + +//--------------------------------------------------------------------------- +// Parameter Return Cause(Q713 $3.12) +//--------------------------------------------------------------------------- +//type enumerated SCCP_param_ReturnCause +// { noTransl4AddrNature(0), noTransl4SpecifAddr(1), subsystemCongestion(2), +// subsystemFailure(3), unequippedUser(4), mTPFailure(5), +// networkCongestion(6), unqualified(7), errorMessageTransport(8), +// errorLocalProcessing(9), destNoReassembly(10), sCCPFailure(11), +// hopCounterViolation(12), segmeNotSupported(13), segmentationFailure(14) +// } +// with { variant "FIELDLENGTH(8)" } + + //values declared in SCCPConstants in SCCP.ttcn + type integer SCCP_param_ReturnCause + with { variant "FIELDLENGTH(8), COMP(nosign)" }; + + +//--------------------------------------------------------------------------- +// Parameter Reset Cause(Q713 $3.13) +//--------------------------------------------------------------------------- +//type enumerated SCCP_param_ResetCause +// { endUserOriginated(0), sCCPUserOriginated(1), +// messOutOfOrder_incPs(2), messOutOfOrder_incPr(3), +// remProcErr_messOutOfWindow(4), emProcErr_IncPsAfterReinit(5), +// remProcErr_general(6), remEndUserOperational(7), +// networkOperational(8), accessOperational(9), +// networkCongestion(10), reserved(11), +// unqualified(12) +// } +// with { variant "FIELDLENGTH(8)" } + + + //values declared in SCCPConstants in SCCP.ttcn + + type integer SCCP_param_ResetCause + with { variant "FIELDLENGTH(8), COMP(nosign)" }; + + + //--------------------------------------------------------------------------- + // Parameter Error Cause(Q713 $3.14) + //--------------------------------------------------------------------------- + //type enumerated SCCP_param_ErrorCause + // { unassignedDestinationLRN(0), inconsistentSourceLRN(1), + // pointCodeMismatch(2), serviceClassMismatch(3), + // unqualified(4) + // } + // with { variant "FIELDLENGTH(8)" } + + //values declared in SCCPConstants in SCCP.ttcn + + type integer SCCP_param_ErrorCause + with { variant "FIELDLENGTH(8), COMP(nosign)" }; + + + //--------------------------------------------------------------------------- + // Parameter Refusal Cause(Q713 $3.15) + //--------------------------------------------------------------------------- + //type enumerated SCCP_param_RefusalCause + // { endUserOrigin(0), endUserConges(1), endUserFailure(2), + // sCCPUserOrigin(3), destAddrUnkn(4), destInaccess(5), + // qOSNotAvail_nonTransient(6), qOSNotAvail_transient(7), accessFailure(8), + // accessCongestion(9), subsystemFailure(10), subsystemCongest(11), + // expConnEstTimer(12), incomUserData(13), reserved(14), + // unqualified(15), hopCounterViol(16), sCCPFailure(17), + // noTransl4address(18), unequippedUser(19) + // } + // with { variant "FIELDLENGTH(8)" } + + + //values declared in SCCPConstants in SCCP.ttcn + + type integer SCCP_param_RefusalCause + with { variant "FIELDLENGTH(8), COMP(nosign)" }; + + + //--------------------------------------------------------------------------- + // Parameter User data (Q713 $3.16) + //--------------------------------------------------------------------------- + type record SCCP_param_Data + { + LIN1 paramLength, + OCTN data + } + with { variant (paramLength) "LENGTHTO(data)" } + + + type record SCCP_param_Data_opt + { + SCCP_field_ParameterName paramName(con_SCCP_data), + LIN1 paramLength, + OCTN data + } + with { variant (paramLength) "LENGTHTO(data)" } + + + //--------------------------------------------------------------------------- + // Parameter Segmentation (Q713 $3.17) + //--------------------------------------------------------------------------- + + type record SCCP_param_Segmentation_opt + { + SCCP_field_ParameterName paramName(con_SCCP_segm), + LIN1 paramLength, //always 4! + BIT4 remainingSegment, + BIT2 reserved, + BIT1 class, + BIT1 firstSegm, + OCT3 segmLocalRef + } + with { variant "" } + + + //--------------------------------------------------------------------------- + // Parameter Hop counter (Q713 $3.18) + //--------------------------------------------------------------------------- + type integer SCCP_param_HopCounter + with { variant "FIELDLENGTH(8), COMP(nosign)" }; + + + type record SCCP_param_HopCounter_opt + { + SCCP_field_ParameterName paramName(con_SCCP_hopCount), + LIN1 paramLength, //always 1! + SCCP_param_HopCounter counter + } + with { variant (paramLength) "LENGTHTO(counter)" } + + + //--------------------------------------------------------------------------- + // Parameter Importance (Q713 $3.19) + //--------------------------------------------------------------------------- + + type record SCCP_param_Importance_opt + { + SCCP_field_ParameterName paramName(con_SCCP_imp), + LIN1 paramLength, //always 1! + SCCP_field_Importance importance, + BIT5 reserved + } + with { variant ""} + //with { variant (paramLength) "LENGTHTO(importance)" } //???? + + + //--------------------------------------------------------------------------- + // Parameter Long data (Q713 $3.20) + //--------------------------------------------------------------------------- + type record SCCP_param_LongData + { + LIN2 paramLength, + OCTN data + } + with { variant (paramLength) "LENGTHTO(data)" } + + + //******************************************************************************** + // SCCP management parameters (Q713 $5) + //******************************************************************************** + + //--------------------------------------------------------------------------- + // SCMG format identifier (Q713 $5.1) + //--------------------------------------------------------------------------- + type enumerated SCMG_param_FormatId + { + sSAallowed(1), // SSA subsystem-allowed + sSPprohib(2), // SSP subsystem-prohibited + sSTstaTest(3), // SST subsystem-status-test + sORoutReq(4), // SOR subsystem-out-of-service-request + sORoutGrant (5), // SOG subsystem-out-of-service-grant + sSCcongest(6) // SSC SCCP/subsystem-congested + } + with { variant "FIELDLENGTH(8)" } + + + //--------------------------------------------------------------------------- + // Affected SSN (Q713 $5.2.1) + //--------------------------------------------------------------------------- + /* not supported yet: + type SCCP_field_SubsystemNumber SCMG_param_AffectedSSN + with { variant "" } + */ + + //--------------------------------------------------------------------------- + // Affected Pointcode (Q713 $5.2.2) + //--------------------------------------------------------------------------- + /* not supported yet: + type SCCP_field_SignallingPointCode SCMG_param_AffectedPointCode + with { variant "" } + */ + + //--------------------------------------------------------------------------- + // Subsystem Multiplicity Indicator (Q713 $5.2.3) + //--------------------------------------------------------------------------- + /* not supported yet: + type record SCMG_param_MultiplIndicator + { + BIT2 smi, + BIT6 reserved + } + with { variant "" } + */ + + //--------------------------------------------------------------------------- + // SCCP congestion level (Q713 $5.2.4) + //--------------------------------------------------------------------------- + /* not supported yet: + type record SCMG_param_CongestionLevel + { + BIT4 congLevel, + BIT4 reserved + } + with { variant "" } + */ + +}//endgroup ParameterDefinitions + + +group PDUDefinitions +{ + //******************************************************************************** + // Message Connection Request (CR) (Q713 $4.2) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + type set SCCP_ConnReq_optionalPart + { + SCCP_param_Credit_opt credit optional, + SCCP_param_CPartyAddressEnc_opt callingPAddress optional, + SCCP_param_Data_opt data optional, + SCCP_param_HopCounter_opt hopCounter optional, + SCCP_param_Importance_opt importance optional + } + with { variant "TAG ( credit, paramName= con_SCCP_credit; + callingPAddress, paramName= con_SCCP_cgPA; + data, paramName= con_SCCP_data; + hopCounter, paramName= con_SCCP_hopCount; + importance , paramName= con_SCCP_imp)" + } + + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ConnectionRequest + { + SCCP_param_MessageType messageType, + SCCP_param_SourceLocalReference sourceLocRef, + SCCP_param_ProtocolClass protClass, + LIN1 pointer1, //will be 2 + LIN1 pointer2, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_ConnReq_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop )" + //Note, that optional part itself is mandatory but it may be empty! + } + + + //******************************************************************************** + // Message Connection Confirm (CC) (Q713 $4.3) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + type set SCCP_ConnConfirm_optionalPart + { + SCCP_param_Credit_opt credit optional, + SCCP_param_CPartyAddressEnc_opt calledPAddress optional, + SCCP_param_Data_opt data optional, + SCCP_param_Importance_opt importance optional + } + with { variant "TAG ( credit, paramName= con_SCCP_credit; + calledPAddress, paramName= con_SCCP_cdPA; + data, paramName= con_SCCP_data; + importance, paramName= con_SCCP_imp)" + } + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ConnectionConfirm + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SourceLocalReference sourceLocRef, + SCCP_param_ProtocolClass protClass, + LIN1 pointer1, + SCCP_ConnConfirm_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop )"} + + + //******************************************************************************** + // Message Connection Refused (CREF) (Q713 $4.4) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + type set SCCP_ConnRefused_optionalPart + { + SCCP_param_CPartyAddressEnc_opt calledPAddress optional, + SCCP_param_Data_opt data optional, + SCCP_param_Importance_opt importance optional + } + with { variant "TAG (calledPAddress, paramName= con_SCCP_cdPA; + data, paramName= con_SCCP_data; + importance, paramName= con_SCCP_imp)" + } + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ConnectionRefused + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_RefusalCause refusalCause, + LIN1 pointer1, + SCCP_ConnRefused_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop )"} + + + //******************************************************************************** + // Message Released (RLSD) (Q713 $4.5) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + type set SCCP_Released_optionalPart + { + SCCP_param_Data_opt data optional, + SCCP_param_Importance_opt importance optional + } + with { variant "TAG (data, paramName= con_SCCP_data; + importance, paramName= con_SCCP_imp)" + } + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_Released + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SourceLocalReference sourceLocRef, + SCCP_param_ReleaseCause releaseCause, + LIN1 pointer1, + SCCP_Released_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop )" } + + + //******************************************************************************** + // Message Release Complete (RLC) (Q713 $4.6) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ReleaseComplete + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SourceLocalReference sourceLocRef + } + with { variant "" } + + + //******************************************************************************** + // Message Data form 1 (DT1) (Q713 $4.7) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_DataForm1 + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SegmentingReassembl segmentingReassembl, + LIN1 pointer1, //always 1! + SCCP_param_Data data + } + with { variant (pointer1) "POINTERTO(data)"; } + + + //******************************************************************************** + // Message Data form 2 (DT2) (Q713 $4.8) + //******************************************************************************** + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_DataForm2 + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SequencingSegmenting sequencingSegmenting, + LIN1 pointer1, //always 1! + SCCP_param_Data data + } + with { variant (pointer1) "POINTERTO(data)"; } + + + //******************************************************************************** + // Message Data Acknowledgement (AK) (Q713 $4.9) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_DataAcknowledgement + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_RecSeqNumber recSeqNumber, + SCCP_param_Credit credit + } + with { variant "" } + + + //******************************************************************************** + // Message Unitdata (UDT) (Q713 $4.10) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_Unitdata + { + SCCP_param_MessageType messageType, + SCCP_param_ProtocolClass protClass, + LIN1 pointer1, //will be 3 + LIN1 pointer2, + LIN1 pointer3, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_param_CPartyAddressEnc callingPAddress, + SCCP_param_Data data + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(callingPAddress)"; + variant (pointer3) "POINTERTO(data)" + } + + + //******************************************************************************** + // Message Unitdata service (UDTS) (Q713 $4.11) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_UnitdataService + { + SCCP_param_MessageType messageType, + SCCP_param_ReturnCause returnCause, + LIN1 pointer1, //will be 3 + LIN1 pointer2, + LIN1 pointer3, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_param_CPartyAddressEnc callingPAddress, + SCCP_param_Data data + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(callingPAddress)"; + variant (pointer3) "POINTERTO(data)" + } + + + //******************************************************************************** + // Message Expedited Data (ED) (Q713 $4.12) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ExpeditedData + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + LIN1 pointer1, //always 1! + SCCP_param_Data data + } + with { variant (pointer1) "POINTERTO(data)" } + + + //******************************************************************************** + // Message Expedited Data Acknowledgement (EA) (Q713 $4.13) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ExpeditedDataAck + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef + } + with { variant "" } + + + //******************************************************************************** + // Message Reset Request (RSR) (Q713 $4.14) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ResetRequest + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SourceLocalReference sourceLocRef, + SCCP_param_ResetCause resetCause + } + with { variant "" } + + + //******************************************************************************** + // Message Reset Confirmation (RSC) (Q713 $4.15) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ResetConfirm + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SourceLocalReference sourceLocRef + } + with { variant "" } + + + //******************************************************************************** + // Message Protocol data unit error (ERR) (Q713 $4.16) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ProtDataUnitError + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_ErrorCause errorCause + } + with { variant "" } + + + //******************************************************************************** + // Message Inactivity test (IT) (Q713 $4.17) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_InactivityTest + { + SCCP_param_MessageType messageType, + SCCP_param_DestLocalReference destLocRef, + SCCP_param_SourceLocalReference sourceLocRef, + SCCP_param_ProtocolClass protClass, + SCCP_param_SequencingSegmenting sequencingSegmenting, + SCCP_param_Credit credit + } + with { variant "" } + + + //******************************************************************************** + // Message Extended Unitdata (XUDT) (Q713 $4.18) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + type record SCCP_ExtUnitdata_optionalPart + { + SCCP_param_Segmentation_opt segmentation optional, + SCCP_param_Importance_opt importance optional + } + with { variant "TAG (segmentation, paramName= con_SCCP_segm; + importance, paramName= con_SCCP_imp)" + } + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ExtUnitdata + { + SCCP_param_MessageType messageType, + SCCP_param_ProtocolClass protClass, + SCCP_param_HopCounter hopCounter, + LIN1 pointer1, //will be 4 + LIN1 pointer2, + LIN1 pointer3, + LIN1 pointer4, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_param_CPartyAddressEnc callingPAddress, + SCCP_param_Data data, + SCCP_ExtUnitdata_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(callingPAddress)"; + variant (pointer3) "POINTERTO(data)"; + variant (pointer4) "POINTERTO(optionalPart)"; + variant "TAG (eop, paramName=con_SCCP_eop )" + } + + + //******************************************************************************** + // Message Extended Unitdata Service(XUDTS) (Q713 $4.19) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + // The same as SCCP_ExtUnitdata_optionalPart + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_ExtUnitdataService + { + SCCP_param_MessageType messageType, + SCCP_param_ReturnCause returnCause, + SCCP_param_HopCounter hopCounter, + LIN1 pointer1, //will be 4 + LIN1 pointer2, + LIN1 pointer3, + LIN1 pointer4, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_param_CPartyAddressEnc callingPAddress, + SCCP_param_Data data, + SCCP_ExtUnitdata_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(callingPAddress)"; + variant (pointer3) "POINTERTO(data)"; + variant (pointer4) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop )" + } + + + //******************************************************************************** + // Message Long Unitdata (LUDT) (Q713 $4.20) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + // The same as SCCP_ExtUnitdata_optionalPart + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_LongUnitdata + { + SCCP_param_MessageType messageType, + SCCP_param_ProtocolClass protClass, + SCCP_param_HopCounter hopCounter, + LIN2 pointer1, + LIN2 pointer2, + LIN2 pointer3, + LIN2 pointer4, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_param_CPartyAddressEnc callingPAddress, + SCCP_param_LongData longData, + SCCP_ExtUnitdata_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(callingPAddress)"; + variant (pointer3) "POINTERTO(longData)"; + variant (pointer4) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop) " + } + + + //******************************************************************************** + // Message Long Unitdata Service (LUDTS) (Q713 $4.21) + //******************************************************************************** + //--------------------------------------------------------------------------- + // Optional part + // The same as SCCP_ExtUnitdata_optionalPart + + //--------------------------------------------------------------------------- + // Message definition + //--------------------------------------------------------------------------- + type record PDU_SCCP_LongUnitdataService + { + SCCP_param_MessageType messageType, + SCCP_param_ReturnCause returnCause, + SCCP_param_HopCounter hopCounter, + LIN2 pointer1, //will be 5 + LIN2 pointer2, + LIN2 pointer3, + LIN2 pointer4, + SCCP_param_CPartyAddressEnc calledPAddress, + SCCP_param_CPartyAddressEnc callingPAddress, + SCCP_param_LongData longData, + SCCP_ExtUnitdata_optionalPart optionalPart optional, + SCCP_param_EndOfOptionalParams eop optional + } + with { variant (pointer1) "POINTERTO(calledPAddress)"; + variant (pointer2) "POINTERTO(callingPAddress)"; + variant (pointer3) "POINTERTO(longData)"; + variant (pointer4) "POINTERTO(optionalPart)"; + variant "TAG (eop,paramName=con_SCCP_eop) " + } + + + //******************************************************************************** + // SCCP management messages (Q713 $5.3) + //******************************************************************************** + /*type record PDU_SCMG_message + { + SCMG_param_FormatId messageType, + SCMG_param_AffectedSSN affectedSSN, + SCMG_param_AffectedPointCode affectedPC, + SCMG_param_MultiplIndicator smi, + SCMG_param_CongestionLevel congLevel optional + //shall be present in all messages except SSG + } + with { variant "" } + */ + + //******************************************************************************** + // SCCP Top Level PDU (Q713 $4.2) + //******************************************************************************** + + type union PDU_SCCP + { + PDU_SCCP_ConnectionRequest connrequest, + PDU_SCCP_ConnectionRefused connrefused, + PDU_SCCP_Released released, + PDU_SCCP_ReleaseComplete relcomp, + PDU_SCCP_DataForm1 dataform1, + PDU_SCCP_DataForm2 dataform2, + PDU_SCCP_DataAcknowledgement dataack, + PDU_SCCP_UnitdataService udataserv, + PDU_SCCP_ExpeditedData expdata, + PDU_SCCP_ExpeditedDataAck expdataack , + PDU_SCCP_ResetRequest resetreq, + PDU_SCCP_ResetConfirm resconf, + PDU_SCCP_ProtDataUnitError pduerror, + PDU_SCCP_InactivityTest inacttest, + PDU_SCCP_ExtUnitdata extudata, + PDU_SCCP_ExtUnitdataService extudataserv , + PDU_SCCP_LongUnitdata longudata, + PDU_SCCP_LongUnitdataService longudataserv, + PDU_SCCP_Unitdata unitdata, + PDU_SCCP_ConnectionConfirm connconfirm + // PDU_SCMG_message scmg + } + with { variant "TAG (connrequest, messageType = cr; + connconfirm, messageType = cc; + connrefused, messageType = cref; + released, messageType = rlsd; + relcomp, messageType = rlc; + dataform1, messageType = dt1; + dataform2, messageType = dt2; + dataack, messageType = ak; + unitdata, messageType = udt; + udataserv, messageType = udts; + expdata, messageType = ed; + expdataack, messageType = ea; + resetreq, messageType = rsr; + resconf, messageType = rsc; + pduerror, messageType = err; + inacttest, messageType = it; + extudata, messageType = xudt; + extudataserv, messageType = xudts; + longudata, messageType = ludt; + longudataserv, messageType = ludts)" + } + +}//endgroup PDUDefinitions + +}//endgroup Types + + + +group OtherTypedefinitions +{//startgroup OtherTypedefinitions + + // enum replaced with this solution: + type integer states; + const states + idle:=0, + connection_pending_OG:=1, + connection_pending_IC:=2, + active:=3, // ==data transfer, see 6.1.1.2.1/Q.711. + disconnect_pending:=4, // == + //reset_OG,- as N_RESET_req and N_RESET_resp will not be received, this state should never occur + reset_bothway:=5, + reset_IC:=5, + //frozen_reference, + wait_conn_confirm:=6; + + type record sccp_buffer + { + octetstring buffer, + integer actlen, + integer maxlen + } + + // === Connection Oriented Data: === + + // record holding all data of a connection + type record ConnectionData + { + OCT3 localReference, //segmLocReference????, + OCT3 remoteReference, //segmRemoteRef????, + states state, + integer connectionId, + //integer max_len, //maximal length of input buffer + sccp_buffer reassembler_buffer // data collected here before sending up to the User + } + + // === Connectionless Data: ======================= + // == sending:== + // Segmentation Local Reference + type integer segmLocRef_states; + const segmLocRef_states segmLocRef_idle :=0, segmLocRef_busy:=1; + + type record segmLocRef + { + OCT3 val, + segmLocRef_states state + } + + // == receiving: == + type record ClessRcvBuff + { + //OCT3 segmLocalRef, // not used ?? + OCT3 segmRemoteRef, + segmLocRef_states state, + sccp_buffer reassembler_buffer + } + + type charstring SCCP_ServiceType; + + const charstring mtp3_itu := "mtp3_itu"; // SCCP_itu + const charstring mtp3_ansi := "mtp3_ansi"; //SCCP_ansi + const charstring mtp3_ttc := "mtp3_ttc"; //SCCP_ttc + const charstring mtp3b_itu := "mtp3b_itu"; + const charstring mtp3b_ansi:= "mtp3b_ansi"; + const charstring mtp3b_ttc := "mtp3b_ttc"; + const charstring m3ua := "m3ua"; + const charstring mtp3_mpt := "mtp3_mpt"; + + type record MSC_SCCP_MTP3_parameters + { + MTP3_Field_sio sio, + integer opc, + integer dpc, + integer sls, + SCCP_ServiceType sccp_serviceType, + integer ssn optional //This should be set if you want only one + } //active subsystem on the link. + +}//endgroup OtherTypedefinitions + +group MessageTypes +{ + // ************************************************************************* + // * ASP_sccp type definitions * + // ************************************************************************* + + + // type record ASP_MTP3_TRANSFERind_sccp + // { + // octetstring sio length(1), // see values in Q.704 $14.2.1 + // integer opc, + // integer dpc, + // integer sls, + // PDU_SCCP data + // } + + + type record ASP_MTP3_TRANSFERreq_sccp + { + octetstring sio length(1), // see values in Q.704 $14.2.1 + integer opc, + integer dpc, + integer sls, + PDU_SCCP data + } + +}//end group Messagetypes + +group ASPTemplates +{ + +// ************************************************************************* +// * ASP template definitions sending +// ************************************************************************* + +// template ASP_MTP3_TRANSFERind_sccp t_ASP_MTP3_TRANSFERind_sccp +// ( +// +// octetstring pl_sio, +// integer pl_opc, +// integer pl_dpc, +// integer pl_sls, +// template PDU_SCCP pl_data) := +// { +// sio := pl_sio, +// opc := pl_opc, +// dpc := pl_dpc, +// sls := pl_sls, +// data := pl_data +// } + + + template ASP_MTP3_TRANSFERreq_sccp t_ASP_MTP3_TRANSFERreq_sccp + ( + + octetstring pl_sio, + integer pl_opc, + integer pl_dpc, + integer pl_sls, + template PDU_SCCP pl_data + ) := + { + sio := pl_sio, + opc := pl_opc, + dpc := pl_dpc, + sls := pl_sls, + data := pl_data + } + + +// ************************************************************************* +// * ASP template definitions receiving * +// ************************************************************************* + + +//template ASP_MTP3_TRANSFERind_sccp tr_ASP_MTP3_TRANSFERind_sccp +// ( +// +// PDU_SCCP pl_data) := +// { +// sio := ?, +// opc := ?, +// dpc := ?, +// sls := ?, +// data := pl_data +// } + + + template ASP_MTP3_TRANSFERreq_sccp tr_ASP_MTP3_TRANSFERreq_sccp + // ( + + // PDU_SCCP pl_data) + := + { + sio := ?, + opc := ?, + dpc := ?, + sls := ?, + data := ? //pl_data + } + + + + + + +}//endgroup ASPTemplates + + +} with { encode "RAW" } // end module diff --git a/SCCP_CNL113341/src/SCCPasp_Types.ttcn b/SCCP_CNL113341/src/SCCPasp_Types.ttcn new file mode 100644 index 00000000..c66fa864 --- /dev/null +++ b/SCCP_CNL113341/src/SCCPasp_Types.ttcn @@ -0,0 +1,895 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// Copyright Test Competence Center (TCC) ETH 2006 // +// // +// 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: SCCPasp_Types.ttcn +// Description: SS7 SCCP definitions according to specification +// ITU-T SS7 SCCP, ANSI ..., TCC ... +// References: ITU-T: Recommendation Q.711-Q.714, +// ANSI: T1.112-2001, +// TCC: JT-Q711 - JT-Q714 +// Rev: R6A05 +// Prodnr: CNL 113 341 +// Updated: 2006-01-26 +// Contact: http://ttcn.ericsson.se + +module SCCPasp_Types.objid +{ + itu_t(0) identified_organization (4) etsi(0) reserved(127) + etsi_identified_organization(0) ericsson(5) testing (0) + generic(0) sccp(1) v96(3) aspDefinitions(3) patchNo(0) +} + + +{//startmodule + +//content: the following groups: +//Field Definitions +//ASPParameters +//ASPTypes +//SCCPportTypeDefinitions +//ASPTemplateDefinitionsSending +//ASPTemplateDefinitionsReceiving +//ethlel: 08.23:"reserved" fields removed +//SCCP_PAR_Importance chenged from structure to integer +//type enumerated SCCP_ASPfield_ParameterName removed + +import from General_Types all; + +group FieldDefinitions +{ + +//-------------------------------------------------------------------------------- +// Field Address Indicator (Q713 $3.4.1) +//-------------------------------------------------------------------------------- +type record SCCP_ASPfield_AddressIndicator +{ + BIT1n pointCodeIndic, + BIT1n ssnIndicator, + BIT4n globalTitleIndic, + BIT1n routingIndicator +} + +//-------------------------------------------------------------------------------- +// Subfield Signalling Point Code (Q713 $3.4.2.1) +//-------------------------------------------------------------------------------- +// type changed from BIT14 to bitstring 2003.11.04 baat + + +// supposed that the leading zeros are filled in according to specification +// i.e.: length itu: 16 (2 reserved) +// ansi:24 +// ttc national: 16 (0 spare) + +type bitstring SCCP_ASPfield_SignallingPointCode; + +type union SCCP_ASPfield_GlobalTitle +{ + SCCP_ASPfield_GlobalTitle_NoA gti0001, + SCCP_ASPfield_GlobalTitle_TT gti0010, + SCCP_ASPfield_GlobalTitle_TT_NP_ES gti0011, //ansi: gti=0001 + SCCP_ASPfield_SignallingPointCode_TT_NP_ES_NoA gti0100 + //octetstring gti0000 +} + + +//-------------------------------------------------------------------------------- +// Subfield Global Title, Nature of address only + //ITU: GTI=0001, Q713 $3.4.2.3.1 + //ANSI: - + +type record SCCP_ASPfield_GlobalTitle_NoA +{ + BIT7n natureOfAddress, + BIT1n oddeven, + hexstring globalTitleAddress + //it should be hexstring, number digits are in BCD; + //hexstring already supported by ETH compiler +} + + +//-------------------------------------------------------------------------------- +// Global Title, Translation type only +// ITU: GTI=0010, Q713 $3.4.2.3.2 +// ANSI: GTI=0010, Figure6A/T1.112.3 + +type record SCCP_ASPfield_GlobalTitle_TT +{ + OCT1n translationType, + hexstring globalTitleAddress +} + + +//-------------------------------------------------------------------------------- +// Global Title, Translation type & numbering plan & encoding scheme +// ITU: GTI=0011, Q713 $3.4.2.3.3) +// ANSI GTI=0001, Figure6/T1.112.3 + +type record SCCP_ASPfield_GlobalTitle_TT_NP_ES +{ + OCT1n translationType, + BIT4n encodingScheme, + BIT4n numberingPlan, + hexstring globalTitleAddress +} + + +//-------------------------------------------------------------------------------- +// Global Title, Translation type & numbering plan & encoding scheme & nature of +// address + // GTI=0100, Q713 $3.4.2.3.4) + // ANSI: - + +type record SCCP_ASPfield_SignallingPointCode_TT_NP_ES_NoA +{ + OCT1n translationType, + BIT4n encodingScheme, + BIT4n numberingPlan, + BIT7n natureOfAddress, + hexstring globalTitleAddress +} + + +}//endgroup FieldDefinitions + + + + +//******************************************************************************** +//******************************************************************************** +// ASPDefinitions +//******************************************************************************** +//******************************************************************************** +group ASPParameters +{ +//-------------------------------------------------------------------------------- +// Parameter Address +//-------------------------------------------------------------------------------- + +type record SCCP_PAR_Address +{ + SCCP_ASPfield_AddressIndicator addressIndicator, + SCCP_ASPfield_SignallingPointCode signPointCode optional, + integer subsystemNumber optional, + SCCP_ASPfield_GlobalTitle globalTitle optional +} + +//-------------------------------------------------------------------------------- +// Parameter Quality of service +//-------------------------------------------------------------------------------- + + +type integer SCCP_PAR_Quality_Of_Service; + +//-------------------------------------------------------------------------------- +// Parameter Expedited data selection +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_Expedited_Data_Sel; + +//-------------------------------------------------------------------------------- +// Parameter User Data +//-------------------------------------------------------------------------------- + +//type SCCP_param_Data SCCP_PAR_UserData; + +type octetstring SCCP_PAR_UserData; +// ETHLAFA: type changed from RANAP_PDU to octetstring 020718 + +//-------------------------------------------------------------------------------- +// Parameter Connection Id +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_Connection_Id; + + +//-------------------------------------------------------------------------------- +// Parameter Importance +//-------------------------------------------------------------------------------- + + +type integer SCCP_PAR_Importance; + + +//-------------------------------------------------------------------------------- +// Parameter Originator +//-------------------------------------------------------------------------------- +//Undefined (0) +//SCCP User (or Network Service User-NSU)(1) +//SCCP itself (or Network Service Provider-NSP)(2) + +type integer SCCP_PAR_Originator; + +//-------------------------------------------------------------------------------- +// Parameter Reason +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_Reason; + + +//-------------------------------------------------------------------------------- +// Parameter Return Option +//-------------------------------------------------------------------------------- +//bit0==0-return option off +//bit0==1-return option on + +type BIT8n SCCP_PAR_Return_Option; + + +//-------------------------------------------------------------------------------- +// Parameter Sequence Control +//-------------------------------------------------------------------------------- +//bit0 == 0-sequence control off +//bit0 == 1-sequence control on + +type BIT8n SCCP_PAR_Sequence_Control; + +//-------------------------------------------------------------------------------- +// Parameter Reason For Return +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_Reason_For_Return; + + +//-------------------------------------------------------------------------------- +// Parameter Subsystem Number +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_SubSystemNumber; + +//-------------------------------------------------------------------------------- +// Parameter User Status +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_User_Status; + +//-------------------------------------------------------------------------------- +// Parameter Subsystem Multiplicity Indicator +//-------------------------------------------------------------------------------- + +type integer SCCP_PAR_Subsystem_multi_indicator; + +}//endgroup ASPParameters + +group ASPTypes +{ +//******************************************************************************** +// Network service primitives Q711 +//******************************************************************************** + + +type record ASP_SCCP_N_CONNECT_req +{ + SCCP_PAR_Address calledAddress, + SCCP_PAR_Address callingAddress optional, + SCCP_PAR_Expedited_Data_Sel expeditedDataSel optional, + SCCP_PAR_Quality_Of_Service qualityOfService optional, + SCCP_PAR_UserData userData optional, + SCCP_PAR_Connection_Id connectionId optional, + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_CONNECT_ind +{ + SCCP_PAR_Address calledAddress, + SCCP_PAR_Address callingAddress optional, + SCCP_PAR_Quality_Of_Service qualityOfService optional, + SCCP_PAR_UserData userData optional, + SCCP_PAR_Connection_Id connectionId optional, + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_CONNECT_res +{ + SCCP_PAR_Address respondingAddress optional, + SCCP_PAR_Expedited_Data_Sel expeditedDataSel optional, + SCCP_PAR_Quality_Of_Service qualityOfService optional, + SCCP_PAR_UserData userData optional, + SCCP_PAR_Connection_Id connectionId optional, + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_CONNECT_cfm +{ + SCCP_PAR_Address respondingAddress optional, + SCCP_PAR_Quality_Of_Service qualityOfService optional, + SCCP_PAR_UserData userData optional, + SCCP_PAR_Connection_Id connectionId optional, + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_DATA_req +{ + SCCP_PAR_UserData userData , + SCCP_PAR_Connection_Id connectionId optional , + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_DATA_ind +{ + SCCP_PAR_UserData userData , + SCCP_PAR_Connection_Id connectionId optional , + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_DISCONNECT_req +{ + SCCP_PAR_Address respondingAddress optional, + SCCP_PAR_Reason reason , + SCCP_PAR_UserData userData optional , + SCCP_PAR_Connection_Id connectionId optional , + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_DISCONNECT_ind +{ + SCCP_PAR_Originator originator , + SCCP_PAR_Address respondingAddress optional , + SCCP_PAR_Reason reason , + SCCP_PAR_UserData userData optional , + SCCP_PAR_Connection_Id connectionId optional , + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_UNITDATA_req +{ + SCCP_PAR_Address calledAddress , + SCCP_PAR_Address callingAddress , + SCCP_PAR_Sequence_Control sequenceControl optional , + SCCP_PAR_Return_Option returnOption optional , + SCCP_PAR_UserData userData , + SCCP_PAR_Importance importance optional + } + + +type record ASP_SCCP_N_UNITDATA_ind +{ + SCCP_PAR_Address calledAddress , + SCCP_PAR_Address callingAddress , + SCCP_PAR_Sequence_Control sequenceControl optional , + SCCP_PAR_Return_Option returnOption optional , + SCCP_PAR_UserData userData , + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_NOTICE_ind +{ + SCCP_PAR_Address calledAddress , + SCCP_PAR_Address callingAddress , + SCCP_PAR_Reason_For_Return reasonForReturn , + SCCP_PAR_UserData userData , + SCCP_PAR_Importance importance optional +} + + +type record ASP_SCCP_N_STATE_ind +{ + SCCP_PAR_SubSystemNumber affectedSubSystem , + SCCP_PAR_User_Status userStatus , + SCCP_PAR_Subsystem_multi_indicator subsystmultiindicator optional +} + + + +type record ASP_SCCP_N_RESET_req +{ + SCCP_PAR_Originator originator, //always NSU + SCCP_PAR_Reason reason, + SCCP_PAR_Connection_Id connectionId optional +} + +type record ASP_SCCP_N_RESET_ind +{ + SCCP_PAR_Originator originator, + SCCP_PAR_Reason reason, + SCCP_PAR_Connection_Id connectionId optional +} + +type record ASP_SCCP_N_RESET_resp +{ + SCCP_PAR_Connection_Id connectionId optional +} + +type record ASP_SCCP_N_RESET_cfm +{ + SCCP_PAR_Connection_Id connectionId optional +} + +} //endgroup ASPTypes + + +group SCCP_PT_Definitions +{ +//******************************************************************* +// Port Type definitions +//******************************************************************* + +type port SCCPasp_SP_PT +message +{ + + in ASP_SCCP_N_CONNECT_req, ASP_SCCP_N_CONNECT_res, + ASP_SCCP_N_DATA_req, ASP_SCCP_N_DISCONNECT_req, + ASP_SCCP_N_UNITDATA_req, ASP_SCCP_N_RESET_req, + ASP_SCCP_N_RESET_resp; + + out ASP_SCCP_N_CONNECT_ind, ASP_SCCP_N_CONNECT_cfm, + ASP_SCCP_N_DATA_ind, ASP_SCCP_N_DISCONNECT_ind, + ASP_SCCP_N_UNITDATA_ind, ASP_SCCP_N_NOTICE_ind, + ASP_SCCP_N_STATE_ind, ASP_SCCP_N_RESET_ind, + ASP_SCCP_N_RESET_cfm; + +} with {extension "internal"} + + +type port SCCPasp_PT +message +{ + + in ASP_SCCP_N_CONNECT_ind, ASP_SCCP_N_CONNECT_cfm, + ASP_SCCP_N_DATA_ind, ASP_SCCP_N_DISCONNECT_ind, + ASP_SCCP_N_UNITDATA_ind, ASP_SCCP_N_NOTICE_ind, + ASP_SCCP_N_STATE_ind, ASP_SCCP_N_RESET_ind, + ASP_SCCP_N_RESET_cfm; + + out ASP_SCCP_N_CONNECT_req, ASP_SCCP_N_CONNECT_res, + ASP_SCCP_N_DATA_req, ASP_SCCP_N_DISCONNECT_req, + ASP_SCCP_N_UNITDATA_req, ASP_SCCP_N_RESET_req, + ASP_SCCP_N_RESET_resp; + +} with {extension "internal"} + + + +}// endgroup SCCP_PT_Definitions + + + + +//******************************************************************************** +// ASP Template Definitions +//******************************************************************************** + + +group ASPTemplateDefinitionsSending + + +{ + + +template ASP_SCCP_N_CONNECT_req t_ASP_N_CONNECT_req +( + + template SCCP_PAR_Address PAR_CalledAddress , + template SCCP_PAR_Address PAR_CallingAddress , + template SCCP_PAR_Expedited_Data_Sel PAR_ExpDataSel , + template SCCP_PAR_Quality_Of_Service PAR_QoS , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp +):= + { + calledAddress :=PAR_CalledAddress , + callingAddress :=PAR_CallingAddress , + expeditedDataSel :=PAR_ExpDataSel , + qualityOfService :=PAR_QoS , + userData :=PAR_UserData , + connectionId :=PAR_ConnID , + importance :=PAR_Imp + } + + +template ASP_SCCP_N_CONNECT_ind t_ASP_N_CONNECT_ind +( + template SCCP_PAR_Address PAR_CalledAddress , + template SCCP_PAR_Address PAR_CallingAddress , + template SCCP_PAR_Quality_Of_Service PAR_QoS , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp +):= + { + calledAddress :=PAR_CalledAddress , + callingAddress :=PAR_CallingAddress, + qualityOfService :=PAR_QoS , + userData :=PAR_UserData , + connectionId :=PAR_ConnID , + importance := PAR_Imp + } + + +template ASP_SCCP_N_CONNECT_res t_ASP_N_CONNECT_res +( + + template SCCP_PAR_Address PAR_RespondingAddress , + template SCCP_PAR_Expedited_Data_Sel PAR_ExpDataSel , + template SCCP_PAR_Quality_Of_Service PAR_QoS , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp + +):= + { + respondingAddress:= PAR_RespondingAddress , + expeditedDataSel := PAR_ExpDataSel , + qualityOfService := PAR_QoS , + userData := PAR_UserData , + connectionId := PAR_ConnID , + importance := PAR_Imp + } + + +template ASP_SCCP_N_CONNECT_cfm t_ASP_N_CONNECT_cfm +( + template SCCP_PAR_Address PAR_RespondingAddress , + template SCCP_PAR_Quality_Of_Service PAR_QoS , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp +):= + { + respondingAddress:= PAR_RespondingAddress , + qualityOfService := PAR_QoS , + userData := PAR_UserData , + connectionId := PAR_ConnID , + importance := PAR_Imp + } + + +template ASP_SCCP_N_DATA_req t_ASP_N_DATA_req +( + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp +):= + { + userData := PAR_UserData , + connectionId := PAR_ConnID , + importance := PAR_Imp + } + + +template ASP_SCCP_N_DATA_ind t_ASP_N_DATA_ind +( + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp +):= + { + userData := PAR_UserData , + connectionId := PAR_ConnID , + importance := PAR_Imp + } + + +template ASP_SCCP_N_DISCONNECT_req t_ASP_N_DISCONNECT_req +( + template SCCP_PAR_Address PAR_RespondingAddress , + template SCCP_PAR_Reason PAR_Reason , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp +):= + { + respondingAddress:= PAR_RespondingAddress , + reason := PAR_Reason , + userData := PAR_UserData , + connectionId := PAR_ConnID , + importance := PAR_Imp +} + + +template ASP_SCCP_N_DISCONNECT_ind t_ASP_N_DISCONNECT_ind +( + template SCCP_PAR_Originator PAR_Originator , + template SCCP_PAR_Address PAR_RespondingAddress , + template SCCP_PAR_Reason PAR_Reason , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Connection_Id PAR_ConnID , + template SCCP_PAR_Importance PAR_Imp + +):= + { + originator :=PAR_Originator , + respondingAddress:= PAR_RespondingAddress , + reason := PAR_Reason , + userData := PAR_UserData , + connectionId := PAR_ConnID , + importance := PAR_Imp + } + + + + +template ASP_SCCP_N_UNITDATA_req t_ASP_N_UNITDATA_req +( + +template SCCP_PAR_Address PAR_CalledAddress , +template SCCP_PAR_Address PAR_CallingAddress , +template SCCP_PAR_Sequence_Control PAR_SeqCtrl , +template SCCP_PAR_Return_Option PAR_RetOpt , +template SCCP_PAR_UserData PAR_UserData , +template SCCP_PAR_Importance PAR_Imp +):= + { + calledAddress :=PAR_CalledAddress , + callingAddress :=PAR_CallingAddress, + sequenceControl :=PAR_SeqCtrl , + returnOption :=PAR_RetOpt , + userData :=PAR_UserData , + importance :=PAR_Imp + } + + +template ASP_SCCP_N_UNITDATA_ind t_ASP_N_UNITDATA_ind +( + template SCCP_PAR_Address PAR_CalledAddress , + template SCCP_PAR_Address PAR_CallingAddress , + template SCCP_PAR_Sequence_Control PAR_SeqCtrl , + template SCCP_PAR_Return_Option PAR_RetOpt , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Importance PAR_Imp +):= + { + calledAddress :=PAR_CalledAddress , + callingAddress :=PAR_CallingAddress, + sequenceControl :=PAR_SeqCtrl , + returnOption :=PAR_RetOpt , + userData :=PAR_UserData , + importance :=PAR_Imp + } + + +template ASP_SCCP_N_NOTICE_ind t_ASP_N_NOTICE_ind +( + template SCCP_PAR_Address PAR_CalledAddress , + template SCCP_PAR_Address PAR_CallingAddress , + template SCCP_PAR_Reason_For_Return PAR_ReasForRet , + template SCCP_PAR_UserData PAR_UserData , + template SCCP_PAR_Importance PAR_Imp +):= + { + calledAddress :=PAR_CalledAddress , + callingAddress :=PAR_CallingAddress, + reasonForReturn :=PAR_ReasForRet , + userData :=PAR_UserData , + importance :=PAR_Imp + } + + +template ASP_SCCP_N_STATE_ind t_ASP_N_STATE_ind +( + template SCCP_PAR_SubSystemNumber PAR_SSN , + template SCCP_PAR_User_Status PAR_UserStatus , + template SCCP_PAR_Subsystem_multi_indicator PAR_Smi +):= + { + affectedSubSystem :=PAR_SSN , + userStatus :=PAR_UserStatus , + subsystmultiindicator :=PAR_Smi + } + +template ASP_SCCP_N_RESET_req t_ASP_N_RESET_req +( + template SCCP_PAR_Originator PAR_Originator, + template SCCP_PAR_Reason PAR_Reason, + template SCCP_PAR_Connection_Id PAR_Connection_Id +):= + { + originator :=PAR_Originator, + reason :=PAR_Reason, + connectionId :=PAR_Connection_Id + } + + +template ASP_SCCP_N_RESET_ind t_ASP_N_RESET_ind +( + template SCCP_PAR_Originator PAR_Originator, + template SCCP_PAR_Reason PAR_Reason, + template SCCP_PAR_Connection_Id PAR_Connection_Id +):= + { + originator :=PAR_Originator, + reason :=PAR_Reason, + connectionId :=PAR_Connection_Id + } + +template ASP_SCCP_N_RESET_resp t_ASP_N_RESET_resp +( + template SCCP_PAR_Connection_Id PAR_Connection_Id +):= + { + connectionId :=PAR_Connection_Id + } + +template ASP_SCCP_N_RESET_cfm t_ASP_N_RESET_cfm +( + template SCCP_PAR_Connection_Id PAR_Connection_Id +):= + { + connectionId :=PAR_Connection_Id + } + + + +}//endgroup ASPTemplateDefinitionsSending + +//******************************************************************************** + +group ASPTemplateDefinitionsReceiving + + +{ + + +template ASP_SCCP_N_CONNECT_req tr_ASP_N_CONNECT_req:= +{ + calledAddress :=?, + callingAddress :=*, + expeditedDataSel :=*, + qualityOfService :=*, + userData :=*, + connectionId :=*, + importance :=* +} + + +template ASP_SCCP_N_CONNECT_ind tr_ASP_N_CONNECT_ind:= +{ + calledAddress :=?, + callingAddress :=*, + qualityOfService :=*, + userData :=*, + connectionId :=*, + importance :=* +} + + +template ASP_SCCP_N_CONNECT_res tr_ASP_N_CONNECT_res:= +{ + respondingAddress:= *, + expeditedDataSel := *, + qualityOfService := *, + userData := *, + connectionId := *, + importance := * +} + + +template ASP_SCCP_N_CONNECT_cfm tr_ASP_N_CONNECT_cfm:= +{ + respondingAddress:= *, + qualityOfService := *, + userData := *, + connectionId := *, + importance := * +} + + +template ASP_SCCP_N_DATA_req tr_ASP_N_DATA_req := +{ + userData := ?, + connectionId := *, + importance := * +} + + +template ASP_SCCP_N_DATA_ind tr_ASP_N_DATA_ind:= +{ + userData := ?, + connectionId := *, + importance := * +} + + +template ASP_SCCP_N_DISCONNECT_req tr_ASP_N_DISCONNECT_req:= +{ + respondingAddress:= *, + reason := ?, + userData := *, + connectionId := *, + importance := * +} + + +template ASP_SCCP_N_DISCONNECT_ind tr_ASP_N_DISCONNECT_ind:= +{ + originator := ?, + respondingAddress:= *, + reason := ?, + userData := *, + connectionId := *, + importance := * +} + + + + +template ASP_SCCP_N_UNITDATA_req tr_ASP_N_UNITDATA_req:= +{ + calledAddress :=?, + callingAddress :=?, + sequenceControl :=*, + returnOption :=*, + userData :=?, + importance :=* +} + + +template ASP_SCCP_N_UNITDATA_ind tr_ASP_N_UNITDATA_ind:= +{ + calledAddress :=?, + callingAddress :=?, + sequenceControl :=*, + returnOption :=*, + userData :=?, + importance :=* +} + + +template ASP_SCCP_N_NOTICE_ind tr_ASP_N_NOTICE_ind:= +{ + calledAddress :=?, + callingAddress :=?, + reasonForReturn :=?, + userData :=?, + importance :=* +} + + +template ASP_SCCP_N_STATE_ind tr_ASP_N_STATE_ind:= +{ + affectedSubSystem :=?, + userStatus :=?, + subsystmultiindicator :=* +} + +template ASP_SCCP_N_RESET_req tr_ASP_N_RESET_req:= +{ + originator :=?, + reason :=?, + connectionId :=* +} + + +template ASP_SCCP_N_RESET_ind tr_ASP_N_RESET_ind:= +{ + originator :=?, + reason :=?, + connectionId :=* +} + +template ASP_SCCP_N_RESET_resp tr_ASP_N_RESET_resp:= +{ + connectionId :=* +} + +template ASP_SCCP_N_RESET_cfm tr_ASP_N_RESET_cfm:= +{ + connectionId :=* +} + + + +}//endgroup ASPTemplateDefinitionsReceiving + + + +} //with { encode "RAW"} +//endmodule SCCP ASP types + diff --git a/SCCP_Test/SCCP_Testcases.cfg b/SCCP_Test/SCCP_Testcases.cfg new file mode 100644 index 00000000..ce354862 --- /dev/null +++ b/SCCP_Test/SCCP_Testcases.cfg @@ -0,0 +1,54 @@ +[LOGGING] +#FileName := "SCCP_selftest.cfg" +FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := LOG_ALL +#ConsoleMask := TTCN_TESTCASE | TTCN_PORTEVENT | TTCN_DEBUG | TTCN_MATCHING +#ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT +#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING +LogSourceInfo := Yes + +[EXECUTE] +#SCCP_selftest.tc_ConnlessSendingShortASP +#SCCP_selftest.tc_ConnlessSendingLongASP +#SCCP_selftest.tc_ConnOrientedShortASPSending +#SCCP_Testcases.tc_ConnlessSendingLongASP +SCCP_Testcases.tc_ConnOrientedShortASPSending + +[TESTPORT_PARAMETERS] + +system.sctp.debug := "yes" + +//see documentation (User guide) for the parameters) + + +[MODULE_PARAMETERS] + +M3UA_Emulation.tsp_logVerbose := true; +M3UA_Emulation.tsp_M3UA_Server_Mode := false; +SCCP_Testcases.tsp_address := +{ + local_sctp_port := 2905, + local_ip_addr := "10.6.70.19", + remote_sctp_port := 2905, + remote_ip_addr := "159.107.193.33" +} + + +SCCP_Testcases.tsp_own_GT := '14377760'H +SCCP_Testcases.tsp_remote_GT := '14375760'H +SCCP_Testcases.tsp_SSN := 8 //8:MSC 5:MAP see 3.4.2.2/Q.713 +SCCP_Testcases.tsp_SIO := '83'O //SCCP national +SCCP_Testcases.tsp_own_SPC := 2351 +SCCP_Testcases.tsp_remote_SPC := 2300// max value on 14 bits +SCCP_Testcases.tsp_SLS := 0 +#[tsp_sccp_serviceType := "mtp3_itu" |"mtp3b_itu"|"mtp3_ansi"|"mtp3b_ansi"| "mtp3b_tcc"] +SCCP_Testcases.tsp_sccp_serviceType := "mtp3_ttc" + +#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 : +#tsp_translationType := 7 +SCCP_Emulation.tsp_SIF_MaxLength := 272 +SCCP_Emulation.tsp_force_xudt := 0 // 1:yes, 0:no + +[MAIN_CONTROLLER] +//TCPPort := 7145 +//NumHCs := 1 diff --git a/SCCP_Test/SCCP_Testcases.ttcn b/SCCP_Test/SCCP_Testcases.ttcn new file mode 100644 index 00000000..0cf1c7a0 --- /dev/null +++ b/SCCP_Test/SCCP_Testcases.ttcn @@ -0,0 +1,505 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// +// 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: +// Updated: 2007.04.12 +// Contact: http://ttcn.ericsson.se +// + + + + +//Note : this has been modified to include M3UA Emulation and SCTP Test port +//Elemer Lelik 12.04.2017 + + + +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 + + + SCTP_Association_Address tsp_address := { 0, "", 0, "" }; + +}//modulepar + +import from General_Types all; + +import from M3UA_Types all; +import from M3UA_Emulation 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; + + +import from SCTPasp_Types all; +import from SCTPasp_PortType all; + + + + +/************************************* +* Components +**************************************/ + + +// Model of MSC: +type component system_CT { + + port SCTPasp_PT sctp; + + +}; + + + + +// 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 M3UA_CT vc_M3UA ; + + 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 system_CT +{ + initBootParams(); + log("v_BootA:",v_BootA); + + // Protocol Stack creation & connections: + vc_SCCP_A:=SCCP_CT.create; + vc_M3UA:=M3UA_CT.create; + + connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT); + connect(vc_M3UA:MTP3_SP_PORT,vc_SCCP_A:MTP3_SCCP_PORT); + map(vc_M3UA:SCTP_PORT,system:sctp); + + vc_M3UA.start(f_M3UA_Emulation(tsp_address)); + vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters + + + log( "init() is done"); + +}// init + +function terminate( ) runs on MTC_CT //system system_CT +{ + log( "terminate() started"); + /*while( all component.running != true ) + { + //waits + }*/ + all component.stop; + + unmap(vc_M3UA:SCTP_PORT,system:sctp); + disconnect(vc_M3UA:MTP3_SP_PORT,vc_SCCP_A:MTP3_SCCP_PORT); + 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 system_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; + } + f_SendAndReceive1N_UNITDATA( vl_userdata ); + terminate(); +}//tc_ConnlessSendingLongASP + +/**************************************************** +tc_ConnOrientedShortASPSending +****************************************************/ +testcase tc_ConnOrientedShortASPSending() runs on MTC_CT system system_CT +{ + 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 diff --git a/SCTPasp_CNL113469/SCTPasp_CNL113469.tpd b/SCTPasp_CNL113469/SCTPasp_CNL113469.tpd new file mode 100644 index 00000000..125ad9fc --- /dev/null +++ b/SCTPasp_CNL113469/SCTPasp_CNL113469.tpd @@ -0,0 +1,50 @@ + + + + SCTPasp_CNL113469 + + + + + + + + + + Default + + + + + true + true + true + bin/SCTPasp_CNL113469 + + USE_SCTP + + Level 3 - Creating object files with dependency update + + + bin + + + + + diff --git a/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc new file mode 100644 index 00000000..5923989c Binary files /dev/null and b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc differ diff --git a/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc new file mode 100644 index 00000000..e0c17fef Binary files /dev/null and b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc differ diff --git a/SCTPasp_CNL113469/doc/SCTPasp_FS.pdf b/SCTPasp_CNL113469/doc/SCTPasp_FS.pdf new file mode 100644 index 00000000..0e66447b Binary files /dev/null and b/SCTPasp_CNL113469/doc/SCTPasp_FS.pdf differ diff --git a/SCTPasp_CNL113469/src/SCTPasp_PT.cc b/SCTPasp_CNL113469/src/SCTPasp_PT.cc new file mode 100644 index 00000000..6d7b02b4 --- /dev/null +++ b/SCTPasp_CNL113469/src/SCTPasp_PT.cc @@ -0,0 +1,1549 @@ +/****************************************************************************** +* Copyright (c) 2005, 2014 Ericsson 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 +* +* Contributors: +* Peter Dimitrov- initial implementation and initial documentation +* Adam Delic +* Eduard Czimbalmos +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Tamas Buti +* Zoltan Medve +******************************************************************************/ +// +// File: SCTPasp_PT.cc +// Description: SCTPasp test port source +// Rev: R11A +// Prodnr: CNL 113 469 +// + + +#include "SCTPasp_PT.hh" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFLEN 1024 +#define MAP_LENGTH 10 +#ifdef SCTP_ADAPTION_LAYER + #ifdef LKSCTP_1_0_7 + #undef LKSCTP_1_0_7 + #error LKSCTP_1_0_7 defined but the lksctp older than 1.0.7. Use only -DUSE_SCTP, version is automatically selected + #endif + #ifdef LKSCTP_1_0_9 + #error LKSCTP_1_0_9 defined but the lksctp older than 1.0.7. Use only -DUSE_SCTP, version is automatically selected + #undef LKSCTP_1_0_9 + #endif +#else +// 1.0.7 or newer + #ifdef SCTP_AUTH_CHUNK + // 1.0.9 or newer + #ifdef LKSCTP_1_0_7 + #undef LKSCTP_1_0_7 + #error LKSCTP_1_0_7 defined but the lksctp newer than 1.0.7. Use only -DUSE_SCTP, version is automatically selected + #endif + #ifndef LKSCTP_1_0_9 + #define LKSCTP_1_0_9 + #endif + #else + // 1.0.7 + #ifdef LKSCTP_1_0_9 + #undef LKSCTP_1_0_9 + #error LKSCTP_1_0_9 defined but the lksctp older than 1.0.9. Use only -DUSE_SCTP, version is automatically selected + #endif + #ifndef LKSCTP_1_0_7 + #define LKSCTP_1_0_7 + #endif + + #endif + +#endif + +namespace SCTPasp__PortType { + +struct SCTPasp__PT_PROVIDER::fd_map_item +{ // used by map operations + int fd; // socket descriptor + boolean erased; + boolean processing_message; // if true only part of the message is received + boolean einprogress; // connection establishment is in progress + void * buf; // buffer + ssize_t buflen; // length of the buffer + ssize_t nr; // number of received bytes + struct sockaddr_in sin; // storing remote address +}; + + +struct SCTPasp__PT_PROVIDER::fd_map_server_item // server item +{ // used by map operations + int fd; // socket descriptor + boolean erased; + struct in_addr local_IP_address; + unsigned short local_port; +}; + + +SCTPasp__PT_PROVIDER::SCTPasp__PT_PROVIDER(const char *par_port_name) + : PORT(par_port_name) +{ + simple_mode = FALSE; + reconnect = FALSE; + reconnect_max_attempts = 6; + server_mode = FALSE; + debug = FALSE; + server_backlog = 1; + local_IP_address.s_addr = INADDR_ANY; + (void) memset(&initmsg, 0, sizeof(struct sctp_initmsg)); + initmsg.sinit_num_ostreams = 64; + initmsg.sinit_max_instreams = 64; + initmsg.sinit_max_attempts = 0; + initmsg.sinit_max_init_timeo = 0; + (void) memset(&events, 0, sizeof (events)); + events.sctp_data_io_event = TRUE; + events.sctp_association_event = TRUE; + events.sctp_address_event = TRUE; + events.sctp_send_failure_event = TRUE; + events.sctp_peer_error_event = TRUE; + events.sctp_shutdown_event = TRUE; + events.sctp_partial_delivery_event = TRUE; +#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9) + events.sctp_adaptation_layer_event = TRUE; +#else + events.sctp_adaption_layer_event = TRUE; +#endif + local_port_is_present = FALSE; + peer_IP_address_is_present = FALSE; + peer_port_is_present = FALSE; + + fd_map=NULL; + list_len=0; + + fd_map_server=NULL; + list_len_server=0; + + fd = -1; + FD_ZERO(&readfds); + FD_ZERO(&writefds); + local_port=-1; + peer_port=-1; + receiving_fd=-1; +} + + +SCTPasp__PT_PROVIDER::~SCTPasp__PT_PROVIDER() +{ + for(int i=0;i=0) ) + reconnect_max_attempts = value; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "server_mode") == 0) + { + if (strcasecmp(parameter_value,"yes") == 0) + server_mode = TRUE; + else if(strcasecmp(parameter_value,"no") == 0) + server_mode = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only yes and no can be used!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "debug") == 0) + { + if (strcasecmp(parameter_value,"yes") == 0) + debug = TRUE; + else if(strcasecmp(parameter_value,"no") == 0) + debug = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. Only yes and no can be used!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "server_backlog") == 0) + { + int value; + if ( (sscanf(parameter_value, "%d", &value) == 1) && (value>=0) ) + server_backlog = value; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "local_IP_address") == 0) + { + local_IP_address = get_in_addr((const char *) parameter_value); + } + else if(strcmp(parameter_name, "local_port") == 0) + { + unsigned short value; + if (sscanf(parameter_value, "%hu", &value) == 1) + { + local_port = value; + local_port_is_present = TRUE; + } + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "peer_IP_address") == 0) + { + peer_IP_address = get_in_addr((const char *) parameter_value); + peer_IP_address_is_present = TRUE; + } + else if(strcmp(parameter_name, "peer_port") == 0) + { + unsigned short value; + if (sscanf(parameter_value, "%hu", &value) == 1) + { + peer_port = value; + peer_port_is_present = TRUE; + } + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sinit_num_ostreams") == 0) + { + long value; + if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) ) + initmsg.sinit_num_ostreams = value; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sinit_max_instreams") == 0) + { + long value; + if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) ) + initmsg.sinit_max_instreams = value; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sinit_max_attempts") == 0) + { + long value; + if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) ) + initmsg.sinit_max_attempts = value; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sinit_max_init_timeo") == 0) + { + long value; + if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) ) + initmsg.sinit_max_init_timeo = value; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_association_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) + events.sctp_association_event = TRUE; + else if(strcasecmp(parameter_value,"disabled") == 0) + events.sctp_association_event = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_address_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) + events.sctp_address_event = TRUE; + else if(strcasecmp(parameter_value,"disabled") == 0) + events.sctp_address_event = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_send_failure_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) + events.sctp_send_failure_event = TRUE; + else if(strcasecmp(parameter_value,"disabled") == 0) + events.sctp_send_failure_event = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_peer_error_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) + events.sctp_peer_error_event = TRUE; + else if(strcasecmp(parameter_value,"disabled") == 0) + events.sctp_peer_error_event = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_shutdown_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) + events.sctp_shutdown_event = TRUE; + else if(strcasecmp(parameter_value,"disabled") == 0) + events.sctp_shutdown_event = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_partial_delivery_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) + events.sctp_partial_delivery_event = TRUE; + else if(strcasecmp(parameter_value,"disabled") == 0) + events.sctp_partial_delivery_event = FALSE; + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else if(strcmp(parameter_name, "sctp_adaption_layer_event") == 0) + { + if (strcasecmp(parameter_value,"enabled") == 0) +#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9) + events.sctp_adaptation_layer_event = TRUE; +#else + events.sctp_adaption_layer_event = TRUE; +#endif + else if(strcasecmp(parameter_value,"disabled") == 0) +#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9) + events.sctp_adaptation_layer_event = FALSE; +#else + events.sctp_adaption_layer_event = FALSE; +#endif + else + error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" , + parameter_value, parameter_name); + } + else + TTCN_warning("%s: unknown & unhandled parameter: %s", + get_name(), parameter_name); + errno = 0; +} + + +void SCTPasp__PT_PROVIDER::Event_Handler(const fd_set *read_fds, + const fd_set *write_fds, const fd_set */*error_fds*/, + double /*time_since_last_call*/) +{ + // Accepting new client + if(!simple_mode) + { + for(int i=0;isinfo_ppid); + INTEGER i_ppid; + if (ui <= (unsigned long)INT_MAX) + i_ppid = ui; + else { + char sbuf[16]; + sprintf(sbuf, "%u", ui); + i_ppid = INTEGER(sbuf); + } + incoming_message(SCTPasp__Types::ASP__SCTP( + INTEGER(receiving_fd), + INTEGER(sri->sinfo_stream), + i_ppid, + OCTETSTRING(fd_map[i].nr,(const unsigned char *)fd_map[i].buf))); + } + Free(fd_map[i].buf); + fd_map[i].buf = NULL; + break; + case PARTIAL_RECEIVE: + fd_map[i].processing_message = TRUE; + break; + case EOF_OR_ERROR: + if (!server_mode) fd = -1; // setting closed socket to -1 in client mode (and reconnect mode) + FD_CLR(receiving_fd, &readfds); + Install_Handler(&readfds, NULL, NULL, 0.0); + map_delete_item(i); + if (events.sctp_association_event) incoming_message(SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE( + INTEGER(receiving_fd), + SCTPasp__Types::SAC__STATE(SCTP_COMM_LOST))); + log("getmsg() returned with NULL. Socket is closed."); + if (reconnect) forced_reconnect(reconnect_max_attempts); + + break; + }//endswitch + }// endif + }// endfor +} + + +void SCTPasp__PT_PROVIDER::user_map(const char *system_port) +{ + log("Calling user_map(%s).",system_port); + if(simple_mode) + { + if ( server_mode && reconnect ) + { + error("user_map(): server mode and reconnect mode are mutually exclusive!"); + } + if ( server_mode && !local_port_is_present ) + { + error("user_map(): in server mode local_port must be defined!"); + } + + // Server mode: turns on listening + if (server_mode) + { + log("Running in SERVER_MODE."); + create_socket(); + if (listen(fd, server_backlog) == -1) error("Listen error!"); + log("Listening @ (%s):(%d)", inet_ntoa(local_IP_address), local_port); + FD_SET(fd, &readfds); + Install_Handler(&readfds, NULL, NULL, 0.0); + } else if (reconnect) { + log("Running in RECONNECT MODE."); + forced_reconnect(reconnect_max_attempts+1); + } else { + log("Running in CLIENT MODE."); + } + } + else + { + log("Running in NORMAL MODE."); + } + log("Leaving user_map()."); +} + + +void SCTPasp__PT_PROVIDER::user_unmap(const char *system_port) +{ + log("Calling user_unmap(%s).",system_port); + Uninstall_Handler(); + FD_ZERO(&readfds); + FD_ZERO(&writefds); + if(!simple_mode) + { + for(int i=0;icmsg_len = sizeof (*cmsg) + sizeof (*sri); + cmsg->cmsg_level = IPPROTO_SCTP; + cmsg->cmsg_type = SCTP_SNDRCV; + + sri->sinfo_stream = (int) send_par.sinfo__stream(); + + int target; + if(!simple_mode) + { + if (!send_par.client__id().ispresent()) + error("In NORMAL mode the client_id field of ASP_SCTP should be set to a valid value and not to omit!"); + target = (int) (const INTEGER&) send_par.client__id(); + if ( (map_get_item(target)==-1) && (map_get_item_server(target)==-1)) error("Bad client id! %d",target); + } + else + { + if (server_mode) + { + if (!send_par.client__id().ispresent()) + error("In server mode the client_id field of ASP_SCTP should be set to a valid value and not to omit!"); + } + else // client mode + { + if (send_par.client__id().ispresent()) + error("In client mode the client_id field of ASP_SCTP should be set to OMIT!"); + } + target = fd; + if (server_mode) + target = (int) (const INTEGER&) send_par.client__id(); + if (map_get_item(target)==-1) error("Bad client id! %d",target); + } + + uint32_t ui; + if (send_par.sinfo__ppid().get_val().is_native() && send_par.sinfo__ppid() > 0) + ui = (int)send_par.sinfo__ppid(); + else { + OCTETSTRING os = int2oct(send_par.sinfo__ppid(), 4); + unsigned char* p = (unsigned char*)&ui; + *(p++) = os[3].get_octet(); + *(p++) = os[2].get_octet(); + *(p++) = os[1].get_octet(); + *(p++) = os[0].get_octet(); + } + sri->sinfo_ppid = htonl(ui); + + log("Sending SCTP message to file descriptor %d.", target); + if (sendmsg(target, &msg, 0) < 0) + { + SCTPasp__Types::ASP__SCTP__SENDMSG__ERROR asp_sctp_sendmsg_error; + if (server_mode) asp_sctp_sendmsg_error.client__id() = target; + else asp_sctp_sendmsg_error.client__id() = OMIT_VALUE; + asp_sctp_sendmsg_error.sinfo__stream() = send_par.sinfo__stream(); + asp_sctp_sendmsg_error.sinfo__ppid() = send_par.sinfo__ppid(); + asp_sctp_sendmsg_error.data() = send_par.data(); + incoming_message(asp_sctp_sendmsg_error); + TTCN_warning("Sendmsg error! Strerror=%s", strerror(errno)); + + errno = 0; + } + log("Leaving outgoing_send (ASP_SCTP)."); +} + + +SCTPasp__PT_PROVIDER::return_value_t SCTPasp__PT_PROVIDER::getmsg(int fd, struct msghdr *msg) +{ + log("Calling getmsg()."); + int index = map_get_item(fd); + if ( !fd_map[index].processing_message ) fd_map[index].nr = 0; + + ssize_t value = recvmsg(fd, msg, 0); + if (value <= 0) // EOF or error + { + log("Leaving getmsg(): EOF or error."); + errno = 0; + return EOF_OR_ERROR; + } + fd_map[index].nr += value; + log("getmsg(): [%d] bytes received. Receiving buffer now has [%d] bytes.", value, fd_map[index].nr); + // Whole message is received, return it. + if (msg->msg_flags & MSG_EOR) + { + log("Leaving getmsg(): whole message is received."); + return WHOLE_MESSAGE_RECEIVED; + } + + // Maybe we need a bigger buffer, do realloc(). + if (fd_map[index].buflen == fd_map[index].nr) + { + log("getmsg(): resizing receiving buffer: [%d] bytes -> [%d] bytes", + fd_map[index].buflen, (fd_map[index].buflen * 2)); + fd_map[index].buf = Realloc(fd_map[index].buf, fd_map[index].buflen * 2); + fd_map[index].buflen *= 2; + } + log("Leaving getmsg(): part of the message is received."); + return PARTIAL_RECEIVE; +} + + +void SCTPasp__PT_PROVIDER::handle_event(void *buf) +{ + union sctp_notification *snp; + snp = (sctp_notification *)buf; + switch (snp->sn_header.sn_type) + { + case SCTP_ASSOC_CHANGE: + { + log("incoming SCTP_ASSOC_CHANGE event."); + struct sctp_assoc_change *sac; + sac = &snp->sn_assoc_change; + +// #ifdef LKSCTP_1_0_7 + SCTPasp__Types::SAC__STATE sac_state_ttcn; + switch(sac->sac_state) + { + case SCTP_COMM_UP: + sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__COMM__UP; + break; + + case SCTP_COMM_LOST: + sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__COMM__LOST; + break; + + case SCTP_RESTART: + sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__RESTART; + break; + + case SCTP_SHUTDOWN_COMP: + sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__SHUTDOWN__COMP; + break; + + case SCTP_CANT_STR_ASSOC: + sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__CANT__STR__ASSOC; + break; + + default: + sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__UNKNOWN__SAC__STATE; + TTCN_warning("Unexpected sac_state value received %d", sac->sac_state); + break; + } +// #endif + + if(sac->sac_state == SCTP_COMM_LOST) + { + if(simple_mode) + { + if (!server_mode) fd = -1; // setting closed socket to -1 in client mode (and reconnect mode) + FD_CLR(receiving_fd, &readfds); + Install_Handler(&readfds, NULL, NULL, 0.0); + map_delete_item_fd(receiving_fd); + } + else + { + FD_CLR(receiving_fd, &readfds); + Install_Handler(&readfds, NULL, NULL, 0.0); + map_delete_item_fd(receiving_fd); + map_delete_item_fd_server(receiving_fd); + } + } + if (events.sctp_association_event) incoming_message(SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE( + INTEGER(receiving_fd), + sac_state_ttcn + )); + + if(simple_mode) + { + if (reconnect && (sac->sac_state == SCTP_COMM_LOST) ) forced_reconnect(reconnect_max_attempts); + } + break; + } + case SCTP_PEER_ADDR_CHANGE:{ + log("incoming SCTP_PEER_ADDR_CHANGE event."); + struct sctp_paddr_change *spc; + spc = &snp->sn_paddr_change; +// #ifdef LKSCTP_1_0_7 + SCTPasp__Types::SPC__STATE spc_state_ttcn; + switch(spc->spc_state) + { + case SCTP_ADDR_AVAILABLE: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__AVAILABLE; + break; + + case SCTP_ADDR_UNREACHABLE: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__UNREACHABLE; + break; + + case SCTP_ADDR_REMOVED: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__REMOVED; + break; + + case SCTP_ADDR_ADDED: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__ADDED; + break; + + case SCTP_ADDR_MADE_PRIM: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__MADE__PRIM; + break; +#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9) + case SCTP_ADDR_CONFIRMED: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__CONFIRMED; + break; +#endif + default: + spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__UNKNOWN__SPC__STATE; + TTCN_warning("Unexpected spc_state value received %d", spc->spc_state); + break; + } +// #endif + if (events.sctp_address_event) incoming_message(SCTPasp__Types::ASP__SCTP__PEER__ADDR__CHANGE( + INTEGER(receiving_fd), + spc_state_ttcn + )); + break; + } + case SCTP_REMOTE_ERROR: + log("incoming SCTP_REMOTE_ERROR event."); + //struct sctp_remote_error *sre; + //sre = &snp->sn_remote_error; + if (events.sctp_peer_error_event) incoming_message(SCTPasp__Types::ASP__SCTP__REMOTE__ERROR(INTEGER(receiving_fd))); + break; + case SCTP_SEND_FAILED: + log("incoming SCTP_SEND_FAILED event."); + //struct sctp_send_failed *ssf; + //ssf = &snp->sn_send_failed; + if (events.sctp_send_failure_event) incoming_message(SCTPasp__Types::ASP__SCTP__SEND__FAILED(INTEGER(receiving_fd))); + break; + case SCTP_SHUTDOWN_EVENT: + log("incoming SCTP_SHUTDOWN_EVENT event."); + //struct sctp_shutdown_event *sse; + //sse = &snp->sn_shutdown_event; + if (events.sctp_shutdown_event) incoming_message(SCTPasp__Types::ASP__SCTP__SHUTDOWN__EVENT(INTEGER(receiving_fd))); + break; +#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9) + case SCTP_ADAPTATION_INDICATION: + log("incoming SCTP_ADAPTION_INDICATION event."); + //struct sctp_adaptation_event *sai; + //sai = &snp->sn_adaptation_event; + if (events.sctp_adaptation_layer_event) incoming_message(SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION(INTEGER(receiving_fd))); + break; +#else + case SCTP_ADAPTION_INDICATION: + log("incoming SCTP_ADAPTION_INDICATION event."); + //struct sctp_adaption_event *sai; + //sai = &snp->sn_adaption_event; + if (events.sctp_adaption_layer_event) incoming_message(SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION(INTEGER(receiving_fd))); + break; +#endif + case SCTP_PARTIAL_DELIVERY_EVENT: + log("incoming SCTP_PARTIAL_DELIVERY_EVENT event."); + //struct sctp_pdapi_event *pdapi; + //pdapi = &snp->sn_pdapi_event; + if (events.sctp_partial_delivery_event) incoming_message(SCTPasp__Types::ASP__SCTP__PARTIAL__DELIVERY__EVENT(INTEGER(receiving_fd))); + break; + default: + TTCN_warning("Unknown notification type!"); + break; + } +} + + +void SCTPasp__PT_PROVIDER::log(const char *fmt, ...) +{ + if(debug) + { + va_list ap; + va_start(ap, fmt); + TTCN_Logger::begin_event(TTCN_DEBUG); + TTCN_Logger::log_event("SCTPasp Test Port (%s): ", get_name()); + TTCN_Logger::log_event_va_list(fmt, ap); + TTCN_Logger::end_event(); + va_end(ap); + + } +} + + +void SCTPasp__PT_PROVIDER::error(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + TTCN_Logger::begin_event(TTCN_ERROR); + TTCN_Logger::log_event("SCTPasp Test Port (%s): ", get_name()); + TTCN_Logger::log_event_va_list(fmt, ap); + TTCN_Logger::end_event(); + va_end(ap); + TTCN_error("Fatal error in SCTPasp Test Port %s (see above).", get_name()); +} + + +void SCTPasp__PT_PROVIDER::forced_reconnect(int attempts) +{ + struct sockaddr_in sin; + sin.sin_family = AF_INET; + sin.sin_port = htons(peer_port); + sin.sin_addr.s_addr = peer_IP_address.s_addr; + log("[reconnect] Connecting to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port); + unsigned int sleep_interval = 1; + int i; + for(i = 0; i < attempts; i++) + { + create_socket(); + if (connect(fd, (struct sockaddr *)&sin, sizeof (sin)) == -1) + { + close(fd); + fd = -1; + TTCN_warning("Connect error!"); + errno = 0; + if( ((i % 2 ) == 0) && (i != 0)) sleep_interval *= 2; + sleep(sleep_interval); + + } + else + { + map_put_item(fd); + setNonBlocking(fd); + FD_SET(fd, &readfds); + Install_Handler(&readfds, NULL, NULL, 0.0); + log("[reconnect] Connection successfully established to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port); + break; + } + } + if (i == attempts) error("Forced reconnect failed! Remote end is unreachable!"); + +} + + +void SCTPasp__PT_PROVIDER::map_put_item(int fd) +{ + int i=0; + while((i=list_len) || (index<0)) error("map_delete_item: index out of range (0-%d): %d",list_len-1,index); + + if(fd_map[index].fd!=-1) close(fd_map[index].fd); + fd_map[index].fd=-1; + fd_map[index].erased=TRUE; + fd_map[index].einprogress=FALSE; + if(fd_map[index].buf) Free(fd_map[index].buf); + fd_map[index].buf=NULL; + fd_map[index].buflen=0; + fd_map[index].processing_message=FALSE; + fd_map[index].nr=0; + fd_map[index].sin.sin_family=AF_INET; + fd_map[index].sin.sin_port=0; + fd_map[index].sin.sin_addr.s_addr=0; +} + + +void SCTPasp__PT_PROVIDER::map_put_item_server(int fd, struct in_addr local_IP_address, unsigned short local_port) +{ + int i=0; + while((i=list_len_server) || (index<0)) error("map_delete_item: index out of range (0-%d): %d",list_len_server-1,index); + + if(fd_map_server[index].fd!=-1) close(fd_map_server[index].fd); + fd_map_server[index].fd=-1; + fd_map_server[index].erased=TRUE; + fd_map_server[index].local_IP_address.s_addr = INADDR_ANY; + fd_map_server[index].local_port = 0; +} + + +void SCTPasp__PT_PROVIDER::create_socket() +{ + struct sockaddr_in sin; + + log("Creating SCTP socket."); + if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1) + error("Socket error: cannot create socket!"); + + if ( local_port_is_present ) { + sin.sin_family = AF_INET; + sin.sin_port = htons(local_port); + sin.sin_addr.s_addr = local_IP_address.s_addr; + log("Binding SCTP socket: bind address (%s):(%d)", + inet_ntoa(local_IP_address),local_port); + if (bind(fd, (struct sockaddr *)&sin, sizeof (sin)) == -1) + { + close(fd); + fd = -1; + error("Bind error!"); + } + } + + log("Setting SCTP socket options (initmsg)."); + if (setsockopt(fd, IPPROTO_SCTP, SCTP_INITMSG, &initmsg, + sizeof(struct sctp_initmsg)) < 0) + { + TTCN_warning("Setsockopt error!"); + errno = 0; + } + + log("Setting SCTP socket options (events)."); + if (setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &events, sizeof (events)) < 0) + { + TTCN_warning("Setsockopt error!"); + errno = 0; + } +} + + +in_addr SCTPasp__PT_PROVIDER::get_in_addr(const char *hostname) +{ + struct hostent *h; + if ((h=gethostbyname(hostname)) == NULL) + error("Gethostbyname error!"); + if(h->h_addr == NULL) error("Gethostbyname error! h->h_addr is NULL!"); + return *((struct in_addr *)h->h_addr); +} + +void SCTPasp__PT_PROVIDER::setNonBlocking(int fd) +{ + int flags = fcntl(fd, F_GETFL); + flags |= O_NONBLOCK; + int result = fcntl(fd, F_SETFL, flags); + if (result==-1) error("SCTPasp__PT::setNonBlocking(): Fcntl() error!"); +} + + +} diff --git a/SCTPasp_CNL113469/src/SCTPasp_PT.hh b/SCTPasp_CNL113469/src/SCTPasp_PT.hh new file mode 100644 index 00000000..7d6311d3 --- /dev/null +++ b/SCTPasp_CNL113469/src/SCTPasp_PT.hh @@ -0,0 +1,157 @@ +/****************************************************************************** +* Copyright (c) 2005, 2014 Ericsson 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 +* +* Contributors: +* Peter Dimitrov- initial implementation and initial documentation +* Adam Delic +* Eduard Czimbalmos +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Tamas Buti +* Zoltan Medve +******************************************************************************/ +// +// File: SCTPasp_PT.hh +// Description: SCTPasp test port header +// Rev: R11A +// Prodnr: CNL 113 469 +// + + +#ifndef SCTPasp__PT_HH +#define SCTPasp__PT_HH + +#include +#include "SCTPasp_Types.hh" +#include +#include +#include + +namespace SCTPasp__Types { + class ASP__SCTP; + class ASP__SCTP__Connect; + class ASP__SCTP__ConnectFrom; + class ASP__SCTP__Listen; + + class SCTP__INIT; + class SCTP__EVENTS; + class SO__LINGER; + class SCTP__RTOINFO; + class SAC__STATE; + class SPC__STATE; + + class ASP__SCTP__SetSocketOptions; + class ASP__SCTP__Close; + class ASP__SCTP__ASSOC__CHANGE; + class ASP__SCTP__PEER__ADDR__CHANGE; + class ASP__SCTP__SEND__FAILED; + class ASP__SCTP__REMOTE__ERROR; + class ASP__SCTP__SHUTDOWN__EVENT; + class ASP__SCTP__PARTIAL__DELIVERY__EVENT; + class ASP__SCTP__ADAPTION__INDICATION; + class ASP__SCTP__Connected; + class ASP__SCTP__SENDMSG__ERROR; + class ASP__SCTP__RESULT; +} + +namespace SCTPasp__PortType { +class SCTPasp__PT_PROVIDER : public PORT { +public: + SCTPasp__PT_PROVIDER(const char *par_port_name = NULL); + ~SCTPasp__PT_PROVIDER(); + + void set_parameter(const char *parameter_name, + const char *parameter_value); + + void Event_Handler(const fd_set *read_fds, + const fd_set *write_fds, const fd_set *error_fds, + double time_since_last_call); + +protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + void outgoing_send(const SCTPasp__Types::ASP__SCTP__Connect& send_par); + void outgoing_send(const SCTPasp__Types::ASP__SCTP__ConnectFrom& send_par); + void outgoing_send(const SCTPasp__Types::ASP__SCTP__Listen& send_par); + void outgoing_send(const SCTPasp__Types::ASP__SCTP__SetSocketOptions& send_par); + void outgoing_send(const SCTPasp__Types::ASP__SCTP__Close& send_par); + void outgoing_send(const SCTPasp__Types::ASP__SCTP& send_par); + + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__PEER__ADDR__CHANGE& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SEND__FAILED& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__REMOTE__ERROR& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SHUTDOWN__EVENT& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__PARTIAL__DELIVERY__EVENT& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__Connected& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SENDMSG__ERROR& incoming_par) = 0; + virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__RESULT& incoming_par) = 0; + +private: + enum return_value_t { WHOLE_MESSAGE_RECEIVED, PARTIAL_RECEIVE, EOF_OR_ERROR }; + return_value_t getmsg(int fd, struct msghdr *msg); + void handle_event(void *buf); + void log(const char *fmt, ...); + void error(const char *fmt, ...); + void handle_event_reconnect(void *buf); + void forced_reconnect(int attempts); + // map operations + void map_put_item(int fd); + int map_get_item(int fd); + void map_delete_item_fd(int fd); + void map_delete_item(int index); + + void map_put_item_server(int fd, struct in_addr local_IP_address, unsigned short local_port); + int map_get_item_server(int fd); + void map_delete_item_fd_server(int fd); + void map_delete_item_server(int index); + + void create_socket(); + in_addr get_in_addr(const char *hostname); + void setNonBlocking(int fd); + + boolean simple_mode; + boolean reconnect; + int reconnect_max_attempts; + boolean server_mode; + boolean debug; + int server_backlog; + struct in_addr local_IP_address; + struct in_addr peer_IP_address; + unsigned short local_port; + unsigned short peer_port; + + struct sctp_event_subscribe events; + struct sctp_initmsg initmsg; + + boolean local_port_is_present; + boolean peer_IP_address_is_present; + boolean peer_port_is_present; + + int fd; + fd_set readfds, writefds; + int receiving_fd; + + struct fd_map_item; + fd_map_item *fd_map; + int list_len; + + struct fd_map_server_item; + fd_map_server_item *fd_map_server; + int list_len_server; + + +}; +} +#endif diff --git a/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn b/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn new file mode 100644 index 00000000..27aae086 --- /dev/null +++ b/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** +* Copyright (c) 2005, 2014 Ericsson 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 +* +* Contributors: +* Peter Dimitrov- initial implementation and initial documentation +* Adam Delic +* Eduard Czimbalmos +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Tamas Buti +* Zoltan Medve +******************************************************************************/ +// +// File: SCTPasp_PortType.ttcn +// Description: SCTPasp testport definition file +// Rev: R11A +// Prodnr: CNL 113 469 +// + +module SCTPasp_PortType +{ + +import from SCTPasp_Types all; + +//========================================================================= +//Port Types +//========================================================================= + +type port SCTPasp_PT message +{ + inout ASP_SCTP; + + out ASP_SCTP_Connect; + out ASP_SCTP_ConnectFrom; + out ASP_SCTP_Listen; + out ASP_SCTP_SetSocketOptions; + out ASP_SCTP_Close; + + in ASP_SCTP_ASSOC_CHANGE; + in ASP_SCTP_PEER_ADDR_CHANGE; + in ASP_SCTP_SEND_FAILED; + in ASP_SCTP_REMOTE_ERROR; + in ASP_SCTP_SHUTDOWN_EVENT; + in ASP_SCTP_PARTIAL_DELIVERY_EVENT; + in ASP_SCTP_ADAPTION_INDICATION; + + in ASP_SCTP_Connected; + in ASP_SCTP_SENDMSG_ERROR; + in ASP_SCTP_RESULT; + +} with { extension "provider" } + +}//end of module +with { +extension "version R11A" +} + diff --git a/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn b/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn new file mode 100644 index 00000000..f10fc588 --- /dev/null +++ b/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn @@ -0,0 +1,201 @@ +/****************************************************************************** +* Copyright (c) 2005, 2014 Ericsson 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 +* +* Contributors: +* Peter Dimitrov- initial implementation and initial documentation +* Adam Delic +* Eduard Czimbalmos +* Endre Kulcsar +* Gabor Bettesch +* Gabor Szalai +* Tamas Buti +* Zoltan Medve +******************************************************************************/ +// +// File: SCTPasp_Types.ttcn +// Description: SCTP ASP definition file +// Rev: R11A +// Prodnr: CNL 113 469 +// + + +module SCTPasp_Types +{ + +//========================================================================= +// Data Types +//========================================================================= + +type octetstring PDU_SCTP; + +type record ASP_SCTP +{ + integer client_id optional, + integer sinfo_stream, + integer sinfo_ppid, + PDU_SCTP data +} + + +type record ASP_SCTP_Connect +{ + charstring peer_hostname optional, + integer peer_portnumber (1..65535) optional +} + + +type record ASP_SCTP_ConnectFrom +{ + charstring local_hostname optional, + integer local_portnumber (1..65535), + charstring peer_hostname optional, + integer peer_portnumber (1..65535) optional +} + + +type record ASP_SCTP_Listen +{ + charstring local_hostname optional, + integer local_portnumber (1..65535) +} + + +type record SCTP_INIT +{ + integer sinit_num_ostreams, + integer sinit_max_instreams, + integer sinit_max_attempts, + integer sinit_max_init_timeo +} + +type record SCTP_EVENTS +{ + boolean sctp_data_io_event, + boolean sctp_association_event, + boolean sctp_address_event, + boolean sctp_send_failure_event, + boolean sctp_peer_error_event, + boolean sctp_shutdown_event, + boolean sctp_partial_delivery_event, + boolean sctp_adaption_layer_event +} + +type record SO_LINGER +{ + integer l_onoff, + integer l_linger +} + +type record SCTP_RTOINFO +{ + integer client_id, + integer srto_initial, + integer srto_max, + integer srto_min +} + +type union ASP_SCTP_SetSocketOptions +{ + SCTP_INIT Sctp_init, + SCTP_EVENTS Sctp_events, + SO_LINGER So_linger, + SCTP_RTOINFO Sctp_rtoinfo +} + + +type record ASP_SCTP_Close +{ + integer client_id optional +} + + +type enumerated SAC_STATE +{ + SCTP_COMM_UP, SCTP_COMM_LOST, SCTP_RESTART, + SCTP_SHUTDOWN_COMP, SCTP_CANT_STR_ASSOC, SCTP_UNKNOWN_SAC_STATE +} + +type record ASP_SCTP_ASSOC_CHANGE +{ + integer client_id, + SAC_STATE sac_state +} + + +type enumerated SPC_STATE +{ + SCTP_ADDR_AVAILABLE, SCTP_ADDR_UNREACHABLE, SCTP_ADDR_REMOVED, + SCTP_ADDR_ADDED, SCTP_ADDR_MADE_PRIM, SCTP_ADDR_CONFIRMED, SCTP_UNKNOWN_SPC_STATE +} + +type record ASP_SCTP_PEER_ADDR_CHANGE +{ + integer client_id, + SPC_STATE spc_state +} + + +type record ASP_SCTP_SEND_FAILED +{ + integer client_id +} + + +type record ASP_SCTP_REMOTE_ERROR +{ + integer client_id +} + + +type record ASP_SCTP_SHUTDOWN_EVENT +{ + integer client_id +} + + +type record ASP_SCTP_PARTIAL_DELIVERY_EVENT +{ + integer client_id +} + + +type record ASP_SCTP_ADAPTION_INDICATION +{ + integer client_id +} + + +type record ASP_SCTP_Connected +{ + integer client_id, + charstring local_hostname, + integer local_portnumber (1..65535), + charstring peer_hostname, + integer peer_portnumber (1..65535) +} + + +type record ASP_SCTP_SENDMSG_ERROR +{ + integer client_id optional, + integer sinfo_stream, + integer sinfo_ppid, + PDU_SCTP data +} + +type record ASP_SCTP_RESULT +{ + integer client_id optional, + boolean error_status, + charstring error_message optional +} + +}//end of module +with { +extension "version R11A" +} + diff --git a/bin/General_Types.ttcn b/bin/General_Types.ttcn new file mode 120000 index 00000000..206f0e35 --- /dev/null +++ b/bin/General_Types.ttcn @@ -0,0 +1 @@ +../COMMON/src/General_Types.ttcn \ No newline at end of file diff --git a/bin/M3UA_Emulation.ttcn b/bin/M3UA_Emulation.ttcn new file mode 120000 index 00000000..920cdcf9 --- /dev/null +++ b/bin/M3UA_Emulation.ttcn @@ -0,0 +1 @@ +../M3UA_CNL113537/src/M3UA_Emulation.ttcn \ No newline at end of file diff --git a/bin/M3UA_Types.ttcn b/bin/M3UA_Types.ttcn new file mode 120000 index 00000000..3b60f723 --- /dev/null +++ b/bin/M3UA_Types.ttcn @@ -0,0 +1 @@ +../M3UA_CNL113536/src/M3UA_Types.ttcn \ No newline at end of file diff --git a/bin/MTP3asp_PortType.ttcn b/bin/MTP3asp_PortType.ttcn new file mode 120000 index 00000000..9f2cae65 --- /dev/null +++ b/bin/MTP3asp_PortType.ttcn @@ -0,0 +1 @@ +../MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn \ No newline at end of file diff --git a/bin/MTP3asp_Types.ttcn b/bin/MTP3asp_Types.ttcn new file mode 120000 index 00000000..ef67545f --- /dev/null +++ b/bin/MTP3asp_Types.ttcn @@ -0,0 +1 @@ +../MTP3asp_CNL113337/src/MTP3asp_Types.ttcn \ No newline at end of file diff --git a/bin/Makefile b/bin/Makefile new file mode 100644 index 00000000..120c4ec4 --- /dev/null +++ b/bin/Makefile @@ -0,0 +1,190 @@ +# This Makefile was generated by the Makefile Generator +# of the TTCN-3 Test Executor version CRL 113 200/6 R1A +# for Elemer Lelik (ethlel@esekilxxen1846) on Wed Apr 12 09:00:44 2017 + +# Copyright (c) 2000-2017 Ericsson Telecom AB + +# The following make commands are available: +# - make, make all Builds the executable test suite. +# - make archive Archives all source files. +# - make check Checks the semantics of TTCN-3 and ASN.1modules. +# - make port Generates port skeletons. +# - make clean Removes all generated files. +# - make compile Translates TTCN-3 and ASN.1 modules to C++. +# - make dep Creates/updates dependency list. +# - make executable Builds the executable test suite. +# - make library Builds the library archive. +# - make objects Builds the object files without linking the executable. +# +# Set these variables... +# + +# The path of your TTCN-3 Test Executor installation: +# Uncomment this line to override the environment variable. +# TTCN3_DIR = + +# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32) +PLATFORM = LINUX + +# Your C++ compiler: +# (if you change the platform, you may need to change the compiler) +CXX = g++ + +# Flags for the C++ preprocessor (and makedepend as well): +CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include + +# Flags for the C++ compiler: +CXXFLAGS = -Wall + +# Flags for the linker: +LDFLAGS = + +ifeq ($(PLATFORM), WIN32) +# Silence linker warnings. +LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc +endif + +# Utility to create library files +AR = ar +ARFLAGS = + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS = -L + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3-parallel + +# The path of your OpenSSL installation: +# If you do not have your own one, leave it unchanged. +OPENSSL_DIR = $(TTCN3_DIR) + +# The path of your libxml2 installation: +# If you do not have your own one, leave it unchanged. +XMLDIR = $(TTCN3_DIR) + +# Directory to store the archived source files: +# Note: you can set any directory except ./archive +ARCHIVE_DIR = backup + +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = General_Types.ttcn M3UA_Emulation.ttcn M3UA_Types.ttcn MTP3asp_PortType.ttcn MTP3asp_Types.ttcn SCCP_Emulation.ttcn SCCP_Mapping.ttcn SCCP_Testcases.ttcn SCCP_Types.ttcn SCCPasp_Types.ttcn SCTPasp_PortType.ttcn SCTPasp_Types.ttcn + +# ASN.1 modules of this project: +ASN1_MODULES = + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = General_Types.cc M3UA_Emulation.cc M3UA_Types.cc MTP3asp_PortType.cc MTP3asp_Types.cc SCCP_Emulation.cc SCCP_Mapping.cc SCCP_Testcases.cc SCCP_Types.cc SCCPasp_Types.cc SCTPasp_PortType.cc SCTPasp_Types.cc +GENERATED_HEADERS = General_Types.hh M3UA_Emulation.hh M3UA_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh SCCP_Emulation.hh SCCP_Mapping.hh SCCP_Testcases.hh SCCP_Types.hh SCCPasp_Types.hh SCTPasp_PortType.hh SCTPasp_Types.hh + +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = SCTPasp_PT.cc +USER_HEADERS = SCTPasp_PT.hh + +# Object files of this project that are needed for the executable test suite: +OBJECTS = $(GENERATED_OBJECTS) $(USER_OBJECTS) + +GENERATED_OBJECTS = General_Types.o M3UA_Emulation.o M3UA_Types.o MTP3asp_PortType.o MTP3asp_Types.o SCCP_Emulation.o SCCP_Mapping.o SCCP_Testcases.o SCCP_Types.o SCCPasp_Types.o SCTPasp_PortType.o SCTPasp_Types.o + +USER_OBJECTS = SCTPasp_PT.o + +# Other files of the project (Makefile, configuration files, etc.) +# that will be added to the archived source files: +OTHER_FILES = Makefile + +# The name of the executable test suite: +EXECUTABLE = SCCP_Test + + + +LIBRARY = lib$(EXECUTABLE).a + +TARGET = $(EXECUTABLE) + +# +# Do not modify these unless you know what you are doing... +# Platform specific additional libraries: +# +SOLARIS_LIBS = -lsocket -lnsl -lxml2 -lresolv +SOLARIS8_LIBS = -lsocket -lnsl -lxml2 -lresolv +LINUX_LIBS = -lxml2 -lpthread -lrt +FREEBSD_LIBS = -lxml2 +WIN32_LIBS = -lxml2 + +# +# Rules for building the executable... +# + +all: $(TARGET) ; + +executable: $(EXECUTABLE) ; + +library: $(LIBRARY) ; + +objects: $(OBJECTS) compile; + +$(EXECUTABLE): $(OBJECTS) + if $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto \ + -L$(XMLDIR)/lib $($(PLATFORM)_LIBS); \ + then : ; else $(TTCN3_DIR)/bin/titanver $(OBJECTS); exit 1; fi + +$(LIBRARY): $(OBJECTS) + $(AR) -r $(ARFLAGS) $(LIBRARY) $(OBJECTS) + +%.o: %.c $(GENERATED_HEADERS) + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +%.o: %.cc $(GENERATED_HEADERS) + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then rm -f compile; $(MAKE) compile; fi + +check: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + +port: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -t $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(ASN1_MODULES) - $? + touch $@ + +clean: + -rm -f $(EXECUTABLE) $(LIBRARY) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile \ + tags *.log + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) ; + makedepend $(CPPFLAGS) -DMAKEDEPEND_RUN $(GENERATED_SOURCES) $(USER_SOURCES) + +archive: + mkdir -p $(ARCHIVE_DIR) + tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \ + | gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz + +diag: + $(TTCN3_DIR)/bin/compiler -v 2>&1 + $(TTCN3_DIR)/bin/mctr_cli -v 2>&1 + $(CXX) -v 2>&1 + $(AR) -V 2>&1 + @echo TTCN3_DIR=$(TTCN3_DIR) + @echo OPENSSL_DIR=$(OPENSSL_DIR) + @echo XMLDIR=$(XMLDIR) + @echo PLATFORM=$(PLATFORM) + +# +# Add your rules here if necessary... +# + diff --git a/bin/SCCP_Emulation.ttcn b/bin/SCCP_Emulation.ttcn new file mode 120000 index 00000000..56f95487 --- /dev/null +++ b/bin/SCCP_Emulation.ttcn @@ -0,0 +1 @@ +../SCCP_CNL113341/src/SCCP_Emulation.ttcn \ No newline at end of file diff --git a/bin/SCCP_Mapping.ttcn b/bin/SCCP_Mapping.ttcn new file mode 120000 index 00000000..49e5098d --- /dev/null +++ b/bin/SCCP_Mapping.ttcn @@ -0,0 +1 @@ +../SCCP_CNL113341/src/SCCP_Mapping.ttcnpp \ No newline at end of file diff --git a/bin/SCCP_Mapping.ttcnpp b/bin/SCCP_Mapping.ttcnpp new file mode 120000 index 00000000..49e5098d --- /dev/null +++ b/bin/SCCP_Mapping.ttcnpp @@ -0,0 +1 @@ +../SCCP_CNL113341/src/SCCP_Mapping.ttcnpp \ No newline at end of file diff --git a/bin/SCCP_Testcases.cfg b/bin/SCCP_Testcases.cfg new file mode 120000 index 00000000..34a3574a --- /dev/null +++ b/bin/SCCP_Testcases.cfg @@ -0,0 +1 @@ +../SCCP_Test/SCCP_Testcases.cfg \ No newline at end of file diff --git a/bin/SCCP_Testcases.ttcn b/bin/SCCP_Testcases.ttcn new file mode 120000 index 00000000..044b425c --- /dev/null +++ b/bin/SCCP_Testcases.ttcn @@ -0,0 +1 @@ +../SCCP_Test/SCCP_Testcases.ttcn \ No newline at end of file diff --git a/bin/SCCP_Types.ttcn b/bin/SCCP_Types.ttcn new file mode 120000 index 00000000..79ab3ba0 --- /dev/null +++ b/bin/SCCP_Types.ttcn @@ -0,0 +1 @@ +../SCCP_CNL113341/src/SCCP_Types.ttcn \ No newline at end of file diff --git a/bin/SCCPasp_Types.ttcn b/bin/SCCPasp_Types.ttcn new file mode 120000 index 00000000..1d80a1d6 --- /dev/null +++ b/bin/SCCPasp_Types.ttcn @@ -0,0 +1 @@ +../SCCP_CNL113341/src/SCCPasp_Types.ttcn \ No newline at end of file diff --git a/bin/SCTPasp_PT.cc b/bin/SCTPasp_PT.cc new file mode 120000 index 00000000..23344849 --- /dev/null +++ b/bin/SCTPasp_PT.cc @@ -0,0 +1 @@ +../SCTPasp_CNL113469/src/SCTPasp_PT.cc \ No newline at end of file diff --git a/bin/SCTPasp_PT.hh b/bin/SCTPasp_PT.hh new file mode 120000 index 00000000..5ba6a79e --- /dev/null +++ b/bin/SCTPasp_PT.hh @@ -0,0 +1 @@ +../SCTPasp_CNL113469/src/SCTPasp_PT.hh \ No newline at end of file diff --git a/bin/SCTPasp_PortType.ttcn b/bin/SCTPasp_PortType.ttcn new file mode 120000 index 00000000..798fd7bd --- /dev/null +++ b/bin/SCTPasp_PortType.ttcn @@ -0,0 +1 @@ +../SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn \ No newline at end of file diff --git a/bin/SCTPasp_Types.ttcn b/bin/SCTPasp_Types.ttcn new file mode 120000 index 00000000..e067b947 --- /dev/null +++ b/bin/SCTPasp_Types.ttcn @@ -0,0 +1 @@ +../SCTPasp_CNL113469/src/SCTPasp_Types.ttcn \ No newline at end of file diff --git a/bin/install.script b/bin/install.script new file mode 100755 index 00000000..d6808cc3 --- /dev/null +++ b/bin/install.script @@ -0,0 +1,34 @@ +#!/bin/sh + + + +ln -sf ../COMMON/src/General_Types.ttcn . + +#M3UA protocol module +ln -sf ../M3UA_CNL113536/src/M3UA_Types.ttcn . +#M3UA Emulator +ln -sf ../M3UA_CNL113537/src/M3UA_Emulation.ttcn . + + +#MTP3 test port (partly) + +ln -sf ../MTP3asp_CNL113337/src/MTP3asp_Types.ttcn . +ln -sf ../MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn . + +#SCCP Emulator + protocol module + +ln -sf ../SCCP_CNL113341/src/SCCPasp_Types.ttcn . +ln -sf ../SCCP_CNL113341/src/SCCP_Types.ttcn . +ln -sf ../SCCP_CNL113341/src/SCCP_Mapping.ttcnpp . +ln -sf ../SCCP_CNL113341/src/SCCP_Emulation.ttcn . + +#SCTP test port +ln -sf ../SCTPasp_CNL113469/src/SCTPasp_Types.ttcn . +ln -sf ../SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn . +ln -sf ../SCTPasp_CNL113469/src/SCTPasp_PT.hh . +ln -sf ../SCTPasp_CNL113469/src/SCTPasp_PT.cc . + + +#Test cases +ln -sf ../SCCP_Test/SCCP_Testcases.ttcn . +ln -sf ../SCCP_Test/SCCP_Testcases.cfg . -- cgit v1.2.3