[aodvv2-discuss] Handover of editorial pen

  • From: Victoria Mercieca <vmercieca0@xxxxxxxxx>
  • To: "aodvv2-discuss@xxxxxxxxxxxxx" <aodvv2-discuss@xxxxxxxxxxxxx>
  • Date: Fri, 4 Mar 2016 18:07:49 +0000

Hi all,

I've just sent the pandoc stuff to Lotte, and here is the draft in its
current state (which I have called 14c) just for your information. Not a
huge amount of difference between from v13. Also, the changes section lies,
because it doesn't yet address Justin's review, but obviously the final
version 14 will :)

Kind regards,
Vicky.




Mobile Ad hoc Networks Working Group                          C. Perkins
Internet-Draft                                                 Futurewei
Intended status: Standards Track                              S. Ratliff
Expires: September 5, 2016                                       Idirect
                                                              J. Dowdell
                                                Airbus Defence and Space
                                                           L. Steenbrink
                                           HAW Hamburg, Dept. Informatik
                                                             V. Mercieca
                                                Airbus Defence and Space
                                                           March 4, 2016


      Ad Hoc On-demand Distance Vector Version 2 (AODVv2) Routing
                       draft-ietf-manet-aodvv2-14

Abstract

   The Ad Hoc On-demand Distance Vector Version 2 (AODVv2) routing
   protocol is intended for use by mobile routers in wireless, multihop
   networks.  AODVv2 determines unicast routes among AODVv2 routers
   within the network in an on-demand fashion.

Status of This Memo

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

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on September 5, 2016.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of



Perkins, et al.         Expires September 5, 2016               [Page 1]

Internet-Draft                   AODVv2                       March 2016


   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   5
   3.  Applicability Statement . . . . . . . . . . . . . . . . . . .   8
   4.  Data Structures . . . . . . . . . . . . . . . . . . . . . . .  10
     4.1.  Interface List  . . . . . . . . . . . . . . . . . . . . .  10
     4.2.  Router Client Table . . . . . . . . . . . . . . . . . . .  10
     4.3.  Neighbor Table  . . . . . . . . . . . . . . . . . . . . .  11
     4.4.  Sequence Numbers  . . . . . . . . . . . . . . . . . . . .  11
     4.5.  Local Route Set . . . . . . . . . . . . . . . . . . . . .  12
     4.6.  Multicast Route Message Table . . . . . . . . . . . . . .  14
   5.  Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . .  16
   6.  AODVv2 Protocol Operations  . . . . . . . . . . . . . . . . .  18
     6.1.  Initialization  . . . . . . . . . . . . . . . . . . . . .  18
     6.2.  Next Hop Monitoring . . . . . . . . . . . . . . . . . . .  19
     6.3.  Neighbor Table Update . . . . . . . . . . . . . . . . . .  20
     6.4.  Interaction with the Forwarding Plane . . . . . . . . . .  21
     6.5.  Message Transmission  . . . . . . . . . . . . . . . . . .  23
     6.6.  Route Discovery, Retries and Buffering  . . . . . . . . .  24
     6.7.  Processing Received Route Information . . . . . . . . . .  25
       6.7.1.  Evaluating Route Information  . . . . . . . . . . . .  26
       6.7.2.  Applying Route Updates  . . . . . . . . . . . . . . .  28
     6.8.  Suppressing Redundant Messages Using the Multicast Route
           Message Table . . . . . . . . . . . . . . . . . . . . . .  30
     6.9.  Local Route Set Maintenance . . . . . . . . . . . . . . .  32
       6.9.1.  LocalRoute State Changes  . . . . . . . . . . . . . .  32
       6.9.2.  Reporting Invalid Routes  . . . . . . . . . . . . . .  35
   7.  AODVv2 Protocol Messages  . . . . . . . . . . . . . . . . . .  35
     7.1.  Route Request (RREQ) Message  . . . . . . . . . . . . . .  35
       7.1.1.  RREQ Generation . . . . . . . . . . . . . . . . . . .  37
       7.1.2.  RREQ Reception  . . . . . . . . . . . . . . . . . . .  38
       7.1.3.  RREQ Regeneration . . . . . . . . . . . . . . . . . .  39
     7.2.  Route Reply (RREP) Message  . . . . . . . . . . . . . . .  40
       7.2.1.  RREP Generation . . . . . . . . . . . . . . . . . . .  41
       7.2.2.  RREP Reception  . . . . . . . . . . . . . . . . . . .  43
       7.2.3.  RREP Regeneration . . . . . . . . . . . . . . . . . .  44
     7.3.  Route Reply Acknowledgement (RREP_Ack) Message  . . . . .  45
       7.3.1.  RREP_Ack Generation . . . . . . . . . . . . . . . . .  45
       7.3.2.  RREP_Ack Reception  . . . . . . . . . . . . . . . . .  46
     7.4.  Route Error (RERR) Message  . . . . . . . . . . . . . . .  46



Perkins, et al.         Expires September 5, 2016               [Page 2]

Internet-Draft                   AODVv2                       March 2016


       7.4.1.  RERR Generation . . . . . . . . . . . . . . . . . . .  47
       7.4.2.  RERR Reception  . . . . . . . . . . . . . . . . . . .  49
       7.4.3.  RERR Regeneration . . . . . . . . . . . . . . . . . .  50
   8.  RFC 5444 Representation . . . . . . . . . . . . . . . . . . .  51
     8.1.  Route Request Message Representation  . . . . . . . . . .  52
       8.1.1.  Message Header  . . . . . . . . . . . . . . . . . . .  52
       8.1.2.  Message TLV Block . . . . . . . . . . . . . . . . . .  52
       8.1.3.  Address Block . . . . . . . . . . . . . . . . . . . .  52
       8.1.4.  Address Block TLV Block . . . . . . . . . . . . . . .  52
     8.2.  Route Reply Message Representation  . . . . . . . . . . .  53
       8.2.1.  Message Header  . . . . . . . . . . . . . . . . . . .  53
       8.2.2.  Message TLV Block . . . . . . . . . . . . . . . . . .  53
       8.2.3.  Address Block . . . . . . . . . . . . . . . . . . . .  54
       8.2.4.  Address Block TLV Block . . . . . . . . . . . . . . .  54
     8.3.  Route Reply Acknowledgement Message Representation  . . .  55
       8.3.1.  Message Header  . . . . . . . . . . . . . . . . . . .  55
       8.3.2.  Message TLV Block . . . . . . . . . . . . . . . . . .  55
       8.3.3.  Address Block . . . . . . . . . . . . . . . . . . . .  55
       8.3.4.  Address Block TLV Block . . . . . . . . . . . . . . .  56
     8.4.  Route Error Message Representation  . . . . . . . . . . .  56
       8.4.1.  Message Header  . . . . . . . . . . . . . . . . . . .  56
       8.4.2.  Message TLV Block . . . . . . . . . . . . . . . . . .  56
       8.4.3.  Address Block . . . . . . . . . . . . . . . . . . . .  56
       8.4.4.  Address Block TLV Block . . . . . . . . . . . . . . .  57
   9.  Simple External Network Attachment  . . . . . . . . . . . . .  57
   10. Optional Features . . . . . . . . . . . . . . . . . . . . . .  58
     10.1.  Expanding Rings Multicast  . . . . . . . . . . . . . . .  59
     10.2.  Precursor Lists  . . . . . . . . . . . . . . . . . . . .  59
     10.3.  Intermediate RREP  . . . . . . . . . . . . . . . . . . .  60
     10.4.  Message Aggregation Delay  . . . . . . . . . . . . . . .  60
   11. Configuration . . . . . . . . . . . . . . . . . . . . . . . .  60
     11.1.  Timers . . . . . . . . . . . . . . . . . . . . . . . . .  61
     11.2.  Protocol Constants . . . . . . . . . . . . . . . . . . .  62
     11.3.  Local Settings . . . . . . . . . . . . . . . . . . . . .  63
     11.4.  Network-Wide Settings  . . . . . . . . . . . . . . . . .  63
     11.5.  Optional Feature Settings  . . . . . . . . . . . . . . .  63
     11.6.  MetricType Allocation  . . . . . . . . . . . . . . . . .  64
   12. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  64
     12.1.  RFC 5444 Message Types . . . . . . . . . . . . . . . . .  64
     12.2.  RFC 5444 Address Block TLV Types . . . . . . . . . . . .  65
     12.3.  ADDRESS_TYPE TLV Values  . . . . . . . . . . . . . . . .  65
   13. Security Considerations . . . . . . . . . . . . . . . . . . .  66
   14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  68
   15. References  . . . . . . . . . . . . . . . . . . . . . . . . .  69
     15.1.  Normative References . . . . . . . . . . . . . . . . . .  69
     15.2.  Informative References . . . . . . . . . . . . . . . . .  70
   Appendix A.  AODVv2 Draft Updates . . . . . . . . . . . . . . . .  71
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  71



Perkins, et al.         Expires September 5, 2016               [Page 3]

Internet-Draft                   AODVv2                       March 2016


1.  Overview

   The Ad Hoc On-demand Distance Vector Version 2 (AODVv2) routing
   protocol (formerly named DYMO) enables on-demand, multihop unicast
   routing among AODVv2 routers in mobile ad hoc networks (MANETs)
   [RFC2501].

   Although AODVv2 is closely related to AODV [RFC3561], and shares some
   features of DSR [RFC4728], AODVv2 is not interoperable with either of
   those protocols.  Compared to AODV, AODVv2 makes some features
   optional, notably intermediate route replies, expanding ring search,
   and precursor lists.  Hello messages and local repair have been
   removed.  AODVv2 provides a mechanism for the use of multiple metric
   types.  Message formats have been updated and made compliant with
   [RFC5444].

   AODVv2 control messages are defined as sets of data, which are mapped
   to messages using the Generalized MANET Packet/Message Format defined
   in [RFC5444] and sent using the parameters in [RFC5498].

   The basic operations of the AODVv2 protocol are route discovery and
   route maintenance.

   An AODVv2 router is configured to perform route discovery on behalf
   of a configured set of IP addresses known as Router Clients.  Route
   discovery is performed when an AODVv2 router needs to forward an IP
   packet from one of its Router Clients, but does not have a valid
   route to the packet's destination.  AODVv2 routers use Route Request
   (RREQ) and Route Reply (RREP) messages to carry route information
   between the originator of the route discovery and the router
   responsible for the target, establishing a route to both endpoints on
   all intermediate routers.  A metric value is included to represent
   the cost of the route contained within the message.  AODVv2 uses
   sequence numbers to identify stale routing information, and compares
   route metric values to determine if advertised routes could form
   loops.

   Route maintenance includes confirming bidirectionality of links to
   next hop AODVv2 routers before considering discovered routes to be
   valid, issuing Route Error (RERR) messages if link failures
   invalidate routes, reacting to received Route Error messages, and
   extending and enforcing route timeouts.

   To enable the on-demand nature of AODVv2, signals are required to be
   exchanged between AODVv2 and the forwarding plane, to indicate when a
   packet is to be forwarded, in order to initiate route discovery, when
   packet forwarding fails, in order to initiate route error reporting,
   and when a packet is successfully forwarded, for route maintenance.



Perkins, et al.         Expires September 5, 2016               [Page 4]

Internet-Draft                   AODVv2                       March 2016


   Security for authentication of AODVv2 routers and encryption of
   control messages is accomplished using the TIMESTAMP and ICV TLVs
   defined in [RFC7182].

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   [RFC2119].  In addition, this document uses terminology from
   [RFC5444], and defines the following terms:

   AddressList
      A list of IP addresses as used in AODVv2 messages.

   AckReq
      Used in a Route Reply message to indicate the IP address of the
      router from which a Route Reply Acknowledgement is expected.

   AdvRte
      A route advertised in an incoming route message.

   AODVv2 Router
      An IP addressable device in the ad hoc network that performs the
      AODVv2 protocol operations specified in this document.

   CurrentTime
      The current time as maintained by the AODVv2 router.

   ENAR (External Network Access Router)
      An AODVv2 router with an interface to an external, non-AODVv2
      network.

   Invalid route
      A route that cannot be used for forwarding but still contains
      useful sequence number information.

   LocalRoute
      An entry in the Local Route Set.

   MANET
      A Mobile Ad Hoc Network as defined in [RFC2501].

   MetricType
      The metric type for a metric value included in a message.

   MetricTypeList




Perkins, et al.         Expires September 5, 2016               [Page 5]

Internet-Draft                   AODVv2                       March 2016


      A list of metric types associated with the addresses in the
      AddressList of a Route Error message.

   Neighbor
      An AODVv2 router from which an RREQ or RREP message has been
      received.  Neighbors exchange routing information and verify
      bidirectionality of the link to a neighbor before installing a
      route via that neighbor into the Local Route Set.

   OrigAddr
      The source IP address of the IP packet triggering route discovery.

   OrigMetric
      The metric value associated with the route to OrigAddr (and any
      other addresses included in the given prefix length).

   OrigPrefixLen
      The prefix length, in bits, configured in the Router Client entry
      which includes OrigAddr.

   OrigSeqNum
      The sequence number of the AODVv2 router which originated the
      Route Request on behalf of OrigAddr.

   PktSource
      The source address of the IP packet which triggered a Route Error
      message.

   PrefixLengthList
      A list of routing prefix lengths associated with the addresses in
      the AddressList of a message.

   Reactive
      Performed only in reaction to specific events.  In AODVv2, routes
      are requested only when data packets need to be forwarded.  In
      this document, "reactive" is synonymous with "on-demand".

   RERR (Route Error)
      The AODVv2 message type used to indicate that an AODVv2 router
      does not have a valid LocalRoute toward one or more particular
      destinations.

   RERR_Gen (RERR Generating Router)
      The AODVv2 router generating a Route Error message.

   Routable Unicast IP Address
      A routable unicast IP address is a unicast IP address that is
      scoped sufficiently to be forwarded by a router.  Globally-scoped



Perkins, et al.         Expires September 5, 2016               [Page 6]

Internet-Draft                   AODVv2                       March 2016


      unicast IP addresses and Unique Local Addresses (ULAs) [RFC4193]
      are examples of routable unicast IP addresses.

   Router Client
      An address or address range configured on an AODVv2 router, on
      behalf of which that router will initiate and respond to route
      discoveries, so that devices configured to use these addresses can
      send and receive IP traffic to and from remote destinations.
      These addresses may be used by the AODVv2 router itself or by non-
      routing devices that are reachable without traversing another
      AODVv2 router.

   RREP (Route Reply)
      The AODVv2 message type used to reply to a Route Request message.

   RREP_Gen (RREP Generating Router)
      The AODVv2 router that generates the Route Reply message, i.e.,
      the router configured with TargAddr as a Router Client.

   RREQ (Route Request)
      The AODVv2 message type used to discover a route to TargAddr and
      distribute information about a route to OrigAddr.

   RREQ_Gen (RREQ Generating Router)
      The AODVv2 router that generates the Route Request message, i.e.,
      the router configured with OrigAddr as a Router Client.

   RteMsg (Route Message)
      A Route Request (RREQ) or Route Reply (RREP) message.

   SeqNum
      The sequence number maintained by an AODVv2 router to indicate
      freshness of route information.

   SeqNumList
      A list of sequence numbers associated with the addresses in the
      AddressList of a message.

   TargAddr
      The target address of a route request, i.e., the destination
      address of the IP packet triggering route discovery.

   TargMetric
      The metric value associated with the route to TargAddr (and any
      other addresses included in the given prefix length).

   TargPrefixLen




Perkins, et al.         Expires September 5, 2016               [Page 7]

Internet-Draft                   AODVv2                       March 2016


      The prefix length, in bits, configured in the Router Client entry
      which includes TargAddr.

   TargSeqNum
      The sequence number of the AODVv2 router which originated the
      Route Reply on behalf of TargAddr.

   Valid route
      A route that can be used for forwarding, which has been confirmed
      as having a bidirectional link to the next hop, and has not timed
      out or been made invalid by a route error.

   Unreachable Address
      An address reported in a Route Error message, either the address
      on a LocalRoute which became Invalid, or the destination address
      of an IP packet that could not be forwarded because a valid
      LocalRoute to the destination is not known, and will not be
      requested.

   Upstream
      In the direction from destination to source (from TargAddr to
      OrigAddr).

   ValidityTime
      The length of time the route described by the message is offered.

   This document uses the notational conventions in Table 1 to simplify
   the text.

      +-----------------------+------------------------------------+
      | Notation              | Meaning                            |
      +-----------------------+------------------------------------+
      | Route[Address]        | A route toward Address             |
      | Route[Address].Field  | A field in a route toward Address  |
      | RteMsg.Field          | A field in either RREQ or RREP     |
      +-----------------------+------------------------------------+

                      Table 1: Notational Conventions

3.  Applicability Statement

   The AODVv2 routing protocol is a reactive routing protocol.  While
   proactive routing protocols send frequent messages and determine
   routes in advance of them being used, a reactive protocol only sends
   messages to discover a route when there is data to send on that
   route.  Therefore, a reactive routing protocol requires certain
   interactions with the forwarding plane, for example, to indicate when
   a packet is to be forwarded, in order to initiate route discovery,



Perkins, et al.         Expires September 5, 2016               [Page 8]

Internet-Draft                   AODVv2                       March 2016


   route error reporting, or route maintenance.  The set of signals
   exchanged between AODVv2 and the forwarding plane are discussed in
   Section 6.4.

   AODVv2 is designed for stub or disconnected mobile ad hoc networks,
   i.e., non-transit networks or those not connected to the internet.
   AODVv2 can, however, be configured to perform gateway functions when
   attached to external networks, as discussed in Section 9.

   AODVv2 handles a wide variety of mobility and traffic patterns by
   determining routes on-demand.  In networks with a large number of
   routers, AODVv2 is best suited for relatively sparse traffic
   scenarios where each router forwards IP packets to a small percentage
   of other AODVv2 routers in the network.  In this case fewer routes
   are needed, and therefore less control traffic is produced.

   Providing security for a reactive routing protocol can be difficult.
   AODVv2 provides for message integrity and security against replay
   attacks by using integrity check values, timestamps and sequence
   numbers, as described in Section 13.  If security associations can be
   established, encryption can be used for AODVv2 messages to ensure
   that only trusted routers participate in routing operations.

   Since the route discovery process aims for a route to be established
   in both directions along the same path, uni-directional links are not
   suitable.  AODVv2 will detect and exclude those links from route
   discovery.  The route discovered is optimised for the requesting
   router, and the return path may not be the optimal route.

   AODVv2 is applicable to memory constrained devices, since only a
   little routing state is maintained in each AODVv2 router.  In
   contrast to proactive routing protocols, which maintain routing
   information for all destinations within the MANET, AODVv2 routes that
   are not needed for forwarding data do not need to be maintained.  On
   routers unable to store persistent AODVv2 state, recovery can impose
   a performance penalty (e.g., in case of AODVv2 router reboot), since
   if a router loses its sequence number, there is a delay before the
   router can resume full operations.  This is described in Section 6.1.

   AODVv2 supports routers with multiple interfaces and multiple IP
   addresses per interface.  A router may also use the same IP address
   on multiple interfaces.  AODVv2 requires only that each interface
   configured for AODVv2 has at least one unicast IP address.  Address
   assignment procedures are out of scope for AODVv2.

   AODVv2 supports Router Clients with multiple interfaces, as long as
   each interface is configured with its own unicast IP address.  Multi-
   homing of a Router Client IP address is not supported by AODVv2, and



Perkins, et al.         Expires September 5, 2016               [Page 9]

Internet-Draft                   AODVv2                       March 2016


   therefore an IP address SHOULD NOT be configured as a Router Client
   on more than one AODVv2 router at any one time.

   The routing algorithm in AODVv2 MAY be operated at layers other than
   the network layer, using layer-appropriate addresses.

4.  Data Structures

4.1.  Interface List

   If multiple interfaces of the AODVv2 router are configured for use by
   AODVv2, a list of the interfaces MUST be configured in the
   AODVv2_INTERFACES list.

4.2.  Router Client Table

   An AODVv2 router provides route discovery services for its own local
   applications and for other non-routing devices that are reachable
   without traversing another AODVv2 router.  The addresses used by
   these devices, and the AODVv2 router itself, are configured in the
   Router Client Table.  An AODVv2 router will only originate Route
   Request and Route Reply messages on behalf of configured Router
   Client addresses.

   Router Client Table entries MUST contain:

   RouterClient.IPAddress
      An IP address or the start of an address range that requires route
      discovery services from the AODVv2 router.

   RouterClient.PrefixLength
      The length, in bits, of the routing prefix associated with the
      RouterClient.IPAddress.  If a prefix length is included, the
      AODVv2 router MUST provide connectivity for all addresses within
      that prefix.

   RouterClient.Cost
      The cost associated with reaching this address or address range.

   The Router Client Table for an AODVv2 router is never empty, since an
   AODVv2 router's interface addresses are always configured in Router
   Client entries.

   In the initial state, an AODVv2 router is not required to have
   information about the Router Clients of any other AODVv2 router.

   A Router Client address MUST NOT be served by more than one AODVv2
   router at any one time.  To shift responsibility for a Router Client



Perkins, et al.         Expires September 5, 2016              [Page 10]

Internet-Draft                   AODVv2                       March 2016


   to a different AODVv2 router, correct AODVv2 routing behavior MUST be
   observed.  The AODVv2 router adding the Router Client MUST wait for
   any existing routing information about this Router Client to be
   purged from the network, i.e., at least MAX_SEQNUM_LIFETIME since the
   last SeqNum update on the router which is removing this Router
   Client.

4.3.  Neighbor Table

   A Neighbor Table MUST be maintained with information about
   neighboring AODVv2 routers.  Neighbor Table entries are stored when
   AODVv2 messages are received.  If the Neighbor is chosen as a next
   hop on an installed route, the link to the Neighbor MUST be tested
   for bidirectionality and the result stored in this table.  A route
   will only be considered valid when the link is confirmed to be
   bidirectional.

   Neighbor Table entries MUST contain:

   Neighbor.IPAddress
      An IP address of the neighboring router, learned from the source
      IP address of a received route message.

   Neighbor.State
      Indicates whether the link to the neighbor is bidirectional.
      There are three possible states: Confirmed, Unknown, and
      Blacklisted.  Unknown is the initial state.  Confirmed indicates
      that the link to the neighbor has been confirmed as bidirectional.
      Blacklisted indicates that the link to the neighbor is uni-
      directional.  Section 6.2 discusses how to monitor link
      bidirectionality.

   Neighbor.ResetTime
      When the value of Neighbor.State is Blacklisted, this indicates
      the time at which the value of Neighbor.State will revert to
      Unknown.  By default this value is calculated at the time the
      router is blacklisted and is equal to CurrentTime +
      MAX_BLACKLIST_TIME.  When the value of Neighbor.State is not
      Blacklisted, this time is set to INFINITY_TIME.

4.4.  Sequence Numbers

   Sequence numbers enable AODVv2 routers to determine the temporal
   order of route discovery messages, identifying stale routing
   information so that it can be discarded.  The sequence number
   fulfills the same roles as the "Destination Sequence Number" of DSDV
   [Perkins94], and the AODV Sequence Number in [RFC3561].




Perkins, et al.         Expires September 5, 2016              [Page 11]

Internet-Draft                   AODVv2                       March 2016


   Each AODVv2 router in the network MUST maintain its own sequence
   number.  All RREQ and RREP messages created by an AODVv2 router
   include the router's sequence number, reported as a 16-bit unsigned
   integer.  Each AODVv2 router MUST ensure that its sequence number is
   strictly increasing, and that it is incremented by one (1) whenever
   an RREQ or RREP is created, except when the sequence number is 65,535
   (the maximum value of a 16-bit unsigned integer), in which case it
   MUST be reset to one (1).  The value zero (0) is reserved to indicate
   that the sequence number is unknown.

   An AODVv2 router MUST only attach its own sequence number to
   information about a route to one of its configured Router Clients.
   All route messages regenerated by other routers retain the
   originator's sequence number.  Therefore, when two pieces of
   information about a route are received, they both contain a sequence
   number from the originating router.  Comparing the sequence number
   will identify which information is stale.  The previously stored
   sequence number is subtracted from the incoming sequence number.  The
   result of the subtraction is to be interpreted as a signed 16-bit
   integer, and if less than zero, the information in the new AODVv2
   message is stale and MUST be discarded.

   This, along with the processes in Section 6.7.1, ensures loop
   freedom.

   An AODVv2 router SHOULD maintain its sequence number in persistent
   storage.  If the sequence number is lost, the router MUST follow the
   procedure in Section 6.1 to safely resume routing operations with a
   new sequence number.

4.5.  Local Route Set

   All AODVv2 routers MUST maintain a Local Route Set, containing
   information about routes learned from AODVv2 route messages.  The
   Local Route Set is stored separately from the Routing Information
   Base, and the Routing Information Base is updated using information
   from the Local Route Set. Alternatively, implementations MAY choose
   to modify the Routing Information Base directly.

   Routes learned from AODVv2 route messages are referred to in this
   document as LocalRoutes, and MUST contain the following information:

   LocalRoute.Address
      An address, which, when combined with LocalRoute.PrefixLength,
      describes the set of destination addresses this route includes.

   LocalRoute.PrefixLength
      The prefix length, in bits, associated with LocalRoute.Address.



Perkins, et al.         Expires September 5, 2016              [Page 12]

Internet-Draft                   AODVv2                       March 2016


   LocalRoute.SeqNum
      The sequence number associated with LocalRoute.Address, obtained
      from the last route message that successfully updated this entry.

   LocalRoute.NextHop
      The source IP address of the IP packet containing the AODVv2
      message advertising the route to LocalRoute.Address, i.e. an IP
      address of the AODVv2 router used for the next hop on the path
      toward LocalRoute.Address.

   LocalRoute.NextHopInterface
      The interface used to send IP packets toward LocalRoute.Address.

   LocalRoute.LastUsed
      If this route is installed in the Routing Information Base, the
      time it was last used to forward an IP packet.

   LocalRoute.LastSeqNumUpdate
      The time LocalRoute.SeqNum was last updated.

   LocalRoute.ExpirationTime
      The time at which this LocalRoute MUST be marked as Invalid.  An
      AODVv2 router MAY be offered a route for a limited time.  In this
      case, the route is referred to as a timed route.  If a route is
      not timed, LocalRoute.ExpirationTime is INFINITY_TIME.

   LocalRoute.MetricType
      The type of metric associated with this route.

   LocalRoute.Metric
      The cost of the route toward LocalRoute.Address expressed in units
      consistent with LocalRoute.MetricType.

   LocalRoute.State
      The last known state (Unconfirmed, Idle, Active, or Invalid) of
      the route.

   LocalRoute.Precursors (optional feature)
      A list of upstream neighbors using the route (see Section 10.2).

   There are four possible states for a LocalRoute:

   Unconfirmed
      A route learned from a Route Request message, which has not yet
      been confirmed as bidirectional.  It MUST NOT be used for
      forwarding IP packets, and therefore it is not referred to as a
      valid route.




Perkins, et al.         Expires September 5, 2016              [Page 13]

Internet-Draft                   AODVv2                       March 2016


   Idle
      A route which has been learned from a route message, and has also
      been confirmed, but has not been used in the last ACTIVE_INTERVAL.
      It is able to be used for forwarding IP packets, and therefore it
      is referred to as a valid route.

   Active
      A route which has been learned from a route message, and has also
      been confirmed, and has been used in the last ACTIVE_INTERVAL.  It
      is able to be used for forwarding IP packets, and therefore it is
      referred to as a valid route.

   Invalid
      A route which has expired or been lost.  It MUST NOT be used for
      forwarding IP packets, and therefore it is not referred to as a
      valid route.  Invalid routes contain sequence number information
      which allows incoming information to be assessed for freshness.

   When the Local Route Set is stored separately from the Routing
   Information Base, routes are added to the Routing Information Base
   when LocalRoute.State is valid (set to Active or Idle), and removed
   from the Routing Information Base LocalRoute.State becomes Invalid.

   Changes to LocalRoute state are detailed in Section 6.9.1.

   Note that multiple entries for the same address, prefix length and
   metric type may exist in the Local Route Set, but only one will be a
   valid entry.  Any others will be Unconfirmed, but may offer
   improvement to the existing valid route, if they can be confirmed as
   valid routes (see Section 6.2).

   Multiple valid routes for the same address and prefix length but for
   different metric types may exist in the Local Route Set, but the
   decision of which of these routes to install in the Routing
   Information Base to use for forwarding is outside the scope of
   AODVv2.

4.6.  Multicast Route Message Table

   A route message (RteMsg) is either a Route Request or Route Reply
   message.  RREQ messages are multicast by default and regenerated
   multiple times, and RREP messages may be multicast when the link to
   the next router is not known to be bidirectional.  Multiple similar
   route messages might be received by any one router during one route
   discovery attempt.  The AODVv2 router does not need to regenerate or
   respond to every one of these messages.





Perkins, et al.         Expires September 5, 2016              [Page 14]

Internet-Draft                   AODVv2                       March 2016


   The Multicast Route Message Table is a conceptual table which
   contains information about previously received multicast route
   messages, so that incoming route messages can be compared with
   previously received messages to determine if the incoming information
   is redundant, and the router can avoid sending redundant control
   traffic.

   Multicast Route Message Table entries MUST contain the following
   information:

   RteMsg.MessageType
      Either RREQ or RREP.

   RteMsg.OrigAddr
      The source address of the IP packet triggering the route request.

   RteMsg.OrigPrefixLen
      The prefix length associated with RteMsg.OrigAddr, originally from
      the Router Client entry on RREQ_Gen which includes
      RteMsg.OrigAddr.

   RteMsg.TargAddr
      The destination address of the IP packet triggering the route
      request.

   RteMsg.TargPrefixLen
      The prefix length associated with RteMsg.TargAddr, originally from
      the Router Client entry on RREP_Gen which includes
      RteMsg.TargAddr.

   RteMsg.OrigSeqNum
      The sequence number associated with the route to OrigAddr, if
      RteMsg is an RREQ.

   RteMsg.TargSeqNum
      The sequence number associated with the route to TargAddr, if
      present in the RteMsg.

   RteMsg.MetricType
      The metric type of the route requested.

   RteMsg.Metric
      The metric value received in the RteMsg.

   RteMsg.Timestamp
      The last time this Multicast Route Message Table entry was
      updated.




Perkins, et al.         Expires September 5, 2016              [Page 15]

Internet-Draft                   AODVv2                       March 2016


   RteMsg.RemoveTime
      The time at which this entry MUST be removed from the Multicast
      Route Message Table.  This is set to CurrentTime +
      MAX_SEQNUM_LIFETIME, whenever the sequence number of this entry
      (RteMsg.OrigSeqNum for an RREQ, or RteMsg.TargSeqNum for an RREP)
      is updated.

   The Multicast Route Message Table is maintained so that no two
   entries have the same MessageType, OrigAddr, TargAddr, and
   MetricType.  See Section 6.8 for details about updating this table.

5.  Metrics

   Metrics measure a cost or quality associated with a route or a link,
   e.g., latency, delay, financial cost, energy, etc.  Metric values are
   reported in Route Request and Route Reply messages.

   In Route Request messages, the metric describes the cost of the route
   from OrigAddr (and any other addresses included in the prefix length
   of RREQ_Gen's Router Client entry for OrigAddr) to the router sending
   the Route Request.  For RREQ_Gen, this is the cost associated with
   the Router Client entry which includes OrigAddr.  For routers which
   regenerate the RREQ, this is the cost from OrigAddr to the
   regenerating router, combining the metric value from the received
   RREQ message with knowledge of the link cost from the sender to the
   receiver, i.e., the incoming link cost.  This updated route cost is
   included when regenerating the Route Request message, and used to
   install a route back toward OrigAddr.

   Similarly, in Route Reply messages, the metric reflects the cost of
   the route from TargAddr (and any other addresses included in the
   prefix length of RREP_Gen's Router Client entry for TargAddr) to the
   router sending the Route Reply.  For RREP_Gen, this is the cost
   associated with the Router Client entry which includes TargAddr.  For
   routers which regenerate the RREP, this is the cost from TargAddr to
   the regenerating router, combining the metric value from the received
   RREP message with knowledge of the link cost from the sender to the
   receiver, i.e., the incoming link cost.  This updated route cost is
   included when regenerating the Route Reply message, and used to
   install a route back toward TargAddr.

   Assuming link metrics are symmetric, the cost of the routes installed
   in the Local Route Set at each router will be correct.  The route
   discovered is optimised for the requesting router, and the return
   path may not be the optimal route.

   AODVv2 enables the use of multiple metric types.  Each route
   discovery attempt indicates the metric type which is requested for



Perkins, et al.         Expires September 5, 2016              [Page 16]

Internet-Draft                   AODVv2                       March 2016


   the route.  Only one metric type MUST be used in each route discovery
   attempt.  However, routes to a single destination might be requested
   and created in the Local Route Set for multiple metric types.  The
   decision of which of these routes to install in the Routing
   Information Base to use for forwarding is outside the scope of
   AODVv2.

   For each MetricType, AODVv2 requires:

   o  A MetricType number, to indicate the metric type of a route.
      MetricType numbers allocated are detailed in Section 11.6.

   o  A maximum value, denoted MAX_METRIC[MetricType].  This MUST always
      be the maximum expressible metric value of type MetricType.  Field
      lengths associated with metric values are found in Section 11.6.
      If the cost of a route exceeds MAX_METRIC[MetricType], the route
      is ignored.

   o  A function for incoming link cost, denoted Cost(L).  Using
      incoming link costs means that the route learned has a path
      optimized for the direction from OrigAddr to TargAddr.

   o  A function for route cost, denoted Cost(R).

   o  A function to analyze routes for potential loops based on metric
      information, denoted LoopFree(R1, R2).  LoopFree verifies that a
      route R2 is not a sub-section of another route R1.  An AODVv2
      router invokes LoopFree() as part of the process in Section 6.7.1,
      when an advertised route (R1) and an existing LocalRoute (R2) have
      the same destination address, metric type, and sequence number.
      LoopFree returns FALSE to indicate that an advertised route is not
      to be used to update a stored LocalRoute, as it may cause a
      routing loop.  In the case where the existing LocalRoute is
      Invalid, it is possible that the advertised route includes the
      existing LocalRoute and came from a router which did not yet
      receive notification of the route becoming Invalid, so the
      advertised route should not be used to update the Local Route Set,
      in case it forms a loop to a broken route.

   AODVv2 currently supports cost metrics where Cost(R) is strictly
   increasing, by defining:

   o  Cost(R) := Sum of Cost(L) of each link in the route

   o  LoopFree(R1, R2) := ( Cost(R1) <= Cost(R2) )






Perkins, et al.         Expires September 5, 2016              [Page 17]

Internet-Draft                   AODVv2                       March 2016


   Implementers MAY consider other metric types, but the definitions of
   Cost and LoopFree functions for such types are undefined, and
   interoperability issues need to be considered.

6.  AODVv2 Protocol Operations

   The AODVv2 protocol's operations include managing sequence numbers,
   monitoring next hop AODVv2 routers on discovered routes and updating
   the Neighbor Table, performing route discovery and dealing with
   requests from other routers, processing incoming route information
   and updating the Local Route Set, updating the Multicast Route
   Message Table and suppressing redundant messages, and reporting
   broken routes.  These processes are discussed in detail in the
   following sections.

6.1.  Initialization

   During initialization where an AODVv2 router does not have
   information about its previous sequence number, or if its sequence
   number is lost at any point, the router resets its sequence number to
   one (1).  However, other AODVv2 routers may still hold sequence
   number information that this router previously issued.  Since
   sequence number information is removed if there has been no update to
   the sequence number in MAX_SEQNUM_LIFETIME, the initializing router
   MUST wait for MAX_SEQNUM_LIFETIME before it creates any messages
   containing its new sequence number.  It can then be sure that the
   information it sends will not be considered stale.

   Until MAX_SEQNUM_LIFETIME after its sequence number is reset, the
   router SHOULD NOT create RREQ or RREP messages.

   During this wait period, the router is permitted to do the following:

   o  Process information in a received RREQ or RREP message to learn a
      route to the originator or target of that route discovery

   o  Regenerate a received RREQ or RREP

   o  Send an RREP_Ack

   o  Maintain valid routes in the Local Route Set

   o  Create, process and regenerate RERR messages








Perkins, et al.         Expires September 5, 2016              [Page 18]

Internet-Draft                   AODVv2                       March 2016


6.2.  Next Hop Monitoring

   AODVv2 routers MUST NOT establish routes over uni-directional links.
   Consider the following.  An RREQ is forwarded toward TargAddr, and
   intermediate routers create a LocalRoute corresponding to OrigAddr.
   An RREP arrives to be forwarded toward OrigAddr, but the link to the
   next hop toward OrigAddr is uni-directional.  The RREP sent toward
   OrigAddr using this link would not reach the next hop, and would
   therefore never reach RREQ_Gen.  End-to-end route establishment will
   fail.  If the route discovery is retried by RREQ_Gen, the same will
   happen.  Further, if an intermediate router used the route toward
   OrigAddr to forward data traffic, the data packets would be lost.

   AODVv2 provides a mechanism for testing bidirectional connectivity
   during route discovery, and blacklisting routers where bidirectional
   connectivity is not available.  If a route discovery is retried by
   RREQ_Gen, the blacklisted routers can be excluded from the process,
   and a different route can be discovered.  Further, a route is not to
   be used for forwarding until the bidirectionality of the link to the
   next hop is confirmed.  AODVv2 routers do not need to monitor
   bidirectionality for links to neighboring routers which are not used
   as next hops on routes in the Local Route Set.

   o  For the next hop router on the route toward OrigAddr, the approach
      for testing bidirectional connectivity is to request
      acknowledgement of Route Reply messages.  Receipt of an
      acknowledgement proves that bidirectional connectivity exists.
      All AODVv2 routers MUST support this process, which is explained
      in Section 7.2 and Section 7.3.  A link to a neighbor is
      determined to be unidirectional if a requested acknowledgement is
      not received within RREP_Ack_SENT_TIMEOUT, or bidirectional if the
      acknowledgement is received within the timeout.

   o  For the next hop router on the route toward TargAddr, receipt of
      the Route Reply message containing the route to TargAddr is
      confirmation of bidirectionality, since a Route Reply message is a
      reply to a Route Request message which previously crossed the link
      in the opposite direction.

   To assist with next hop monitoring, a Neighbor Table (Section 4.3) is
   maintained.  When an RREQ or RREP is received from an IP address
   which does not already have an entry in the Neighbor Table, a new
   entry is created as described in Section 6.3.  While the value of
   Neighbor.State is Unknown, acknowledgement of RREP messages sent to
   that neighbor MUST be requested.  If an acknowledgement is not
   received within the timeout period, the neighbor MUST have
   Neighbor.State set to Blacklisted.  If an acknowledgement is received
   within the timeout period, Neighbor.State is set to Confirmed.  While



Perkins, et al.         Expires September 5, 2016              [Page 19]

Internet-Draft                   AODVv2                       March 2016


   the value of Neighbor.State is Confirmed, the request for an
   acknowledgement of any other RREP message is unnecessary.

   When routers perform other operations such as those from the list
   below, these MAY be used as additional indications of connectivity:

   o  NHDP HELLO Messages [RFC6130]

   o  Route timeout

   o  Lower layer triggers, e.g. message reception or link status
      notifications

   o  TCP timeouts

   o  Promiscuous listening

   o  Other monitoring mechanisms or heuristics

   If such an external process signals that the link to a neighbor is
   bidirectional, the AODVv2 router MAY update the matching Neighbor
   Table entry by changing the value of Neighbor.State to Confirmed.  If
   an external process signals that a link is not bidirectional, the
   value of Neighbor.State MAY be changed to Blacklisted.  If an
   external process signals that the link might not be bidirectional,
   and the value of Neighbor.State is currently Confirmed, it MAY be set
   to Unknown.

   For example, receipt of a Neighborhood Discovery Protocol HELLO
   message with the receiving router listed as a neighbor is a signal of
   bidirectional connectivity.  The AODVv2 router MAY update the
   matching Neighbor Table entry by changing the value of Neighbor.State
   to Confirmed.

   Similarly, if AODVv2 receives notification of a timeout, for example,
   from TCP or some other protocol, this may be due to a disconnection.
   The AODVv2 router MAY update the matching Neighbor Table entry by
   setting the value of Neighbor.State to Unknown.

6.3.  Neighbor Table Update

   On receipt of an RREQ or RREP message, the Neighbor Table MUST be
   checked for an entry with Neighbor.IPAddress which matches the source
   IP address of the message.  If no matching entry is found, a new
   entry is created.

   A new Neighbor Table entry is created as follows:




Perkins, et al.         Expires September 5, 2016              [Page 20]

Internet-Draft                   AODVv2                       March 2016


   o  Neighbor.IPAddress := Source IP address of the received route
      message

   o  Neighbor.State := Unknown

   o  Neighbor.ResetTime := INFINITY_TIME

   If the message is an RREP which answers a recently sent RREQ, or an
   RREP_Ack which answers a recently sent RREP, the link to the neighbor
   is bidirectional and the Neighbor Table entry is updated as follows:

   o  Neighbor.State := Confirmed

   o  Neighbor.ResetTime := INFINITY_TIME

   If an RREP_Ack is not received within the expected time, the link is
   considered to be uni-directional and the Neighbor Table entry is
   updated as follows:

   o  Neighbor.State := Blacklisted

   o  Neighbor.ResetTime := CurrentTime + MAX_BLACKLIST_TIME

   When the Neighbor.ResetTime is reached, the Neighbor Table entry is
   updated as follows:

   o  Neighbor.State := Unknown

   When a link to a neighbor is determined to be broken, the Neighbor
   Table entry SHOULD be removed.

   Route requests from neighbors with Neighbor.State set to Blacklisted
   are ignored to avoid persistent IP packet loss or protocol failures.
   However, Neighbor.ResetTime allows the neighbor to again be allowed
   to participate in route discoveries after MAX_BLACKLIST_TIME, in case
   the link between the routers has become bidirectional.

6.4.  Interaction with the Forwarding Plane

   A reactive routing protocol only reacts when a route is needed, i.e.,
   when an application tries to send a packet and the forwarding plane
   has no route to the destination of the packet.

   AODVv2 requires signals from the forwarding plane:

   o  A packet cannot be forwarded because a route is unavailable:
      AODVv2 needs to know the source and destination IP addresses of
      the packet, to determine if the source of the packet is configured



Perkins, et al.         Expires September 5, 2016              [Page 21]

Internet-Draft                   AODVv2                       March 2016


      as a Router Client, in which case the router should initiate route
      discovery.  If it is not a Router Client, the router should create
      a Route Error message.

   o  A packet is to be forwarded: AODVv2 needs to check the state of
      the route to deal with timeouts to ensure the route is still
      valid.

   o  Packet forwarding succeeds: AODVv2 needs to update the record of
      when a route was last used to forward a packet.

   o  Packet forwarding failure occurs: AODVv2 needs to create a Route
      Error message.

   AODVv2 needs to send signals to the forwarding plane:

   o  A route discovery is in progress: buffering might be configured
      for packets requiring a route, while route discovery is attempted.

   o  A route discovery failed: any buffered packets requiring that
      route should be discarded, and the source of the packet should be
      notified that the destination is unreachable (using an ICMP
      Destination Unreachable message).  Route discovery fails if an
      RREQ cannot be generated because the control message generation
      limit has been reached, or if an RREP is not received within the
      expected time.

   o  A route discovery is not permitted: any buffered packets requiring
      that route should be discarded.  A route discovery will not be
      attempted if the source address of the packet needing a route is
      not configured as a Router Client.

   o  A route discovery succeeded: install a corresponding route into
      the Routing Information Base and begin transmitting any buffered
      packets.

   o  A route has been made invalid: remove the corresponding route from
      the Routing Information Base.

   o  A route has been updated: update the corresponding route in the
      Routing Information Base.

   These are conceptual signals, and can be implemented in various ways.
   Conformant implementations of AODVv2 are not mandated to implement
   the forwarding plane separately from the control plane or data plane;
   these signals and interactions are identified simply as assistance
   for implementers who may find them useful.




Perkins, et al.         Expires September 5, 2016              [Page 22]

Internet-Draft                   AODVv2                       March 2016


6.5.  Message Transmission

   AODVv2 sends [RFC5444] formatted messages using the parameters for
   port number and IP protocol specified in [RFC5498].  Mapping of
   AODVv2 data to [RFC5444] messages is detailed in Section 8.  AODVv2
   multicast messages are sent to the link-local multicast address LL-
   MANET-Routers [RFC5498].  All AODVv2 routers MUST subscribe to LL-
   MANET-Routers on all AODVv2 interfaces [RFC5498] to receive AODVv2
   messages.  Note that multicast messages MAY be sent via unicast.  For
   example, this may occur for certain link-types (non-broadcast media),
   for manually configured router adjacencies, or in order to improve
   robustness.

   When multiple interfaces are available, an AODVv2 router transmitting
   a multicast message to LL-MANET-Routers MUST send the message on all
   interfaces that have been configured for AODVv2 operation, as given
   in the AODVv2_INTERFACES list (Section 4.1).

   To avoid congestion, each AODVv2 router's rate of message generation
   SHOULD be limited (CONTROL_TRAFFIC_LIMIT) and administratively
   configurable.  To prioritize transmission of AODVv2 control messages
   in order to respect the CONTROL_TRAFFIC_LIMIT:

   o  Highest priority SHOULD be given to RREP_Ack messages.  This
      allows links between routers to be confirmed as bidirectional and
      avoids undesirable blacklisting of next hop routers.

   o  Second priority SHOULD be given to RERR messages for undeliverable
      IP packets, so that broken routes that are still in use by other
      AODVv2 routers can be reported to those routers, to avoid IP data
      packets being repeatedly forwarded to AODVv2 routers which cannot
      forward them to their destination.

   o  Third priority SHOULD be given to RREP messages in order that
      RREQs do not time out.

   o  RREQ messages SHOULD be given priority over RERR messages for
      newly invalidated routes, since the invalidated routes may not
      still be in use, and if there is an attempt to use the route, a
      new RERR message will be generated.

   o  Lowest priority SHOULD be given to RERR messages generated in
      response to RREP messages which cannot be regenerated.  In this
      case the route request will be retried at a later point.







Perkins, et al.         Expires September 5, 2016              [Page 23]

Internet-Draft                   AODVv2                       March 2016


6.6.  Route Discovery, Retries and Buffering

   AODVv2's RREQ and RREP messages are used for route discovery.  RREQ
   messages are multicast to solicit an RREP, whereas RREP is unicast
   where possible.  The constants used in this section are defined in
   Section 11.

   When an AODVv2 router needs to forward an IP packet (with source
   address OrigAddr and destination address TargAddr) from one of its
   Router Clients, it needs a route to TargAddr in its Routing
   Information Base.  If no route exists, the AODVv2 router generates
   and multicasts a Route Request message (RREQ) containing OrigAddr and
   TargAddr.  The procedure for this is described in Section 7.1.1.
   Each generated RREQ results in an increment to the router's sequence
   number.  The AODVv2 router generating an RREQ is referred to as
   RREQ_Gen.

   Buffering might be configured for IP packets awaiting a route for
   forwarding by RREQ_Gen, if sufficient memory is available.  Buffering
   of IP packets might have both positive and negative effects.  Real-
   time traffic, voice, and scheduled delivery may suffer if packets are
   buffered and subjected to delays, but TCP connection establishment
   will benefit if packets are queued while route discovery is performed
   [Koodli01].  If packets are not queued, no notification should be
   sent to the source.  Determining which packets to discard first when
   the buffer is full is a matter of policy at each AODVv2 router.

   RREQ_Gen awaits reception of a Route Reply message (RREP) containing
   a route toward TargAddr.  If a valid route to TargAddr is not learned
   within RREQ_WAIT_TIME, RREQ_Gen will retry the route discovery.  To
   reduce congestion in a network, repeated attempts at route discovery
   for a particular target address utilize a binary exponential backoff:
   for each additional attempt, the time to wait for receipt of the RREP
   is multiplied by 2.  If the requested route is not learned within the
   wait period, another RREQ is sent, up to a total of
   DISCOVERY_ATTEMPTS_MAX.  This is the same technique used in AODV
   [RFC3561].

   The RREQ is received by neighboring AODVv2 routers, and processed and
   regenerated as described in Section 7.1.  Routers learn a potential
   route to OrigAddr (and other addresses as indicated by OrigPrefixLen)
   from the RREQ and store it in the Local Route Set. The router
   responsible for TargAddr responds by generating a Route Reply message
   (RREP) and sends it back toward RREQ_Gen via the next hop on the
   potential route to OrigAddr.  Each intermediate router learns the
   route to TargAddr (and other addresses as indicated by
   TargPrefixLen), regenerates the RREP and sends toward OrigAddr.




Perkins, et al.         Expires September 5, 2016              [Page 24]

Internet-Draft                   AODVv2                       March 2016


   Links which are not bidirectional cause problems.  If a link is
   unavailable in the direction toward OrigAddr, an RREP is not received
   at the next hop, so cannot be regenerated, and it will never reach
   RREQ_Gen.  However, since routers monitor bidirectionality to next
   hops (Section 6.2), the loss of the RREP will cause the last router
   which regenerated the RREP to blacklist the router which did not
   receive it.  Later, a timeout occurs at RREQ_Gen, and a new RREQ is
   generated.  If the new RREQ arrives via the blacklisted router, it
   will be ignored, enabling the RREQ, if also received from a different
   neighbor, to discover a different path toward TargAddr.

   Route discovery is considered to have failed after
   DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for an RREP
   response to the final RREQ.  After the attempted route discovery has
   failed, RREQ_Gen waits at least RREQ_HOLDDOWN_TIME before attempting
   another route discovery to the same destination, in order to avoid
   repeatedly generating control traffic that is unlikely to discover a
   route.  Any IP packets buffered for TargAddr are also dropped and a
   Destination Unreachable ICMP message (Type 3) with a code of 1 (Host
   Unreachable Error) is delivered to the source of the packet, so that
   the application knows about the failure.  The source might be an
   application on RREQ_Gen itself, or on a difference device.

   If RREQ_Gen does receive a route message containing a route to
   TargAddr within the timeout, it processes the message according to
   Section 7.  When a valid LocalRoute entry is created in the Local
   Route Set, the route is also installed in the Routing Information
   Base, and the router will begin sending the buffered IP packets.  Any
   retry timers for the corresponding RREQ are then cancelled.

   During route discovery, all routers on the path learn a route to both
   OrigAddr and TargAddr, so that routes are constructed in both
   directions.  The route is optimized for the forward route.

6.7.  Processing Received Route Information

   All AODVv2 route messages contain a route.  A Route Request (RREQ)
   contains a route toward OrigAddr (and other addresses as indicated by
   OrigPrefixLen), and a Route Reply (RREP) contains a route toward
   TargAddr (and other addresses as indicated by TargPrefixLen).  All
   AODVv2 routers that receive a route message are able to store the
   route contained within it in their Local Route Set. Incoming
   information is first checked to verify that it is both safe to use
   and offers an improvement to existing information, as explained in
   Section 6.7.1.  The Local Route Set MAY then be updated according to
   Section 6.7.2.





Perkins, et al.         Expires September 5, 2016              [Page 25]

Internet-Draft                   AODVv2                       March 2016


   In the processes below, RteMsg is used to denote the route message,
   AdvRte is used to denote the route contained within it, and
   LocalRoute denotes an existing entry in the Local Route Set which
   matches AdvRte on address, prefix length, and metric type.

   AdvRte has the following properties:

   o  AdvRte.Address := network address given by combining
      RteMsg.OrigAddr and RteMsg.OrigPrefixLen (in RREQ) or
      RteMsg.TargAddr and RteMsg.TargPrefixLen (in RREP)

   o  AdvRte.PrefixLength := RteMsg.OrigPrefixLen (in RREQ) or
      RteMsg.TargPrefixLen (in RREP).  If no prefix length was included
      in RteMsg, prefix length is the address length, in bits, of
      RteMsg.OrigAddr (in RREQ) or RteMsg.TargAddr (in RREP)

   o  AdvRte.SeqNum := RteMsg.OrigSeqNum (in RREQ) or RteMsg.TargSeqNum
      (in RREP)

   o  AdvRte.NextHop := RteMsg.IPSourceAddress (an address of the router
      from which the RteMsg was received)

   o  AdvRte.MetricType := RteMsg.MetricType

   o  AdvRte.Metric := RteMsg.Metric

   o  AdvRte.Cost := Cost(R) using the cost function associated with the
      route's metric type, i.e. Cost(R) = AdvRte.Metric + Cost(L), as
      described in Section 5, where L is the link from the advertising
      router

   o  AdvRte.ValidityTime := RteMsg.ValidityTime, if included

6.7.1.  Evaluating Route Information

   An incoming advertised route (AdvRte) is compared to existing
   LocalRoutes to determine whether the advertised route is to be used
   to update the AODVv2 Local Route Set. The incoming route information
   MUST be processed as follows:

   1.  Search for LocalRoutes in the Local Route Set matching AdvRte's
       address, prefix length and metric type

       *  If no matching LocalRoute exists, AdvRte MUST be used to
          update the Local Route Set.

       *  If matching LocalRoutes are found, continue to Step 2.




Perkins, et al.         Expires September 5, 2016              [Page 26]

Internet-Draft                   AODVv2                       March 2016


   2.  Compare sequence numbers using the technique described in
       Section 4.4

       *  If AdvRte is more recent than all matching LocalRoutes, AdvRte
          MUST be used to update the Local Route Set.

       *  If AdvRte is stale, AdvRte MUST NOT be used to update the
          Local Route Set.

       *  If the sequence numbers are equal, continue to Step 3.

   3.  Check that AdvRte is safe against routing loops compared to all
       matching LocalRoutes (see Section 5)

       *  If LoopFree(AdvRte, LocalRoute) returns FALSE, AdvRte MUST NOT
          be used to update the Local Route Set because using the
          incoming information might cause a routing loop.

       *  If LoopFree(AdvRte, LocalRoute) returns TRUE, continue to Step
          4.

   4.  Compare route costs

       *  If AdvRte is better than all matching LocalRoutes, it SHOULD
          be used to update the Local Route Set because it offers
          improvement.  If it is not used to update the Local Route Set,
          the existing non-optimal LocalRoute will continue to be used,
          causing data traffic to use a non-optimal route.

       *  If AdvRte is equal in cost and LocalRoute is valid, AdvRte
          SHOULD NOT be used to update the Local Route Set because it
          will offer no improvement.

       *  If AdvRte is worse and LocalRoute is valid, AdvRte MUST NOT be
          used to update the Local Route Set because it does not offer
          any improvement.

       *  If AdvRte is not better (i.e., it is worse or equal) but
          LocalRoute is Invalid, AdvRte SHOULD be used to update the
          Local Route Set because it can safely repair the existing
          Invalid LocalRoute.

   If the advertised route is to be used to update the Local Route Set,
   the procedure in Section 6.7.2 MUST be followed.  If not, non-optimal
   routes will remain in the Local Route Set.






Perkins, et al.         Expires September 5, 2016              [Page 27]

Internet-Draft                   AODVv2                       March 2016


6.7.2.  Applying Route Updates

   After determining that AdvRte is to be used to update the Local Route
   Set (as described in Section 6.7.1), the following procedure applies.

   If AdvRte is learned from an RREQ message, the link to the next hop
   neighbor may not be confirmed as bidirectional (see Section 4.3).
   The route will offer improvement to the Local Route Set if the
   neighbor can be confirmed.  If there is no existing matching route,
   AdvRte allows a corresponding RREP to be sent.  If a matching entry
   already exists, AdvRte offers potential improvement.

   The route update is applied as follows:

   1.  If no existing entry in the Local Route Set matches AdvRte's
       address, prefix length and metric type, continue to Step 4 and
       create a new entry in the Local Route Set.

   2.  If two matching LocalRoutes exist in the Local Route Set, one is
       a valid route, and one is an Unconfirmed route.  AdvRte may offer
       further improvement to the Unconfirmed route, or may offer an
       update to the valid route.

       *  If AdvRte.NextHop's Neighbor.State is Unknown, the advertised
          route may offer improvement to the existing valid route, if
          the link to the next hop can be confirmed as bidirectional.
          Continue processing from Step 5 to update the existing
          Unconfirmed LocalRoute.

       *  If AdvRte.NextHop's Neighbor.State is Confirmed, the
          advertised route offers an update or improvement to the
          existing valid route.  Continue processing from Step 5 to
          update the existing valid LocalRoute.

   3.  If only one matching LocalRoute exists in the Local Route Set:

       *  If AdvRte.NextHop's Neighbor.State is Confirmed, continue
          processing from Step 5 to update the existing LocalRoute.

       *  If AdvRte.NextHop's Neighbor.State is Unknown, AdvRte may
          offer improvement the existing LocalRoute, if the link to
          AdvRte.NextHop can be confirmed as bidirectional.

       *  If LocalRoute.State is Unconfirmed, AdvRte is an improvement
          to an existing Unconfirmed route.  Continue processing from
          Step 5 to update the existing LocalRoute.





Perkins, et al.         Expires September 5, 2016              [Page 28]

Internet-Draft                   AODVv2                       March 2016


       *  If LocalRoute.State is Invalid, AdvRte can replace the
          existing LocalRoute.  Continue processing from Step 5 to
          update the existing LocalRoute.

       *  If LocalRoute.State is Active or Idle, AdvRte SHOULD be stored
          as an additional entry in the Local Route Set, with
          LocalRoute.State set to Unconfirmed.  Continue processing from
          Step 4 to create a new LocalRoute.

   4.  Create an entry in the Local Route Set and initialize as follows:

       *  LocalRoute.Address := AdvRte.Address

       *  LocalRoute.PrefixLength := AdvRte.PrefixLength

       *  LocalRoute.MetricType := AdvRte.MetricType

   5.  Update the LocalRoute as follows:

       *  LocalRoute.SeqNum := AdvRte.SeqNum

       *  LocalRoute.NextHop := AdvRte.NextHop

       *  LocalRoute.NextHopInterface := interface on which RteMsg was
          received

       *  LocalRoute.Metric := AdvRte.Cost

       *  LocalRoute.LastUsed := CurrentTime

       *  LocalRoute.LastSeqNumUpdate := CurrentTime

       *  LocalRoute.ExpirationTime := CurrentTime + AdvRte.ValidityTime
          if a validity time exists, otherwise INFINITY_TIME

   6.  If a new LocalRoute was created, or if the existing
       LocalRoute.State is Invalid or Unconfirmed, update LocalRoute as
       follows:

       *  LocalRoute.State := Unconfirmed (if the next hop's
          Neighbor.State is Unknown)

       *  LocalRoute.State := Idle (if the next hop's Neighbor.State is
          Confirmed)

   7.  If an existing LocalRoute.State changed from Invalid or
       Unconfirmed to become Idle, any matching Unconfirmed LocalRoute
       with worse metric value SHOULD be expunged.



Perkins, et al.         Expires September 5, 2016              [Page 29]

Internet-Draft                   AODVv2                       March 2016


   8.  If an existing LocalRoute was updated with a better metric value,
       any matching Unconfirmed LocalRoute with worse metric value
       SHOULD be expunged.

   9.  If this update results in LocalRoute.State of Active or Idle,
       which matches a route request which is still in progress, the
       associated route request retry timers can be cancelled.

   If this update to the Local Route Set results in two LocalRoutes to
   the same address, the best LocalRoute will be Unconfirmed.  In order
   to improve the route used for forwarding, the router SHOULD try to
   determine if the link to the next hop of that LocalRoute is
   bidirectional, by using that LocalRoute to forward future RREPs and
   request acknowledgements (see Section 7.2.1).

6.8.  Suppressing Redundant Messages Using the Multicast Route Message
      Table

   When route messages are flooded in a MANET, an AODVv2 router may
   receive multiple similar messages.  Regenerating every one of these
   gives little additional benefit, and generates unnecessary signaling
   traffic and might generate unnecessary interference.

   Each AODVv2 router stores information about recently received route
   messages in the AODVv2 Multicast Route Message Table (Section 4.6).

   To create a Multicast Route Message Table Entry:

   o  RteMsg.MessageType := RREQ or RREP

   o  RteMsg.OrigAddr := OrigAddr from the message

   o  RteMsg.OrigPrefixLen := the prefix length associated with OrigAddr

   o  RteMsg.TargAddr := TargAddr from the message

   o  RteMsg.TargPrefixLen := the prefix length associated with TargAddr

   o  RteMsg.OrigSeqNum := the sequence number associated with OrigAddr,
      if present in the message

   o  RteMsg.TargSeqNum := the sequence number associated with TargAddr,
      if present in the message

   o  RteMsg.MetricType := the metric type of the route requested

   o  RteMsg.Metric := the metric value associated with OrigAddr in an
      RREQ or TargAddr in an RREP



Perkins, et al.         Expires September 5, 2016              [Page 30]

Internet-Draft                   AODVv2                       March 2016


   o  RteMsg.Timestamp := CurrentTime

   o  RteMsg.RemoveTime := CurrentTime + MAX_SEQNUM_LIFETIME

   Entries in the Multicast Route Message Table SHOULD be maintained for
   at least RteMsg_ENTRY_TIME after the last Timestamp update in order
   to account for long-lived RREQs traversing the network.  An entry
   MUST be deleted when the sequence number is no longer valid, i.e.,
   after MAX_SEQNUM_LIFETIME.  Memory-constrained devices MAY remove the
   entry before this time.

   Received route messages are tested against previously received route
   messages, and if determined to be redundant, regeneration or response
   can be avoided.

   To determine if a received message is redundant:

   1.  Search for an entry in the Multicast Route Message Table with the
       same MessageType, OrigAddr, TargAddr, and MetricType

       *  If there is no entry, the message is not redundant.

       *  If there is an entry, continue to Step 2.

   2.  Compare sequence numbers using the technique described in
       Section 4.4

       *  For RREQ messages, use OrigSeqNum of the entry for comparison.
          For RREP messages, use TargSeqNum of the entry for comparison.

       *  If the entry has an older sequence number than the received
          message, the message is not redundant.

       *  If the entry has a newer sequence number than the received
          message, the message is redundant.

       *  If the entry has the same sequence number, continue to Step 3.

   3.  Compare the metric values

       *  If the entry has a Metric value that is worse than or equal to
          the metric in the received message, the message is redundant.

       *  If the entry has a Metric value that is better than the metric
          in the received message, the message is not redundant.

   If the message is redundant, update the Timestamp and RemoveTime on
   the entry, since matching route messages are still traversing the



Perkins, et al.         Expires September 5, 2016              [Page 31]

Internet-Draft                   AODVv2                       March 2016


   network and this entry should be maintained.  This message MUST NOT
   be regenerated or responded to.

   If the message is not redundant, create an entry or update the
   existing entry.

   To update a Multicast Route Message Table entry, set:

   o  RteMsg.OrigSeqNum := the sequence number associated with OrigAddr,
      if present in the received message

   o  RteMsg.TargSeqNum := the sequence number associated with TargAddr,
      if present in the received message

   o  RteMsg.Metric := the metric value associated with OrigAddr in a
      received RREQ or TargAddr in a received RREP

   o  RteMsg.Timestamp := CurrentTime

   o  RteMsg.RemoveTime := CurrentTime + MAX_SEQNUM_LIFETIME

   Where the message is determined not redundant before Step 3, it MUST
   be regenerated or responded to.  Where the message is determined not
   redundant in Step 3, it MAY be suppressed to avoid extra control
   traffic.  However, since the processing of the message will result in
   an update to the Local Route Set, the message SHOULD be regenerated
   or responded to, to ensure other routers have up-to-date information
   and the best metrics.  If not regenerated, the best route may not be
   found.  Where necessary, regeneration or response is performed using
   the processes in Section 7.

6.9.  Local Route Set Maintenance

   Route maintenance involves monitoring LocalRoutes in the Local Route
   Set, updating LocalRoute.State to handle route timeouts and reporting
   routes that become Invalid.

6.9.1.  LocalRoute State Changes

   During normal operation, AODVv2 does not require any explicit
   timeouts to manage the lifetime of a route.  At any time, any
   LocalRoute MAY be examined and updated according to the rules below.
   If timers are not used to prompt updates of LocalRoute.State, the
   LocalRoute.State MUST be checked before IP packet forwarding and
   before any operation based on LocalRoute.State.

   Route timeout behaviour is as follows:




Perkins, et al.         Expires September 5, 2016              [Page 32]

Internet-Draft                   AODVv2                       March 2016


   o  An Unconfirmed route MUST be expunged at MAX_SEQNUM_LIFETIME after
      LocalRoute.LastSeqNumUpdate.

   o  An Idle route MUST become Active when used to forward an IP
      packet.  If the route is not used to forward an IP packet within
      MAX_IDLETIME, LocalRoute.State MUST become Invalid.

   o  An Active route which is a timed route (i.e., with
      LocalRoute.ExpirationTime not equal to INFINITY_TIME) remains
      Active until LocalRoute.ExpirationTime, after which it MUST become
      Invalid.  If it it not a timed route, it MUST become Idle if the
      route is not used to forward an IP packet within ACTIVE_INTERVAL.

   o  An Invalid route SHOULD remain in the Local Route Set, since
      LocalRoute.SeqNum is used to classify future information about
      LocalRoute.Address as stale or fresh.

   o  In all cases, if the time since LocalRoute.LastSeqNumUpdate
      exceeds MAX_SEQNUM_LIFETIME, LocalRoute.SeqNum must be set to
      zero.  This is required to ensure that any AODVv2 routers
      following the initialization procedure can safely begin routing
      functions using a new sequence number, and that their messages
      will not be classified as stale and ignored.  A LocalRoute with
      LocalRoute.State set to Active or Idle can remain in the Local
      Route Set after removing the sequence number, but if
      LocalRoute.State is Invalid, or later becomes Invalid, the
      LocalRoute MUST be expunged from the Local Route Set.

   LocalRoutes can become Invalid before a timeout occurs:

   o  If a link breaks, all LocalRoutes using that link for
      LocalRoute.NextHop MUST immediately have LocalRoute.State set to
      Invalid.

   o  If a Route Error (RERR) message containing the route is received,
      either from LocalRoute.NextHop, or with PktSource set to a Router
      Client address, LocalRoute.State MUST immediately be set to
      Invalid.

   LocalRoutes are also updated when Neighbor.State is updated:

   o  While the value of Neighbor.State is set to Unknown, any routes in
      the Local Route Set using that neighbor as a next hop MUST have
      LocalRoute.State set to Unconfirmed.

   o  When the value of Neighbor.State is set to Confirmed, the
      Unconfirmed routes in the Local Route Set using that neighbor as a
      next hop MUST have LocalRoute.State set to Idle.  Any other



Perkins, et al.         Expires September 5, 2016              [Page 33]

Internet-Draft                   AODVv2                       March 2016


      matching LocalRoutes with metric values worse than
      LocalRoute.Metric MUST be expunged from the Local Route Set.

   o  When the value of Neighbor.State is set to Blacklisted, any valid
      routes in the Local Route Set using that neighbor for their next
      hop MUST have LocalRoute.State set to Invalid.

   o  When a Neighbor Table entry is removed, all routes in the Local
      Route Set using that neighbor as next hop MUST have
      LocalRoute.State set to Invalid.

   In some cases, by setting LocalRoute.State to Confirmed when
   Neighbor.State is set to Confirmed, an issue can occur if data
   packets are forwarded to LocalRoute.Address before the links that
   form the rest of the route are confirmed as bidirectional.
   Intermediate routers will not have a valid route to forward these
   data packets, and will generate a Route Error message.  This in turn
   results in routes to that destination being removed from other
   routers.  However, subsequent data packets will cause a new route
   discovery attempt to be initiated by the router with the source
   address of the data packet configured as a Router Client.

   Memory constrained devices MAY choose to expunge routes from the
   AODVv2 Local Route Set before LocalRoute.ExpirationTime, but MUST
   adhere to the following rules:

   o  An Active route MUST NOT be expunged, as it is in use.  If
      deleted, IP traffic forwarded to this router will prompt
      generation of a Route Error message, and it will be necessary for
      a Route Request to be generated by the originator's router to re-
      establish the route.

   o  An Idle route SHOULD NOT be expunged, as it is still valid for
      forwarding IP traffic.  If deleted, this could result in dropped
      IP packets and a Route Request could be generated to re-establish
      the route.

   o  Any Invalid route MAY be expunged.  Least recently used Invalid
      routes SHOULD be expunged first, since the sequence number
      information is less likely to be useful.

   o  An Unconfirmed route MUST NOT be expunged if it was installed
      within the last RREQ_WAIT_TIME, because it may correspond to a
      route discovery in progress.  A Route Reply message might be
      received which needs to use the LocalRoute.NextHop information.
      Otherwise, it MAY be expunged.





Perkins, et al.         Expires September 5, 2016              [Page 34]

Internet-Draft                   AODVv2                       March 2016


6.9.2.  Reporting Invalid Routes

   When LocalRoute.State changes from Active to Invalid as a result of a
   broken link or a received Route Error (RERR) message, other AODVv2
   routers MUST be informed by sending an RERR message containing
   details of the invalidated route.

   An RERR message MUST also be sent when an AODVv2 router receives an
   IP packet to forward on behalf of another router but does not have a
   valid route in its Routing Information Base for the destination of
   the packet.

   An RERR message MUST also be sent when an AODVv2 router receives an
   RREP message to regenerate, but the LocalRoute to the OrigAddr in the
   RREP has been lost or is marked as Invalid.

   The packet or message triggering the RERR MUST be discarded.

   Generation of an RERR message is described in Section 7.4.1.

7.  AODVv2 Protocol Messages

   AODVv2 defines four message types: Route Request (RREQ), Route Reply
   (RREP), Route Reply Acknowledgement (RREP_Ack), and Route Error
   (RERR).

   Each AODVv2 message is defined as a set of data.  Rules for the
   generation, reception and regeneration of each message type are
   described in the following sections.  Section 8 discusses how the
   data is mapped to [RFC5444] Message TLVs, Address Blocks, and Address
   TLVs.

7.1.  Route Request (RREQ) Message

   Route Request messages are used in route discovery operations to
   request a route to a specified target address.  RREQ messages have
   the following contents:














Perkins, et al.         Expires September 5, 2016              [Page 35]

Internet-Draft                   AODVv2                       March 2016


    +-----------------------------------------------------------------+
    |                           AddressList                           |
    +-----------------------------------------------------------------+
    |                   PrefixLengthList (optional)                   |
    +-----------------------------------------------------------------+
    |                OrigSeqNum, (optional) TargSeqNum                |
    +-----------------------------------------------------------------+
    |                           MetricType                            |
    +-----------------------------------------------------------------+
    |                           OrigMetric                            |
    +-----------------------------------------------------------------+
    |                     ValidityTime (optional)                     |
    +-----------------------------------------------------------------+

                      Figure 1: RREQ message contents

   AddressList
      Contains OrigAddr and TargAddr, the source and destination
      addresses of the IP packet for which a route is requested.
      OrigAddr and TargAddr MUST be routable unicast addresses.

   PrefixLengthList
      Contains OrigPrefixLen, i.e., the length, in bits, of the prefix
      associated with the Router Client entry which includes OrigAddr.
      If omitted, the prefix length is equal to OrigAddr's address
      length in bits.

   OrigSeqNum
      The sequence number associated with OrigAddr.

   TargSeqNum
      A sequence number associated with an existing Invalid route to
      TargAddr.  This MAY be included if available, and is useful for
      the optional Intermediate RREP feature (see Section 10.3).

   MetricType
      The metric type associated with OrigMetric.

   OrigMetric
      The metric value associated with the LocalRoute to OrigAddr (and
      to any other addresses included in the given prefix length), as
      seen from the sender of the message.

   ValidityTime
      The length of time that the message sender is willing to offer a
      route toward OrigAddr (and any other addresses included in the
      given prefix length).  Omitted if no time limit is imposed.




Perkins, et al.         Expires September 5, 2016              [Page 36]

Internet-Draft                   AODVv2                       March 2016


7.1.1.  RREQ Generation

   An RREQ is generated when an IP packet needs to be forwarded for a
   Router Client, and no valid route currently exists for the packet's
   destination in the Routing Information Base.

   Before creating an RREQ, the router SHOULD check if an RREQ has
   recently been sent for the requested destination.  If so, and the
   wait time for a reply has not yet been reached, the router SHOULD
   continue to await a response without generating a new RREQ.  If the
   timeout has been reached, a new RREQ MAY be generated.  If buffering
   is configured, incoming IP packets awaiting this route SHOULD be
   buffered until the route discovery is completed.

   If the limit for the rate of AODVv2 control message generation has
   been reached, no message SHOULD be generated.  If approaching the
   limit, the message should be sent if the priorities in Section 6.5
   allow it.

   To generate the RREQ, the router (referred to as RREQ_Gen) follows
   this procedure:

   1.  Set AddressList := {OrigAddr, TargAddr}

   2.  For the PrefixLengthList:

       *  If OrigAddr is part of an address range configured as a Router
          Client, set PrefixLengthList := {RouterClient.PrefixLength,
          null}. This allows receiving routers to learn a route to all
          the addresses included by the prefix length, not only to
          OrigAddr.

       *  Otherwise, omit PrefixLengthList.

   3.  For OrigSeqNum:

       *  Increment the router SeqNum as specified in Section 4.4.

       *  Set OrigSeqNum := SeqNum.

   4.  For TargSeqNum:

       *  If an Invalid route exists in the Local Route Set matching
          TargAddr using longest prefix matching and has a valid
          sequence number, set TargSeqNum := LocalRoute.SeqNum.






Perkins, et al.         Expires September 5, 2016              [Page 37]

Internet-Draft                   AODVv2                       March 2016


       *  If no Invalid route exists in the Local Route Set matching
          TargAddr, or the route doesn't have a sequence number, omit
          TargSeqNum.

   5.  Include MetricType and set the type accordingly

   6.  Set OrigMetric := RouterClient.Cost for the Router Client entry
       which includes OrigAddr

   7.  Include ValidityTime if advertising that the route to OrigAddr
       (and any other addresses included in the given prefix length) via
       this router is offered for a limited time, and set ValidityTime
       accordingly

   This AODVv2 message is used to create a corresponding [RFC5444]
   message (see Section 8) which is multicast, by default, to LL-MANET-
   Routers on all interfaces configured for AODVv2 operation.

7.1.2.  RREQ Reception

   Upon receiving a Route Request, an AODVv2 router performs the
   following steps:

   1.  Update the Neighbor Table according to Section 6.3

       *  If the sender has Neighbor.State set to Blacklisted after the
          update, ignore this RREQ for further processing.

   2.  Verify that the message contains the required data: OrigAddr,
       TargAddr, OrigSeqNum, and OrigMetric, and that OrigAddr and
       TargAddr are valid addresses (routable and unicast)

       *  If not, ignore this RREQ for further processing.

   3.  Check that the MetricType is supported and configured for use

       *  If not, ignore this RREQ for further processing.

   4.  Verify that the cost of the advertised route will not exceed the
       maximum allowed metric value for the metric type (Metric <=
       MAX_METRIC[MetricType] - Cost(L))

       *  If it will, ignore this RREQ for further processing.

   5.  Process the route to OrigAddr (and any other addresses included
       in the given prefix length) as specified in Section 6.7





Perkins, et al.         Expires September 5, 2016              [Page 38]

Internet-Draft                   AODVv2                       March 2016


   6.  Check if the information in the message is redundant by comparing
       to entries in the Multicast Route Message table, following the
       procedure in Section 6.8

       *  If redundant, ignore this RREQ for further processing.

       *  If not redundant, continue processing.

   7.  Check if the TargAddr belongs to one of the Router Clients

       *  If so, generate an RREP as specified in Section 7.2.1.

       *  If not, continue to RREQ regeneration.

7.1.3.  RREQ Regeneration

   By regenerating an RREQ, a router advertises that it will forward IP
   packets to the OrigAddr contained in the RREQ (and to other addresses
   included in the given prefix length) according to the information
   enclosed.  The router MAY choose not to regenerate the RREQ, for
   example if the router is heavily loaded or low on energy and
   therefore unwilling to advertise routing capability for more traffic.
   This could, however, decrease connectivity in the network or result
   in non-optimal paths.

   The RREQ SHOULD NOT be regenerated if the limit for the rate of
   AODVv2 control message generation has been reached.  If approaching
   the limit, the message should be sent if the priorities in
   Section 6.5 allow it.

   The procedure for RREQ regeneration is as follows:

   1.  Set AddressList, PrefixLengthList, sequence numbers and
       MetricType to the values in the received RREQ

   2.  Set OrigMetric := LocalRoute[OrigAddr].Metric

   3.  If the received RREQ contains a ValidityTime, or if the
       regenerating router wishes to limit the time that it offers a
       route to OrigAddr (and any other addresses included in the given
       prefix length), the regenerated RREQ MUST include ValidityTime

       *  The ValidityTime is either the time limit the previous AODVv2
          router specified, or the time limit this router wishes to
          impose, whichever is lower.

   This AODVv2 message is used to create a corresponding [RFC5444]
   message (see Section 8) which is multicast, by default, to LL-MANET-



Perkins, et al.         Expires September 5, 2016              [Page 39]

Internet-Draft                   AODVv2                       March 2016


   Routers on all interfaces configured for AODVv2 operation.  However,
   the regenerated RREQ can be unicast to the next hop address of the
   LocalRoute toward TargAddr, if known.

7.2.  Route Reply (RREP) Message

   When a Route Request message is received, requesting a route to a
   target address (TargAddr) which is configured as part of a Router
   Client entry, a Route Reply message is sent in response.  The RREP
   offers a route to TargAddr (and any other addresses included in the
   prefix length).

   RREP messages have the following contents:

    +-----------------------------------------------------------------+
    |                        AckReq (optional)                        |
    +-----------------------------------------------------------------+
    |                           AddressList                           |
    +-----------------------------------------------------------------+
    |                   PrefixLengthList (optional)                   |
    +-----------------------------------------------------------------+
    |                           TargSeqNum                            |
    +-----------------------------------------------------------------+
    |                           MetricType                            |
    +-----------------------------------------------------------------+
    |                           TargMetric                            |
    +-----------------------------------------------------------------+
    |                     ValidityTime (optional)                     |
    +-----------------------------------------------------------------+

                      Figure 2: RREP message contents

   AckReq
      The address of the intended next hop of the RREP.  This is
      included when the link to the next hop toward OrigAddr is not
      known to be bidirectional.  It indicates that an acknowledgement
      of the RREP is requested by the sender from the intended next hop
      (see Section 6.2).

   AddressList
      Contains OrigAddr and TargAddr, the source and destination
      addresses of the IP packet for which a route is requested.
      OrigAddr and TargAddr MUST be routable unicast addresses.

   PrefixLengthList
      Contains TargPrefixLen, i.e., the length, in bits, of the prefix
      associated with the Router Client entry which includes TargAddr.




Perkins, et al.         Expires September 5, 2016              [Page 40]

Internet-Draft                   AODVv2                       March 2016


      If omitted, the prefix length is equal to TargAddr's address
      length, in bits.

   TargSeqNum
      The sequence number associated with TargAddr.

   MetricType
      The metric type associated with TargMetric.

   TargMetric
      The metric value associated with the LocalRoute to TargAddr (and
      any other addresses included in the given prefix length), as seen
      from the sender of the message.

   ValidityTime
      The length of time that the message sender is willing to offer a
      route toward TargAddr (and any other addresses included in the
      given prefix length).  Omitted if no time limit is imposed.

7.2.1.  RREP Generation

   A Route Reply message is generated when a Route Request arrives,
   requesting a route to an address which is configured as a Router
   Client of the AODVv2 router.

   Before creating an RREP, the router SHOULD check if the corresponding
   RREQ is redundant, i.e., a Route Reply has already been generated in
   response to the RREQ, or if the limit for the rate of AODVv2 control
   message generation has been reached.  If so, the RREP SHOULD NOT be
   created.  If approaching the limit, the message should be sent if the
   priorities in Section 6.5 allow it.

   The RREP will follow the path of the route to OrigAddr.  If the best
   route to OrigAddr in the Local Route Set is Unconfirmed, the link to
   the next hop neighbor is not yet confirmed as bidirectional (as
   described in Section 6.2).  In this case the RREP MUST include AckReq
   set to the intended next hop address.  The AckReq indicates that an
   acknowledgement to the RREP is requested from the intended next hop
   router in the form of a Route Reply Acknowledgement (RREP_Ack).  If
   the best route to OrigAddr in the Local Route Set is valid, the link
   to the next hop neighbor is already confirmed as bidirectional, and
   the AckReq can be omitted.

   Implementations MAY allow a number of retries of the RREP if a
   requested acknowledgement is not received within
   RREP_Ack_SENT_TIMEOUT, doubling the timeout with each retry, up to a
   maximum of RREP_RETRIES, using the same exponential backoff described
   in Section 6.6 for RREQ retries.  The acknowledgement MUST be



Perkins, et al.         Expires September 5, 2016              [Page 41]

Internet-Draft                   AODVv2                       March 2016


   considered to have failed after the wait time for an RREP_Ack
   response to the final RREP.

   To generate the RREP, the router (also referred to as RREP_Gen)
   follows this procedure:

   1.  If the link to the next hop router toward OrigAddr is not known
       to be bidirectional, include the AckReq with the address of the
       intended next hop router

   2.  Set Address List := {OrigAddr, TargAddr}

   3.  For the PrefixLengthList:

       *  If TargAddr is part of an address range configured as a Router
          Client, set PrefixLengthList := {null,
          RouterClient.PrefixLength}. This allows receiving routers to
          learn a route to all the addresses included by the prefix
          length, not only to TargAddr.

       *  Otherwise, omit PrefixLengthList.

   4.  For the TargSeqNum:

       *  Increment the router SeqNum as specified in Section 4.4.

       *  Set TargSeqNum := SeqNum.

   5.  Include MetricType and set the type to match the MetricType in
       the received RREQ message

   6.  Set TargMetric := RouterClient.Cost for the Router Client entry
       which includes TargAddr

   7.  Include ValidityTime if advertising that the route to TargAddr
       (and any other addresses included in the given prefix length) via
       this router is offered for a limited time, and set ValidityTime
       accordingly

   This AODVv2 message is used to create a corresponding [RFC5444]
   message (see Section 8).  If the Neighbor Table contains an entry for
   the neighbor stored as LocalRoute[OrigAddr].NextHop, with
   Neighbor.State set to Confirmed, the RREP is sent by unicast to
   LocalRoute[OrigAddr].NextHop.  Otherwise, the RREP is sent multicast
   to LL-MANET-Routers.






Perkins, et al.         Expires September 5, 2016              [Page 42]

Internet-Draft                   AODVv2                       March 2016


7.2.2.  RREP Reception

   Upon receiving a Route Reply, an AODVv2 router performs the following
   steps:

   1.   Verify that the message contains the required data: OrigAddr,
        TargAddr, TargSeqNum, and TargMetric, and that OrigAddr and
        TargAddr are valid addresses (routable and unicast)

        *  If not, ignore this RREP for further processing.

   2.   Check that the MetricType is supported and configured for use

        *  If not, ignore this RREP for further processing.

   3.   If this RREP does not correspond to a RREQ generated or
        regenerated in the last RREQ_WAIT_TIME, ignore for further
        processing.


   4.   Update the Neighbor Table according to Section 6.3

   5.   Verify that the cost of the advertised route does not exceed the
        maximum allowed metric value for the metric type (Metric <=
        MAX_METRIC[MetricType] - Cost(L))

        *  If it does, ignore this RREP for further processing.

   6.   If the AckReq is present, check the intended recipient of the
        received RREP

        *  If the receiving router is the intended recipient, send an
           acknowledgement as specified in Section 7.3 and continue
           processing.

        *  If the receiving router is not the intended recipient, ignore
           this RREP for further processing.

   7.   Process the route to TargAddr (and any other addresses included
        in the given prefix length) as specified in Section 6.7

   8.   Check if the message is redundant by comparing to entries in the
        Multicast Route Message table (Section 6.8)

        *  If redundant, ignore this RREP for further processing.






Perkins, et al.         Expires September 5, 2016              [Page 43]

Internet-Draft                   AODVv2                       March 2016


        *  If not redundant, save the information in the Multicast Route
           Message table to identify future redundant RREP messages and
           continue processing.

   9.   Check if the OrigAddr belongs to one of the Router Clients

        *  If so, no further processing is necessary.

        *  If not, continue to Step 10.

   10.  Check if a valid (Active or Idle) or Unconfirmed LocalRoute
        exists to OrigAddr

        *  If so, continue to RREP regeneration.

        *  If not, a Route Error message SHOULD be transmitted to
           TargAddr according to Section 7.4.1 and the RREP SHOULD be
           discarded and not regenerated.

7.2.3.  RREP Regeneration

   A received Route Reply message is regenerated toward OrigAddr.
   Unless the router is prepared to advertise the route contained within
   the received RREP, it halts processing.  By regenerating a RREP, a
   router advertises that it will forward IP packets to TargAddr (and
   any other addresses included in the given prefix length) according to
   the information enclosed.  The router MAY choose not to regenerate
   the RREP, in the same way it MAY choose not to regenerate an RREQ
   (see Section 7.1.3), though this could decrease connectivity in the
   network or result in non-optimal paths.

   The RREP SHOULD NOT be regenerated if the limit for the rate of
   AODVv2 control message generation has been reached.  If approaching
   the limit, the message should be sent if the priorities in
   Section 6.5 allow it.

   If the link to the next hop neighbor on the LocalRoute to OrigAddr is
   not yet confirmed as bidirectional (as described in Section 6.2), the
   RREP MUST include AckReq set to the intended next hop address, in
   order to perform next hop monitoring.  If bidirectionality is already
   confirmed, the AckReq can be omitted.  The AckReq indicates that an
   acknowledgement to the RREP is requested in the form of a Route Reply
   Acknowledgement (RREP_Ack) from the intended next hop router, within
   RREP_Ack_SENT_TIMEOUT.

   The procedure for RREP regeneration is as follows:





Perkins, et al.         Expires September 5, 2016              [Page 44]

Internet-Draft                   AODVv2                       March 2016


   1.  If the link to the next hop router toward OrigAddr is not known
       to be bidirectional, include the AckReq with the address of the
       intended next hop router

   2.  Set AddressList, PrefixLengthList, TargSeqNum and MetricType to
       the values in the received RREP

   3.  Set TargMetric := LocalRoute[TargAddr].Metric

   4.  If the received RREP contains a ValidityTime, or if the
       regenerating router wishes to limit the time that it will offer a
       route to TargAddr (and any other addresses included in the given
       prefix length), the regenerated RREP MUST include ValidityTime

       *  The ValidityTime is either the time limit the previous AODVv2
          router specified, or the time limit this router wishes to
          impose, whichever is lower.

   This AODVv2 message is used to create a corresponding [RFC5444]
   message (see Section 8).  If the Neighbor Table contains an entry for
   the neighbor stored as LocalRoute[OrigAddr].NextHop, with
   Neighbor.State set to Confirmed, the RREP is sent by unicast to
   LocalRoute[OrigAddr].NextHop.  Otherwise, the RREP is sent multicast
   to LL-MANET-Routers.

7.3.  Route Reply Acknowledgement (RREP_Ack) Message

   The Route Reply Acknowledgement is a response to a Route Reply
   message.  When the RREP_Ack message is received by the sender of the
   RREP, it confirms that the link between the two routers is
   bidirectional (see Section 6.2).  The RREP_Ack has no further data.

7.3.1.  RREP_Ack Generation

   An RREP_Ack MUST be generated if a received Route Reply includes an
   AckReq with an address matching one of the receiving router's IP
   addresses.  The RREP_Ack SHOULD NOT be generated if the limit for the
   rate of AODVv2 control message generation has been reached.

   There is no further data in an RREP_Ack.  The [RFC5444]
   representation is discussed in Section 8.  The RREP_Ack is unicast,
   by default, to the source IP address of the RREP message that
   requested it.








Perkins, et al.         Expires September 5, 2016              [Page 45]

Internet-Draft                   AODVv2                       March 2016


7.3.2.  RREP_Ack Reception

   Upon receiving an RREP_Ack, an AODVv2 router performs the following
   steps:

   1.  Check if the RREP_Ack was expected from the IP source address of
       the RREP_Ack, in response to an RREP sent previously by this
       router

       *  If it was expected, the router cancels any associated timeouts
          and processing continues to Step 2.

       *  If it was not expected, no actions are required and processing
          ends.

   2.  Update the Neighbor Table according to Section 6.3

7.4.  Route Error (RERR) Message

   A Route Error message is generated by an AODVv2 router to notify
   other AODVv2 routers of routes that are no longer available.  An RERR
   message has the following contents:

    +-----------------------------------------------------------------+
    |                       PktSource (optional)                      |
    +-----------------------------------------------------------------+
    |                           AddressList                           |
    +-----------------------------------------------------------------+
    |                   PrefixLengthList (optional)                   |
    +-----------------------------------------------------------------+
    |                       SeqNumList (optional)                     |
    +-----------------------------------------------------------------+
    |                          MetricTypeList                         |
    +-----------------------------------------------------------------+

                      Figure 3: RERR message contents

   PktSource
      The source address of the IP packet triggering the RERR.  If the
      RERR is triggered by a broken link, PktSource is not required.

   AddressList
      The addresses of the routes not available through RERR_Gen.

   PrefixLengthList
      The prefix lengths, in bits, associated with the routes not
      available through RERR_Gen.  These values indicate whether routes
      represent a single device or an address range.



Perkins, et al.         Expires September 5, 2016              [Page 46]

Internet-Draft                   AODVv2                       March 2016


   SeqNumList
      The sequence numbers of the routes not available through RERR_Gen
      (where known).

   MetricTypeList
      The metric types associated with the routes not available through
      RERR_Gen.

7.4.1.  RERR Generation

   A Route Error message is generated when an AODVv2 router (also
   referred to as RERR_Gen) needs to report that a destination is not
   reachable.  There are three events that cause this response:

   o  When an IP packet that has been forwarded from another router, but
      cannot be forwarded further because there is no valid route in the
      Routing Information Base for its destination, the source of the
      packet needs to be informed that the route to the destination of
      the packet does not exist.  The RERR generated MUST include
      PktSource set to the source address of the IP packet, and MUST
      contain only one unreachable address in the AddressList, i.e., the
      destination address of the IP packet.  RERR_Gen MUST discard the
      IP packet that triggered generation of the RERR.  The prefix
      length and sequence number MAY be included if known from an
      Invalid LocalRoute entry to PktSource.  The MetricTypeList MUST
      also be included if a MetricType can be determined from the IP
      packet or an existing Invalid LocalRoute to the unreachable
      address.

   o  When an RREP message cannot be regenerated because the LocalRoute
      to OrigAddr has been lost or is Invalid, RREP_Gen needs to be
      informed that the route to OrigAddr does not exist.  The RERR
      generated MUST include PktSource set to the TargAddr of the RREP,
      and MUST contain only one unreachable address in the AddressList,
      the OrigAddr from the RREP.  RERR_Gen MUST discard the RREP
      message that triggered generation of the RERR.  The prefix length,
      sequence number and metric type SHOULD be included if known from
      an Invalid LocalRoute to the unreachable address.

   o  When a link breaks, multiple LocalRoutes may become Invalid, and
      the RERR generated MAY contain multiple unreachable addresses.
      The RERR MUST include MetricTypeList.  PktSource is omitted.  All
      previously Active LocalRoutes that used the broken link MUST be
      reported.  The AddressList, PrefixLengthList, SeqNumList, and
      MetricTypeList will contain entries for each LocalRoute which has
      become Invalid.  An RERR message is only sent if an Active
      LocalRoute becomes Invalid, though an AODVv2 router can also




Perkins, et al.         Expires September 5, 2016              [Page 47]

Internet-Draft                   AODVv2                       March 2016


      include Idle LocalRoutes that become Invalid if the configuration
      parameter ENABLE_IDLE_IN_RERR is set (see Section 11.3).

   In order to avoid flooding the network with RERR messages when a
   stream of IP packets to an unreachable address arrives, an AODVv2
   router SHOULD determine whether an RERR has recently been sent with
   the same unreachable address and PktSource, and SHOULD avoid creating
   duplicate RERR messages.

   The RERR SHOULD NOT be generated if the limit for the rate of AODVv2
   control message generation has been reached.  If approaching the
   limit, the message should be sent if the priorities in Section 6.5
   allow it.

   Incidentally, if an AODVv2 router receives an ICMP error packet to or
   from the address of one of its Router Clients, it forwards the ICMP
   packet in the same way as any other IP packet, and will not generate
   any RERR message based on the contents of the ICMP packet.

   To generate the RERR, the router follows this procedure:

   1.  If necessary, include PktSource and set the value as given above

   2.  For each LocalRoute that needs to be reported:

       *  Insert LocalRoute.Address into the AddressList.

       *  Insert LocalRoute.PrefixLength into PrefixLengthList, if known
          and not equal to the address length.

       *  Insert LocalRoute.SeqNum into SeqNumList, if known.

       *  Insert LocalRoute.MetricType into MetricTypeList.

   The AODVv2 message is used to create a corresponding [RFC5444]
   message (see Section 8).

   If the RERR is sent in response to an undeliverable IP packet or RREP
   message, i.e., if PktSource is included, the RERR SHOULD be sent
   unicast to the next hop on the route to PktSource, or alternatively,
   if there is no route to PktSource, the RERR MUST be multicast to LL-
   MANET-Routers.  If the RERR is sent in response to a broken link,
   i.e., PktSource is not included, the RERR is, by default, multicast
   to LL-MANET-Routers.

   Section 10.2 describes processing steps when the optional precursor
   lists feature is enabled.




Perkins, et al.         Expires September 5, 2016              [Page 48]

Internet-Draft                   AODVv2                       March 2016


7.4.2.  RERR Reception

   Upon receiving a Route Error, an AODVv2 router performs the following
   steps:

   1.  Verify that the message contains the required data: at least one
       unreachable address

       *  If not, ignore this RERR for further processing.

   2.  For each address in the AddressList, check that:

       *  The address is valid (routable and unicast)

       *  The MetricType is supported and configured for use

       *  There is a LocalRoute with the same MetricType matching the
          address using longest prefix matching

       *  Either the LocalRoute's next hop is the sender of the RERR and
          the next hop interface is the interface on which the RERR was
          received, or PktSource is present in the RERR and is a Router
          Client address

       *  The unreachable address' sequence number is either unknown, or
          is greater than the LocalRoute's sequence number

       If any of the above are false, a matching LocalRoute MUST NOT be
       made Invalid and the unreachable address MUST NOT be advertised
       in a regenerated RERR.

       If all of the above are true, the LocalRoute is no longer valid.
       If the LocalRoute was previously Active, it MUST be reported in a
       regenerated RERR.  If the LocalRoute was previously Idle, it MAY
       be reported in a regenerated RERR, if ENABLE_IDLE_IN_RERR is
       configured.  The Local Route Set MUST be updated according to
       these rules:

       *  If the LocalRoute's prefix length is the same as the
          unreachable address' prefix length, set LocalRoute.State to
          Invalid.

       *  If the LocalRoute's prefix length is longer than the
          unreachable address' prefix length, the LocalRoute MUST be
          expunged from the Local Route Set, since it is a sub-route of
          the route which is reported to be Invalid.





Perkins, et al.         Expires September 5, 2016              [Page 49]

Internet-Draft                   AODVv2                       March 2016


       *  If the prefix length is different, create a new LocalRoute
          with the unreachable address, and its prefix length and
          sequence number, and set LocalRoute.State to Invalid.

       *  Update the sequence number on the existing LocalRoute, if the
          reported sequence number is determined to be newer using the
          comparison technique described in Section 4.4.

   3.  Check if there are unreachable addresses which MUST be reported
       in a regenerated RERR

       *  If so, regenerate the RERR as detailed in Section 7.4.3.

       *  If not, take no further action.

7.4.3.  RERR Regeneration

   The Route Error message SHOULD NOT be regenerated if the limit for
   the rate of AODVv2 control message generation has been reached.  If
   approaching the limit, the message should be sent if the priorities
   in Section 6.5 allow it.

   The procedure for RERR regeneration is as follows:

   1.  If PktSource was included in the original RERR, and PktSource is
       not a Router Client, copy it into the regenerated RERR

   2.  For each LocalRoute that needs to be reported:

       *  Insert LocalRoute.Address into the AddressList.

       *  Insert LocalRoute.PrefixLength into PrefixLengthList, if known
          and not equal to the address length.

       *  Insert LocalRoute.SeqNum into SeqNumList, if known.

       *  Insert LocalRoute.MetricType into MetricTypeList.

   The AODVv2 message is used to create a corresponding [RFC5444]
   message (see Section 8).  If the RERR contains PktSource, the
   regenerated RERR SHOULD be sent unicast to the next hop on the
   LocalRoute to PktSource, or alternatively if there is no route to
   PktSource, or PktSource is a Router Client, it MUST be multicast to
   LL-MANET-Routers.  If the RERR is sent in response to a broken link,
   the RERR is, by default, multicast to LL-MANET-Routers.






Perkins, et al.         Expires September 5, 2016              [Page 50]

Internet-Draft                   AODVv2                       March 2016


8.  RFC 5444 Representation

   AODVv2 specifies that all control messages between routers MUST use
   the Generalized Mobile Ad Hoc Network Packet/Message Format
   [RFC5444], and therefore AODVv2's route messages comprise data which
   is mapped to message elements in [RFC5444].

   [RFC5444] provides a multiplexed transport for multiple protocols.
   An [RFC5444] multiplexer MAY choose to optimize the content of
   certain message elements to reduce control message overhead.

   A brief summary of the [RFC5444] format:

   1.  A packet contains zero or more messages

   2.  A message contains a Message Header, one Message TLV Block, zero
       or more Address Blocks, and one Address Block TLV Block per
       Address Block

   3.  The Message TLV Block MAY contain zero or more Message TLVs

   4.  An Address Block TLV Block MAY include zero or more Address Block
       TLVs

   5.  Each TLV value in an Address Block TLV Block can be associated
       with all of the addresses, or with a contiguous set of addresses,
       or with a single address in the Address Block

   AODVv2 does not require access to the [RFC5444] packet header.

   In the message header, AODVv2 uses <msg-type> and <msg-addr-length>.
   The <msg-addr-length> field indicates the length of any addresses in
   the message, using <msg-addr-length> := (address length in octets -
   1), i.e. 3 for IPv4 and 15 for IPv6.

   The addresses in an Address Block MAY appear in any order, and values
   in a TLV in the Address Block TLV Block must be associated with the
   correct address in the Address Block by the [RFC5444] implementation.
   To indicate which value is associated with each address, the AODVv2
   message representation uses lists where the order of the addresses in
   the AODVv2 AddressList matches the order of values in other data
   lists, e.g., the order of SeqNums in the SeqNumList in an RERR.
   [RFC5444] maps this information to Address Block TLVs associated with
   the relevant addresses in the Address Block.

   Each address included in the Address Block is identified as OrigAddr,
   TargAddr, PktSource, or Unreachable Address by including an
   ADDRESS_TYPE TLV in the Address Block TLV Block.



Perkins, et al.         Expires September 5, 2016              [Page 51]

Internet-Draft                   AODVv2                       March 2016


   The following sections show how AODVv2 data is represented in
   [RFC5444] messages.  AODVv2 makes use of the VALIDITY_TIME Address
   Block TLV from [RFC5497], and defines (in Section 12) a number of new
   TLVs.  To calculate the time-value for the VALIDITY_TIME Address
   Block TLV, the value of C is defined in Section 11.2.

   Where the extension type of a TLV is set to zero, this is the default
   [RFC5444] value and the extension type will not be included in the
   message.

8.1.  Route Request Message Representation

8.1.1.  Message Header

                    +-------+---------------+--------+
                    | Data  | Header Field  | Value  |
                    +-------+---------------+--------+
                    | None  | <msg-type>    | RREQ   |
                    +-------+---------------+--------+

8.1.2.  Message TLV Block

   An RREQ contains no Message TLVs.

8.1.3.  Address Block

   An RREQ contains two addresses, OrigAddr and TargAddr, and each
   address has an associated prefix length.  If the prefix length has
   not been included in the AODVv2 message, it is equal to the address
   length in bits.

        +-------------------------+------------------------------+
        | Data                    | Address Block                |
        +-------------------------+------------------------------+
        | OrigAddr/OrigPrefixLen  | <address> + <prefix-length>  |
        | TargAddr/TargPrefixLen  | <address> + <prefix-length>  |
        +-------------------------+------------------------------+

8.1.4.  Address Block TLV Block

   Address Block TLVs are always associated with one or more addresses
   in the Address Block.  The following sections show the TLVs that
   apply to each address.








Perkins, et al.         Expires September 5, 2016              [Page 52]

Internet-Draft                   AODVv2                       March 2016


8.1.4.1.  Address Block TLVs for OrigAddr

   +--------------+---------------+------------+-----------------------+
   | Data         | TLV Type      | Extension  | Value                 |
   |              |               | Type       |                       |
   +--------------+---------------+------------+-----------------------+
   | None         | ADDRESS_TYPE  | 0          | ADDRTYPE_ORIGADDR     |
   | OrigSeqNum   | SEQ_NUM       | 0          | Sequence number of    |
   |              |               |            | RREQ_Gen, the router  |
   |              |               |            | which initiated route |
   |              |               |            | discovery.            |
   | OrigMetric   | PATH_METRIC   | MetricType | Metric value for the  |
   | /MetricType  |               |            | route to OrigAddr,    |
   |              |               |            | using MetricType.     |
   | ValidityTime | VALIDITY_TIME | 0          | ValidityTime for      |
   |              |               |            | route to OrigAddr,    |
   |              |               |            | represented as        |
   |              |               |            | detailed in           |
   |              |               |            | [RFC5497].            |
   +--------------+---------------+------------+-----------------------+

8.1.4.2.  Address Block TLVs for TargAddr

   +------------+--------------+-------------+-------------------------+
   | Data       | TLV Type     | Extension   | Value                   |
   |            |              | Type        |                         |
   +------------+--------------+-------------+-------------------------+
   | None       | ADDRESS_TYPE | 0           | ADDRTYPE_TARGADDR       |
   | TargSeqNum | SEQ_NUM      | 0           | The last known          |
   |            |              |             | TargSeqNum for          |
   |            |              |             | TargAddr.               |
   +------------+--------------+-------------+-------------------------+

8.2.  Route Reply Message Representation

8.2.1.  Message Header

                    +-------+---------------+--------+
                    | Data  | Header Field  | Value  |
                    +-------+---------------+--------+
                    | None  | <msg-type>    | RREP   |
                    +-------+---------------+--------+

8.2.2.  Message TLV Block

   An RREP contains no Message TLVs.





Perkins, et al.         Expires September 5, 2016              [Page 53]

Internet-Draft                   AODVv2                       March 2016


8.2.3.  Address Block

   An RREP contains a minimum of two addresses, OrigAddr and TargAddr,
   and each address has an associated prefix length.  If the prefix
   length has not been included in the AODVv2 message, it is equal to
   the address length in bits.

   It MAY also contain the address of the intended next hop, in order to
   request acknowledgement to confirm bidirectionality of the link, as
   described in Section 6.2.  The prefix length associated with this
   address is equal to the address length in bits.

        +-------------------------+------------------------------+
        | Data                    | Address Block                |
        +-------------------------+------------------------------+
        | OrigAddr/OrigPrefixLen  | <address> + <prefix-length>  |
        | TargAddr/TargPrefixLen  | <address> + <prefix-length>  |
        | AckReq                  | <address> + <prefix-length>  |
        +-------------------------+------------------------------+

8.2.4.  Address Block TLV Block

   Address Block TLVs are always associated with one or more addresses
   in the Address Block.  The following sections show the TLVs that
   apply to each address.

8.2.4.1.  Address Block TLVs for OrigAddr

     +-------+---------------+-----------------+--------------------+
     | Data  | TLV Type      | Extension Type  | Value              |
     +-------+---------------+-----------------+--------------------+
     | None  | ADDRESS_TYPE  | 0               | ADDRTYPE_ORIGADDR  |
     +-------+---------------+-----------------+--------------------+

8.2.4.2.  Address Block TLVs for TargAddr
















Perkins, et al.         Expires September 5, 2016              [Page 54]

Internet-Draft                   AODVv2                       March 2016


   +--------------+---------------+------------+-----------------------+
   | Data         | TLV Type      | Extension  | Value                 |
   |              |               | Type       |                       |
   +--------------+---------------+------------+-----------------------+
   | None         | ADDRESS_TYPE  | 0          | ADDRTYPE_TARGADDR     |
   | TargSeqNum   | SEQ_NUM       | 0          | Sequence number of    |
   |              |               |            | RREP_Gen, the router  |
   |              |               |            | which created the     |
   |              |               |            | RREP.                 |
   | TargMetric   | PATH_METRIC   | MetricType | Metric value for the  |
   | /MetricType  |               |            | route to TargAddr,    |
   |              |               |            | using MetricType.     |
   | ValidityTime | VALIDITY_TIME | 0          | ValidityTime for      |
   |              |               |            | route to TargAddr,    |
   |              |               |            | represented as        |
   |              |               |            | detailed in           |
   |              |               |            | [RFC5497].            |
   +--------------+---------------+------------+-----------------------+

8.2.4.3.  Address Block TLVs for AckReq Intended Recipient Address

      +-------+---------------+-----------------+------------------+
      | Data  | TLV Type      | Extension Type  | Value            |
      +-------+---------------+-----------------+------------------+
      | None  | ADDRESS_TYPE  | 0               | ADDRTYPE_INTEND  |
      +-------+---------------+-----------------+------------------+

8.3.  Route Reply Acknowledgement Message Representation

8.3.1.  Message Header

                   +-------+---------------+-----------+
                   | Data  | Header Field  | Value     |
                   +-------+---------------+-----------+
                   | None  | <msg-type>    | RREP_Ack  |
                   +-------+---------------+-----------+

8.3.2.  Message TLV Block

   An RREP_Ack contains no Message TLVs.

8.3.3.  Address Block

   An RREP_Ack contains no Address Block.







Perkins, et al.         Expires September 5, 2016              [Page 55]

Internet-Draft                   AODVv2                       March 2016


8.3.4.  Address Block TLV Block

   An RREP_Ack contains no Address Block TLV Block.

8.4.  Route Error Message Representation

   Route Error Messages MAY be split into multiple [RFC5444] messages
   when the desired contents would exceed the MTU.  However, all of the
   resulting messages MUST have the same message header as described
   below.  If PktSource is included in the AODVv2 message, it MUST be
   included in all of the resulting [RFC5444] messages.

8.4.1.  Message Header

                    +-------+---------------+--------+
                    | Data  | Header Field  | Value  |
                    +-------+---------------+--------+
                    | None  | <msg-type>    | RERR   |
                    +-------+---------------+--------+

8.4.2.  Message TLV Block

   An RERR contains no Message TLVs.

8.4.3.  Address Block

   The Address Block in an RERR MAY contain PktSource, the source
   address of the IP packet triggering RERR generation, as detailed in
   Section 7.4.  The prefix length associated with PktSource is equal to
   the address length in bits.

   Address Block always contains one address per route that is no longer
   valid, and each address has an associated prefix length.  If a prefix
   length has not been included for this address, it is equal to the
   address length in bits.

   +------------------------------+------------------------------------+
   | Data                         | Address Block                      |
   +------------------------------+------------------------------------+
   | PktSource                    | <address> + <prefix-length> for    |
   |                              | PktSource                          |
   | AddressList/PrefixLengthList | <address> + <prefix-length> for    |
   |                              | each unreachable address in        |
   |                              | AddressList                        |
   +------------------------------+------------------------------------+






Perkins, et al.         Expires September 5, 2016              [Page 56]

Internet-Draft                   AODVv2                       March 2016


8.4.4.  Address Block TLV Block

   Address Block TLVs are always associated with one or more addresses
   in the Address Block.  The following sections show the TLVs that
   apply to each type of address in the RERR.

8.4.4.1.  Address Block TLVs for PktSource

   +------------+---------------+----------------+---------------------+
   | Data       | TLV Type      | Extension Type | Value               |
   +------------+---------------+----------------+---------------------+
   | PktSource  | ADDRESS_TYPE  | 0              | ADDRTYPE_PKTSOURCE  |
   +------------+---------------+----------------+---------------------+

8.4.4.2.  Address Block TLVs for Unreachable Addresses

   +----------------+--------------+------------+----------------------+
   | Data           | TLV Type     | Extension  | Value                |
   |                |              | Type       |                      |
   +----------------+--------------+------------+----------------------+
   | None           | ADDRESS_TYPE | 0          | ADDRTYPE_UNREACHABLE |
   | SeqNumList     | SEQ_NUM      | 0          | Sequence number      |
   |                |              |            | associated with      |
   |                |              |            | invalid route to the |
   |                |              |            | unreachable address. |
   | MetricTypeList | PATH_METRIC  | MetricType | None. Extension Type |
   |                |              |            | set to MetricType of |
   |                |              |            | the route to the     |
   |                |              |            | unreachable address. |
   +----------------+--------------+------------+----------------------+

9.  Simple External Network Attachment

   Figure 4 shows a stub (i.e., non-transit) network of AODVv2 routers
   which is attached to an external network via a single External
   Network Access Router (ENAR).  The interface to the external network
   MUST NOT be configured in the AODVv2_INTERFACES list.

   As in any externally-attached network, AODVv2 routers and Router
   Clients that wish to be reachable from the external network MUST have
   IP addresses within the ENAR's routable and topologically correct
   prefix (i.e., 191.0.2.0/24 in Figure 4).  This AODVv2 network and
   networks attached to routers within it will be advertised to the
   external network using procedures which are out of scope for this
   specification.






Perkins, et al.         Expires September 5, 2016              [Page 57]

Internet-Draft                   AODVv2                       March 2016


       /-------------------------\
      / +----------------+        \
     /  |  AODVv2 Router |         \
     |  |  191.0.2.2/32  |         |
     |  +----------------+         |            Routable
     |                       +-----+--------+   Prefix
     |                       |     ENAR     |  /191.0.2.0/24
     |                       | AODVv2 Router| /
     |                       |  191.0.2.1   |/      /---------------\
     |                       | serving net  +------+    External     \
     |                       | 191.0.2.0/24 |      \     Network     /
     |                       +-----+--------+       \---------------/
     |         +----------------+  |
     |         |  AODVv2 Router |  |
     |         |  191.0.2.3/32  |  |
     \         +----------------+  /
      \                           /
       \-------------------------/

           Figure 4: Simple External Network Attachment Example

   When an AODVv2 router within the AODVv2 MANET wants to discover a
   route toward an address on the external network, it uses the normal
   AODVv2 route discovery for that IP Destination Address.  The ENAR
   MUST respond to RREQ on behalf of all external network destinations,
   i.e., destinations not on the configured 191.0.2.0/24 network.  RREQs
   for addresses inside the AODVv2 network, i.e. destinations on the
   configured 191.0.2.0/24 network, are handled using the standard
   processes described in Section 7.

   When an IP packet from an address on the external network destined
   for an address in the AODVv2 MANET reaches the ENAR, if the ENAR does
   not have a route toward that exact destination in its Routing
   Information Base, it will perform normal AODVv2 route discovery for
   that destination.

   Configuring the ENAR as a default router is outside the scope of this
   specification.

10.  Optional Features

   A number of optional features for AODVv2, associated initially with
   AODV, MAY be useful in networks with greater mobility or larger
   populations, or networks requiring reduced latency for application
   launches.  These features are not required by minimal
   implementations.





Perkins, et al.         Expires September 5, 2016              [Page 58]

Internet-Draft                   AODVv2                       March 2016


10.1.  Expanding Rings Multicast

   For multicast RREQ, the [RFC5444] message may initially be limited to
   a low number of hops to limit the RREQ propagation to a subset of the
   local network and possibly reduce route discovery overhead.  If the
   route is not discovered, the number of hops allowed for distribution
   of the RREQ is increased, in accordance with an expanding ring
   search, as described in [RFC3561].

10.2.  Precursor Lists

   This section specifies an interoperable enhancement to AODVv2
   enabling more economical Route Error notifications.

   There can be several sources of traffic for a certain destination.
   Each source of traffic and each upstream router between the
   forwarding AODVv2 router and the traffic source is known as a
   "precursor" for the destination.  For each destination, an AODVv2
   router MAY choose to keep track of precursors that have provided
   traffic for that destination.  Route Error messages about that
   destination can be sent unicast to these precursors instead of
   multicast to all AODVv2 routers.

   Since an RERR will be regenerated if it comes from a next hop on a
   valid LocalRoute, the RERR SHOULD ideally be sent backwards along the
   route that the source of the traffic uses, to ensure it is
   regenerated at each hop and reaches the traffic source.  If the
   reverse path is unknown, the RERR SHOULD be sent toward the source
   along some other route.  Therefore, the options for saving precursor
   information are as follows:

   o  Save the next hop on an existing route to the IP packet's source
      address as the precursor.  In this case, it is not guaranteed that
      an RERR that is sent will follow the reverse of the source's
      route.  In rare situations, this may prevent the route from being
      invalidated at the source of the data traffic.

   o  Save the IP packet's source address as the precursor.  In this
      case, the RERR can be sent along any existing route to the source
      of the data traffic, and SHOULD include PktSource to ensure that
      the route will be invalidated at the source of the traffic, in
      case the RERR does not follow the reverse of the source's route.

   o  By inspecting the MAC address of each forwarded IP packet,
      determine which router forwarded the packet, and save the router
      address as a precursor.  This ensures that when an RERR is sent to
      the precursor router, the route will be invalidated at that




Perkins, et al.         Expires September 5, 2016              [Page 59]

Internet-Draft                   AODVv2                       March 2016


      router, and the RERR will be regenerated toward the source of the
      IP packet.

   During normal operation, each AODVv2 router maintaining precursor
   lists for a LocalRoute must update the precursor list whenever it
   uses this route to forward traffic to the destination.  Precursors
   are classified as Active if traffic has recently been forwarded by
   the precursor.  The precursor is marked with a timestamp to indicate
   the time it last forwarded traffic on this route.

   When an AODVv2 router detects that one or more LocalRoutes are
   broken, it MAY notify each Active precursor using a unicast Route
   Error message instead of creating multicast traffic.  Unicast is
   applicable when there are few Active precursors compared to the
   number of neighboring AODVv2 routers.  However, the default multicast
   behavior is still preferable when there are many precursors, since
   fewer message transmissions are required.

   When an AODVv2 router supporting precursor lists receives an RERR
   message, it MAY identify the list of its own affected Active
   precursors for the routes in the RERR, and choose to send a unicast
   RERR to those, rather than send a multicast RERR.

   When a LocalRoute is expunged, any precursor list associated with it
   MUST also be expunged.

10.3.  Intermediate RREP

   Without iRREP, only the AODVv2 router responsible for the target
   address can respond to an RREQ.  Using iRREP, route discoveries can
   be faster and create less control traffic.  This specification has
   been published as a separate Internet Draft [I-D.perkins-irrep].

10.4.  Message Aggregation Delay

   The aggregation of multiple messages into a packet is specified in
   [RFC5444].

   Implementations MAY choose to briefly delay transmission of messages
   for the purpose of aggregation (into a single packet) or to improve
   performance by using jitter [RFC5148].

11.  Configuration

   AODVv2 uses various parameters which can be grouped into the
   following categories:

   o  Timers



Perkins, et al.         Expires September 5, 2016              [Page 60]

Internet-Draft                   AODVv2                       March 2016


   o  Protocol constants

   o  Administrative parameters and controls

   This section show the parameters along with their definitions and
   default values (if any).

   Note that several fields have limited size (bits or bytes).  These
   sizes and their encoding may place specific limitations on the values
   that can be set.

11.1.  Timers

   AODVv2 requires certain timing information to be associated with
   Local Route Set entries and message replies.  The default values are
   as follows:

                +------------------------+----------------+
                | Name                   | Default Value  |
                +------------------------+----------------+
                | ACTIVE_INTERVAL        | 5 second       |
                | MAX_IDLETIME           | 200 seconds    |
                | MAX_BLACKLIST_TIME     | 200 seconds    |
                | MAX_SEQNUM_LIFETIME    | 300 seconds    |
                | RteMsg_ENTRY_TIME      | 12 seconds     |
                | RREQ_WAIT_TIME         | 2 seconds      |
                | RREP_Ack_SENT_TIMEOUT  | 1 second       |
                | RREQ_HOLDDOWN_TIME     | 10 seconds     |
                +------------------------+----------------+

                     Table 2: Timing Parameter Values

   The above timing parameter values have worked well for small and
   medium well-connected networks with moderate topology changes.  The
   timing parameters SHOULD be administratively configurable.  Ideally,
   for networks with frequent topology changes the AODVv2 parameters
   SHOULD be adjusted using experimentally determined values or dynamic
   adaptation.  For example, in networks with infrequent topology
   changes MAX_IDLETIME MAY be set to a much larger value.

   If MAX_SEQNUM_LIFETIME was configured differently across the network,
   and any of the routers lost their sequence number or rebooted, this
   could result in their next route messages being classified as stale
   at any AODVv2 router using a greater value for MAX_SEQNUM_LIFETIME.
   This would delay route discovery from and to the re-initializing
   router.





Perkins, et al.         Expires September 5, 2016              [Page 61]

Internet-Draft                   AODVv2                       March 2016


11.2.  Protocol Constants

   AODVv2 protocol constants typically do not require changes.  The
   following table lists these constants, along with their values and a
   reference to the section describing their use.

   +------------------------+---------+--------------------------------+
   | Name                   | Default | Description                    |
   +------------------------+---------+--------------------------------+
   | DISCOVERY_ATTEMPTS_MAX | 3       | Section 6.6                    |
   | RREP_RETRIES           | 2       | Section 7.2.1                  |
   | MAX_METRIC[MetricType] | [TBD]   | Section 5                      |
   | MAX_METRIC[HopCount]   | 255     | Section 5 and Section 7        |
   | INFINITY_TIME          | [TBD]   | Maximum expressible clock time |
   |                        |         | (Section 6.7.2)                |
   | C                      | 1/1024  | Constant used in validity time |
   |                        |         | calculation [RFC5497]          |
   +------------------------+---------+--------------------------------+

                         Table 3: AODVv2 Constants

   MAX_METRIC[MetricType] MUST always be the maximum expressible metric
   value of type MetricType.  Field lengths associated with metric
   values are found in Section 11.6.

   These protocol constants MUST have the same values for all AODVv2
   routers in the ad hoc network.  If the values were configured
   differently, the following consequences may be observed:

   o  DISCOVERY_ATTEMPTS_MAX: Routers with higher values are likely to
      be more successful at finding routes, at the cost of additional
      control traffic.

   o  RREP_RETRIES: Routers with lower values are more likely to
      blacklist neighbors when there is a

   o  MAX_METRIC[MetricType]: No interoperability problems due to
      variations on different routers, but routers with lower values may
      exhibit overly restrictive behavior during route comparisons.
      temporary fluctuation in link quality.

   o  INFINITY_TIME: No interoperability problems due to variations on
      different routers, but if a lower value is used, route state
      management may exhibit overly restrictive behavior.

   o  C: Routers with lower values will invalidate timed routes before
      routers with higher values, which will cause Route Error messages




Perkins, et al.         Expires September 5, 2016              [Page 62]

Internet-Draft                   AODVv2                       March 2016


      to be generated and the route will effectively take on the shorter
      validity time.

11.3.  Local Settings

   The following table lists AODVv2 parameters which SHOULD be
   administratively configured for each router:

    +------------------------+------------------------+--------------+
    | Name                   | Default Value          | Description  |
    +------------------------+------------------------+--------------+
    | AODVv2_INTERFACES      |                        | Section 3    |
    | BUFFER_SIZE_PACKETS    | 2                      | Section 6.6  |
    | BUFFER_SIZE_BYTES      | MAX_PACKET_SIZE [TBD]  | Section 6.6  |
    | CONTROL_TRAFFIC_LIMIT  | [TBD - 50 pkts/sec?]   | Section 7    |
    +------------------------+------------------------+--------------+

                 Table 4: Configuration for Local Settings

11.4.  Network-Wide Settings

   The following administrative controls MAY be used to change the
   operation of the network.  The same settings SHOULD be used across
   the network.  Inconsistent settings at different routers in the
   network will not result in protocol errors, but poor performance may
   result.

           +----------------------+-----------+----------------+
           | Name                 | Default   | Description    |
           +----------------------+-----------+----------------+
           | ENABLE_IDLE_IN_RERR  | Disabled  | Section 7.4.1  |
           +----------------------+-----------+----------------+

             Table 5: Configuration for Network-Wide Settings

11.5.  Optional Feature Settings

   These options are not required for correct routing behavior, although
   they may reduce AODVv2 protocol overhead in certain situations.  The
   default behavior is to leave these options disabled.











Perkins, et al.         Expires September 5, 2016              [Page 63]

Internet-Draft                   AODVv2                       March 2016


   +---------------------------+----------+----------------------------+
   | Name                      | Default  | Description                |
   +---------------------------+----------+----------------------------+
   | PRECURSOR_LISTS           | Disabled | Local setting (Section     |
   |                           |          | 10.2)                      |
   | MSG_AGGREGATION           | Disabled | Local setting (Section     |
   |                           |          | 10.4)                      |
   | ENABLE_IRREP              | Disabled | Network-wide setting       |
   |                           |          | (Section 10.3)             |
   | EXPANDING_RINGS_MULTICAST | Disabled | Network-wide setting       |
   |                           |          | (Section 10.1)             |
   +---------------------------+----------+----------------------------+

               Table 6: Configuration for Optional Features

11.6.  MetricType Allocation

   The metric types used by AODVv2 are identified according to the
   assignments in [RFC6551].  All implementations MUST use these values.

          +---------------------+----------+--------------------+
          | Name of MetricType  | Type     | Metric Value Size  |
          +---------------------+----------+--------------------+
          | Unassigned          | 0        | Undefined          |
          | Hop Count           | 3 [TBD]  | 1 octet            |
          | Unallocated         | 9 - 254  | TBD                |
          | Reserved            | 255      | Undefined          |
          +---------------------+----------+--------------------+

                       Table 7: AODVv2 Metric Types

12.  IANA Considerations

   This section specifies several [RFC5444] message types and address
   tlv-types required for AODVv2.

12.1.  RFC 5444 Message Types

   This specification defines four Message Types, to be allocated from
   the 0-223 range of the "Message Types" namespace defined in
   [RFC5444], as specified in Table 8.










Perkins, et al.         Expires September 5, 2016              [Page 64]

Internet-Draft                   AODVv2                       March 2016


          +-----------------------------------------+-----------+
          | Name of Message                         | Type      |
          +-----------------------------------------+-----------+
          | Route Request (RREQ)                    | 10 (TBD)  |
          | Route Reply (RREP)                      | 11 (TBD)  |
          | Route Error (RERR)                      | 12 (TBD)  |
          | Route Reply Acknowledgement (RREP_Ack)  | 13 (TBD)  |
          +-----------------------------------------+-----------+

                       Table 8: AODVv2 Message Types

12.2.  RFC 5444 Address Block TLV Types

   This specification defines three Address Block TLV Types, to be
   allocated from the "Address Block TLV Types" namespace defined in
   [RFC5444], as specified in Table 9.

   +------------------------+----------+---------------+---------------+
   | Name of TLV            | Type     | Length        | Reference     |
   |                        |          | (octets)      |               |
   +------------------------+----------+---------------+---------------+
   | PATH_METRIC            | 11 (TBD) | depends on    | Section 7     |
   |                        |          | MetricType    |               |
   | SEQ_NUM                | 12 (TBD) | 2             | Section 7     |
   | ADDRESS_TYPE           | 13 (TBD) | 1             | Section 8     |
   +------------------------+----------+---------------+---------------+

                  Table 9: AODVv2 Address Block TLV Types

12.3.  ADDRESS_TYPE TLV Values

   These values are used in the [RFC5444] Address Type TLV discussed in
   Section 8.  All implementations MUST use these values.

                        +---------------+--------+
                        | Address Type  | Value  |
                        +---------------+--------+
                        | ORIGADDR      | 0      |
                        | TARGADDR      | 1      |
                        | UNREACHABLE   | 2      |
                        | PKTSOURCE     | 3      |
                        | INTEND        | 4      |
                        | UNSPECIFIED   | 255    |
                        +---------------+--------+

                      Table 10: AODVv2 Address Types





Perkins, et al.         Expires September 5, 2016              [Page 65]

Internet-Draft                   AODVv2                       March 2016


13.  Security Considerations

   This section describes various security considerations and potential
   avenues to secure AODVv2 routing.  The objective of the AODVv2
   protocol is for each router to communicate reachability information
   about addresses for which it is responsible, and for routes it has
   learned from other AODVv2 routers.  Positive routing information
   (i.e. a route exists) is distributed via RREQ and RREP messages.
   AODVv2 routers store the information contained in these messages in
   order to properly forward IP packets, and they generally provide this
   information to other AODVv2 routers.  Negative routing information
   (i.e. a route does not exist) is distributed via RERR messages.
   AODVv2 routers process these messages and remove routes, and forward
   this information to other AODVv2 routers.

   Networks using AODVv2 to maintain connectivity and establish routes
   on demand may be vulnerable to certain well-known types of threats.
   Flooding attacks using RREQ amount to a denial of service for route
   discovery.  Valid route table entries can be replaced by maliciously
   constructed RREQ and RREP messages.  Links could be erroneously
   treated as bidirectional if malicious unsolicited RREP or RREP_Ack
   messages were to be accepted.  Replay attacks using RERR messages
   could, in some circumstances, be used to disrupt active routes.
   Passive inspection of AODVv2 control messages could enable
   unauthorized devices to gain information about the network topology,
   since exchanging such information is the main purpose of AODVv2.

   The on-demand nature of AODVv2 route discovery reduces the
   vulnerability to route disruption.  Since control traffic for
   updating route tables is diminished, there is less opportunity for
   failure.  Processing requirements for AODVv2 are typically quite
   small, and would typically be dominated by calculations to verify
   integrity.  This has the effect of reducing (but by no means
   eliminating) AODVv2's vulnerability to denial of service attacks.

   Encryption MAY be used for AODVv2 messages.  If the routers share a
   packet-level security association, the message data can be encrypted
   prior to message transmission.  The establishment of such security
   associations is outside the scope of this specification.  Encryption
   will not only protect against unauthorized devices obtaining
   information about network topology but will ensure that only trusted
   routers participate in routing operations.

   Message integrity checking is enabled by the Integrity Check Value
   mechanisms defined in [RFC7182].  The data contained in AODVv2
   routing protocol messages SHOULD be verified using ICV values, to
   avoid the use of message data if the message has been tampered with
   or replayed.  Otherwise, it would be possible to disrupt



Perkins, et al.         Expires September 5, 2016              [Page 66]

Internet-Draft                   AODVv2                       March 2016


   communications by injecting nonexistent or malicious routes into the
   route tables of routers within the ad hoc network.  This can result
   in loss of data or message processing by unauthorized devices.

   The remainder of this section provides specific recommendations for
   the use of the integrity checking and timestamp functions defined in
   [RFC7182] to ensure the integrity of each AODVv2 message.  The
   calculation used for the Integrity Check Value will depend on the
   message type.  Sequence numbers can be used as timestamps to protect
   against replay, since they are known to be strictly increasing.

   RREQ messages advertise a route to OrigAddr, and impose very little
   processing requirement for receivers.  The main threat presented by
   sending an RREQ message with false information is that traffic to
   OrigAddr could be disrupted.  Since RREQ is multicast and likely to
   be received by all routers in the ad hoc network, this threat could
   have serious impact on applications communicating by way of OrigAddr.
   The actual threat to disrupt routes to OrigAddr is reduced by the
   AODVv2 mechanism of marking RREQ-derived routes as "Unconfirmed"
   until the link to the next hop is confirmed.  If AODVv2 routers
   always verify the integrity of the RREQ message data, then the threat
   of disruption is minimized.  The ICV mechanisms offered in [RFC7182]
   are sufficient for this purpose.  Since OrigAddr is included in the
   RREQ, the ICV can be calculated and verified using message contents.
   The ICV SHOULD be verified at every step along the dispersal path of
   the RREQ to mitigate the threat.  Since RREQ_Gen's sequence number is
   incremented for each new RREQ, replay protection is already afforded
   and no extra timestamp mechanism is required.

   RREP messages advertise a route to TargAddr, and impose very little
   processing requirement for receivers.  The main threat presented by
   sending an RREP message with false information is that traffic to
   TargAddr could be disrupted.  Since RREP is unicast, this threat is
   restricted to receivers along the path from OrigAddr to TargAddr.  If
   AODVv2 routers always verify the integrity of the RREP message data,
   then this threat is minimized.  This facility is offered by the ICV
   mechanisms in [RFC7182].  Since TargAddr is included as a Data
   Element of the RREP, the ICV can be calculated and verified using
   message contents.  The ICV SHOULD be verified at every step along the
   unicast path of the RREP.  Since RREP_Gen's sequence number is
   incremented for each new RREP, replay protection is afforded and no
   extra timestamp mechanism is required.

   RREP_Ack messages are intended to verify bidirectional neighbor
   connectivity, and impose very little processing requirement for
   receivers.  The main threat presented by sending an RREP_Ack message
   with false information is that the route advertised to a target
   address in an RREP might be erroneously accepted even though the



Perkins, et al.         Expires September 5, 2016              [Page 67]

Internet-Draft                   AODVv2                       March 2016


   route would contain a unidirectional link and thus not be suitable
   for most traffic.  Since RREP_Ack is unicast, this threat is strictly
   local to the RREP transmitter expecting the acknowledgement.  A
   malicious router could also attempt to send an unsolicited RREP_Ack
   to convince another router that a bidirectional link exists and
   subsequently use further messages to divert traffic along a route
   which is not valid.  If AODVv2 routers always verify the integrity of
   the RREP_Ack message data, then this threat is minimized.  This
   facility is offered by the ICV mechanisms in [RFC7182].  The RREP_Gen
   SHOULD use the source IP address of the RREP_Ack to identify the
   sender, and so the ICV SHOULD be calculated using the message
   contents and the IP source address.  The message must also include
   the Timestamp defined in [RFC7182] to protect against replay attacks,
   using TargSeqNum from the RREP as the value in the TIMESTAMP TLV.

   RERR messages remove routes, and impose very little processing
   requirement for receivers.  The main threat presented by sending an
   RERR message with false information is that traffic to the advertised
   destinations could be disrupted.  Since RERR is multicast and can be
   received by many routers in the ad hoc network, this threat could
   have serious impact on applications communicating by way of the
   sender of the RERR message.  However, since the sender of the RERR
   message with erroneous information MAY be presumed to be either
   malicious or broken, it is better that such routes not be used
   anyway.  Another threat is that a malicious RERR message MAY be sent
   with a PktSource included, to disrupt PktSource's ability to send to
   the addresses contained in the RERR.  If AODVv2 routers always verify
   the integrity of the RERR message data, then this threat is reduced.
   This facility is offered by the ICV mechanisms in [RFC7182].  The
   receiver of the RERR SHOULD use the source IP address of the RERR to
   identify the sender.  The message must also include the Timestamp
   defined in [RFC7182] to protect against replay attacks, using SeqNum
   from RERR_Gen as the value in the TIMESTAMP TLV.

14.  Acknowledgments

   AODVv2 is a descendant of the design of previous MANET on-demand
   protocols, especially AODV [RFC3561] and DSR [RFC4728].  Changes to
   previous MANET on-demand protocols stem from research and
   implementation experiences.  Thanks to Elizabeth Belding and Ian
   Chakeres for their long time authorship of AODV.  Additional thanks
   to Derek Atkins, Emmanuel Baccelli, Abdussalam Baryun, Ramon Caceres,
   Thomas Clausen, Justin Dean, Christopher Dearlove, Fatemeh Ghassemi,
   Ulrich Herberg, Henner Jakob, Ramtin Khosravi, Luke Klein-Berndt,
   Lars Kristensen, Tronje Krop, Koojana Kuladinithi, Kedar Namjoshi,
   Keyur Patel, Alexandru Petrescu, Henning Rogge, Fransisco Ros, Pedro
   Ruiz, Christoph Sommer, Romain Thouvenin, Richard Trefler, Jiazi Yi,




Perkins, et al.         Expires September 5, 2016              [Page 68]

Internet-Draft                   AODVv2                       March 2016


   Seung Yi, Behnaz Yousefi, and Cong Yuan, for their reviews of AODVv2
   and DYMO, as well as numerous specification suggestions.

15.  References

15.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/
              RFC2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC3561]  Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On-
              Demand Distance Vector (AODV) Routing", RFC 3561, DOI
              10.17487/RFC3561, July 2003,
              <http://www.rfc-editor.org/info/rfc3561>.

   [RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing
              Architecture", RFC 4291, DOI 10.17487/RFC4291, February
              2006, <http://www.rfc-editor.org/info/rfc4291>.

   [RFC5082]  Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C.
              Pignataro, "The Generalized TTL Security Mechanism
              (GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007,
              <http://www.rfc-editor.org/info/rfc5082>.

   [RFC5444]  Clausen, T., Dearlove, C., Dean, J., and C. Adjih,
              "Generalized Mobile Ad Hoc Network (MANET) Packet/Message
              Format", RFC 5444, DOI 10.17487/RFC5444, February 2009,
              <http://www.rfc-editor.org/info/rfc5444>.

   [RFC5497]  Clausen, T. and C. Dearlove, "Representing Multi-Value
              Time in Mobile Ad Hoc Networks (MANETs)", RFC 5497, DOI
              10.17487/RFC5497, March 2009,
              <http://www.rfc-editor.org/info/rfc5497>.

   [RFC5498]  Chakeres, I., "IANA Allocations for Mobile Ad Hoc Network
              (MANET) Protocols", RFC 5498, DOI 10.17487/RFC5498, March
              2009, <http://www.rfc-editor.org/info/rfc5498>.

   [RFC6551]  Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N.,
              and D. Barthel, "Routing Metrics Used for Path Calculation
              in Low-Power and Lossy Networks", RFC 6551, DOI 10.17487/
              RFC6551, March 2012,
              <http://www.rfc-editor.org/info/rfc6551>.






Perkins, et al.         Expires September 5, 2016              [Page 69]

Internet-Draft                   AODVv2                       March 2016


   [RFC7182]  Herberg, U., Clausen, T., and C. Dearlove, "Integrity
              Check Value and Timestamp TLV Definitions for Mobile Ad
              Hoc Networks (MANETs)", RFC 7182, DOI 10.17487/RFC7182,
              April 2014, <http://www.rfc-editor.org/info/rfc7182>.

15.2.  Informative References

   [I-D.perkins-irrep]
              Perkins, C., "Intermediate RREP for dynamic MANET On-
              demand (AODVv2) Routing", draft-perkins-irrep-03 (work in
              progress), May 2015.

   [Koodli01]
              Koodli, R. and C. Perkins, "Fast handovers and context
              transfers in mobile networks", Proceedings of the ACM
              SIGCOMM Computer Communication Review 2001, Volume 31
              Issue 5, 37-47, October 2001.

   [Perkins94]
              Perkins, C. and P. Bhagwat, "Highly Dynamic Destination-
              Sequenced Distance-Vector Routing (DSDV) for Mobile
              Computers", Proceedings of the ACM SIGCOMM '94 Conference
              on Communications Architectures, Protocols and
              Applications, London, UK, pp. 234-244, August 1994.

   [Perkins99]
              Perkins, C. and E. Royer, "Ad hoc On-Demand Distance
              Vector (AODV) Routing", Proceedings of the 2nd IEEE
              Workshop on Mobile Computing Systems and Applications, New
              Orleans, LA, pp. 90-100, February 1999.

   [RFC2501]  Corson, S. and J. Macker, "Mobile Ad hoc Networking
              (MANET): Routing Protocol Performance Issues and
              Evaluation Considerations", RFC 2501, DOI 10.17487/
              RFC2501, January 1999,
              <http://www.rfc-editor.org/info/rfc2501>.

   [RFC4193]  Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
              Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,
              <http://www.rfc-editor.org/info/rfc4193>.

   [RFC4728]  Johnson, D., Hu, Y., and D. Maltz, "The Dynamic Source
              Routing Protocol (DSR) for Mobile Ad Hoc Networks for
              IPv4", RFC 4728, DOI 10.17487/RFC4728, February 2007,
              <http://www.rfc-editor.org/info/rfc4728>.






Perkins, et al.         Expires September 5, 2016              [Page 70]

Internet-Draft                   AODVv2                       March 2016


   [RFC4861]  Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
              "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
              DOI 10.17487/RFC4861, September 2007,
              <http://www.rfc-editor.org/info/rfc4861>.

   [RFC5148]  Clausen, T., Dearlove, C., and B. Adamson, "Jitter
              Considerations in Mobile Ad Hoc Networks (MANETs)", RFC
              5148, DOI 10.17487/RFC5148, February 2008,
              <http://www.rfc-editor.org/info/rfc5148>.

   [RFC6130]  Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc
              Network (MANET) Neighborhood Discovery Protocol (NHDP)",
              RFC 6130, DOI 10.17487/RFC6130, April 2011,
              <http://www.rfc-editor.org/info/rfc6130>.

   [Sholander02]
              Sholander, P., Coccoli, P., Oakes, T., and S. Swank, "A
              Portable Software Implementation of a Hybrid MANET Routing
              Protocol", 2002.

Appendix A.  AODVv2 Draft Updates

   This section lists the changes between AODVv2 revisions ...-13.txt
   and ...-14.txt.

   o  Moved Address Type TLV Value definitions to IANA section.

   o  Removed use of MAX_HOPCOUNT and [RFC5444] msg-hop-limit, msg-hop-
      count.

   o  Allow only one Unconfirmed route.

   o  Incorporate changes from Justin Dean's review.

Authors' Addresses

   Charles E. Perkins
   Futurewei Inc.
   2330 Central Expressway
   Santa Clara, CA  95050
   USA

   Phone: +1-408-330-4586
   Email: charliep@xxxxxxxxxxxx







Perkins, et al.         Expires September 5, 2016              [Page 71]

Internet-Draft                   AODVv2                       March 2016


   Stan Ratliff
   Idirect
   13861 Sunrise Valley Drive, Suite 300
   Herndon, VA  20171
   USA

   Email: ratliffstan@xxxxxxxxx


   John Dowdell
   Airbus Defence and Space
   Celtic Springs
   Newport, Wales  NP10 8FZ
   United Kingdom

   Email: john.dowdell@xxxxxxxxxx


   Lotte Steenbrink
   HAW Hamburg, Dept. Informatik
   Berliner Tor 7
   D-20099 Hamburg
   Germany

   Email: lotte.steenbrink@xxxxxxxxxxxxxx


   Victoria Mercieca
   Airbus Defence and Space
   Celtic Springs
   Newport, Wales  NP10 8FZ
   United Kingdom

   Email: victoria.mercieca@xxxxxxxxxx

















Perkins, et al.         Expires September 5, 2016              [Page 72]
<?xml version='1.0' encoding='ascii'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<rfc category="std" docName="draft-ietf-manet-aodvv2-14" ipr="trust200902" 
obsoletes="" updates="" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="AODVv2">Ad Hoc On-demand Distance Vector Version 2 (AODVv2) 
Routing</title>
    <author fullname="Charles E. Perkins" initials="C.E." surname="Perkins">
      <organization abbrev="Futurewei">Futurewei Inc. </organization>
      <address>
        <postal>
          <street>2330 Central Expressway</street>
          <city>Santa Clara</city>
          <code>95050</code>
          <region>CA</region>
          <country>USA</country>
        </postal>
        <phone>+1-408-330-4586</phone>
        <email>charliep@xxxxxxxxxxxx</email>
      </address>
    </author>
    <author fullname="Stan Ratliff" initials="S." surname="Ratliff">
      <organization>Idirect</organization>
      <address>
        <postal>
          <street>13861 Sunrise Valley Drive, Suite 300</street>
          <city>Herndon</city>
          <region>VA</region>
          <code>20171</code>
          <country>USA</country>
        </postal>
        <email>ratliffstan@xxxxxxxxx</email>
      </address>
    </author>
    <author fullname="John Dowdell" initials="J." surname="Dowdell">
      <organization>Airbus Defence and Space</organization>
      <address>
        <postal>
          <street>Celtic Springs</street>
          <city>Newport</city>
          <region>Wales</region>
          <code>NP10 8FZ</code>
          <country>United Kingdom</country>
        </postal>
        <email>john.dowdell@xxxxxxxxxx</email>
      </address>
    </author>
    <author fullname="Lotte Steenbrink" initials="L." surname="Steenbrink">
      <organization>HAW Hamburg, Dept. Informatik</organization>
      <address>
        <postal>
          <street>Berliner Tor 7</street>
          <city>D-20099 Hamburg</city>
          <!--<code>D-20099</code>  -->
          <country>Germany</country>
        </postal>
        <email>lotte.steenbrink@xxxxxxxxxxxxxx</email>
      </address>
    </author>
    <author fullname="Victoria Mercieca" initials="V." surname="Mercieca">
      <organization>Airbus Defence and Space</organization>
      <address>
        <postal>
          <street>Celtic Springs</street>
          <city>Newport</city>
          <region>Wales</region>
          <code>NP10 8FZ</code>
          <country>United Kingdom</country>
        </postal>
        <email>victoria.mercieca@xxxxxxxxxx</email>
      </address>
    </author>
    <date/>
    <area>Routing</area>
    <workgroup>Mobile Ad hoc Networks Working Group</workgroup>
    <keyword>RFC</keyword>
    <keyword>Request for Comments</keyword>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>XML</keyword>
    <keyword>reactive protocol</keyword>
    <abstract><!--This document was prepared using Pandoc2rfc, 
https://github.com/miekg/pandoc2rfc --><t>The Ad Hoc On-demand Distance Vector 
Version 2 (AODVv2) routing protocol is intended for use by mobile routers in 
wireless, multihop networks. AODVv2 determines unicast routes among AODVv2 
routers within the network in an on-demand fashion.  </t> </abstract>
  </front>
  <middle><!--This document was prepared using Pandoc2rfc, 
https://github.com/miekg/pandoc2rfc --><section title="Overview" 
anchor="overview" toc="default"><t>The Ad Hoc On-demand Distance Vector Version 
2 (AODVv2) routing protocol (formerly named DYMO) enables on-demand, multihop 
unicast routing among AODVv2 routers in mobile ad hoc networks (MANETs) <xref 
target="RFC2501" pageno="false" format="default"/>.  </t><t>Although AODVv2 is 
closely related to AODV <xref target="RFC3561" pageno="false" 
format="default"/>, and shares some features of DSR <xref target="RFC4728" 
pageno="false" format="default"/>, AODVv2 is not interoperable with either of 
those protocols. Compared to AODV, AODVv2 makes some features optional, notably 
intermediate route replies, expanding ring search, and precursor lists. Hello 
messages and local repair have been removed. AODVv2 provides a mechanism for 
the use of multiple metric types. Message formats have been updated and made 
compliant with <xref target="RFC5444" pageno="false" format="default"/>.  
</t><t>AODVv2 control messages are defined as sets of data, which are mapped to 
messages using the Generalized MANET Packet/Message Format defined in <xref 
target="RFC5444" pageno="false" format="default"/> and sent using the 
parameters in <xref target="RFC5498" pageno="false" format="default"/>.  
</t><t>The basic operations of the AODVv2 protocol are route discovery and 
route maintenance.  </t><t>An AODVv2 router is configured to perform route 
discovery on behalf of a configured set of IP addresses known as Router 
Clients. Route discovery is performed when an AODVv2 router needs to forward an 
IP packet from one of its Router Clients, but does not have a valid route to 
the packet's destination. AODVv2 routers use Route Request (RREQ) and Route 
Reply (RREP) messages to carry route information between the originator of the 
route discovery and the router responsible for the target, establishing a route 
to both endpoints on all intermediate routers. A metric value is included to 
represent the cost of the route contained within the message. AODVv2 uses 
sequence numbers to identify stale routing information, and compares route 
metric values to determine if advertised routes could form loops.  </t><t>Route 
maintenance includes confirming bidirectionality of links to next hop AODVv2 
routers before considering discovered routes to be valid, issuing Route Error 
(RERR) messages if link failures invalidate routes, reacting to received Route 
Error messages, and extending and enforcing route timeouts.  </t><t>To enable 
the on-demand nature of AODVv2, signals are required to be exchanged between 
AODVv2 and the forwarding plane, to indicate when a packet is to be forwarded, 
in order to initiate route discovery, when packet forwarding fails, in order to 
initiate route error reporting, and when a packet is successfully forwarded, 
for route maintenance.  </t><t>Security for authentication of AODVv2 routers 
and encryption of control messages is accomplished using the TIMESTAMP and ICV 
TLVs defined in <xref target="RFC7182" pageno="false" format="default"/>.  
</t></section><section title="Terminology" anchor="terminology" 
toc="default"><t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 
"OPTIONAL" in this document are to be interpreted as described in <xref 
target="RFC2119" pageno="false" format="default"/>. In addition, this document 
uses terminology from <xref target="RFC5444" pageno="false" format="default"/>, 
and defines the following terms: </t><t><list style="hanging"><t 
hangText="AddressList"><vspace blankLines="0"/>A list of IP addresses as used 
in AODVv2 messages.  </t><t hangText="AckReq"><vspace blankLines="0"/>Used in a 
Route Reply message to indicate the IP address of the router from which a Route 
Reply Acknowledgement is expected.  </t><t hangText="AdvRte"><vspace 
blankLines="0"/>A route advertised in an incoming route message.  </t><t 
hangText="AODVv2 Router"><vspace blankLines="0"/>An IP addressable device in 
the ad hoc network that performs the AODVv2 protocol operations specified in 
this document.  </t><t hangText="CurrentTime"><vspace blankLines="0"/>The 
current time as maintained by the AODVv2 router.  </t></list></t><t><list 
style="hanging"><t hangText="ENAR (External Network Access Router)"><vspace 
blankLines="0"/>An AODVv2 router with an interface to an external, non-AODVv2 
network.  </t><t hangText="Invalid route"><vspace blankLines="0"/>A route that 
cannot be used for forwarding but still contains useful sequence number 
information.  </t><t hangText="LocalRoute"><vspace blankLines="0"/>An entry in 
the Local Route Set.  </t><t hangText="MANET"><vspace blankLines="0"/>A Mobile 
Ad Hoc Network as defined in <xref target="RFC2501" pageno="false" 
format="default"/>.  </t><t hangText="MetricType"><vspace blankLines="0"/>The 
metric type for a metric value included in a message.  </t><t 
hangText="MetricTypeList"><vspace blankLines="0"/>A list of metric types 
associated with the addresses in the AddressList of a Route Error message.  
</t><t hangText="Neighbor"><vspace blankLines="0"/>An AODVv2 router from which 
an RREQ or RREP message has been received. Neighbors exchange routing 
information and verify bidirectionality of the link to a neighbor before 
installing a route via that neighbor into the Local Route Set.  </t><t 
hangText="OrigAddr"><vspace blankLines="0"/>The source IP address of the IP 
packet triggering route discovery.  </t><t hangText="OrigMetric"><vspace 
blankLines="0"/>The metric value associated with the route to OrigAddr (and any 
other addresses included in the given prefix length).  </t><t 
hangText="OrigPrefixLen"><vspace blankLines="0"/>The prefix length, in bits, 
configured in the Router Client entry which includes OrigAddr.  </t><t 
hangText="OrigSeqNum"><vspace blankLines="0"/>The sequence number of the AODVv2 
router which originated the Route Request on behalf of OrigAddr.  </t><t 
hangText="PktSource"><vspace blankLines="0"/>The source address of the IP 
packet which triggered a Route Error message.  </t><t 
hangText="PrefixLengthList"><vspace blankLines="0"/>A list of routing prefix 
lengths associated with the addresses in the AddressList of a message.  </t><t 
hangText="Reactive"><vspace blankLines="0"/>Performed only in reaction to 
specific events. In AODVv2, routes are requested only when data packets need to 
be forwarded. In this document, "reactive" is synonymous with "on-demand".  
</t><t hangText="RERR (Route Error)"><vspace blankLines="0"/>The AODVv2 message 
type used to indicate that an AODVv2 router does not have a valid LocalRoute 
toward one or more particular destinations.  </t><t hangText="RERR_Gen (RERR 
Generating Router)"><vspace blankLines="0"/>The AODVv2 router generating a 
Route Error message.  </t><t hangText="Routable Unicast IP Address"><vspace 
blankLines="0"/>A routable unicast IP address is a unicast IP address that is 
scoped sufficiently to be forwarded by a router.  Globally-scoped unicast IP 
addresses and Unique Local Addresses (ULAs) <xref target="RFC4193" 
pageno="false" format="default"/> are examples of routable unicast IP 
addresses.  </t><t hangText="Router Client"><vspace blankLines="0"/>An address 
or address range configured on an AODVv2 router, on behalf of which that router 
will initiate and respond to route discoveries, so that devices configured to 
use these addresses can send and receive IP traffic to and from remote 
destinations. These addresses may be used by the AODVv2 router itself or by 
non-routing devices that are reachable without traversing another AODVv2 
router.  </t><t hangText="RREP (Route Reply)"><vspace blankLines="0"/>The 
AODVv2 message type used to reply to a Route Request message.  </t><t 
hangText="RREP_Gen (RREP Generating Router)"><vspace blankLines="0"/>The AODVv2 
router that generates the Route Reply message, i.e., the router configured with 
TargAddr as a Router Client.  </t><t hangText="RREQ (Route Request)"><vspace 
blankLines="0"/>The AODVv2 message type used to discover a route to TargAddr 
and distribute information about a route to OrigAddr.  </t><t 
hangText="RREQ_Gen (RREQ Generating Router)"><vspace blankLines="0"/>The AODVv2 
router that generates the Route Request message, i.e., the router configured 
with OrigAddr as a Router Client.  </t><t hangText="RteMsg (Route 
Message)"><vspace blankLines="0"/>A Route Request (RREQ) or Route Reply (RREP) 
message.  </t><t hangText="SeqNum"><vspace blankLines="0"/>The sequence number 
maintained by an AODVv2 router to indicate freshness of route information.  
</t><t hangText="SeqNumList"><vspace blankLines="0"/>A list of sequence numbers 
associated with the addresses in the AddressList of a message.  </t><t 
hangText="TargAddr"><vspace blankLines="0"/>The target address of a route 
request, i.e., the destination address of the IP packet triggering route 
discovery.  </t><t hangText="TargMetric"><vspace blankLines="0"/>The metric 
value associated with the route to TargAddr (and any other addresses included 
in the given prefix length).  </t><t hangText="TargPrefixLen"><vspace 
blankLines="0"/>The prefix length, in bits, configured in the Router Client 
entry which includes TargAddr.  </t><t hangText="TargSeqNum"><vspace 
blankLines="0"/>The sequence number of the AODVv2 router which originated the 
Route Reply on behalf of TargAddr.  </t><t hangText="Valid route"><vspace 
blankLines="0"/>A route that can be used for forwarding, which has been 
confirmed as having a bidirectional link to the next hop, and has not timed out 
or been made invalid by a route error.  </t><t hangText="Unreachable 
Address"><vspace blankLines="0"/>An address reported in a Route Error message, 
either the address on a LocalRoute which became Invalid, or the destination 
address of an IP packet that could not be forwarded because a valid LocalRoute 
to the destination is not known, and will not be requested.  </t><t 
hangText="Upstream"><vspace blankLines="0"/>In the direction from destination 
to source (from TargAddr to OrigAddr).  </t><t hangText="ValidityTime"><vspace 
blankLines="0"/>The length of time the route described by the message is 
offered.  </t></list></t><t>This document uses the notational conventions in 
<xref target="conventions" pageno="false" format="default"/> to simplify the 
text.  </t><texttable anchor="conventions" align="center" title="Notational 
Conventions" suppress-title="false" style="full"><ttcol align="left">Notation 
</ttcol><ttcol align="left">Meaning </ttcol><c>Route[Address] </c><c>A route 
toward Address </c><c>Route[Address].Field </c><c>A field in a route toward 
Address </c><c>RteMsg.Field </c><c>A field in either RREQ or RREP 
</c></texttable><t></t></section><section title="Applicability Statement" 
anchor="apply" toc="default"><t></t><t>The AODVv2 routing protocol is a 
reactive routing protocol. While proactive routing protocols send frequent 
messages and determine routes in advance of them being used, a reactive 
protocol only sends messages to discover a route when there is data to send on 
that route. Therefore, a reactive routing protocol requires certain 
interactions with the forwarding plane, for example, to indicate when a packet 
is to be forwarded, in order to initiate route discovery, route error 
reporting, or route maintenance. The set of signals exchanged between AODVv2 
and the forwarding plane are discussed in <xref target="fwdplane" 
pageno="false" format="default"/>.  </t><t>AODVv2 is designed for stub or 
disconnected mobile ad hoc networks, i.e., non-transit networks or those not 
connected to the internet.  AODVv2 can, however, be configured to perform 
gateway functions when attached to external networks, as discussed in <xref 
target="gateway" pageno="false" format="default"/>.  </t><t>AODVv2 handles a 
wide variety of mobility and traffic patterns by determining routes on-demand. 
In networks with a large number of routers, AODVv2 is best suited for 
relatively sparse traffic scenarios where each router forwards IP packets to a 
small percentage of other AODVv2 routers in the network. In this case fewer 
routes are needed, and therefore less control traffic is produced.  
</t><t>Providing security for a reactive routing protocol can be difficult.  
AODVv2 provides for message integrity and security against replay attacks by 
using integrity check values, timestamps and sequence numbers, as described in 
<xref target="Security" pageno="false" format="default"/>. If security 
associations can be established, encryption can be used for AODVv2 messages to 
ensure that only trusted routers participate in routing operations.  
</t><t>Since the route discovery process aims for a route to be established in 
both directions along the same path, uni-directional links are not suitable. 
AODVv2 will detect and exclude those links from route discovery. The route 
discovered is optimised for the requesting router, and the return path may not 
be the optimal route.  </t><t>AODVv2 is applicable to memory constrained 
devices, since only a little routing state is maintained in each AODVv2 router. 
In contrast to proactive routing protocols, which maintain routing information 
for all destinations within the MANET, AODVv2 routes that are not needed for 
forwarding data do not need to be maintained. On routers unable to store 
persistent AODVv2 state, recovery can impose a performance penalty (e.g., in 
case of AODVv2 router reboot), since if a router loses its sequence number, 
there is a delay before the router can resume full operations. This is 
described in <xref target="boot" pageno="false" format="default"/>.  
</t><t>AODVv2 supports routers with multiple interfaces and multiple IP 
addresses per interface. A router may also use the same IP address on multiple 
interfaces. AODVv2 requires only that each interface configured for AODVv2 has 
at least one unicast IP address. Address assignment procedures are out of scope 
for AODVv2.  </t><t>AODVv2 supports Router Clients with multiple interfaces, as 
long as each interface is configured with its own unicast IP address.  
Multi-homing of a Router Client IP address is not supported by AODVv2, and 
therefore an IP address SHOULD NOT be configured as a Router Client on more 
than one AODVv2 router at any one time.  </t><t>The routing algorithm in AODVv2 
MAY be operated at layers other than the network layer, using layer-appropriate 
addresses.  </t></section><section title="Data Structures" 
anchor="data-structures" toc="default"><section title="Interface List" 
anchor="interfaceslist" toc="default"><t>If multiple interfaces of the AODVv2 
router are configured for use by AODVv2, a list of the interfaces MUST be 
configured in the AODVv2_INTERFACES list.  </t></section><section title="Router 
Client Table" anchor="clients" toc="default"><t>An AODVv2 router provides route 
discovery services for its own local applications and for other non-routing 
devices that are reachable without traversing another AODVv2 router. The 
addresses used by these devices, and the AODVv2 router itself, are configured 
in the Router Client Table. An AODVv2 router will only originate Route Request 
and Route Reply messages on behalf of configured Router Client addresses.  
</t><t>Router Client Table entries MUST contain: </t><t><list 
style="hanging"><t hangText="RouterClient.IPAddress"><vspace blankLines="0"/>An 
IP address or the start of an address range that requires route discovery 
services from the AODVv2 router.  </t></list></t><t><list style="hanging"><t 
hangText="RouterClient.PrefixLength"><vspace blankLines="0"/>The length, in 
bits, of the routing prefix associated with the RouterClient.IPAddress. If a 
prefix length is included, the AODVv2 router MUST provide connectivity for all 
addresses within that prefix.  </t><t hangText="RouterClient.Cost"><vspace 
blankLines="0"/>The cost associated with reaching this address or address 
range.  </t></list></t><t>The Router Client Table for an AODVv2 router is never 
empty, since an AODVv2 router's interface addresses are always configured in 
Router Client entries.  <vspace blankLines="0"/> </t><t>In the initial state, 
an AODVv2 router is not required to have information about the Router Clients 
of any other AODVv2 router.  </t><t>A Router Client address MUST NOT be served 
by more than one AODVv2 router at any one time. To shift responsibility for a 
Router Client to a different AODVv2 router, correct AODVv2 routing behavior 
MUST be observed. The AODVv2 router adding the Router Client MUST wait for any 
existing routing information about this Router Client to be purged from the 
network, i.e., at least MAX_SEQNUM_LIFETIME since the last SeqNum update on the 
router which is removing this Router Client.  </t></section><section 
title="Neighbor Table" anchor="nbrlist" toc="default"><t>A Neighbor Table MUST 
be maintained with information about neighboring AODVv2 routers. Neighbor Table 
entries are stored when AODVv2 messages are received. If the Neighbor is chosen 
as a next hop on an installed route, the link to the Neighbor MUST be tested 
for bidirectionality and the result stored in this table. A route will only be 
considered valid when the link is confirmed to be bidirectional.  
</t><t>Neighbor Table entries MUST contain: </t><t><list style="hanging"><t 
hangText="Neighbor.IPAddress"><vspace blankLines="0"/>An IP address of the 
neighboring router, learned from the source IP address of a received route 
message.  </t><t hangText="Neighbor.State"><vspace blankLines="0"/>Indicates 
whether the link to the neighbor is bidirectional. There are three possible 
states: Confirmed, Unknown, and Blacklisted. Unknown is the initial state.  
Confirmed indicates that the link to the neighbor has been confirmed as 
bidirectional. Blacklisted indicates that the link to the neighbor is 
uni-directional.  <xref target="nexthopmonitoring" pageno="false" 
format="default"/> discusses how to monitor link bidirectionality.  </t><t 
hangText="Neighbor.ResetTime"><vspace blankLines="0"/>When the value of 
Neighbor.State is Blacklisted, this indicates the time at which the value of 
Neighbor.State will revert to Unknown. By default this value is calculated at 
the time the router is blacklisted and is equal to CurrentTime + 
MAX_BLACKLIST_TIME. When the value of Neighbor.State is not Blacklisted, this 
time is set to INFINITY_TIME.  </t></list></t></section><section 
title="Sequence Numbers" anchor="seqnum" toc="default"><t>Sequence numbers 
enable AODVv2 routers to determine the temporal order of route discovery 
messages, identifying stale routing information so that it can be discarded. 
The sequence number fulfills the same roles as the "Destination Sequence 
Number" of DSDV <xref target="Perkins94" pageno="false" format="default"/>, and 
the AODV Sequence Number in <xref target="RFC3561" pageno="false" 
format="default"/>.  </t><t>Each AODVv2 router in the network MUST maintain its 
own sequence number. All RREQ and RREP messages created by an AODVv2 router 
include the router's sequence number, reported as a 16-bit unsigned integer. 
Each AODVv2 router MUST ensure that its sequence number is strictly increasing, 
and that it is incremented by one (1) whenever an RREQ or RREP is created, 
except when the sequence number is 65,535 (the maximum value of a 16-bit 
unsigned integer), in which case it MUST be reset to one (1). The value zero 
(0) is reserved to indicate that the sequence number is unknown.  </t><t>An 
AODVv2 router MUST only attach its own sequence number to information about a 
route to one of its configured Router Clients.  All route messages regenerated 
by other routers retain the originator's sequence number. Therefore, when two 
pieces of information about a route are received, they both contain a sequence 
number from the originating router. Comparing the sequence number will identify 
which information is stale. The previously stored sequence number is subtracted 
from the incoming sequence number. The result of the subtraction is to be 
interpreted as a signed 16-bit integer, and if less than zero, the information 
in the new AODVv2 message is stale and MUST be discarded.  </t><t>This, along 
with the processes in <xref target="test" pageno="false" format="default"/>, 
ensures loop freedom.  </t><t>An AODVv2 router SHOULD maintain its sequence 
number in persistent storage. If the sequence number is lost, the router MUST 
follow the procedure in <xref target="boot" pageno="false" format="default"/> 
to safely resume routing operations with a new sequence number.  
</t></section><section title="Local Route Set" anchor="rte" 
toc="default"><t>All AODVv2 routers MUST maintain a Local Route Set, containing 
information about routes learned from AODVv2 route messages. The Local Route 
Set is stored separately from the Routing Information Base, and the Routing 
Information Base is updated using information from the Local Route Set. 
Alternatively, implementations MAY choose to modify the Routing Information 
Base directly.  </t><t>Routes learned from AODVv2 route messages are referred 
to in this document as LocalRoutes, and MUST contain the following information: 
</t><t><list style="hanging"><t hangText="LocalRoute.Address"><vspace 
blankLines="0"/>An address, which, when combined with LocalRoute.PrefixLength, 
describes the set of destination addresses this route includes.  </t><t 
hangText="LocalRoute.PrefixLength"><vspace blankLines="0"/>The prefix length, 
in bits, associated with LocalRoute.Address.  </t><t 
hangText="LocalRoute.SeqNum"><vspace blankLines="0"/>The sequence number 
associated with LocalRoute.Address, obtained from the last route message that 
successfully updated this entry.  </t><t hangText="LocalRoute.NextHop"><vspace 
blankLines="0"/>The source IP address of the IP packet containing the AODVv2 
message advertising the route to LocalRoute.Address, i.e. an IP address of the 
AODVv2 router used for the next hop on the path toward LocalRoute.Address.  
</t><t hangText="LocalRoute.NextHopInterface"><vspace blankLines="0"/>The 
interface used to send IP packets toward LocalRoute.Address.  </t><t 
hangText="LocalRoute.LastUsed"><vspace blankLines="0"/>If this route is 
installed in the Routing Information Base, the time it was last used to forward 
an IP packet.  </t><t hangText="LocalRoute.LastSeqNumUpdate"><vspace 
blankLines="0"/>The time LocalRoute.SeqNum was last updated.  </t><t 
hangText="LocalRoute.ExpirationTime"><vspace blankLines="0"/>The time at which 
this LocalRoute MUST be marked as Invalid. An AODVv2 router MAY be offered a 
route for a limited time. In this case, the route is referred to as a timed 
route. If a route is not timed, LocalRoute.ExpirationTime is INFINITY_TIME.  
</t><t hangText="LocalRoute.MetricType"><vspace blankLines="0"/>The type of 
metric associated with this route.  </t><t hangText="LocalRoute.Metric"><vspace 
blankLines="0"/>The cost of the route toward LocalRoute.Address expressed in 
units consistent with LocalRoute.MetricType.  </t><t 
hangText="LocalRoute.State"><vspace blankLines="0"/>The last known state 
(Unconfirmed, Idle, Active, or Invalid) of the route.  </t><t 
hangText="LocalRoute.Precursors (optional feature)"><vspace blankLines="0"/>A 
list of upstream neighbors using the route (see <xref target="precursor" 
pageno="false" format="default"/>).  </t></list></t><t>There are four possible 
states for a LocalRoute: </t><t><list style="hanging"><t 
hangText="Unconfirmed"><vspace blankLines="0"/>A route learned from a Route 
Request message, which has not yet been confirmed as bidirectional. It MUST NOT 
be used for forwarding IP packets, and therefore it is not referred to as a 
valid route.  </t><t hangText="Idle"><vspace blankLines="0"/>A route which has 
been learned from a route message, and has also been confirmed, but has not 
been used in the last ACTIVE_INTERVAL. It is able to be used for forwarding IP 
packets, and therefore it is referred to as a valid route.  </t><t 
hangText="Active"><vspace blankLines="0"/>A route which has been learned from a 
route message, and has also been confirmed, and has been used in the last 
ACTIVE_INTERVAL. It is able to be used for forwarding IP packets, and therefore 
it is referred to as a valid route.  </t><t hangText="Invalid"><vspace 
blankLines="0"/>A route which has expired or been lost. It MUST NOT be used for 
forwarding IP packets, and therefore it is not referred to as a valid route. 
Invalid routes contain sequence number information which allows incoming 
information to be assessed for freshness.  </t></list></t><t>When the Local 
Route Set is stored separately from the Routing Information Base, routes are 
added to the Routing Information Base when LocalRoute.State is valid (set to 
Active or Idle), and removed from the Routing Information Base LocalRoute.State 
becomes Invalid.  </t><t>Changes to LocalRoute state are detailed in <xref 
target="routestatechanges" pageno="false" format="default"/>.  </t><t>Note that 
multiple entries for the same address, prefix length and metric type may exist 
in the Local Route Set, but only one will be a valid entry. Any others will be 
Unconfirmed, but may offer improvement to the existing valid route, if they can 
be confirmed as valid routes (see <xref target="nexthopmonitoring" 
pageno="false" format="default"/>).  </t><t>Multiple valid routes for the same 
address and prefix length but for different metric types may exist in the Local 
Route Set, but the decision of which of these routes to install in the Routing 
Information Base to use for forwarding is outside the scope of AODVv2.  
</t></section><section title="Multicast Route Message Table" 
anchor="rtemsgtable" toc="default"><t>A route message (RteMsg) is either a 
Route Request or Route Reply message. RREQ messages are multicast by default 
and regenerated multiple times, and RREP messages may be multicast when the 
link to the next router is not known to be bidirectional. Multiple similar 
route messages might be received by any one router during one route discovery 
attempt. The AODVv2 router does not need to regenerate or respond to every one 
of these messages.  </t><t>The Multicast Route Message Table is a conceptual 
table which contains information about previously received multicast route 
messages, so that incoming route messages can be compared with previously 
received messages to determine if the incoming information is redundant, and 
the router can avoid sending redundant control traffic.  </t><t>Multicast Route 
Message Table entries MUST contain the following information: </t><t><list 
style="hanging"><t hangText="RteMsg.MessageType"><vspace blankLines="0"/>Either 
RREQ or RREP.  </t><t hangText="RteMsg.OrigAddr"><vspace blankLines="0"/>The 
source address of the IP packet triggering the route request.  </t><t 
hangText="RteMsg.OrigPrefixLen"><vspace blankLines="0"/>The prefix length 
associated with RteMsg.OrigAddr, originally from the Router Client entry on 
RREQ_Gen which includes RteMsg.OrigAddr.  </t><t 
hangText="RteMsg.TargAddr"><vspace blankLines="0"/>The destination address of 
the IP packet triggering the route request.  </t><t 
hangText="RteMsg.TargPrefixLen"><vspace blankLines="0"/>The prefix length 
associated with RteMsg.TargAddr, originally from the Router Client entry on 
RREP_Gen which includes RteMsg.TargAddr.  </t><t 
hangText="RteMsg.OrigSeqNum"><vspace blankLines="0"/>The sequence number 
associated with the route to OrigAddr, if RteMsg is an RREQ.  </t><t 
hangText="RteMsg.TargSeqNum"><vspace blankLines="0"/>The sequence number 
associated with the route to TargAddr, if present in the RteMsg.  </t><t 
hangText="RteMsg.MetricType"><vspace blankLines="0"/>The metric type of the 
route requested.  </t><t hangText="RteMsg.Metric"><vspace blankLines="0"/>The 
metric value received in the RteMsg.  </t><t 
hangText="RteMsg.Timestamp"><vspace blankLines="0"/>The last time this 
Multicast Route Message Table entry was updated.  </t><t 
hangText="RteMsg.RemoveTime"><vspace blankLines="0"/>The time at which this 
entry MUST be removed from the Multicast Route Message Table. This is set to 
CurrentTime + MAX_SEQNUM_LIFETIME, whenever the sequence number of this entry 
(RteMsg.OrigSeqNum for an RREQ, or RteMsg.TargSeqNum for an RREP) is updated.  
</t></list></t><t>The Multicast Route Message Table is maintained so that no 
two entries have the same MessageType, OrigAddr, TargAddr, and MetricType. See 
<xref target="suppress" pageno="false" format="default"/> for details about 
updating this table.  </t></section></section><section title="Metrics" 
anchor="metrics" toc="default"><t>Metrics measure a cost or quality associated 
with a route or a link, e.g., latency, delay, financial cost, energy, etc. 
Metric values are reported in Route Request and Route Reply messages.  
</t><t>In Route Request messages, the metric describes the cost of the route 
from OrigAddr (and any other addresses included in the prefix length of 
RREQ_Gen's Router Client entry for OrigAddr) to the router sending the Route 
Request. For RREQ_Gen, this is the cost associated with the Router Client entry 
which includes OrigAddr. For routers which regenerate the RREQ, this is the 
cost from OrigAddr to the regenerating router, combining the metric value from 
the received RREQ message with knowledge of the link cost from the sender to 
the receiver, i.e., the incoming link cost. This updated route cost is included 
when regenerating the Route Request message, and used to install a route back 
toward OrigAddr.  </t><t>Similarly, in Route Reply messages, the metric 
reflects the cost of the route from TargAddr (and any other addresses included 
in the prefix length of RREP_Gen's Router Client entry for TargAddr) to the 
router sending the Route Reply. For RREP_Gen, this is the cost associated with 
the Router Client entry which includes TargAddr. For routers which regenerate 
the RREP, this is the cost from TargAddr to the regenerating router, combining 
the metric value from the received RREP message with knowledge of the link cost 
from the sender to the receiver, i.e., the incoming link cost. This updated 
route cost is included when regenerating the Route Reply message, and used to 
install a route back toward TargAddr.  </t><t>Assuming link metrics are 
symmetric, the cost of the routes installed in the Local Route Set at each 
router will be correct. The route discovered is optimised for the requesting 
router, and the return path may not be the optimal route.  </t><t>AODVv2 
enables the use of multiple metric types. Each route discovery attempt 
indicates the metric type which is requested for the route. Only one metric 
type MUST be used in each route discovery attempt. However, routes to a single 
destination might be requested and created in the Local Route Set for multiple 
metric types. The decision of which of these routes to install in the Routing 
Information Base to use for forwarding is outside the scope of AODVv2.  
</t><t>For each MetricType, AODVv2 requires: </t><t><list style="symbols"><t>A 
MetricType number, to indicate the metric type of a route.  MetricType numbers 
allocated are detailed in <xref target="metric-type" pageno="false" 
format="default"/>.  </t><t>A maximum value, denoted MAX_METRIC[MetricType]. 
This MUST always be the maximum expressible metric value of type MetricType. 
Field lengths associated with metric values are found in <xref 
target="metric-type" pageno="false" format="default"/>. If the cost of a route 
exceeds MAX_METRIC[MetricType], the route is ignored.  </t><t>A function for 
incoming link cost, denoted Cost(L). Using incoming link costs means that the 
route learned has a path optimized for the direction from OrigAddr to TargAddr. 
 </t><t>A function for route cost, denoted Cost(R).  </t><t>A function to 
analyze routes for potential loops based on metric information, denoted 
LoopFree(R1, R2). LoopFree verifies that a route R2 is not a sub-section of 
another route R1. An AODVv2 router invokes LoopFree() as part of the process in 
<xref target="test" pageno="false" format="default"/>, when an advertised route 
(R1) and an existing LocalRoute (R2) have the same destination address, metric 
type, and sequence number. LoopFree returns FALSE to indicate that an 
advertised route is not to be used to update a stored LocalRoute, as it may 
cause a routing loop. In the case where the existing LocalRoute is Invalid, it 
is possible that the advertised route includes the existing LocalRoute and came 
from a router which did not yet receive notification of the route becoming 
Invalid, so the advertised route should not be used to update the Local Route 
Set, in case it forms a loop to a broken route.  </t></list></t><t>AODVv2 
currently supports cost metrics where Cost(R) is strictly increasing, by 
defining: </t><t><list style="symbols"><t>Cost(R) := Sum of Cost(L) of each 
link in the route </t><t>LoopFree(R1, R2) := ( Cost(R1) &lt;= Cost(R2) ) 
</t></list></t><t>Implementers MAY consider other metric types, but the 
definitions of Cost and LoopFree functions for such types are undefined, and 
interoperability issues need to be considered.  </t></section><section 
title="AODVv2 Protocol Operations" anchor="aodv_ops" toc="default"><t>The 
AODVv2 protocol's operations include managing sequence numbers, monitoring next 
hop AODVv2 routers on discovered routes and updating the Neighbor Table, 
performing route discovery and dealing with requests from other routers, 
processing incoming route information and updating the Local Route Set, 
updating the Multicast Route Message Table and suppressing redundant messages, 
and reporting broken routes. These processes are discussed in detail in the 
following sections.  </t><section title="Initialization" anchor="boot" 
toc="default"><t>During initialization where an AODVv2 router does not have 
information about its previous sequence number, or if its sequence number is 
lost at any point, the router resets its sequence number to one (1). However, 
other AODVv2 routers may still hold sequence number information that this 
router previously issued. Since sequence number information is removed if there 
has been no update to the sequence number in MAX_SEQNUM_LIFETIME, the 
initializing router MUST wait for MAX_SEQNUM_LIFETIME before it creates any 
messages containing its new sequence number. It can then be sure that the 
information it sends will not be considered stale.  </t><t>Until 
MAX_SEQNUM_LIFETIME after its sequence number is reset, the router SHOULD NOT 
create RREQ or RREP messages.  </t><t>During this wait period, the router is 
permitted to do the following: </t><t><list style="symbols"><t>Process 
information in a received RREQ or RREP message to learn a route to the 
originator or target of that route discovery </t><t>Regenerate a received RREQ 
or RREP </t><t>Send an RREP_Ack </t><t>Maintain valid routes in the Local Route 
Set </t><t>Create, process and regenerate RERR messages 
</t></list></t></section><section title="Next Hop Monitoring" 
anchor="nexthopmonitoring" toc="default"><t>AODVv2 routers MUST NOT establish 
routes over uni-directional links. Consider the following. An RREQ is forwarded 
toward TargAddr, and intermediate routers create a LocalRoute corresponding to 
OrigAddr. An RREP arrives to be forwarded toward OrigAddr, but the link to the 
next hop toward OrigAddr is uni-directional. The RREP sent toward OrigAddr 
using this link would not reach the next hop, and would therefore never reach 
RREQ_Gen. End-to-end route establishment will fail. If the route discovery is 
retried by RREQ_Gen, the same will happen. Further, if an intermediate router 
used the route toward OrigAddr to forward data traffic, the data packets would 
be lost.  </t><t>AODVv2 provides a mechanism for testing bidirectional 
connectivity during route discovery, and blacklisting routers where 
bidirectional connectivity is not available. If a route discovery is retried by 
RREQ_Gen, the blacklisted routers can be excluded from the process, and a 
different route can be discovered.  Further, a route is not to be used for 
forwarding until the bidirectionality of the link to the next hop is confirmed. 
AODVv2 routers do not need to monitor bidirectionality for links to neighboring 
routers which are not used as next hops on routes in the Local Route Set.  
</t><t><list style="symbols"><t>For the next hop router on the route toward 
OrigAddr, the approach for testing bidirectional connectivity is to request 
acknowledgement of Route Reply messages. Receipt of an acknowledgement proves 
that bidirectional connectivity exists.  All AODVv2 routers MUST support this 
process, which is explained in <xref target="RREP_msgs" pageno="false" 
format="default"/> and <xref target="rrep_ack_msgs" pageno="false" 
format="default"/>. A link to a neighbor is determined to be unidirectional if 
a requested acknowledgement is not received within RREP_Ack_SENT_TIMEOUT, or 
bidirectional if the acknowledgement is received within the timeout.  
</t><t>For the next hop router on the route toward TargAddr, receipt of the 
Route Reply message containing the route to TargAddr is confirmation of 
bidirectionality, since a Route Reply message is a reply to a Route Request 
message which previously crossed the link in the opposite direction.  
</t></list></t><t>To assist with next hop monitoring, a Neighbor Table (<xref 
target="nbrlist" pageno="false" format="default"/>) is maintained. When an RREQ 
or RREP is received from an IP address which does not already have an entry in 
the Neighbor Table, a new entry is created as described in <xref 
target="nbrupdate" pageno="false" format="default"/>. While the value of 
Neighbor.State is Unknown, acknowledgement of RREP messages sent to that 
neighbor MUST be requested. If an acknowledgement is not received within the 
timeout period, the neighbor MUST have Neighbor.State set to Blacklisted. If an 
acknowledgement is received within the timeout period, Neighbor.State is set to 
Confirmed. While the value of Neighbor.State is Confirmed, the request for an 
acknowledgement of any other RREP message is unnecessary.  </t><t>When routers 
perform other operations such as those from the list below, these MAY be used 
as additional indications of connectivity: </t><t><list style="symbols"><t>NHDP 
HELLO Messages <xref target="RFC6130" pageno="false" format="default"/> 
</t><t>Route timeout </t><t>Lower layer triggers, e.g. message reception or 
link status notifications </t><t>TCP timeouts </t><t>Promiscuous listening 
</t><t>Other monitoring mechanisms or heuristics </t></list></t><t>If such an 
external process signals that the link to a neighbor is bidirectional, the 
AODVv2 router MAY update the matching Neighbor Table entry by changing the 
value of Neighbor.State to Confirmed.  If an external process signals that a 
link is not bidirectional, the value of Neighbor.State MAY be changed to 
Blacklisted. If an external process signals that the link might not be 
bidirectional, and the value of Neighbor.State is currently Confirmed, it MAY 
be set to Unknown.  </t><t>For example, receipt of a Neighborhood Discovery 
Protocol HELLO message with the receiving router listed as a neighbor is a 
signal of bidirectional connectivity. The AODVv2 router MAY update the matching 
Neighbor Table entry by changing the value of Neighbor.State to Confirmed.  
</t><t>Similarly, if AODVv2 receives notification of a timeout, for example, 
from TCP or some other protocol, this may be due to a disconnection. The AODVv2 
router MAY update the matching Neighbor Table entry by setting the value of 
Neighbor.State to Unknown.  </t></section><section title="Neighbor Table 
Update" anchor="nbrupdate" toc="default"><t>On receipt of an RREQ or RREP 
message, the Neighbor Table MUST be checked for an entry with 
Neighbor.IPAddress which matches the source IP address of the message. If no 
matching entry is found, a new entry is created.  </t><t>A new Neighbor Table 
entry is created as follows: </t><t><list style="symbols"><t>Neighbor.IPAddress 
:= Source IP address of the received route message </t><t>Neighbor.State := 
Unknown </t><t>Neighbor.ResetTime := INFINITY_TIME </t></list></t><t>If the 
message is an RREP which answers a recently sent RREQ, or an RREP_Ack which 
answers a recently sent RREP, the link to the neighbor is bidirectional and the 
Neighbor Table entry is updated as follows: </t><t><list 
style="symbols"><t>Neighbor.State := Confirmed </t><t>Neighbor.ResetTime := 
INFINITY_TIME </t></list></t><t>If an RREP_Ack is not received within the 
expected time, the link is considered to be uni-directional and the Neighbor 
Table entry is updated as follows: </t><t><list 
style="symbols"><t>Neighbor.State := Blacklisted </t><t>Neighbor.ResetTime := 
CurrentTime + MAX_BLACKLIST_TIME </t></list></t><t>When the Neighbor.ResetTime 
is reached, the Neighbor Table entry is updated as follows: </t><t><list 
style="symbols"><t>Neighbor.State := Unknown </t></list></t><t>When a link to a 
neighbor is determined to be broken, the Neighbor Table entry SHOULD be 
removed.  </t><t>Route requests from neighbors with Neighbor.State set to 
Blacklisted are ignored to avoid persistent IP packet loss or protocol 
failures. However, Neighbor.ResetTime allows the neighbor to again be allowed 
to participate in route discoveries after MAX_BLACKLIST_TIME, in case the link 
between the routers has become bidirectional.  </t></section><section 
title="Interaction with the Forwarding Plane" anchor="fwdplane" 
toc="default"><t>A reactive routing protocol only reacts when a route is 
needed, i.e., when an application tries to send a packet and the forwarding 
plane has no route to the destination of the packet.  </t><t>AODVv2 requires 
signals from the forwarding plane: </t><t><list style="symbols"><t>A packet 
cannot be forwarded because a route is unavailable: AODVv2 needs to know the 
source and destination IP addresses of the packet, to determine if the source 
of the packet is configured as a Router Client, in which case the router should 
initiate route discovery. If it is not a Router Client, the router should 
create a Route Error message.  </t><t>A packet is to be forwarded: AODVv2 needs 
to check the state of the route to deal with timeouts to ensure the route is 
still valid.  </t><t>Packet forwarding succeeds: AODVv2 needs to update the 
record of when a route was last used to forward a packet.  </t><t>Packet 
forwarding failure occurs: AODVv2 needs to create a Route Error message.  
</t></list></t><t>AODVv2 needs to send signals to the forwarding plane: 
</t><t><list style="symbols"><t>A route discovery is in progress: buffering 
might be configured for packets requiring a route, while route discovery is 
attempted.  </t><t>A route discovery failed: any buffered packets requiring 
that route should be discarded, and the source of the packet should be notified 
that the destination is unreachable (using an ICMP Destination Unreachable 
message). Route discovery fails if an RREQ cannot be generated because the 
control message generation limit has been reached, or if an RREP is not 
received within the expected time.  </t><t>A route discovery is not permitted: 
any buffered packets requiring that route should be discarded. A route 
discovery will not be attempted if the source address of the packet needing a 
route is not configured as a Router Client.  </t><t>A route discovery 
succeeded: install a corresponding route into the Routing Information Base and 
begin transmitting any buffered packets.  </t><t>A route has been made invalid: 
remove the corresponding route from the Routing Information Base.  </t><t>A 
route has been updated: update the corresponding route in the Routing 
Information Base.  </t></list></t><t>These are conceptual signals, and can be 
implemented in various ways. Conformant implementations of AODVv2 are not 
mandated to implement the forwarding plane separately from the control plane or 
data plane; these signals and interactions are identified simply as assistance 
for implementers who may find them useful.  </t></section><section 
title="Message Transmission" anchor="MsgXmit" toc="default"><t>AODVv2 sends 
<xref target="RFC5444" pageno="false" format="default"/> formatted messages 
using the parameters for port number and IP protocol specified in <xref 
target="RFC5498" pageno="false" format="default"/>. Mapping of AODVv2 data to 
<xref target="RFC5444" pageno="false" format="default"/> messages is detailed 
in <xref target="represent" pageno="false" format="default"/>. AODVv2 multicast 
messages are sent to the link-local multicast address LL-MANET-Routers <xref 
target="RFC5498" pageno="false" format="default"/>. All AODVv2 routers MUST 
subscribe to LL-MANET-Routers on all AODVv2 interfaces <xref target="RFC5498" 
pageno="false" format="default"/> to receive AODVv2 messages. Note that 
multicast messages MAY be sent via unicast. For example, this may occur for 
certain link-types (non-broadcast media), for manually configured router 
adjacencies, or in order to improve robustness.  </t><t>When multiple 
interfaces are available, an AODVv2 router transmitting a multicast message to 
LL-MANET-Routers MUST send the message on all interfaces that have been 
configured for AODVv2 operation, as given in the AODVv2_INTERFACES list (<xref 
target="interfaceslist" pageno="false" format="default"/>).  </t><t>To avoid 
congestion, each AODVv2 router's rate of message generation SHOULD be limited 
(CONTROL_TRAFFIC_LIMIT) and administratively configurable. To prioritize 
transmission of AODVv2 control messages in order to respect the 
CONTROL_TRAFFIC_LIMIT: </t><t><list style="symbols"><t>Highest priority SHOULD 
be given to RREP_Ack messages. This allows links between routers to be 
confirmed as bidirectional and avoids undesirable blacklisting of next hop 
routers.  </t><t>Second priority SHOULD be given to RERR messages for 
undeliverable IP packets, so that broken routes that are still in use by other 
AODVv2 routers can be reported to those routers, to avoid IP data packets being 
repeatedly forwarded to AODVv2 routers which cannot forward them to their 
destination.  </t><t>Third priority SHOULD be given to RREP messages in order 
that RREQs do not time out.  </t><t>RREQ messages SHOULD be given priority over 
RERR messages for newly invalidated routes, since the invalidated routes may 
not still be in use, and if there is an attempt to use the route, a new RERR 
message will be generated.  </t><t>Lowest priority SHOULD be given to RERR 
messages generated in response to RREP messages which cannot be regenerated. In 
this case the route request will be retried at a later point.  
</t></list></t></section><section title="Route Discovery, Retries and 
Buffering" anchor="route_discovery" toc="default"><t>AODVv2's RREQ and RREP 
messages are used for route discovery. RREQ messages are multicast to solicit 
an RREP, whereas RREP is unicast where possible. The constants used in this 
section are defined in <xref target="param" pageno="false" format="default"/>.  
</t><t>When an AODVv2 router needs to forward an IP packet (with source address 
OrigAddr and destination address TargAddr) from one of its Router Clients, it 
needs a route to TargAddr in its Routing Information Base. If no route exists, 
the AODVv2 router generates and multicasts a Route Request message (RREQ) 
containing OrigAddr and TargAddr. The procedure for this is described in <xref 
target="RREQ_gen" pageno="false" format="default"/>. Each generated RREQ 
results in an increment to the router's sequence number. The AODVv2 router 
generating an RREQ is referred to as RREQ_Gen.  </t><t>Buffering might be 
configured for IP packets awaiting a route for forwarding by RREQ_Gen, if 
sufficient memory is available.  Buffering of IP packets might have both 
positive and negative effects. Real-time traffic, voice, and scheduled delivery 
may suffer if packets are buffered and subjected to delays, but TCP connection 
establishment will benefit if packets are queued while route discovery is 
performed <xref target="Koodli01" pageno="false" format="default"/>. If packets 
are not queued, no notification should be sent to the source. Determining which 
packets to discard first when the buffer is full is a matter of policy at each 
AODVv2 router.  </t><t>RREQ_Gen awaits reception of a Route Reply message 
(RREP) containing a route toward TargAddr. If a valid route to TargAddr is not 
learned within RREQ_WAIT_TIME, RREQ_Gen will retry the route discovery. To 
reduce congestion in a network, repeated attempts at route discovery for a 
particular target address utilize a binary exponential backoff: for each 
additional attempt, the time to wait for receipt of the RREP is multiplied by 
2. If the requested route is not learned within the wait period, another RREQ 
is sent, up to a total of DISCOVERY_ATTEMPTS_MAX. This is the same technique 
used in AODV <xref target="RFC3561" pageno="false" format="default"/>.  
</t><t>The RREQ is received by neighboring AODVv2 routers, and processed and 
regenerated as described in <xref target="RREQ_msgs" pageno="false" 
format="default"/>.  Routers learn a potential route to OrigAddr (and other 
addresses as indicated by OrigPrefixLen) from the RREQ and store it in the 
Local Route Set. The router responsible for TargAddr responds by generating a 
Route Reply message (RREP) and sends it back toward RREQ_Gen via the next hop 
on the potential route to OrigAddr. Each intermediate router learns the route 
to TargAddr (and other addresses as indicated by TargPrefixLen), regenerates 
the RREP and sends toward OrigAddr.  </t><t>Links which are not bidirectional 
cause problems. If a link is unavailable in the direction toward OrigAddr, an 
RREP is not received at the next hop, so cannot be regenerated, and it will 
never reach RREQ_Gen. However, since routers monitor bidirectionality to next 
hops (<xref target="nexthopmonitoring" pageno="false" format="default"/>), the 
loss of the RREP will cause the last router which regenerated the RREP to 
blacklist the router which did not receive it. Later, a timeout occurs at 
RREQ_Gen, and a new RREQ is generated. If the new RREQ arrives via the 
blacklisted router, it will be ignored, enabling the RREQ, if also received 
from a different neighbor, to discover a different path toward TargAddr.  
</t><t>Route discovery is considered to have failed after 
DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for an RREP response to 
the final RREQ. After the attempted route discovery has failed, RREQ_Gen waits 
at least RREQ_HOLDDOWN_TIME before attempting another route discovery to the 
same destination, in order to avoid repeatedly generating control traffic that 
is unlikely to discover a route. Any IP packets buffered for TargAddr are also 
dropped and a Destination Unreachable ICMP message (Type 3) with a code of 1 
(Host Unreachable Error) is delivered to the source of the packet, so that the 
application knows about the failure. The source might be an application on 
RREQ_Gen itself, or on a difference device.  </t><t>If RREQ_Gen does receive a 
route message containing a route to TargAddr within the timeout, it processes 
the message according to <xref target="aodv_msgs" pageno="false" 
format="default"/>. When a valid LocalRoute entry is created in the Local Route 
Set, the route is also installed in the Routing Information Base, and the 
router will begin sending the buffered IP packets. Any retry timers for the 
corresponding RREQ are then cancelled.  </t><t>During route discovery, all 
routers on the path learn a route to both OrigAddr and TargAddr, so that routes 
are constructed in both directions. The route is optimized for the forward 
route.  </t></section><section title="Processing Received Route Information" 
anchor="processingrte" toc="default"><t>All AODVv2 route messages contain a 
route. A Route Request (RREQ) contains a route toward OrigAddr (and other 
addresses as indicated by OrigPrefixLen), and a Route Reply (RREP) contains a 
route toward TargAddr (and other addresses as indicated by TargPrefixLen). All 
AODVv2 routers that receive a route message are able to store the route 
contained within it in their Local Route Set. Incoming information is first 
checked to verify that it is both safe to use and offers an improvement to 
existing information, as explained in <xref target="test" pageno="false" 
format="default"/>. The Local Route Set MAY then be updated according to <xref 
target="update_rte" pageno="false" format="default"/>.  </t><t>In the processes 
below, RteMsg is used to denote the route message, AdvRte is used to denote the 
route contained within it, and LocalRoute denotes an existing entry in the 
Local Route Set which matches AdvRte on address, prefix length, and metric 
type.  </t><t>AdvRte has the following properties: </t><t><list 
style="symbols"><t>AdvRte.Address := network address given by combining 
RteMsg.OrigAddr and RteMsg.OrigPrefixLen (in RREQ) or RteMsg.TargAddr and 
RteMsg.TargPrefixLen (in RREP) </t><t>AdvRte.PrefixLength := 
RteMsg.OrigPrefixLen (in RREQ) or RteMsg.TargPrefixLen (in RREP). If no prefix 
length was included in RteMsg, prefix length is the address length, in bits, of 
RteMsg.OrigAddr (in RREQ) or RteMsg.TargAddr (in RREP) </t><t>AdvRte.SeqNum := 
RteMsg.OrigSeqNum (in RREQ) or RteMsg.TargSeqNum (in RREP) 
</t><t>AdvRte.NextHop := RteMsg.IPSourceAddress (an address of the router from 
which the RteMsg was received) </t><t>AdvRte.MetricType := RteMsg.MetricType 
</t><t>AdvRte.Metric := RteMsg.Metric </t><t>AdvRte.Cost := Cost(R) using the 
cost function associated with the route's metric type, i.e. Cost(R) = 
AdvRte.Metric + Cost(L), as described in <xref target="metrics" pageno="false" 
format="default"/>, where L is the link from the advertising router 
</t><t>AdvRte.ValidityTime := RteMsg.ValidityTime, if included 
</t></list></t><section title="Evaluating Route Information" anchor="test" 
toc="default"><t>An incoming advertised route (AdvRte) is compared to existing 
LocalRoutes to determine whether the advertised route is to be used to update 
the AODVv2 Local Route Set. The incoming route information MUST be processed as 
follows: </t><t><list style="numbers"><t>Search for LocalRoutes in the Local 
Route Set matching AdvRte's address, prefix length and metric type <list 
style="symbols"><t>If no matching LocalRoute exists, AdvRte MUST be used to 
update the Local Route Set.  </t><t>If matching LocalRoutes are found, continue 
to Step 2.  </t></list> </t><t>Compare sequence numbers using the technique 
described in <xref target="seqnum" pageno="false" format="default"/> <list 
style="symbols"><t>If AdvRte is more recent than all matching LocalRoutes, 
AdvRte MUST be used to update the Local Route Set.  </t><t>If AdvRte is stale, 
AdvRte MUST NOT be used to update the Local Route Set.  </t><t>If the sequence 
numbers are equal, continue to Step 3.  </t></list> </t><t>Check that AdvRte is 
safe against routing loops compared to all matching LocalRoutes (see <xref 
target="metrics" pageno="false" format="default"/>) <list style="symbols"><t>If 
LoopFree(AdvRte, LocalRoute) returns FALSE, AdvRte MUST NOT be used to update 
the Local Route Set because using the incoming information might cause a 
routing loop.  </t><t>If LoopFree(AdvRte, LocalRoute) returns TRUE, continue to 
Step 4.  </t></list> </t><t>Compare route costs <list style="symbols"><t>If 
AdvRte is better than all matching LocalRoutes, it SHOULD be used to update the 
Local Route Set because it offers improvement. If it is not used to update the 
Local Route Set, the existing non-optimal LocalRoute will continue to be used, 
causing data traffic to use a non-optimal route.  </t><t>If AdvRte is equal in 
cost and LocalRoute is valid, AdvRte SHOULD NOT be used to update the Local 
Route Set because it will offer no improvement.  </t><t>If AdvRte is worse and 
LocalRoute is valid, AdvRte MUST NOT be used to update the Local Route Set 
because it does not offer any improvement.  </t><t>If AdvRte is not better 
(i.e., it is worse or equal) but LocalRoute is Invalid, AdvRte SHOULD be used 
to update the Local Route Set because it can safely repair the existing Invalid 
LocalRoute.  </t></list> </t></list></t><t>If the advertised route is to be 
used to update the Local Route Set, the procedure in <xref target="update_rte" 
pageno="false" format="default"/> MUST be followed. If not, non-optimal routes 
will remain in the Local Route Set.  </t></section><section title="Applying 
Route Updates" anchor="update_rte" toc="default"><t>After determining that 
AdvRte is to be used to update the Local Route Set (as described in <xref 
target="test" pageno="false" format="default"/>), the following procedure 
applies.  </t><t>If AdvRte is learned from an RREQ message, the link to the 
next hop neighbor may not be confirmed as bidirectional (see <xref 
target="nbrlist" pageno="false" format="default"/>). The route will offer 
improvement to the Local Route Set if the neighbor can be confirmed. If there 
is no existing matching route, AdvRte allows a corresponding RREP to be sent. 
If a matching entry already exists, AdvRte offers potential improvement.  
</t><t>The route update is applied as follows: </t><t><list 
style="numbers"><t>If no existing entry in the Local Route Set matches AdvRte's 
address, prefix length and metric type, continue to Step 4 and create a new 
entry in the Local Route Set.  </t><t>If two matching LocalRoutes exist in the 
Local Route Set, one is a valid route, and one is an Unconfirmed route.  AdvRte 
may offer further improvement to the Unconfirmed route, or may offer an update 
to the valid route.  <list style="symbols"><t>If AdvRte.NextHop's 
Neighbor.State is Unknown, the advertised route may offer improvement to the 
existing valid route, if the link to the next hop can be confirmed as 
bidirectional. Continue processing from Step 5 to update the existing 
Unconfirmed LocalRoute.  </t><t>If AdvRte.NextHop's Neighbor.State is 
Confirmed, the advertised route offers an update or improvement to the existing 
valid route. Continue processing from Step 5 to update the existing valid 
LocalRoute.  </t></list> </t><t>If only one matching LocalRoute exists in the 
Local Route Set: <list style="symbols"><t>If AdvRte.NextHop's Neighbor.State is 
Confirmed, continue processing from Step 5 to update the existing LocalRoute.  
</t><t>If AdvRte.NextHop's Neighbor.State is Unknown, AdvRte may offer 
improvement the existing LocalRoute, if the link to AdvRte.NextHop can be 
confirmed as bidirectional.  </t><t>If LocalRoute.State is Unconfirmed, AdvRte 
is an improvement to an existing Unconfirmed route. Continue processing from 
Step 5 to update the existing LocalRoute.  </t><t>If LocalRoute.State is 
Invalid, AdvRte can replace the existing LocalRoute. Continue processing from 
Step 5 to update the existing LocalRoute.  </t><t>If LocalRoute.State is Active 
or Idle, AdvRte SHOULD be stored as an additional entry in the Local Route Set, 
with LocalRoute.State set to Unconfirmed. Continue processing from Step 4 to 
create a new LocalRoute.  </t></list> </t><t>Create an entry in the Local Route 
Set and initialize as follows: <list style="symbols"><t>LocalRoute.Address := 
AdvRte.Address </t><t>LocalRoute.PrefixLength := AdvRte.PrefixLength 
</t><t>LocalRoute.MetricType := AdvRte.MetricType </t></list> </t><t>Update the 
LocalRoute as follows: <list style="symbols"><t>LocalRoute.SeqNum := 
AdvRte.SeqNum </t><t>LocalRoute.NextHop := AdvRte.NextHop 
</t><t>LocalRoute.NextHopInterface := interface on which RteMsg was received 
</t><t>LocalRoute.Metric := AdvRte.Cost </t><t>LocalRoute.LastUsed := 
CurrentTime </t><t>LocalRoute.LastSeqNumUpdate := CurrentTime 
</t><t>LocalRoute.ExpirationTime := CurrentTime + AdvRte.ValidityTime if a 
validity time exists, otherwise INFINITY_TIME </t></list> </t><t>If a new 
LocalRoute was created, or if the existing LocalRoute.State is Invalid or 
Unconfirmed, update LocalRoute as follows: <list 
style="symbols"><t>LocalRoute.State := Unconfirmed (if the next hop's 
Neighbor.State is Unknown) </t><t>LocalRoute.State := Idle (if the next hop's 
Neighbor.State is Confirmed) </t></list> </t><t>If an existing LocalRoute.State 
changed from Invalid or Unconfirmed to become Idle, any matching Unconfirmed 
LocalRoute with worse metric value SHOULD be expunged.  </t><t>If an existing 
LocalRoute was updated with a better metric value, any matching Unconfirmed 
LocalRoute with worse metric value SHOULD be expunged.  </t><t>If this update 
results in LocalRoute.State of Active or Idle, which matches a route request 
which is still in progress, the associated route request retry timers can be 
cancelled.  </t></list></t><t>If this update to the Local Route Set results in 
two LocalRoutes to the same address, the best LocalRoute will be Unconfirmed. 
In order to improve the route used for forwarding, the router SHOULD try to 
determine if the link to the next hop of that LocalRoute is bidirectional, by 
using that LocalRoute to forward future RREPs and request acknowledgements (see 
<xref target="RREP_gen" pageno="false" format="default"/>).  
</t></section></section><section title="Suppressing Redundant Messages Using 
the Multicast Route Message Table" anchor="suppress" toc="default"><t>When 
route messages are flooded in a MANET, an AODVv2 router may receive multiple 
similar messages. Regenerating every one of these gives little additional 
benefit, and generates unnecessary signaling traffic and might generate 
unnecessary interference.  </t><t>Each AODVv2 router stores information about 
recently received route messages in the AODVv2 Multicast Route Message Table 
(<xref target="rtemsgtable" pageno="false" format="default"/>).  </t><t>To 
create a Multicast Route Message Table Entry: </t><t><list 
style="symbols"><t>RteMsg.MessageType := RREQ or RREP </t><t>RteMsg.OrigAddr := 
OrigAddr from the message </t><t>RteMsg.OrigPrefixLen := the prefix length 
associated with OrigAddr </t><t>RteMsg.TargAddr := TargAddr from the message 
</t><t>RteMsg.TargPrefixLen := the prefix length associated with TargAddr 
</t><t>RteMsg.OrigSeqNum := the sequence number associated with OrigAddr, if 
present in the message </t><t>RteMsg.TargSeqNum := the sequence number 
associated with TargAddr, if present in the message </t><t>RteMsg.MetricType := 
the metric type of the route requested </t><t>RteMsg.Metric := the metric value 
associated with OrigAddr in an RREQ or TargAddr in an RREP 
</t><t>RteMsg.Timestamp := CurrentTime </t><t>RteMsg.RemoveTime := CurrentTime 
+ MAX_SEQNUM_LIFETIME </t></list></t><t>Entries in the Multicast Route Message 
Table SHOULD be maintained for at least RteMsg_ENTRY_TIME after the last 
Timestamp update in order to account for long-lived RREQs traversing the 
network. An entry MUST be deleted when the sequence number is no longer valid, 
i.e., after MAX_SEQNUM_LIFETIME. Memory-constrained devices MAY remove the 
entry before this time.  </t><t>Received route messages are tested against 
previously received route messages, and if determined to be redundant, 
regeneration or response can be avoided.  </t><t>To determine if a received 
message is redundant: </t><t><list style="numbers"><t>Search for an entry in 
the Multicast Route Message Table with the same MessageType, OrigAddr, 
TargAddr, and MetricType <list style="symbols"><t>If there is no entry, the 
message is not redundant.  </t><t>If there is an entry, continue to Step 2.  
</t></list> </t><t>Compare sequence numbers using the technique described in 
<xref target="seqnum" pageno="false" format="default"/> <list 
style="symbols"><t>For RREQ messages, use OrigSeqNum of the entry for 
comparison. For RREP messages, use TargSeqNum of the entry for comparison.  
</t><t>If the entry has an older sequence number than the received message, the 
message is not redundant.  </t><t>If the entry has a newer sequence number than 
the received message, the message is redundant.  </t><t>If the entry has the 
same sequence number, continue to Step 3.  </t></list> </t><t>Compare the 
metric values <list style="symbols"><t>If the entry has a Metric value that is 
worse than or equal to the metric in the received message, the message is 
redundant.  </t><t>If the entry has a Metric value that is better than the 
metric in the received message, the message is not redundant.  </t></list> 
</t></list></t><t>If the message is redundant, update the Timestamp and 
RemoveTime on the entry, since matching route messages are still traversing the 
network and this entry should be maintained. This message MUST NOT be 
regenerated or responded to.  </t><t>If the message is not redundant, create an 
entry or update the existing entry.  </t><t>To update a Multicast Route Message 
Table entry, set: </t><t><list style="symbols"><t>RteMsg.OrigSeqNum := the 
sequence number associated with OrigAddr, if present in the received message 
</t><t>RteMsg.TargSeqNum := the sequence number associated with TargAddr, if 
present in the received message </t><t>RteMsg.Metric := the metric value 
associated with OrigAddr in a received RREQ or TargAddr in a received RREP 
</t><t>RteMsg.Timestamp := CurrentTime </t><t>RteMsg.RemoveTime := CurrentTime 
+ MAX_SEQNUM_LIFETIME </t></list></t><t>Where the message is determined not 
redundant before Step 3, it MUST be regenerated or responded to. Where the 
message is determined not redundant in Step 3, it MAY be suppressed to avoid 
extra control traffic. However, since the processing of the message will result 
in an update to the Local Route Set, the message SHOULD be regenerated or 
responded to, to ensure other routers have up-to-date information and the best 
metrics. If not regenerated, the best route may not be found. Where necessary, 
regeneration or response is performed using the processes in <xref 
target="aodv_msgs" pageno="false" format="default"/>.  </t></section><section 
title="Local Route Set Maintenance" anchor="route_maint" toc="default"><t>Route 
maintenance involves monitoring LocalRoutes in the Local Route Set, updating 
LocalRoute.State to handle route timeouts and reporting routes that become 
Invalid.  </t><section title="LocalRoute State Changes" 
anchor="routestatechanges" toc="default"><t>During normal operation, AODVv2 
does not require any explicit timeouts to manage the lifetime of a route. At 
any time, any LocalRoute MAY be examined and updated according to the rules 
below. If timers are not used to prompt updates of LocalRoute.State, the 
LocalRoute.State MUST be checked before IP packet forwarding and before any 
operation based on LocalRoute.State.  </t><t>Route timeout behaviour is as 
follows: </t><t><list style="symbols"><t>An Unconfirmed route MUST be expunged 
at MAX_SEQNUM_LIFETIME after LocalRoute.LastSeqNumUpdate.  </t><t>An Idle route 
MUST become Active when used to forward an IP packet. If the route is not used 
to forward an IP packet within MAX_IDLETIME, LocalRoute.State MUST become 
Invalid.  </t><t>An Active route which is a timed route (i.e., with 
LocalRoute.ExpirationTime not equal to INFINITY_TIME) remains Active until 
LocalRoute.ExpirationTime, after which it MUST become Invalid. If it it not a 
timed route, it MUST become Idle if the route is not used to forward an IP 
packet within ACTIVE_INTERVAL.  </t><t>An Invalid route SHOULD remain in the 
Local Route Set, since LocalRoute.SeqNum is used to classify future information 
about LocalRoute.Address as stale or fresh.  </t><t>In all cases, if the time 
since LocalRoute.LastSeqNumUpdate exceeds MAX_SEQNUM_LIFETIME, 
LocalRoute.SeqNum must be set to zero. This is required to ensure that any 
AODVv2 routers following the initialization procedure can safely begin routing 
functions using a new sequence number, and that their messages will not be 
classified as stale and ignored.  A LocalRoute with LocalRoute.State set to 
Active or Idle can remain in the Local Route Set after removing the sequence 
number, but if LocalRoute.State is Invalid, or later becomes Invalid, the 
LocalRoute MUST be expunged from the Local Route Set.  
</t></list></t><t>LocalRoutes can become Invalid before a timeout occurs: 
</t><t><list style="symbols"><t>If a link breaks, all LocalRoutes using that 
link for LocalRoute.NextHop MUST immediately have LocalRoute.State set to 
Invalid.  </t><t>If a Route Error (RERR) message containing the route is 
received, either from LocalRoute.NextHop, or with PktSource set to a Router 
Client address, LocalRoute.State MUST immediately be set to Invalid.  
</t></list></t><t>LocalRoutes are also updated when Neighbor.State is updated: 
</t><t><list style="symbols"><t>While the value of Neighbor.State is set to 
Unknown, any routes in the Local Route Set using that neighbor as a next hop 
MUST have LocalRoute.State set to Unconfirmed.  </t><t>When the value of 
Neighbor.State is set to Confirmed, the Unconfirmed routes in the Local Route 
Set using that neighbor as a next hop MUST have LocalRoute.State set to Idle. 
Any other matching LocalRoutes with metric values worse than LocalRoute.Metric 
MUST be expunged from the Local Route Set.  </t><t>When the value of 
Neighbor.State is set to Blacklisted, any valid routes in the Local Route Set 
using that neighbor for their next hop MUST have LocalRoute.State set to 
Invalid.  </t><t>When a Neighbor Table entry is removed, all routes in the 
Local Route Set using that neighbor as next hop MUST have LocalRoute.State set 
to Invalid.  </t></list></t><t>In some cases, by setting LocalRoute.State to 
Confirmed when Neighbor.State is set to Confirmed, an issue can occur if data 
packets are forwarded to LocalRoute.Address before the links that form the rest 
of the route are confirmed as bidirectional.  Intermediate routers will not 
have a valid route to forward these data packets, and will generate a Route 
Error message.  This in turn results in routes to that destination being 
removed from other routers. However, subsequent data packets will cause a new 
route discovery attempt to be initiated by the router with the source address 
of the data packet configured as a Router Client.  </t><t>Memory constrained 
devices MAY choose to expunge routes from the AODVv2 Local Route Set before 
LocalRoute.ExpirationTime, but MUST adhere to the following rules: </t><t><list 
style="symbols"><t>An Active route MUST NOT be expunged, as it is in use. If 
deleted, IP traffic forwarded to this router will prompt generation of a Route 
Error message, and it will be necessary for a Route Request to be generated by 
the originator's router to re-establish the route.  </t><t>An Idle route SHOULD 
NOT be expunged, as it is still valid for forwarding IP traffic. If deleted, 
this could result in dropped IP packets and a Route Request could be generated 
to re-establish the route.  </t><t>Any Invalid route MAY be expunged. Least 
recently used Invalid routes SHOULD be expunged first, since the sequence 
number information is less likely to be useful.  </t><t>An Unconfirmed route 
MUST NOT be expunged if it was installed within the last RREQ_WAIT_TIME, 
because it may correspond to a route discovery in progress. A Route Reply 
message might be received which needs to use the LocalRoute.NextHop 
information. Otherwise, it MAY be expunged.  </t></list></t></section><section 
title="Reporting Invalid Routes" anchor="brokenrerr" toc="default"><t>When 
LocalRoute.State changes from Active to Invalid as a result of a broken link or 
a received Route Error (RERR) message, other AODVv2 routers MUST be informed by 
sending an RERR message containing details of the invalidated route.  </t><t>An 
RERR message MUST also be sent when an AODVv2 router receives an IP packet to 
forward on behalf of another router but does not have a valid route in its 
Routing Information Base for the destination of the packet.  </t><t>An RERR 
message MUST also be sent when an AODVv2 router receives an RREP message to 
regenerate, but the LocalRoute to the OrigAddr in the RREP has been lost or is 
marked as Invalid.  </t><t>The packet or message triggering the RERR MUST be 
discarded.  </t><t>Generation of an RERR message is described in <xref 
target="RERR_gen" pageno="false" format="default"/>.  
</t></section></section></section><section title="AODVv2 Protocol Messages" 
anchor="aodv_msgs" toc="default"><t>AODVv2 defines four message types: Route 
Request (RREQ), Route Reply (RREP), Route Reply Acknowledgement (RREP_Ack), and 
Route Error (RERR).  </t><t>Each AODVv2 message is defined as a set of data. 
Rules for the generation, reception and regeneration of each message type are 
described in the following sections.  <xref target="represent" pageno="false" 
format="default"/> discusses how the data is mapped to <xref target="RFC5444" 
pageno="false" format="default"/> Message TLVs, Address Blocks, and Address 
TLVs.  </t><section title="Route Request (RREQ) Message" anchor="RREQ_msgs" 
toc="default"><t>Route Request messages are used in route discovery operations 
to request a route to a specified target address. RREQ messages have the 
following contents: </t><figure anchor="RREQ_elem" align="center" title="RREQ 
message contents" suppress-title="false" alt="" width="" height=""><artwork 
align="center" xml:space="preserve" name="" type="" alt="" width="" height="">
+-----------------------------------------------------------------+
|                           AddressList                           |
+-----------------------------------------------------------------+
|                   PrefixLengthList (optional)                   |
+-----------------------------------------------------------------+
|                OrigSeqNum, (optional) TargSeqNum                |
+-----------------------------------------------------------------+
|                           MetricType                            |
+-----------------------------------------------------------------+
|                           OrigMetric                            |
+-----------------------------------------------------------------+
|                     ValidityTime (optional)                     |
+-----------------------------------------------------------------+
</artwork></figure><t></t><t><list style="hanging"><t 
hangText="AddressList"><vspace blankLines="0"/>Contains OrigAddr and TargAddr, 
the source and destination addresses of the IP packet for which a route is 
requested. OrigAddr and TargAddr MUST be routable unicast addresses.  </t><t 
hangText="PrefixLengthList"><vspace blankLines="0"/>Contains OrigPrefixLen, 
i.e., the length, in bits, of the prefix associated with the Router Client 
entry which includes OrigAddr. If omitted, the prefix length is equal to 
OrigAddr's address length in bits.  </t><t hangText="OrigSeqNum"><vspace 
blankLines="0"/>The sequence number associated with OrigAddr.  </t><t 
hangText="TargSeqNum"><vspace blankLines="0"/>A sequence number associated with 
an existing Invalid route to TargAddr. This MAY be included if available, and 
is useful for the optional Intermediate RREP feature (see <xref target="iRREP" 
pageno="false" format="default"/>).  </t><t hangText="MetricType"><vspace 
blankLines="0"/>The metric type associated with OrigMetric.  </t><t 
hangText="OrigMetric"><vspace blankLines="0"/>The metric value associated with 
the LocalRoute to OrigAddr (and to any other addresses included in the given 
prefix length), as seen from the sender of the message.  </t><t 
hangText="ValidityTime"><vspace blankLines="0"/>The length of time that the 
message sender is willing to offer a route toward OrigAddr (and any other 
addresses included in the given prefix length). Omitted if no time limit is 
imposed.  </t></list></t><section title="RREQ Generation" anchor="RREQ_gen" 
toc="default"><t>An RREQ is generated when an IP packet needs to be forwarded 
for a Router Client, and no valid route currently exists for the packet's 
destination in the Routing Information Base.  </t><t>Before creating an RREQ, 
the router SHOULD check if an RREQ has recently been sent for the requested 
destination. If so, and the wait time for a reply has not yet been reached, the 
router SHOULD continue to await a response without generating a new RREQ. If 
the timeout has been reached, a new RREQ MAY be generated. If buffering is 
configured, incoming IP packets awaiting this route SHOULD be buffered until 
the route discovery is completed.  </t><t>If the limit for the rate of AODVv2 
control message generation has been reached, no message SHOULD be generated. If 
approaching the limit, the message should be sent if the priorities in <xref 
target="MsgXmit" pageno="false" format="default"/> allow it.  </t><t>To 
generate the RREQ, the router (referred to as RREQ_Gen) follows this procedure: 
</t><t><list style="numbers"><t>Set AddressList := {OrigAddr, TargAddr} 
</t><t>For the PrefixLengthList: <list style="symbols"><t>If OrigAddr is part 
of an address range configured as a Router Client, set PrefixLengthList := 
{RouterClient.PrefixLength, null}. This allows receiving routers to learn a 
route to all the addresses included by the prefix length, not only to OrigAddr. 
 </t><t>Otherwise, omit PrefixLengthList.  </t></list> </t><t>For OrigSeqNum: 
<list style="symbols"><t>Increment the router SeqNum as specified in <xref 
target="seqnum" pageno="false" format="default"/>.  </t><t>Set OrigSeqNum := 
SeqNum.  </t></list> </t><t>For TargSeqNum: <list style="symbols"><t>If an 
Invalid route exists in the Local Route Set matching TargAddr using longest 
prefix matching and has a valid sequence number, set TargSeqNum := 
LocalRoute.SeqNum.  </t><t>If no Invalid route exists in the Local Route Set 
matching TargAddr, or the route doesn't have a sequence number, omit 
TargSeqNum.  </t></list> </t><t>Include MetricType and set the type accordingly 
</t><t>Set OrigMetric := RouterClient.Cost for the Router Client entry which 
includes OrigAddr </t><t>Include ValidityTime if advertising that the route to 
OrigAddr (and any other addresses included in the given prefix length) via this 
router is offered for a limited time, and set ValidityTime accordingly 
</t></list></t><t>This AODVv2 message is used to create a corresponding <xref 
target="RFC5444" pageno="false" format="default"/> message (see <xref 
target="represent" pageno="false" format="default"/>) which is multicast, by 
default, to LL-MANET-Routers on all interfaces configured for AODVv2 operation. 
 </t></section><section title="RREQ Reception" anchor="RREQ_rcv" 
toc="default"><t>Upon receiving a Route Request, an AODVv2 router performs the 
following steps: </t><t><list style="numbers"><t>Update the Neighbor Table 
according to <xref target="nbrupdate" pageno="false" format="default"/> <list 
style="symbols"><t>If the sender has Neighbor.State set to Blacklisted after 
the update, ignore this RREQ for further processing.  </t></list> </t><t>Verify 
that the message contains the required data: OrigAddr, TargAddr, OrigSeqNum, 
and OrigMetric, and that OrigAddr and TargAddr are valid addresses (routable 
and unicast) <list style="symbols"><t>If not, ignore this RREQ for further 
processing.  </t></list> </t><t>Check that the MetricType is supported and 
configured for use <list style="symbols"><t>If not, ignore this RREQ for 
further processing.  </t></list> </t><t>Verify that the cost of the advertised 
route will not exceed the maximum allowed metric value for the metric type 
(Metric &lt;= MAX_METRIC[MetricType] - Cost(L)) <list style="symbols"><t>If it 
will, ignore this RREQ for further processing.  </t></list> </t><t>Process the 
route to OrigAddr (and any other addresses included in the given prefix length) 
as specified in <xref target="processingrte" pageno="false" format="default"/> 
</t><t>Check if the information in the message is redundant by comparing to 
entries in the Multicast Route Message table, following the procedure in <xref 
target="suppress" pageno="false" format="default"/> <list style="symbols"><t>If 
redundant, ignore this RREQ for further processing.  </t><t>If not redundant, 
continue processing.  </t></list> </t><t>Check if the TargAddr belongs to one 
of the Router Clients <list style="symbols"><t>If so, generate an RREP as 
specified in <xref target="RREP_gen" pageno="false" format="default"/>.  
</t><t>If not, continue to RREQ regeneration.  </t></list> 
</t></list></t></section><section title="RREQ Regeneration" anchor="RREQ_regen" 
toc="default"><t>By regenerating an RREQ, a router advertises that it will 
forward IP packets to the OrigAddr contained in the RREQ (and to other 
addresses included in the given prefix length) according to the information 
enclosed. The router MAY choose not to regenerate the RREQ, for example if the 
router is heavily loaded or low on energy and therefore unwilling to advertise 
routing capability for more traffic. This could, however, decrease connectivity 
in the network or result in non-optimal paths.  </t><t>The RREQ SHOULD NOT be 
regenerated if the limit for the rate of AODVv2 control message generation has 
been reached. If approaching the limit, the message should be sent if the 
priorities in <xref target="MsgXmit" pageno="false" format="default"/> allow 
it.  </t><t>The procedure for RREQ regeneration is as follows: </t><t><list 
style="numbers"><t>Set AddressList, PrefixLengthList, sequence numbers and 
MetricType to the values in the received RREQ </t><t>Set OrigMetric := 
LocalRoute[OrigAddr].Metric </t><t>If the received RREQ contains a 
ValidityTime, or if the regenerating router wishes to limit the time that it 
offers a route to OrigAddr (and any other addresses included in the given 
prefix length), the regenerated RREQ MUST include ValidityTime <list 
style="symbols"><t>The ValidityTime is either the time limit the previous 
AODVv2 router specified, or the time limit this router wishes to impose, 
whichever is lower.  </t></list> </t></list></t><t>This AODVv2 message is used 
to create a corresponding <xref target="RFC5444" pageno="false" 
format="default"/> message (see <xref target="represent" pageno="false" 
format="default"/>) which is multicast, by default, to LL-MANET-Routers on all 
interfaces configured for AODVv2 operation. However, the regenerated RREQ can 
be unicast to the next hop address of the LocalRoute toward TargAddr, if known. 
 </t></section></section><section title="Route Reply (RREP) Message" 
anchor="RREP_msgs" toc="default"><t>When a Route Request message is received, 
requesting a route to a target address (TargAddr) which is configured as part 
of a Router Client entry, a Route Reply message is sent in response. The RREP 
offers a route to TargAddr (and any other addresses included in the prefix 
length).  </t><t>RREP messages have the following contents: </t><figure 
anchor="figRREP" align="center" title="RREP message contents" 
suppress-title="false" alt="" width="" height=""><artwork align="center" 
xml:space="preserve" name="" type="" alt="" width="" height="">
+-----------------------------------------------------------------+
|                        AckReq (optional)                        |
+-----------------------------------------------------------------+
|                           AddressList                           |
+-----------------------------------------------------------------+
|                   PrefixLengthList (optional)                   |
+-----------------------------------------------------------------+
|                           TargSeqNum                            |
+-----------------------------------------------------------------+
|                           MetricType                            |
+-----------------------------------------------------------------+
|                           TargMetric                            |
+-----------------------------------------------------------------+
|                     ValidityTime (optional)                     |
+-----------------------------------------------------------------+
</artwork></figure><t></t><t><list style="hanging"><t hangText="AckReq"><vspace 
blankLines="0"/>The address of the intended next hop of the RREP.  This is 
included when the link to the next hop toward OrigAddr is not known to be 
bidirectional. It indicates that an acknowledgement of the RREP is requested by 
the sender from the intended next hop (see <xref target="nexthopmonitoring" 
pageno="false" format="default"/>).  </t><t hangText="AddressList"><vspace 
blankLines="0"/>Contains OrigAddr and TargAddr, the source and destination 
addresses of the IP packet for which a route is requested. OrigAddr and 
TargAddr MUST be routable unicast addresses.  </t><t 
hangText="PrefixLengthList"><vspace blankLines="0"/>Contains TargPrefixLen, 
i.e., the length, in bits, of the prefix associated with the Router Client 
entry which includes TargAddr. If omitted, the prefix length is equal to 
TargAddr's address length, in bits.  </t><t hangText="TargSeqNum"><vspace 
blankLines="0"/>The sequence number associated with TargAddr.  </t><t 
hangText="MetricType"><vspace blankLines="0"/>The metric type associated with 
TargMetric.  </t><t hangText="TargMetric"><vspace blankLines="0"/>The metric 
value associated with the LocalRoute to TargAddr (and any other addresses 
included in the given prefix length), as seen from the sender of the message.  
</t><t hangText="ValidityTime"><vspace blankLines="0"/>The length of time that 
the message sender is willing to offer a route toward TargAddr (and any other 
addresses included in the given prefix length). Omitted if no time limit is 
imposed.  </t></list></t><section title="RREP Generation" anchor="RREP_gen" 
toc="default"><t>A Route Reply message is generated when a Route Request 
arrives, requesting a route to an address which is configured as a Router 
Client of the AODVv2 router.  </t><t>Before creating an RREP, the router SHOULD 
check if the corresponding RREQ is redundant, i.e., a Route Reply has already 
been generated in response to the RREQ, or if the limit for the rate of AODVv2 
control message generation has been reached. If so, the RREP SHOULD NOT be 
created. If approaching the limit, the message should be sent if the priorities 
in <xref target="MsgXmit" pageno="false" format="default"/> allow it.  
</t><t>The RREP will follow the path of the route to OrigAddr. If the best 
route to OrigAddr in the Local Route Set is Unconfirmed, the link to the next 
hop neighbor is not yet confirmed as bidirectional (as described in <xref 
target="nexthopmonitoring" pageno="false" format="default"/>). In this case the 
RREP MUST include AckReq set to the intended next hop address.  The AckReq 
indicates that an acknowledgement to the RREP is requested from the intended 
next hop router in the form of a Route Reply Acknowledgement (RREP_Ack). If the 
best route to OrigAddr in the Local Route Set is valid, the link to the next 
hop neighbor is already confirmed as bidirectional, and the AckReq can be 
omitted.  </t><t>Implementations MAY allow a number of retries of the RREP if a 
requested acknowledgement is not received within RREP_Ack_SENT_TIMEOUT, 
doubling the timeout with each retry, up to a maximum of RREP_RETRIES, using 
the same exponential backoff described in <xref target="route_discovery" 
pageno="false" format="default"/> for RREQ retries. The acknowledgement MUST be 
considered to have failed after the wait time for an RREP_Ack response to the 
final RREP.  </t><t>To generate the RREP, the router (also referred to as 
RREP_Gen) follows this procedure: </t><t><list style="numbers"><t>If the link 
to the next hop router toward OrigAddr is not known to be bidirectional, 
include the AckReq with the address of the intended next hop router </t><t>Set 
Address List := {OrigAddr, TargAddr} </t><t>For the PrefixLengthList: <list 
style="symbols"><t>If TargAddr is part of an address range configured as a 
Router Client, set PrefixLengthList := {null, RouterClient.PrefixLength}. This 
allows receiving routers to learn a route to all the addresses included by the 
prefix length, not only to TargAddr.  </t><t>Otherwise, omit PrefixLengthList.  
</t></list> </t><t>For the TargSeqNum: <list style="symbols"><t>Increment the 
router SeqNum as specified in <xref target="seqnum" pageno="false" 
format="default"/>.  </t><t>Set TargSeqNum := SeqNum.  </t></list> 
</t><t>Include MetricType and set the type to match the MetricType in the 
received RREQ message </t><t>Set TargMetric := RouterClient.Cost for the Router 
Client entry which includes TargAddr </t><t>Include ValidityTime if advertising 
that the route to TargAddr (and any other addresses included in the given 
prefix length) via this router is offered for a limited time, and set 
ValidityTime accordingly </t></list></t><t>This AODVv2 message is used to 
create a corresponding <xref target="RFC5444" pageno="false" format="default"/> 
message (see <xref target="represent" pageno="false" format="default"/>). If 
the Neighbor Table contains an entry for the neighbor stored as 
LocalRoute[OrigAddr].NextHop, with Neighbor.State set to Confirmed, the RREP is 
sent by unicast to LocalRoute[OrigAddr].NextHop. Otherwise, the RREP is sent 
multicast to LL-MANET-Routers.  </t></section><section title="RREP Reception" 
anchor="RREP_rcv" toc="default"><t>Upon receiving a Route Reply, an AODVv2 
router performs the following steps: </t><t><list style="numbers"><t>Verify 
that the message contains the required data: OrigAddr, TargAddr, TargSeqNum, 
and TargMetric, and that OrigAddr and TargAddr are valid addresses (routable 
and unicast) <list style="symbols"><t>If not, ignore this RREP for further 
processing.  </t></list> </t><t>Check that the MetricType is supported and 
configured for use <list style="symbols"><t>If not, ignore this RREP for 
further processing.  </t></list> </t><t>If this RREP does not correspond to a 
RREQ generated or regenerated in the last RREQ_WAIT_TIME, ignore for further 
processing.  <vspace blankLines="0"/> </t><t>Update the Neighbor Table 
according to <xref target="nbrupdate" pageno="false" format="default"/> 
</t><t>Verify that the cost of the advertised route does not exceed the maximum 
allowed metric value for the metric type (Metric &lt;= MAX_METRIC[MetricType] - 
Cost(L)) <list style="symbols"><t>If it does, ignore this RREP for further 
processing.  </t></list> </t><t>If the AckReq is present, check the intended 
recipient of the received RREP <list style="symbols"><t>If the receiving router 
is the intended recipient, send an acknowledgement as specified in <xref 
target="rrep_ack_msgs" pageno="false" format="default"/> and continue 
processing.  </t><t>If the receiving router is not the intended recipient, 
ignore this RREP for further processing.  </t></list> </t><t>Process the route 
to TargAddr (and any other addresses included in the given prefix length) as 
specified in <xref target="processingrte" pageno="false" format="default"/> 
</t><t>Check if the message is redundant by comparing to entries in the 
Multicast Route Message table (<xref target="suppress" pageno="false" 
format="default"/>) <list style="symbols"><t>If redundant, ignore this RREP for 
further processing.  </t><t>If not redundant, save the information in the 
Multicast Route Message table to identify future redundant RREP messages and 
continue processing.  </t></list> </t><t>Check if the OrigAddr belongs to one 
of the Router Clients <list style="symbols"><t>If so, no further processing is 
necessary.  </t><t>If not, continue to Step 10.  </t></list> </t><t>Check if a 
valid (Active or Idle) or Unconfirmed LocalRoute exists to OrigAddr <list 
style="symbols"><t>If so, continue to RREP regeneration.  </t><t>If not, a 
Route Error message SHOULD be transmitted to TargAddr according to <xref 
target="RERR_gen" pageno="false" format="default"/> and the RREP SHOULD be 
discarded and not regenerated.  </t></list> </t></list></t></section><section 
title="RREP Regeneration" anchor="RREP_regen" toc="default"><t>A received Route 
Reply message is regenerated toward OrigAddr.  Unless the router is prepared to 
advertise the route contained within the received RREP, it halts processing. By 
regenerating a RREP, a router advertises that it will forward IP packets to 
TargAddr (and any other addresses included in the given prefix length) 
according to the information enclosed. The router MAY choose not to regenerate 
the RREP, in the same way it MAY choose not to regenerate an RREQ (see <xref 
target="RREQ_regen" pageno="false" format="default"/>), though this could 
decrease connectivity in the network or result in non-optimal paths.  
</t><t>The RREP SHOULD NOT be regenerated if the limit for the rate of AODVv2 
control message generation has been reached. If approaching the limit, the 
message should be sent if the priorities in <xref target="MsgXmit" 
pageno="false" format="default"/> allow it.  </t><t>If the link to the next hop 
neighbor on the LocalRoute to OrigAddr is not yet confirmed as bidirectional 
(as described in <xref target="nexthopmonitoring" pageno="false" 
format="default"/>), the RREP MUST include AckReq set to the intended next hop 
address, in order to perform next hop monitoring. If bidirectionality is 
already confirmed, the AckReq can be omitted. The AckReq indicates that an 
acknowledgement to the RREP is requested in the form of a Route Reply 
Acknowledgement (RREP_Ack) from the intended next hop router, within 
RREP_Ack_SENT_TIMEOUT.  </t><t>The procedure for RREP regeneration is as 
follows: </t><t><list style="numbers"><t>If the link to the next hop router 
toward OrigAddr is not known to be bidirectional, include the AckReq with the 
address of the intended next hop router </t><t>Set AddressList, 
PrefixLengthList, TargSeqNum and MetricType to the values in the received RREP 
</t><t>Set TargMetric := LocalRoute[TargAddr].Metric </t><t>If the received 
RREP contains a ValidityTime, or if the regenerating router wishes to limit the 
time that it will offer a route to TargAddr (and any other addresses included 
in the given prefix length), the regenerated RREP MUST include ValidityTime 
<list style="symbols"><t>The ValidityTime is either the time limit the previous 
AODVv2 router specified, or the time limit this router wishes to impose, 
whichever is lower.  </t></list> </t></list></t><t>This AODVv2 message is used 
to create a corresponding <xref target="RFC5444" pageno="false" 
format="default"/> message (see <xref target="represent" pageno="false" 
format="default"/>). If the Neighbor Table contains an entry for the neighbor 
stored as LocalRoute[OrigAddr].NextHop, with Neighbor.State set to Confirmed, 
the RREP is sent by unicast to LocalRoute[OrigAddr].NextHop. Otherwise, the 
RREP is sent multicast to LL-MANET-Routers.  </t></section></section><section 
title="Route Reply Acknowledgement (RREP_Ack) Message" anchor="rrep_ack_msgs" 
toc="default"><t>The Route Reply Acknowledgement is a response to a Route Reply 
message. When the RREP_Ack message is received by the sender of the RREP, it 
confirms that the link between the two routers is bidirectional (see <xref 
target="nexthopmonitoring" pageno="false" format="default"/>). The RREP_Ack has 
no further data.  </t><section title="RREP_Ack Generation" 
anchor="RREP_Ack_gen" toc="default"><t>An RREP_Ack MUST be generated if a 
received Route Reply includes an AckReq with an address matching one of the 
receiving router's IP addresses. The RREP_Ack SHOULD NOT be generated if the 
limit for the rate of AODVv2 control message generation has been reached.  
</t><t>There is no further data in an RREP_Ack. The <xref target="RFC5444" 
pageno="false" format="default"/> representation is discussed in <xref 
target="represent" pageno="false" format="default"/>. The RREP_Ack is unicast, 
by default, to the source IP address of the RREP message that requested it.  
</t></section><section title="RREP_Ack Reception" anchor="RREP_Ack_rcv" 
toc="default"><t>Upon receiving an RREP_Ack, an AODVv2 router performs the 
following steps: </t><t><list style="numbers"><t>Check if the RREP_Ack was 
expected from the IP source address of the RREP_Ack, in response to an RREP 
sent previously by this router <list style="symbols"><t>If it was expected, the 
router cancels any associated timeouts and processing continues to Step 2.  
</t><t>If it was not expected, no actions are required and processing ends.  
</t></list> </t><t>Update the Neighbor Table according to <xref 
target="nbrupdate" pageno="false" format="default"/> 
</t></list></t></section></section><section title="Route Error (RERR) Message" 
anchor="RERR_msgs" toc="default"><t>A Route Error message is generated by an 
AODVv2 router to notify other AODVv2 routers of routes that are no longer 
available. An RERR message has the following contents: </t><figure 
anchor="figRERRstruct" align="center" title="RERR message contents" 
suppress-title="false" alt="" width="" height=""><artwork align="center" 
xml:space="preserve" name="" type="" alt="" width="" height="">
+-----------------------------------------------------------------+
|                       PktSource (optional)                      |
+-----------------------------------------------------------------+
|                           AddressList                           |
+-----------------------------------------------------------------+
|                   PrefixLengthList (optional)                   |
+-----------------------------------------------------------------+
|                       SeqNumList (optional)                     |
+-----------------------------------------------------------------+
|                          MetricTypeList                         |
+-----------------------------------------------------------------+
</artwork></figure><t></t><t><list style="hanging"><t 
hangText="PktSource"><vspace blankLines="0"/>The source address of the IP 
packet triggering the RERR. If the RERR is triggered by a broken link, 
PktSource is not required.  </t><t hangText="AddressList"><vspace 
blankLines="0"/>The addresses of the routes not available through RERR_Gen.  
</t><t hangText="PrefixLengthList"><vspace blankLines="0"/>The prefix lengths, 
in bits, associated with the routes not available through RERR_Gen. These 
values indicate whether routes represent a single device or an address range.  
</t><t hangText="SeqNumList"><vspace blankLines="0"/>The sequence numbers of 
the routes not available through RERR_Gen (where known).  </t><t 
hangText="MetricTypeList"><vspace blankLines="0"/>The metric types associated 
with the routes not available through RERR_Gen.  </t></list></t><section 
title="RERR Generation" anchor="RERR_gen" toc="default"><t>A Route Error 
message is generated when an AODVv2 router (also referred to as RERR_Gen) needs 
to report that a destination is not reachable. There are three events that 
cause this response: </t><t><list style="symbols"><t>When an IP packet that has 
been forwarded from another router, but cannot be forwarded further because 
there is no valid route in the Routing Information Base for its destination, 
the source of the packet needs to be informed that the route to the destination 
of the packet does not exist. The RERR generated MUST include PktSource set to 
the source address of the IP packet, and MUST contain only one unreachable 
address in the AddressList, i.e., the destination address of the IP packet. 
RERR_Gen MUST discard the IP packet that triggered generation of the RERR. The 
prefix length and sequence number MAY be included if known from an Invalid 
LocalRoute entry to PktSource. The MetricTypeList MUST also be included if a 
MetricType can be determined from the IP packet or an existing Invalid 
LocalRoute to the unreachable address.  </t><t>When an RREP message cannot be 
regenerated because the LocalRoute to OrigAddr has been lost or is Invalid, 
RREP_Gen needs to be informed that the route to OrigAddr does not exist. The 
RERR generated MUST include PktSource set to the TargAddr of the RREP, and MUST 
contain only one unreachable address in the AddressList, the OrigAddr from the 
RREP.  RERR_Gen MUST discard the RREP message that triggered generation of the 
RERR. The prefix length, sequence number and metric type SHOULD be included if 
known from an Invalid LocalRoute to the unreachable address.  </t><t>When a 
link breaks, multiple LocalRoutes may become Invalid, and the RERR generated 
MAY contain multiple unreachable addresses. The RERR MUST include 
MetricTypeList. PktSource is omitted. All previously Active LocalRoutes that 
used the broken link MUST be reported. The AddressList, PrefixLengthList, 
SeqNumList, and MetricTypeList will contain entries for each LocalRoute which 
has become Invalid. An RERR message is only sent if an Active LocalRoute 
becomes Invalid, though an AODVv2 router can also include Idle LocalRoutes that 
become Invalid if the configuration parameter ENABLE_IDLE_IN_RERR is set (see 
<xref target="other" pageno="false" format="default"/>).  </t></list></t><t>In 
order to avoid flooding the network with RERR messages when a stream of IP 
packets to an unreachable address arrives, an AODVv2 router SHOULD determine 
whether an RERR has recently been sent with the same unreachable address and 
PktSource, and SHOULD avoid creating duplicate RERR messages.  </t><t>The RERR 
SHOULD NOT be generated if the limit for the rate of AODVv2 control message 
generation has been reached. If approaching the limit, the message should be 
sent if the priorities in <xref target="MsgXmit" pageno="false" 
format="default"/> allow it.  </t><t>Incidentally, if an AODVv2 router receives 
an ICMP error packet to or from the address of one of its Router Clients, it 
forwards the ICMP packet in the same way as any other IP packet, and will not 
generate any RERR message based on the contents of the ICMP packet.  </t><t>To 
generate the RERR, the router follows this procedure: </t><t><list 
style="numbers"><t>If necessary, include PktSource and set the value as given 
above </t><t>For each LocalRoute that needs to be reported: <list 
style="symbols"><t>Insert LocalRoute.Address into the AddressList.  
</t><t>Insert LocalRoute.PrefixLength into PrefixLengthList, if known and not 
equal to the address length.  </t><t>Insert LocalRoute.SeqNum into SeqNumList, 
if known.  </t><t>Insert LocalRoute.MetricType into MetricTypeList.  
</t></list> </t></list></t><t>The AODVv2 message is used to create a 
corresponding <xref target="RFC5444" pageno="false" format="default"/> message 
(see <xref target="represent" pageno="false" format="default"/>).  </t><t>If 
the RERR is sent in response to an undeliverable IP packet or RREP message, 
i.e., if PktSource is included, the RERR SHOULD be sent unicast to the next hop 
on the route to PktSource, or alternatively, if there is no route to PktSource, 
the RERR MUST be multicast to LL-MANET-Routers. If the RERR is sent in response 
to a broken link, i.e., PktSource is not included, the RERR is, by default, 
multicast to LL-MANET-Routers.  </t><t><xref target="precursor" pageno="false" 
format="default"/> describes processing steps when the optional precursor lists 
feature is enabled.  </t></section><section title="RERR Reception" 
anchor="RERR_rcv" toc="default"><t>Upon receiving a Route Error, an AODVv2 
router performs the following steps: </t><t><list style="numbers"><t>Verify 
that the message contains the required data: at least one unreachable address 
<list style="symbols"><t>If not, ignore this RERR for further processing.  
</t></list> </t><t>For each address in the AddressList, check that: <list 
style="symbols"><t>The address is valid (routable and unicast) </t><t>The 
MetricType is supported and configured for use </t><t>There is a LocalRoute 
with the same MetricType matching the address using longest prefix matching 
</t><t>Either the LocalRoute's next hop is the sender of the RERR and the next 
hop interface is the interface on which the RERR was received, or PktSource is 
present in the RERR and is a Router Client address </t><t>The unreachable 
address' sequence number is either unknown, or is greater than the LocalRoute's 
sequence number </t></list> <vspace blankLines="1"/> If any of the above are 
false, a matching LocalRoute MUST NOT be made Invalid and the unreachable 
address MUST NOT be advertised in a regenerated RERR.  <vspace blankLines="1"/> 
If all of the above are true, the LocalRoute is no longer valid. If the 
LocalRoute was previously Active, it MUST be reported in a regenerated RERR. If 
the LocalRoute was previously Idle, it MAY be reported in a regenerated RERR, 
if ENABLE_IDLE_IN_RERR is configured. The Local Route Set MUST be updated 
according to these rules: <list style="symbols"><t>If the LocalRoute's prefix 
length is the same as the unreachable address' prefix length, set 
LocalRoute.State to Invalid.  </t><t>If the LocalRoute's prefix length is 
longer than the unreachable address' prefix length, the LocalRoute MUST be 
expunged from the Local Route Set, since it is a sub-route of the route which 
is reported to be Invalid.  </t><t>If the prefix length is different, create a 
new LocalRoute with the unreachable address, and its prefix length and sequence 
number, and set LocalRoute.State to Invalid.  </t><t>Update the sequence number 
on the existing LocalRoute, if the reported sequence number is determined to be 
newer using the comparison technique described in <xref target="seqnum" 
pageno="false" format="default"/>.  </t></list> </t><t>Check if there are 
unreachable addresses which MUST be reported in a regenerated RERR <list 
style="symbols"><t>If so, regenerate the RERR as detailed in <xref 
target="RERR_regen" pageno="false" format="default"/>.  </t><t>If not, take no 
further action.  </t></list> </t></list></t></section><section title="RERR 
Regeneration" anchor="RERR_regen" toc="default"><t>The Route Error message 
SHOULD NOT be regenerated if the limit for the rate of AODVv2 control message 
generation has been reached. If approaching the limit, the message should be 
sent if the priorities in <xref target="MsgXmit" pageno="false" 
format="default"/> allow it.  </t><t>The procedure for RERR regeneration is as 
follows: </t><t><list style="numbers"><t>If PktSource was included in the 
original RERR, and PktSource is not a Router Client, copy it into the 
regenerated RERR </t><t>For each LocalRoute that needs to be reported: <list 
style="symbols"><t>Insert LocalRoute.Address into the AddressList.  
</t><t>Insert LocalRoute.PrefixLength into PrefixLengthList, if known and not 
equal to the address length.  </t><t>Insert LocalRoute.SeqNum into SeqNumList, 
if known.  </t><t>Insert LocalRoute.MetricType into MetricTypeList.  
</t></list> </t></list></t><t>The AODVv2 message is used to create a 
corresponding <xref target="RFC5444" pageno="false" format="default"/> message 
(see <xref target="represent" pageno="false" format="default"/>). If the RERR 
contains PktSource, the regenerated RERR SHOULD be sent unicast to the next hop 
on the LocalRoute to PktSource, or alternatively if there is no route to 
PktSource, or PktSource is a Router Client, it MUST be multicast to 
LL-MANET-Routers. If the RERR is sent in response to a broken link, the RERR 
is, by default, multicast to LL-MANET-Routers.  
</t></section></section></section><section title="RFC 5444 Representation" 
anchor="represent" toc="default"><t>AODVv2 specifies that all control messages 
between routers MUST use the Generalized Mobile Ad Hoc Network Packet/Message 
Format <xref target="RFC5444" pageno="false" format="default"/>, and therefore 
AODVv2's route messages comprise data which is mapped to message elements in 
<xref target="RFC5444" pageno="false" format="default"/>.  </t><t><xref 
target="RFC5444" pageno="false" format="default"/> provides a multiplexed 
transport for multiple protocols. An <xref target="RFC5444" pageno="false" 
format="default"/> multiplexer MAY choose to optimize the content of certain 
message elements to reduce control message overhead.  </t><t>A brief summary of 
the <xref target="RFC5444" pageno="false" format="default"/> format: 
</t><t><list style="numbers"><t>A packet contains zero or more messages 
</t><t>A message contains a Message Header, one Message TLV Block, zero or more 
Address Blocks, and one Address Block TLV Block per Address Block </t><t>The 
Message TLV Block MAY contain zero or more Message TLVs </t><t>An Address Block 
TLV Block MAY include zero or more Address Block TLVs </t><t>Each TLV value in 
an Address Block TLV Block can be associated with all of the addresses, or with 
a contiguous set of addresses, or with a single address in the Address Block 
</t></list></t><t>AODVv2 does not require access to the <xref target="RFC5444" 
pageno="false" format="default"/> packet header.  </t><t>In the message header, 
AODVv2 uses &lt;msg-type&gt; and &lt;msg-addr-length&gt;. The 
&lt;msg-addr-length&gt; field indicates the length of any addresses in the 
message, using &lt;msg-addr-length&gt; := (address length in octets - 1), i.e. 
3 for IPv4 and 15 for IPv6.  </t><t>The addresses in an Address Block MAY 
appear in any order, and values in a TLV in the Address Block TLV Block must be 
associated with the correct address in the Address Block by the <xref 
target="RFC5444" pageno="false" format="default"/> implementation. To indicate 
which value is associated with each address, the AODVv2 message representation 
uses lists where the order of the addresses in the AODVv2 AddressList matches 
the order of values in other data lists, e.g., the order of SeqNums in the 
SeqNumList in an RERR.  <xref target="RFC5444" pageno="false" 
format="default"/> maps this information to Address Block TLVs associated with 
the relevant addresses in the Address Block.  </t><t>Each address included in 
the Address Block is identified as OrigAddr, TargAddr, PktSource, or 
Unreachable Address by including an ADDRESS_TYPE TLV in the Address Block TLV 
Block.  </t><t>The following sections show how AODVv2 data is represented in 
<xref target="RFC5444" pageno="false" format="default"/> messages. AODVv2 makes 
use of the VALIDITY_TIME Address Block TLV from <xref target="RFC5497" 
pageno="false" format="default"/>, and defines (in <xref target="IANA" 
pageno="false" format="default"/>) a number of new TLVs. To calculate the 
time-value for the VALIDITY_TIME Address Block TLV, the value of C is defined 
in <xref target="constants" pageno="false" format="default"/>.  </t><t>Where 
the extension type of a TLV is set to zero, this is the default <xref 
target="RFC5444" pageno="false" format="default"/> value and the extension type 
will not be included in the message.  </t><section title="Route Request Message 
Representation" anchor="route-request-message-representation" 
toc="default"><section title="Message Header" anchor="message-header" 
toc="default"><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">Header Field 
</ttcol><ttcol align="left">Value </ttcol><c>None </c><c>&lt;msg-type&gt; 
</c><c>RREQ </c></texttable></section><section title="Message TLV Block" 
anchor="message-tlv-block" toc="default"><t>An RREQ contains no Message TLVs.  
</t></section><section title="Address Block" anchor="address-block" 
toc="default"><t>An RREQ contains two addresses, OrigAddr and TargAddr, and 
each address has an associated prefix length. If the prefix length has not been 
included in the AODVv2 message, it is equal to the address length in bits.  
</t><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">Address Block 
</ttcol><c>OrigAddr/OrigPrefixLen </c><c>&lt;address&gt; + 
&lt;prefix-length&gt; </c><c>TargAddr/TargPrefixLen </c><c>&lt;address&gt; + 
&lt;prefix-length&gt; </c></texttable></section><section title="Address Block 
TLV Block" anchor="address-block-tlv-block" toc="default"><t>Address Block TLVs 
are always associated with one or more addresses in the Address Block. The 
following sections show the TLVs that apply to each address.  </t><section 
title="Address Block TLVs for OrigAddr" 
anchor="address-block-tlvs-for-origaddr" toc="default"><texttable title="" 
suppress-title="false" align="center" style="full"><ttcol align="left">Data 
</ttcol><ttcol align="left">TLV Type </ttcol><ttcol align="left">Extension Type 
</ttcol><ttcol align="left">Value </ttcol><c>None </c><c>ADDRESS_TYPE </c><c>0 
</c><c>ADDRTYPE_ORIGADDR </c><c>OrigSeqNum </c><c>SEQ_NUM </c><c>0 
</c><c>Sequence number of RREQ_Gen, the router which initiated route discovery. 
 </c><c>OrigMetric /MetricType </c><c>PATH_METRIC </c><c>MetricType 
</c><c>Metric value for the route to OrigAddr, using MetricType.  
</c><c>ValidityTime </c><c>VALIDITY_TIME </c><c>0 </c><c>ValidityTime for route 
to OrigAddr, represented as detailed in <xref target="RFC5497" pageno="false" 
format="default"/>.  </c></texttable></section><section title="Address Block 
TLVs for TargAddr" anchor="address-block-tlvs-for-targaddr" 
toc="default"><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">TLV Type 
</ttcol><ttcol align="left">Extension Type </ttcol><ttcol align="left">Value 
</ttcol><c>None </c><c>ADDRESS_TYPE </c><c>0 </c><c>ADDRTYPE_TARGADDR 
</c><c>TargSeqNum </c><c>SEQ_NUM </c><c>0 </c><c>The last known TargSeqNum for 
TargAddr.  </c></texttable></section></section></section><section title="Route 
Reply Message Representation" anchor="route-reply-message-representation" 
toc="default"><section title="Message Header" anchor="message-header-1" 
toc="default"><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">Header Field 
</ttcol><ttcol align="left">Value </ttcol><c>None </c><c>&lt;msg-type&gt; 
</c><c>RREP </c></texttable></section><section title="Message TLV Block" 
anchor="message-tlv-block-1" toc="default"><t>An RREP contains no Message TLVs. 
 </t></section><section title="Address Block" anchor="address-block-1" 
toc="default"><t>An RREP contains a minimum of two addresses, OrigAddr and 
TargAddr, and each address has an associated prefix length. If the prefix 
length has not been included in the AODVv2 message, it is equal to the address 
length in bits.  </t><t>It MAY also contain the address of the intended next 
hop, in order to request acknowledgement to confirm bidirectionality of the 
link, as described in <xref target="nexthopmonitoring" pageno="false" 
format="default"/>. The prefix length associated with this address is equal to 
the address length in bits.  </t><texttable title="" suppress-title="false" 
align="center" style="full"><ttcol align="left">Data </ttcol><ttcol 
align="left">Address Block </ttcol><c>OrigAddr/OrigPrefixLen 
</c><c>&lt;address&gt; + &lt;prefix-length&gt; </c><c>TargAddr/TargPrefixLen 
</c><c>&lt;address&gt; + &lt;prefix-length&gt; </c><c>AckReq 
</c><c>&lt;address&gt; + &lt;prefix-length&gt; 
</c></texttable></section><section title="Address Block TLV Block" 
anchor="address-block-tlv-block-1" toc="default"><t>Address Block TLVs are 
always associated with one or more addresses in the Address Block. The 
following sections show the TLVs that apply to each address.  </t><section 
title="Address Block TLVs for OrigAddr" 
anchor="address-block-tlvs-for-origaddr-1" toc="default"><texttable title="" 
suppress-title="false" align="center" style="full"><ttcol align="left">Data 
</ttcol><ttcol align="left">TLV Type </ttcol><ttcol align="left">Extension Type 
</ttcol><ttcol align="left">Value </ttcol><c>None </c><c>ADDRESS_TYPE </c><c>0 
</c><c>ADDRTYPE_ORIGADDR </c></texttable></section><section title="Address 
Block TLVs for TargAddr" anchor="address-block-tlvs-for-targaddr-1" 
toc="default"><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">TLV Type 
</ttcol><ttcol align="left">Extension Type </ttcol><ttcol align="left">Value 
</ttcol><c>None </c><c>ADDRESS_TYPE </c><c>0 </c><c>ADDRTYPE_TARGADDR 
</c><c>TargSeqNum </c><c>SEQ_NUM </c><c>0 </c><c>Sequence number of RREP_Gen, 
the router which created the RREP.  </c><c>TargMetric /MetricType 
</c><c>PATH_METRIC </c><c>MetricType </c><c>Metric value for the route to 
TargAddr, using MetricType.  </c><c>ValidityTime </c><c>VALIDITY_TIME </c><c>0 
</c><c>ValidityTime for route to TargAddr, represented as detailed in <xref 
target="RFC5497" pageno="false" format="default"/>.  
</c></texttable></section><section title="Address Block TLVs for AckReq 
Intended Recipient Address" 
anchor="address-block-tlvs-for-ackreq-intended-recipient-address" 
toc="default"><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">TLV Type 
</ttcol><ttcol align="left">Extension Type </ttcol><ttcol align="left">Value 
</ttcol><c>None </c><c>ADDRESS_TYPE </c><c>0 </c><c>ADDRTYPE_INTEND 
</c></texttable></section></section></section><section title="Route Reply 
Acknowledgement Message Representation" 
anchor="route-reply-acknowledgement-message-representation" 
toc="default"><section title="Message Header" anchor="message-header-2" 
toc="default"><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">Header Field 
</ttcol><ttcol align="left">Value </ttcol><c>None </c><c>&lt;msg-type&gt; 
</c><c>RREP_Ack </c></texttable></section><section title="Message TLV Block" 
anchor="message-tlv-block-2" toc="default"><t>An RREP_Ack contains no Message 
TLVs.  </t></section><section title="Address Block" anchor="address-block-2" 
toc="default"><t>An RREP_Ack contains no Address Block.  </t></section><section 
title="Address Block TLV Block" anchor="address-block-tlv-block-2" 
toc="default"><t>An RREP_Ack contains no Address Block TLV Block.  
</t></section></section><section title="Route Error Message Representation" 
anchor="route-error-message-representation" toc="default"><t>Route Error 
Messages MAY be split into multiple <xref target="RFC5444" pageno="false" 
format="default"/> messages when the desired contents would exceed the MTU. 
However, all of the resulting messages MUST have the same message header as 
described below. If PktSource is included in the AODVv2 message, it MUST be 
included in all of the resulting <xref target="RFC5444" pageno="false" 
format="default"/> messages.  </t><section title="Message Header" 
anchor="message-header-3" toc="default"><texttable title="" 
suppress-title="false" align="center" style="full"><ttcol align="left">Data 
</ttcol><ttcol align="left">Header Field </ttcol><ttcol align="left">Value 
</ttcol><c>None </c><c>&lt;msg-type&gt; </c><c>RERR 
</c></texttable></section><section title="Message TLV Block" 
anchor="message-tlv-block-3" toc="default"><t>An RERR contains no Message TLVs. 
 </t></section><section title="Address Block" anchor="address-block-3" 
toc="default"><t>The Address Block in an RERR MAY contain PktSource, the source 
address of the IP packet triggering RERR generation, as detailed in <xref 
target="RERR_msgs" pageno="false" format="default"/>. The prefix length 
associated with PktSource is equal to the address length in bits.  
</t><t>Address Block always contains one address per route that is no longer 
valid, and each address has an associated prefix length.  If a prefix length 
has not been included for this address, it is equal to the address length in 
bits.  </t><texttable title="" suppress-title="false" align="center" 
style="full"><ttcol align="left">Data </ttcol><ttcol align="left">Address Block 
</ttcol><c>PktSource </c><c>&lt;address&gt; + &lt;prefix-length&gt; for 
PktSource </c><c>AddressList/PrefixLengthList </c><c>&lt;address&gt; + 
&lt;prefix-length&gt; for each unreachable address in AddressList 
</c></texttable></section><section title="Address Block TLV Block" 
anchor="address-block-tlv-block-3" toc="default"><t>Address Block TLVs are 
always associated with one or more addresses in the Address Block. The 
following sections show the TLVs that apply to each type of address in the 
RERR.  </t><section title="Address Block TLVs for PktSource" 
anchor="address-block-tlvs-for-pktsource" toc="default"><texttable title="" 
suppress-title="false" align="center" style="full"><ttcol align="left">Data 
</ttcol><ttcol align="left">TLV Type </ttcol><ttcol align="left">Extension Type 
</ttcol><ttcol align="left">Value </ttcol><c>PktSource </c><c>ADDRESS_TYPE 
</c><c>0 </c><c>ADDRTYPE_PKTSOURCE </c></texttable></section><section 
title="Address Block TLVs for Unreachable Addresses" 
anchor="address-block-tlvs-for-unreachable-addresses" toc="default"><texttable 
title="" suppress-title="false" align="center" style="full"><ttcol 
align="left">Data </ttcol><ttcol align="left">TLV Type </ttcol><ttcol 
align="left">Extension Type </ttcol><ttcol align="left">Value </ttcol><c>None 
</c><c>ADDRESS_TYPE </c><c>0 </c><c>ADDRTYPE_UNREACHABLE </c><c>SeqNumList 
</c><c>SEQ_NUM </c><c>0 </c><c>Sequence number associated with invalid route to 
the unreachable address.  </c><c>MetricTypeList </c><c>PATH_METRIC 
</c><c>MetricType </c><c>None. Extension Type set to MetricType of the route to 
the unreachable address.  
</c></texttable></section></section></section></section><section title="Simple 
External Network Attachment" anchor="gateway" toc="default"><t><xref 
target="net_top" pageno="false" format="default"/> shows a stub (i.e., 
non-transit) network of AODVv2 routers which is attached to an external network 
via a single External Network Access Router (ENAR). The interface to the 
external network MUST NOT be configured in the AODVv2_INTERFACES list.  
</t><t>As in any externally-attached network, AODVv2 routers and Router Clients 
that wish to be reachable from the external network MUST have IP addresses 
within the ENAR's routable and topologically correct prefix (i.e., 191.0.2.0/24 
in <xref target="net_top" pageno="false" format="default"/>). This AODVv2 
network and networks attached to routers within it will be advertised to the 
external network using procedures which are out of scope for this 
specification.  </t><figure anchor="net_top" align="center" title="Simple 
External Network Attachment Example" suppress-title="false" alt="" width="" 
height=""><artwork align="center" xml:space="preserve" name="" type="" alt="" 
width="" height="">
  /-------------------------\
 / +----------------+        \
/  |  AODVv2 Router |         \
|  |  191.0.2.2/32  |         |
|  +----------------+         |            Routable
|                       +-----+--------+   Prefix
|                       |     ENAR     |  /191.0.2.0/24
|                       | AODVv2 Router| /
|                       |  191.0.2.1   |/      /---------------\
|                       | serving net  +------+    External     \
|                       | 191.0.2.0/24 |      \     Network     /
|                       +-----+--------+       \---------------/
|         +----------------+  |
|         |  AODVv2 Router |  |
|         |  191.0.2.3/32  |  |
\         +----------------+  /
 \                           /
  \-------------------------/
</artwork></figure><t></t><t>When an AODVv2 router within the AODVv2 MANET 
wants to discover a route toward an address on the external network, it uses 
the normal AODVv2 route discovery for that IP Destination Address. The ENAR 
MUST respond to RREQ on behalf of all external network destinations, i.e., 
destinations not on the configured 191.0.2.0/24 network. RREQs for addresses 
inside the AODVv2 network, i.e. destinations on the configured 191.0.2.0/24 
network, are handled using the standard processes described in <xref 
target="aodv_msgs" pageno="false" format="default"/>.  </t><t>When an IP packet 
from an address on the external network destined for an address in the AODVv2 
MANET reaches the ENAR, if the ENAR does not have a route toward that exact 
destination in its Routing Information Base, it will perform normal AODVv2 
route discovery for that destination.  </t><t>Configuring the ENAR as a default 
router is outside the scope of this specification.  </t></section><section 
title="Optional Features" anchor="optional" toc="default"><t>A number of 
optional features for AODVv2, associated initially with AODV, MAY be useful in 
networks with greater mobility or larger populations, or networks requiring 
reduced latency for application launches. These features are not required by 
minimal implementations.  </t><section title="Expanding Rings Multicast" 
anchor="rings" toc="default"><t>For multicast RREQ, the <xref target="RFC5444" 
pageno="false" format="default"/> message may initially be limited to a low 
number of hops to limit the RREQ propagation to a subset of the local network 
and possibly reduce route discovery overhead. If the route is not discovered, 
the number of hops allowed for distribution of the RREQ is increased, in 
accordance with an expanding ring search, as described in <xref 
target="RFC3561" pageno="false" format="default"/>.  </t></section><section 
title="Precursor Lists" anchor="precursor" toc="default"><t>This section 
specifies an interoperable enhancement to AODVv2 enabling more economical Route 
Error notifications.  </t><t>There can be several sources of traffic for a 
certain destination.  Each source of traffic and each upstream router between 
the forwarding AODVv2 router and the traffic source is known as a "precursor" 
for the destination. For each destination, an AODVv2 router MAY choose to keep 
track of precursors that have provided traffic for that destination. Route 
Error messages about that destination can be sent unicast to these precursors 
instead of multicast to all AODVv2 routers.  </t><t>Since an RERR will be 
regenerated if it comes from a next hop on a valid LocalRoute, the RERR SHOULD 
ideally be sent backwards along the route that the source of the traffic uses, 
to ensure it is regenerated at each hop and reaches the traffic source. If the 
reverse path is unknown, the RERR SHOULD be sent toward the source along some 
other route. Therefore, the options for saving precursor information are as 
follows: </t><t><list style="symbols"><t>Save the next hop on an existing route 
to the IP packet's source address as the precursor. In this case, it is not 
guaranteed that an RERR that is sent will follow the reverse of the source's 
route. In rare situations, this may prevent the route from being invalidated at 
the source of the data traffic.  </t><t>Save the IP packet's source address as 
the precursor. In this case, the RERR can be sent along any existing route to 
the source of the data traffic, and SHOULD include PktSource to ensure that the 
route will be invalidated at the source of the traffic, in case the RERR does 
not follow the reverse of the source's route.  </t><t>By inspecting the MAC 
address of each forwarded IP packet, determine which router forwarded the 
packet, and save the router address as a precursor. This ensures that when an 
RERR is sent to the precursor router, the route will be invalidated at that 
router, and the RERR will be regenerated toward the source of the IP packet.  
</t></list></t><t>During normal operation, each AODVv2 router maintaining 
precursor lists for a LocalRoute must update the precursor list whenever it 
uses this route to forward traffic to the destination. Precursors are 
classified as Active if traffic has recently been forwarded by the precursor. 
The precursor is marked with a timestamp to indicate the time it last forwarded 
traffic on this route.  </t><t>When an AODVv2 router detects that one or more 
LocalRoutes are broken, it MAY notify each Active precursor using a unicast 
Route Error message instead of creating multicast traffic. Unicast is 
applicable when there are few Active precursors compared to the number of 
neighboring AODVv2 routers. However, the default multicast behavior is still 
preferable when there are many precursors, since fewer message transmissions 
are required.  </t><t>When an AODVv2 router supporting precursor lists receives 
an RERR message, it MAY identify the list of its own affected Active precursors 
for the routes in the RERR, and choose to send a unicast RERR to those, rather 
than send a multicast RERR.  </t><t>When a LocalRoute is expunged, any 
precursor list associated with it MUST also be expunged.  
</t></section><section title="Intermediate RREP" anchor="iRREP" 
toc="default"><t>Without iRREP, only the AODVv2 router responsible for the 
target address can respond to an RREQ. Using iRREP, route discoveries can be 
faster and create less control traffic. This specification has been published 
as a separate Internet Draft <xref target="I-D.perkins-irrep" pageno="false" 
format="default"/>.  </t><t></t></section><section title="Message Aggregation 
Delay" anchor="aggreg" toc="default"><t>The aggregation of multiple messages 
into a packet is specified in <xref target="RFC5444" pageno="false" 
format="default"/>.  </t><t>Implementations MAY choose to briefly delay 
transmission of messages for the purpose of aggregation (into a single packet) 
or to improve performance by using jitter <xref target="RFC5148" pageno="false" 
format="default"/>.  </t></section></section><section title="Configuration" 
anchor="param" toc="default"><t>AODVv2 uses various parameters which can be 
grouped into the following categories: </t><t><list style="symbols"><t>Timers 
</t><t>Protocol constants </t><t>Administrative parameters and controls 
</t></list></t><t>This section show the parameters along with their definitions 
and default values (if any).  </t><t>Note that several fields have limited size 
(bits or bytes). These sizes and their encoding may place specific limitations 
on the values that can be set.  </t><section title="Timers" anchor="timers" 
toc="default"><t>AODVv2 requires certain timing information to be associated 
with Local Route Set entries and message replies. The default values are as 
follows: </t><texttable anchor="timer-tbl" align="center" title="Timing 
Parameter Values" suppress-title="false" style="full"><ttcol align="left">Name 
</ttcol><ttcol align="left">Default Value </ttcol><c>ACTIVE_INTERVAL </c><c>5 
second </c><c>MAX_IDLETIME </c><c>200 seconds </c><c>MAX_BLACKLIST_TIME 
</c><c>200 seconds </c><c>MAX_SEQNUM_LIFETIME </c><c>300 seconds 
</c><c>RteMsg_ENTRY_TIME </c><c>12 seconds </c><c>RREQ_WAIT_TIME </c><c>2 
seconds </c><c>RREP_Ack_SENT_TIMEOUT </c><c>1 second </c><c>RREQ_HOLDDOWN_TIME 
</c><c>10 seconds </c></texttable><t></t><t>The above timing parameter values 
have worked well for small and medium well-connected networks with moderate 
topology changes. The timing parameters SHOULD be administratively 
configurable.  Ideally, for networks with frequent topology changes the AODVv2 
parameters SHOULD be adjusted using experimentally determined values or dynamic 
adaptation. For example, in networks with infrequent topology changes 
MAX_IDLETIME MAY be set to a much larger value.  </t><t>If MAX_SEQNUM_LIFETIME 
was configured differently across the network, and any of the routers lost 
their sequence number or rebooted, this could result in their next route 
messages being classified as stale at any AODVv2 router using a greater value 
for MAX_SEQNUM_LIFETIME. This would delay route discovery from and to the 
re-initializing router.  </t></section><section title="Protocol Constants" 
anchor="constants" toc="default"><t>AODVv2 protocol constants typically do not 
require changes. The following table lists these constants, along with their 
values and a reference to the section describing their use.  </t><texttable 
anchor="const-tbl" align="center" title="AODVv2 Constants" 
suppress-title="false" style="full"><ttcol align="left">Name </ttcol><ttcol 
align="left">Default </ttcol><ttcol align="left">Description 
</ttcol><c>DISCOVERY_ATTEMPTS_MAX </c><c>3 </c><c><xref 
target="route_discovery" pageno="false" format="default"/> </c><c>RREP_RETRIES 
</c><c>2 </c><c><xref target="RREP_gen" pageno="false" format="default"/> 
</c><c>MAX_METRIC[MetricType] </c><c>[TBD] </c><c><xref target="metrics" 
pageno="false" format="default"/> </c><c>MAX_METRIC[HopCount] </c><c>255 
</c><c><xref target="metrics" pageno="false" format="default"/> and <xref 
target="aodv_msgs" pageno="false" format="default"/> </c><c>INFINITY_TIME 
</c><c>[TBD] </c><c>Maximum expressible clock time (<xref target="update_rte" 
pageno="false" format="default"/>) </c><c>C </c><c>1/1024 </c><c>Constant used 
in validity time calculation <xref target="RFC5497" pageno="false" 
format="default"/> </c></texttable><t></t><t>MAX_METRIC[MetricType] MUST always 
be the maximum expressible metric value of type MetricType. Field lengths 
associated with metric values are found in <xref target="metric-type" 
pageno="false" format="default"/>.  </t><t>These protocol constants MUST have 
the same values for all AODVv2 routers in the ad hoc network. If the values 
were configured differently, the following consequences may be observed: 
</t><t><list style="symbols"><t>DISCOVERY_ATTEMPTS_MAX: Routers with higher 
values are likely to be more successful at finding routes, at the cost of 
additional control traffic.  </t><t>RREP_RETRIES: Routers with lower values are 
more likely to blacklist neighbors when there is a 
</t><t>MAX_METRIC[MetricType]: No interoperability problems due to variations 
on different routers, but routers with lower values may exhibit overly 
restrictive behavior during route comparisons. temporary fluctuation in link 
quality.  </t><t>INFINITY_TIME: No interoperability problems due to variations 
on different routers, but if a lower value is used, route state management may 
exhibit overly restrictive behavior.  </t><t>C: Routers with lower values will 
invalidate timed routes before routers with higher values, which will cause 
Route Error messages to be generated and the route will effectively take on the 
shorter validity time.  </t></list></t></section><section title="Local 
Settings" anchor="other" toc="default"><t>The following table lists AODVv2 
parameters which SHOULD be administratively configured for each router: 
</t><texttable anchor="admincontrol" align="center" title="Configuration for 
Local Settings" suppress-title="false" style="full"><ttcol align="left">Name 
</ttcol><ttcol align="left">Default Value </ttcol><ttcol 
align="left">Description </ttcol><c>AODVv2_INTERFACES </c><c></c><c><xref 
target="apply" pageno="false" format="default"/> </c><c>BUFFER_SIZE_PACKETS 
</c><c>2 </c><c><xref target="route_discovery" pageno="false" 
format="default"/> </c><c>BUFFER_SIZE_BYTES </c><c>MAX_PACKET_SIZE [TBD] 
</c><c><xref target="route_discovery" pageno="false" format="default"/> 
</c><c>CONTROL_TRAFFIC_LIMIT </c><c>[TBD - 50 pkts/sec?] </c><c><xref 
target="aodv_msgs" pageno="false" format="default"/> 
</c></texttable><t></t></section><section title="Network-Wide Settings" 
anchor="network-wide-settings" toc="default"><t>The following administrative 
controls MAY be used to change the operation of the network. The same settings 
SHOULD be used across the network. Inconsistent settings at different routers 
in the network will not result in protocol errors, but poor performance may 
result.  </t><texttable anchor="suggestedoptions" align="center" 
title="Configuration for Network-Wide Settings" suppress-title="false" 
style="full"><ttcol align="left">Name </ttcol><ttcol align="left">Default 
</ttcol><ttcol align="left">Description </ttcol><c>ENABLE_IDLE_IN_RERR 
</c><c>Disabled </c><c><xref target="RERR_gen" pageno="false" 
format="default"/> </c></texttable><t></t></section><section title="Optional 
Feature Settings" anchor="optional-feature-settings" toc="default"><t>These 
options are not required for correct routing behavior, although they may reduce 
AODVv2 protocol overhead in certain situations. The default behavior is to 
leave these options disabled.  </t><texttable anchor="optionsettings" 
align="center" title="Configuration for Optional Features" 
suppress-title="false" style="full"><ttcol align="left">Name </ttcol><ttcol 
align="left">Default </ttcol><ttcol align="left">Description 
</ttcol><c>PRECURSOR_LISTS </c><c>Disabled </c><c>Local setting (<xref 
target="precursor" pageno="false" format="default"/>) </c><c>MSG_AGGREGATION 
</c><c>Disabled </c><c>Local setting (<xref target="aggreg" pageno="false" 
format="default"/>) </c><c>ENABLE_IRREP </c><c>Disabled </c><c>Network-wide 
setting (<xref target="iRREP" pageno="false" format="default"/>) 
</c><c>EXPANDING_RINGS_MULTICAST </c><c>Disabled </c><c>Network-wide setting 
(<xref target="rings" pageno="false" format="default"/>) 
</c></texttable><t></t></section><section title="MetricType Allocation" 
anchor="metric-type" toc="default"><t>The metric types used by AODVv2 are 
identified according to the assignments in <xref target="RFC6551" 
pageno="false" format="default"/>. All implementations MUST use these values.  
</t><texttable anchor="metric-tbl" align="center" title="AODVv2 Metric Types" 
suppress-title="false" style="full"><ttcol align="left">Name of MetricType 
</ttcol><ttcol align="left">Type </ttcol><ttcol align="left">Metric Value Size 
</ttcol><c>Unassigned </c><c>0 </c><c>Undefined </c><c>Hop Count </c><c>3 [TBD] 
</c><c>1 octet </c><c>Unallocated </c><c>9 - 254 </c><c>TBD </c><c>Reserved 
</c><c>255 </c><c>Undefined </c></texttable><t></t></section></section><section 
title="IANA Considerations" anchor="IANA" toc="default"><t>This section 
specifies several <xref target="RFC5444" pageno="false" format="default"/> 
message types and address tlv-types required for AODVv2.  </t><section 
title="RFC 5444 Message Types" anchor="msgtype" toc="default"><t>This 
specification defines four Message Types, to be allocated from the 0-223 range 
of the "Message Types" namespace defined in <xref target="RFC5444" 
pageno="false" format="default"/>, as specified in <xref target="msgtypes" 
pageno="false" format="default"/>.  </t><texttable anchor="msgtypes" 
align="center" title="AODVv2 Message Types" suppress-title="false" 
style="full"><ttcol align="left">Name of Message </ttcol><ttcol 
align="left">Type </ttcol><c>Route Request (RREQ) </c><c>10 (TBD) </c><c>Route 
Reply (RREP) </c><c>11 (TBD) </c><c>Route Error (RERR) </c><c>12 (TBD) 
</c><c>Route Reply Acknowledgement (RREP_Ack) </c><c>13 (TBD) 
</c></texttable><t></t></section><section title="RFC 5444 Address Block TLV 
Types" anchor="addrtlvspec" toc="default"><t>This specification defines three 
Address Block TLV Types, to be allocated from the "Address Block TLV Types" 
namespace defined in <xref target="RFC5444" pageno="false" format="default"/>, 
as specified in <xref target="addrtlvtypes" pageno="false" format="default"/>.  
</t><texttable anchor="addrtlvtypes" align="center" title="AODVv2 Address Block 
TLV Types" suppress-title="false" style="full"><ttcol align="left" 
width="41%">Name of TLV </ttcol><ttcol align="left" width="13%">Type 
</ttcol><ttcol align="left" width="22%">Length (octets) </ttcol><ttcol 
align="left" width="22%">Reference </ttcol><c>PATH_METRIC </c><c>11 (TBD) 
</c><c>depends on MetricType </c><c><xref target="aodv_msgs" pageno="false" 
format="default"/> </c><c>SEQ_NUM </c><c>12 (TBD) </c><c>2 </c><c><xref 
target="aodv_msgs" pageno="false" format="default"/> </c><c>ADDRESS_TYPE 
</c><c>13 (TBD) </c><c>1 </c><c><xref target="represent" pageno="false" 
format="default"/> </c></texttable><t></t></section><section 
title="ADDRESS_TYPE TLV Values" anchor="address-type" toc="default"><t>These 
values are used in the <xref target="RFC5444" pageno="false" format="default"/> 
Address Type TLV discussed in <xref target="represent" pageno="false" 
format="default"/>.  All implementations MUST use these values.  </t><texttable 
anchor="addrtype-tbl" align="center" title="AODVv2 Address Types" 
suppress-title="false" style="full"><ttcol align="left">Address Type 
</ttcol><ttcol align="left">Value </ttcol><c>ORIGADDR </c><c>0 </c><c>TARGADDR 
</c><c>1 </c><c>UNREACHABLE </c><c>2 </c><c>PKTSOURCE </c><c>3 </c><c>INTEND 
</c><c>4 </c><c>UNSPECIFIED </c><c>255 
</c></texttable><t></t></section></section><section title="Security 
Considerations" anchor="Security" toc="default"><t>This section describes 
various security considerations and potential avenues to secure AODVv2 routing. 
The objective of the AODVv2 protocol is for each router to communicate 
reachability information about addresses for which it is responsible, and for 
routes it has learned from other AODVv2 routers. Positive routing information 
(i.e. a route exists) is distributed via RREQ and RREP messages.  AODVv2 
routers store the information contained in these messages in order to properly 
forward IP packets, and they generally provide this information to other AODVv2 
routers. Negative routing information (i.e. a route does not exist) is 
distributed via RERR messages. AODVv2 routers process these messages and remove 
routes, and forward this information to other AODVv2 routers.  </t><t>Networks 
using AODVv2 to maintain connectivity and establish routes on demand may be 
vulnerable to certain well-known types of threats.  Flooding attacks using RREQ 
amount to a denial of service for route discovery. Valid route table entries 
can be replaced by maliciously constructed RREQ and RREP messages. Links could 
be erroneously treated as bidirectional if malicious unsolicited RREP or 
RREP_Ack messages were to be accepted. Replay attacks using RERR messages 
could, in some circumstances, be used to disrupt active routes.  Passive 
inspection of AODVv2 control messages could enable unauthorized devices to gain 
information about the network topology, since exchanging such information is 
the main purpose of AODVv2.  </t><t>The on-demand nature of AODVv2 route 
discovery reduces the vulnerability to route disruption. Since control traffic 
for updating route tables is diminished, there is less opportunity for failure. 
Processing requirements for AODVv2 are typically quite small, and would 
typically be dominated by calculations to verify integrity. This has the effect 
of reducing (but by no means eliminating) AODVv2's vulnerability to denial of 
service attacks.  </t><t>Encryption MAY be used for AODVv2 messages. If the 
routers share a packet-level security association, the message data can be 
encrypted prior to message transmission. The establishment of such security 
associations is outside the scope of this specification. Encryption will not 
only protect against unauthorized devices obtaining information about network 
topology but will ensure that only trusted routers participate in routing 
operations.  </t><t>Message integrity checking is enabled by the Integrity 
Check Value mechanisms defined in <xref target="RFC7182" pageno="false" 
format="default"/>. The data contained in AODVv2 routing protocol messages 
SHOULD be verified using ICV values, to avoid the use of message data if the 
message has been tampered with or replayed. Otherwise, it would be possible to 
disrupt communications by injecting nonexistent or malicious routes into the 
route tables of routers within the ad hoc network.  This can result in loss of 
data or message processing by unauthorized devices.  </t><t>The remainder of 
this section provides specific recommendations for the use of the integrity 
checking and timestamp functions defined in <xref target="RFC7182" 
pageno="false" format="default"/> to ensure the integrity of each AODVv2 
message. The calculation used for the Integrity Check Value will depend on the 
message type. Sequence numbers can be used as timestamps to protect against 
replay, since they are known to be strictly increasing.  </t><t>RREQ messages 
advertise a route to OrigAddr, and impose very little processing requirement 
for receivers. The main threat presented by sending an RREQ message with false 
information is that traffic to OrigAddr could be disrupted. Since RREQ is 
multicast and likely to be received by all routers in the ad hoc network, this 
threat could have serious impact on applications communicating by way of 
OrigAddr. The actual threat to disrupt routes to OrigAddr is reduced by the 
AODVv2 mechanism of marking RREQ-derived routes as "Unconfirmed" until the link 
to the next hop is confirmed.  If AODVv2 routers always verify the integrity of 
the RREQ message data, then the threat of disruption is minimized. The ICV 
mechanisms offered in <xref target="RFC7182" pageno="false" format="default"/> 
are sufficient for this purpose. Since OrigAddr is included in the RREQ, the 
ICV can be calculated and verified using message contents. The ICV SHOULD be 
verified at every step along the dispersal path of the RREQ to mitigate the 
threat. Since RREQ_Gen's sequence number is incremented for each new RREQ, 
replay protection is already afforded and no extra timestamp mechanism is 
required.  </t><t>RREP messages advertise a route to TargAddr, and impose very 
little processing requirement for receivers. The main threat presented by 
sending an RREP message with false information is that traffic to TargAddr 
could be disrupted. Since RREP is unicast, this threat is restricted to 
receivers along the path from OrigAddr to TargAddr. If AODVv2 routers always 
verify the integrity of the RREP message data, then this threat is minimized. 
This facility is offered by the ICV mechanisms in <xref target="RFC7182" 
pageno="false" format="default"/>. Since TargAddr is included as a Data Element 
of the RREP, the ICV can be calculated and verified using message contents. The 
ICV SHOULD be verified at every step along the unicast path of the RREP. Since 
RREP_Gen's sequence number is incremented for each new RREP, replay protection 
is afforded and no extra timestamp mechanism is required.  </t><t>RREP_Ack 
messages are intended to verify bidirectional neighbor connectivity, and impose 
very little processing requirement for receivers. The main threat presented by 
sending an RREP_Ack message with false information is that the route advertised 
to a target address in an RREP might be erroneously accepted even though the 
route would contain a unidirectional link and thus not be suitable for most 
traffic. Since RREP_Ack is unicast, this threat is strictly local to the RREP 
transmitter expecting the acknowledgement. A malicious router could also 
attempt to send an unsolicited RREP_Ack to convince another router that a 
bidirectional link exists and subsequently use further messages to divert 
traffic along a route which is not valid. If AODVv2 routers always verify the 
integrity of the RREP_Ack message data, then this threat is minimized. This 
facility is offered by the ICV mechanisms in <xref target="RFC7182" 
pageno="false" format="default"/>. The RREP_Gen SHOULD use the source IP 
address of the RREP_Ack to identify the sender, and so the ICV SHOULD be 
calculated using the message contents and the IP source address. The message 
must also include the Timestamp defined in <xref target="RFC7182" 
pageno="false" format="default"/> to protect against replay attacks, using 
TargSeqNum from the RREP as the value in the TIMESTAMP TLV.  </t><t>RERR 
messages remove routes, and impose very little processing requirement for 
receivers. The main threat presented by sending an RERR message with false 
information is that traffic to the advertised destinations could be disrupted. 
Since RERR is multicast and can be received by many routers in the ad hoc 
network, this threat could have serious impact on applications communicating by 
way of the sender of the RERR message. However, since the sender of the RERR 
message with erroneous information MAY be presumed to be either malicious or 
broken, it is better that such routes not be used anyway. Another threat is 
that a malicious RERR message MAY be sent with a PktSource included, to disrupt 
PktSource's ability to send to the addresses contained in the RERR. If AODVv2 
routers always verify the integrity of the RERR message data, then this threat 
is reduced. This facility is offered by the ICV mechanisms in <xref 
target="RFC7182" pageno="false" format="default"/>. The receiver of the RERR 
SHOULD use the source IP address of the RERR to identify the sender. The 
message must also include the Timestamp defined in <xref target="RFC7182" 
pageno="false" format="default"/> to protect against replay attacks, using 
SeqNum from RERR_Gen as the value in the TIMESTAMP TLV.  </t></section><section 
title="Acknowledgments" anchor="acknowledgments" toc="default"><t>AODVv2 is a 
descendant of the design of previous MANET on-demand protocols, especially AODV 
<xref target="RFC3561" pageno="false" format="default"/> and DSR <xref 
target="RFC4728" pageno="false" format="default"/>. Changes to previous MANET 
on-demand protocols stem from research and implementation experiences. Thanks 
to Elizabeth Belding and Ian Chakeres for their long time authorship of AODV. 
Additional thanks to Derek Atkins, Emmanuel Baccelli, Abdussalam Baryun, Ramon 
Caceres, Thomas Clausen, Justin Dean, Christopher Dearlove, Fatemeh Ghassemi, 
Ulrich Herberg, Henner Jakob, Ramtin Khosravi, Luke Klein-Berndt, Lars 
Kristensen, Tronje Krop, Koojana Kuladinithi, Kedar Namjoshi, Keyur Patel, 
Alexandru Petrescu, Henning Rogge, Fransisco Ros, Pedro Ruiz, Christoph Sommer, 
Romain Thouvenin, Richard Trefler, Jiazi Yi, Seung Yi, Behnaz Yousefi, and Cong 
Yuan, for their reviews of AODVv2 and DYMO, as well as numerous specification 
suggestions.  </t></section> </middle>
  <back><references title="Normative References"><reference anchor="RFC2119" 
target="http://www.rfc-editor.org/info/rfc2119";><front><title>Key words for use 
in RFCs to Indicate Requirement Levels</title><author initials="S." 
surname="Bradner" fullname="S. Bradner"><organization/></author><date 
year="1997" month="March"/><abstract><t>In many standards track documents 
several words are used to signify the requirements in the specification.  These 
words are often capitalized. This document defines these words as they should 
be interpreted in IETF documents.  This document specifies an Internet Best 
Current Practices for the Internet Community, and requests discussion and 
suggestions for improvements.</t></abstract></front><seriesInfo name="BCP" 
value="14"/><seriesInfo name="RFC" value="2119"/><seriesInfo name="DOI" 
value="10.17487/RFC2119"/></reference><reference anchor="RFC3561" 
target="http://www.rfc-editor.org/info/rfc3561";><front><title>Ad hoc On-Demand 
Distance Vector (AODV) Routing</title><author initials="C." surname="Perkins" 
fullname="C. Perkins"><organization/></author><author initials="E." 
surname="Belding-Royer" fullname="E. 
Belding-Royer"><organization/></author><author initials="S." surname="Das" 
fullname="S. Das"><organization/></author><date year="2003" 
month="July"/><abstract><t>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.  This memo defines an 
Experimental Protocol for the Internet 
community.</t></abstract></front><seriesInfo name="RFC" 
value="3561"/><seriesInfo name="DOI" 
value="10.17487/RFC3561"/></reference><reference anchor="RFC4291" 
target="http://www.rfc-editor.org/info/rfc4291";><front><title>IP Version 6 
Addressing Architecture</title><author initials="R." surname="Hinden" 
fullname="R. Hinden"><organization/></author><author initials="S." 
surname="Deering" fullname="S. Deering"><organization/></author><date 
year="2006" month="February"/><abstract><t>This specification defines the 
addressing architecture of the IP Version 6 (IPv6) protocol.  The document 
includes the IPv6 addressing model, text representations of IPv6 addresses, 
definition of IPv6 unicast addresses, anycast addresses, and multicast 
addresses, and an IPv6 node's required addresses.</t><t>This document obsoletes 
RFC 3513, "IP Version 6 Addressing Architecture".   
[STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="4291"/><seriesInfo name="DOI" 
value="10.17487/RFC4291"/></reference><reference anchor="RFC5082" 
target="http://www.rfc-editor.org/info/rfc5082";><front><title>The Generalized 
TTL Security Mechanism (GTSM)</title><author initials="V." surname="Gill" 
fullname="V. Gill"><organization/></author><author initials="J." 
surname="Heasley" fullname="J. Heasley"><organization/></author><author 
initials="D." surname="Meyer" fullname="D. 
Meyer"><organization/></author><author initials="P." surname="Savola" 
fullname="P. Savola" role="editor"><organization/></author><author 
initials="C." surname="Pignataro" fullname="C. 
Pignataro"><organization/></author><date year="2007" 
month="October"/><abstract><t>The use of a packet's Time to Live (TTL) (IPv4) 
or Hop Limit (IPv6) to verify whether the packet was originated by an adjacent 
node on a connected link has been used in many recent protocols.  This document 
generalizes this technique.  This document obsoletes Experimental RFC 3682.  
[STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="5082"/><seriesInfo name="DOI" 
value="10.17487/RFC5082"/></reference><reference anchor="RFC5444" 
target="http://www.rfc-editor.org/info/rfc5444";><front><title>Generalized 
Mobile Ad Hoc Network (MANET) Packet/Message Format</title><author 
initials="T." surname="Clausen" fullname="T. 
Clausen"><organization/></author><author initials="C." surname="Dearlove" 
fullname="C. Dearlove"><organization/></author><author initials="J." 
surname="Dean" fullname="J. Dean"><organization/></author><author initials="C." 
surname="Adjih" fullname="C. Adjih"><organization/></author><date year="2009" 
month="February"/><abstract><t>This document specifies a packet format capable 
of carrying multiple messages that may be used by mobile ad hoc network routing 
protocols.  [STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="5444"/><seriesInfo name="DOI" 
value="10.17487/RFC5444"/></reference><reference anchor="RFC5497" 
target="http://www.rfc-editor.org/info/rfc5497";><front><title>Representing 
Multi-Value Time in Mobile Ad Hoc Networks (MANETs)</title><author 
initials="T." surname="Clausen" fullname="T. 
Clausen"><organization/></author><author initials="C." surname="Dearlove" 
fullname="C. Dearlove"><organization/></author><date year="2009" 
month="March"/><abstract><t>This document describes a general and flexible TLV 
(type-length-value structure) for representing time-values, such as an interval 
or a duration, using the generalized Mobile Ad hoc NETwork (MANET) packet/ 
message format.  It defines two Message TLVs and two Address Block TLVs for 
representing validity and interval times for MANET routing protocols.  
[STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="5497"/><seriesInfo name="DOI" 
value="10.17487/RFC5497"/></reference><reference anchor="RFC5498" 
target="http://www.rfc-editor.org/info/rfc5498";><front><title>IANA Allocations 
for Mobile Ad Hoc Network (MANET) Protocols</title><author initials="I." 
surname="Chakeres" fullname="I. Chakeres"><organization/></author><date 
year="2009" month="March"/><abstract><t>This document enumerates several common 
IANA allocations for use by Mobile Ad hoc NETwork (MANET) protocols.  The 
following well-known numbers are required: a UDP port number, an IP protocol 
number, and a link-local multicast group address.  
[STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="5498"/><seriesInfo name="DOI" 
value="10.17487/RFC5498"/></reference><reference anchor="RFC6551" 
target="http://www.rfc-editor.org/info/rfc6551";><front><title>Routing Metrics 
Used for Path Calculation in Low-Power and Lossy Networks</title><author 
initials="JP." surname="Vasseur" fullname="JP. Vasseur" 
role="editor"><organization/></author><author initials="M." surname="Kim" 
fullname="M. Kim" role="editor"><organization/></author><author initials="K." 
surname="Pister" fullname="K. Pister"><organization/></author><author 
initials="N." surname="Dejean" fullname="N. 
Dejean"><organization/></author><author initials="D." surname="Barthel" 
fullname="D. Barthel"><organization/></author><date year="2012" 
month="March"/><abstract><t>Low-Power and Lossy Networks (LLNs) have unique 
characteristics compared with traditional wired and ad hoc networks that 
require the specification of new routing metrics and constraints.  By contrast, 
with typical Interior Gateway Protocol (IGP) routing metrics using hop counts 
or link metrics, this document specifies a set of link and node routing metrics 
and constraints suitable to LLNs to be used by the Routing Protocol for 
Low-Power and Lossy Networks (RPL).   
[STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="6551"/><seriesInfo name="DOI" 
value="10.17487/RFC6551"/></reference><reference anchor="RFC7182" 
target="http://www.rfc-editor.org/info/rfc7182";><front><title>Integrity Check 
Value and Timestamp TLV Definitions for Mobile Ad Hoc Networks 
(MANETs)</title><author initials="U." surname="Herberg" fullname="U. 
Herberg"><organization/></author><author initials="T." surname="Clausen" 
fullname="T. Clausen"><organization/></author><author initials="C." 
surname="Dearlove" fullname="C. Dearlove"><organization/></author><date 
year="2014" month="April"/><abstract><t>This document revises, extends, and 
replaces RFC 6622.  It describes general and flexible TLVs for representing 
cryptographic Integrity Check Values (ICVs) and timestamps, using the 
generalized Mobile Ad Hoc Network (MANET) packet/message format defined in RFC 
5444.  It defines two Packet TLVs, two Message TLVs, and two Address Block TLVs 
for affixing ICVs and timestamps to a packet, a message, and one or more 
addresses, respectively.</t></abstract></front><seriesInfo name="RFC" 
value="7182"/><seriesInfo name="DOI" 
value="10.17487/RFC7182"/></reference></references><references 
title="Informative References"><reference anchor="RFC2501" 
target="http://www.rfc-editor.org/info/rfc2501";><front><title>Mobile Ad hoc 
Networking (MANET): Routing Protocol Performance Issues and Evaluation 
Considerations</title><author initials="S." surname="Corson" fullname="S. 
Corson"><organization/></author><author initials="J." surname="Macker" 
fullname="J. Macker"><organization/></author><date year="1999" 
month="January"/><abstract><t>This memo first describes the characteristics of 
Mobile Ad hoc Networks (MANETs), and their idiosyncrasies with respect to 
traditional, hardwired packet networks.  It then discusses the effect these 
differences have on the design and evaluation of network control protocols with 
an emphasis on routing performance evaluation considerations. This memo 
provides information for the Internet 
community.</t></abstract></front><seriesInfo name="RFC" 
value="2501"/><seriesInfo name="DOI" 
value="10.17487/RFC2501"/></reference><reference anchor="RFC4193" 
target="http://www.rfc-editor.org/info/rfc4193";><front><title>Unique Local IPv6 
Unicast Addresses</title><author initials="R." surname="Hinden" fullname="R. 
Hinden"><organization/></author><author initials="B." surname="Haberman" 
fullname="B. Haberman"><organization/></author><date year="2005" 
month="October"/><abstract><t>This document defines an IPv6 unicast address 
format that is globally unique and is intended for local communications, 
usually inside of a site. These addresses are not expected to be routable on 
the global Internet.  [STANDARDS-TRACK]</t></abstract></front><seriesInfo 
name="RFC" value="4193"/><seriesInfo name="DOI" 
value="10.17487/RFC4193"/></reference><reference anchor="RFC4728" 
target="http://www.rfc-editor.org/info/rfc4728";><front><title>The Dynamic 
Source Routing Protocol (DSR) for Mobile Ad Hoc Networks for 
IPv4</title><author initials="D." surname="Johnson" fullname="D. 
Johnson"><organization/></author><author initials="Y." surname="Hu" 
fullname="Y. Hu"><organization/></author><author initials="D." surname="Maltz" 
fullname="D. Maltz"><organization/></author><date year="2007" 
month="February"/><abstract><t>The Dynamic Source Routing protocol (DSR) is a 
simple and efficient routing protocol designed specifically for use in 
multi-hop wireless ad hoc networks of mobile nodes.  DSR allows the network to 
be completely self-organizing and self-configuring, without the need for any 
existing network infrastructure or administration.  The protocol is composed of 
the two main mechanisms of "Route Discovery" and "Route Maintenance", which 
work together to allow nodes to discover and maintain routes to arbitrary 
destinations in the ad hoc network. All aspects of the protocol operate 
entirely on demand, allowing the routing packet overhead of DSR to scale 
automatically to only what is needed to react to changes in the routes 
currently in use.  The protocol allows multiple routes to any destination and 
allows each sender to select and control the routes used in routing its 
packets, for example, for use in load balancing or for increased robustness. 
Other advantages of the DSR protocol include easily guaranteed loop-free 
routing, operation in networks containing unidirectional links, use of only 
"soft state" in routing, and very rapid recovery when routes in the network 
change.  The DSR protocol is designed mainly for mobile ad hoc networks of up 
to about two hundred nodes and is designed to work well even with very high 
rates of mobility. This document specifies the operation of the DSR protocol 
for routing unicast IPv4 packets.  This memo defines an Experimental Protocol 
for the Internet community.</t></abstract></front><seriesInfo name="RFC" 
value="4728"/><seriesInfo name="DOI" 
value="10.17487/RFC4728"/></reference><reference anchor="RFC4861" 
target="http://www.rfc-editor.org/info/rfc4861";><front><title>Neighbor 
Discovery for IP version 6 (IPv6)</title><author initials="T." surname="Narten" 
fullname="T. Narten"><organization/></author><author initials="E." 
surname="Nordmark" fullname="E. Nordmark"><organization/></author><author 
initials="W." surname="Simpson" fullname="W. 
Simpson"><organization/></author><author initials="H." surname="Soliman" 
fullname="H. Soliman"><organization/></author><date year="2007" 
month="September"/><abstract><t>This document specifies the Neighbor Discovery 
protocol for IP Version 6.  IPv6 nodes on the same link use Neighbor Discovery 
to discover each other's presence, to determine each other's link-layer 
addresses, to find routers, and to maintain reachability information about the 
paths to active neighbors.  [STANDARDS-TRACK]</t></abstract></front><seriesInfo 
name="RFC" value="4861"/><seriesInfo name="DOI" 
value="10.17487/RFC4861"/></reference><reference anchor="RFC5148" 
target="http://www.rfc-editor.org/info/rfc5148";><front><title>Jitter 
Considerations in Mobile Ad Hoc Networks (MANETs)</title><author initials="T." 
surname="Clausen" fullname="T. Clausen"><organization/></author><author 
initials="C." surname="Dearlove" fullname="C. 
Dearlove"><organization/></author><author initials="B." surname="Adamson" 
fullname="B. Adamson"><organization/></author><date year="2008" 
month="February"/><abstract><t>This document provides recommendations for 
jittering (randomly modifying timing) of control traffic transmissions in 
Mobile Ad hoc NETwork (MANET) routing protocols to reduce the probability of 
transmission collisions.  This memo provides information for the Internet 
community.</t></abstract></front><seriesInfo name="RFC" 
value="5148"/><seriesInfo name="DOI" 
value="10.17487/RFC5148"/></reference><reference anchor="RFC6130" 
target="http://www.rfc-editor.org/info/rfc6130";><front><title>Mobile Ad Hoc 
Network (MANET) Neighborhood Discovery Protocol (NHDP)</title><author 
initials="T." surname="Clausen" fullname="T. 
Clausen"><organization/></author><author initials="C." surname="Dearlove" 
fullname="C. Dearlove"><organization/></author><author initials="J." 
surname="Dean" fullname="J. Dean"><organization/></author><date year="2011" 
month="April"/><abstract><t>This document describes a 1-hop and symmetric 2-hop 
neighborhood discovery protocol (NHDP) for mobile ad hoc networks (MANETs).  
[STANDARDS-TRACK]</t></abstract></front><seriesInfo name="RFC" 
value="6130"/><seriesInfo name="DOI" 
value="10.17487/RFC6130"/></reference><!--<?rfc include="reference.RFC.6621" ?> 
--><reference anchor="I-D.perkins-irrep"><front><title>Intermediate RREP for 
dynamic MANET On-demand (AODVv2) Routing</title><author initials="C" 
surname="Perkins" fullname="Charles Perkins"><organization/></author><date 
month="May" day="30" year="2015"/><abstract><t>The Ad Hoc On-demand Distance 
Vector (AODVv2) routing protocol is intended for use by mobile routers in 
wireless, multihop networks. AODVv2 determines unicast routes among AODVv2 
routers within the network in an on-demand fashion, offering on-demand 
convergence in dynamic topologies.  This document specifies an extension to 
AODVv2 (possibly useful with other reactive routing protocols) enabling 
intermediate nodes to shorten route discovery 
times.</t></abstract></front><seriesInfo name="Internet-Draft" 
value="draft-perkins-irrep-03"/><format type="TXT" 
target="http://www.ietf.org/internet-drafts/draft-perkins-irrep-03.txt"/></reference><reference
 anchor="Perkins94" quote-title="true"><front><title>Highly Dynamic 
Destination-Sequenced Distance-Vector Routing (DSDV) for Mobile 
Computers</title><author fullname="Charles E. Perkins" initials="C." 
surname="Perkins"><organization>IBM, TJ Watson Research Center 
</organization></author><author fullname="Pravin Bhagwat" initials="P." 
surname="Bhagwat"><organization>Computer Science Department, University of 
Maryland </organization></author><date month="August" 
year="1994"/></front><seriesInfo name="Proceedings" value="of the ACM SIGCOMM 
'94 Conference on Communications Architectures, Protocols and Applications, 
London, UK, pp. 234-244"/></reference><reference anchor="Perkins99" 
quote-title="true"><front><title>Ad hoc On-Demand Distance Vector (AODV) 
Routing</title><author fullname="Charles E. Perkins" initials="C." 
surname="Perkins"><organization/></author><author fullname="Elizabeth M. Royer" 
initials="E." surname="Royer"><organization>University of 
California</organization></author><date month="February" 
year="1999"/></front><seriesInfo name="Proceedings" value="of the 2nd IEEE 
Workshop on Mobile Computing Systems and Applications, New Orleans, LA, pp. 
90-100"/></reference><reference anchor="Sholander02" 
quote-title="true"><front><title>A Portable Software Implementation of a Hybrid 
MANET Routing Protocol</title><author fullname="P. Sholander" initials="P." 
surname="Sholander"/><author fullname="P. Coccoli" initials="P." 
surname="Coccoli"/><author fullname="T. Oakes" initials="T." 
surname="Oakes"/><author fullname="S. Swank" initials="S." 
surname="Swank"/><date year="2002"/></front></reference><reference 
anchor="Koodli01" quote-title="true"><front><title>Fast handovers and context 
transfers in mobile networks</title><author fullname="Rajeev Koodli" 
initials="R." surname="Koodli"/><author fullname="Charles E. Perkins" 
initials="C." surname="Perkins"/><date month="October" 
year="2001"/></front><seriesInfo name="Proceedings" value="of the ACM SIGCOMM 
Computer Communication Review 2001, Volume 31 Issue 5, 
37-47"/></reference><!--<?rfc include="reference.I-D.chakeres-manet-manetid" ?> 
<?rfc include="reference.I-D.clausen-lln-loadng" ?> --></references><!--This 
document was prepared using Pandoc2rfc, https://github.com/miekg/pandoc2rfc ;
--><section title="AODVv2 Draft Updates" anchor="aodvv2-draft-updates" 
toc="default"><t>This section lists the changes between AODVv2 revisions 
...-13.txt and ...-14.txt.  </t><t><list style="symbols"><t>Moved Address Type 
TLV Value definitions to IANA section.  </t><t>Removed use of MAX_HOPCOUNT and 
<xref target="RFC5444" pageno="false" format="default"/> msg-hop-limit, 
msg-hop-count.  </t><t>Allow only one Unconfirmed route.  </t><t>Incorporate 
changes from Justin Dean's review.  </t></list></t></section> </back>
</rfc>

Other related posts:

  • » [aodvv2-discuss] Handover of editorial pen - Victoria Mercieca