protocols to implement logic. We also borrow from our prior experience implementing DSDV for  [@narra:2011:DSD].

\[t\]

[IPv4 Routing Protocol]{}[0,0]{}

[Routing Class]{}[0,-1.75]{}

[Packet Queue Class]{}[8,0]{}

[Queue Entry]{}[12,0]{}

[Packet Classes]{}[4,0]{}

Packet Classes {#sec:packetclass}
--------------

The packet classes are the packet header declarations used by the protocols. Each packet header is its own class because the packet header is a data structure that defines a packet. The packet classes inherit ’s `Header` class. The `Header` class defines a packet and provides the interface for other classes to interact with the packets. The routing class and packet queue class interact with the packet class to read and write packet headers. Since packet headers have various types of information, they have their own accessors and mutators. However, all packet header declarations require a `Serialize` and `Deserialize` function because of the `Header` class. The `Serialize` function writes the header information to a packet buffer, and the `Deserialize` function reads from a packet buffer. These functions are required because passes packets between nodes as byte arrays. When a node receives a packet, it uses the `Deserialize` function to obtain the header information. The `Print` function permits another class to print the header to the screen or log 