The Directed Flood-Routing Framework (DFRF) is built around an engine that manages the routing of messages in the network. Application components using the flood-routing engine can send and receive regular sized data packets according to an interchangeable flooding policy. The flooding policy specifies the "direction" of flooding and how intermediate nodes rebroadcast messages. The DFRF engine keeps the recently received data packets in a table together with their priority (which is managed by the policy), periodically selects the packets with the highest priority, packs them into a single radio message and broadcasts it to the neighboring nodes.
When the DFRF engine broadcasts a radio message, it does not include the current node ID in the message, but a policy dependent value, called the rank of the node. The rank describes the progress of a data packet in a policy-dependent way, and is used to determine what to do with incoming data packets. For the DFRF engine the rank is simply an array of bytes passed to the flooding policy when a data packet arrives. It is important to note that the rank does not depend on the data packet, thus a single rank value can be used for multiple aggregated data packets. For the converge-cast policy used in the countersniper system, the node rank is the average hop-count distance from the root.
Apart from defining the rank of nodes, the flooding policy has the primary role of governing the data packet life-cycle at each node. The life-cycle of a particular data packet is a finite state machine. There are states in which the data packet is eligible for retransmission, and there are states in which the data packet must be remembered but should not be retransmitted. For example, if an intermediate node retransmits a data packet and then receives the same packet from a node that is closer to the target than itself (as defined by the flooding policy), then the packet should not be retransmitted. However, the node must remember the packet to prevent retransmitting the same data packet in case it receives it later from a node further from the target than itself.
Examples policies that have been implemented in the DFRF framework include broadcast, gradient-based convergecast, geogrpahic routing and spanning tree routing. A unique approach called fat-spanning tree routing is a robust generalization of the simple spanning-tree based routing. Here the messages flood within the region that is one hop away from the path in the spanning tree. This allows a strikingly simple implementation of convergecast with minimal storage requirements.