description of overall aodv model design added
authorElena Buchatskaia <borovkovaes@iitp.ru>
Wed, 28 Oct 2009 15:41:21 +0300
changeset 5727 5551f3be0ed1
parent 5726 8776c223c36c
child 5728 a86a8bbacb60
description of overall aodv model design added
src/routing/manet/aodv/aodv.h
src/routing/manet/aodv/rfc3561.txt
--- a/src/routing/manet/aodv/aodv.h	Wed Oct 28 12:29:58 2009 +0300
+++ b/src/routing/manet/aodv/aodv.h	Wed Oct 28 15:41:21 2009 +0300
@@ -33,7 +33,51 @@
  * \ingroup routing
  * \defgroup aodv AODV
  * 
- * \brief Ad hoc on demand distance vector (AODV) routing protocol manet, RFC3561
+ * This model implements the base specification of the Ad hoc on demand distance vector (AODV)
+ * protocol. Implementation is based on RFC3561.
+ *
+ * Class aodv::RoutingProtocol implements all functionality of service packet exchange and inherit from
+ * Ipv4RoutingProtocol. Base class defines two virtual functions for packet routing and forwarding.  The first,
+ * RouteOutput(), is used for locally originated packets, and the second, RouteInput(), is used for forwarding
+ * and/or delivering received packets.
+ *
+ * Protocol operation depends on the many adjustable parameters. Parameters for this functionality are attributes of
+ * aodv::RoutingProtocol. We support parameters, with their default values, from RFC and parameters that enable/disable
+ * protocol features, such as broadcasting HELLO messages, broadcasting data packets and so on.
+ *
+ * AODV discovers routes on demand. Therefore, our AODV model  buffer all packets, while a route request packet (RREQ)
+ * is disseminated. We implement a packet queue in aodv-rqueue.cc. In reality, smart pointer to packet, Ipv4RoutingProtocol::ErrorCallback,
+ * Ipv4RoutingProtocol::UnicastForwardCallback and IP header are stored in this queue. The packet queue implements garbage collection of old
+ * packets and a queue limit.
+ *
+ * Routing table implementation support garbage collection of old entries and state machine, defined in standard.
+ * It implements as a STL map container. The key is a destination IP address.
+ *
+ * Some moments of protocol operation aren't described in RFC. This moments generally concern cooperation of different OSI model layers.
+ * We use following heuristics:
+ * 1) This AODV implementation can detect the presence of unidirectional links,and avoid them if necessary.
+ *    If the node we received a RREQ for is a neighbor we are probably facing a unidirectional link... This is feature can be disable.
+ * 2) Protocol operation strongly depends on broken link detection mechanism. We implements two such heuristics.
+ *    Firstly, this implementation support  HELLO messages. However HELLO messages are not a good way to do neighbor sensing
+ *    in a wireless environment (at least not over 802.11). Therefore, you may experience bad performance when running over wireless.
+ *    There are several reasons for this:
+ *      a) HELLO messages are broadcasted. In 802.11, broadcasting is done at a lower bit rate than unicasting,
+ *         thus HELLO messages travel further than data.
+ *      b) HELLO messages are small, thus less prone to bit errors than data transmissions.
+ *      c) Broadcast transmissions are not guaranteed to be bidirectional, unlike unicast transmissions.
+ *    Secondly, we use layer 2 feedback. Link considered to be broken, if frame transmission results in a transmission failure for all retries.
+ *    This mechanism meant for active links and work much more faster, than first method.
+ * 3) Duplicate packet detection. We use special class dpd::DuplicatePacketDetection for this purpose.
+ *
+ * Following optional protocol optimizations aren't implemented:
+ * 1) Expanding ring search.
+ * 2) Local link repair.
+ * 3) RREP, RREQ and HELLO message extensions.
+ * This technique require direct access to IP header, which contradict assertion from AODV RFC that AODV works over UDP. Our model use UDP
+ * for simplicity, but this disable us to implement protocol optimizations. We don't use low layer raw socket, because they are not portable.
+ *
+
+   */
  */
 
 #endif /* AODV_H_ */
--- a/src/routing/manet/aodv/rfc3561.txt	Wed Oct 28 12:29:58 2009 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2075 +0,0 @@
-
-
-
-
-
-
-Network Working Group                                         C. Perkins
-Request for Comments: 3561                         Nokia Research Center
-Category: Experimental                                  E. Belding-Royer
-                                 University of California, Santa Barbara
-                                                                  S. Das
-                                                University of Cincinnati
-                                                               July 2003
-
-
-            Ad hoc On-Demand Distance Vector (AODV) Routing
-
-Status of this Memo
-
-   This memo defines an Experimental Protocol for the Internet
-   community.  It does not specify an Internet standard of any kind.
-   Discussion and suggestions for improvement are requested.
-   Distribution of this memo is unlimited.
-
-Copyright Notice
-
-   Copyright (C) The Internet Society (2003).  All Rights Reserved.
-
-Abstract
-
-   The Ad hoc On-Demand Distance Vector (AODV) routing protocol is
-   intended for use by mobile nodes in an ad hoc network.  It offers
-   quick adaptation to dynamic link conditions, low processing and
-   memory overhead, low network utilization, and determines unicast
-   routes to destinations within the ad hoc network.  It uses
-   destination sequence numbers to ensure loop freedom at all times
-   (even in the face of anomalous delivery of routing control messages),
-   avoiding problems (such as "counting to infinity") associated with
-   classical distance vector protocols.
-
-Table of Contents
-
-   1.  Introduction ...............................................  2
-   2.  Overview  ..................................................  3
-   3.  AODV Terminology ...........................................  4
-   4.  Applicability Statement ....................................  6
-   5.  Message Formats ............................................  7
-       5.1. Route Request (RREQ) Message Format ...................  7
-       5.2. Route Reply (RREP) Message Format .....................  8
-       5.3. Route Error (RERR) Message Format ..................... 10
-       5.4. Route Reply Acknowledgment (RREP-ACK) Message Format .. 11
-   6.  AODV Operation ............................................. 11
-       6.1. Maintaining Sequence Numbers .......................... 11
-       6.2. Route Table Entries and Precursor Lists ............... 13
-
-
-
-Perkins, et. al.              Experimental                      [Page 1]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-       6.3. Generating Route Requests ............................. 14
-       6.4. Controlling Dissemination of Route Request Messages ... 15
-       6.5. Processing and Forwarding Route Requests .............. 16
-       6.6. Generating Route Replies .............................. 18
-            6.6.1. Route Reply Generation by the Destination ...... 18
-            6.6.2. Route Reply Generation by an Intermediate
-                   Node ........................................... 19
-            6.6.3. Generating Gratuitous RREPs .................... 19
-       6.7. Receiving and Forwarding Route Replies ................ 20
-       6.8. Operation over Unidirectional Links ................... 21
-       6.9. Hello Messages ........................................ 22
-       6.10 Maintaining Local Connectivity ........................ 23
-       6.11 Route Error (RERR) Messages, Route Expiry and Route
-            Deletion .............................................. 24
-       6.12 Local Repair .......................................... 26
-       6.13 Actions After Reboot  ................................. 27
-       6.14 Interfaces ............................................ 28
-   7.  AODV and Aggregated Networks ............................... 28
-   8.  Using AODV with Other Networks ............................. 29
-   9.  Extensions ................................................. 30
-       9.1. Hello Interval Extension Format ....................... 30
-   10. Configuration Parameters ................................... 31
-   11. Security Considerations .................................... 33
-   12. IANA Considerations ........................................ 34
-   13. IPv6 Considerations ........................................ 34
-   14. Acknowledgments ............................................ 34
-   15. Normative References ....................................... 35
-   16. Informative References ..................................... 35
-   17. Authors' Addresses ......................................... 36
-   18. Full Copyright Statement ................................... 37
-
-1. Introduction
-
-   The Ad hoc On-Demand Distance Vector (AODV) algorithm enables
-   dynamic, self-starting, multihop routing between participating mobile
-   nodes wishing to establish and maintain an ad hoc network.  AODV
-   allows mobile nodes to obtain routes quickly for new destinations,
-   and does not require nodes to maintain routes to destinations that
-   are not in active communication.  AODV allows mobile nodes to respond
-   to link breakages and changes in network topology in a timely manner.
-   The operation of AODV is loop-free, and by avoiding the Bellman-Ford
-   "counting to infinity" problem offers quick convergence when the ad
-   hoc network topology changes (typically, when a node moves in the
-   network).  When links break, AODV causes the affected set of nodes to
-   be notified so that they are able to invalidate the routes using the
-   lost link.
-
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 2]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   One distinguishing feature of AODV is its use of a destination
-   sequence number for each route entry.  The destination sequence
-   number is created by the destination to be included along with any
-   route information it sends to requesting nodes.  Using destination
-   sequence numbers ensures loop freedom and is simple to program.
-   Given the choice between two routes to a destination, a requesting
-   node is required to select the one with the greatest sequence number.
-
-2. Overview
-
-   Route Requests (RREQs), Route Replies (RREPs), and Route Errors
-   (RERRs) are the message types defined by AODV.  These message types
-   are received via UDP, and normal IP header processing applies. So,
-   for instance, the requesting node is expected to use its IP address
-   as the Originator IP address for the messages.  For broadcast
-   messages, the IP limited broadcast address (255.255.255.255) is used.
-   This means that such messages are not blindly forwarded.  However,
-   AODV operation does require certain messages (e.g., RREQ) to be
-   disseminated widely, perhaps throughout the ad hoc network.  The
-   range of dissemination of such RREQs is indicated by the TTL in the
-   IP header.  Fragmentation is typically not required.
-
-   As long as the endpoints of a communication connection have valid
-   routes to each other, AODV does not play any role.  When a route to a
-   new destination is needed, the node broadcasts a RREQ to find a route
-   to the destination.  A route can be determined when the RREQ reaches
-   either the destination itself, or an intermediate node with a 'fresh
-   enough' route to the destination.  A 'fresh enough' route is a valid
-   route entry for the destination whose associated sequence number is
-   at least as great as that contained in the RREQ.  The route is made
-   available by unicasting a RREP back to the origination of the RREQ.
-   Each node receiving the request caches a route back to the originator
-   of the request, so that the RREP can be unicast from the destination
-   along a path to that originator, or likewise from any intermediate
-   node that is able to satisfy the request.
-
-   Nodes monitor the link status of next hops in active routes.  When a
-   link break in an active route is detected, a RERR message is used to
-   notify other nodes that the loss of that link has occurred.  The RERR
-   message indicates those destinations (possibly subnets) which are no
-   longer reachable by way of the broken link.  In order to enable this
-   reporting mechanism, each node keeps a "precursor list", containing
-   the IP address for each its neighbors that are likely to use it as a
-   next hop towards each destination.  The information in the precursor
-   lists is most easily acquired during the processing for generation of
-   a RREP message, which by definition has to be sent to a node in a
-   precursor list (see section 6.6).  If the RREP has a nonzero prefix
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 3]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   length, then the originator of the RREQ which solicited the RREP
-   information is included among the precursors for the subnet route
-   (not specifically for the particular destination).
-
-   A RREQ may also be received for a multicast IP address.  In this
-   document, full processing for such messages is not specified.  For
-   example, the originator of such a RREQ for a multicast IP address may
-   have to follow special rules.  However, it is important to enable
-   correct multicast operation by intermediate nodes that are not
-   enabled as originating or destination nodes for IP multicast
-   addresses, and likewise are not equipped for any special multicast
-   protocol processing.  For such multicast-unaware nodes, processing
-   for a multicast IP address as a destination IP address MUST be
-   carried out in the same way as for any other destination IP address.
-
-   AODV is a routing protocol, and it deals with route table management.
-   Route table information must be kept even for short-lived routes,
-   such as are created to temporarily store reverse paths towards nodes
-   originating RREQs.  AODV uses the following fields with each route
-   table entry:
-
-   -  Destination IP Address
-   -  Destination Sequence Number
-   -  Valid Destination Sequence Number flag
-   -  Other state and routing flags (e.g., valid, invalid, repairable,
-      being repaired)
-   -  Network Interface
-   -  Hop Count (number of hops needed to reach destination)
-   -  Next Hop
-   -  List of Precursors (described in Section 6.2)
-   -  Lifetime (expiration or deletion time of the route)
-
-   Managing the sequence number is crucial to avoiding routing loops,
-   even when links break and a node is no longer reachable to supply its
-   own information about its sequence number.  A destination becomes
-   unreachable when a link breaks or is deactivated.  When these
-   conditions occur, the route is invalidated by operations involving
-   the sequence number and marking the route table entry state as
-   invalid.  See section 6.1 for details.
-
-3. AODV Terminology
-
-   This protocol specification uses conventional meanings [1] for
-   capitalized words such as MUST, SHOULD, etc., to indicate requirement
-   levels for various protocol features.  This section defines other
-   terminology used with AODV that is not already defined in [3].
-
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 4]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-      active route
-
-         A route towards a destination that has a routing table entry
-         that is marked as valid.  Only active routes can be used to
-         forward data packets.
-
-      broadcast
-
-         Broadcasting means transmitting to the IP Limited Broadcast
-         address, 255.255.255.255.  A broadcast packet may not be
-         blindly forwarded, but broadcasting is useful to enable
-         dissemination of AODV messages throughout the ad hoc network.
-
-      destination
-
-         An IP address to which data packets are to be transmitted.
-         Same as "destination node".  A node knows it is the destination
-         node for a typical data packet when its address appears in the
-         appropriate field of the IP header.  Routes for destination
-         nodes are supplied by action of the AODV protocol, which
-         carries the IP address of the desired destination node in route
-         discovery messages.
-
-      forwarding node
-
-         A node that agrees to forward packets destined for another
-         node, by retransmitting them to a next hop that is closer to
-         the unicast destination along a path that has been set up using
-         routing control messages.
-
-      forward route
-
-         A route set up to send data packets from a node originating a
-         Route Discovery operation towards its desired destination.
-
-      invalid route
-
-         A route that has expired, denoted by a state of invalid in the
-         routing table entry.  An invalid route is used to store
-         previously valid route information for an extended period of
-         time.  An invalid route cannot be used to forward data packets,
-         but it can provide information useful for route repairs, and
-         also for future RREQ messages.
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 5]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-      originating node
-
-         A node that initiates an AODV route discovery message to be
-         processed and possibly retransmitted by other nodes in the ad
-         hoc network.  For instance, the node initiating a Route
-         Discovery process and broadcasting the RREQ message is called
-         the originating node of the RREQ message.
-
-      reverse route
-
-         A route set up to forward a reply (RREP) packet back to the
-         originator from the destination or from an intermediate node
-         having a route to the destination.
-
-      sequence number
-
-         A monotonically increasing number maintained by each
-         originating node.  In AODV routing protocol messages, it is
-         used by other nodes to determine the freshness of the
-         information contained from the originating node.
-
-      valid route
-
-         See active route.
-
-4. Applicability Statement
-
-   The AODV routing protocol is designed for mobile ad hoc networks with
-   populations of tens to thousands of mobile nodes.  AODV can handle
-   low, moderate, and relatively high mobility rates, as well as a
-   variety of data traffic levels.  AODV is designed for use in networks
-   where the nodes can all trust each other, either by use of
-   preconfigured keys, or because it is known that there are no
-   malicious intruder nodes.  AODV has been designed to reduce the
-   dissemination of control traffic and eliminate overhead on data
-   traffic, in order to improve scalability and performance.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 6]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-5. Message Formats
-
-5.1. Route Request (RREQ) Message Format
-
-    0                   1                   2                   3
-    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Type      |J|R|G|D|U|   Reserved          |   Hop Count   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                            RREQ ID                            |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                    Destination IP Address                     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                  Destination Sequence Number                  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                    Originator IP Address                      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                  Originator Sequence Number                   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   The format of the Route Request message is illustrated above, and
-   contains the following fields:
-
-      Type           1
-
-      J              Join flag; reserved for multicast.
-
-      R              Repair flag; reserved for multicast.
-
-      G              Gratuitous RREP flag; indicates whether a
-                     gratuitous RREP should be unicast to the node
-                     specified in the Destination IP Address field (see
-                     sections 6.3, 6.6.3).
-
-      D              Destination only flag; indicates only the
-                     destination may respond to this RREQ (see
-                     section 6.5).
-
-      U              Unknown sequence number; indicates the destination
-                     sequence number is unknown (see section 6.3).
-
-      Reserved       Sent as 0; ignored on reception.
-
-      Hop Count      The number of hops from the Originator IP Address
-                     to the node handling the request.
-
-
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 7]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-      RREQ ID        A sequence number uniquely identifying the
-                     particular RREQ when taken in conjunction with the
-                     originating node's IP address.
-
-      Destination IP Address
-                     The IP address of the destination for which a route
-                     is desired.
-
-      Destination Sequence Number
-                     The latest sequence number received in the past
-                     by the originator for any route towards the
-                     destination.
-
-      Originator IP Address
-                     The IP address of the node which originated the
-                     Route Request.
-
-      Originator Sequence Number
-                     The current sequence number to be used in the route
-                     entry pointing towards the originator of the route
-                     request.
-
-5.2. Route Reply (RREP) Message Format
-
-    0                   1                   2                   3
-    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Type      |R|A|    Reserved     |Prefix Sz|   Hop Count   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                     Destination IP address                    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                  Destination Sequence Number                  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                    Originator IP address                      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                           Lifetime                            |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   The format of the Route Reply message is illustrated above, and
-   contains the following fields:
-
-      Type          2
-
-      R             Repair flag; used for multicast.
-
-      A             Acknowledgment required; see sections 5.4 and 6.7.
-
-      Reserved      Sent as 0; ignored on reception.
-
-
-
-Perkins, et. al.              Experimental                      [Page 8]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-      Prefix Size   If nonzero, the 5-bit Prefix Size specifies that the
-                    indicated next hop may be used for any nodes with
-                    the same routing prefix (as defined by the Prefix
-                    Size) as the requested destination.
-
-      Hop Count     The number of hops from the Originator IP Address
-                    to the Destination IP Address.  For multicast route
-                    requests this indicates the number of hops to the
-                    multicast tree member sending the RREP.
-
-      Destination IP Address
-                    The IP address of the destination for which a route
-                    is supplied.
-
-      Destination Sequence Number
-                    The destination sequence number associated to the
-                    route.
-
-      Originator IP Address
-                    The IP address of the node which originated the RREQ
-                    for which the route is supplied.
-
-      Lifetime      The time in milliseconds for which nodes receiving
-                    the RREP consider the route to be valid.
-
-   Note that the Prefix Size allows a subnet router to supply a route
-   for every host in the subnet defined by the routing prefix, which is
-   determined by the IP address of the subnet router and the Prefix
-   Size.  In order to make use of this feature, the subnet router has to
-   guarantee reachability to all the hosts sharing the indicated subnet
-   prefix.  See section 7 for details.  When the prefix size is nonzero,
-   any routing information (and precursor data) MUST be kept with
-   respect to the subnet route, not the individual destination IP
-   address on that subnet.
-
-   The 'A' bit is used when the link over which the RREP message is sent
-   may be unreliable or unidirectional.  When the RREP message contains
-   the 'A' bit set, the receiver of the RREP is expected to return a
-   RREP-ACK message.  See section 6.8.
-
-
-
-
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                      [Page 9]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-5.3. Route Error (RERR) Message Format
-
-    0                   1                   2                   3
-    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Type      |N|          Reserved           |   DestCount   |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |            Unreachable Destination IP Address (1)             |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |         Unreachable Destination Sequence Number (1)           |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
-   |  Additional Unreachable Destination IP Addresses (if needed)  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |Additional Unreachable Destination Sequence Numbers (if needed)|
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   The format of the Route Error message is illustrated above, and
-   contains the following fields:
-
-      Type        3
-
-      N           No delete flag; set when a node has performed a local
-                  repair of a link, and upstream nodes should not delete
-                  the route.
-
-      Reserved    Sent as 0; ignored on reception.
-
-      DestCount   The number of unreachable destinations included in the
-                  message; MUST be at least 1.
-
-      Unreachable Destination IP Address
-                  The IP address of the destination that has become
-                  unreachable due to a link break.
-
-      Unreachable Destination Sequence Number
-                  The sequence number in the route table entry for
-                  the destination listed in the previous Unreachable
-                  Destination IP Address field.
-
-   The RERR message is sent whenever a link break causes one or more
-   destinations to become unreachable from some of the node's neighbors.
-   See section 6.2 for information about how to maintain the appropriate
-   records for this determination, and section 6.11 for specification
-   about how to create the list of destinations.
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 10]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-5.4. Route Reply Acknowledgment (RREP-ACK) Message Format
-
-   The Route Reply Acknowledgment (RREP-ACK) message MUST be sent in
-   response to a RREP message with the 'A' bit set (see section 5.2).
-   This is typically done when there is danger of unidirectional links
-   preventing the completion of a Route Discovery cycle (see section
-   6.8).
-
-    0                   1
-    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Type      |   Reserved    |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-      Type        4
-
-      Reserved    Sent as 0; ignored on reception.
-
-6. AODV Operation
-
-   This section describes the scenarios under which nodes generate Route
-   Request (RREQ), Route Reply (RREP) and Route Error (RERR) messages
-   for unicast communication towards a destination, and how the message
-   data are handled.  In order to process the messages correctly,
-   certain state information has to be maintained in the route table
-   entries for the destinations of interest.
-
-   All AODV messages are sent to port 654 using UDP.
-
-6.1. Maintaining Sequence Numbers
-
-   Every route table entry at every node MUST include the latest
-   information available about the sequence number for the IP address of
-   the destination node for which the route table entry is maintained.
-   This sequence number is called the "destination sequence number".  It
-   is updated whenever a node receives new (i.e., not stale) information
-   about the sequence number from RREQ, RREP, or RERR messages that may
-   be received related to that destination.  AODV depends on each node
-   in the network to own and maintain its destination sequence number to
-   guarantee the loop-freedom of all routes towards that node.  A
-   destination node increments its own sequence number in two
-   circumstances:
-
-   -  Immediately before a node originates a route discovery, it MUST
-      increment its own sequence number.  This prevents conflicts with
-      previously established reverse routes towards the originator of a
-      RREQ.
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 11]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   -  Immediately before a destination node originates a RREP in
-      response to a RREQ, it MUST update its own sequence number to the
-      maximum of its current sequence number and the destination
-      sequence number in the RREQ packet.
-
-   When the destination increments its sequence number, it MUST do so by
-   treating the sequence number value as if it were an unsigned number.
-   To accomplish sequence number rollover, if the sequence number has
-   already been assigned to be the largest possible number representable
-   as a 32-bit unsigned integer (i.e., 4294967295), then when it is
-   incremented it will then have a value of zero (0).  On the other
-   hand, if the sequence number currently has the value 2147483647,
-   which is the largest possible positive integer if 2's complement
-   arithmetic is in use with 32-bit integers, the next value will be
-   2147483648, which is the most negative possible integer in the same
-   numbering system.  The representation of negative numbers is not
-   relevant to the increment of AODV sequence numbers.  This is in
-   contrast to the manner in which the result of comparing two AODV
-   sequence numbers is to be treated (see below).
-
-   In order to ascertain that information about a destination is not
-   stale, the node compares its current numerical value for the sequence
-   number with that obtained from the incoming AODV message.  This
-   comparison MUST be done using signed 32-bit arithmetic, this is
-   necessary to accomplish sequence number rollover.  If the result of
-   subtracting the currently stored sequence number from the value of
-   the incoming sequence number is less than zero, then the information
-   related to that destination in the AODV message MUST be discarded,
-   since that information is stale compared to the node's currently
-   stored information.
-
-   The only other circumstance in which a node may change the
-   destination sequence number in one of its route table entries is in
-   response to a lost or expired link to the next hop towards that
-   destination.  The node determines which destinations use a particular
-   next hop by consulting its routing table.  In this case, for each
-   destination that uses the next hop, the node increments the sequence
-   number and marks the route as invalid (see also sections 6.11, 6.12).
-   Whenever any fresh enough (i.e., containing a sequence number at
-   least equal to the recorded sequence number) routing information for
-   an affected destination is received by a node that has marked that
-   route table entry as invalid, the node SHOULD update its route table
-   information according to the information contained in the update.
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 12]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   A node may change the sequence number in the routing table entry of a
-   destination only if:
-
-   -  it is itself the destination node, and offers a new route to
-      itself, or
-
-   -  it receives an AODV message with new information about the
-      sequence number for a destination node, or
-
-   -  the path towards the destination node expires or breaks.
-
-6.2. Route Table Entries and Precursor Lists
-
-   When a node receives an AODV control packet from a neighbor, or
-   creates or updates a route for a particular destination or subnet, it
-   checks its route table for an entry for the destination.  In the
-   event that there is no corresponding entry for that destination, an
-   entry is created.  The sequence number is either determined from the
-   information contained in the control packet, or else the valid
-   sequence number field is set to false.  The route is only updated if
-   the new sequence number is either
-
-   (i)       higher than the destination sequence number in the route
-             table, or
-
-   (ii)      the sequence numbers are equal, but the hop count (of the
-             new information) plus one, is smaller than the existing hop
-             count in the routing table, or
-
-   (iii)     the sequence number is unknown.
-
-   The Lifetime field of the routing table entry is either determined
-   from the control packet, or it is initialized to
-   ACTIVE_ROUTE_TIMEOUT.  This route may now be used to send any queued
-   data packets and fulfills any outstanding route requests.
-
-   Each time a route is used to forward a data packet, its Active Route
-   Lifetime field of the source, destination and the next hop on the
-   path to the destination is updated to be no less than the current
-   time plus ACTIVE_ROUTE_TIMEOUT.  Since the route between each
-   originator and destination pair is expected to be symmetric, the
-   Active Route Lifetime for the previous hop, along the reverse path
-   back to the IP source, is also updated to be no less than the current
-   time plus ACTIVE_ROUTE_TIMEOUT.  The lifetime for an Active Route is
-   updated each time the route is used regardless of whether the
-   destination is a single node or a subnet.
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 13]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   For each valid route maintained by a node as a routing table entry,
-   the node also maintains a list of precursors that may be forwarding
-   packets on this route.  These precursors will receive notifications
-   from the node in the event of detection of the loss of the next hop
-   link.  The list of precursors in a routing table entry contains those
-   neighboring nodes to which a route reply was generated or forwarded.
-
-6.3. Generating Route Requests
-
-   A node disseminates a RREQ when it determines that it needs a route
-   to a destination and does not have one available.  This can happen if
-   the destination is previously unknown to the node, or if a previously
-   valid route to the destination expires or is marked as invalid.  The
-   Destination Sequence Number field in the RREQ message is the last
-   known destination sequence number for this destination and is copied
-   from the Destination Sequence Number field in the routing table.  If
-   no sequence number is known, the unknown sequence number flag MUST be
-   set.  The Originator Sequence Number in the RREQ message is the
-   node's own sequence number, which is incremented prior to insertion
-   in a RREQ.  The RREQ ID field is incremented by one from the last
-   RREQ ID used by the current node.  Each node maintains only one RREQ
-   ID.  The Hop Count field is set to zero.
-
-   Before broadcasting the RREQ, the originating node buffers the RREQ
-   ID and the Originator IP address (its own address) of the RREQ for
-   PATH_DISCOVERY_TIME.  In this way, when the node receives the packet
-   again from its neighbors, it will not reprocess and re-forward the
-   packet.
-
-   An originating node often expects to have bidirectional
-   communications with a destination node.  In such cases, it is not
-   sufficient for the originating node to have a route to the
-   destination node; the destination must also have a route back to the
-   originating node.  In order for this to happen as efficiently as
-   possible, any generation of a RREP by an intermediate node (as in
-   section 6.6) for delivery to the originating node SHOULD be
-   accompanied by some action that notifies the destination about a
-   route back to the originating node.  The originating node selects
-   this mode of operation in the intermediate nodes by setting the 'G'
-   flag.  See section 6.6.3 for details about actions taken by the
-   intermediate node in response to a RREQ with the 'G' flag set.
-
-   A node SHOULD NOT originate more than RREQ_RATELIMIT RREQ messages
-   per second.  After broadcasting a RREQ, a node waits for a RREP (or
-   other control message with current information regarding a route to
-   the appropriate destination).  If a route is not received within
-   NET_TRAVERSAL_TIME milliseconds, the node MAY try again to discover a
-   route by broadcasting another RREQ, up to a maximum of RREQ_RETRIES
-
-
-
-Perkins, et. al.              Experimental                     [Page 14]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   times at the maximum TTL value.  Each new attempt MUST increment and
-   update the RREQ ID.  For each attempt, the TTL field of the IP header
-   is set according to the mechanism specified in section 6.4, in order
-   to enable control over how far the RREQ is disseminated for the each
-   retry.
-
-   Data packets waiting for a route (i.e., waiting for a RREP after a
-   RREQ has been sent) SHOULD be buffered.  The buffering SHOULD be
-   "first-in, first-out" (FIFO).  If a route discovery has been
-   attempted RREQ_RETRIES times at the maximum TTL without receiving any
-   RREP, all data packets destined for the corresponding destination
-   SHOULD be dropped from the buffer and a Destination Unreachable
-   message SHOULD be delivered to the application.
-
-   To reduce congestion in a network, repeated attempts by a source node
-   at route discovery for a single destination MUST utilize a binary
-   exponential backoff.  The first time a source node broadcasts a RREQ,
-   it waits NET_TRAVERSAL_TIME milliseconds for the reception of a RREP.
-   If a RREP is not received within that time, the source node sends a
-   new RREQ.  When calculating the time to wait for the RREP after
-   sending the second RREQ, the source node MUST use a binary
-   exponential backoff.  Hence, the waiting time for the RREP
-   corresponding to the second RREQ is 2 * NET_TRAVERSAL_TIME
-   milliseconds.  If a RREP is not received within this time period,
-   another RREQ may be sent, up to RREQ_RETRIES additional attempts
-   after the first RREQ.  For each additional attempt, the waiting time
-   for the RREP is multiplied by 2, so that the time conforms to a
-   binary exponential backoff.
-
-6.4. Controlling Dissemination of Route Request Messages
-
-   To prevent unnecessary network-wide dissemination of RREQs, the
-   originating node SHOULD use an expanding ring search technique.  In
-   an expanding ring search, the originating node initially uses a TTL =
-   TTL_START in the RREQ packet IP header and sets the timeout for
-   receiving a RREP to RING_TRAVERSAL_TIME milliseconds.
-   RING_TRAVERSAL_TIME is calculated as described in section 10.  The
-   TTL_VALUE used in calculating RING_TRAVERSAL_TIME is set equal to the
-   value of the TTL field in the IP header.  If the RREQ times out
-   without a corresponding RREP, the originator broadcasts the RREQ
-   again with the TTL incremented by TTL_INCREMENT.  This continues
-   until the TTL set in the RREQ reaches TTL_THRESHOLD, beyond which a
-   TTL = NET_DIAMETER is used for each attempt.  Each time, the timeout
-   for receiving a RREP is RING_TRAVERSAL_TIME.  When it is desired to
-   have all retries traverse the entire ad hoc network, this can be
-   achieved by configuring TTL_START and TTL_INCREMENT both to be the
-   same value as NET_DIAMETER.
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 15]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   The Hop Count stored in an invalid routing table entry indicates the
-   last known hop count to that destination in the routing table.  When
-   a new route to the same destination is required at a later time
-   (e.g., upon route loss), the TTL in the RREQ IP header is initially
-   set to the Hop Count plus TTL_INCREMENT.  Thereafter, following each
-   timeout the TTL is incremented by TTL_INCREMENT until TTL =
-   TTL_THRESHOLD is reached.  Beyond this TTL = NET_DIAMETER is used.
-   Once TTL = NET_DIAMETER, the timeout for waiting for the RREP is set
-   to NET_TRAVERSAL_TIME, as specified in section 6.3.
-
-   An expired routing table entry SHOULD NOT be expunged before
-   (current_time + DELETE_PERIOD) (see section 6.11).  Otherwise, the
-   soft state corresponding to the route (e.g., last known hop count)
-   will be lost.  Furthermore, a longer routing table entry expunge time
-   MAY be configured.  Any routing table entry waiting for a RREP SHOULD
-   NOT be expunged before (current_time + 2 * NET_TRAVERSAL_TIME).
-
-6.5. Processing and Forwarding Route Requests
-
-   When a node receives a RREQ, it first creates or updates a route to
-   the previous hop without a valid sequence number (see section 6.2)
-   then checks to determine whether it has received a RREQ with the same
-   Originator IP Address and RREQ ID within at least the last
-   PATH_DISCOVERY_TIME.  If such a RREQ has been received, the node
-   silently discards the newly received RREQ.  The rest of this
-   subsection describes actions taken for RREQs that are not discarded.
-
-   First, it first increments the hop count value in the RREQ by one, to
-   account for the new hop through the intermediate node.  Then the node
-   searches for a reverse route to the Originator IP Address (see
-   section 6.2), using longest-prefix matching.  If need be, the route
-   is created, or updated using the Originator Sequence Number from the
-   RREQ in its routing table.  This reverse route will be needed if the
-   node receives a RREP back to the node that originated the RREQ
-   (identified by the Originator IP Address).  When the reverse route is
-   created or updated, the following actions on the route are also
-   carried out:
-
-   1. the Originator Sequence Number from the RREQ is compared to the
-      corresponding destination sequence number in the route table entry
-      and copied if greater than the existing value there
-
-   2. the valid sequence number field is set to true;
-
-   3. the next hop in the routing table becomes the node from which the
-      RREQ was received (it is obtained from the source IP address in
-      the IP header and is often not equal to the Originator IP Address
-      field in the RREQ message);
-
-
-
-Perkins, et. al.              Experimental                     [Page 16]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   4. the hop count is copied from the Hop Count in the RREQ message;
-
-   Whenever a RREQ message is received, the Lifetime of the reverse
-   route entry for the Originator IP address is set to be the maximum of
-   (ExistingLifetime, MinimalLifetime), where
-
-      MinimalLifetime =    (current time + 2*NET_TRAVERSAL_TIME -
-                           2*HopCount*NODE_TRAVERSAL_TIME).
-
-   The current node can use the reverse route to forward data packets in
-   the same way as for any other route in the routing table.
-
-   If a node does not generate a RREP (following the processing rules in
-   section 6.6), and if the incoming IP header has TTL larger than 1,
-   the node updates and broadcasts the RREQ to address 255.255.255.255
-   on each of its configured interfaces (see section 6.14).  To update
-   the RREQ, the TTL or hop limit field in the outgoing IP header is
-   decreased by one, and the Hop Count field in the RREQ message is
-   incremented by one, to account for the new hop through the
-   intermediate node.  Lastly, the Destination Sequence number for the
-   requested destination is set to the maximum of the corresponding
-   value received in the RREQ message, and the destination sequence
-   value currently maintained by the node for the requested destination.
-   However, the forwarding node MUST NOT modify its maintained value for
-   the destination sequence number, even if the value received in the
-   incoming RREQ is larger than the value currently maintained by the
-   forwarding node.
-
-   Otherwise, if a node does generate a RREP, then the node discards the
-   RREQ.  Notice that, if intermediate nodes reply to every transmission
-   of RREQs for a particular destination, it might turn out that the
-   destination does not receive any of the discovery messages.  In this
-   situation, the destination does not learn of a route to the
-   originating node from the RREQ messages.  This could cause the
-   destination to initiate a route discovery (for example, if the
-   originator is attempting to establish a TCP session).  In order that
-   the destination learn of routes to the originating node, the
-   originating node SHOULD set the "gratuitous RREP" ('G') flag in the
-   RREQ if for any reason the destination is likely to need a route to
-   the originating node.  If, in response to a RREQ with the 'G' flag
-   set, an intermediate node returns a RREP, it MUST also unicast a
-   gratuitous RREP to the destination node (see section 6.6.3).
-
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 17]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-6.6. Generating Route Replies
-
-   A node generates a RREP if either:
-
-   (i)       it is itself the destination, or
-
-   (ii)      it has an active route to the destination, the destination
-             sequence number in the node's existing route table entry
-             for the destination is valid and greater than or equal to
-             the Destination Sequence Number of the RREQ (comparison
-             using signed 32-bit arithmetic), and the "destination only"
-             ('D') flag is NOT set.
-
-   When generating a RREP message, a node copies the Destination IP
-   Address and the Originator Sequence Number from the RREQ message into
-   the corresponding fields in the RREP message.  Processing is slightly
-   different, depending on whether the node is itself the requested
-   destination (see section 6.6.1), or instead if it is an intermediate
-   node with an fresh enough route to the destination (see section
-   6.6.2).
-
-   Once created, the RREP is unicast to the next hop toward the
-   originator of the RREQ, as indicated by the route table entry for
-   that originator.  As the RREP is forwarded back towards the node
-   which originated the RREQ message, the Hop Count field is incremented
-   by one at each hop.  Thus, when the RREP reaches the originator, the
-   Hop Count represents the distance, in hops, of the destination from
-   the originator.
-
-6.6.1. Route Reply Generation by the Destination
-
-   If the generating node is the destination itself, it MUST increment
-   its own sequence number by one if the sequence number in the RREQ
-   packet is equal to that incremented value.  Otherwise, the
-   destination does not change its sequence number before generating the
-   RREP message.  The destination node places its (perhaps newly
-   incremented) sequence number into the Destination Sequence Number
-   field of the RREP, and enters the value zero in the Hop Count field
-   of the RREP.
-
-   The destination node copies the value MY_ROUTE_TIMEOUT (see section
-   10) into the Lifetime field of the RREP.  Each node MAY reconfigure
-   its value for MY_ROUTE_TIMEOUT, within mild constraints (see section
-   10).
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 18]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-6.6.2. Route Reply Generation by an Intermediate Node
-
-   If the node generating the RREP is not the destination node, but
-   instead is an intermediate hop along the path from the originator to
-   the destination, it copies its known sequence number for the
-   destination into the Destination Sequence Number field in the RREP
-   message.
-
-   The intermediate node updates the forward route entry by placing the
-   last hop node (from which it received the RREQ, as indicated by the
-   source IP address field in the IP header) into the precursor list for
-   the forward route entry -- i.e., the entry for the Destination IP
-   Address.  The intermediate node also updates its route table entry
-   for the node originating the RREQ by placing the next hop towards the
-   destination in the precursor list for the reverse route entry --
-   i.e., the entry for the Originator IP Address field of the RREQ
-   message data.
-
-   The intermediate node places its distance in hops from the
-   destination (indicated by the hop count in the routing table) Count
-   field in the RREP.  The Lifetime field of the RREP is calculated by
-   subtracting the current time from the expiration time in its route
-   table entry.
-
-6.6.3. Generating Gratuitous RREPs
-
-   After a node receives a RREQ and responds with a RREP, it discards
-   the RREQ.  If the RREQ has the 'G' flag set, and the intermediate
-   node returns a RREP to the originating node, it MUST also unicast a
-   gratuitous RREP to the destination node.  The gratuitous RREP that is
-   to be sent to the desired destination contains the following values
-   in the RREP message fields:
-
-   Hop Count                        The Hop Count as indicated in the
-                                    node's route table entry for the
-                                    originator
-
-   Destination IP Address           The IP address of the node that
-                                    originated the RREQ
-
-   Destination Sequence Number      The Originator Sequence Number from
-                                    the RREQ
-
-   Originator IP Address            The IP address of the Destination
-                                    node in the RREQ
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 19]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   Lifetime                         The remaining lifetime of the route
-                                    towards the originator of the RREQ,
-                                    as known by the intermediate node.
-
-   The gratuitous RREP is then sent to the next hop along the path to
-   the destination node, just as if the destination node had already
-   issued a RREQ for the originating node and this RREP was produced in
-   response to that (fictitious) RREQ.  The RREP that is sent to the
-   originator of the RREQ is the same whether or not the 'G' bit is set.
-
-6.7. Receiving and Forwarding Route Replies
-
-   When a node receives a RREP message, it searches (using longest-
-   prefix matching) for a route to the previous hop.  If needed, a route
-   is created for the previous hop, but without a valid sequence number
-   (see section 6.2).  Next, the node then increments the hop count
-   value in the RREP by one, to account for the new hop through the
-   intermediate node.  Call this incremented value the "New Hop Count".
-   Then the forward route for this destination is created if it does not
-   already exist.  Otherwise, the node compares the Destination Sequence
-   Number in the message with its own stored destination sequence number
-   for the Destination IP Address in the RREP message.  Upon comparison,
-   the existing entry is updated only in the following circumstances:
-
-   (i)       the sequence number in the routing table is marked as
-             invalid in route table entry.
-
-   (ii)      the Destination Sequence Number in the RREP is greater than
-             the node's copy of the destination sequence number and the
-             known value is valid, or
-
-   (iii)     the sequence numbers are the same, but the route is is
-             marked as inactive, or
-
-   (iv)      the sequence numbers are the same, and the New Hop Count is
-             smaller than the hop count in route table entry.
-
-   If the route table entry to the destination is created or updated,
-   then the following actions occur:
-
-   -  the route is marked as active,
-
-   -  the destination sequence number is marked as valid,
-
-   -  the next hop in the route entry is assigned to be the node from
-      which the RREP is received, which is indicated by the source IP
-      address field in the IP header,
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 20]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   -  the hop count is set to the value of the New Hop Count,
-
-   -  the expiry time is set to the current time plus the value of the
-      Lifetime in the RREP message,
-
-   -  and the destination sequence number is the Destination Sequence
-      Number in the RREP message.
-
-   The current node can subsequently use this route to forward data
-   packets to the destination.
-
-   If the current node is not the node indicated by the Originator IP
-   Address in the RREP message AND a forward route has been created or
-   updated as described above, the node consults its route table entry
-   for the originating node to determine the next hop for the RREP
-   packet, and then forwards the RREP towards the originator using the
-   information in that route table entry.  If a node forwards a RREP
-   over a link that is likely to have errors or be unidirectional, the
-   node SHOULD set the 'A' flag to require that the recipient of the
-   RREP acknowledge receipt of the RREP by sending a RREP-ACK message
-   back (see section 6.8).
-
-   When any node transmits a RREP, the precursor list for the
-   corresponding destination node is updated by adding to it the next
-   hop node to which the RREP is forwarded.  Also, at each node the
-   (reverse) route used to forward a RREP has its lifetime changed to be
-   the maximum of (existing-lifetime, (current time +
-   ACTIVE_ROUTE_TIMEOUT).  Finally, the precursor list for the next hop
-   towards the destination is updated to contain the next hop towards
-   the source.
-
-6.8. Operation over Unidirectional Links
-
-   It is possible that a RREP transmission may fail, especially if the
-   RREQ transmission triggering the RREP occurs over a unidirectional
-   link.  If no other RREP generated from the same route discovery
-   attempt reaches the node which originated the RREQ message, the
-   originator will reattempt route discovery after a timeout (see
-   section 6.3).  However, the same scenario might well be repeated
-   without any improvement, and no route would be discovered even after
-   repeated retries.  Unless corrective action is taken, this can happen
-   even when bidirectional routes between originator and destination do
-   exist.  Link layers using broadcast transmissions for the RREQ will
-   not be able to detect the presence of such unidirectional links.  In
-   AODV, any node acts on only the first RREQ with the same RREQ ID and
-   ignores any subsequent RREQs.  Suppose, for example, that the first
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 21]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   RREQ arrives along a path that has one or more unidirectional
-   link(s).  A subsequent RREQ may arrive via a bidirectional path
-   (assuming such paths exist), but it will be ignored.
-
-   To prevent this problem, when a node detects that its transmission of
-   a RREP message has failed, it remembers the next-hop of the failed
-   RREP in a "blacklist" set.  Such failures can be detected via the
-   absence of a link-layer or network-layer acknowledgment (e.g., RREP-
-   ACK).  A node ignores all RREQs received from any node in its
-   blacklist set.  Nodes are removed from the blacklist set after a
-   BLACKLIST_TIMEOUT period (see section 10).  This period should be set
-   to the upper bound of the time it takes to perform the allowed number
-   of route request retry attempts as described in section 6.3.
-
-   Note that the RREP-ACK packet does not contain any information about
-   which RREP it is acknowledging.  The time at which the RREP-ACK is
-   received will likely come just after the time when the RREP was sent
-   with the 'A' bit.  This information is expected to be sufficient to
-   provide assurance to the sender of the RREP that the link is
-   currently bidirectional, without any real dependence on the
-   particular RREP message being acknowledged.  However, that assurance
-   typically cannot be expected to remain in force permanently.
-
-6.9. Hello Messages
-
-   A node MAY offer connectivity information by broadcasting local Hello
-   messages.  A node SHOULD only use hello messages if it is part of an
-   active route.  Every HELLO_INTERVAL milliseconds, the node checks
-   whether it has sent a broadcast (e.g., a RREQ or an appropriate layer
-   2 message) within the last HELLO_INTERVAL.  If it has not, it MAY
-   broadcast a RREP with TTL = 1, called a Hello message, with the RREP
-   message fields set as follows:
-
-      Destination IP Address         The node's IP address.
-
-      Destination Sequence Number    The node's latest sequence number.
-
-      Hop Count                      0
-
-      Lifetime                       ALLOWED_HELLO_LOSS * HELLO_INTERVAL
-
-   A node MAY determine connectivity by listening for packets from its
-   set of neighbors.  If, within the past DELETE_PERIOD, it has received
-   a Hello message from a neighbor, and then for that neighbor does not
-   receive any packets (Hello messages or otherwise) for more than
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 22]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   ALLOWED_HELLO_LOSS * HELLO_INTERVAL milliseconds, the node SHOULD
-   assume that the link to this neighbor is currently lost.  When this
-   happens, the node SHOULD proceed as in Section 6.11.
-
-   Whenever a node receives a Hello message from a neighbor, the node
-   SHOULD make sure that it has an active route to the neighbor, and
-   create one if necessary.  If a route already exists, then the
-   Lifetime for the route should be increased, if necessary, to be at
-   least ALLOWED_HELLO_LOSS * HELLO_INTERVAL.  The route to the
-   neighbor, if it exists, MUST subsequently contain the latest
-   Destination Sequence Number from the Hello message.  The current node
-   can now begin using this route to forward data packets.  Routes that
-   are created by hello messages and not used by any other active routes
-   will have empty precursor lists and would not trigger a RERR message
-   if the neighbor moves away and a neighbor timeout occurs.
-
-6.10. Maintaining Local Connectivity
-
-   Each forwarding node SHOULD keep track of its continued connectivity
-   to its active next hops (i.e., which next hops or precursors have
-   forwarded packets to or from the forwarding node during the last
-   ACTIVE_ROUTE_TIMEOUT), as well as neighbors that have transmitted
-   Hello messages during the last (ALLOWED_HELLO_LOSS * HELLO_INTERVAL).
-   A node can maintain accurate information about its continued
-   connectivity to these active next hops, using one or more of the
-   available link or network layer mechanisms, as described below.
-
-   -  Any suitable link layer notification, such as those provided by
-      IEEE 802.11, can be used to determine connectivity, each time a
-      packet is transmitted to an active next hop.  For example, absence
-      of a link layer ACK or failure to get a CTS after sending RTS,
-      even after the maximum number of retransmission attempts,
-      indicates loss of the link to this active next hop.
-
-   -  If layer-2 notification is not available, passive acknowledgment
-      SHOULD be used when the next hop is expected to forward the
-      packet, by listening to the channel for a transmission attempt
-      made by the next hop.  If transmission is not detected within
-      NEXT_HOP_WAIT milliseconds or the next hop is the destination (and
-      thus is not supposed to forward the packet) one of the following
-      methods SHOULD be used to determine connectivity:
-
-      *  Receiving any packet (including a Hello message) from the next
-         hop.
-
-      *  A RREQ unicast to the next hop, asking for a route to the next
-         hop.
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 23]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-      *  An ICMP Echo Request message unicast to the next hop.
-
-   If a link to the next hop cannot be detected by any of these methods,
-   the forwarding node SHOULD assume that the link is lost, and take
-   corrective action by following the methods specified in Section 6.11.
-
-6.11. Route Error (RERR) Messages, Route Expiry and Route Deletion
-
-   Generally, route error and link breakage processing requires the
-   following steps:
-
-   -  Invalidating existing routes
-
-   -  Listing affected destinations
-
-   -  Determining which, if any, neighbors may be affected
-
-   -  Delivering an appropriate RERR to such neighbors
-
-   A Route Error (RERR) message MAY be either broadcast (if there are
-   many precursors), unicast (if there is only 1 precursor), or
-   iteratively unicast to all precursors (if broadcast is
-   inappropriate).  Even when the RERR message is iteratively unicast to
-   several precursors, it is considered to be a single control message
-   for the purposes of the description in the text that follows.  With
-   that understanding, a node SHOULD NOT generate more than
-   RERR_RATELIMIT RERR messages per second.
-
-   A node initiates processing for a RERR message in three situations:
-
-   (i)       if it detects a link break for the next hop of an active
-             route in its routing table while transmitting data (and
-             route repair, if attempted, was unsuccessful), or
-
-   (ii)      if it gets a data packet destined to a node for which it
-             does not have an active route and is not repairing (if
-             using local repair), or
-
-   (iii)     if it receives a RERR from a neighbor for one or more
-             active routes.
-
-   For case (i), the node first makes a list of unreachable destinations
-   consisting of the unreachable neighbor and any additional
-   destinations (or subnets, see section 7) in the local routing table
-   that use the unreachable neighbor as the next hop.  In this case, if
-   a subnet route is found to be newly unreachable, an IP destination
-   address for the subnet is constructed by appending zeroes to the
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 24]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   subnet prefix as shown in the route table entry.  This is
-   unambiguous, since the precursor is known to have route table
-   information with a compatible prefix length for that subnet.
-
-   For case (ii), there is only one unreachable destination, which is
-   the destination of the data packet that cannot be delivered.  For
-   case (iii), the list should consist of those destinations in the RERR
-   for which there exists a corresponding entry in the local routing
-   table that has the transmitter of the received RERR as the next hop.
-
-   Some of the unreachable destinations in the list could be used by
-   neighboring nodes, and it may therefore be necessary to send a (new)
-   RERR.  The RERR should contain those destinations that are part of
-   the created list of unreachable destinations and have a non-empty
-   precursor list.
-
-   The neighboring node(s) that should receive the RERR are all those
-   that belong to a precursor list of at least one of the unreachable
-   destination(s) in the newly created RERR.  In case there is only one
-   unique neighbor that needs to receive the RERR, the RERR SHOULD be
-   unicast toward that neighbor.  Otherwise the RERR is typically sent
-   to the local broadcast address (Destination IP == 255.255.255.255,
-   TTL == 1) with the unreachable destinations, and their corresponding
-   destination sequence numbers, included in the packet.  The DestCount
-   field of the RERR packet indicates the number of unreachable
-   destinations included in the packet.
-
-   Just before transmitting the RERR, certain updates are made on the
-   routing table that may affect the destination sequence numbers for
-   the unreachable destinations.  For each one of these destinations,
-   the corresponding routing table entry is updated as follows:
-
-   1. The destination sequence number of this routing entry, if it
-      exists and is valid, is incremented for cases (i) and (ii) above,
-      and copied from the incoming RERR in case (iii) above.
-
-   2. The entry is invalidated by marking the route entry as invalid
-
-   3. The Lifetime field is updated to current time plus DELETE_PERIOD.
-      Before this time, the entry SHOULD NOT be deleted.
-
-   Note that the Lifetime field in the routing table plays dual role --
-   for an active route it is the expiry time, and for an invalid route
-   it is the deletion time.  If a data packet is received for an invalid
-   route, the Lifetime field is updated to current time plus
-   DELETE_PERIOD.  The determination of DELETE_PERIOD is discussed in
-   Section 10.
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 25]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-6.12. Local Repair
-
-   When a link break in an active route occurs, the node upstream of
-   that break MAY choose to repair the link locally if the destination
-   was no farther than MAX_REPAIR_TTL hops away.  To repair the link
-   break, the node increments the sequence number for the destination
-   and then broadcasts a RREQ for that destination.  The TTL of the RREQ
-   should initially be set to the following value:
-
-      max(MIN_REPAIR_TTL, 0.5 * #hops) + LOCAL_ADD_TTL,
-
-   where #hops is the number of hops to the sender (originator) of the
-   currently undeliverable packet.  Thus, local repair attempts will
-   often be invisible to the originating node, and will always have TTL
-   >= MIN_REPAIR_TTL + LOCAL_ADD_TTL.  The node initiating the repair
-   then waits the discovery period to receive RREPs in response to the
-   RREQ.  During local repair data packets SHOULD be buffered.  If, at
-   the end of the discovery period, the repairing node has not received
-   a RREP (or other control message creating or updating the route) for
-   that destination, it proceeds as described in Section 6.11 by
-   transmitting a RERR message for that destination.
-
-   On the other hand, if the node receives one or more RREPs (or other
-   control message creating or updating the route to the desired
-   destination) during the discovery period, it first compares the hop
-   count of the new route with the value in the hop count field of the
-   invalid route table entry for that destination.  If the hop count of
-   the newly determined route to the destination is greater than the hop
-   count of the previously known route the node SHOULD issue a RERR
-   message for the destination, with the 'N' bit set.  Then it proceeds
-   as described in Section 6.7, updating its route table entry for that
-   destination.
-
-   A node that receives a RERR message with the 'N' flag set MUST NOT
-   delete the route to that destination.  The only action taken should
-   be the retransmission of the message, if the RERR arrived from the
-   next hop along that route, and if there are one or more precursor
-   nodes for that route to the destination.  When the originating node
-   receives a RERR message with the 'N' flag set, if this message came
-   from its next hop along its route to the destination then the
-   originating node MAY choose to reinitiate route discovery, as
-   described in Section 6.3.
-
-   Local repair of link breaks in routes sometimes results in increased
-   path lengths to those destinations.  Repairing the link locally is
-   likely to increase the number of data packets that are able to be
-   delivered to the destinations, since data packets will not be dropped
-   as the RERR travels to the originating node.  Sending a RERR to the
-
-
-
-Perkins, et. al.              Experimental                     [Page 26]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   originating node after locally repairing the link break may allow the
-   originator to find a fresh route to the destination that is better,
-   based on current node positions.  However, it does not require the
-   originating node to rebuild the route, as the originator may be done,
-   or nearly done, with the data session.
-
-   When a link breaks along an active route, there are often multiple
-   destinations that become unreachable.  The node that is upstream of
-   the lost link tries an immediate local repair for only the one
-   destination towards which the data packet was traveling.  Other
-   routes using the same link MUST be marked as invalid, but the node
-   handling the local repair MAY flag each such newly lost route as
-   locally repairable; this local repair flag in the route table MUST be
-   reset when the route times out (e.g., after the route has been not
-   been active for ACTIVE_ROUTE_TIMEOUT).  Before the timeout occurs,
-   these other routes will be repaired as needed when packets arrive for
-   the other destinations.  Hence, these routes are repaired as needed;
-   if a data packet does not arrive for the route, then that route will
-   not be repaired.  Alternatively, depending upon local congestion, the
-   node MAY begin the process of establishing local repairs for the
-   other routes, without waiting for new packets to arrive.  By
-   proactively repairing the routes that have broken due to the loss of
-   the link, incoming data packets for those routes will not be subject
-   to the delay of repairing the route and can be immediately forwarded.
-   However, repairing the route before a data packet is received for it
-   runs the risk of repairing routes that are no longer in use.
-   Therefore, depending upon the local traffic in the network and
-   whether congestion is being experienced, the node MAY elect to
-   proactively repair the routes before a data packet is received;
-   otherwise, it can wait until a data is received, and then commence
-   the repair of the route.
-
-6.13. Actions After Reboot
-
-   A node participating in the ad hoc network must take certain actions
-   after reboot as it might lose all sequence number records for all
-   destinations, including its own sequence number.  However, there may
-   be neighboring nodes that are using this node as an active next hop.
-   This can potentially create routing loops.  To prevent this
-   possibility, each node on reboot waits for DELETE_PERIOD before
-   transmitting any route discovery messages.  If the node receives a
-   RREQ, RREP, or RERR control packet, it SHOULD create route entries as
-   appropriate given the sequence number information in the control
-   packets, but MUST not forward any control packets.  If the node
-   receives a data packet for some other destination, it SHOULD
-   broadcast a RERR as described in subsection 6.11 and MUST reset the
-   waiting timer to expire after current time plus DELETE_PERIOD.
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 27]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   It can be shown [4] that by the time the rebooted node comes out of
-   the waiting phase and becomes an active router again, none of its
-   iftrs will be using it as an active next hop any more.  Its own
-   sequence number gets updated once it receives a RREQ from any other
-   node, as the RREQ always carries the maximum destination sequence
-   number seen en route.  If no such RREQ arrives, the node MUST
-   initialize its own sequence number to zero.
-
-6.14. Interfaces
-
-   Because AODV should operate smoothly over wired, as well as wireless,
-   networks, and because it is likely that AODV will also be used with
-   multiple wireless devices, the particular interface over which
-   packets arrive must be known to AODV whenever a packet is received.
-   This includes the reception of RREQ, RREP, and RERR messages.
-   Whenever a packet is received from a new neighbor, the interface on
-   which that packet was received is recorded into the route table entry
-   for that neighbor, along with all the other appropriate routing
-   information.  Similarly, whenever a route to a new destination is
-   learned, the interface through which the destination can be reached
-   is also recorded into the destination's route table entry.
-
-   When multiple interfaces are available, a node retransmitting a RREQ
-   message rebroadcasts that message on all interfaces that have been
-   configured for operation in the ad-hoc network, except those on which
-   it is known that all of the nodes neighbors have already received the
-   RREQ For instance, for some broadcast media (e.g., Ethernet) it may
-   be presumed that all nodes on the same link receive a broadcast
-   message at the same time.  When a node needs to transmit a RERR, it
-   SHOULD only transmit it on those interfaces that have neighboring
-   precursor nodes for that route.
-
-7. AODV and Aggregated Networks
-
-   AODV has been designed for use by mobile nodes with IP addresses that
-   are not necessarily related to each other, to create an ad hoc
-   network.  However, in some cases a collection of mobile nodes MAY
-   operate in a fixed relationship to each other and share a common
-   subnet prefix, moving together within an area where an ad hoc network
-   has formed.  Call such a collection of nodes a "subnet".  In this
-   case, it is possible for a single node within the subnet to advertise
-   reachability for all other nodes on the subnet, by responding with a
-   RREP message to any RREQ message requesting a route to any node with
-   the subnet routing prefix.  Call the single node the "subnet router".
-   In order for a subnet router to operate the AODV protocol for the
-   whole subnet, it has to maintain a destination sequence number for
-   the entire subnet.  In any such RREP message sent by the subnet
-   router, the Prefix Size field of the RREP message MUST be set to the
-
-
-
-Perkins, et. al.              Experimental                     [Page 28]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   length of the subnet prefix.  Other nodes sharing the subnet prefix
-   SHOULD NOT issue RREP messages, and SHOULD forward RREQ messages to
-   the subnet router.
-
-   The processing for RREPs that give routes to subnets (i.e., have
-   nonzero prefix length) is the same as processing for host-specific
-   RREP messages.  Every node that receives the RREP with prefix size
-   information SHOULD create or update the route table entry for the
-   subnet, including the sequence number supplied by the subnet router,
-   and including the appropriate precursor information.  Then, in the
-   future the node can use the information to avoid sending future RREQs
-   for other nodes on the same subnet.
-
-   When a node uses a subnet route it may be that a packet is routed to
-   an IP address on the subnet that is not assigned to any existing node
-   in the ad hoc network.  When that happens, the subnet router MUST
-   return ICMP Host Unreachable message to the sending node.  Upstream
-   nodes receiving such an ICMP message SHOULD record the information
-   that the particular IP address is unreachable, but MUST NOT
-   invalidate the route entry for any matching subnet prefix.
-
-   If several nodes in the subnet advertise reachability to the subnet
-   defined by the subnet prefix, the node with the lowest IP address is
-   elected to be the subnet router, and all other nodes MUST stop
-   advertising reachability.
-
-   The behavior of default routes (i.e., routes with routing prefix
-   length 0) is not defined in this specification.  Selection of routes
-   sharing prefix bits should be according to longest match first.
-
-8. Using AODV with Other Networks
-
-   In some configurations, an ad hoc network may be able to provide
-   connectivity between external routing domains that do not use AODV.
-   If the points of contact to the other networks can act as subnet
-   routers (see Section 7) for any relevant networks within the external
-   routing domains, then the ad hoc network can maintain connectivity to
-   the external routing domains.  Indeed, the external routing networks
-   can use the ad hoc network defined by AODV as a transit network.
-
-   In order to provide this feature, a point of contact to an external
-   network (call it an Infrastructure Router) has to act as the subnet
-   router for every subnet of interest within the external network for
-   which the Infrastructure Router can provide reachability.  This
-   includes the need for maintaining a destination sequence number for
-   that external subnet.
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 29]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   If multiple Infrastructure Routers offer reachability to the same
-   external subnet, those Infrastructure Routers have to cooperate (by
-   means outside the scope of this specification) to provide consistent
-   AODV semantics for ad hoc access to those subnets.
-
-9. Extensions
-
-   In this section, the format of extensions to the RREQ and RREP
-   messages is specified.  All such extensions appear after the message
-   data, and have the following format:
-
-    0                   1                   2                   3
-    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Type      |    Length     |     type-specific data ...
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   where:
-
-   Type     1-255
-
-   Length   The length of the type-specific data, not including the Type
-            and Length fields of the extension in bytes.
-
-   Extensions with types between 128 and 255 may NOT be skipped.  The
-   rules for extensions will be spelled out more fully, and conform to
-   the rules for handling IPv6 options.
-
-9.1. Hello Interval Extension Format
-
-    0                   1                   2                   3
-    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |     Type      |    Length     |       Hello Interval ...      |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   | ... Hello Interval, continued |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-   Type     1
-
-   Length   4
-
-   Hello Interval
-            The number of milliseconds between successive transmissions
-            of a Hello message.
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 30]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   The Hello Interval extension MAY be appended to a RREP message with
-   TTL == 1, to be used by a neighboring receiver in determine how long
-   to wait for subsequent such RREP messages (i.e., Hello messages; see
-   section 6.9).
-
-10. Configuration Parameters
-
-   This section gives default values for some important parameters
-   associated with AODV protocol operations.  A particular mobile node
-   may wish to change certain of the parameters, in particular the
-   NET_DIAMETER, MY_ROUTE_TIMEOUT, ALLOWED_HELLO_LOSS, RREQ_RETRIES, and
-   possibly the HELLO_INTERVAL.  In the latter case, the node should
-   advertise the HELLO_INTERVAL in its Hello messages, by appending a
-   Hello Interval Extension to the RREP message.  Choice of these
-   parameters may affect the performance of the protocol.  Changing
-   NODE_TRAVERSAL_TIME also changes the node's estimate of the
-   NET_TRAVERSAL_TIME, and so can only be done with suitable knowledge
-   about the behavior of other nodes in the ad hoc network.  The
-   configured value for MY_ROUTE_TIMEOUT MUST be at least 2 *
-   PATH_DISCOVERY_TIME.
-
-   Parameter Name           Value
-   ----------------------   -----
-   ACTIVE_ROUTE_TIMEOUT     3,000 Milliseconds
-   ALLOWED_HELLO_LOSS       2
-   BLACKLIST_TIMEOUT        RREQ_RETRIES * NET_TRAVERSAL_TIME
-   DELETE_PERIOD            see note below
-   HELLO_INTERVAL           1,000 Milliseconds
-   LOCAL_ADD_TTL            2
-   MAX_REPAIR_TTL           0.3 * NET_DIAMETER
-   MIN_REPAIR_TTL           see note below
-   MY_ROUTE_TIMEOUT         2 * ACTIVE_ROUTE_TIMEOUT
-   NET_DIAMETER             35
-   NET_TRAVERSAL_TIME       2 * NODE_TRAVERSAL_TIME * NET_DIAMETER
-   NEXT_HOP_WAIT            NODE_TRAVERSAL_TIME + 10
-   NODE_TRAVERSAL_TIME      40 milliseconds
-   PATH_DISCOVERY_TIME      2 * NET_TRAVERSAL_TIME
-   RERR_RATELIMIT           10
-   RING_TRAVERSAL_TIME      2 * NODE_TRAVERSAL_TIME *
-                            (TTL_VALUE + TIMEOUT_BUFFER)
-   RREQ_RETRIES             2
-   RREQ_RATELIMIT           10
-   TIMEOUT_BUFFER           2
-   TTL_START                1
-   TTL_INCREMENT            2
-   TTL_THRESHOLD            7
-   TTL_VALUE                see note below
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 31]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   The MIN_REPAIR_TTL should be the last known hop count to the
-   destination.  If Hello messages are used, then the
-   ACTIVE_ROUTE_TIMEOUT parameter value MUST be more than the value
-   (ALLOWED_HELLO_LOSS * HELLO_INTERVAL).  For a given
-   ACTIVE_ROUTE_TIMEOUT value, this may require some adjustment to the
-   value of the HELLO_INTERVAL, and consequently use of the Hello
-   Interval Extension in the Hello messages.
-
-   TTL_VALUE is the value of the TTL field in the IP header while the
-   expanding ring search is being performed.  This is described further
-   in section 6.4.  The TIMEOUT_BUFFER is configurable.  Its purpose is
-   to provide a buffer for the timeout so that if the RREP is delayed
-   due to congestion, a timeout is less likely to occur while the RREP
-   is still en route back to the source.  To omit this buffer, set
-   TIMEOUT_BUFFER = 0.
-
-   DELETE_PERIOD is intended to provide an upper bound on the time for
-   which an upstream node A can have a neighbor B as an active next hop
-   for destination D, while B has invalidated the route to D.  Beyond
-   this time B can delete the (already invalidated) route to D.  The
-   determination of the upper bound depends somewhat on the
-   characteristics of the underlying link layer.  If Hello messages are
-   used to determine the continued availability of links to next hop
-   nodes, DELETE_PERIOD must be at least ALLOWED_HELLO_LOSS *
-   HELLO_INTERVAL.  If the link layer feedback is used to detect loss of
-   link, DELETE_PERIOD must be at least ACTIVE_ROUTE_TIMEOUT.  If hello
-   messages are received from a neighbor but data packets to that
-   neighbor are lost (e.g., due to temporary link asymmetry), we have to
-   make more concrete assumptions about the underlying link layer. We
-   assume that such asymmetry cannot persist beyond a certain time, say,
-   a multiple K of HELLO_INTERVAL.  In other words, a node will
-   invariably receive at least one out of K subsequent Hello messages
-   from a neighbor if the link is working and the neighbor is sending no
-   other traffic.  Covering all possibilities,
-
-      DELETE_PERIOD = K * max (ACTIVE_ROUTE_TIMEOUT, HELLO_INTERVAL)
-                         (K = 5 is recommended).
-
-   NET_DIAMETER measures the maximum possible number of hops between two
-   nodes in the network.  NODE_TRAVERSAL_TIME is a conservative estimate
-   of the average one hop traversal time for packets and should include
-   queuing delays, interrupt processing times and transfer times.
-   ACTIVE_ROUTE_TIMEOUT SHOULD be set to a longer value (at least 10,000
-   milliseconds) if link-layer indications are used to detect link
-   breakages such as in IEEE 802.11 [5] standard.  TTL_START should be
-   set to at least 2 if Hello messages are used for local connectivity
-   information.  Performance of the AODV protocol is sensitive to the
-   chosen values of these constants, which often depend on the
-
-
-
-Perkins, et. al.              Experimental                     [Page 32]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-   characteristics of the underlying link layer protocol, radio
-   technologies etc.  BLACKLIST_TIMEOUT should be suitably increased if
-   an expanding ring search is used.  In such cases, it should be
-   {[(TTL_THRESHOLD - TTL_START)/TTL_INCREMENT] + 1 + RREQ_RETRIES} *
-   NET_TRAVERSAL_TIME.  This is to account for possible additional route
-   discovery attempts.
-
-11. Security Considerations
-
-   Currently, AODV does not specify any special security measures. Route
-   protocols, however, are prime targets for impersonation attacks.  In
-   networks where the node membership is not known, it is difficult to
-   determine the occurrence of impersonation attacks, and security
-   prevention techniques are difficult at best.  However, when the
-   network membership is known and there is a danger of such attacks,
-   AODV control messages must be protected by use of authentication
-   techniques, such as those involving generation of unforgeable and
-   cryptographically strong message digests or digital signatures.
-   While AODV does not place restrictions on the authentication
-   mechanism used for this purpose, IPsec AH is an appropriate choice
-   for cases where the nodes share an appropriate security association
-   that enables the use of AH.
-
-   In particular, RREP messages SHOULD be authenticated to avoid
-   creation of spurious routes to a desired destination.  Otherwise, an
-   attacker could masquerade as the desired destination, and maliciously
-   deny service to the destination and/or maliciously inspect and
-   consume traffic intended for delivery to the destination.  RERR
-   messages, while less dangerous, SHOULD be authenticated in order to
-   prevent malicious nodes from disrupting valid routes between nodes
-   that are communication partners.
-
-   AODV does not make any assumption about the method by which addresses
-   are assigned to the mobile nodes, except that they are presumed to
-   have unique IP addresses.  Therefore, no special consideration, other
-   than what is natural because of the general protocol specifications,
-   can be made about the applicability of IPsec authentication headers
-   or key exchange mechanisms.  However, if the mobile nodes in the ad
-   hoc network have pre-established security associations, it is
-   presumed that the purposes for which the security associations are
-   created include that of authorizing the processing of AODV control
-   messages.  Given this understanding, the mobile nodes should be able
-   to use the same authentication mechanisms based on their IP addresses
-   as they would have used otherwise.
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 33]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-12. IANA Considerations
-
-   AODV defines a "Type" field for messages sent to port 654.  A new
-   registry has been created for the values for this Type field, and the
-   following values have been assigned:
-
-      Message Type                    Value
-      ---------------------------     -----
-      Route Request (RREQ)            1
-      Route Reply (RREP)              2
-      Route Error (RERR)              3
-      Route-Reply Ack (RREP-ACK)      4
-
-   AODV control messages can have extensions.  Currently, only one
-   extension is defined.  A new registry has been created for the Type
-   field of the extensions:
-
-      Extension Type                  Value
-      ---------------------------     -----
-      Hello Interval                  1
-
-   Future values of the Message Type or Extension Type can be allocated
-   using standards action [2].
-
-13. IPv6 Considerations
-
-   See [6] for detailed operation for IPv6.  The only changes to the
-   protocol are that the address fields are enlarged.
-
-14. Acknowledgments
-
-   Special thanks to Ian Chakeres, UCSB, for his extensive suggestions
-   and contributions to recent revisions.
-
-   We acknowledge with gratitude the work done at University of
-   Pennsylvania within Carl Gunter's group, as well as at Stanford and
-   CMU, to determine some conditions (especially involving reboots and
-   lost RERRs) under which previous versions of AODV could suffer from
-   routing loops.  Contributors to those efforts include Karthikeyan
-   Bhargavan, Joshua Broch, Dave Maltz, Madanlal Musuvathi, and Davor
-   Obradovic.  The idea of a DELETE_PERIOD, for which expired routes
-   (and, in particular, the sequence numbers) to a particular
-   destination must be maintained, was also suggested by them.
-
-   We also acknowledge the comments and improvements suggested by Sung-
-   Ju Lee (especially regarding local repair), Mahesh Marina, Erik
-   Nordstrom (who provided text for section 6.11), Yves Prelot, Marc
-   Mosko, Manel Guerrero Zapata, Philippe Jacquet, and Fred Baker.
-
-
-
-Perkins, et. al.              Experimental                     [Page 34]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-15. Normative References
-
-   [1]  Bradner, S. "Key words for use in RFCs to Indicate Requirement
-        Levels", BCP 14, RFC 2119, March 1997.
-
-   [2]  Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
-        Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.
-
-16. Informative References
-
-   [3]  Manner, J., et al., "Mobility Related Terminology", Work in
-        Progress, July 2001.
-
-   [4]  Karthikeyan Bhargavan, Carl A. Gunter, and Davor Obradovic.
-        Fault Origin Adjudication.  In Proceedings of the Workshop on
-        Formal Methods in Software Practice, Portland, OR, August 2000.
-
-   [5]  IEEE 802.11 Committee, AlphaGraphics #35, 10201 N.35th Avenue,
-        Phoenix AZ 85051.  Wireless LAN Medium Access Control MAC and
-        Physical Layer PHY Specifications, June 1997.  IEEE Standard
-        802.11-97.
-
-   [6]  Perkins, C., Royer, E. and S. Das, "Ad hoc on demand distance
-        vector (AODV) routing for ip version 6", Work in Progress.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 35]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-17. Authors' Addresses
-
-   Charles E. Perkins
-   Communications Systems Laboratory
-   Nokia Research Center
-   313 Fairchild Drive
-   Mountain View, CA 94303
-   USA
-
-   Phone: +1 650 625 2986
-   Fax: +1 650 691 2170 (fax)
-   EMail: Charles.Perkins@nokia.com
-
-
-   Elizabeth M. Belding-Royer
-   Department of Computer Science
-   University of California, Santa Barbara
-   Santa Barbara, CA 93106
-
-   Phone: +1 805 893 3411
-   Fax: +1 805 893 8553
-   EMail: ebelding@cs.ucsb.edu
-
-
-   Samir R. Das
-   Department of Electrical and Computer Engineering
-   & Computer Science
-   University of Cincinnati
-   Cincinnati, OH 45221-0030
-
-   Phone: +1 513 556 2594
-   Fax: +1 513 556 7326
-   EMail: sdas@ececs.uc.edu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 36]
-
-RFC 3561                      AODV Routing                     July 2003
-
-
-18. Full Copyright Statement
-
-   Copyright (C) The Internet Society (2003).  All Rights Reserved.
-
-   This document and translations of it may be copied and furnished to
-   others, and derivative works that comment on or otherwise explain it
-   or assist in its implementation may be prepared, copied, published
-   and distributed, in whole or in part, without restriction of any
-   kind, provided that the above copyright notice and this paragraph are
-   included on all such copies and derivative works.  However, this
-   document itself may not be modified in any way, such as by removing
-   the copyright notice or references to the Internet Society or other
-   Internet organizations, except as needed for the purpose of
-   developing Internet standards in which case the procedures for
-   copyrights defined in the Internet Standards process must be
-   followed, or as required to translate it into languages other than
-   English.
-
-   The limited permissions granted above are perpetual and will not be
-   revoked by the Internet Society or its successors or assigns.
-
-   This document and the information contained herein is provided on an
-   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
-   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Acknowledgement
-
-   Funding for the RFC Editor function is currently provided by the
-   Internet Society.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Perkins, et. al.              Experimental                     [Page 37]
-