stp: Introduce STP_Tests*.ttcn for testing OsmoSTP
In the past, we were automatically running [large parts of] the nplab
M3UA and SUA test suites, but those implement only a fraction of the
functionality. Particularly, they don't cover the non-standard IPA
behavior, and they don't cover RKM (routing key management).
Let's introduce an initial set of STP tests with this patch. We try
to not duplicate nplab here, and implement bits not covered there.
Change-Id: I628a87385cac0dfe708a0d74a5088fbd5a4790cd
diff --git a/library/M3UA_CodecPort.ttcn b/library/M3UA_CodecPort.ttcn
new file mode 100644
index 0000000..94d16d6
--- /dev/null
+++ b/library/M3UA_CodecPort.ttcn
@@ -0,0 +1,84 @@
+module M3UA_CodecPort {
+
+/* Simple M3UA Codec Port, translating between raw SCTP primitives with
+ * octetstring payload towards the IPL4asp provider, and M3UA primitives
+ * which carry the decoded M3UA data types as payload.
+ *
+ * (C) 2019 by Harald Welte <laforge@gnumonks.org>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+ import from IPL4asp_PortType all;
+ import from IPL4asp_Types all;
+ import from M3UA_Types all;
+
+ type record M3UA_RecvFrom {
+ ConnectionId connId,
+ HostName remName,
+ PortNumber remPort,
+ HostName locName,
+ PortNumber locPort,
+ PDU_M3UA msg
+ };
+
+ template M3UA_RecvFrom t_M3UA_RecvFrom(template PDU_M3UA msg) := {
+ connId := ?,
+ remName := ?,
+ remPort := ?,
+ locName := ?,
+ locPort := ?,
+ msg := msg
+ }
+
+ type record M3UA_Send {
+ ConnectionId connId,
+ integer stream,
+ PDU_M3UA msg
+ }
+
+ template M3UA_Send t_M3UA_Send(template ConnectionId connId, template PDU_M3UA msg,
+ template (omit) integer stream := omit) := {
+ connId := connId,
+ stream := stream,
+ msg := msg
+ }
+
+ private function IPL4_to_M3UA_RecvFrom(in ASP_RecvFrom pin, out M3UA_RecvFrom pout) {
+ pout.connId := pin.connId;
+ pout.remName := pin.remName;
+ pout.remPort := pin.remPort;
+ pout.locName := pin.locName;
+ pout.locPort := pin.locPort;
+ pout.msg := dec_PDU_M3UA(pin.msg);
+ } with { extension "prototype(fast)" };
+
+ private function M3UA_to_IPL4_Send(in M3UA_Send pin, out ASP_Send pout) {
+ pout.connId := pin.connId;
+ pout.proto := {
+ sctp := {
+ sinfo_stream := pin.stream,
+ sinfo_ppid := 3,
+ remSocks := omit,
+ assocId := omit
+ }
+ };
+ pout.msg := enc_PDU_M3UA(pin.msg);
+ } with { extension "prototype(fast)" };
+
+ type port M3UA_CODEC_PT message {
+ out M3UA_Send;
+ in M3UA_RecvFrom,
+ ASP_ConnId_ReadyToRelease,
+ ASP_Event;
+ } with { extension "user IPL4asp_PT
+ out(M3UA_Send -> ASP_Send:function(M3UA_to_IPL4_Send))
+ in(ASP_RecvFrom -> M3UA_RecvFrom: function(IPL4_to_M3UA_RecvFrom);
+ ASP_ConnId_ReadyToRelease -> ASP_ConnId_ReadyToRelease: simple;
+ ASP_Event -> ASP_Event: simple)"
+ }
+}