diff --git a/ttcn3/UECUPS_CodecPort.ttcn b/ttcn3/UECUPS_CodecPort.ttcn
new file mode 100644
index 0000000..8f9d962
--- /dev/null
+++ b/ttcn3/UECUPS_CodecPort.ttcn
@@ -0,0 +1,70 @@
+module UECUPS_CodecPort {
+
+/* (C) 2020 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 UECUPS_Types all;
+
+	type record UECUPS_RecvFrom {
+		ConnectionId	connId,
+		HostName	remName,
+		PortNumber	remPort,
+		HostName	locName,
+		PortNumber	locPort,
+		PDU_UECUPS	msg
+	};
+
+	template UECUPS_RecvFrom t_UECUPS_RecvFrom(template PDU_UECUPS msg) := {
+		connId := ?,
+		remName := ?,
+		remPort := ?,
+		locName := ?,
+		locPort := ?,
+		msg := msg
+	}
+
+	type record UECUPS_Send {
+		ConnectionId	connId,
+		PDU_UECUPS	msg
+	}
+
+	template UECUPS_Send t_UECUPS_Send(template ConnectionId connId, template PDU_UECUPS msg) := {
+		connId := connId,
+		msg := msg
+	}
+
+	private function IPL4_to_UECUPS_RecvFrom(in ASP_RecvFrom pin, out UECUPS_RecvFrom pout) {
+		pout.connId := pin.connId;
+		pout.remName := pin.remName;
+		pout.remPort := pin.remPort;
+		pout.locName := pin.locName;
+		pout.locPort := pin.locPort;
+		pout.msg := f_dec_PDU_UECUPS(pin.msg);
+	} with { extension "prototype(fast)" };
+
+	private function UECUPS_to_IPL4_Send(in UECUPS_Send pin, out ASP_Send pout) {
+		pout.connId := pin.connId;
+		pout.proto := { sctp := {} };
+		pout.msg := f_enc_PDU_UECUPS(pin.msg);
+	} with { extension "prototype(fast)" };
+
+	type port UECUPS_CODEC_PT message {
+		out	UECUPS_Send;
+		in	UECUPS_RecvFrom,
+			ASP_ConnId_ReadyToRelease,
+			ASP_Event;
+	} with { extension "user IPL4asp_PT
+		out(UECUPS_Send -> ASP_Send:function(UECUPS_to_IPL4_Send))
+		in(ASP_RecvFrom -> UECUPS_RecvFrom: function(IPL4_to_UECUPS_RecvFrom);
+		   ASP_ConnId_ReadyToRelease -> ASP_ConnId_ReadyToRelease: simple;
+		   ASP_Event -> ASP_Event: simple)"
+	}
+}
diff --git a/ttcn3/UECUPS_CodecPort_CtrlFunct.ttcn b/ttcn3/UECUPS_CodecPort_CtrlFunct.ttcn
new file mode 100644
index 0000000..365b7cb
--- /dev/null
+++ b/ttcn3/UECUPS_CodecPort_CtrlFunct.ttcn
@@ -0,0 +1,44 @@
+module UECUPS_CodecPort_CtrlFunct {
+
+  import from UECUPS_CodecPort all;
+  import from IPL4asp_Types all;
+
+  external function f_IPL4_listen(
+    inout UECUPS_CODEC_PT portRef,
+    in HostName locName,
+    in PortNumber locPort,
+    in ProtoTuple proto,
+    in OptionList options := {}
+  ) return Result;
+
+  external function f_IPL4_connect(
+    inout UECUPS_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 UECUPS_CODEC_PT portRef,
+    in ConnectionId id,
+    in ProtoTuple proto := { unspecified := {} }
+  ) return Result;
+
+  external function f_IPL4_setUserData(
+    inout UECUPS_CODEC_PT portRef,
+    in ConnectionId id,
+    in UserData userData
+  ) return Result;
+
+  external function f_IPL4_getUserData(
+    inout UECUPS_CODEC_PT portRef,
+    in ConnectionId id,
+    out UserData userData
+  ) return Result;
+
+}
+
diff --git a/ttcn3/UECUPS_CodecPort_CtrlFunctDef.cc b/ttcn3/UECUPS_CodecPort_CtrlFunctDef.cc
new file mode 100644
index 0000000..b069b11
--- /dev/null
+++ b/ttcn3/UECUPS_CodecPort_CtrlFunctDef.cc
@@ -0,0 +1,56 @@
+#include "IPL4asp_PortType.hh"
+#include "UECUPS_CodecPort.hh"
+#include "IPL4asp_PT.hh"
+
+namespace UECUPS__CodecPort__CtrlFunct {
+
+  IPL4asp__Types::Result f__IPL4__listen(
+    UECUPS__CodecPort::UECUPS__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(
+    UECUPS__CodecPort::UECUPS__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(
+    UECUPS__CodecPort::UECUPS__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(
+    UECUPS__CodecPort::UECUPS__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(
+    UECUPS__CodecPort::UECUPS__CODEC__PT& portRef,
+    const IPL4asp__Types::ConnectionId& connId,
+    IPL4asp__Types::UserData& userData)
+  {
+    return f__IPL4__PROVIDER__getUserData(portRef, connId, userData);
+  }
+  
+}
+
diff --git a/ttcn3/UECUPS_Types.ttcn b/ttcn3/UECUPS_Types.ttcn
new file mode 100644
index 0000000..8c00090
--- /dev/null
+++ b/ttcn3/UECUPS_Types.ttcn
@@ -0,0 +1,91 @@
+module UECUPS_Types {
+
+import from General_Types all;
+import from Osmocom_Types all;
+
+type enumerated UECUPS_AddrType {
+	IPV4	(1),
+	IPV6	(2)
+};
+
+type enumerated UECUPS_Result {
+	OK			(1),
+	ERR_INVALID_DATA	(2),
+	ERR_NOT_FOUND		(3)
+};
+
+type record UECUPS_SockAddr {
+	UECUPS_AddrType	addr_type,
+	OCT4_16n	ip,
+	uint16_t	Port
+};
+
+/* Create a new GTP-U tunnel in the user plane */
+type record UECUPS_CreateTun {
+	/* TEID in transmit + receive direction */
+	uint32_t	tx_teid,
+	uint32_t	rx_teid,
+
+	/* user address (allocated inside the tunnel) */
+	UECUPS_AddrType user_addr_type,
+	OCT4_16n	user_addr,
+
+	/* GTP endpoint (UDP IP/Port tuples) */
+	UECUPS_SockAddr local_gtp_ep,
+	UECUPS_SockAddr remote_gtp_ep,
+
+	/* TUN device */
+	charstring	tun_dev_name,
+	charstring	tun_netns_name optional
+};
+
+type record UECUPS_CreateTunRes {
+	UECUPS_Result	result
+};
+
+/* Destroy an existing GTP-U tunnel in the user plane */
+type record UECUPS_DestroyTun {
+	/* local GTP endpoint + TEID are sufficient for unique identification */
+	UECUPS_SockAddr local_gtp_ep,
+	uint32_t	rx_teid
+};
+
+type record UECUPS_DestroyTunRes {
+	UECUPS_Result	result
+};
+
+type union PDU_UECUPS {
+	UECUPS_CreateTun	create_tun,
+	UECUPS_CreateTunRes	create_tun_res,
+	UECUPS_DestroyTun	destroy_tun,
+	UECUPS_DestroyTunRes	destroy_tun_res
+};
+
+
+
+external function f_enc_PDU_UECUPS(in PDU_UECUPS inp) return octetstring
+        with { extension "prototype(convert) encode(JSON)" }
+external function f_dec_PDU_UECUPS(in octetstring inp) return PDU_UECUPS
+        with { extension "prototype(convert) decode(JSON)" }
+
+
+private function f_get_addrtype(OCT4_16n addr) return UECUPS_AddrType
+{
+	if (lengthof(addr) == 4) {
+		return IPV4;
+	} else {
+		return IPV6;
+	}
+}
+
+private const integer GTP1U_PORT := 2152;
+
+template (value) UECUPS_SockAddr
+ts_UECUPS_SockAddr(OCT4_16n ip, uint16_t Port := GTP1U_PORT) := {
+	addr_type := f_get_addrtype(ip),
+	ip := ip,
+	Port := Port
+}
+
+
+} with { encode "JSON" };
