Add GSMTAP header and message definition
diff --git a/sysinfo/GSMTAP_Types.ttcn b/sysinfo/GSMTAP_Types.ttcn
new file mode 100644
index 0000000..9e7d980
--- /dev/null
+++ b/sysinfo/GSMTAP_Types.ttcn
@@ -0,0 +1,75 @@
+module GSMTAP_Types {
+	import from Osmocom_Types all;
+
+	const uint8_t GSMTAP_VERSION	:= 2;
+
+	type enumerated GsmtapMsgType {
+		GSMTAP_TYPE_UM (1),
+		GSMTAP_TYPE_ABIS (2),
+		GSMTAP_TYPE_UM_BURST (3),
+		GSMTAP_TYPE_SIM	(4),
+		GSMTAP_TYPE_TETRA_I1 (5),
+		GSMTAP_TYPE_TETRA_I1_BURST (6),
+		GSMTAP_TYPE_WMX_BURST (7),
+		GSMTAP_TYPE_GB_LLC (8),
+		GSMTAP_TYPE_GB_SNDCP (9),
+		GSMTAP_TYPE_GMR1_UM (10),
+		GSMTAP_TYPE_UMTS_RLC_MAC (11),
+		GSMTAP_TYPE_UMTS_RRC (12),
+		GSMTAP_TYPE_LTE_RRC (13),
+		GSMTAP_TYPE_LTE_MAC (14),
+		GSMTAP_TYPE_LTE_MAC_FRAMED (15),
+		GSMTAP_TYPE_OSMOCORE_LOG (16),
+		GSMTAP_TYPE_QC_DIAG (17)
+	} with { variant "FIELDLENGTH(8)" };
+
+	type enumerated GsmtapChannel {
+		GSMTAP_CHANNEL_UNKNOWN		(0),
+		GSMTAP_CHANNEL_BCCH		(1),
+		GSMTAP_CHANNEL_CCCH		(2),
+		GSMTAP_CHANNEL_RACH		(3),
+		GSMTAP_CHANNEL_AGCH		(4),
+		GSMTAP_CHANNEL_PCH		(5),
+		GSMTAP_CHANNEL_SDCCH		(6),
+		GSMTAP_CHANNEL_SDCCH4		(7),
+		GSMTAP_CHANNEL_SDCCH8		(8),
+		GSMTAP_CHANNEL_TCH_F		(9),
+		GSMTAP_CHANNEL_TCH_H		(10),
+		GSMTAP_CHANNEL_PACCH		(11),
+		GSMTAP_CHANNEL_CBCH52		(12),
+		GSMTAP_CHANNEL_PDCH		(13),
+		GSMTAP_CHANNEL_PTCCH		(14),
+		GSMTAP_CHANNEL_CBCH51		(15)
+	} with { variant "FIELDLENGTH(8)" };
+
+	type record GsmtapHeader {
+		uint8_t		version,
+		uint8_t		hdr_len,
+		GsmtapMsgType	msg_type,
+		uint8_t		timeslot,
+		Arfcn		arfcn,
+		int8_t		signal_dbm,
+		int8_t		snr_db,
+		uint32_t	frame_number,
+		GsmtapChannel	sub_type,
+		uint8_t		antenna_nr,
+		uint8_t		sub_slot,
+		uint8_t		res
+	} with { variant (hdr_len) "LENGTHTO(version, hdr_len, msg_type, timeslot, arfcn, signal_dbm, snr_db, frame_number, sub_type, antenna_nr, sub_slot, res), UNIT(dword32)" }
+
+	external function enc_GsmtapHeader(in GsmtapHeader si) return octetstring
+		with { extension "prototype(convert) encode(RAW)" };
+	external function dec_GsmtapHeader(in octetstring stream) return GsmtapHeader
+		with { extension "prototype(convert) decode(RAW)" };
+
+	type record GsmtapMessage {
+		GsmtapHeader	header,
+		octetstring	payload optional
+	} with { variant "" };
+
+	external function enc_GsmtapMessage(in GsmtapMessage si) return octetstring
+		with { extension "prototype(convert) encode(RAW)" };
+	external function dec_GsmtapMessage(in octetstring stream) return GsmtapMessage
+		with { extension "prototype(convert) decode(RAW)" };
+
+} with { encode "RAW" };
diff --git a/sysinfo/Osmocom_Types.ttcn b/sysinfo/Osmocom_Types.ttcn
index 9368626..6fe1b57 100644
--- a/sysinfo/Osmocom_Types.ttcn
+++ b/sysinfo/Osmocom_Types.ttcn
@@ -1,15 +1,28 @@
 module Osmocom_Types {
-	type integer uint32_t (0..4294967295) with { variant "unsigned 32 bit" };
+	type integer uint8_t (0..255) with { variant "unsigned 8 bit" };
 	type integer uint16_t (0..65535) with { variant "unsigned 16 bit" };
+	type integer uint32_t (0..4294967295) with { variant "unsigned 32 bit" };
+
+	type integer int8_t (-128..127) with { variant "8 bit" };
+	type integer int16_t (-32768..32767) with { variant "16 bit" };
+
 	type integer uint2_t (0..3) with { variant "unsigned 2 bit" };
 	type integer uint3_t (0..7) with { variant "unsigned 3 bit" };
 	type integer uint4_t (0..15) with { variant "unsigned 4 bit" };
 	type integer uint5_t (0..31) with { variant "unsigned 5 bit" };
 	type integer uint6_t (0..63) with { variant "unsigned 6 bit" };
 	type integer uint7_t (0..127) with { variant "unsigned 7 bit" };
-	type integer uint8_t (0..255) with { variant "unsigned 8 bit" };
 	type integer uint9_t (0..511) with { variant "unsigned 9 bit" };
 	type integer uint10_t (0..1023) with { variant "unsigned 10 bit" };
 	type integer uint11_t (0..2047) with { variant "unsigned 11 bit" };
 	type integer uint12_t (0..4095) with { variant "unsigned 12 bit" };
+	type integer uint13_t (0..8191) with { variant "unsigned 13 bit" };
+	type integer uint14_t (0..16383) with { variant "unsigned 14 bit" };
+	type integer uint15_t (0..32767) with { variant "unsigned 15 bit" };
+
+	type record Arfcn {
+		boolean		pcs,
+		uint15_t	arfcn
+	} with { variant "" };
+
 } with { encode "RAW"; variant "FIELDORDER(msb)" }