Internet DRAFT - draft-bullen-ocf

draft-bullen-ocf





INTERNET-DRAFT                                                R. Bullen 
Document: <draft-bullen-ocf-00.txt>                        Wild Packets 
Category: Informational                                   February 2001 
                                                                        
 
 
                       Open Capture Format (OCF) 
 
 
Status of this Memo 
 
   This document is an Internet-Draft and is in full conformance with 
   all provisions of Section 10 of RFC 2026 [1].  
    
   Internet-Drafts are working documents of the Internet Engineering 
   Task Force (IETF), its areas, and its working groups. Note that 
   other groups may also distribute working documents as Internet-
   Drafts. 
    
   Internet-Drafts are draft documents valid for a maximum of six 
   months and may be updated, replaced, or obsoleted by other documents 
   at any time. It is inappropriate to use Internet-Drafts as reference 
   material or to cite them other than as "work in progress." 
     
   The list of current Internet-Drafts can be accessed at 
   http://www.ietf.org/ietf/1id-abstracts.txt  
    
   The list of Internet-Draft Shadow Directories can be accessed at 
   http://www.ietf.org/shadow.html. 
    
    
Abstract 
    
   Many protocol analyzer users and vendors have identified the need 
   for an open, standards-based trace file format that allows free and 
   easy exchange of captured data, whether it originates from a data 
   network or otherwise. This document outlines the requirements of 
   such a file format and a proposal that satisfies them--the Open 
   Capture Format (OCF). 
    
    
Table of Contents 
    
   1. Introduction 
   1.1 Problem Statement 
   1.2 Mission Statement 
   2. Conventions and Definitions 
   2.1 Requirement Word Usage 
   2.2 Definitions 
   2.3 C-Style Data Types 
   3. OCF File Requirements 
   4. OCF File Structure 
   4.1 OCFAttribute Record 
   4.1.1 The Tag Field 
  
Bullen                Informational - Expiration              [Page 1] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   4.1.2 The Value Field 
   5. Special OCFAttribute Records 
   5.1 OCFAttributeBlank 
   5.2 OCFAttributeCount 
   5.3 OCFAttributeDataLength 
   5.4 OCFAttributeValueExtension 
   6 OCF File Contents and Sections 
   6.1 Preamble 
   6.1.1 Signature and Version Number 
   6.1.2 Byte Order Indicator 
   6.1.3 File Cyclic Redundancy Check (CRC) 
   6.1.4 Compression Indicator 
   6.1.5 HeaderPosition 
   6.2 OCF File Sections 
   6.2.1 Header Section 
   6.2.2 Session Section 
   6.2.3 Interface Section 
   6.2.4 ProtocolStack Section 
   6.2.5 ProtocolStackIndex Section 
   6.2.6 Address Section 
   6.2.7 Record Section 
   6.2.8 RecordIndex Section 
   7. OCF Implementation Details and Elaboration 
   7.1 Cyclic Redundancy Check (CRC) 
   8. Security Considerations 
   9. Appendicies 
   9.1 Tag Allocations 
   10. References 
   11. Acknowledgments 
   12. Author's Address 
   13. Full Copyright Statement 
 
1. Introduction 
    
1.1 Problem Statement 
    
   Currently, there are many different popular protocol analyzers in 
   the network analysis industry. One benefit of this fact is that each 
   analyzer has its own feature set and interpretation of network 
   activity and protocol decodes. It is often to the advantage of the 
   network analyst to leverage multiple analyzers when looking at trace 
   files for a "second opinion." In fact, it is common for companies to 
   have at least two different protocol analyzers. However, a major 
   stumbling block in working with multiple protocol analyzers is that 
   they do not exchange information well because each has its own 
   proprietary file format. 
    
1.2 Mission Statement 
    
   The goal of the Open Capture Format (OCF) is to develop a standards-
   based file format that all network traffic capturing devices will be 
   able to use to store data. This format will allow the easy exchange 
  
Bullen                Informational - Expiration              [Page 2] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   of traces between protocol analyzers and individuals within an 
   organization or around the world. 
    
2. Conventions and Definitions 
    
2.1 Requirement Word Usage  
    
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 
   document are to be interpreted as described in RFC 2119 [2]. 
    
2.2 Definitions 
    
2.2.1 Capture Device 
    
   The term "capture device" is used in reference to any device that 
   has the ability to locally capture and store data traffic, whether 
   it originates from a computer network (LAN, WAN, etc.) or otherwise. 
   A protocol analyzer is considered a capture device. 
    
2.2.2 OCF Reader 
    
   The term "OCF reader" is used to specify a hardware or software 
   device capable of reading and interpreting an OCF file. 
    
2.2.3 OCF Writer 
    
   The term "OCF writer" is used to specify a hardware or software 
   device capable of composing or modifying an OCF file. 
    
2.2.4 OCF Device 
    
   The term "OCF device" connotes any device that is an OCF reader, OCF 
   writer, or both. In this context it should be taken as any device 
   that has OCF capabilities. 
    
2.3 C-Style Data Types 
    
   There will be C-style code type declarations and snippets used in 
   this document to illustrate data storage and algorithms. Described 
   here are some data types that should be understood before 
   implementing an OCF device. It is left to OCF device implementers to 
   correctly declare these types in terms of native types for their 
   particular compiler/platform. 
    
    
2.3.1 Integers 
    
   Interestingly, the C language does not define fixed sizes for its 
   integer data types but rather size relations between them. For 
   example, a long integer must be greater than or equal to an integer, 
   which must be greater than or equal to a short integer. Therefore 
  
Bullen                Informational - Expiration              [Page 3] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   integer data type sizes vary by compiler/platform implementation. In 
   order to avoid ambiguity, compiler/platform prejudice, and because 
   it is expected that this file format will be supported on a wide 
   range of hardware, C integer data types (such as unsigned short and 
   unsigned long) will not be used. Instead, integer data types will be 
   declared in the following format (stated here in ABNF as specified 
   in RFC 2234 [3]): 
    
      integer-data-type = integer-sign-prefix "Int" integer-size-suffix 
       
      integer-sign-prefix = "S" / "U" 
       
      integer-size-suffix = "8" / "16" / "32" / "64" 
    
   The prefixes S and U stand for signed and unsigned, respectively, 
   and the suffix number represents the number of bits the integer 
   occupies in memory. Hence, SInt8 is a signed, 8-bit integer and 
   UInt32 is an unsigned, 32-bit integer. 
    
2.3.2 Characters and Strings 
    
   We are at a point in computer history where we are transitioning 
   from legacy single byte character sets to multi-byte character sets 
   in order to support the many glyphs required by different cultures 
   and languages around the world. The OCF reflects this fact by 
   containing both the ASCII (the predominant standard of the past) and 
   UNICODE (the standard to which the world is converging) character 
   set standards. The presence of ASCII is limited to a single place in 
   the file: the File Signature and Version Number (see 6.1.1) at the 
   very beginning. All other strings in the file will be in UNICODE 
   format. Therefore, two character types must be declared: 
    
      ASCIIChar - single-byte character type (most likely declared as a 
        char) 
      UNICODEChar - double-byte character type (most likely declared as 
        a wchar) 
    
    
3 OCF File Requirements 
    
   Several key requirements were recognized as being necessary in the 
   OCF file format: 
    
   - Use open, standards-based technology whenever possible. 
    
   - Allow files to be interchanged in a manner independent of 
     platform, vendor, and capture device. 
    
   - Be highly extensible, allowing for vendor-specific data to be 
     stored in private areas. 
    

  
Bullen                Informational - Expiration              [Page 4] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   - Allow files to carry forward previous vendor-specific, private, or 
     unrecognized information when they are rewritten. 
    
   - Be capable of storing large amounts of data (e.g. greater than the 
     32-bit/4 gigabyte boundary). 
    
   - Support multiple capture sessions within a single file (e.g. on a 
     scheduled basis). 
    
   - Support multiple capture devices per session (e.g. multiple 
     interfaces for full-duplex simulated capture). 
    
   - Contain other files as attachments (e.g. text, images, audio, 
     video, etc.). 
    
   - Allow files to be natively compressed using a standard compression 
     algorithm because of the ever-increasing speed of networks and, 
     consequently, the ever-increasing size of trace files. 
    
   - Allow for the possibility of real-time logging or streaming to 
     disk captures. 
    
   It should be noted that throughout the file format, trade-offs 
   between extensibility/interchangeability and space/performance 
   arise. In almost all cases the OCF has elected in favor of the 
   former as it reflects the OCF file format's top priority. 
    
4 OCF File Structure 
    
   The OCF file format is a tag-based schema, similar to the popular 
   tagged image file format (TIFF), where a unique tag is used for each 
   element or attribute in the file. This section of the draft 
   describes the structure and interpretation of the OCF tagging 
   system. 
    
4.1 OCFAttribute Record 
    
   The OCF file structure employs a tag-value attribute pair, known as 
   the OCFAttribute record, to identify, store, and locate data in the 
   OCF file. The OCFAttribute record is 6 octets in size and is 
   composed of a 2-octet Tag field followed by a 4-octet Value field. 
   Below is a C-style example declaration of the OCFAttribute record. 
    
      typedef struct { 
         UInt16   Tag; 
         UInt32   Value; 
      } OCFAttribute; 
    
4.1.1 The Tag Field 
    
   The Tag field of an OCFAttribute record will always be interpreted 
   as a 16-bit unsigned integer (which can contain values 0-65,535) and 
  
Bullen                Informational - Expiration              [Page 5] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   will always be an indicator of how to interpret the Value field. Tag 
   ranges are allocated as follows: 
    

       Decimal  Hex    Description 
       -----    -----  ----- 

       0-       0000-  Special OCFAttribute records. 
       127      007F 

       128-     0080-  Reserved for future use. 
       255      00FF 

       256-     0100-  Globally defined, well-known OCFAttributes 
       16,383   03FF   (currently grouped into blocks of 32 per 
                        section with gaps of 32 in between for 
                        expansion). 

       16,384-  0400-  Reserved for future use. 
       32,767   07FF 

       32,768-  0800-  Reserved for private use by individual vendors 
       65,279   FEFF   for implementation-specific features. However, 
                        tags in this range cannot be used until they 
                        are officially allocated to vendors upon 
                        request to and approval by the governing OCF 
                        standards body. This tag space will be 
                        allocated to vendors in blocks of 16. 
                         

       65,280-  FF00-  Reserved for public use by any party that 
       65,534   FFFE   wishes to implement site-specific or 
                        experimental features. The OCF standards body 
                        will not monitor these tags. Parties should use 
                        them at their own risk and only if the OCF 
                        files will not propagate out of the site. 
                         

       65,535   FFFF   Reserved for future use. 

    
4.1.2 The Value Field 
    
   The meaning of the Value field of an OCFAttribute record will be 
   dependent upon the Tag and doesnĘt necessarily have to represent an 
   unsigned integer or even an ordinal at all, but it will always be 32 
   bits in size. Some commonly used interpretations of the Value field 
   are defined below: 
    
   - UInt32: A 32-bit unsigned integer that stores a numerical value or 
     bit-field. 
    
   - Offset: A 32-bit unsigned integer that stores the position of data 
     within the file relative to the beginning (0 = nil/null/empty). In 
     this document, the word "pointer" will be used loosely with regard 
     to this data type and should be interpreted to mean, "offset into 
     the file" or "position in the file." 
    



  
Bullen                Informational - Expiration              [Page 6] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   The OCF shall attempt to preserve the meaning of the Value field set 
   to all 0s and all 1s as "ignored" and "unknown", respectively, where 
   applicable. 
    
    
5 Special OCFAttribute Records 
    
   The OCF has recognized the need for several special OCFAttribute 
   records. These attributes help reduce the requirements for an OCF 
   device to know of a large number of predefined tags and to allow for 
   changes in a tag to be accommodated without necessarily requiring 
   changes in existing code. Tags in the reserved range 0-127 will 
   identify these special OCFAttribute records, as specified in 4.1.1. 
    
5.1 OCFAttributeBlank 
    
   The OCFAttributeBlank attribute has been reserved for use as a 
   simple blank space or as a temporary placeholder. As a blank space, 
   it can be used anytime a pad of zeros in the OCF file is desired. As 
   a placeholder, this attribute can be used when writing to an OCF 
   file is required but certain data that must exist in the file but is 
   not available until a later time. When the data finally is known, 
   the OCF writer can go back and replace the placeholder attribute by 
   the real attribute. Whenever an OCF reader encounters an 
   OCFAttributeBlank record, the attribute should be ignored. 
    
   Tag: 0 
   Value: UInt32 = 0 (should be ignored but must always be set to zero) 
    
5.2 OCFAttributeCount 
    
   The OCFAttributeCount attribute specifies the number of OCFAttribute 
   records immediately following it. This must be the first attribute 
   at the beginning of a section, or series of attribute records, so 
   that the OCF reader knows how many attributes to read in before 
   moving on to a new section. This also allows the reader to read in a 
   series of attributes at one time, possibly making the reader more 
   efficient. 
    
   Tag: 1 
   Value: UInt32 (indicates the number of immediately following 
     OCFAttribute records) 
    
5.3 OCFAttributeDataLength 
    
   The OCFAttributeDataLength is used in conjunction with variable 
   length data such as frames, character strings, or attached/embedded 
   files. Any time an OCF reader jumps from an Offset which pointed to 
   a variable length data item, this must be the first record 
   encountered. There are many benefits to reserving a single tag for 
   length. One is that when storing variable sized items, such as user 
   comments, file attachments, frame data, and vendor specific data 
  
Bullen                Informational - Expiration              [Page 7] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   areas, there need not be two predefined tags for each--the first 
   identifying the position and the second identifying the length. 
   Another is that this allows chained data, such as frames, to be 
   placed sequentially in the file and easily traversed. By looking at 
   the OCFAttributeDataLength record and seeking forward by the amount 
   specified in the Value field, the next read operation would be 
   positioned at the next OCFAttribute structure. Of course, an 
   OCFAttributeDataLength with Value set to 0 will be an ending 
   delimiter. Third, vendor specific information can be carried along 
   with the file, even if another vendor reads and rewrites the file. 
    
   Tag: 2 
   Value: UInt32 (indicates the number of octets of data immediately 
     following the OCFAttributeDataLength record) 
    
5.4 OCFAttributeValueExtension 
    
   The OCFAttributeValueExtension immediately precedes any OCFAttribute 
   whose Value field needs to be extended in size to a multiple of 32-
   bits. By positioning it in front of (rather than behind) the value 
   it modifies and making it the upper 32 bits, it won't be necessary 
   to emember the last attribute read and modify it when encountering 
   the CFAttributeExtension. Instead, when encountering the 
   OCAttributeExtension, just shift its Value field left by 32 bits and 
   perform a bitwise OR with the next attribute to obtain a 64-bit 
   value. The actual OCFAttribute's Value field that is being modified 
   does not change and remains the low order 32 bits of the 
   concatenated bit string. This operation is chainable. That is, if 
   two OCFAttributeExtensions are found in succession, then 64 bits 
   will be added to the next 32-bit value, yielding a 96-bit Offset or 
   unsigned integer, etc. Of course, it shouldn't be used in place of a 
   pointer to a large chunk of data. By using the 
   OCFAttributeValueExtension with offset data types, the problem of 
   the 4-gigabyte file limitation (due to the Offset data types being 
   32 bits) is solved. Another example of this attribute's usefulness 
   is not having to define two attributes for one piece of information. 
   Imagine that there is an OCFAttribute identified by Tag = 100. The 
   Value portion is a bit-field consisting of 32 flags. Several years 
   after this attribute has been standardized, a 33rd bit flag is 
   required. Rather than defining a new attribute with a new Tag 
   (probably not even close to 100, so it isn't even logically grouped) 
   and Value, one can use the OCFAttributeValueExtension attribute and 
   the new flag can be viewed as the high-order 33rd bit. 
    
   Tag: 3 
   Value: (interpretation dependent upon immediately succeeding 
     attribute) 
    
    
6 OCF File Contents and Sections 
    

  
Bullen                Informational - Expiration              [Page 8] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   This section of the OCF Draft describes the different sections 
   present in an OCF file and how they are organized. 
    
   Some special notes about the contents of the file are: 
    
   - All strings in the file, such as comments, must be in UNICODE 
     format, with the exception of the File Signature and Version 
     Number, which is located in the OCF File Preamble at the beginning 
     of the file and will be a US-ASCII string. UNICODE is a fully 
     compatible implementation of the ISO/IEC 10646-1:2000 standard. 
    
6.1 Preamble 
    
   The OCF Preamble occupies the first 256 bytes of the file. Its 
   purpose is to provide vital information needed to proceed reading 
   the file. It contains the following fields: 
    
   - Signature and Version Number: Identifies the file as OCF and in 
     which version of the OCF standard the file is structured. 
    
   - Byte Order Indicator: Indicates the byte ordering of the file. 
    
   - File Cyclic Redundancy Check (CRC) - Provides a means for 
     validating the contents of the file. 
    
   - Compression Indicator: Indicates whether the remainder of the file 
     is compressed. 
    
   - HeaderPosition: An OCFAttribute structure that specifies the 
     position of the Header section, which is the starting point and 
     table of contents of the file. 
    
   The preamble is the only portion of the file that does not 
   completely conform to the OCFAttribute tagged-value format. Instead 
   it can be easily accessed through the following C-style structure: 
 
      typedef struct { 
         ASCIIChar[208]   SignatureAndVersionNumber; 
         UInt8            ByteOrderIndicator; 
         UInt32           FileCRC; 
         UInt8            CompressionIndicator; 
      } OCFPreamble; 
    
   The ordering of fields within the OCFPreamble structure reflects the 
   way in which an OCF device would parse an OCF file. First, the OCF 
   device confirms that the file is truly in OCF format by checking the 
   Signature and Version Number. Next, the OCF device must know which 
   byte ordering the file is in and so it consults the 
   ByteOrderIndicator. Once the byte ordering is known, the FileCRC can 
   be reordered if necessary and used to validate the contents of the 
   file. Finally, before accessing the actual data content of the file, 
   the OCF device must know whether the file is in compressed form. 
  
Bullen                Informational - Expiration              [Page 9] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
    
   Notice that the HeaderPosition, although considered part of the 
   preamble, is not included in the OCFPreamble structure's 
   declaration. This is due to the fact that the HeaderPosition is an 
   OCFAttribute, which may have one or more OCFAttributeValueExtension 
   attributes preceding it. See the HeaderPosition explanation for more 
   information. Each of the preamble fields is described in more detail 
   below. 
    
6.1.1 Signature and Version Number 
 
   The OCF Signature and Version Number is the first field in the OCF 
   File Preamble and therefore the first data encountered in the file. 
   It occupies the first 208 bytes (not all of them used at this point) 
   and consists of a human readable US-ASCII character string 
   containing the file signature and version number. This is to 
   uniquely identify and verify OCF documents without regard to file 
   name/extension or state of the OCF file layout. The OCF file 
   signature is "Open Capture Format (OCF) Document", followed 
   immediately by a carriage-return line-feed character sequence 
   (0x0D0A in hexadecimal). The file version string has the format 
   "Version: x.y", where x and y are whole numbers greater than or 
   equal to zero, and which is also followed by the carriage-return 
   line-feed character sequence. Once the standard is in working 
   practice, the version number will commence at 1.0. For testing 
   purposes and implementations used before then, it is recommended 
   that OCF writers use version numbers less than that. The two strings 
   are concatenated together and terminated with the null character 
   (0x00) followed by the SUB or Ctrl-Z character (more commonly known 
   as the "end of file" character) or (0x1A). The remaining unused 
   portion (the 156 bytes following the currently 56-byte long 
   signature and version) of the 208 bytes must be set to all zeros or 
   null characters. Hence, the very beginning of all official OCF files 
   after this format has been put into working practice shall be as 
   follows (where hexadecimal values between angle brackets are 
   interpreted as the literal value of the associated characters and 
   with no line breaks): 
    
      Open Capture Format (OCF) Document<0x0D0A>Version: 
      1.0<0x0D0A><0x00><0x1A><0x00><0x00>...<0x00>...<0x00><0x00> 
    
   Or as it would appear outputted to a terminal: 
    
      Open Capture Format (OCF) Document 
      Version: 1.0 
      ^Z 
    
   The contents of the file signature and version number string may 
   change over time and so, too, will the length of the string. 
   Therefore, it is recommended that OCF implementers scan for the 
   "Version: " sub-string to find the version number rather than 

  
Bullen                Informational - Expiration             [Page 10] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   seeking to absolute positions in the file and assuming that the file 
   contents will properly align with hard-coded offsets. 
    
   Interpretation and incrementing of the Version number shall be as 
   follows: additions impose minor version increments; changes impose 
   major version increments. Any small additions to the standard will 
   cause a minor version increment where the y is incremented in the 
   x.y version format. A small addition is defined as any feature that 
   can be safely introduced to the standard without requiring 
   modifications to the way an OCF device reads, writes, or interprets 
   the file structure. In other words, if a new feature is added and an 
   older OCF device reads a file that contains the new feature, no 
   compatibility issues will arise, assuming that the OCF device 
   ignores the new feature as it should. Therefore, all OCF readers 
   implementing version 1.0 of the standard should theoretically be 
   able to read 1.9 versions of the standard. Hence, backward 
   compatibility is the primary concern when implementing new 
   additions.  
    
   Major version increments (x is incremented in the x.y version 
   format) will occur when significant changes are made to the standard 
   such that there may be compatibility issues when older OCF devices 
   try to read new versions of the file. For example, if the OCF 
   standards body runs out of tag-space and decides to make tags 32 
   bits instead of 16-bits, then this is a major version increment 
   because, obviously, that change would break all existing code. 
    
6.1.2 Byte Order Indicator 
    
   The second field of the OCF Preamble is the Byte Order Indicator, 
   which is one octet long. This field is necessary to fulfill the 
   platform independent goal of this file format. Rather than having a 
   single, mandatory byte ordering, the OCF allows for two byte 
   orderings: big endian and little endian. This is advantageous for 
   sites that use nearly all one platform and/or specialized capture 
   hardware. By allowing sites to use native byte ordering while 
   reading and writing to a file, the performance penalty of 
   rearranging bytes to conform to the mandatory ordering is not 
   incurred every time a file is read or written. Instead, the penalty 
   is only encountered when exchanging an OCF file between platforms. 
   In addition, specialized hardware or software that writes to disk as 
   it captures doesn't have to deal with the overhead of byte reversing 
   or swapping. The possible values that the Byte Order Indicator can 
   hold and their meanings are: 
    
   - 0x00: Little endian. 
   - 0x01: Big endian. 
   - 0x02 - 0xFF: Reserved for future use. 
    
   Byte ordering pertains to all data structures in the file except for 
   the following items: 
    
  
Bullen                Informational - Expiration             [Page 11] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   - Frames and cells will maintain network byte ordering. In other 
     words, frames and cells will be stored in exactly the same byte 
     order as they appeared on the network.  
    
   - MAC addresses in the Address section will be stored in canonical 
     format (or Ethernet format), which is the way the IEEE chooses to 
     represent and allocate Organizationally Unique Identifiers (OUIs).  
    
   - All other (non-MAC) addresses will be stored in network order.  
    
   - UNICODE character strings are exempt from byte ordering when it 
     comes to storage because the UNICODE standard specifies that they 
     are a sequence of two-byte characters with the most significant 
     byte positioned in front of the least significant byte (canonical 
     form). 
 
6.1.3 File Cyclic Redundancy Check (CRC) 
    
   The File Cyclic Redundancy Check (CRC) is a 32-bit value in the 
   third field of the OCF Preamble and is used to verify that the 
   contents of the OCF file have not been corrupted. The CRC is 
   calculated using the standard CCITT crc32 algorithm with the divisor 
   polynomial 0x04C11DB7 over the entire length of the final file 
   (after compression is applied if it is used) with the CRC field set 
   to zero. The calculation of this field is optional and must be set 
   to zero if the CRC calculation is not performed. If the file CRC has 
   been calculated (non-zero), then an OCF reader should verify that 
   the file is valid by computing the CRC on its own and comparing it 
   to the one present in the file. 
    
   For more information on the CRC and the algorithm used to implement 
   it, see the OCF Implementation Details and Elaboration section. 
 
6.1.4 Compression Indicator 
    
   The Compression Indicator is a one-octet field that occupies the 
   forth position in the OCF Preamble. Its purpose is to indicate 
   whether compression was used for the remainder of the file beginning 
   immediately after the OCF Preamble (after the HeaderPosition). The 
   possible values that the Compression Indicator can hold and their 
   meanings are: 
    
   - 0x00: Compression is not used. 
   - 0x01: DEFLATE compression is used. 
   - 0x02 - 0xFF: Reserved for future use. 
    
   For information on how compression is used in the OCF format, see 
   the OCF Implementation Details and Elaboration and the DEFLATE 
   reference []. 
    
6.1.5 HeaderPosition 
    
  
Bullen                Informational - Expiration             [Page 12] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   The HeaderPosition is the fifth and final field in the OCF Preamble. 
   It is the first OCFAttribute found in the file and is simply a 
   position specifier for the Header section, which is the starting 
   place for obtaining all other information in the file. This 
   attribute is subject to an OCFAttributeValueExtension attribute 
   preceding it in the event that the Header section is located beyond 
   4 GB into the file. 
    
   If compression is used in the file, then it will commence 
   immediately after the HeaderPosition attribute. 
    
6.2 OCF File Sections 
    
   This portion of the OCF Draft outlines the logical grouping of 
   related data, or rather OCFAttributes describing and pointing to 
   data, into sections. Each section has its own range of attribute 
   tags, so if you know the value of an attribute's Tag field, you can 
   determine the section in which it belongs. 
    
   Each section has an OCFAttribute that points to it from other 
   sections. This attribute will be called the section's Position 
   attribute and will have a name of the format <section_name>Position. 
   For example HeaderPosition is the position attribute for the Header 
   section. The position attribute will own the lowest possible tag 
   number in a section's tag-space. For example, the Header section, 
   which identifies the creator of an OCF file and/or capture session, 
   occupies the tag-space 512-639. Hence, the HeaderPosition attribute 
   has a Tag value of 512. 
    
   In general, there are no specific ordering requirements for 
   attributes within a section. One exception is that the 
   OCFAttributeCount must be the first attribute found in every 
   section, so that the reader knows how many OCFAttribute records are 
   present in the section. Another exception, which is common sense but 
   is stated for completeness, is that any Index section that acts as 
   an ordered lookup table must have all of its position attributes in 
   order. For example, the RecordIndex section, which is an ordered 
   table of all stored frames and/or cells captured in a session, will 
   have the OCFAttributeCount as its first attribute as all sections 
   do. The OCFAttributeCount attribute must be followed by a 
   RecordPosition pointer as its first attribute, RecordPosition1 as 
   its second attribute,..., RecordPositionN as its final attribute. 
   Succinctly, no ordering of attributes is assumed in a section unless 
   otherwise stated. All of the sections described here have attribute 
   tags ordered numerically for the sake of convenience only. 
   Keep in mind that when an attribute has a description saying 
   something to the effect of "pointer to character string", "pointer 
   to private data", or pointer to anything that is of variable length, 
   that it is actually a pointer to an OCFAttributeDataLength record 
   that specifies the length of the immediately following data.  
    

  
Bullen                Informational - Expiration             [Page 13] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   There is a table in each section below that presents all of the 
   possible attributes that can be found in it. Here is an example of 
   one of these tables and an explanation of what each column means. 
    

       Attribute          Tag Tag   Value   Count  Description 
       Name               Dec Hex   Type            
       -----              --- ---   -----   -----  ----- 

       OCFAttributeCount    1 0001  UInt32  1      Specifies the 
                                                    number of 
                                                    immediately 
                                                    following 
                                                    attributes in this 
                                                    section. Must be 
                                                    the first attribute 
                                                    in the section. 

    
    
    
    
    
    
    
    
    
    
    
    
    
   The Attribute Name column specifies a name for the attribute that is 
   used in this text and can be used as a constant identifier in code. 
    
   The Tag Dec and Tag Hex columns give the 16-bit value of of the 
   attribute's tag. 
    
   The Value Type column displays the way the attribute's 32-bit Value 
   field should be interpreted. 
    
   The Description column provides a brief summary of what the purpose 
   of attribute is and any other additional comments that are relevant. 
    
   The Count column is used to indicate how many of the attribute can 
   appear in a section. For example, a 0/1 means that the attribute is 
   optional but if it is present then there can be only one. 0+ in the 
   count column means zero or more. A 1 means there must be one and 
   only one of the attribute in the section. A 1+ means at least one of 
   the attribute must be present but there could be more. 
    
6.2.1 Header Section 
    
   The Header section acts as a table of contents. Its position in an 
   OCF file is not restricted to the beginning and in fact can be 

  
Bullen                Informational - Expiration             [Page 14] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   positioned anywhere in the file. The Header section is located by 
   following the HeaderPosition located in the OCF File Preamble. 
    
   The reason for allowing the Header section to be anywhere in the 
   file is for flexibility when rewriting an OCF file. For example, if 
   a new capture session is to be appended to an existing file, then 
   the header will need to be changed and expanded by a few bytes. In 
   this case, rather than completely rewriting the file, it is much 
   less resource intensive to position the updated header at the new 
   end of the file and update the HeaderPosition attribute at the 
   beginning of the file. 
    
   The Header section is referenced from the OCF File Preamble's 
   HeaderPosition field. 
    
   Header section tag space: 256-287 (0100-011F) 
   HeaderPosition.Tag = 256 
    

       Attribute            Tag Tag   Value   Count  Description 
       Name                 Dec Hex   Type            
       -----                --- ---   -----   -----  ----- 

       OCFAttributeCount      1 0001  UInt32  1      Specifies the 
                                                      number of 
                                                      immediately 
                                                      following 
                                                      attributes in 
                                                      this section. 
                                                      Must be the first 
                                                      attribute in the 
                                                      section. 

       HeaderComment        257 0101  Offset  0+     Pointer to a 
                                                      comment string 
                                                      describing the 
                                                      contents of the 
                                                      file. 

       HeaderAttachment     258 0102  Offset  0+     Pointer to an 
                                                      Attached file. 

       SessionPosition      320 0140  Offset  1+     Pointer to a 
                                                      Session section 
                                                      describing a 
                                                      single capture 
                                                      session. There 
                                                      must be one for 
                                                      each capture 
                                                      session contained 
                                                      in the file. 

 
6.2.2 Session Section 
    



  
Bullen                Informational - Expiration             [Page 15] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   The Session section contains all data relating to a single capture 
   session in the OCF file. An OCF file can contain any number of 
   capture sessions from different times and capture devices. 
    
   The Session section is referenced from the Header section. 
    
   Session section tag space: 320-351 (0140-15F) 
   SessionPosition.Tag = 320 
    

       Attribute                Tag Tag  Value  Count Description 
       Name                     Dec Hex  Type          
       -----                    --- ---  -----  ----- ----- 

       OCFAttributeCount          1 0001 UInt32 1     Specifies the 
                                                         number of 
                                                         immediately 
                                                         following 
                                                         attributes in 
                                                         this section. 
                                                         Must be the 
                                                         first 
                                                         attribute in 
                                                         the section. 

       SessionComment           321 0141 Offset 0+    Pointer to a 
                                                         comment 
                                                         describing the 
                                                         contents of 
                                                         this capture 
                                                         session. 

       SessionID                322 0142 UInt32 1     Zero-based 
                                                         index 
                                                         identifying 
                                                         the session 
                                                         within the 
                                                         file (0 = 1st 
                                                         session, 1 = 
                                                         2nd session, 
                                                         etc.). 

       SessionStartTime         323 0143 UInt32 1     Value 
                                                        representing 
                                                         the capture 
                                                         start time for 
                                                         this session 
                                                         in seconds 
                                                         since since 
                                                         00:00:00 GMT, 
                                                         January 1, 
                                                         1970 (see the 
                                                         C standard 
                                                         library time() 
                                                         function for 
                                                         more 

  
Bullen                Informational - Expiration             [Page 16] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                         information). 

       SessionStopTime          324 0144 UInt32 0/1   Value 
                                                         representing 
                                                         the capture 
                                                         stop time for 
                                                         this session 
                                                         in seconds 
                                                         since 00:00:00 
                                                         GMT, January 
                                                         1, 1970 (see 
                                                         the C standard 
                                                         library time() 
                                                         function for 
                                                         more 
                                                         information). 

       SessionVendorDescription 325 0145 Offset 0/1   Pointer to a 
                                                         string 
                                                         describing the 
                                                         vendor company 
                                                         and capture 
                                                         device from 
                                                         which the 
                                                         session was 
                                                         created. 

       InterfacePosition        384 0180 Offset 1+    Pointer to an 
                                                         Interface 
                                                         section 
                                                         describing the 
                                                         interface used 
                                                         for capturing. 
                                                         There must be 
                                                         one for each 
                                                         interface used 
                                                         during this 
                                                         capture 
                                                         session. 

       AddressPosition          576 0240 Offset 0/1   Pointer to the 
                                                         first Address 
                                                         section for 
                                                         this session 
                                                         from which all 
                                                         other 
                                                         addresses can 
                                                         be found in a 
                                                         linked list 
                                                         fashion. 

       RecordPosition           640 0280 Offset 1     Pointer to the 
                                                         first Record 
                                                         section for 
                                                         this session 
                                                         from which all 

  
Bullen                Informational - Expiration             [Page 17] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                         other records 
                                                         can be found 
                                                         in a linked 
                                                         list fashion. 

       RecordIndexPosition      704 02C0 Offset 0/1   Pointer to a 
                                                         RecordIndex 
                                                         section. 
                                                         Present only 
                                                         if the 
                                                         optional 
                                                         RecordIndex 
                                                         section has 
                                                         been 
                                                         generated. 

    
   Note: Although it appears that the SessionStartTime and 
   SessionStopTime attributes do not provide ample storage for the 
   number of seconds since midnight Jan. 1, 1970, it is believed that 
   the C standard library function time() will be expanded or a new 
   version of the time() function will be created to return a 64-bit 
   value. At that time using the OCFAttributeValueExtension in 
   conjunction with the SessionStartTime and SessionStopTime will 
   accommodate the 64-bit value returned by that function. 
    
    
6.2.3 Interface Section 
    
   The Interface section describes a single interface used during a 
   capture session. There may be multiple interfaces used per session. 
    
   The Interface section is referenced from the Session section and 
   Record section. 
    
   Interface section tag space: 384-415 (0180-019F) 
   InterfacePosition.Tag = 384 
    

       Attribute                Tag Tag  Value  Count Description 
       Name                     Dec Hex  Type          
       -----                    --- ---  -----  ----- ----- 

       OCFAttributeCount          1 0001 UInt32 1     Specifies the 
                                                         number of 
                                                         immediately 
                                                         following 
                                                         attributes in 
                                                         this section. 
                                                         Must be the 
                                                         first 
                                                         attribute in 
                                                         the section. 

       InterfaceComment         385 0181 Offset 0+    Pointer to a 
                                                         comment 

  
Bullen                Informational - Expiration             [Page 18] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                         describing the 
                                                         configuration 
                                                         of this 
                                                         interface. 

       InterfaceID              386 0182 UInt32 1     Zero-based 
                                                         index 
                                                         identifying 
                                                         the interface 
                                                         within the 
                                                         session (0 = 
                                                         1st interface, 
                                                         1 = 2nd 
                                                         interface, 
                                                         etc.). 

       InterfaceTopology        387 0183 UInt32 1     Constant 
                                                         indicating the 
                                                         topology this 
                                                         Interface 
                                                         connects to. 

       InterfaceBandwidth       388 0184 UInt32 1     Integer 
                                                         representing 
                                                         the data rate 
                                                         of this 
                                                         interface in 
                                                         bits per 
                                                         second. 

       InterfaceChannelCount    389 0185 UInt32 1     Value 
                                                         indicating the 
                                                         number of 
                                                         communication 
                                                         channels this 
                                                         interface 
                                                         possesses. As 
                                                         an example, 
                                                         half-duplex 
                                                         and full-
                                                         duplex 
                                                         interfaces 
                                                         have one and 
                                                         two channels, 
                                                         respectively. 

       ProtocolStackPosition    448 01C0 Offset 1     Pointer to a 
                                                         record that 
                                                         begins a new 
                                                         protocol 
                                                         stack. Used 
                                                         for decoding 
                                                         purposes. 

       AddressPosition          576 0240 Offset 0/1   Pointer to an 
                                                         Address 
                                                         section having 

  
Bullen                Informational - Expiration             [Page 19] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                         both the 
                                                         hardware 
                                                         address and 
                                                         name of this 
                                                         interface. 

 
   Note: At first glance, the InterfaceBandwidth attribute seems to 
   have the limitation that it can only support bandwidths up to 4 GB. 
   However, the OCFAttributeValueExtension can be used to expand the 
   32-bit value to any bandwidth. 
    
6.2.4 ProtocolStack Section 
    
   The ProtocolStack section is designed to assist OCF devices with 
   protocol decoding by providing a protocol encapsulation list. 
    
   Currently, this section is undefined, but is intended to be an 
   ordered series of protocol identifiers (constants) that represent 
   the encapsulation of one or more frames. For example, an HTTP packet 
   running over an Ethernet using 802.3 encapsulation would be 
   represented by a series of protocol identifiers in the following 
   order: 802.3, IP, TCP, HTTP. Obviously the most important piece of 
   information is the first layer of encapsulation because all other 
   layers can usually be derived from the previous layer. But, the 
   ProtocolStack section can also be useful in implementing protocol 
   forcing, where protocol decodes can be imposed upon the interpreting 
   OCF device. 
    
   The ProtocolStack section is referenced from the ProtocolStackIndex 
   section. 
    
   ProtocolStack section tag space: 448-479 (01C0-01DF) 
   ProtocolStackPosition.Tag = 448 
    

       Attribute              Tag Tag   Value   Count  Description 
       Name                   Dec Hex   Type            
       -----                  --- ---   -----   -----  ----- 

       OCFAttributeCount        1 0001  UInt32  1      Specifies the number 
                                                         of immediately 
                                                         following attributes 
                                                         in this section. 
                                                         Must be the first 
                                                         attribute in the 
                                                         section. 

       ProtocolStackComment   449 01C1  Offset  0+     Pointer to a comment 
                                                         describing this 
                                                         protocol stack. 

       ProtocolStackID        450 01C2  UInt32  1      Zero-based index 
                                                         identifying the 
                                                         protocol stack 
                                                         within the 

  
Bullen                Informational - Expiration             [Page 20] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                         ProtocolStackIndex 
                                                         section (0 = 1st 
                                                         protocol stack, 1 = 
                                                         2nd protocol stack, 
                                                         etc.). 

    
    
6.2.5 ProtocolStackIndex Section 
    
   The ProtocolStackIndex section functions as an array of pointers to 
   ProtocolStack sections. 
    
   The ProtocolStackIndex section is referenced from the Interface 
   section. 
    
   ProtocolStackIndex tag space: 512-543 (0200-021F) 
   ProtocolStackIndex.Tag = 512 
    

       Attribute             Tag Tag  Value  Count Description 
       Name                  Dec Hex  Type          
       -----                 --- ---  -----  ----- ----- 

       OCFAttributeCount       1 0001 UInt32 1     Specifies the number 
                                                     of immediately 
                                                     following attributes 
                                                     in this section. Must 
                                                     be the first 
                                                     attribute in the 
                                                     section. 

       ProtocolStackPosition 448 01C0 Offset 1+    Pointer to a 
                                                     ProtocolStack 
                                                     section. There is a 
                                                     ProtocolStackPosition 
                                                     attribute present for 
                                                     each ProtocolStack 
                                                     section used by the 
                                                     interface from which 
                                                     this section was 
                                                     referenced. 

    
    
6.2.6 Address Section 
    
   The Address section describes a single address, whether it be a 
   physical or network address, and any symbolic name(s) associated 
   with that address. 
    
   The Address section is referenced from the Session section, 
   Interface section, and other Address sections. 
    
   Address section tag space: 576-607 (0240-025F) 
   AddressPosition.Tag = 576 

  
Bullen                Informational - Expiration             [Page 21] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
    

       Attribute           Tag Tag  Value  Count Description 
       Name                Dec Hex  Type          
       -----               --- ---  -----  ----- ----- 

       OCFAttributeCount     1 0001 UInt32 1     Specifies the number 
                                                   of immediately 
                                                   following attributes 
                                                   in this section. Must 
                                                   be the first attribute 
                                                   in the section. 

       AddressComment      577 0241 Offset 0+    Pointer to a character 
                                                   string that explains 
                                                   or expands upon the 
                                                   AddressName. 

       AddressID           578 0242 UInt32 1     Zero-based index 
                                                   identifying the 
                                                   address within the 
                                                   address linked list. 

       AddressNextPosition 579 0243 Offset 1     Pointer to the next 
                                                   Address section in the 
                                                   list of addresses. 

       AddressParentID     580 0244 UInt32 0+    Index of a lower layer 
                                                   Address section that 
                                                   is used on the same 
                                                   hardware device or 
                                                   station. For example, 
                                                   an IP address may have 
                                                   an AddressParentID 
                                                   that is the index of 
                                                   the MAC Address 
                                                   section for the same 
                                                   interface. 

       AddressType         581 0245 UInt32 1     Constant indicating 
                                                   the type of address. 
                                                   These constants have 
                                                   yet to be defined. 

       AddressData         582 0246 Offset 1     Pointer to the actual 
                                                   address. For a MAC 
                                                   address, this will 
                                                   point to a 6-byte long 
                                                   structure (preceded by 
                                                   an 
                                                   OCFAttributeDataLength 
                                                   record). All MAC 
                                                   addresses will be 
                                                   stored in canonical 
                                                   form, all other 
                                                   addresses will be 
                                                   stored in network 
                                                   order. 

       AddressName         583 0247 Offset 0+    Pointer to a character 

  
Bullen                Informational - Expiration             [Page 22] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                   string representing 
                                                   the symbolic name 
                                                   associated with this 
                                                   address. There should 
                                                   be one for each name. 

    
    
6.2.7 Record Section 
    
   The Record section is where an individual captured frame or cell is 
   stored. In addition, the Record section can be used to store inter-
   frame events or information, such as collisions, dropped frames, 
   line state changes, etc. Different attributes will be required 
   depending upon whether the Record section describes a frame or an 
   event, but there will be some attributes that are common to both. 
   Thus, there are three tables below: attributes common to both frames 
   and events, attributes only for frames, and attributes only for 
   events. Although the time stamps are common to both frames and 
   event, instead of being in the first table, they are found in both 
   the event table and the frame table. The time stamp attribute is the 
   same in both cases but its presence has different requirements 
   depending on whether it is stamping a frame or an event. 
    
   The Record section is referenced from the RecordIndex section, 
   Session section, and other Record sections. 
    
   Record section tag space: 640-671 (0280-029F) 
   RecordPosition.Tag = 640 
    
   Attributes common to both frames and events: 
    

       Attribute              Tag Tag  Value  Count Description 
       Name                   Dec Hex  Type          
       -----                  --- ---  -----  ----- ----- 

       OCFAttributeCount        1 0001 UInt32 1     Specifies the 
                                                      number of 
                                                      immediately 
                                                      following 
                                                      attributes in this 
                                                      section. Must be 
                                                      the first attribute 
                                                      in the section. 

       RecordComment          641 0281 Offset 0+    Pointer to a 
                                                      character string 
                                                      that explains or 
                                                      expands upon this 
                                                      frame or event. 

       RecordID               642 0282 UInt32 0/1   A zero-based index 
                                                      of the frame or 
                                                      event's position 
                                                      within the capture 

  
Bullen                Informational - Expiration             [Page 23] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                      session. This 
                                                      attribute is 
                                                      optional but its 
                                                      presence is either 
                                                      ubiquitous or 
                                                      nonexistent. That 
                                                      is, if one record 
                                                      has a RecordID, all 
                                                      records must have a 
                                                      RecordID; if one 
                                                      record does not 
                                                      have a RecordID, 
                                                      all records must 
                                                      not have a 
                                                      RecordID. 

       RecordInterfaceID      643 0283 UInt32 0/1   Index of the 
                                                      Interface section 
                                                      describing the 
                                                      interface on which  
                                                      this event occurred 
                                                      or from which this 
                                                      frame was captured. 
                                                      Present when there 
                                                      are multiple 
                                                      Interface sections 
                                                      in the Session 
                                                      section, meaning 
                                                      multiple interfaces 
                                                      were used for the 
                                                      capture. 

       RecordInterfaceChannel 644 0284 UInt32 0/1   A zero-based index 
                                                      that indicates the 
                                                      channel of 
                                                      communication from 
                                                      which the frame or 
                                                      event was captured 
                                                      when using a multi-
                                                      channel interface. 
                                                      A half-duplex 
                                                      interface is a 
                                                      single channel 
                                                      medium and thus 
                                                      this attribute will 
                                                      always have a value 
                                                      of 0 and is 
                                                      optional. A full-
                                                      duplex interface 
                                                      will posses two 
                                                      channels (channel 0 
                                                      and channel 1) and 
                                                      therefore this 

  
Bullen                Informational - Expiration             [Page 24] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                      attribute will be 
                                                      required. 

       RecordNextPosition     645 0285 Offset 1     Pointer to the next 
                                                      frame in the 
                                                      capture session. 
                                                      This value will be 
                                                      null if this is the 
                                                      last frame. 

       RecordEventType        646 0286 UInt32 0/1   Indicates the type 
                                                      of event this 
                                                      section is. This 
                                                      attribute is 
                                                      optional if this 
                                                      section describes a 
                                                      frame (Value = 0) 
                                                      but is mandatory if 
                                                      this section 
                                                      describes an event. 

       RecordData             647 0287 Offset 0/1   Pointer to the 
                                                      location of the 
                                                      actual captured 
                                                      frame data or 
                                                      additional event 
                                                      description 
                                                      information. 

       RecordStatusFlags      648 0288 UInt32 0/1   Bit mask indicating 
                                                      all error and 
                                                      special flags. 
                                                      Present only when 
                                                      status flags are 
                                                      requires. 

    
   Event-specific attributes 
    

       RecordTimeStamp_s      649 0289 UInt32 0/1  Number of seconds 
                                                     since the start of 
                                                     capture specified by 
                                                     the Session 
                                                     section's 
                                                     SessionStartTime. 

       RecordTimeStamp_ns     650 028A UInt32 0/1  Number of 
                                                     nanoseconds in 
                                                     addition to 
                                                     FrameTimeStamp_s. 

       RecordTimeStamp_as     651 028B UInt32 0/1  Number of 
                                                     attoseconds (10-18) 
                                                     in addition to 
                                                     FrameTimeStamp_s and 
                                                     FrameTimeStamp_ns. 
                                                     This field is for 
                                                     future use and will 

  
Bullen                Informational - Expiration             [Page 25] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                     only be present if a 
                                                     highly precise 
                                                     capture device is 
                                                     used. 

       RecordEventRepeatCount 652 028C UInt32 0/1  Number of frames 
                                                     with the same 
                                                     RecordType that 
                                                     occurred after this 
                                                     frame but are not 
                                                     stored. For example, 
                                                     the next 10 frames 
                                                     are not present 
                                                     because they are all 
                                                     dropped like this 
                                                     one. Present only 
                                                     when an event is 
                                                     repeated. 

    
   Note: The time stamp is optional for an event because the exact time 
   an event occurred is not always known until the next frame is 
   captured. In this case it is assumed that the event took place 
   sometime between the previous and the next time stamps. 
    
   Frame-specific attributes 
    

       RecordTimeStamp_s          649 0289 UInt32 1   Number of seconds 
                                                        since the start of 
                                                        capture specified 
                                                        by the Session 
                                                        section's 
                                                        SessionStartTime. 

       RecordTimeStamp_ns         650 028A UInt32 1   Number of 
                                                        nanoseconds in 
                                                        addition to 
                                                        FrameTimeStamp_s. 

       RecordTimeStamp_as         651 028B UInt32 0/1 Number of 
                                                        attoseconds (10-
                                                        18) in addition to 
                                                        FrameTimeStamp_s 
                                                        and 
                                                        FrameTimeStamp_ns. 
                                                        This field is for 
                                                        future use and 
                                                        will only be 
                                                        present if a 
                                                        highly precise 
                                                        capture device is 
                                                        used. 

       RecordFrameOriginalLength  653 028C UInt32 0/1 Specifies the size 
                                                        of the sliced 
                                                        frame before it 

  
Bullen                Informational - Expiration             [Page 26] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                                                        was sliced and is 
                                                        present only when 
                                                        a frame has been 
                                                        sliced. 

       RecordFrameProtocolStackID 654 028D UInt32 0/1 Index of the 
                                                        ProtocoStack 
                                                        section within the 
                                                        ProtocolStackIndex 
                                                        section for the 
                                                        Interface section 
                                                        specified by the 
                                                        RecordInterfaceID. 
                                                        This will aid OCF 
                                                        readers in 
                                                        decoding this 
                                                        frame. 

    
   Note: Whereas the event time stamps are optional, frame time stamps 
   are mandatory. 
    
   Note: You may ask yourself why, if there is a 
   RecordFrameOriginalLength, is there no RecordFrameSliceLength that 
   specifies the length of the sliced frame? Remember that all variable 
   sized data in an OCF file (e.g. a sliced frame) is immediately 
   preceded by an OCFAttributeDataLength, which specifies the length of 
   the sliced frame. 
   Note: The three RecordTimeStamp attributes may need a little 
   explanation. The RecordTimeStamp_s field is simply the number of 
   seconds that have elapsed since the start of capture. This is an 
   unsigned 32-bit integer (having values 0-4,294,967,295) yielding a 
   capture that could roughly span about 136 years. The 
   RecordTimeStamp_ns attribute specifies the number of nanoseconds 
   since the value specified by RecordTimeStamp_s. The same holds true 
   for RecordTimeStamp_as with respect to RecordTimeStamp_ns. For 
   example, assume that a trace began at 12:00:00 am and that he first 
   frame didnĘt arrive until 1:00:00.043 821 am. The number of seconds 
   elapsed would be 3600 (number of seconds in 1 hour), which would be 
   the value stored in RecordTimeStamp_s. The frame arrived 43.821 
   milliseconds after 1:00 am, which is 43,831,000 nanoseconds after 
   the value specified by RecordTimeStamp_s. Therefore value held by 
   RecordTimeStamp_ns is 43,831,000. The FrameTimeStamp_as attribute 
   allows for resolutions down to 10^(-18) seconds (attoseconds) and is 
   for high precision. The greatest value both RecordTimeStamp_ns and 
   RecordTimeStamp_as should hold is 999,999,999. This is because a 
   value 1 greater than that should be stored in the next lower 
   resolution container. For example, a value of 1,000,000,000 stored 
   in RecordTimeStamp_ns represents 1,000,000,000 nanoseconds, or 1 
   second. Therefore, the value of RecordTimeStamp_s should be 
   incremented by 1 and RecordTimeStamp_ns should hold the value 0. 
    
6.2.8 RecordIndex Section 

  
Bullen                Informational - Expiration             [Page 27] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
    
   The RecordIndex section is an optional section intended to give 
   quick and easy access to any record contained in the file. It is 
   basically an array of RecordPosition pointers to Record sections. 
    
   The RecordIndex section is referenced from the Session section. 
    
   RecordIndex section tag space: 704-735 (02C0-02DF) 
   RecordIndexPosition.Tag = 704 
    

       Attribute           Tag Tag   Value   Count  Description 
       Name                Dec Hex   Type            
       -----               --- ---   -----   -----  ----- 

       OCFAttributeCount     1 0001  UInt32  1      Specifies the 
                                                      number of 
                                                      immediately 
                                                      following 
                                                      attributes in this 
                                                      section. Must be 
                                                      the first attribute 
                                                      in the section. 

       RecordPosition      640 0280  Offset  1+     Pointer to a Record 
                                                      section. There is a 
                                                      RecordPosition 
                                                      attribute present 
                                                      for each record in 
                                                      the capture 
                                                      session. 

    
    
7. OCF Implementation Details and Elaboration 
    
7.1 Cyclic Redundancy Check (CRC) 
    
   To do: Elaborate on the CRC and find a reference for the standard 
   (IEEE?). 
    
   The CRC computed in the OCF format is generated by the CCITT CRC-32 
   algorithm. 
    
7.2 Compression 
    
   To do: Elaborate on compression, specifically the DEFLATE method 
   (RFC 1950?). 
 
   The compression scheme used in the OCF format will be block based. 
   The entire file is not compressed as one long stream but, instead, a 
   compressed OCF file consists of a series of compression blocks 
   placed back-to-back in the file. This allows OCF devices to compress 
   and uncompress only portions of the file. This feature is beneficial 
   when an OCF reader wants access to specific data in the file and 

  
Bullen                Informational - Expiration             [Page 28] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   doesn't have to uncompress the entire file. Also, if an OCF writer 
   finds that an undesirably low compression ratio is achieved on a 
   particular block, it can write the uncompressed data because it is 
   not justifiable to spend time decompressing that particular block 
   when reading and writing the file. 
    
   A compression block is defined as an OCFCompressionBlockHeader 
   structure (illustrated in a C-style declaration below) followed 
   immediately by a block of data in compressed or uncompressed form. 
    
      typedef struct { 
         UInt32   CompressedSize; 
         UInt32   UncompressedSize; 
      } OCFCompressionBlockHeader; 
    
   The OCFCompressionBlock header contains the following two members: 
    
   CompressedSize - Specifies the length of data immediately following 
   the structure. 
    
   UncompressedSize - Specifies the length of the original uncompressed 
   data.  
    
   As mentioned previously, a block does not necessarily have to be 
   compressed and this is exhibited when the CompressedSize member is 
   equal to the UncompressedSize member. Therefore, if an OCF writer is 
   compressing a file and finds that a 1:1 compression ratio is 
   achieved (no compression is yielded) then the writer must write the 
   original data in uncompressed form to the file. 
    
7.3 Attachments 
 
   To do: Elaborate on MIME and how a file is embedded, see RFCs 2045-
   49 (include in references). 
    
   Attachments can be embedded within an OCF file. An example of this 
   would be embedding a network diagram image that specifies the 
   physical connectivity of the network from which a capture was taken. 
   Attachments will rely on the MIME standard for identifying the type 
   of file and its contents. 
 
    
8. Security Considerations 
 
   The OCF format allows easy viewing of trace files. It is recommended 
   that users sending OCF files outside of their organizations be 
   mindful of the possibility of sensitive data within the trace file 
   falling into the wrong hands. 
    
   Built-in encryption of OCF files was a consideration of the OCF SIG, 
   but was dismissed because it adds complexity to the file format and 

  
Bullen                Informational - Expiration             [Page 29] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
   the desire to use ever more powerful or possibly proprietary 
   encryption mechanisms external to the OCF. 
    
   If an OCF device chooses to ignore the file CRC, then a corruption 
   in the file will go undetected. The corruption may be harmless or 
   catastrophic, depending on where in the file it occurs and how 
   extensive its changes are. If a single byte in a frame's padding is 
   corrupted, it will be an error that is very hard to detect. If, 
   however, the file is compressed and the corruption causes the 
   decompression routine to misconstrue the file, what may remain is 
   gibberish. 
    
    
9. Appendicies 
    
9.1 Tag Allocations 
    

       Decimal  Hex        Description 
       -----    -----      ----- 

       0-       0000-      Special OCFAttribute records. 
       127      007F 

                            

       0        0000       OCFAttributeBlank 

       1        0001       OCFAttributeCount 

       2        0002       OCFAttributeDataLength 

       3        0003       OCFAttributeValueExtension 

       -----    -----      ----- 

                            

       128-     0080-      Reserved for future use. 
       255      00FF 

       -----    -----      ----- 

                            

       256-     0100-      Header section attributes. 
       287      011F 

                            

       256      0100       HeaderPosition 

       257      0101       HeaderComment 

       258      0102       HeaderAttachment 

       -----    -----      ----- 

                            

       320-     0140-      Session section attributes. 
       351      015F 

                            

       320      0140       SessionPosition 

       321      0141       SessionComment 

       322      0142       SessionID 

       323      0143       SessionStartTime 

       324      0144       SessionStopTime 

       325      0145       SessionVendorDescription 

       -----    -----      ----- 

  
Bullen                Informational - Expiration             [Page 30] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

                            

       384-     0180-      Interface section attributes. 
       415      019F 

                            

       384      0180       InterfacePosition 

       385      0181       InterfaceComment 

       386      0182       InterfaceID 

       387      0183       InterfaceTopology 

       388      0184       InterfaceBandwidth 

       389      0185       InterfaceChannelCount 

       -----    -----      ----- 

                            

       448-     01C0-      ProtocolStack section attributes. 
       479      01DF 

                            

       448      01C0       ProtocolStackPosition 

       449      01C1       ProtocolStackComment 

       450      01C2       ProtocolStackID 

       -----    -----      ----- 

                            

       512-     0200-      ProtocolStackIndex section attributes. 
       543      021F 

                            

       512      0200       ProtocolStackIndexPosition 

       -----    -----      ----- 

                            

       576-     0240-      Address section attributes. 
       607      025F 

                            

       576      0240       AddressPosition 

       577      0241       AddressComment 

       578      0242       AddressID 

       579      0243       AddressNextPosition 

       580      0244       AddressParentID 

       581      0245       AddressType 

       582      0246       AddressData 

       583      0247       AddressName 

       -----    -----      ----- 

                            

       640-     0280-      Record section attributes. 
       671      029F 

                            

       640      0280       RecordPosition 

       641      0281       RecordComment 

       642      0282       RecordID 

       643      0283       RecordInterfaceID 

       644      0284       RecordInterfaceChannel 

       645      0285       RecordNextPosition 

       646      0286       RecordEventType 

       647      0287       RecordData 

  
Bullen                Informational - Expiration             [Page 31] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 

       648      0288       RecordStatusFlags 

       649      0289       RecordTimeStamp_s 

       -----    -----      ----- 

                            

       704-     02C0-      RecordIndex section attributes 
       735      02DF 

       -----    -----      ----- 

                            

       16,384-  0400-      Reserved for future use. 
       32,767   07FF 

       -----    -----      ----- 

                            

       32,768-  0800-      Reserved for private use by individual vendors 
       65,279   FEFF       for implementation-specific features. However, 
                            tags in this range cannot be used until they 
                            are officially allocated to vendors upon 
                            request to and approval by the governing OCF 
                            standards body. This tag space will be 
                            allocated to vendors in blocks of 16. 
                             

       -----    -----      ----- 

                            

       65,280-  FF00-      Reserved for public use by any party that 
       65,534   FFFE       wishes to implement site-specific or 
                            experimental features. The OCF standards body 
                            will not monitor these tags. Parties should use 
                            them at their own risk and only if the OCF 
                            files will not propagate out of the site. 
                             

       -----    -----      ----- 

                            

       65,535   FFFF       Reserved for future use. 

    
    
10. Reference
 
   1  Bradner, S., "The Internet Standards Process -- Revision 3", BCP 
      9, RFC 2026, October 1996. 
    
   2  Bradner, S., "Key words for use in RFCs to Indicate Requirement 
      Levels", BCP 14, RFC 2119, March 1997 
    
   3  Crocker, D. and Overell, P.(Editors), "Augmented BNF for Syntax 
      Specifications: ABNF", RFC 2234, Internet Mail Consortium and 
      Demon Internet Ltd., November 1997 
    
   4  Deutsch, P. and Gailly, J-L,  "ZLIB Compressed Data Format 
      Specification version 3.3", RFC 1950, May 1996 
    
   5  Unicode, Inc., "Unicode Home Page", http://www.unicode.org, 2000 
 

  
Bullen                Informational - Expiration             [Page 32] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
 
11. Acknowledgments 
    
   The OCF came about due to the efforts of the following individuals 
   and organizations: 
    
   Robert Bullen        WildPackets, Inc. 
   Eugene Cookmeyer     Acterna Corp. 
   Tom Ferguson         Agilent Technologies 
   Scott Haugdahl       WildPackets, Inc. 
   Kevin Hay            Network Associates, Inc. 
   Bill Ives            Agilent Technologies 
   Kevin Matsumoto      Spirent Communications 
   Roman Oliynyk        Network Instruments, LLC 
   David Runyon         Acterna Corp. 
   Ben Yoshino          Spirent Communications 
    
12. Author's Address 
    
   Robert Bullen 
   Wild Packets, Inc. 
   4555 Erin Dr 
   Suite 240 
   Email: robert@wildpackets.com 
    



























  
Bullen                Informational - Expiration             [Page 33] 

draft-bullen-ocf-00.txt                                  November 2000 
                         Open Capture Format 
 
 
    
13. Full Copyright Statement 
 

   "Copyright (C) The Internet Society (2001).  All Rights Reserved. 
    
   This document and translations of it may be copied and furnished to 
   others, and derivative works that comment on or otherwise explain it 
   or assist in its implmentation may be prepared, copied, published 
   and distributed, in whole or in part, without restriction of any 
   kind, provided that the above copyright notice and this paragraph 
   are included on all such copies and derivative works.  However, this 
   document itself may not be modified in any way, such as by removing 
   the copyright notice or references to the Internet Society or other 
   Internet organizations, except as needed for the purpose of 
   developing Internet standards in which case the procedures for 
   copyrights defined in the Internet Standards process must be 
   followed, or as required to translate it into languages other than 
   English. 
    
   The limited permissions granted above are perpetual and will not be 
   revoked by the Internet Society or its successors or assigns. 
    
   This document and the information contained herein is provided on an 
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 
   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 
   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE." 

























  
Bullen                Informational - Expiration             [Page 34]