aboutsummaryrefslogtreecommitdiffstats
path: root/library/OPCAP_Types.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/OPCAP_Types.ttcn')
-rw-r--r--library/OPCAP_Types.ttcn78
1 files changed, 78 insertions, 0 deletions
diff --git a/library/OPCAP_Types.ttcn b/library/OPCAP_Types.ttcn
new file mode 100644
index 00000000..d244fefd
--- /dev/null
+++ b/library/OPCAP_Types.ttcn
@@ -0,0 +1,78 @@
+module OPCAP_Types {
+
+/* OPCAP_Types, defining abstract TTCN-3 data types for the osmo-pcap protocol.
+ *
+ * OPCAP is a non-standard protocol used between osmo-pcap-client and osmo-pcap-server.
+ *
+ * (C) 2021 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.
+ */
+
+import from General_Types all;
+import from Osmocom_Types all;
+
+type enumerated OpcapMsgType {
+ PKT_LINK_HDR (0),
+ PKT_LINK_DATA (1)
+} with { variant "FIELDLENGTH(8)" };
+
+type record OPCAP_PDU {
+ OpcapMsgType msg_type,
+ uint8_t spare,
+ uint16_t len,
+ OpcapBodyUnion u
+} with {
+ variant (len) "LENGTHTO(u)"
+ variant (len) "BYTEORDER(last)"
+ variant (u) "CROSSTAG(
+ file, msg_type = PKT_LINK_HDR;
+ packet, msg_type = PKT_LINK_DATA;
+ )"
+};
+
+type union OpcapBodyUnion {
+ PcapFileHeader file,
+ OpcapPacket packet
+};
+
+/* header in front of a PKT_LINK_DATA */
+type record OpcapPacket {
+ uint32_t ts_sec,
+ uint32_t ts_usec,
+ uint32_t caplen,
+ uint32_t len,
+ octetstring payload
+} with {
+ variant (caplen) "LENGTHTO(payload)"
+};
+
+/* below definitions are from pcap/pcap.h */
+const uint16_t PCAP_VERSION_MAJOR := 2;
+const uint16_t PCAP_VERSION_MINOR := 4;
+const uint32_t PCAP_MAGIC := 2712847316; //0xA1B2C3D4;
+
+type record PcapFileHeader {
+ uint32_t magic,
+ uint16_t version_major,
+ uint16_t version_minor,
+ uint32_t thiszone,
+ uint32_t sigfigs,
+ uint32_t snaplen,
+ uint32_t linktype
+};
+
+/* below definitions are from pcap/dlt.h */
+const uint32_t DLT_LINUX_SLL := 113;
+const uint32_t DLT_EN10MB := 1;
+
+
+external function enc_OPCAP_PDU(in OPCAP_PDU msg) return octetstring
+ with { extension "prototype(convert) encode(RAW)" };
+
+external function dec_OPCAP_PDU(in octetstring msg) return OPCAP_PDU
+ with { extension "prototype(convert) decode(RAW)" };
+
+} with { encode "RAW"; variant "FIELDORDER(msb)"; variant "BYTEORDER(first)" };