diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-08-03 17:00:40 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-08-03 17:00:40 +0200 |
commit | 2560608fb7e0115c7ecc87cd30623946da43c6c6 (patch) | |
tree | a48082b1aaec9ac63fb9d6e7a93151c560c80982 /ggsn_tests | |
parent | 379d45aba6797e0ef2f283642ce9364c5b5f0d04 (diff) |
First attempt with TranslationPort fails in CtrlFunctions
Diffstat (limited to 'ggsn_tests')
-rw-r--r-- | ggsn_tests/GTP_CodecPort.ttcn | 84 | ||||
-rw-r--r-- | ggsn_tests/GTP_CodecPort_CtrlFunct.ttcn | 43 | ||||
-rw-r--r-- | ggsn_tests/GTP_CodecPort_CtrlFunctDef.cc | 58 | ||||
-rwxr-xr-x | ggsn_tests/regen_makefile.sh | 2 |
4 files changed, 186 insertions, 1 deletions
diff --git a/ggsn_tests/GTP_CodecPort.ttcn b/ggsn_tests/GTP_CodecPort.ttcn new file mode 100644 index 00000000..44c71e25 --- /dev/null +++ b/ggsn_tests/GTP_CodecPort.ttcn @@ -0,0 +1,84 @@ +/* Translation Port sitting on top of IPL4_asp UDP to encode/decode GTP */ +/* (C) 2017 by Harald Welte <laforge@gnumonks.org */ +module GTP_CodecPort { + import from IPL4asp_PortType all; + import from IPL4asp_Types all; + import from GTPC_Types all; + import from GTPU_Types all; + + /* identifies a remote peer (sender or receiver) */ + type record GtpPeer { + ConnectionId connId, + HostName remName, + PortNumber remPort + } + + /* Decoded GTP1C (Control Plane), used in send and receive direction */ + type record Gtp1cUnitdata { + GtpPeer peer, + PDU_GTPC gtpc + } + + /* Decoded GTP1U (User Plane), used in send and receive direction */ + type record Gtp1uUnitdata { + GtpPeer peer, + PDU_GTPU gtpu + } + + /* Translation port on top of IPL4asp; ASP_Event passed through transparently */ + type port GTPC_PT message map to IPL4asp_PT { + out Gtp1cUnitdata to ASP_SendTo with f_enc_Gtp1cUD(); + in Gtp1cUnitdata from ASP_RecvFrom with f_dec_Gtp1cUD(), + ASP_Event; + /* we can declare variables here and use them from all functions with "port" label */ + } + + function f_enc_Gtp1cUD(in Gtp1cUnitdata in_ud, out ASP_SendTo out_ud) port GTPC_PT { + out_ud.connId := in_ud.peer.connId; + out_ud.remName := in_ud.peer.remName; + out_ud.remPort := in_ud.peer.remPort; + out_ud.proto := { udp := {} }; + out_ud.msg := enc_PDU_GTPC(in_ud.gtpc); + port.setstate(0); + } with { extension "prototype(fast)" }; + + function f_dec_Gtp1cUD(in ASP_RecvFrom in_ud, out Gtp1cUnitdata out_ud) port GTPC_PT { + out_ud.peer.connId := in_ud.connId; + out_ud.peer.remName := in_ud.remName; + out_ud.peer.remPort := in_ud.remPort; + out_ud.gtpc := dec_PDU_GTPC(in_ud.msg); + port.setstate(0); + } with { extension "prototype(fast)" }; + + + /* Translation port on top of IPL4asp; ASP_Event passed through transparently */ + type port GTPU_PT message map to IPL4asp_PT { + out Gtp1uUnitdata to ASP_SendTo with f_enc_Gtp1uUD(); + in Gtp1uUnitdata from ASP_RecvFrom with f_dec_Gtp1uUD(), + ASP_Event; + /* we can declare variables here and use them from all functions with "port" label */ + } + + function f_enc_Gtp1uUD(in Gtp1uUnitdata in_ud, out ASP_SendTo out_ud) port GTPU_PT { + out_ud.connId := in_ud.peer.connId; + out_ud.remName := in_ud.peer.remName; + out_ud.remPort := in_ud.peer.remPort; + out_ud.proto := { udp := {} }; + out_ud.msg := enc_PDU_GTPU(in_ud.gtpu); + port.setstate(0); + } with { extension "prototype(fast)" }; + + function f_dec_Gtp1uUD(in ASP_RecvFrom in_ud, out Gtp1uUnitdata out_ud) port GTPU_PT { + out_ud.peer.connId := in_ud.connId; + out_ud.peer.remName := in_ud.remName; + out_ud.peer.remPort := in_ud.remPort; + out_ud.gtpu := dec_PDU_GTPU(in_ud.msg); + port.setstate(0); + } with { extension "prototype(fast)" }; +/* + function f_GTPC_listen(inout GTPC_PT portRef, in HostName locName, + in PortNumber locPort) return Result { + return f_IPL4_listen(portRef, locName, locPort, { udp := {} }); + } +*/ +} diff --git a/ggsn_tests/GTP_CodecPort_CtrlFunct.ttcn b/ggsn_tests/GTP_CodecPort_CtrlFunct.ttcn new file mode 100644 index 00000000..33a2cabf --- /dev/null +++ b/ggsn_tests/GTP_CodecPort_CtrlFunct.ttcn @@ -0,0 +1,43 @@ +module GTP_CodecPort_CtrlFunct { + + import from GTP_CodecPort all; + import from IPL4asp_Types all; + + external function f_IPL4_listen( + inout GTPC_PT portRef, + in HostName locName, + in PortNumber locPort, + in ProtoTuple proto, + in OptionList options := {} + ) return Result; + + external function f_IPL4_connect( + inout GTPC_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 GTPC_PT portRef, + in ConnectionId id, + in ProtoTuple proto := { unspecified := {} } + ) return Result; + + external function f_IPL4_setUserData( + inout GTPC_PT portRef, + in ConnectionId id, + in UserData userData + ) return Result; + + external function f_IPL4_getUserData( + inout GTPC_PT portRef, + in ConnectionId id, + out UserData userData + ) return Result; + +} diff --git a/ggsn_tests/GTP_CodecPort_CtrlFunctDef.cc b/ggsn_tests/GTP_CodecPort_CtrlFunctDef.cc new file mode 100644 index 00000000..a8a014b6 --- /dev/null +++ b/ggsn_tests/GTP_CodecPort_CtrlFunctDef.cc @@ -0,0 +1,58 @@ +#include "IPL4asp_PortType.hh" +#include "IPL4asp_PT.hh" +#include "GTP_CodecPort.hh" + +using namespace IPL4asp__PortType; +using namespace IPL4asp__Types; + +namespace GTP__CodecPort__CtrlFunct { + + IPL4asp__Types::Result f__IPL4__listen( + GTP__CodecPort::GTPC__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( + GTP__CodecPort::GTPC__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( + GTP__CodecPort::GTPC__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( + GTP__CodecPort::GTPC__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( + GTP__CodecPort::GTPC__PT& portRef, + const IPL4asp__Types::ConnectionId& connId, + IPL4asp__Types::UserData& userData) + { + return f__IPL4__PROVIDER__getUserData(portRef, connId, userData); + } + +} diff --git a/ggsn_tests/regen_makefile.sh b/ggsn_tests/regen_makefile.sh index cbed5dac..26688733 100755 --- a/ggsn_tests/regen_makefile.sh +++ b/ggsn_tests/regen_makefile.sh @@ -1,6 +1,6 @@ #!/bin/sh -FILES="*.ttcn IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc GTPC_EncDec.cc GTPU_EncDec.cc" +FILES="*.ttcn IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc GTPC_EncDec.cc GTPU_EncDec.cc GTP_CodecPort_CtrlFunctDef.cc GTPC_PT.cc GTPU_PT.cc" ttcn3_makefilegen -f GGSN_Tests.ttcn $FILES sed -i -e 's/# TTCN3_DIR = /TTCN3_DIR = \/usr/' Makefile |