Header Structure Decodes
Looking into each layer of a packet
libtrace's structure decodes (IP, IP6, UDP, TCP, ICMP, ICMP6) are all
retrieved from a Packet by methods belonging to Packet, e.g. TCP =
packet.tcp.  However, a libtrace_packet struct doesn't
have
a way to tell you how many bytes of the structure were actually
captured.  Because of that, python-libtrace can't simply return
the data bytes that belong to a structure but are in a part of
it following the fixed-length part, e.g. IP and TCP options, and
IP6 header
extensions.
Instead, python-libtrace uses libtrace's 'get_layer' routines, so that it can
return objects that know how many header bytes were actually captured.
 Note that objects may be truncated because on-the-wire they
extended past the SNAPLEN used when the trace was captured. 
Class Layer2
| Instance
Variables | 
| linktype | Link Type for the
trace, see below for values | 
| Class Method | 
| layer2 | Packet.layer2
->
aNewLayer2 | 
| 
 | Returns a Layer2 object,
containing it's link type and header bytes for this packet. | 
| Global
Constants | 
| trace types | See the libtrace
documentation for more details | 
| 
 | TRACE_TYPE_ETH | 802.3-style
Ethernet | 
| 
 | TRACE_TYPE_ATM | ATM frames | 
| 
 | TRACE_TYPE_80211 | 802.11 frames | 
| 
 | TRACE_TYPE_NONE | Raw IP frames | 
| 
 | TRACE_TYPE_LINUX_SLL | Linux "null" framing | 
| 
 | TRACE_TYPE_PFLOG | FreeBSD's PFlog | 
| 
 | TRACE_TYPE_DUCK | Pseudo link layer for DUCK
packets | 
| 
 | TRACE_TYPE_80211_RADIO | Radiotap + 802.11 | 
| 
 | TRACE_TYPE_LLCSNAP | Raw LLC/SNAP | 
| 
 | TRACE_TYPE_PPP | PPP frames | 
| 
 | TRACE_TYPE_METADATA | WDCAP-style meta-data | 
Class Layer3
| Instance
Variables | 
| ethertype | Ethernet Type for
the packet, e.g. 0x0800 = IPv4, 0x08dd = IPv6, 0x080b = ARP, etc. | 
| Class Method | 
| layer3 | Packet.layer3
->
aNewLayer3 | 
| 
 | Returns a Layer3 object,
containing it's link type and header bytes for this packet. | 
| Class set  Method | 
| set_checksums() | Layer3.set_checksums
-> True or False | 
| 
 | Computes and sets TCP, UDP and ICMP
checksums for IPv4 and IPv6 packets, and IP checksum for IPv4 packets.
 This can be useful when using a Layer3 object to anonymise a
packet. 
 Returns true if the checksums were set;  they are set only if the Layer3 object came from a complete packet, i.e. one with capture_len == wire_len.
 | 
Class Transport
| stringInstance
Variables | 
| proto | IP protocol
number, (provided this was an IP or IP6 packet), e.g. 6 = TCP, 17 =
UDP, 1 = ICMP, 58 = ICMP6 
 | 
| Class Method | 
| transport | Packet.transport->
aNewTransport | 
| 
 | Returns a Transport object,
containing the protocol number and header bytes for this packet. | 
Nevil Brownlee
Mon, 13 Apr 15 (NZST)