The nrlnhdp software is NRL's implementation of the Neighborhood Discovery Protocol (NHDP, RFC 6130), which provides two-hop neighborhood discovery for IP based networks. This implementation was developed by the Naval Research Laboratory (NRL) PROTocol Engineering Advanced Networking (PROTEAN) Research Group. The goal of this effort is to provide an implementation of the Internet Engineering Task Force (IETF) standards track protocol NHDP, developed within the Mobile Ad hoc Networking (MANET) working group. The nrlnhdp application supports multiple interface operation with independent settings per interface. It maintains a single graph two hop graph structure which contains the neighborhood information. Both IPv4 and IPv6 operation are supported. Versions of nrlnhdp can be built for the following operating systems: Linux, MacOS; with BSD, Win32, and others pending.
Theory of Operation
The nrlnhdp program uses hello protocol messaging to build and maintain a local two-hop neighborhood state. These hello messages conform to the packet format defined in RFC 5444. All NHDP nodes periodically send hello messages on each of their NHDP enabled interfaces to advertise there presence (all of their IP addresses) to other NHDP protocol enabled nodes/interfaces. Each nrlnhdp enabled machine maintains a single neighborhood state which contains all discovered IP addresses of one and two hop neighbors, link state between those neighbors (HEARD, SYMMETRIC, LOST) and IP node associations where appropriate. Each interface running nrlnhdp maintains its own link state to one hop connected interfaces. Upon receiving a hello a message from a neighboring node, future hello packets on that receiving interface will advertise the addresses listed as HEARD. Upon receiving a hello message, in which the local interface is listed as HEARD (your neighbors hello message lists you as HEARD), the local link state transitions to SYMMETRIC. State times out after a certain period of time without reception of an update. Links are then advertised as LOST for a amount of time. By sending hello messages with all known (HEARD, SYMMETRIC) links and all recently known (LOST) links receivers of those hellos build and maintain two hop neighborhood databases.
nrlnhdp conforms to RFC 6130, with two exceptions: IPv6 support and multiple addresses per interface are not yet supported. Messaging within nrlnhdp conforms to RFC 5444 (the MANET packet building block), RFC 5498 (IANA Allocations for MANETs), and RFC 5497 (Representing Multi-Value Time in MANETs) specifications. The packet generation and parsing is fully NRL developed.
The nrlnhdp uses a graph data base structure to maintain neighborhood link state. This data structure differs from that described in the NHDP standards track document. The standards track document outlines three types of "Information Bases": a Local Information Base containing local interface information, an Interface Information Base containing one and two hop link state information on a per interface basis, and a Neighbor Information Base maintaining logical connectivity to one hop neighbors. The graph structure employed within nrlnhdp contains this information but does not organize it in the same manor outlined in the NHDP document. nrlnhdp graph structure uses "Nodes" which contain a list of interfaces, "Interfaces" which maintain incoming and outgoing "Links", and directional "Links" which connect interfaces together. Note that due to the specification of NHDP, 2-hop "Nodes" maintained by the graph structure may physically be the same node.
Timers used by nrlnhdp more closely follow the NHDP document as well as RFC 5148 (Jitter Considerations in MANETs). This includes support for HELLO_INTERVAL, HELLO_MIN_INTERVAL, H_HOLD_TIME, REFRESH_INTERVAL, VALIDITY_TIME, L_HEARD_time, L_SYM_time, and HP_MAXJITTER timers.
Please see the NRL-NHDP User's Guide for detailed information on compilation and usage.
For more information on nrlnhdp, please contact firstname.lastname@example.org