This is provided for information purposes only. We strongly recommend that you never write a program that reads a CoralReef file directly, but instead always use libcoral (in C) or CRL.pm (in perl) to read CoralReef files. Using the libraries has many advantages, including transparent support for several different formats (even future formats), robustness, simplicity, efficiency, and portability.

CoralReef trace file format (version 9):
offset size description
0 1 long CoralReef format identifier (0x000C04A1)
4 1 long header_size
8 1 long CoralReef format version (0x80000009)
12 24 bytes reserved
36 32 byte string encoding
68 1 long encoding version
72 1 short iface_info_count
74 1 short filter_rule_count
76 256 chars comment
332 iface_info_count * sizeof(iface_info_t) array of iface_infos
? filter_rule_count * sizeof(filter_rule_t) array of filter_rules (not implemented)
? ? padding to multiple of 512 bytes
header_size? array of any number of data blocks

Interface info (iface_info) layout (version 9):
offset size description
0 1 long hw_type
4 5 long reserved
24 1 long I/O mode flags
28 1 long I/O mode first
32 1 long not used
36 1 long bandwidth
40 1 long time_is_le
44 1 long data link layer type
48 1 long timezone offset, in seconds from UTC
52 2 longs capture time (seconds and nanoseconds since 1970-01-01 00:00:00 Z)

CoralReef block layout:
offset size description
0 1 long interface number
4 1 long cells_per_blk (total number of cells allocated, typically 17475)
8 1 long cell_count (number of cells actually present)
12 1 long cells_lost (number of cells lost)
16 1 long unknown_vpi_vci (cells dropped because vpi/vci unknown)
20 2 long tbegin (time of block start in seconds and nanoseconds)
28 2 long tbegin (time of block end in seconds and nanoseconds)
36 40 bytes pad
76 cells_per_blk * sizeof(coral_atm_cell_t) array of CoralReef ATM cells

CoralReef ATM cell layout, for FATM and POINT cards:
offset size description
0 8 bytes timestamp and FIFO depth
8 1 word ATM header without HEC (note: in format version 3, this was in little endian order for fatm cards)
12 48 bytes payload

Blocks typically (but not always) contain 17475 cells, which when prefixed by a 76 byte block info structure, makes a block exactly 1 Mebibyte (1048576 bytes).