osmo-ttcn3-hacks/library/OPCAP_Types.ttcn

79 lines
1.9 KiB
Plaintext

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)" };