From 00566f55f05faccc8c2f8370bd4a81c307a941dc Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 21 Nov 2017 16:43:49 +0100 Subject: initial import of new IPA test port --- ipa/IPA_Test.cfg | 19 ++++++++++++ ipa/IPA_Test.ttcn | 46 ++++++++++++++++++++++++++++ ipa/gen_links.sh | 32 ++++++++++++++++++++ ipa/regen_makefile.sh | 11 +++++++ library/IPA_CodecPort.ttcn | 44 +++++++++++++++++++++++++++ library/IPA_CodecPort_CtrlFunct.ttcn | 44 +++++++++++++++++++++++++++ library/IPA_CodecPort_CtrlFunctDef.cc | 56 +++++++++++++++++++++++++++++++++++ library/IPA_Types.ttcn | 31 +++++++++++++++++++ 8 files changed, 283 insertions(+) create mode 100644 ipa/IPA_Test.cfg create mode 100644 ipa/IPA_Test.ttcn create mode 100755 ipa/gen_links.sh create mode 100755 ipa/regen_makefile.sh create mode 100644 library/IPA_CodecPort.ttcn create mode 100644 library/IPA_CodecPort_CtrlFunct.ttcn create mode 100644 library/IPA_CodecPort_CtrlFunctDef.cc create mode 100644 library/IPA_Types.ttcn diff --git a/ipa/IPA_Test.cfg b/ipa/IPA_Test.cfg new file mode 100644 index 00000000..e5a3d13f --- /dev/null +++ b/ipa/IPA_Test.cfg @@ -0,0 +1,19 @@ +[LOGGING] +#FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING | DEBUG_ENCDEC; +#ConsoleMask := ERROR | WARNING | TESTCASE | TTCN_MATCHING | DEBUG_ENCDEC +FileMask := LOG_ALL | TTCN_MATCHING; + +[TESTPORT_PARAMETERS] +#*.*.udpReuseAddress := "yes"; + +[MODULE_PARAMETERS] +#mp_local_port := 2727; +#mp_local_ip:= "127.0.0.1"; +#mp_remote_port := 2427; +#mp_remote_ip:= "127.0.0.1"; + +[MAIN_CONTROLLER] + +[EXECUTE] +#MGCP_Test.TC_selftest +IPA_Test.TC_recv_dump diff --git a/ipa/IPA_Test.ttcn b/ipa/IPA_Test.ttcn new file mode 100644 index 00000000..925f86f9 --- /dev/null +++ b/ipa/IPA_Test.ttcn @@ -0,0 +1,46 @@ +module IPA_Test { + + import from IPA_CodecPort all; + import from IPA_CodecPort_CtrlFunct all; + import from IPL4asp_Types all; + + type component ipa_CT { + port IPA_CODEC_PT IPA; + var boolean g_initialized := false; + + var ConnectionId g_ipa_conn_id := -1; + } + + modulepar { + PortNumber mp_local_port := 0; + charstring mp_local_ip := "127.0.0.1"; + PortNumber mp_remote_port := 3002; + charstring mp_remote_ip := "127.0.0.1"; + } + + private function f_init() runs on ipa_CT { + var Result res; + + if (g_initialized == true) { + return; + } + g_initialized := true; + map(self:IPA, system:IPA_CODEC_PT); + + res := IPA_CodecPort_CtrlFunct.f_IPL4_connect(IPA, mp_remote_ip, mp_remote_port, + mp_local_ip, mp_local_port, 0, { tcp:={} }); + g_ipa_conn_id := res.connId; + } + + testcase TC_recv_dump() runs on ipa_CT { + f_init(); + + while (true) { + IPA.receive; + } + } + + control { + execute( TC_recv_dump() ); + } +} diff --git a/ipa/gen_links.sh b/ipa/gen_links.sh new file mode 100755 index 00000000..775ae71d --- /dev/null +++ b/ipa/gen_links.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +BASEDIR=~/projects/git + +gen_links() { + DIR=$1 + FILES=$* + for f in $FILES; do + echo "Linking $f" + ln -sf $DIR/$f $f + done +} + +#DIR=$BASEDIR/titan.TestPorts.UNIX_DOMAIN_SOCKETasp/src +#FILES="UD_PT.cc UD_PT.hh UD_PortType.ttcn UD_Types.ttcn" +#gen_links $DIR $FILES + +DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src +FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCConversion.hh TCCInterface.cc TCCInterface_ip.h" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src +FILES="Socket_API_Definitions.ttcn" +gen_links $DIR $FILES + +DIR=$BASEDIR/titan.TestPorts.IPL4asp/src +FILES="IPL4asp_Functions.ttcn IPL4asp_PT.cc IPL4asp_PT.hh IPL4asp_PortType.ttcn IPL4asp_Types.ttcn IPL4asp_discovery.cc IPL4asp_protocol_L234.hh" +gen_links $DIR $FILES + +DIR=../library +FILES="Osmocom_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc" +gen_links $DIR $FILES diff --git a/ipa/regen_makefile.sh b/ipa/regen_makefile.sh new file mode 100755 index 00000000..a5d05dee --- /dev/null +++ b/ipa/regen_makefile.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +MAIN=IPA_Test.ttcn + +FILES="*.ttcn IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc" + +ttcn3_makefilegen -l -f $MAIN $FILES +sed -i -e 's/# TTCN3_DIR = /TTCN3_DIR = \/usr/' Makefile +sed -i -e 's/LDFLAGS = /LDFLAGS = -L \/usr\/lib\/titan /' Makefile +#sed -i -e 's/TTCN3_LIB = ttcn3-parallel/TTCN3_LIB = ttcn3/' Makefile +sed -i -e 's/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include -I\/usr\/include\/titan/' Makefile diff --git a/library/IPA_CodecPort.ttcn b/library/IPA_CodecPort.ttcn new file mode 100644 index 00000000..70d3ccba --- /dev/null +++ b/library/IPA_CodecPort.ttcn @@ -0,0 +1,44 @@ +module IPA_CodecPort { + + import from IPL4asp_PortType all; + import from IPL4asp_Types all; + import from IPA_Types all; + + type record IPA_RecvFrom { + ConnectionId connId, + IpaStreamId streamId, + octetstring msg + } + + type record IPA_Send { + ConnectionId connId, + IpaStreamId streamId, + octetstring msg + } + + private function IPL4_to_IPA_RecvFrom(in ASP_RecvFrom pin, out IPA_RecvFrom pout) { + var PDU_IPA ipa := dec_PDU_IPA(pin.msg); + pout.connId := pin.connId; + pout.streamId := ipa.streamId + pout.msg := ipa.payloadData; + } with { extension "prototype(fast)" } + + private function IPA_to_IPL4_Send(in IPA_Send pin, out ASP_Send pout) { + var PDU_IPA ipa := { 0, pin.streamId, pin.msg }; + pout.connId := pin.connId; + pout.proto := { tcp := {} }; + pout.msg := enc_PDU_IPA(ipa); + } with { extension "prototype(fast)" } + + type port IPA_CODEC_PT message { + out IPA_Send; + in IPA_RecvFrom, + ASP_ConnId_ReadyToRelease, + ASP_Event; + } with { extension "user IPL4asp_PT + out(IPA_Send -> ASP_Send:function(IPA_to_IPL4_Send)) + in(ASP_RecvFrom -> IPA_RecvFrom: function(IPL4_to_IPA_RecvFrom); + ASP_ConnId_ReadyToRelease -> ASP_ConnId_ReadyToRelease: simple; + ASP_Event -> ASP_Event: simple)" + } +} diff --git a/library/IPA_CodecPort_CtrlFunct.ttcn b/library/IPA_CodecPort_CtrlFunct.ttcn new file mode 100644 index 00000000..c0e7de6f --- /dev/null +++ b/library/IPA_CodecPort_CtrlFunct.ttcn @@ -0,0 +1,44 @@ +module IPA_CodecPort_CtrlFunct { + + import from IPA_CodecPort all; + import from IPL4asp_Types all; + + external function f_IPL4_listen( + inout IPA_CODEC_PT portRef, + in HostName locName, + in PortNumber locPort, + in ProtoTuple proto, + in OptionList options := {} + ) return Result; + + external function f_IPL4_connect( + inout IPA_CODEC_PT portRef, + in HostName remName, + in PortNumber remPort, + in HostName locName, + in PortNumber locPort, + in ConnectionId connId, + in ProtoTuple proto, + in OptionList options := {} + ) return Result; + + external function f_IPL4_close( + inout IPA_CODEC_PT portRef, + in ConnectionId id, + in ProtoTuple proto := { unspecified := {} } + ) return Result; + + external function f_IPL4_setUserData( + inout IPA_CODEC_PT portRef, + in ConnectionId id, + in UserData userData + ) return Result; + + external function f_IPL4_getUserData( + inout IPA_CODEC_PT portRef, + in ConnectionId id, + out UserData userData + ) return Result; + +} + diff --git a/library/IPA_CodecPort_CtrlFunctDef.cc b/library/IPA_CodecPort_CtrlFunctDef.cc new file mode 100644 index 00000000..6d47305f --- /dev/null +++ b/library/IPA_CodecPort_CtrlFunctDef.cc @@ -0,0 +1,56 @@ +#include "IPL4asp_PortType.hh" +#include "IPA_CodecPort.hh" +#include "IPL4asp_PT.hh" + +namespace IPA__CodecPort__CtrlFunct { + + IPL4asp__Types::Result f__IPL4__listen( + IPA__CodecPort::IPA__CODEC__PT& portRef, + const IPL4asp__Types::HostName& locName, + const IPL4asp__Types::PortNumber& locPort, + const IPL4asp__Types::ProtoTuple& proto, + const IPL4asp__Types::OptionList& options) + { + return f__IPL4__PROVIDER__listen(portRef, locName, locPort, proto, options); + } + + IPL4asp__Types::Result f__IPL4__connect( + IPA__CodecPort::IPA__CODEC__PT& portRef, + const IPL4asp__Types::HostName& remName, + const IPL4asp__Types::PortNumber& remPort, + const IPL4asp__Types::HostName& locName, + const IPL4asp__Types::PortNumber& locPort, + const IPL4asp__Types::ConnectionId& connId, + const IPL4asp__Types::ProtoTuple& proto, + const IPL4asp__Types::OptionList& options) + { + return f__IPL4__PROVIDER__connect(portRef, remName, remPort, + locName, locPort, connId, proto, options); + } + + IPL4asp__Types::Result f__IPL4__close( + IPA__CodecPort::IPA__CODEC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + const IPL4asp__Types::ProtoTuple& proto) + { + return f__IPL4__PROVIDER__close(portRef, connId, proto); + } + + IPL4asp__Types::Result f__IPL4__setUserData( + IPA__CodecPort::IPA__CODEC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + const IPL4asp__Types::UserData& userData) + { + return f__IPL4__PROVIDER__setUserData(portRef, connId, userData); + } + + IPL4asp__Types::Result f__IPL4__getUserData( + IPA__CodecPort::IPA__CODEC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + IPL4asp__Types::UserData& userData) + { + return f__IPL4__PROVIDER__getUserData(portRef, connId, userData); + } + +} + diff --git a/library/IPA_Types.ttcn b/library/IPA_Types.ttcn new file mode 100644 index 00000000..ceb31ce7 --- /dev/null +++ b/library/IPA_Types.ttcn @@ -0,0 +1,31 @@ +/* (C) 2017 by Harald Welte */ + +module IPA_Types { + +import from Osmocom_Types all; + +type uint8_t IpaStreamId; + +external function enc_PDU_IPA(in PDU_IPA pdu) return octetstring +with { extension "prototype(convert)" + extension "encode(RAW)" + } + +external function dec_PDU_IPA(in octetstring stream) return PDU_IPA +with { extension "prototype(convert)" + extension "decode(RAW)" + } + +type record PDU_IPA +{ + uint16_t lengthInd, + IpaStreamId streamId, + octetstring payloadData +} with { + variant (lengthInd) "LENGTHTO(lengthInd,streamId,payloadData)"; + variant (lengthInd) "FIELDLENGTH(16)"; + variant (lengthInd) "BYTEORDER(last)"; + encode "RAW"; +} + +} -- cgit v1.2.3