diff --git a/remsim/RSPRO_Types.ttcn b/remsim/RSPRO_Types.ttcn
new file mode 100644
index 0000000..1eb84bd
--- /dev/null
+++ b/remsim/RSPRO_Types.ttcn
@@ -0,0 +1,375 @@
+module RSPRO_Types {
+
+/* Templates and utility functions for the RSPRO protocol.
+ * (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 RSPRO all;
+import from Native_Functions all;
+
+template ResultCode tr_Status_ok_or_nocard := (ok, cardNotPresent);
+
+external function dec_RsproPDU(in octetstring stream) return RsproPDU;
+external function enc_RsproPDU(in RsproPDU pdu) return octetstring;
+
+type integer RsproVersion (0..32);
+
+template (value) BankSlot ts_BankSlot(template (value) BankId bid,
+				      template (value) SlotNumber slot) := {
+	bankId := bid,
+	slotNr := slot
+}
+
+template (value) ClientSlot ts_ClientSlot(template (value) ClientId cid,
+					  template (value) SlotNumber slot) := {
+	clientId := cid,
+	slotNr := slot
+}
+
+template (value) ComponentIdentity ts_CompId(template (value) ComponentType ctype,
+					     template (value) ComponentName name,
+					     template (value) ComponentName sw := "TTCN3",
+					     template (value) ComponentName sw_version := "0.1") := {
+	type_ := ctype,
+	name := name,
+	software := sw,
+	swVersion := sw_version,
+	hwManufacturer := "sysmocom",
+	hwModel	:= omit,
+	hwSerialNr := omit,
+	hwVersion := omit,
+	fwVersion := omit
+}
+template ComponentIdentity tr_CompId(template ComponentType ctype,
+				     template ComponentName name,
+				     template ComponentName sw := "TTCN3",
+				     template ComponentName sw_version := "0.1") := {
+	type_ := ctype,
+	name := name,
+	software := sw,
+	swVersion := sw_version,
+	hwManufacturer := *,
+	hwModel	:= *,
+	hwSerialNr := *,
+	hwVersion := *,
+	fwVersion := *
+}
+
+template (value) IpPort ts_IpPort(template (value) IpAddress ip,
+				  template (value) PortNumber port_nr) := {
+	ip := ip,
+	port_ := port_nr
+}
+template IpPort tr_IpPort(template IpAddress ip, template PortNumber port_nr) := {
+	ip := ip,
+	port_ := port_nr
+}
+
+template (value) IpAddress ts_IPv4(charstring ip_str) := {
+	ipv4 := f_inet_addr(ip_str)
+}
+
+
+
+
+template (value) RsproPDU ts_RSPRO(template (value) RsproPDUchoice msg,
+				   template (value) RsproVersion version := 2,
+				   template (value) OperationTag tag := 0) := {
+	version := version,
+	tag := tag,
+	msg := msg
+}
+
+template RsproPDU tr_RSPRO(template RsproPDUchoice msg,
+			   template RsproVersion version := 2,
+			   template OperationTag tag := ?) := {
+	version := version,
+	tag := tag,
+	msg := msg
+}
+
+
+template (value) RsproPDU ts_RSPRO_ConnectClientReq(template (value) ComponentIdentity id,
+						    template (omit) ClientSlot clslot) :=
+	ts_RSPRO(RsproPDUchoice:{
+			connectClientReq := {
+				identity := id,
+				clientSlot := clslot
+			}
+		});
+template RsproPDU tr_RSPRO_ConnectClientReq(template ComponentIdentity id,
+					    template ClientSlot clslot) :=
+	tr_RSPRO(RsproPDUchoice:{
+			connectClientReq := {
+				identity := id,
+				clientSlot := clslot
+			}
+		});
+
+
+template (value) RsproPDU ts_RSPRO_ConnectClientRes(template (value) ComponentIdentity id,
+						    template (value) ResultCode res) := 
+	ts_RSPRO(RsproPDUchoice:{
+			connectClientRes := {
+				identity := id,
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_ConnectClientRes(template ComponentIdentity id := ?,
+					    template ResultCode res := ?) := 
+	tr_RSPRO(RsproPDUchoice:{
+			connectClientRes := {
+				identity := id,
+				result := res
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_ConnectBankReq(template (value) ComponentIdentity id,
+						  template (value) BankId bid,
+						  template (value) SlotNumber nslots,
+						  template (omit) IpPort bound) :=
+	ts_RSPRO(RsproPDUchoice:{
+			connectBankReq := {
+				identity := id,
+				bankId := bid,
+				numberOfSlots := nslots,
+				bound := bound
+			}
+		});
+template RsproPDU tr_RSPRO_ConnectBankReq(template ComponentIdentity id,
+					  template BankId bid,
+					  template SlotNumber nslots,
+					  template IpPort bound := *) :=
+	tr_RSPRO(RsproPDUchoice:{
+			connectBankReq := {
+				identity := id,
+				bankId := bid,
+				numberOfSlots := nslots,
+				bound := *
+			}
+		});
+
+
+template (value) RsproPDU ts_RSPRO_ConnectBankRes(template (value) ComponentIdentity id,
+						  template (value) ResultCode res) := 
+	ts_RSPRO(RsproPDUchoice:{
+			connectBankRes := {
+				identity := id,
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_ConnectBankRes(template ComponentIdentity id := ?,
+					  template ResultCode res := ?) := 
+	tr_RSPRO(RsproPDUchoice:{
+			connectBankRes := {
+				identity := id,
+				result := res
+			}
+		});
+
+
+template (value) RsproPDU ts_RSPRO_SetAtrReq(template (value) ClientSlot clslot,
+					     template (value) ATR atr) :=
+	ts_RSPRO(RsproPDUchoice:{
+			setAtrReq := {
+				slot := clslot,
+				atr := atr
+			}
+		});
+template RsproPDU tr_RSPRO_SetAtrReq(template ClientSlot clslot := ?,
+				     template ATR atr := ?) :=
+	tr_RSPRO(RsproPDUchoice:{
+			setAtrReq := {
+				slot := clslot,
+				atr := atr
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_SetAtrRes(template (value) ResultCode res) :=
+	ts_RSPRO(RsproPDUchoice:{
+			setAtrRes := {
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_SetAtrRes(template ResultCode res := ?) :=
+	tr_RSPRO(RsproPDUchoice:{
+			setAtrRes := {
+				result := res
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_TpduModemToCard(template (value) ClientSlot from_clslot,
+						   template (value) BankSlot to_bslot,
+						   template (value) TpduFlags flags,
+						   template (value) octetstring data) :=
+	ts_RSPRO(RsproPDUchoice:{
+			tpduModemToCard := {
+				fromClientSlot := from_clslot,
+				toBankSlot := to_bslot,
+				flags := flags,
+				data := data
+			}
+		});
+template RsproPDU tr_RSPRO_TpduModemToCard(template ClientSlot from_clslot := ?,
+					   template BankSlot to_bslot := ?,
+					   template TpduFlags flags := ?,
+					   template octetstring data := ?) :=
+	tr_RSPRO(RsproPDUchoice:{
+			tpduModemToCard := {
+				fromClientSlot := from_clslot,
+				toBankSlot := to_bslot,
+				flags := flags,
+				data := data
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_TpduCardToModem(template (value) BankSlot from_bslot,
+						   template (value) ClientSlot to_clslot,
+						   template (value) TpduFlags flags,
+						   template (value) octetstring data) :=
+	ts_RSPRO(RsproPDUchoice:{
+			tpduCardToModem := {
+				fromBankSlot := from_bslot,
+				toClientSlot := to_clslot,
+				flags := flags,
+				data := data
+			}
+		});
+template RsproPDU tr_RSPRO_TpduCardToModem(template BankSlot from_bslot := ?,
+					   template ClientSlot to_clslot := ?,
+					   template TpduFlags flags := ?,
+					   template octetstring data := ?) :=
+	tr_RSPRO(RsproPDUchoice:{
+			tpduCardToModem := {
+				fromBankSlot := from_bslot,
+				toClientSlot := to_clslot,
+				flags := flags,
+				data := data
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_CreateMappingReq(template (value) ClientSlot cslot,
+						    template (value) BankSlot bslot) :=
+	ts_RSPRO(RsproPDUchoice:{
+			createMappingReq := {
+				client := cslot,
+				bank := bslot
+			}
+		});
+template RsproPDU tr_RSPRO_CreateMappingReq(template ClientSlot cslot,
+					    template BankSlot bslot) :=
+	tr_RSPRO(RsproPDUchoice:{
+			createMappingReq := {
+				client := cslot,
+				bank := bslot
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_CreateMappingRes(template (value) ResultCode res) :=
+	ts_RSPRO(RsproPDUchoice:{
+			createMappingRes := {
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_CreateMappingRes(template ResultCode res) :=
+	tr_RSPRO(RsproPDUchoice:{
+			createMappingRes := {
+				result := res
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_RemoveMappingReq(template (value) ClientSlot cslot,
+						    template (value) BankSlot bslot) :=
+	ts_RSPRO(RsproPDUchoice:{
+			removeMappingReq := {
+				client := cslot,
+				bank := bslot
+			}
+		});
+template RsproPDU tr_RSPRO_RemoveMappingReq(template ClientSlot cslot,
+					    template BankSlot bslot) :=
+	tr_RSPRO(RsproPDUchoice:{
+			removeMappingReq := {
+				client := cslot,
+				bank := bslot
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_RemoveMappingRes(template (value) ResultCode res) :=
+	ts_RSPRO(RsproPDUchoice:{
+			removeMappingRes := {
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_RemoveMappingRes(template ResultCode res) :=
+	tr_RSPRO(RsproPDUchoice:{
+			removeMappingRes := {
+				result := res
+			}
+		});
+
+
+template (value) RsproPDU ts_RSPRO_ConfigClientIdReq(template (value) ClientSlot cslot) :=
+	ts_RSPRO(RsproPDUchoice: {
+			configClientIdReq := {
+				clientSlot := cslot
+			}
+		});
+template RsproPDU tr_RSPRO_ConfigClientIdReq(template ClientSlot cslot) :=
+	tr_RSPRO(RsproPDUchoice: {
+			configClientIdReq := {
+				clientSlot := cslot
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_ConfigClientIdRes(template (value) ResultCode res) :=
+	ts_RSPRO(RsproPDUchoice:{
+			configClientIdRes := {
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_ConfigClientIdRes(template ResultCode res) :=
+	tr_RSPRO(RsproPDUchoice:{
+			configClientIdRes := {
+				result := res
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_ConfigClientBankReq(template (value) BankSlot bslot,
+							template (value) IpPort ip_port) :=
+	ts_RSPRO(RsproPDUchoice: {
+			configClientBankReq := {
+				bankSlot := bslot,
+				bankd := ip_port
+			}
+		});
+template RsproPDU tr_RSPRO_ConfigClientBankReq(template BankSlot bslot,
+						template IpPort ip_port) :=
+	tr_RSPRO(RsproPDUchoice: {
+			configClientBankReq := {
+				bankSlot := bslot,
+				bankd := ip_port
+			}
+		});
+
+template (value) RsproPDU ts_RSPRO_ConfigClientBankRes(template (value) ResultCode res) :=
+	ts_RSPRO(RsproPDUchoice:{
+			configClientBankRes := {
+				result := res
+			}
+		});
+template RsproPDU tr_RSPRO_ConfigClientBankRes(template ResultCode res) :=
+	tr_RSPRO(RsproPDUchoice:{
+			configClientBankRes := {
+				result := res
+			}
+		});
+
+
+}
