Internet DRAFT - draft-ghanadan-manet-ahdr

draft-ghanadan-manet-ahdr





Mobile Ad hoc Networking (MANET)                             R. Ghanadan
Internet-Draft                                               J. Hsu
Intended status: Informational                               P. Khuu
Expires: September, 2010                                     G. Sadosuk
                                                             BAE Systems
                                                             March 2010

                   Adaptive Hybrid Domain Routing (AHDR)
                        draft-ghanadan-manet-ahdr-00

Status of this Memo

   This Internet-Draft is submitted to IETF in full conformance with the
   provisions of BCP 78 and BCP 79.  

   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."

   This document is subject to BCP 78 and the IETF Trust's Legal 
   Provisions Relating to IETF Documents (http://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.  
   Please review these documents carefully, as they describe your rights 
   and restrictions with respect to this document.
	  
   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.

   This Internet-Draft will expire in September, 2010.
   
   Copyright (c) 2010 IETF Trust and the persons identified as the 
   document authors.  All rights reserved.

Abstract

   This document describes the Adaptive Hybrid Domain Routing (AHDR)
   protocol. It describes the parts of the protocol that are required
   of all implementations as well as optional requirements that each
   implementation may include. AHDR allows router nodes to form far-
   reaching ad-hoc networks, especially in wireless environments. AHDR
   uses a combination of proactive and reactive routing schemes to be

   

Ghanadan, et al.          Expires September 2010                [Page 1]

Internet-Draft                      AHDR                      March 2010


   responsive to topology changes without incurring high protocol
   overhead. AHDR adapts to network conditions in order to minimize
   network overhead and maximize network reachability.  

Document Conventions

   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 RFC2119 [1].

   The use of "." character to specify a software or message structure
   indicates a value or field in a hierarchy of data structures. For
   instance "Reader.Hair.Color" would indicate the color of the reader's
   hair. The value might be Blonde or Black or even None.

   The use of "[]" characters specifies a table of elements. A value
   within braces indicates a particular element (all indexes begin with
   0). For instance, "George.Children[0].Name" would indicate the name
   of George's first child.

   Every table also has an implied .Count field that indicates how many
   elements are currently present in the table.

Table of Contents

   1. Introduction ................................................... 4
   2. Applicability .................................................. 5
   3. Terminology .................................................... 6
   4. AHDR Protocol Overview ......................................... 9
       4.1. Proactive Routing ........................................ 9
       4.2. Reactive Routing ........................................ 10
       4.3. Domain Architecture ..................................... 11
   5. AHDR Data Structures .......................................... 13
       5.1. AHDR Nodeid Length (Node.IDLength) ...................... 13
       5.2. AHDR Nodeid (Node.Nodeid) ............................... 13
       5.3. AHDR Networkid (Node.Networkid) ......................... 14
       5.4. Topology Timeout (Node.Timeout.Topology) ................ 14
       5.5. Link Timeout (Node.Timeout.Link) ........................ 14
       5.6. LCI -- Link Congestion Indicator (Node.LCI) ............. 14
       5.7. IP Address ReDistribution Data (IPAD) ................... 15
       5.8. Configured IP Addresses for ReDistribution
       (Node.IPAD.Configured[]) ..................................... 15
       5.9. Advertised IP Addresses for ReDistribution
       (Node.IPAD.Advertised[]) ..................................... 16
       5.10. HOPK Timeout (Node.Timeout.HOPK) ....................... 16
       5.11. IPAD Timeout (Node.Timeout.IPAD) ....................... 16
       5.12. Checksum Use (Node.Checksum) ........................... 16
       5.13. AHDR Timer (Timer) ..................................... 17
       5.14. Node Timer (Node.Timer) ................................ 17


	   
Ghanadan, et al.              Expires September 2010            [Page 2]

Internet-Draft                      AHDR                      March 2010


   6. AHDR Network Information ...................................... 17
       6.1. Network Coverage (Node.Coverage) ........................ 18
       6.2. HOP1 Table (Node.HOP1[]) ................................ 18
       6.3. HOP2 Table (Node.HOP2[]) ................................ 19
       6.4. HOPK Table (Node.HOPK[]) ................................ 20
       6.5. Bridge Table (NODE.Bridge[]) ............................ 21
       6.6. Domain Lead Table (Node.DomainLead[]) ................... 22
       6.7. Domain Coverage Table (Node.DomainCoverage[]) ........... 23
       6.8. IPAD Learned Address Table (Node.IPAD.Learned[]) ........ 23
   7. AHDR Messages ................................................. 23
       7.1. AHDR Message Header ..................................... 24
       7.2. AHDR Message Body ....................................... 25
       7.3. AHDR Message Checksum ................................... 25
       7.4. TU0 -- Topology Update 0 Message ........................ 26
       7.5. TU1 -- Topology Update 1 Message ........................ 26
       7.6. TUD -- Topology Update Domain Message ................... 29
       7.7. DLA -- Domain Lead Announcement Message ................. 36
       7.8. DLR -- Domain Lead Renouncement Message ................. 36
       7.9. RDISC -- Route Discovery Message ........................ 37
       7.10. RRES -- Route resolution Message ....................... 41
       7.11. RERR -- Route Error Message ............................ 42
       7.12. IPAD -- IP Address ReDistribution Message .............. 43
   8. AHDR Processes ................................................ 48
       8.1. Main Process ............................................ 48
       8.2. Message Receive Process ................................. 49
       8.3. Maintain Link Process ................................... 50
       8.4. Link Lost Process ....................................... 51
       8.5. Message Send Process .................................... 52
       8.6. Calculate Domain Lead Process ........................... 52
       8.7. Route Discovery Process ................................. 54
       8.8. Bridge Selection Process ................................ 55
       8.9. Domain Lead Tracking Process ............................ 57
       8.10. Create Checksum Process ................................ 57
       8.11. Check Checksum Process ................................. 58
       8.12. TU0 Processes .......................................... 58
       8.13. TU1 Processes .......................................... 59
       8.14. TUD Processes .......................................... 60
       8.15. DLA Processes .......................................... 61
       8.16. DLR Processes .......................................... 62
       8.17. RDISC Processes ........................................ 63
       8.18. RRES Processes ......................................... 64
       8.19. RERR Processes ......................................... 65
       8.20. IPAD Processes ......................................... 66
   9. Security Considerations ....................................... 67
   10. References ................................................... 67
   11. Acknowledgments .............................................. 67
   12. Author's Addresses ........................................... 67
   

Ghanadan, et al.             Expires September 2010             [Page 3]

Internet-Draft                      AHDR                      March 2010


1. Introduction

   Adaptive Hybrid Domain Routing (AHDR) is a MANET routing protocol.
   AHDR implements a strategic hybrid combination of proactive and
   reactive routing schemes. Both routing schemes use a cluster-based
   organization to efficiently disseminate AHDR information through the
   network. To form these clusters, every AHDR node periodically
   announces its presence plus its 1-hop neighbors. AHDR uses this
   information to organize nodes within a 2-hop neighborhood into
   logical groups called Domains. Each Domain elects a Domain Lead that
   has the highest 1-hop coverage in terms of link metrics.

   The proactive routing scheme disseminates Domain topology information
   through the network. As Domain topology (i.e., membership) changes,
   each Domain Lead announces the topology changes to all other Domain
   Leads in the network.

   To forward this information, each node in the domain selects a set of
   Bridge Nodes--a subset of nodes that have links to nearby Domain
   Leads. Only Bridge Nodes are used to forward the topology updates
   between the Domain Leads. The goal is to have only a small subset of
   the network nodes (the Domain Lead and the Bridge Node) carry the
   topology information through the entire network. This reduces the
   AHDR overhead in the network. Nodes that receive the topology
   information use it to build up their routing tables to the distant
   Domain Nodes.

   The reactive routing scheme is used when a source AHDR node does not
   have a known route to a required destination. The source sends a
   route discovery message first to its Domain Lead. If the Domain Lead
   does not know a route for that destination it forwards the request to
   other nearby Domain Leads via its Bridge Nodes. The results of the
   route request return to the originator via Bridge Nodes as well.
   Again, this scheme uses only a small subset of the network nodes
   carry the network routing messages through the network which reduces
   the AHDR overhead.

   AHDR does not impose either a flat or hierarchical routing scheme
   that is a function of the router forwarding engine which is not a
   part of the AHDR specification.

   This document specifies the AHDR protocol including the information
   elements, and their exchange requirements with the neighboring
   routers supporting AHDR, the associated message formats, and the
   message processing procedures to realize the protocol. The general
   operation for the protocol will be specified so that any node using a
   conforming implementation of AHDR will be able to form a network with
   nodes running any other conforming implementation. This document



Ghanadan, et al.              Expires September 2010            [Page 4]

Internet-Draft                      AHDR                      March 2010


   also specifies optional features which will allow each implementation
   to be tailored to specific wireless conditions. Specifications for
   the optional features include behaviors that MAY be implemented as
   well as different algorithms that MAY be used to implement required
   behavior.

2. Applicability

   AHDR is a hybrid proactive and reactive routing protocol. It is
   designed to provide network routing services for networks with the
   following characteristics:

   o  high topological rate of change
   o  large network size
   o  networks with high 1-hop density
   o  limited link capacity where network routing overhead per node must
      be carefully controlled

   In networks that are large, dense and highly mobile, a high topology
   rate of change can introduce excessive control overhead into the
   network. In such conditions, it is important to prevent each node
   from independently flooding the network with its topology update
   messages. But instead, have only a small subset of nodes in AHDR
   generate the topology update messages and flood them into the
   network. AHDR does this by abstracting the physical network topology
   into logical groups called Domains. Each Domain has a Domain Lead
   (Domain Lead). Only the Domain Lead generates the topology update
   messages for the whole Domain, and forwards this information through
   a set of Bridge Nodes. Although fewer nodes are responsible for
   generating the topology update messages, the messages still contain
   complete information about the latest topology information in that
   respective Domain. Thus, AHDR does not compromise in terms of
   network reachability.

   To further help reduce the routing overhead in networks with
   potentially low channel capacity, the frequency at which the Domain
   Lead generates the topology update message is user configurable.
   However, a lower frequency for topology update implies that it will
   take relatively longer time for node(s) from one side of the network
   to be informed about changes to the network topology on the other
   side of the network. In this case, AHDR provides the reactive
   routing component so that the route can be discovered faster. Again,
   instead of flooding the route discovery messages to all nodes in the
   network, these messages are only forwarded to the Domain Leads
   through a set of Bridge Nodes.

   Using a combination of proactive routing, reactive routing, and its
   Domain architecture, AHDR is suitable in networks where the user



Ghanadan, et al.              Expires September 2010            [Page 5]

Internet-Draft                      AHDR                      March 2010


   application traffic may be sporadic and the number of traffic flows
   may be relatively high or low.

   AHDR supports network operation where the network node(s) may be
   equipped with multiple interfaces. In this case, AHDR may be
   reconfigured to operate over all interfaces. Alternatively, a subset
   of the interfaces may be configured to run AHDR while the remaining
   interfaces are configured to run other routing protocols. In either
   case, AHDR supports the route redistribution function where the
   network address(es) learned via one interface is shared with the
   others.

   Although the protocol is designed to accommodate specific networks as
   described above, AHDR has also been shown to generate low network
   routing overhead while still providing high and accurate network
   reachability in networks with lower mobility pattern, smaller network
   size, and sparse 1-hop density.

3. Terminology

   To discuss the AHDR design, the following terms are used. Each has a
   specific meaning that must remain consistent throughout this
   document, but the existence of these terms does not impose any
   specific requirements.

3.1. Implementation

   An AHDR implementation is software that conforms to the requirements
   in this document. A conforming implementation MAY support any number
   of optional features or optional algorithms as long as all required
   features and algorithms are supported.

3.2. AHDR Node

   An AHDR node is a logical, not a physical, entity which is a single
   executing instance of an AHDR implementation. Therefore, an AHDR
   node does not describe an entire hardware platform.

   On default, an AHDR node corresponds to a single physical interface
   on a hardware platform. This is not a requirement; multiple AHDR
   nodes can be run on a single physical interface, and a single AHDR
   node can be run on multiple physical interfaces. The AHDR node is
   only the instance of the implementation.

   Every AHDR node is supported by the platform on which it is executing
   by having all of the following capabilities available to it:

      (1) Storing and exchanging AHDR Network information, AND



Ghanadan, et al.           Expires September 2010               [Page 6]

Internet-Draft                      AHDR                      March 2010


      (2) Receiving AHDR Messages from other AHDR Nodes, AND
      (3) Sending AHDR Messages to other AHDR Nodes, AND
      (4) Deciding that some time interval has expired.


3.3. AHDR Link

   An AHDR link is a 1-hop communications link between two AHDR nodes.
   An AHDR link can be confirmed or unconfirmed. A confirmed is a
   symmetrical link exists when both A and B acknowledge through AHDR
   messages that the link to the other exists.

3.4. AHDR Network

   An AHDR network is a collection of AHDR nodes and AHDR links. Each
   AHDR node in a network has identified itself with the same AHDR
   Networkid as all the other nodes in the network. An AHDR node is an
   executing instance of an AHDR implementation and is independent of
   the hardware platform. Because the networks are logical only,
   multiple AHDR networks could overlay each other on a single set of
   physical hardware.

3.5. HOP1 Table

   The HOP1 table is a list of all AHDR links (confirmed and
   unconfirmed) that a node has to other AHDR nodes. All nodes in the
   HOP1 Table are therefore 1-hop neighbors. Each HOP1 Table entry
   contains the 1-hop Nodeid and other network information.

3.6. HOP2 Table

   A HOP2 Table is a list of all 2-hop neighbor nodes. Both hops of the
   2-hop path to the HOP2 neighbor are confirmed links. Each HOP2 Table
   entry contains the 2-hop Nodeid, the 1-hop neighbor that can reach
   it, and other network information.

3.7. HOPK Table

   A HOPK Table is a list of all other AHDR nodes that are 3 or more
   network hops away. All network hops are confirmed links. Each HOPK
   Table entry contains the destination Nodeid, the 1-hop neighbor that
   can reach it, and other link related information.

3.8. Link State Level (LSL)

   An LSL is a value that quantifies the overall character of an AHDR
   link. It is a combination of the Link Congestion Indicator (LCI--




Ghanadan, et al.             Expires September 2010             [Page 7]

Internet-Draft                      AHDR                      March 2010


   this node's congestion metric) and Link Quality Indicator (LQI--the
   receive quality at the other node in the link) of a given AHDR link.

3.9. Domain Lead

   A Domain Lead node is a node within a Domain which is a 1-hop
   neighbor of all nodes in the Domain and has the highest Network
   Coverage of all nodes in the Domain.

   Domain Leads exchange Topology Update (TUD) messages with all other
   Domain Leads. Domain Leads also send route discovery messages to
   other Domain Leads when searching for a destination Node that is
   currently unknown. Domain Leads also broadcast Topology Update (TU1)
   messages periodically to keep local topology information current.

   Domain Leads in a network will always be 2 or 3 network hops apart
   due to the method in which Domain Leads are selected.

3.10. Domain Node

   A Domain Node is a node which has selected a confirmed 1-hop neighbor
   as its Domain Lead. Each Domain Node in a Domain is within two
   network hops of all other Domain Nodes in the same Domain.

   Domain Nodes broadcast Topology Update (TU1) messages periodically
   that the Domain Lead uses to keep local topology information current.

3.11. Domain

   An AHDR Domain is a logical group of nodes that consists of a Domain
   Lead along with all Domain Nodes that have selected the same Domain
   Lead. Domains are used to organize the network to make topology
   updates and route resolution more efficient.

3.12. Bridge Node

   A Bridge Node is any node selected to most efficiently forward AHDR
   messages from one Domain Lead node to all other Domain Lead nodes in
   the network. Every node in the network will select a set of Bridge
   Nodes through which that node can reach node known neighboring
   domains. If the Domain Lead is more than 1-hop away, the Bridge Node
   will forward to its own Bridge Node(s) to get to the neighboring
   Domain Lead(s).

   Any Domain Lead or Domain Node may be selected as a Bridge Node.  The
   conditions are not exclusive.




Ghanadan, et al.              Expires September 2010            [Page 8]

Internet-Draft                      AHDR                      March 2010


3.13. Network Coverage

   Network Coverage is used in determining the Domain Lead for a given
   Domain. Network Coverage may be expressed in terms of a weighted
   function derived from the number of HOP1 nodes and their
   corresponding LSL values. Bridge Nodes are selected based on their
   Domain Coverage of neighboring domains.

3.14. Domain Coverage

   Domain Coverage is used in determining Bridge Nodes. Each node
   evaluates information from its 1-hop neighbors to determine
   neighboring Domains accessible by each neighbor and how many nodes in
   each neighboring Domain it can reach. This helps the node determine
   an optimal set of Bridge Nodes.

4. AHDR Protocol Overview

   The protocol is comprised of three main components:

   o   Proactive Routing - advertisement of known routes through the
       network
   o   Reactive Routing - discovery of unknown routes as required
   o   Domain Architecture - grouping of nodes into logical Domains for
       efficient information dissemination and loop control

4.1. Proactive Routing

   The proactive portion of AHDR periodically exchanges network
   information with 1-hop neighbors and between Domain Leads, regardless
   of topology conditions. The following subsections will focus on the
   details of the proactive core, from neighbor discovery to network
   formation.

4.1.1. Neighbor and Network Discovery

   A node with no known neighbors will broadcast Topology Update 0 (TU0)
   messages until a neighbor is detected. Neighbors are detected when
   AHDR messages are received from them. The node records the detected
   neighbor node's Nodeid and Link State Level (LSL) into its Hop 1
   (HOP1) Table.

   When the HOP1 table is no longer empty (but does not yet contain a
   Domain Lead), the node begins to broadcast periodic Topology Update
   (TU1) messages containing its HOP1 neighbor information.

   Upon receiving TU1 messages, each node is able to build up its HOP1
   and HOP2 tables (see section 3.5 and 3.6 for more information on



Ghanadan, et al.              Expires September 2010            [Page 9]

Internet-Draft                      AHDR                      March 2010


   these tables). The LSL of a given link between two nodes is
   calculated based on conditions at the receiving node (e.g., signal
   strength of the received message or congestion of the receiving
   node). The received TU1 message contains the link quality and
   congestion information of the one way link from the sender to the
   receiver. Therefore, after a node transmits a TU0 or TU1, and a
   successive TU1 is received with an LSL value associated with the SID
   of the node as a 1-hop neighbor, the link becomes confirmed. This
   establishes a symmetric link between the nodes.

   An entry in the HOP1 table is removed if its unconfirmed timer
   expires.

4.1.2. Network Topology Update

   Domain Leads send periodic updates of its Domain Node membership to
   other Domain Leads. The Domain Topology Update (TUD) message is
   exchanged between Domain Leads to provide topology information on an
   inter-Domain level. The TUD is propagated to all known Domain Leads
   via Bridge Nodes. From TUDs, each Domain Lead learns of the HOP1
   neighbors of every other Domain Lead.

   Partial TUDs are sent between full TUDs, containing only information
   about nodes added or dropped from the Domain. From the received TUD
   messages, each Domain Lead learns the return path to the originating
   TUD source Domain Lead and the Domain Nodes of the given Domain Lead.
   Thus each Domain Lead builds up a complete routing table to all known
   network nodes.

   To further limit network control overhead, the inter-Domain TUD
   updates could be configured to only contain HOP1 neighbors that have
   selected the Domain Lead as their Domain Lead to avoid multiple TUD
   entries of a single node in overlapping domains. A configurable
   option also enables Domain Leads to include all HOP1 nodes in its TUD
   update for cases such as fast changing topology with small Domain
   sizes.

4.2. Reactive Routing

   When a Domain Node needs to send a message to a destination with an
   unknown route, the next hop node is determined by sending a Route
   Discovery (RDISC) message to the Domain Lead, and receiving a Route
   Resolution (RRES) in reply. The Domain Lead serves to resolve
   queries for unknown routes among its Domain Nodes.

4.2.1. Route Discovery (RDISC) and Route Resolution (RRES)




Ghanadan, et al.            Expires September 2010             [Page 10]

Internet-Draft                      AHDR                      March 2010


   When a source node generates an RDISC message and sends it to its
   Domain Lead, the source node expects an RRES back from the Domain
   Lead indicating a next hop node that can reach the destination node.
   Upon receiving the RDISC message, the Domain Lead of the source
   Domain will reply with a RRES if it is able to locate the destination
   within its own routing tables. If not, it will forward the RDISC
   message to other Domain Leads in the network.

   The RDISC is forwarded through Bridge Nodes to other Domain Leads. If
   a DL is able to resolve the requested route it will stop the RDISC
   forwarding.

   An RRES message is generated once the destination node in the RDISC
   message is resolved by either the Domain Lead or the Bride Nodes
   receiving the RDISC. The RRES message is unicast hop-by-hop back to
   the original source node. As the RRES message propagates, each
   intermediate node (including the Bridge Nodes and Domain Leads)
   updates their routing tables.

   If more than 1 reply is received, one or more entries could be stored
   in the HOPK table of the source node.

4.3. Domain Architecture

   AHDR uses a logical two-tiered architecture (but physically flat
   architecture) to minimize the number of routing control messages
   generated and to more efficiently flood these control messages. A
   tracking mechanism is used to control the looping of routing control
   message due to network mobility.

4.3.1. Domain Formation and Maintenance

   An AHDR network is composed of logical groups called Domains, which
   may physically overlap. Initial network formation takes place when a
   node designates itself as Domain Lead with a Domain Lead Announcement
   (DLA), and all nodes (at least one) within a 1-hop range acknowledge
   this node as their Domain Lead. This acknowledgement is contained in
   the TU1 messages. More than one Domain Lead within range of a given
   node could be included in the TU1 message, but the node's Domain Lead
   will be listed first in the Domain Lead table.

   A Domain Lead is designated based on HOP1 Network Coverage, which is
   shared among 1-hop neighbors in the TU1 message exchange. This
   designation is contingent upon the condition that none of its 1-hop
   neighbors is already a Domain Lead. Otherwise, the new Domain Lead
   must surpass the Network Coverage of the existing Domain Lead by a
   certain threshold before it can designate itself the new Domain Lead.
   In the case where this threshold is surpassed, the previous Domain



Ghanadan, et al.              Expires September 2010           [Page 11]

Internet-Draft                      AHDR                      March 2010


   Lead will acknowledge the new Domain Lead by broadcasting a Domain
   Lead Renouncement (DLR).

4.3.2. Topology Change Propagation

   Local topology changes are shared among 1-hop nodes through TU1
   messages. Topology changes detected by a node are shared with 1-hop
   neighbors through TU1 messages.

   The Domain architecture collects topology change information for an
   entire Domain. To reduce the number of announcements, inter-Domain
   topology changes and updates are announced in a single message
   instead of announcing each topology change in a separate message.
   The inter-Domain topology updates (TUD) are forwarded through Bridge
   Nodes as part of the Domain architecture.

   Bridge nodes are selected either for minimal transmissions or maximum
   path diversity. Bridge Nodes are continuously evaluated at every
   Node in the network and updated to reflect topology changes.

   The Domain architecture also provides loop-free propagation of the
   topology change announcements through Bridge Nodes to each Domain.
   Topology changes are tracked by forwarding Bridge Nodes and redundant
   messages are eliminated as messages propagate through the entire
   network.

4.3.3. Loop Free Broadcast

   AHDR logical hierarchy enables efficient tracking of messages that
   are broadcast throughout the network, such as TUD and RDISC messages.
   These messages include a sender Nodeid and a sequence number which
   are used to ensure that a given message is not forwarded more than
   once by any node. Furthermore, each forwarded message is tracked and
   marked as it passes through Domains to eliminate redundant message
   broadcasts within the same area.

   The sequence number is a unique value generated by the originator of
   the message. As a TUD or RDISC is broadcasted, the Bridge Nodes IDs
   are embedded within the payload. Every node within one hop distance
   will receive the message, but only Bridge Nodes whose IDs are
   included in the message will take action and forward the message to
   their Bridge Nodes and DL(s). Subsequent TUD or RDISC messages from
   the same Node will have a sequence number one higher than the
   previous message. Keeping track of sequence numbers seen will allow
   nodes to detect and discard old messages and to control the
   retransmission of messages that have already been forwarded.




Ghanadan, et al.              Expires September 2010           [Page 12]

Internet-Draft                      AHDR                      March 2010


   To prevent routing loops and redundant dissemination of messages, the
   Domain Lead of each intermediate Bridge Node is tracked and the
   number of times a message can be propagated within a single Domain is
   limited. The Domain Lead Track contains information that will limit
   redundant messages from propagating forward.

5. AHDR Data Structures

   Following are the configurable parameters on a per interface basis.
   Those marked as [REQUIRED] must be maintained by the host platform
   and SHALL be configurable by the network user. Each parameter has a
   proposed default value which may be overwritten via configuration.
   Those marked as [OPTIONAL] SHALL be maintained by the host platform
   if configured by the network user.

   For each item, the following additional information is provided:

   o   SOURCE - How AHDR learns the information
   o   USES - How AHDR uses the information

   Where values are required to fit into AHDR message fields, refer to
   the AHDR message definitions in Section 7 for information about the
   size of the field and its valid values.

5.1. AHDR Nodeid Length (Node.IDLength)

   [REQUIRED] This value SHALL indicate the length of all .Nodeid fields
   for this Node. The value SHALL fit in the .Header.IDLength field. A
   value of 0 SHALL indicate .Nodeids are 16 bits, a values of 1 SHALL
   indicate .Nodeids are 32 bits, etc., up to value 15 which indicates
   256 bits.

   o   SOURCE: Configuration
   o   USES: .Header.IDLength field

5.2. AHDR Nodeid (Node.Nodeid)

   [REQUIRED] The Nodeid is used to identify the AHDR node in the AHDR
   network. The value SHALL be any value other than 0 that fits in a
   field whose size is indicated by Node.IDLength.

   The combination of Node.Nodeid and Node.Networkid SHALL uniquely
   identify an AHDR node. If two AHDR nodes have the same Node.Nodeid
   and Node.Networkid, the results are unpredictable. Future version of
   AHDR may provide a method for resolving the conflict.

   o   SOURCE: Configuration
   o   USES: Sent in all AHDR messages



Ghanadan, et al.               Expires September 2010          [Page 13]

Internet-Draft                      AHDR                      March 2010



5.3. AHDR Networkid (Node.Networkid)

   [REQUIRED] The Networkid is used to identify the AHDR network that
   the AHDR node belongs to. The value SHALL fit in the
   .Header.Networkid field. The default value is 0. Nodes with no
   particular need to distinguish among networks should use the default
   Networkid value.

   o   SOURCE: Configuration
   o   USES: Sent in all AHDR messages

5.4. Topology Timeout (Node.Timeout.Topology)

   [REQUIRED] The Topology Timeout is used to time the intervals between
   sending AHDR Topology Messages. It is included in some AHDR messages
   so that other nodes can calculate when they should next hear from a
   node again. The value SHALL fit in the TU1.Timeout field when
   expressed in milliseconds.

   o   SOURCE: Configuration
   o   USES: Sent in TU1 and TUD messages

5.5. Link Timeout (Node.Timeout.Link)

   [OPTIONAL] The Link Timeout is used to calculate how long an AHDR
   link is maintained when no messages are being received from the node
   at the other end of the link.

   o   SOURCE: Configuration
   o   USES: HOP1 Table entry expiration

5.6. LCI -- Link Congestion Indicator (Node.LCI)

   [REQUIRED] The LCI is used to indicate to other Nodes any routing
   delay that may occur in network traffic passing through the Node.
   The value SHALL fit in the .Header.Con field. The value 0 indicates
   the node is very congested and a value of 3 indicates the node is not
   congested. The values 1 and 2 represent some congestion level in
   between the two extremes. The criteria for determining the LCI value
   are implementation specific. If the LCI determination function is
   not supported, the value 3 SHALL be used.

   o   SOURCE: Calculated based on current condition; the default value
       can be configured a priori
   o   USES: Sent in all AHDR messages




Ghanadan, et al.              Expires September 2010           [Page 14]

Internet-Draft                      AHDR                      March 2010


5.7. IP Address ReDistribution Data (IPAD)

   This structure is used in various tables in the Node. An IPAD
   address entry has a variable length based on the IP address version
   being stored. Fields are:

   Type: Type of address. Value must fit into IPAD.Address[].Type
   field. Values SHALL be:
       2: IPv4 (32 bits)
       3: IPv6 (128 bits)
   All remaining values are reserved.

   Action: Value SHALL fit into IPAD.Address[].Action field. Values
   SHALL be 0 for no action, 1 for add, 2 for delete, 3 for modify.
   Other values are reserved.

   Networkid: AHDR Networkid for both IPAD.Source and IPAD.Address
   field. Value SHALL fit into .Header.Networkid field.

   IDLength: Length of .Source in 2-byte WORDs (i.e., one-half of byte
   length or 1/16th of the bit length) minus one. Value SHALL fit into
   .Header.IDLength field.

   Source: Where address was learned from.  Size of address SHALL be
   indicated by IDLength.

   Metric: Routing metric.  Value SHALL fit into IPAD.Address[].Metric
   field.

   Address: Address being advertised.  Size of address SHALL be
   indicated by Type.

   Mask: Mask for address being advertised.  Size of mask SHALL be
   indicated by Type.

   o   SOURCE: depends on table entry is used in
   o   USES: Entry in various IPAD tables.

5.8. Configured IP Addresses for ReDistribution (Node.IPAD.Configured[])

   [OPTIONAL] The Configured IP Address Table contains a list of IP
   network addresses that this Node must advertise in its IPAD messages.
   The configure network addresses SHALL be used to populate the IPAD
   Advertised Address Table. The number of addresses allowed is not
   specified here, but consideration should be given to the size and
   number of IPAD messages that will result from an excessive number of
   addresses.




Ghanadan, et al.            Expires September 2010             [Page 15]

Internet-Draft                      AHDR                      March 2010


   o   SOURCE: Configuration
   o   USES: Sent in IPAD messages

5.9. Advertised IP Addresses for ReDistribution (Node.IPAD.Advertised[])

   [OPTIONAL] The Advertised IP Address Table contains a list of routing
   addresses that this Node must advertise in its IPAD messages. These
   addresses SHALL be used when constructing IPAD messages.

   o   SOURCE: Configuration
   o   USES: Send in IPAD messages

5.10. HOPK Timeout (Node.Timeout.HOPK)

   [OPTIONAL] The HOPK Timeout is the number of Node.Timeout.Topology
   intervals to wait between sending full TUDs from a Domain Lead Node.
   Update TUDs may be sent no more often than every other
   Node.Timeout.Topology interval.

   It is also the number of OtherNode.Timeout.Topology intervals to keep
   a Node.HOPK[] table entry until it is deleted (where OtherNode is the
   source of the TUD entry). If a TUD message is received from
   OtherNode that confirms an existing entry, the timer on the entry is
   reset.

   o   SOURCE: Configuration
   o   USES: HOPK Table entry expiration

5.11. IPAD Timeout (Node.Timeout.IPAD)

   [OPTIONAL] The IPAD Timeout is the number of Node.Timeout.Topology
   intervals between sending full IPAD messages from a Node. Update
   IPADs may be sent no more often than 1/3 of this value.


   It is also the number of OtherNode.Timeout.Topology intervals to keep
   a Node.IPAD.Learned[] tables entry until it is deleted (where
   OtherNode is the source of the IPAD entry). If an IPAD message is
   received from OtherNode that confirms an existing entry, the timer on
   the entry is reset.

   o   SOURCE: Configuration
   o   USES: Learned IPAD Table entry expiration

5.12. Checksum Use (Node.Checksum)




Ghanadan, et al.               Expires September 2010          [Page 16]

Internet-Draft                      AHDR                      March 2010


   [REQUIRED] A value of 1 SHALL indicate that the Node will include a
   checksum in all its AHDR messages. A value of 0 SHALL indicate that
   it will not. This will affect the length of AHDR messages.

   o   SOURCE: Configuration
   o   USES: .Header.C field

5.13. AHDR Timer (Timer)

   AHDR Timer is the general timer structure consisting of an .Interval
   and a .Countdown field.

   When a timer, T, is SET, T.Interval and T.Countdown SHALL both given
   the same value. When a Timer is RESET, T.Countdown SHALL be given
   the T.Interval value.

   T.Countdown SHALL be decremented appropriately as time passes. If
   T.Countdown reaches 0, then T SHALL expire and T SHALL be RESET.

   The TU1.Timeout is a 16-bit timer value carried in the TU1 message
   (see Section 8.5.1). The TU1.Timeout value is used to derive the
   Node.HOP1[].Timer. Therefore, the .Interval and .Countdown fields
   SHALL be able to accommodate the TU1.Timeout value. The granularity
   of timers SHOULD be 250ms or smaller in order to make AHDR reasonably
   accurate.

5.14. Node Timer (Node.Timer)

   Node.Timer is an instance of an AHDR Timer. It is used to determine
   the AHDR message transmit frequency. Depending on the current status
   of the AHDR node, different message types may be sent. Details
   specifying the conditions governing the transmission of each of the
   AHDR message types are in Section 7.

6. AHDR Network Information

   The data structures outlined in this section SHALL be organized and
   tracked by each AHDR node. They represent data about the network
   that each node learns from AHDR Messages received during operation.
   The information is used, in turn, to populate the AHDR Messages that
   each node sends. Each AHDR node SHALL maintain all of the data
   structures in this section that are marked "[REQUIRED]". Each AHDR
   may optionally maintain any of the data structures in this section
   that are marked "[OPTIONAL]".

   o   SOURCE - How AHDR learns the information
   o   USES - How AHDR uses the information




Ghanadan, et al.                Expires September 2010         [Page 17]

Internet-Draft                      AHDR                      March 2010


6.1. Network Coverage (Node.Coverage)

   [REQUIRED] Each Node SHALL calculate a Network Coverage value that
   quantifies its suitability to be a Domain Lead. Normally, this value
   is calculated based on the number of confirmed AHDR links in the HOP1
   Table. A suggested algorithm selects the node with the most AHDR
   links with each link weighted by its LSL value. The algorithm
   selected to calculate this value will affect network performance.
   Careful consideration should be given in the following areas:

   (1) Evaluation: The quantity as well as the quality of confirmed
   links should be given consideration in the calculation.

   (2) Hysteresis: Once a node becomes a Domain Lead, some consideration
   should be given to leaving it as a Domain Lead unless local
   conditions change a great deal. Too many Domain Lead changes will
   adversely affect Network performance.

   (3) Privileged/Underprivileged Nodes: Certain nodes in the Network
   may make better or worse Domain lead candidates based on their
   location, mobility, power consumption, or other considerations.

   Here is an example Coverage calculation:

   NC = WDL * { W0 + N1(LINK+LSL) + N2(LINK+LSL) + ... + Nn(LINK+LSL) }

   Where:

   WDL (Weighted Domain Lead) is set to 1.0 for non-Domain Leads and
   >1.0 for Domain Leads

   W0 is some constant based on node's innate suitability to be a Domain
   Lead

   Nx(LINK+LSL) is the total weight assigned for 1-hop neighbors 1-n
   where:
   LINK is some constant added for the existence of a link (quantity)
   LSL is some value derived link state level (LCI + LQI)

   o   SOURCE: Calculated from HOP1 Table data
   o   USES: Sent in the Coverage information element of the TU1, DLA,
       and DLR message.

6.2. HOP1 Table (Node.HOP1[])

   [REQUIRED] Each node SHALL maintain a HOP1 Table which contains
   information (learned from TU1 Messages) about the 1-hop links from
   this Node to other AHDR Nodes in the Network. The maximum number of



Ghanadan, et al.               Expires September 2010          [Page 18]

Internet-Draft                      AHDR                      March 2010


   entries in the table SHALL be limited to a value that will fit into
   the .HOP1s field in a TU1 message.

   Each entry in Node.HOP1[] describes an AHDR link. An entry SHALL be
   created, deleted, or updated when an AHDR message is received. See
   Section 8.2, Section 8.3, Section and 8.4 for more details. An entry
   SHALL be deleted if its .Timer expires.

   An entry SHALL consist of at least the following information.
   Additional information MAY be maintained by the implementation.

   .HOP1Node: The TU1.Header.Sender field from a received TU1 message.
   Value SHALL NOT be repeated within the HOP1 Table. This is the index
   field for the table used to uniquely identify each entry.

   .Confirmed: Indicates whether the link to the .HOP1Node is a
   confirmed link (value=1) or unconfirmed (value=0).

   .Coverage: This is the TU1.Coverage value from the most recent TU1
   message received from the .HOP1Node.

   .DomainLead: Domain Lead Nodeid from the most recently received TU1
   message from .HOP1Node.

   .ReceiveLSL: LSL value of received messages from most recent TU1
   from .HOP1Node. Value SHALL fit into TU1.LSLTable[].From field.

   .SendLSL: LSL value of messages sent to .HOP1node.  Value SHALL fit
   into TU1.LSLTable[].From field.

   .Timeout: TU1.Timeout value from most recent TU1 from .HOP1Node.

   .Timer: An AHDR Timer used to determine when a Confirmed entry should
   become Unconfirmed. The .Interval is Calculated as
   (Node.HOP1[].Timeout * Node.Timeout.Link * 2). .Timer is RESET each
   time the Confirmed link is reconfirmed by a received message. If
   .Timer expires, Node.HOP1[].Confirmed SHALL be changed to 0
   (Unconfirmed). Once all effects of the entry becoming Unconfirmed
   (from the Confirmed state) are completed, the Unconfirmed entry MAY
   be removed from the HOP1 Table.

   o   SOURCE: Received TU1 messages
   o   USES: Route resolution; Sent in TU1 and TUD messages

6.3. HOP2 Table (Node.HOP2[])

   [REQUIRED] Each Node SHALL maintain a HOP2 Table which contains
   information (learned from received TU1 Messages) about AHDR nodes



Ghanadan, et al.             Expires September 2010            [Page 19]

Internet-Draft                      AHDR                      March 2010


   that can be reached via a 1-hop neighboring node. The maximum size
   of Node.HOP2Table is left to the implementation. (For planning
   purposes, a full-mesh of N Nodes will require (N-1)! entries.)

   Each entry in the HOP2 Table describes a two hop route to another
   node. Entries SHALL be created or updated when a TU1 message is
   received. If a HOP2 entry with .Nexthop=TU1.Sender and
   .HOP2Node=TU1.Neighbor[].Nodeid does not exist, a new entry SHALL be
   created with those values. If entry does exist, it SHALL be updated.

   A HOP2 Table entry SHALL be deleted if the .Nexthop does not have a
   confirmed entry in the Node.HOP1[] table.

   Each HOP2 Entry SHALL consist of at least the following information.
   Additional information MAY be maintained by the implementation.

   .HOP2Node: AHDR Nodeid from TU1.Neighbor of a received TU1 Message.
   Value SHALL NOT be Node.Nodeid. The combination of .HOP2Node and
   .Nexthop SHALL NOT be repeated in Node.HOP2Table.

   .Nexthop: TU1.Sender from TU1 Message that created this entry.  Value
   must not be Node.Nodeid. No entry SHALL exist if there is no
   confirmed entry in Node.HOP1[] for the .Nexthop.

   .HOP2LSL: TU1.LSLTable[HOP2Node].To value from most recent TU1
   message from .Nexthop node.

   o   SOURCE: Configuration
   o   USES: Route resolution

6.4. HOPK Table (Node.HOPK[])

   [REQUIRED] Each Node SHALL maintain a HOPK Table which contains
   information (learned from TUD Messages) about AHDR Nodes that can be
   reached in 3 or more hops in the AHDR Network. The HOPK Table is a
   table of HOPK Entries. The number of entries is left to the
   implementation as the entries are not exchanged.

   Each HOPK Entry describes a route of 3 or more hops to another node.
   Entries SHALL be created or updated when a TUD message is received.
   If a HOPK entry with .Nexthop=TUD.Sender and
   .HOPKNode=TUD.Domain[].Nodeid does not exist (and the number of
   calculated hops to the .HOPKNode is 3 or more), a new entry SHALL be
   created with those values. If entry does exist, it SHALL be updated.

   A HOPK Table entry SHALL be deleted if it has .Nexthop=TU1.Sender of
   a received TUD message and the TUD.Full value is 1, but the TUD does
   not have the HOPK entry's .HOPKNode in its TUD.Domain[] table. A



Ghanadan, et al.                Expires September 2010         [Page 20]

Internet-Draft                      AHDR                      March 2010


   HOPK Table entry SHALL be deleted if there is no Node.HOP1[] table
   entry for the entry's .Nexthop node. A HOPK Table entry SHALL be
   deleted if there is no Node.HOP1[] table entry for the entry's
   .Nexthop node. A HOPK Table entry SHALL be deleted if its .Timer
   expires.

   Each HOPK Entry SHALL consist of at least the following information.
   Additional information MAY be maintained by the implementation.

   .HOPKNode: TUD.Domain[].Nodeid that is calculated to be 3 or more
   network hops away from Node. Value SHALL NOT be Node.Nodeid.

   .Nexthop: TUD.Sender value from TUD Message that created this table
   entry. Value SHALL NOT be Node.Nodeid. No entry SHALL exist if
   Node.HOP1[.Nexthop].Confirmed value is 0.

   .Source: TUD.Source from TUD message that created this entry.   Value
   SHALL NOT be Node.Nodeid.

   .LSL: LSL value from .Nexthop to .HOPKNode. Value calculated from
   information received in the TUD message. Value SHALL fit into
   TUD.Domain[].LSLTotal field.

   .Hops: Number of hops from Node to .HOPKNode.   Value SHALL fit into
   TUD.Hops field.

   .Domain Lead: Domain Lead of .HOPKNode from TUD.Source.

   .Timer: Use to determine if entry should be removed. .Interval is
   Calculated as (Node.HOP1[.NextHop].Timeout * Node.Timeout.HOPK * 2).
   .Timer is RESET each time the HOPK entry is reconfirmed by a received
   TUD message. If .Timer expires, this HOPK Entry SHALL be deleted.

   o   SOURCE: Received TUD messages
   o   USES: Route resolution

6.5. Bridge Table (NODE.Bridge[])

   [REQUIRED] The Bridge Table is a table of AHDR Nodes that allows
   messages to be forwarded to known Domains that lie within 2-hops of
   this node. Different algorithms to calculate Bridge Nodes will
   result in different Network performance. It is suggested that a
   minimum set of Bridge Nodes be calculated in mediums where broadcast
   messages cause excessive interference with network traffic.

   A Bridge Table is optional if a node elects to select Bridge Nodes
   based on information contained in the message to be forwarded. For
   instance, the Domain Lead Tracks contain information about domains



Ghanadan, et al.              Expires September 2010           [Page 21]

Internet-Draft                      AHDR                      March 2010


   already visited by the message. If those domains are eliminated from
   the Bridge Node calculation, a smaller set of Bridge Nodes may be
   found.

   The designation as a Bridge Node does not affect Node operation
   except when forwarding AHDR messages.

   o   SOURCE: HOP1 and HOP2 Tables, Domain Coverage Table
   o   USES: Forwarding TUD, RDISC, and IPAD messages

6.6. Domain Lead Table (Node.DomainLead[])

   [REQUIRED] The Domain Lead Table SHALL contain at least one entry for
   the primary Domain Lead. If multiple Domain Leads that are within 1
   hop of this Node, an implementation may add more entries. The
   additional entries are backup Domain Leads that SHALL only be used if
   the Node loses contact with the primary Domain Lead. The size of
   this table SHALL be limited to a value that fits in the TU1.DLs
   field. Information from additional Domain Leads may be stored in the
   Node.DomainCoverage[] table.

   An entry SHALL be created in the Domain Lead table if a DLA is
   received and the DLA.Sender does not have an entry in the table. If
   an entry does exist already, it SHALL be updated. The .Coverage
   field of an entry, E, SHALL be updated with the TU1.Coverage value
   when TU1.Sender equals E.Nodeid in a received TU1.

   A Domain Lead entry, E, SHALL be deleted from the table if a DLR is
   received where DLR.Sender equals Node.DomainLead[E].Nodeid. An
   entry, E, SHALL also be deleted if the Node.HOP1[E.Nodeid] entry is
   deleted or if Node.HOP1[E.Nodeid].Confirmed becomes 0.

   Each Entry SHALL consist of at least the following fields.
   Additional information MAY be maintained by the implementation.

   .Nodeid: A Domain Lead Node within 1 hop of this Node. Value SHALL
   NOT be repeated within the Domain Lead Table. Value must be a Nodeid
   from a Confirmed HOP1 Entry. No entry SHALL exist if
   Node.HOP1[.Nexthop].Confirmed value is 0.

   Domain Lead Coverage: The DLA.Coverage, DLR.Coverage or TU1.Coverage
   value for .Nodeid, whichever was received most recently. Value SHALL
   fit into TU1.Coverage field of an AHDR TU1 Message.

   SOURCE: Received in TU1, DLA, and DLR messages
   USES: Sent in TU1, TUD, DLA, and DLR messages




Ghanadan, et al.               Expires September 2010          [Page 22]

Internet-Draft                      AHDR                      March 2010


6.7. Domain Coverage Table (Node.DomainCoverage[])

   [REQUIRED] The Domain Coverage Table is a table of known Domains
   within 2 hops of a given node and the coverage of those Domains by
   the Node and by each of the Node's 1-hop neighbors.

   The known Domains SHALL be collected from the Node.HOP1[].DomainLead
   fields and from received TU1.LeadCoverage[] and TU1.DomainCoverage[]
   tables. The Domain Coverage Table SHALL consist of Domain Coverage
   Entries. The size of this table SHALL be limited to a value that
   fits in the TU1.DCs field.

   Each Domain Coverage entry SHALL consist of at least the following
   fields. Additional information MAY be maintained by the
   implementation.

   .CoveredNode: Nodeid of Domain Lead of known Domain.

   .Cover[] Table: A table of which Nodeids cover the CoveredNode and
   their coverage values. The Cover Table SHALL consist of Cover Table
   Entries. The size of this table SHALL be at least as large as the
   TU1.DCs field. Each Cover Table Entry SHALL consist of at least the
   following fields:

   .CoveringNode: Nodeid that covers the.CoveredNode (Domain Lead).
   .Coverage: Corresponding Domain Coverage value for .CoveringNode in
   the .CoveredNode Domain. Value depends on the number of Domain Nodes
   in the .CoveredNode's Domain that are 1-hop neighbors of
   .CoveringNode.


   SOURCE: Calculated from Node.HOP1[] table and read from TU1 messages
   USES: Sent in TU1 messages; Forming Bridge Table

6.8. IPAD Learned Address Table (Node.IPAD.Learned[])

   [OPTIONAL] The IPAD Learned Address Table contains a list of routing
   addresses that this Node has learned from received IPAD messages.
   The values SHALL conform to the IPAD Address format. The number of
   addresses allowed is not specified here, but consideration should be
   given to the size and number of IPAD messages that will result from
   an excessive number of addresses.

   SOURCE: Received in IPAD messages
   USES: Sent in IPAD messages

7. AHDR Messages




Ghanadan, et al.              Expires September 2010           [Page 23]

Internet-Draft                      AHDR                      March 2010


   AHDR nodes communicate with each other using AHDR messages. Each
   AHDR message, M, SHALL consist of an AHDR message header (M.Header)
   followed by an optional AHDR message body (M.Body) followed by an
   optional AHDR message checksum (M.Checksum).

   All fields in AHDR messages SHALL be unsigned integer values unless
   otherwise noted. Valid values SHALL be any value that fits in the
   field unless otherwise noted.

   Any bits in an AHDR message marked "N/A" SHOULD be set to 0 upon
   transmit and SHALL be ignored upon receive.

7.1. AHDR Message Header

   This header (.Header) appears at the beginning of every AHDR message.
   The node sending the message, SenderNode, fills in all fields before
   sending the message.

7.1.1. Header Fields


        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |             .Length(10)               |       .Type(6)        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |.C |.Version(3)|.Con(2)| N/A | .Networkid(4) | .IDLength(4) |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Sender                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Header.Length (10 bits): Length of AHDR message expressed in number
   of 16-bit words (i.e., 1/16th of the bit length). Length includes
   all message bytes. Legal values SHALL be 3 - 1023. This field
   limits the maximum length of a single AHDR message to (2 * (2^10 -
   1)) or 2046 bytes.

   .Header.Type (6 bits):   AHDR message type

   Value Type   Full Name
   --------------------------------
     0   ----   Illegal value
     1   TU0    Topology Update 0            (see   Section   7.4)
     2   TU1    Topology Update 1            (see   Section   7.5)
     3   TUD    Topology Update Domain       (see   Section   7.6)
     4   DLA    Domain Lead Announcement     (see   Section   7.7)
     5   DLR    Domain Lead Renouncement     (see   Section   7.8)



Ghanadan, et al.        Expires September 2010                 [Page 24]

Internet-Draft                      AHDR                      March 2010


     6     ----    Reserved
     7     RDISC   Route Discovery             (see Section 7.9)
     8     RRES    Route resolution                 (see Section 7.10)
     9     RERR    Route Error                 (see Section 7.11)
    10     ----    Reserved
    11     ----    Reserved
    12     ----    Reserved
    13     ----    Reserved
    14     ----    Reserved
    15     ----    Reserved
    16     IPAD    IP Address Distribution     (see Section 7.12)
    17     ----    Reserved
   18-31   ----    Reserved

   .Header.C (1 bit): SenderNode.Checksum. Value of 1 SHALL indicate
   presence of .Checksum field. Value of 0 SHALL indicate the field is
   not present. The .Checksum field, if present, SHALL appear as the
   last 16 bits of the AHDR messages (after the body of the message).

   .Header.Version (3 bits): AHDR version number for compatibility
   purposes. The version in this document is Version 0.

   .Header.Con (2 bits):     SenderNode.LCI.

   .Header.Networkid(4 bits): SenderNode.Networkid. With the exception
   of IPAD messages, all AHDR Nodeids that appear in an AHDR message
   SHALL have the same Networkid as the sending node.

   .Header.IDLength (4 bits): SenderNode.IDLength. Length of all AHDR
   Nodeids in 2-byte WORDs (i.e., one-half of byte length or 1/16th of
   the bit length) minus one. Therefore, value of 0 indicates 16 bits
   and 1 indicates 32 bits up to 15 which indicates 256 bits.

   .Header.Sender (16 or more bits): SenderNode.Nodeid.   The length in
   bits SHALL be 16 + (.Header.IDLength * 16).

7.2. AHDR Message Body

   The body (.Body) of an AHDR message SHALL appear directly following
   the .Header of the message. The number of bits in .Body SHALL be any
   value greater than or equal to 0. The number of bits in .Body SHALL
   be any value less than or equal to 16 * (1023 - (3 + Node.IDLength +
   Node.Checksum)).

7.3. AHDR Message Checksum

   The following 16-bit structure SHALL appear at the end of the AHDR
   message if, and only if, the .Header.C field equals 1.



Ghanadan, et al.           Expires September 2010              [Page 25]

Internet-Draft                      AHDR                      March 2010



7.3.1. Checksum Fields


        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                         .Checksum(16)                         |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Checksum (16 bits): A checksum value which SHALL be calculated by
   the Calculate Checksum Process before the message is sent.

7.4. TU0 -- Topology Update 0 Message

   A TU0 message announces an AHDR node to the network. A TU0 message
   is used when the Node.HOP1[] table is empty. Since the TU0 message
   does not contain any neighbor data (no HOP1 table) sending a TU0
   breaks all confirmed links to and from the node.

7.4.1. TU0 Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                       .Header (.Type=1)                       |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                   .Checksum (if .Header.C=1)                  |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   See .Header and .Checksum specifications in Section 7.1 and 7.3
   respectively.

7.5. TU1 -- Topology Update 1 Message

   A TU1 message announces an AHDR node and its HOP1 table and
   additional information. Other Nodes use the information from the
   received TU1 messages to form and maintain confirmed links to 1-hop
   neighbor nodes.


7.5.1. TU1 Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                       .Header (.Type=2)                       |
      |                               .                               |
      |                               .                               |



Ghanadan, et al.              Expires September 2010           [Page 26]
 
Internet-Draft                      AHDR                      March 2010


      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                          .Timeout(16)                         |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | N/A |                    .Coverage(14)                        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                 .HOP1s(10)             |   .DCs(4)    |.DLs(2)|
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                          .Neighbor[]                          |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                       .DomainCoverage[]                       |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .LeadCoverage[]                        |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                     .Checksum (if .Header.C=1)                |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the TU1.Header.Sender node. This will be the local
   Node during construction for transmit and some other Node during
   processing after receive.

   .Timeout: SenderNode.Timeout.Topology value in 1/10s of seconds;

   .Coverage: SenderNode.Coverage;

   .DLs(2): SenderNode.DomainLeads[].Count;

   .DCs(4): SenderNode.DomainCoverage[].Count -
   SenderNode.DomainLeads[].Count;

   .HOP1s(10): SenderNode.HOP1[].Count (if this value is 0, the TU0
   message should be used instead of TU1);

   .Neighbor[]: Table built from SenderNode.HOP1[] entries.

   .DomainCoverage[]: Table built from SenderNode.DomainCoverage[]
   entries.

   .LeadCoverage[]: Table built from SenderNode.DomainLead[] entries.

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.




Ghanadan, et al.              Expires September 2010           [Page 27]

Internet-Draft                      AHDR                      March 2010


7.5.1.1 TU1.Neighbor[] Table

   This is a table of one or more entries. The entry count SHALL be
   given by TU1.HOP1s. Entries SHALL be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |      N/A        | .DI()|     .ToLSL(4)    |    .FromLSL(4)    |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid: Neighbor's Nodeid from SenderNode.HOP1[].Nodeid.   Size the
   same as TU1.Header.Sender.

   .DI: Index (plus 1) of .Nodeid's entry in the TU1.LeadCoverage[]
   table. If 0, .Nodeid has no entry in the table. A value greater
   than 0 indicates that the .Nodeid is a Domain Lead and that the (.DI
   - 1) value is the index into TU1.LeadCoverage[] for the .Nodeid
   coverage. Values SHALL range from 0 to TU1.DLs. Only value 0 may be
   repeated.

   .ToLSL: LSL cost from SenderNode.HOP1[.Nodeid].SendLSL.

   .FromLSL: LSL cost from SenderNode.HOP1[.Nodeid].ReceiveLSL.

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.

7.5.1.2 TU1.DomainCoverage[] Table

   This table announces Domains that the SenderNode can reach within 2
   network hops and the SenderNode's DomainCoverage value for those
   Domains.   This information SHALL be used by the receiver to evaluate
   the Sender as a possible Bridge Node to the Domain.

   This table SHALL contain 1-15 entries. The entry count SHALL be
   given by TU1.DCs. When the TU1.DCs field is 0, the
   TU1.DomainCoverage[] table is not included. TU1.DomainCoverage[]
   entries SHALL be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |



Ghanadan, et al.            Expires September 2010             [Page 28]

Internet-Draft                      AHDR                      March 2010


      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |.Dst(2)|                  .Coverage(14)                        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid: Domain Lead from SenderNode.DomainCoverage[].CoveredNode.
   Size the same as TU1.Header.Sender. Field SHALL NOT contain any
   Nodeid that appears in the TU1.Neighbor[] table with a
   TU1.Neighbor[].DI value greater than 0. The Domain Coverage values
   for those Nodeids appear only in the TU1.LeadCoverage[] table.

   .Dst: Distance from SenderNode to .Nodeid (0=1 hop, 1=2 hops, 2=3+
   hops, 3 reserved for later use)

   .Coverage: Value from SenderNode.DomainCoverage[].Coverage for the
   .Nodeid.

7.5.1.3 TU1.LeadCoverage[] Table

   This table announces the SenderNode's DomainCoverage for up to 3
   Domain Leads within one hop of the SenderNode. The Nodeid for each
   entry SHALL be found in the TU1.Neighbor[] table where the .DI field
   is non-zero. When the TU1.DLs field is 0, the TU1.LeadCoverage[]
   table is not included.

   This table SHALL contain 1-3 entries. The entry count SHALL be given
   by TU1.DCs. Entries SHALL be formed thus:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | N/A |                    .Coverage(14)                        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Coverage: Value for covered Domain from
   SenderNode.DomainCoverage[].Coverage

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.

7.6. TUD -- Topology Update Domain Message

   A TUD message announces an AHDR node as a Domain Lead. The message
   also advertises the Domain Nodes and additional information.

7.6.1. TUD Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                       .Header (.Type=3)                       |



Ghanadan, et al.              Expires September 2010           [Page 29]

Internet-Draft                      AHDR                      March 2010


      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                              .Source                           |
      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                             .Previous                          |
      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |             .Hops(8)            |           .Sequence(8)       |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .LSLTotal(16)                        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |    .LT1(4)    |     .LT2(4)     |     .LT3(4)    |     .LT4(4) |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |              N/A            |.F |             .HOP1s(8)        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |            .BNs(8)              |              .DLs(8)         |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                             .Domain[]                          |
      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                             .Bridge[]                          |
      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                         .DomainTrack[]                         |
      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .BNForwardRef[]                         |
      |                                 .                              |
      |                                 .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                    .Checksum (if .Header.C=1)                  |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the TUD.Header.Sender node. This will be the local
   Node during construction for transmit and some other Node during
   processing after receive. The "Exit Node" is a node one hop from the
   SenderNode that last forwards the TUD out of the SenderNode's Domain.




Ghanadan, et al.             Expires September 2010            [Page 30]

Internet-Draft                      AHDR                      March 2010


   .Source: Nodeid of original source of TUD.    This field SHALL NOT be
   updated by any Node forwarding the TUD.

   .Previous: Nodeid of node previous to SenderNode. Set to 0 by
   SenderNode that creates the TUD. This field SHALL be updated by each
   Node that forwards the TUD.

   .Hops(8): Number of hops from SenderNode to Exit Node.    This value
   SHALL be updated by each Node that forwards the TUD.

   .Sequence(8): TUD sequence number for identification. First value
   SHALL be 1, then each subsequent TUD SHALL increment the value.
   After the value 255 is used, the value 1 SHALL be used again. The
   value 0 SHALL never be used. This field SHALL NOT be updated by any
   Node forwarding the TUD.
   .LSLTotal(8): LSL from SenderNode to Exit Node. This value SHALL be
   updated by each Node that forwards the TUD.

   .LT1(4): Count of return links that have LSL values 0-3 (i.e., worst
   links).
   .LT2(4): Count of return links that have LSL values 4-7.
   .LT3(4): Count of return links that have LSL values 8-11.
   .LT4(4): Count of return links that have LSL values 12-15 (i.e., best
   links).

   These fields MAY be updated by each Node that forwards the TUD.

   .HOP1s(8): SenderNode.HOP1[].Count (the size of .Domain[] Table
   included in message). To reduce message sizes, TUD.Source Node MAY
   limit entries to those where SenderNode.HOP1[].DomainLead is
   SenderNode, but this may also reduce the number of available routes
   to each Node. This field SHALL NOT be updated by any Node forwarding
   the TUD.

   .BNs(8): Size of .Bridge[] Table included in message. This value is
   set by the "Bridge Selection Process". See Section 8.8.

   .DLs(8): Size of .DomainTrack[] Table included in message. This
   table is set by the "Domain Lead Tracking Process". See Section 8.9.

   .F(1): Value of 1 indicates a full TUD (all Domain Nodes included).
   Value of 0 indicates an update TUD (only Domains Nodes changed since
   previous TUD included)

   .Domain[]: if .F = 1, .Domain[] is built from all SenderNode.HOP1[]
   entries (or, optionally, only those entries whose .DomainLead value
   is SenderNode). If .F = 0, .Domain[] only include entries from
   SenderNode.HOP1[] that changed (i.e., added, modified, or removed)



Ghanadan, et al.              Expires September 2010           [Page 31]

Internet-Draft                      AHDR                      March 2010


   since the previous TUD message.   This table MAY be updated by each
   Node that forwards the TUD.

   .Bridge[]: Table of Nodeids that have been selected to forward the
   TUD message. Filled from SenderNode.Bridge[]. This table is set by
   the "Bridge Selection Process". See Section 8.8.

   .DomainTrack[]: Table of Domains (identified by the Nodeid of the
   Domain Lead) this message has visited or has been directed to. This
   table is set by the "Domain Lead Tracking Process". See Section 8.9.

   .BNForwardRef[]: Table that indicates which .DomainTrack[] entries
   correspond to each .Bridge[] entry. This table MAY be updated by
   each Node that forwards the TUD.

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.

7.6.2. TUD.Domain[] Table

   The number of entries in TUD.Domain[] SHALL be given by TUD.HOP1s.
   The entries SHALL be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                             .Nodeid                           |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | .Type | N/A |      .Hops(4)    |    .LSL(4)   |   .OLSL(4)    |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16 or more bits): SenderNode.HOP1[].Nodeid where
   SenderNode.HOP1[].Confirmed is 1.

   .Type (2 bits): Entry type (0=OLD, 1=ADD, 2=DELETE, 3=REFRESH).
       OLD: Entry has not changed since the previous TUD
       ADD: Entry was added since the previous TUD
       DELETE: Entry was removed since the previous TUD
       REFRESH: Entry was modified since the previous TUD

   .Hops (4 bits): Hop count from .Nodeid to Exit Node.  Only the Exit
   Node may use the value 0.

   .LSL (4 bits): If .Hops is 0, LSL from Exit Node to TUD.Source.  If
   .Hops is 1, LSL from .Nodeid to Exit Node. If .Hops is > 1, LSL from
   TUD.Source to .Nodeid.




Ghanadan, et al.             Expires September 2010            [Page 32]

Internet-Draft                      AHDR                      March 2010


   .OLSL (4 bits):   LSL from TUD.Source to .Nodeid

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.

7.6.3. TUD.Bridge[] Table

   The .Bridge[] table SHALL consist of entries which indicate which
   Nodes may forward this TUD message. As the TUD message is forwarded
   throughout the network, TUD.Bridge[] SHALL be updated to prevent
   routing loops and limit retransmissions. The number of entries in
   the TUD.Bridge[] table SHALL be given by TUD.BNs. The Entries SHALL
   be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16 or more bits): .Nodeid that should forward this message.
   This table is set by the "Bridge Selection Process". See Section
   8.8.



7.6.4. TUD.DomainTrack[]Table

   The TUD.DomainTrack[] SHALL consist of entries that show which
   Domains this message has already visited and which Domains it should
   visit next. As the TUD message is forwarded throughout the network,
   TUD.Domaintrack[] SHALL be updated to prevent routing loops and limit
   retransmissions. The number of table entries SHALL be given by
   TUD.DLs(8). TUD.DomainTrack[] SHALL be a list of Nodeids:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16+ bits):   Nodeid of a Domain Lead.

   This table is set by the "Domain Lead Tracking Process".  See Section
   8.9.




Ghanadan, et al.               Expires September 2010          [Page 33]

Internet-Draft                      AHDR                      March 2010




7.6.5. TUD.BNForwardRef[] Table

   The TUD.BNForwardRef[] table indicates which Domain Leads each Bridge
   Node should forward the TUD to. The TUD.BNForwardRef[] table SHALL
   consist of one entry for each node in the TUD.Bridge[] table. The
   number of table entries is therefore given by TUD.BNs(8). Each
   TUD.BNForwardRef[] entry shows which TUD.DomainTrack[] entry the
   Bridge Node is required to cover. Each entry lists only the indexes
   into the TUD.DomainTrack[] table to avoid repeating the Nodeids of
   the Domains. The format of an entry SHALL be as follows:

        00 01 02 03 04 05 06 07
      +---+---+---+---+---+---+---+---+
      |            .Count(8)          |
      +---+---+---+---+---+---+---+---+
      |            .DLIndex[]         |
      |               .               |
      +---+---+---+---+---+---+---+---+

   .Count: Number of entries in following .DLIndex[] table associated
   with a given Bridge Node. The value SHALL NOT be 0. Any Bridge Node
   that does not cover a Domain SHALL NOT be included in the
   TUD.Bridge[] table.

   .DLIndex[]: Table of 0-up indexes into the .DomainTrack[] table.
   Each index SHALL be 8 bits long. The total size of the table in bits
   SHALL be (8 * .Count).

   Entries consist of 8-bit values (counts and indexes). Once one entry
   ends, the next one begins immediately with another .Count field in
   the next 8 bits. The length of the entire TUD.BNForwardRef[] table
   MUST be rounded up to a multiple of 16 bits. Any value MAY be used
   for padding.

   Any index that appears in a .BNForwardRef[].DLIndex[] table MUST NOT
   be repeated in a different .BNForwardRef[].DLIndex[] table in the
   same TUD. A Domain SHALL be covered by only one Bridge Node, but a
   Bridge node MAY cover more than one Domain. This eliminates messages
   from getting resent to Domains that the message has already
   propagated through.

   Each Bridge Node SHALL forward the TUD towards the Domain Lead(s)
   indicated in its TUD.BNForwardRef[] table entry. Because TUDs are
   broadcast, other Domain Leads might overhear and process TUDs that
   are not specifically intended for them. Those other Domain Leads may
   process those TUDs as specified in Section 7.6.



Ghanadan, et al.              Expires September 2010           [Page 34]

Internet-Draft                      AHDR                      March 2010




   Example:

      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                               TUD                              |
      |                                .                               |
      |                                .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |            .BNs = 3            |             .DLs = 5          |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Domain[]                           |
      |                                .                               |
      |                                .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Bridge[3]                          |
      |                               121                              |
      |                                66                              |
      |                                  9                             |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .DomainTrack[5]                         |
      |                               116                              |
      |                                44                              |
      |                                87                              |
      |                                39                              |
      |                                  5                             |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .BNForwardRef[3]                        |
      |   .BNForwardRef[0].Count=1     | .BNForwardRef[0].DLIndex[0]=4 |
      |   .BNForwardRef[1].Count=2     | .BNForwardRef[1].DLIndex[0]=2 |
      | .BNForwardRef[1].DLIndex[1]=3 |    .BNForwardRef[2].Count=1    |
      | .BNForwardRef[2].DLIndex[0]=0 |           0 (Padding)          |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .BNForwardRef[0].Count=1 : Bridge Node 121 (.Bridge[] index 0)
   forwards this TUD towards 1 Domain Lead.
   .BNForwardRef[0].DLIndex[0]=4 : Domain Lead to forward to is Node 5
   (.DomainTrack[] index 4). This may require forwarding through
   another node if Node 4 is not a 1-hop neighbor.

   .BNForwardRef[1].Count=2 : Bridge Node 66 (.Bridge[] index 1)
   forwards this TUD towards 2 Domain Leads.
   .BNForwardRef[1].DLIndex[0]=2 : Domain Lead to forward to is Node 87
   (.DomainTrack[] index 2).
   .BNForwardRef[1].DLIndex[1]=3 : Domain Lead to forward to is Node 39
   (.DomainTrack[] index 3).




Ghanadan, et al.             Expires September 2010            [Page 35]

Internet-Draft                      AHDR                      March 2010


   .BNForwardRef[2].Count=1 : Bridge Node 9 (.Bridge[] index 1) forwards
   this TUD towards 1 Domain Lead.
   .BNForwardRef[2].DLIndex[0]=0 : Domain Lead to forward to is Node 116
   (.DomainTrack[] index 2).

   No Bridge Node forwards this TUD to Domain Lead 44 because no
   .DLIndex[] in any entry contained the index 1.

7.7. DLA -- Domain Lead Announcement Message

   A DLA message is sent by a node to declare its intention to serve as
   the Domain Lead.


7.7.1. DLA Fields

         00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
       |                       .Header (.Type=4)                       |
       |                               .                               |
       |                               .                               |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
       | N/A |                    .Coverage(14)                        |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
       |                   .Checksum (if .Header.C=1)                  |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the DLA.Header.Sender node. This will be the local
   Node during construction for transmit and some other Node during
   processing after receive.

   .Coverage (14 bits):   Value from SenderNode.Coverage.

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.


7.8.   DLR -- Domain Lead Renouncement Message

   A DLR is sent by a node to announce its intention to relinquish the
   Domain Lead role.


7.8.1. DLR Fields

         00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
       |                       .Header (.Type=5)                       |



Ghanadan, et al.              Expires September 2010           [Page 36]

Internet-Draft                      AHDR                      March 2010


      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | N/A |                    .Coverage(14)                        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .NewLead                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | N/A |                  .NewCoverage(14)                       |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                   .Checksum (if .Header.C=1)                  |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the DLR.Header.Sender node. This will be the local
   Node during construction for transmit and some other Node during
   processing after receive.

   .Coverage (14 bits):   SenderNode.Coverage

   .NewLead (16 or more bits): SenderNode.HOP1[].Nodeid with highest
   SenderNode.HOP1[].Coverage value in table.

   .NewCoverage (14 bits):   SenderNode.HOP1[.NewLead].Coverage value.

   Bits marked "N/A" SHOULD be set to 0 upon transmit and SHALL be
   ignored upon receive.


7.9. RDISC -- Route Discovery Message

   RDISC is sent by a source Node to discover a route to a destination
   Node.


7.9.1. RDISC Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .Header (.Type=7)                      |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Source                            |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |           .Sequence(8)         |DNR|        .Hopcount(7)      |



Ghanadan, et al.              Expires September 2010           [Page 37]

Internet-Draft                      AHDR                      March 2010


      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                          .Destination                         |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |            .BNs(8)             |              .DLs(8)         |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                             .Bridge                           |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                          .DomainTrack[]                       |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                         .BNForwardRef[]                       |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                    .Checksum (if .Header.C=1)                 |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the RDISC.Header.Sender node. This will be the
   local Node during construction for transmit and some other Node
   during processing after receive.

   .Source (16+ bits):   Nodeid of original source of RDISC message

   .Sequence (8 bits): RDISC sequence number for identification. The
   value 0 indicates a local RDISC that MUST not be forwarded by any
   node that receives it. For non-local RDISCs, the first value used
   SHALL be 1 and each subsequent non-local RDISC SHALL increment the
   value by 1. After the value 255 is used, the sequence SHALL start
   over using the value 1. The .Sequence value MUST NOT be modified by
   any Node forwarding the RDISC message.

   .DNR (1 bit): Do Not Reply. If set to 1, receiver SHALL NOT reply
   to the RDISC. If 0, the receiver MUST reply. An RDISC with .DNR set
   will continue on to the .Destination Node. This will ensure that a
   return path from .Destination to .Source will exist.


   .Hopcount (7 bits): Accumulated hop count as RDISC is forwarded
   through the network. .Hopcount is set to 0 by the RDISC source node.
   Each node that forwards the RDISC SHALL add 1 to the field. If the
   field reaches its maximum value, the maximum value shall be retained
   for the rest of the life of the message.




Ghanadan, et al.              Expires September 2010           [Page 38]

Internet-Draft                      AHDR                      March 2010


   .Destination (16+ bits): The Nodeid that the .Source node is trying
   to locate.

   .Bridge[]: Table of Nodeids that have been selected to forward the
   RDISC message. .

   .DomainTrack[]:   Table of Domains this message has visited.

   .BNForwardRef[]: Table that indicates which .DomainTrack[] entries
   correspond to each .Bridge[] entry.


7.9.2. RDISC.Bridge[]

   The number of entries in the RDISC.Bridge[] table SHALL be given by
   RDISC.BNs(8). The Entries SHALL be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16 or more bits): .Nodeid that should forward this message.

   At the Domain Lead Node originating the RDISC message, the .Bridge[]
   table SHALL be filled with the entries from the Node.Bridge[] table.
   The RDISC.BNs is set to the number of identifiers or entries in
   Node.Bridge[] table.

   At the Bridge Node(s) selected to forward the RDISC message, the
   .Bridge[] table of the RDISC message to be forwarded is filled with
   Node.Bridge[] entries one for each NEW Domain Lead entry that was
   appended to the TUD.DomainTrack[] table;

   See Section 8.8 "Bridge Selection Process" for details on the process
   to select the Bridge Node(s) to forward the RDISC message.


7.9.3. RDISC.DomainTrack[] Table

   The RDISC.DomainTrack[] consists of entries that keep track of which
   domains this message has already visited and which domains it should
   visit next. The number of table entries for both tables SHALL be
   given by RDISC.DLs(8). RDISC.DomainTrack[] SHALL be a list of
   Nodeids:




Ghanadan, et al.            Expires September 2010             [Page 39]

Internet-Draft                      AHDR                      March 2010


        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16+ bits):   Nodeid of a Domain Lead


7.9.4. RDISC.BNForwardRef[] Table

   The RDISC.BNForwardRef[] table shows which Domain Leads each Bridge
   Node should forward the RDISC to. The RDISC.BNForwardRef[] table
   SHALL consist of one entry for each node in the RDISC.Bridge[] table.
   The number of table entries SHALL be given by RDISC.BNs(8). Each
   RDISC.BNForwardRef[] entry SHALL show which RDISC.DomainTrack[] entry
   the Bridge Node is required to cover. Each entry SHALL list only the
   indexes into the RDISC.DomainTrack[] table to avoid repeating the
   Nodeids of the Domains. The format of an entry SHALL be as follows:

        00 01 02 03 04 05 06 07
      +---+---+---+---+---+---+---+---+
      |            .Count(8)          |
      +---+---+---+---+---+---+---+---+
      |            .DLIndex[]         |
      |               .               |
      +---+---+---+---+---+---+---+---+

   .Count: Number of entries in following .DLIndex[] table. The value
   SHALL NOT be 0. Any Bridge Node that does not cover a Domain SHALL
   NOT be included in the RDISC.Bridge[] table.

   .DLIndex[]: Table of 0-up indexes into the .DomainTrack[] table.
   Each index SHALL be 8 bits long. The total size of the table in bits
   SHALL be (8 * .Count).

   Entries consist of 8-bit values (counts and indexes). Once one entry
   ends, the next one begins immediately with another .Count field in
   the next 8 bits. The length of the entire RDISC.BNForwardRef[] table
   MUST be rounded up to a multiple of 16 bits. Any value MAY be used
   for padding.

   Any index that appears in a .BNForwardRef[].DLIndex[] table MUST NOT
   be repeated in a different .BNForwardRef[].DLIndex[] table in the
   same RDISC. Only one Bridge Node covers a Domain.




Ghanadan, et al.               Expires September 2010          [Page 40]

Internet-Draft                      AHDR                      March 2010


   Each Bridge Node SHALL forward the RDISC towards the Domain Leads
   indicated in its RDISC.BNForwardRef[] table entry. Because RDISCs
   are broadcast, other Domain Leads might overhear and process RDISCs
   that are not specifically intended for them. Those other Domain
   Leads may process those RDISCs as specified in Section 7.9.


7.10. RRES -- Route resolution Message

   RRES is sent by any Node with a route to the destination node i.e.,
   the node has the destination address in its HOP1, and/or HOP2, or
   HOPK tables.


7.10.1. RRES Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .Header (.Type=8)                      |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Source                            |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |           .Sequence(8)         |            .Hopcount(8)      |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                          .Destination                         |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | .PrevLSL(4) |                        .DestLSL(12)             |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Previous                          |
      |                                .                              |
      |                                .                              |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                   .Checksum (if .Header.C=1)                  |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the RRES.Header.Sender node. This will be the
   local Node during construction for transmit and some other Node
   during processing after receive.

   .Source (16+ bits): Nodeid of original source of RDISC message that
   RRES is replying to.




Ghanadan, et al.              Expires September 2010           [Page 41]
 
Internet-Draft                      AHDR                      March 2010


   .Sequence (8 bits): RDISC sequence number from RDISC message that
   RRES is replying to. The .Sequence value MUST NOT be modified by the
   nodes forwarding the RDISC message.

   .Hopcount (8 bits): Hop count from RRES.Source to RRES.Destination.
   Accumulated hop count as RDISC is forwarded through the network.
   .Hopcount is set to 0 by the RRES source node. Each node that
   forwards the RRES SHALL add 1 to the field. If the field reaches its
   maximum value, the maximum value shall be retained for the rest of
   the life of the message.


   .Destination (16+ bits): = RDISC.Destination.

   .PrevLSL (4 bits):    LSL to send from RRES.Sender to RRES.Previous
   node.

   .DestLSL (12 bits):   LSL to send from RRES.Previous to
   RRES.Destination.

   .Previous (16+ bits): Nodeid that forwarded the RRES to RRES.Sender.
   Field SHALL be set to 0 by the node which creates the RRES.


7.11. RERR -- Route Error Message

   The RERR message is sent to notify the RDISC originating node that a
   route to the destination cannot be found. The RERR message is sent
   by all Bridge Nodes that received the corresponding RDISC but were
   not able to resolve a route to the destination node and could not
   forward the RDISC any further. The RERR message is also sent by
   Domain Lead Node(s) that received the RDISC and had their RDISC
   timers expire without a route resolution.



7.11.1. RERR Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                       .Header (.Type=9)                       |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Source                             |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+



Ghanadan, et al.              Expires September 2010           [Page 42]

Internet-Draft                      AHDR                      March 2010


      |              N/A              |           .Sequence(8)        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                         .Destination                          |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                   .Checksum (if .Header.C=1)                  |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the RERR.Header.Sender node. This will be the
   local Node during construction for transmit and some other Node
   during processing after receive.

   .Source (16+ bits): Nodeid of original source of RDISC message that
   RRES is replying to.

   .Sequence (8 bits): RDISC sequence number from RDISC message that
   RRES is replying to. The .Sequence value MUST NOT be modified by the
   nodes forwarding the RDISC message.

   .Destination (16+ bits): The Nodeid that the RRES message located.


7.12. IPAD -- IP Address ReDistribution Message

   The IPAD message is sent to advertise the network addresses which the
   originating Node has a route to.


7.12.1. IPAD Fields

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                       .Header (.Type=16)                      |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Source                             |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Previous                           |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |            .Count(8)          |           .Sequence(8)        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |            .BNs(8)            |             .DLs(8)           |



Ghanadan, et al.              Expires September 2010           [Page 43]

Internet-Draft                      AHDR                      March 2010


      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Address[]                          |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Bridge[]                           |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .DomainTrack[]                         |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                        .BNForwardRef[]                        |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                   .Checksum (if .Header.C=1)                  |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   The SenderNode is the IPAD.Header.Sender node. This will be the
   local Node during construction for transmit and some other Node
   during processing after receive.

   .Source (16+ bits):    Nodeid of original source of IPAD message

   .Previous: Nodeid of node previous to sender that forwarded this
   IPAD. Value set to 0 by creator of RERR message.

   .Count (8 bits):    Size of .Address table included in message.

   .Sequence (8 bits):    IPAD sequence number for identification.

   .BNs (8 bits):     Size of .Bridge table included in message.

   .DLs (8 bits):     Size of .DomainTrack table included in message.

   .Address[]: Table of network addresses that are available via the
   IPAD.Source node. See details below.

   .Bridge[]: Table of Nodeids that have been selected to forward the
   TUD message. If Node.Nodeid is not in TUD.Bridge[], then the
   receiving node SHALL NOT forward the TUD message.

   .DomainTrack[]: Table of Domains this message has visited.

   .BNForwardRef[]: Table that indicates which .DomainTrack[] entries go
   with each .Bridge[] entry.



Ghanadan, et al.           Expires September 2010              [Page 44]

Internet-Draft                      AHDR                      March 2010




7.12.2. IPAD.Address[]

   The IPAD.Address[] table SHALL be a list of network addresses that
   comes from the Node.IPAD.Advertised[] table. The table size SHALL be
   given by IPAD.Count. The entries SHALL be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |    .Type(4)   |   .Action(4) | .NetworkID(4) | .IDLength(4) |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Source                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Metric(16)                         |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                           .Address                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                             .Mask                             |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


   .Type (4 bits): Type of address in .Address and .Mask fields. Value
   0 SHALL mean none, used to indicate empty entries in tables. Value 2
   SHALL mean IPv4 (32 bits). Value 3 SHALL mean IPv6 (128 bits). All
   remaining values SHALL be reserved for other types.

   .Action (4 bits): Action. Values SHALL be 0 for no action, 1 for
   add, 2 for delete, 3 for modify. For values 0, 1 or 3, the receiver
   SHOULD add a new entry if no entry exists. For value 2, the receiver
   SHOULD delete the entry if the entry exists. For value 3, the
   receiver SHOULD update the entry if the entry exists.

   .Networkid (4 bits):   AHDR Networkid for both IPAD.Source and
   IPAD.Address field.

   .IDLength (4 bits): Length of .Source in 2-byte WORDs (i.e., one-
   half of byte length or 1/16th of the bit length) minus one.

   .Source (16+ bits): The initial source of the address being
   advertised. This will help prevent advertising loops.




Ghanadan, et al.             Expires September 2010            [Page 45]

Internet-Draft                      AHDR                      March 2010


   .Metric (16 bits):     Routing metric.

   .Address (16+ bits):     Address being advertised.

   .Mask (16+ bits):    Mask for address being advertised.


7.12.3. IPAD.Bridge[]

   The number of entries in the IPAD.Bridge[] table SHALL be given by
   IPAD.BNs(8). The Entries SHALL be formed as follows:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16 or more bits):  .Nodeid that should forward this message.

   At the Domain Lead Node originating the IPAD message, the .Bridge[]
   table SHALL be filled with the entries from the Node.Bridge[] table.
   The IPAD.BNs is set to the number of identifiers or entries in
   Node.Bridge[] table.

   At the Bridge Node(s) selected to forward the IPAD message, the
   .Bridge[] table of the RDISC message to be forwarded is filled with
   Node.Bridge[] entries one for each NEW Domain Lead entry that was
   appended to the IPAD.DomainTrack[] table;

   See Section 8.8 "Bridge Selection Process" for details on the process
   to select the Bridge Node(s) to forward the RDISC message.



7.12.4. IPAD.DomainTrack[] Table

   The IPAD.DomainTrack[] consist of entries that keep track of which
   domains this message has already visited and which domains it should
   visit next. The number of table entries for both tables SHALL be
   given by IPAD.DLs(8). IPAD.DomainTrack[] SHALL be a list of Nodeids:

        00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |                            .Nodeid                            |
      |                               .                               |
      |                               .                               |



Ghanadan, et al.              Expires September 2010           [Page 46]

Internet-Draft                      AHDR                      March 2010


      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

   .Nodeid (16+ bits):   Nodeid of a Domain Lead


   The sending node SHALL use the specifications found in Section 8.9
   "Domain Lead Tracking Process" to construct this table. The .DLs
   field is set to the number of derived Domain Lead identifiers.


7.12.5. IPAD.BNForwardRef[] Table

   The IPAD.BNForwardRef[] table shows which Domain Leads each Bridge
   Node should forward the IPAD to. The IPAD.BNForwardRef[] table SHALL
   consist of one entry for each node in the IPAD.Bridge[] table. The
   number of table entries SHALL be given by IPAD.BNs(8). Each
   IPAD.BNForwardRef[] entry SHALL show which IPAD.DomainTrack[] entry
   the Bridge Node is required to cover. Each entry SHALL list only the
   indexes into the IPAD.DomainTrack[] table to avoid repeating the
   Nodeids of the Domains. The format of an entry SHALL be as follows:

        00 01 02 03 04 05 06 07
      +---+---+---+---+---+---+---+---+
      |            .Count(8)          |
      +---+---+---+---+---+---+---+---+
      |            .DLIndex[]         |
      |               .               |
      +---+---+---+---+---+---+---+---+

   .Count: Number of entries in following .DLIndex[] table. The value
   SHALL NOT be 0. Any Bridge Node that does not cover a Domain SHALL
   NOT be included in the IPAD.Bridge[] table.

   .DLIndex[]: Table of 0-up indexes into the .DomainTrack[] table.
   Each index SHALL be 8 bits long. The total size of the table in bits
   SHALL be (8 * .Count).

   Entries consist of 8-bit values (counts and indexes). Once one entry
   ends, the next one begins immediately with another .Count field in
   the next 8 bits. The length of the entire IPAD.BNForwardRef[] table
   MUST be rounded up to a multiple of 16 bits. Any value MAY be used
   for padding.

   Any index that appears in a .BNForwardRef[].DLIndex[] table MUST NOT
   be repeated in a different .BNForwardRef[].DLIndex[] table in the
   same IPAD. Only one Bridge Node covers a Domain.




Ghanadan, et al.               Expires September 2010          [Page 47]

Internet-Draft                      AHDR                      March 2010


   Each Bridge Node SHALL forward the IPAD towards the Domain Leads
   indicated in its IPAD.BNForwardRef[] table entry. Because IPADs are
   broadcast, other Domain Leads might overhear and process IPADs that
   are not specifically intended for them. Those other Domain Leads may
   process those IPADs as specified in Section 7.12.

8. AHDR Processes

   This section specifies the required AHDR processes and algorithms.
   The description of a process consists of the following:

   o   TRIGGER - a set of occurrences which cause the process to
       execute.

   o   INPUT - information the process needs. All of the Node Data
       Structures and Node Network Information are implied in every
       INPUT set.

   o   RESULT - a list of possible results. A calling process may use
       the result of a process it calls to determine its next action.
       This field is omitted when the process has no result.

   o   ACTIONs - a list of actions that the process SHALL perform in
       order. All actions are requirements unless otherwise noted.


   A Process can perform the following actions which each have a
   specific meaning as explained:

   o   Stop Process - When this action is indicated, the Node SHALL end
       the current Process and set the Result of the Process as shown.
       The Node SHALL not execute any other actions in the Process.

   o   Execute - When this action is indicated, the Node SHALL suspend
       execution of the current Process (the "old" Process) and begin
       execution of another Process indicated by the execute action (the
       "new" Process). When the new Process stops, execution of the old
       Process SHALL resume just after the execute action in the old
       Process. Executions can be nested several layers deep.

   o   Goto - Jump from one Step in a Process directly to another Step
       in the same Process without executing any intervening Steps.

8.1. Main Process




Ghanadan, et al.              Expires September 2010           [Page 48]

Internet-Draft                      AHDR                      March 2010


   The Main Process is AHDR's initial Process. It is executed once the
   Node is ready for use. It exists to respond to events that affect
   Node operation. The Main Process will never stop unless the AHDR
   Node is shut down.
   
   TRIGGER:
   o AHDR Node initialization.
   
   INPUT:
   o None.
   
   ACTIONS:

   1) Execute "Send TU0 Message Process" and set Node.Timer to the TU0
      interval.

   2) If an AHDR message, M, has been received from the network, then
      execute "Message Receive Process" using M as an input parameter.

   3) If a Node.HOP1[].Timer has expired, then set that entry's
      Node.HOP1[].Confirmed to 0 and execute "Link Lost Process".

   4) If a Node.HOPK[].Timer has expired, then delete that HOPK entry.

   5) If Node.Timer has expired, then reset Node.Timer and check the
      following conditions:

         a. If Node.HOP1[].Count is 0, then execute "TU0 Send Process,
            reset Node.Timer to TU0 interval, and Goto Step 2.

         b. If Node is a Domain Lead, then execute "TUD Send Process";
            Reset Node.Timer to the Node.Timeout.Topology interval; If
            Result from the "Send TUD Message Process" is Message Sent,
            then Goto Step 2.

         c. execute "TU1 Send Process"; Reset Node.Timer to the
            Node.Timeout.Topology interval; If Result from the "TU1 Send
            Process" is Message Sent then Goto Step 2.

         d. If IPAD is enabled, then execute "IPAD Send Process".

   6) Goto Step 2

8.2. Message Receive Process

   This process specifies common procedure applicable to all received
   AHDR messages.

   TRIGGER:
   o Message is received from network (Main Process).
   INPUT:



Ghanadan, et al.               Expires September 2010          [Page 49]

Internet-Draft                      AHDR                      March 2010


   o   M - Message received.

   ACTIONS:
    1) If M.Header.C is 1, the Node MAY execute the "Check Checksum
       Process" on message M. If the Result is Fail, the Node MAY
       discard the message AND stop Process.

   2) If M.Header.Length is less than (3 + M.Header.C +
      M.Header.IDLength), then discard the message AND Stop Process.

   3) If any of the following are true, then discard the message and
      Stop Process:

          a. M.Header.Version is not 0.

          b. M.Header.Networkid does not match Node.Networkid

          c. M.Header.IDLength does not match Node.IDLength

          d. M.Header.Sender is 0 or M.Header.Sender matches Node.Nodeid

          e. M.Header.Type is a Reserved value

   4) Search Node.HOP1[] for an entry, E, where .Nodeid matches
      M.Header.Sender.

        If a matching entry E is not found, then create E as a new
        unconfirmed HOP1 Table entry (with .Nodeid = M.Header.Sender and
        .Confirmed = 0 and .Timeout = Node.Timeout.Topology *
        Node.Timeout.Link *2)

        If a matching entry E is found, Save E.SendLSL and E.Confirmed
        value (to determine if need to recalculate the Domain Lead role
        in step 6)). Use M.Header.Con to update E.SendLSL value. Use
        available physical layer receive statistics (e.g., RSSI) for M 
        to update E.ReceiveLSL value.

   5) Execute "Maintain Link Process".

   6) If there are any confirmed entries in Node.HOP1[] and E.SendLSL
      or E.Confirmed value changed from saved values, then execute
      "Calculate Domain Lead Process".

   7) If E.Confirmed is 0, then discard the message and Stop Process.

   8) Execute the specific Receive Process for the M.Header.Type.

8.3. Maintain Link Process




Ghanadan, et al.             Expires - September 2010           [Page 50]

Internet-Draft                      AHDR                      March 2010


   This process specifies the link maintenance and update for the
   Node.HOP1[] entries.

   TRIGGER:
   o TU0 message received (from "Message Receive Process").
   o TU1 message received (from "Message Receive Process").
   o TUD message received (from "Message Receive Process").

   INPUT:
   o M - Received message (TU0, TU1, or TUD).
   o E - Node.HOP1[] entry for M.Header.Sender.

   ACTIONS: little

   1) If M.Header.Type is TU0, then set E.Confirmed to 0.

   2) If M.Header.Type is TU1, then check TU1.Neighbor[]'s table for
      entry where .Nodeid matches Node.Nodeid. If entry is found, then
      set E.Confirmed to 1, update E using information from found
      entry, and set E.Timeout to (TU1.Timeout * Node.Timeout.Link *
      2). If no entry is found, then set E.Confirmed to 0.

   3) If M.Header.Type is TUD and TUD.Sender matches TUD.Source, then
      check TUD.Domain[] table for entry where .Nodeid is Node.Nodeid.
      If entry is found, then set E.Confirmed to 1, update E using
      information from the found entry. If no entry is found, then set
      E.Confirmed to 0.

   4) If E.Confirmed value has changed from 1 to 0, execute "Link Lost
      Process".

8.4. Link Lost Process

   This process specifies the procedures to update various data
   structures when a Confirmed link is lost.

   TRIGGER:
   o Node.HOP1[].Timer expires (from the "Main Process").
   o Node.HOP1[].Confirmed changes from 1 to 0 (from the "Maintain Link
      Process").

   INPUT:
   o E - Node.HOP1[] entry.
   o LinkNode - Node.HOP1[].Nodeid value of unconfirmed link.

   ACTIONS:

   1) Calculate Node.Coverage and Node.DomainCoverage[].




Ghanadan, et al.          Expires September 2010               [Page 51]

Internet-Draft                      AHDR                      March 2010


   2) Remove all Node.HOPK[] entries where .Nexthop is LinkNode.

   3) Remove all Node.HOP2[] entries where .Nexthop is LinkNode.

   4) Remove all Node.IPAD.Learned[] entries where .Source is LinkNode.

   5) If any Node.DomainLead[] entry where .Nodeid is LinkNode, then
      remove entry, pack remaining entries, and reduce
      Node.DomainLead[].Count by 1.

   6) If E.Timer expired, remove entry E from Node.HOP1[] table.

   7) If Node.HOP1[].Count > 0, then execute Calculate Domain Lead
      Process. If Node.HOP1[].Count is 0, then execute Send TU0
      Message Process and reset Node.Timer to desired TU0 timeout
      value.

8.5. Message Send Process

   This process specifies the procedure for setting the M.Header and
   M.Checksum fields of the message to be transmitted.

   TRIGGER:
   o All AHDR messages to be transmitted .

   INPUT:
   o M -- Message with M.Header.Type and M.Body filled in.
   o LEN -- Length of M.Body in bits.

   ACTIONS:
    1) Set WLEN = ((LEN+15)/16) where the quotient is truncated to an
       integer value. If the value (3 + WLEN + Node.Checksum +
       node.IDLength) is too large to fit in the M.Header.Length field,
       discard M and Stop Process.

   2) If LEN and (WLEN*16) not equal, pad M.Body by adding ((WLEN*16) -
      LEN) bits of any value.

   3) Set the M.Header fields other than M.Header.Type.

   4) If Node.Checksum is 1, Execute Create Checksum Process on message
      M to set the M.Checksum field.

   5) Send M on the AHDR network.



8.6. Calculate Domain Lead Process




Ghanadan, et al.              Expires September 2010           [Page 52]

Internet-Draft                      AHDR                      March 2010


   This process specifies the procedure to determine if a Node should
   take on the Domain Lead role and provide an example algorithm for
   calculating Domain Lead role metric.

   TRIGGER:
    o  Each time the Node.Coverage changes, or .Coverage value from
       another node changes (as detected via a received TU1), or
       Node.HOP1[].ReceiveLSL changes, or any time a Node.HOP1[] entry
       is added or removed (from "Maintain Link Process", "Link Lost
       Process", and "Message Receive Process").

   ACTIONS:

   1) Calculate Node.Coverage and Node.DomainCoverage[].

   2) Find HIGHEST, the Node.HOP1[] entry with the highest .Coverage
      value.

       Here is an example .Coverage calculation:

       .Coverage = WDL * { W0 + N1(LINK+LSL) + N2(LINK+LSL) + ... +
       Nn(LINK+LSL) }

       Where:

       WDL (Weighted Domain Lead) is set to 1.0 for non-Domain Leads and
       >1.0 for Domain Leads

       W0 is some constant based on node's innate suitability to be a
       Domain Lead

       Nx(LINK+LSL) is the total weight assigned for 1-hop neighbors 1-n
       where:
   
   LINK is some constant added for the existence of a link (quantity)
   LSL is some value derived link state level (LCI + LQI)
   Nx is some weight given to each neighbor node where
                o low mobility nodes have a higher N-weight than
                   relatively mobile nodes

                   o higher stability (in terms of topology change, link
                      variations, etc.) correlates to a higher N-weight

   3) If Node is Domain Lead and HIGHEST.Coverage is greater than
      Node.Coverage, then

         a. Remove Node.DomainLead[0] entry.




Ghanadan, et al.             Expires September 2010            [Page 53]

Internet-Draft                      AHDR                      March 2010


         b. Update Node.DomainLead[] entry where .Nodeid is highest
            .Nodeid or insert new Node.DomainLead[] entry setting
            .Nodeid and .Coverage to highest values. Sort
            Node.DomainLead[] by descending .Coverage value.

         c. Send a DLR message and Stop Process

   4) If Node is NOT Domain Lead and HIGHEST.Coverage is less than
      Node.Coverage, then

         a. Shift all Node.DomainLead[] entries by one entry position.

         b. Set Node.DomainLead[0].Nodeid to Node.Nodeid and
            Node.DomainLead[0].Coverage to Node.Coverage.

         c. Send a DLA message and Stop Process.



8.7. Route Discovery Process

   This process specifies the procedure to reactively discover a route
   from a source node to a destination node when the destination address
   can not be found in the source node's routing tables (HOP1, HOP2, and
   HOPK)

   TRIGGER:
   o As requested by the router forwarding engine.

   RESULT:
   o Next hop Nodeid that toward the DESTNODE.
   o Not Found.

   ACTIONS:

   1) Search the Node.HOP1[], Node.HOP2[], and Node.HOPK[] tables for
      the "best" entry for DESTNODE. The definition of "best" is
      implementation specific.

   2) If an entry, E, is found, then Result is E.Nexthop (which is
      DESTNODE itself if the entry is from the HOP1 Table) and Stop
      Process.

   3) If no entry is found, execute "RDISC Send Process" with DESTNODE
      for Local lookup.

   4) If an RRES message is received within 1 second, then Result is
      RRES.Nexthop and Stop Process.




Ghanadan, et al.              Expires September 2010           [Page 54]

Internet-Draft                      AHDR                      March 2010


   5) If an RERR message is received or if no RRES message is received
      within 1 second, then execute "RDISC Send Process" with DESTNODE
      for Distant lookup.

   6) If a RRES message is received within 3 second, then Result is
      RRES.Nexthop and Stop Process.

   7) Result is Not Found.



8.8. Bridge Selection Process

   This process specifies the algorithms to determine a set of the
   Bridge Nodes for a given set of Domains that need to be reached. The
   derived Bridge Node listing (i.e., Node.Bridge[]) will be used to
   fill in the M.Bridge[] field where M is the TUD, the RDISC, and the
   IPAD messages.

   TRIGGER:
   Each time there is a change in the Node.Hop1[] table which may impact
   the Node.Bridge[] table.
   INPUT:
   o Needed - Set of Domain Lead Nodeids that need to be reached.
   RESULT:
   o Node.Bridge[] updated.


   ACTIONS:

   1) Calculate Node.DomainCoverage[].Cover[].Coverage for each known
      Node.DomainCoverage[].CoveredNode Domain Lead. Store values in
      Node.DomainCoverage[] table.

       Following is an example algorithm the Node uses for each known
       Domain Lead, D:

       DomainCoverage[D] = { N1(LINK+LSL) + N2(LINK+LSL) + ... +
       Nn(LINK+LSL) }

       Where:

       N1...Nn are all nodes in Node.HOP1[] that are in the D Domain.

       Nx(LINK+LSL) is the total weight assigned for 1-hop neighbors 1-n
       where:

   LINK is some constant added for the existence of a link (quantity)




Ghanadan, et al.                Expires September 2010         [Page 55]

Internet-Draft                      AHDR                      March 2010


   LSL is some value derived link state level (LCI + LQI)
   Nx is some weight given to each neighbor node where
               o low mobility nodes have a higher N-weight than
                  relatively mobile nodes
               o higher stability (in terms of topology change, link
                  variations, etc.) correlates to a higher N-weight

   2) For each Domain Lead Nodeid in Node.DomainCoverage[].CoveredNode

   3) Store Node.DomainCoverage[].Cover[].CoveringNode values of each
      corresponding neighbor node in Node.Bridge[] based on each
      neighbor with the HIGHEST Node.DomainCoverage[].Cover[].Coverage
      for given Domain, for all Domains within 2 hops of this node.

   4) If a TU1 is received from a neighbor node and TU1.LeadCoverage[]
      contains HIGHEST .Coverage for a given Domain compared to
      existing .Coverage value for corresponding
      Node.DomainCoverage[].CoveredNode, then

         a. Set Node.Bridge[] entry for corresponding Domain Lead
            coverage to this neighbor node.

   5) Upon forwarding RDISC, TUD, or IPAD messages, M.Bridge[] is
      populated with 1-hop or 2-hop neighbor Nodes to reach a given
      DESTNODE, or to reach all Domains in the network.

       The Bridge Nodes selection algorithm is based on neighboring
       Domain coverage, represented by corresponding
       Node.DomainCoverage[], but the number of Bridge Nodes selected
       depends on implementation. The following two algorithms may be
       used in two different scenarios:

   Optimizing for the fewest Bridge Nodes for minimal transmissions:
               o Determine whether or not there is a single Node that
                  has covers (i.e., has a value for all
                  Node.DomainCoverage[].CoveredNode entries) for all
                  neighboring Domains 1-hop away
                        Add this Node to the M.Bridge[]
               o If not, determine whether or not there are a pair of
                  nodes that cover all neighboring Domains
                        Add these two Nodes to the M.Bridge[]
               o If not, select a Node that covers the highest number
                  of neighboring Domains
                        Add this Node to the M.Bridge[]
                        Determine whether or not there is a single Node
                        that covers the remaining Domains
                        Repeat
               o Repeat for 2-hop Domains




Ghanadan, et al.              Expires September 2010           [Page 56]

Internet-Draft                      AHDR                      March 2010


   Optimizing for path diversity:
               o For each neighboring 1-hop or 2-hop Domain, select the
                  Node with the HIGHEST
                  Node.DomainCoverage[].Cover[].Coverage for the
                  corresponding Domain (
                  Node.DomainCoverage[].Cover[].CoveredNode) as a Bridge
                  Node
               o Add these Nodes to the M.Bridge[]



8.9. Domain Lead Tracking Process

   This process specifies the procedure to determine if the received
   TUD, RDISC, and IPAD messages should be forwarded and to which
   domain(s). The process seeks to prevent the redundant TUD message
   dissemination and loops within the message propagation path.

   The derived Bridge Node listing will be used to fill in the
   M.Bridge[] field where M is the TDU, the RDISC, and the IPAD
   messages.

   TRIGGERING EVENTS:
   o Each time the TDU, RDISC, and IPAD message is received and the
      receiving node needs to determine whether to forward the message
      and to which domain(s).

   ACTIONS:

   1) Find index, II, of the M.Bridge[] table where M.Bridge[II].Nodeid
      is Node.Nodeid. If II not found, discard the message and Stop
      Process.

   2) Make Covered, the set of all Domains from M.DomainTrack[]. Find
      MyList, the set of Domains indicated by the M.BNForwardRef[II]
      table entry. Find NotMyList = Covered - MyList. Make Needed,
      the set of all Node.DomainCoverage[].Nodeid Domains. Set Needed
      to Needed - Node.Nodeid. Set Needed to Needed - NotMyList.

   3) If Needed is empty, discard message and Stop Process.

   4) Clear M.Bridge[] and M.BNForwardRef[] tables and set M.BNs to 0.

   5) Set M.DomainTrack[] to the set (Covered union Needed). Set M.DLs
      to the size of the set. Because Covered does decrease, the
      DomainTrack may only stay the same size or increase.

8.10. Create Checksum Process




Ghanadan, et al.             Expires September 2010            [Page 57]

Internet-Draft                      AHDR                      March 2010


   TRIGGERING EVENTS:
   o When filling in the M.Checksum field.
   
   ACTIONS:
   1) Set CHECKSUM to 0. Check M.Checksum to 0.

   2) Starting with M.Header, loop through M.Header.Length 16-bit
      values adding each to CHECKSUM. If CHECKSUM exceeds a 32 bit
      value, add the overflow bit back into CHECKSUM.

   3) Set M.Checksum = bitwise NOT of CHECKSUM.

8.11. Check Checksum Process

   TRIGGERING EVENTS:
   o Received message with .Header.C set to 1.

   RESULT:
   o Pass.
   o Fail.

   ACTIONS:
   1) Set CHECKSUM to 0.

   2) Starting with M.Header, loop through M.Header.Length 16-bit
      values adding each to CHECKSUM. If CHECKSUM exceeds a 32 bit
      value, add the overflow bit back into CHECKSUM.

   3) If CHECKSUM is 0, then RESULT is Pass, else RESULT is Fail.

8.12. TU0 Processes

8.12.1. TU0 Send Process

   TRIGGERING EVENTS:
   o Node startup (from "Main Process").
   o Last Node.HOP1[] entry removed from table (from "Link Lost
      Process").
   o Node.Timer expires when Node.HOP1[] table is empty (from "Main
      Process").

   ACTIONS:
    1) Set M.Header.Type to TU0 and execute "Message Send Process".

8.12.2. TU0 Receive Process

   ACTIONS:




Ghanadan, et al.               Expires September 2010          [Page 58]
 
Internet-Draft                      AHDR                      March 2010


   1) None. All necessary actions are handled in the "Message Receive
      Process".

8.13. TU1 Processes

8.13.1. TU1 Send Process

   TRIGGERING EVENTS:
   o Node.Timer expires and Node.HOP1[] table not empty (from "Main
      Process"). The TU1 message is transmitted by all nodes in the
      network.

   ACTIONS:
    1) Set M.Header.Type to TU1 and construct the TU1 Fields per section
       7.5.1.

   2) Execute "Message Send Process".

8.13.2. TU1 Receive Process

   TRIGGERING EVENTS:
    o  TU1 message received and being processed by the "Message Receive
       Process".

   ACTIONS:
    1) The receiving Node SHALL update its HOP1 Entry, E, with the
       following fields from the TU1 message:
   o   E.Timer.Interval = E.Timeout
   o   E.Timer.Countdown = E.Timeout
   o   E.SendLSL = TU1.Neighbor[N].FromLSL
   o   E.ReceiveLSL = TU1.Neighbor[N].ToLSL
   o   E.Coverage = TU1.Coverage
   o   E.DomainLead = TU1.Neighbor[].Nodeid (where .Neighbor[].DI is 1).

   2) Loop through the TU1.LeadCoverage[] table and
      TU1.DomainCoverage[] table to maintain the Node.DomainCoverage[]
      table with up-to-date values from TU1.Header.Sender.

   3) Use the "Calculate Domain Lead Process" to decide if a Domain
      Lead change is needed.

   4) Use the "Bridge Selection Process" to decide if the Node.Bridge[]
      should be updated.




Ghanadan, et al.              Expires September 2010           [Page 59]
 
Internet-Draft                      AHDR                      March 2010


8.14. TUD Processes

8.14.1. TUD Send Process

   TRIGGERING EVENTS:
   o The full TUD message is broadcast by the Domain Lead Node every
      user configurable multiple of the Node.Timeout.Topology interval.
   o If the Domain membership changes (i.e., a Node joins or leaves the
      Domain Lead's domain or the link to an existing Domain Node
      changes LSL) the corresponding Domain Lead Node MAY broadcast an
      Update TUD message. To minimize the routing overhead, the Update
      TUD should not be generated more than once per 2x
      Node.Timeout.Topology interval. If the full TUD message is due
      for a transmission, the Update TUD should not be transmitted at
      the same time.
   o A TUD was received that needs to be forwarded through the network.
      See the TUD Receive Process for details.


   ACTIONS:
    1) Set M.Header.Type to TUD and construct the TUD Fields per section
       7.6.1 according to the full or update TUD required.

   2) Execute "Message Send Process".

8.14.2. TUD Receive Process

   TRIGGERING EVENTS:
   o TUD message received.

   ACTIONS:
    1) If the most recent TUD.Sequence from the same TUD.Header.Sender
       (called Last.Sequence) is newer than the received TUD.Sequence,
       then discard the message and Stop Process. Because sequence
       numbers may be reused (due to the field value rolling over), the
       following SHALL be the definition of "newer":

       ( (TUD.Sequence < Last.Sequence)
               AND ((Last.Sequence - TUD.Sequence) < (MAX.Sequence/2) )
       )
       OR
       ( (TUD.Sequence > Last.Sequence)
               AND ((TUD.Sequence - Last.Sequence) > (MAX.Sequence/2) )
       )

       Note that MAX.Sequence is the maximum value that the TUD.Sequence
       field in the message can have.




Ghanadan, et al.              Expires September 2010           [Page 60]

Internet-Draft                      AHDR                      March 2010


   2) The receiving Node SHALL update its HOP1 Entry, E, with the
      following fields from the TUD message:

   o   E.Timer.Interval = E.Timeout
   o   E.Timer.Countdown = E.Timeout
   o   E.SendLSL = TUD.Domain[].LSL for the receiving node.
   o   E.ReceiveLSL = TUD.Domain[].OLSL for the receiving node.
   o   E.DomainLead = TUD.Header.Sender.


   3) The Node SHALL use the information in the TUD message to update
      its own Node.HOPK[] table.

   4) To determine whether to forward the received TUD message, the
      Node SHALL execute the "Domain Lead Tracking Process" using the
      received TUD message as input. The TUD message may be updated by
      the Process.

   5) To determine which Bridge Nodes will be used to forward the TUD,
      the Node SHALL execute the "Bridge Update Process" using received
      TUD message as input. The TUD message may be updated by the
      Process.

   6) If the TUD.BNs is 0 and the Node is not a Domain Lead, discard
      the message and Stop Process.

   7) If the TUD.BNs is 0 and the Node is a Domain Lead, the Node MAY
      choose to broadcast the TUD a final time (the empty TUD.Bridge[]
      table means it won't get forwarded). Doing this will ensure that
      all the Node's 1-hop neighbors will receive the TUD and update
      their HOPK tables. If the Node does not choose to do this,
      discard the message and Stop Process.

   8) Update the following fields per Section 7.6.1:      TUD.Hops,
      TUD.LSLTotal, TUD.LT1 - TUD.LT4, TUD.Previous.

   9) Execute the "Message Send Process" with the updated TUD.



8.15. DLA Processes

8.15.1. DLA Send Process

   TRIGGERING EVENTS:
   o A node SHALL send a DLA message when its Node.Coverage value is
      greater than all of Node.HOP1[].Coverage value.

   ACTIONS:




Ghanadan, et al.           Expires September 2010              [Page 61]

Internet-Draft                      AHDR                      March 2010


   1) Set M.Header.Type to DLA and construct the DLA fields per section
      7.7.1

   2) Execute "Message Send Process".



8.15.2.   DLA Receive Process

   TRIGGERING EVENTS:
   o DLA message received.

   ACTIONS:
    1) Add or update Node.DomainLead[] table entry using
       DLA.Header.Sender and DLA.Coverage values.

   2) Add or update Node.DomainCoverage[] table entry using
      DLA.Header.Sender and DLA.Coverage values.

   3) Update Node.HOP1[] table entry for DLA.Header.Sender with
      DLA.Coverage value.

   4) Execute "Calculate Domain Lead Process".



8.16. DLR Processes

8.16.1. DLR Send Process

   TRIGGERING EVENTS:
   o A Domain Lead node SHALL send a DLR message when its Node.Coverage
      value is less than any Node.HOP1[].Coverage value.

   ACTIONS:
    1) Set M.Header.Type to DLR and construct the DLR fields per section
       7.8.1

   2) Execute "Message Send Process".



8.16.2. DLR Receive Process

   TRIGGERING EVENTS:
   o DLR message received.




Ghanadan, et al.                Expires September 2010         [Page 62]

Internet-Draft                      AHDR                      March 2010


   ACTIONS:
    1) Remove the DLA.Header.Sender entry from the Node.DomainLead[]
       table.

   3) Add or update Node.DomainCoverage[] table entry using
      DLA.Header.Sender and DLA.Coverage values.

   4) Update Node.HOP1[] table entry for DLA.Header.Sender with
      DLA.Coverage value.

   5) Add or update Node.DomainLead[] table entry using
      DLA.Header.NewLead and DLA.NewCoverage values.

   6) Add or update Node.DomainCoverage[] table entry using
      DLA.Header.NewLead and DLA.NewCoverage values.

   7) Update Node.HOP1[] table entry for DLA.Header.NewLead with
      DLA.NewCoverage value.

   8) Execute "Calculate Domain Lead Process".



8.17. RDISC Processes

8.17.1. RDISC Send Process

   TRIGGERING EVENTS:
    o  The RDISC message is used to discovery route to a destination
       address not found in the node's HOP1, HOP2, and HOPK tables.


   ACTIONS:
    1) Set M.Header.Type to RDISC and construct the RDISC fields per
       section 7.9.1

   2) When an RDISC is generated or forwarded from a Node, the Node
      SHALL keep a copy of the RDISC for processing when response
      messages (RRES or RERR) are received.

   3) Execute "Message Send Process".


8.17.2. RDISC Receive Process

   TRIGGERING EVENTS:
   o RDISC message received.

   ACTIONS:



Ghanadan, et al.                Expires September 2010         [Page 63]

Internet-Draft                      AHDR                      March 2010


   1) If the most recent RDISC.Sequence from the same
      RDISC.Header.Sender (called Last.Sequence) is newer than the
      received RDISC.Sequence, then discard the message and Stop
      Process. Because sequence numbers may be reused (due to the
      field value rolling over), the following SHALL be the definition
      of "newer":

       ( (RDISC.Sequence < Last.Sequence)
            AND ((Last.Sequence - RDISC.Sequence) < (MAX.Sequence/2) ) )
       OR
       ( (RDISC.Sequence > Last.Sequence)
            AND ((RDISC.Sequence - Last.Sequence) > (MAX.Sequence/2) ) )

       Note that MAX.Sequence is the maximum value that the
       RDISC.Sequence field can have.

   2) If the Node is not a Domain Lead and the Node does not find its
      own Nodeid in the RDISC.Bridge[] table the message SHALL be
      discarded.

   3) Depending on the circumstances, the Node MAY generate an RRES
      Message or and RERR Message in reply to the RDISC. See the "RRES
      Send Process" and "RERR Send Process" sections for details.

   4) If the Node does not generate an RRES or an RERR message AND
      there are Domains that the RDISC has not visited, AND the Node is
      in the RDISC.Bridge[] table, the Node will forward a copy of the
      RDISC message towards those Domains. Before forwarding, the Node
      will update the RDISC.Bridge[], RDISC.DomainTrack[] and
      RDISC.BNForwardRef[] tables to show which Domains have been
      covered and which Domains have yet to receive the RDISC message.

   5) FOr each received RDISC store the RDISC.Header.Sender, the
      RDISC.Source, RDISC.BNs, RDISC.Sequence, RDISC.Destination.



8.18. RRES Processes

8.18.1. RRES Send Process

   TRIGGERING EVENTS:
   o The node receives an RDISC and it has at least one route to the
      destination node i.e., the node has the RDISC.Destination address
      in its HOP1, and/or HOP2, or HOPK tables.

   ACTIONS:
    1) Set M.Header.Type to RRES and construct the RRES fields per
       section 7.10.1




Ghanadan, et al.              Expires September 2010           [Page 64]

Internet-Draft                      AHDR                      March 2010


   2) Execute "Message Send Process".


8.18.2. RRES Receive Process

   TRIGGERING EVENTS:
   o RRES message received.

   ACTIONS:
    1) Find a saved RDISC message, saveRDISC, where saveRDISC.Sequence
       matches RRES.Sequence.

   2) If saveRDISC is found, then forward the RRES via the
      saveRDISC.Header.Sender node. If saveRDISC is not found, then
      forward the RRES via the best known NextHop for the
      RRES.Destination Node. If the receiving node does not have a
      route to the RRES.Destination node, then silently discard RRES
      message and Stop Process.

   3) Before forwarding the RRES message, the following fields in the
      RRES message SHALL be updated per section 7.10.1: RRES.Hopcount,
      RRES.PrevLSL, RRES.DestLSL, and RRES.Previous.

8.19. RERR Processes

8.19.1. RERR Send Process

   TRIGGERING EVENTS:
   o Upon receipt of an RDISC message, the node does not have any route
      to the RDISC.Destination node AND it knows no other Domains to
      forward the RDISC message to. Note that only BN and Domain Lead
      nodes generate the RERR message.
   o Received an RERR message from RDISC.BNs nodes, then an RERR
      message SHALL be forwarded to the RDISC.Header.Sender node.

   ACTIONS:
    1) Set M.Header.Type to RERR and construct the RERR fields per
       section 7.11.1

   2) Execute "Message Send Process".



8.19.2. RERR Receive Process

   TRIGGERING EVENTS:
   o RERR message received.




Ghanadan, et al.               Expires September 2010          [Page 65]

Internet-Draft                      AHDR                      March 2010


   ACTIONS:
    1) If the RERR.Sequence does NOT RDISC.Sequence value of any of the
       stored RDISC message, the received RERR message SHALL be silently
       discarded.

   2) If RERR.Header.Sender is one of the nodes in RDISC.Bridge[], the
      Node SHALL record the response from that RERR.Header.Sender node.
      If an RERR has been received from all RDISC.Bridge[] nodes, then
      an RERR message SHALL be forwarded to the RDISC.Header.Sender
      node. See "RERR Send Process" for details.



8.20. IPAD Processes

8.20.1. IPAD Send Process

   TRIGGERING EVENTS:
   o An IPAD message is sent per expiration of the Node.Timeout.IPAD
      timer;
   o Node MAY transmit a full IPAD message containing all of the
      Node.IPAD.Advertised[] table entries.
   o When the Node.IPAD.Advertised[] table changes for any reason, the
      Node MAY transmit an update IPAD message containing only those
      Node.IPAD.Advertised[] table entries that have changed.
   o Once an IPAD message has been sent (either full or update),
      another IPAD message may not be sent until at least another
      (Node.Timeout.IPAD / 3) expirations of Node.Timeout.Topology have
      occurred.

   ACTIONS:
    1) Set M.Header.Type to IPAD and construct the IPAD fields per
       section 7.12.1

   2) Execute "Message Send Process".




8.20.2. IPAD Receive Process

   TRIGGERING EVENTS:
   o IPAD message received.

   ACTIONS:
   o Upon receipt of an IPAD message, the receiving Node will process
      the IPAD.Address[] table entries in order to update its own
      Node.IPAD.Learned[] table entries.




Ghanadan, et al.               Expires September 2010          [Page 66]

Internet-Draft                      AHDR                      March 2010


   o  If there are Domains that the IPAD has not visited, the Node will
      forward a copy of the IPAD message towards those Domains. Before
      forwarding, the Node will update the IPAD.Bridge[],
      IPAD.DomainTrack[] and IPAD.BNForwardRef[] tables to show which
      Domains have been covered and which Domains have yet to receive
      the IPAD message. The IPAD.BNs and IPAD.DLs must be updated
      accordingly. The IPAD.Count and IPAD.Sequence fields for the
      message to be forwarded are copied from the received IPAD message.
      The message M.Header and M.Checksum SHALL be constructed per
      "Message Send Process"

9. Security Considerations

   AHDR does not provide any additional security to a network. AHDR
   also does not contain any security measures that would prevent an
   outside agency from inserting malicious AHDR messages.

10. References

   [1] Bradner, S., "The Internet Standards Process -- Revision 3", BCP
       9, RFC 2026, October 1996.

11. Acknowledgments

   The authors wish to thanks BAE Systems for their support as we
   explore the possibilities of AHDR. The following programs or
   projects were especially useful as proving grounds for our concepts:

   FAST - Flexible Access, Secure Transfer: An enhanced access mode for
   Link-16.

   META-MANET - Mesh Enabled Tactical Adaptive MANET: A mobile, multihop
   mesh networking waveform.

   TWNN - Tactical Wideband Network Node: A multichannel radio
   networking platform.

12. Author's Addresses

   Reza Ghanadan                        Jessica Hsu
   BAE Systems                          BAE Systems
   164 Totowa Road                      164 Totowa Road
   Wayne, NJ 07474                      Wayne, NJ 07474
   reza.ghanadan@baesystems.com         jessica.hsu@baesystems.com

   Phong Khuu                           Gregory S. Sadosuk
   BAE Systems                          BAE Systems
   11487 Sunset Hills Road              11487 Sunset Hills Road



Ghanadan, et al.           Expires September 2010              [Page 67]

Internet-Draft                      AHDR                      March 2010


   Reston, VA 20190                     Reston, VA 20190
   phong.khuu@baesystems.com            gregory.sadosuk@baesystems.com


   In addition to the authors, the following people were instrumental in
   the design and realization of AHDR:

   John Gu            BAE Systems, Wayne, NJ
   Brian Loop         BAE Systems, Reston, VA
   Michael J. Weber   BAE Systems, Reston, VA




Ghanadan, et al.              Expires September 2010           [Page 68]