Mobile Ad hoc Networks Working Group C.E. Perkins
Internet-Draft Futurewei
Intended status: Standards Track I.D. Chakeres
Expires: July 08, 2013 CenGen
January 04, 2013

Dynamic MANET On-demand (AODVv2) Routing


The Dynamic MANET On-demand (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.

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:/⁠/⁠⁠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 July 08, 2013.

Copyright Notice

Copyright (c) 2013 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:/⁠/⁠⁠license-⁠info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. 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

The Dynamic MANET On-demand (AODVv2) routing protocol [formerly named DYMO] enables on-demand, multihop unicast routing among AODVv2 routers in mobile ad hod networks [MANETs][RFC2501]. The basic operations of the AODVv2 protocol are route discovery and route maintenance. Route discovery is performed when an AODVv2 router must transmit a packet towards a destination for which it does not have a route. Route maintenance is performed to avoid prematurely expunging routes from the route table, and to avoid dropping packets when an active route breaks.

During route discovery, an AODVv2 router (RREQ_Gen) multicasts a Route Request message (RREQ) to find a route toward some target destination. Using a hop-by-hop retransmission algorithm, each AODVv2 router receiving the RREQ message records a route toward the originator. When the target's AODVv2 router (RREP_Gen) receives the RREQ, it records a route toward RREQ_Gen and generates a Route Reply (RREP) unicast toward RREQ_Gen. Each AODVv2 router that receives the RREP stores a route toward the target, and again unicasts the RREP toward the originator. When RREQ_Gen receives the RREP, routes have then been established between RREQ_Gen (the originating AODVv2 router) and RREP_Gen (the target's AODVv2 router) in both directions.

Route maintenance consists of two operations. In order to maintain active routes, AODVv2 routers extend route lifetimes upon successfully forwarding a packet. When a data packet is received downstream for forwarding but there is no valid route for the destination, then the AODVv2 router of the source of the packet is notified via a Route Error (RERR) message. Each upstream router that receives the RERR marks the route as broken. Before such an upstream AODVv2 router could forward a packet to the same destination, it would have to perform route discovery again for that destination.

AODVv2 uses sequence numbers to assure loop freedom [Perkins99], similarly to AODV. Sequence numbers enable AODVv2 routers to determine the temporal order of AODVv2 route discovery messages, thereby avoiding use of stale routing information. Unlike AODV, AODVv2 uses RFC 5444 message and TLV formats.

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

This document also uses some terminology from [RFC5444].

This document defines the following terminology:


A bi-directional relationship between neighboring AODVv2 routers for the purpose of exchanging routing information. Not every pair of neighboring routers will necessarily form an adjacency. Neighboring routers may form an adjacency based on various information or other protocols; for example, exchange of AODVv2 routing messages, other protocols (e.g. NDP [RFC4861] or NHDP [RFC6130]), or manual configuration. Loss of a routing adjacency may also be based upon similar information; monitoring of adjacencies where packets are being forwarded is required (see Section 8.2).
AODVv2 Router

An IP addressable device in the ad-hoc network that performs the AODVv2 protocol operations specified in this document.
AODVv2 Sequence Number (SeqNum)

Same as Sequence Number.

The current time as maintained by the AODVv2 router.

Ignore for further processing (see Section 5.4), and delete unless it is required to keep the message in the packet for purposes of authentication.
Handling Router (HandlingRtr)

HandlingRtr denotes the AODVv2 router receiving and handling an AODVv2 message.
Incoming Link

A link over which an AODVv2 router has received a message from an adjacent router.

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

An IP addressable device in the ad-hoc network. A node may be an AODVv2 router, or it may be a device in the network that does not perform any AODVv2 protocol operations. All nodes in this document are either AODVv2 Routers or else Router Clients.
Originating Node (OrigNode)

The Originating Node is the node that launched the application requiring communication with the Target Node. If OrigNode is not itself an AODVv2 router, its AODVv2 router (RREQ_Gen) has the responsibility to generate a AODVv2 RREQ message on behalf of OrigNode when necessary to discover a route.

A protocol operation is said to be "reactive" if it is performed only in reaction to specific events. As used in this document, "reactive" is essentially synonymous with "on-demand".
Routable Unicast IP Address

A routable unicast IP address is a unicast IP address that when put into the IP.DestinationAddress field is scoped sufficiently to be forwarded by a router. Globally-scoped unicast IP addresses and Unique Local Addresses (ULAs) [RFC6549] are examples of routable unicast IP addresses.
Route Error (RERR)

A RERR message is used to indicate that an AODVv2 router does not have a route toward one or more particular destinations.
Route Reply (RREP)

A RREP message is used to establish a route between the RREQ TargetNode and OrigNode, at all the AODVv2 routers between them.
Route Request (RREQ)

An AODVv2 router uses a RREQ message to discover a valid route to a particular destination address, called the RREQ TargetNode. An AODVv2 router processing a RREQ receives routing information for the RREQ OrigNode.
Router Client

An AODVv2 router may be configured with a list of other IP addresses and networks which correspond to other non-router nodes which require the services of the AODVv2 router for route discovery and maintenance. An AODVv2 is always its own client, so that the list of client IP addresses is never empty.
RREP Generating Router (RREP_Gen)

The RREP Generating Router is the AODVv2 router that serves TargNode. RREP_Gen generates the RREP message to advertise a route for TargNode.
RREQ Generating Router (RREQ_Gen)

The RREQ Generating Router is the AODVv2 router that serves OrigNode. RREQ_Gen generates the RREQ message to discover a route for TargNode.
Sequence Number (SeqNum)

AODVv2 mandates that each AODVv2 router maintain an unsigned integer known as the router's "Sequence Number". This Sequence Number guarantees the temporal order of routing information to maintain loop-free routes. This Sequence Number fulfills the same role as the "Destination Sequence Number" of DSDV, and of AODV Sequence Number in RFC 3561[RFC3561]. The value zero (0) is reserved to indicate that the Sequence Number for an address is unknown.
Target Node (TargNode)

The Target Node denotes the node for which a route is needed.
Type-Length-Value structure (TLV)

A generic way to represent information as specified in [RFC5444].
Unreachable Node (UnreachableNode)

An UnreachableNode is a node for which a forwarding route is unknown.
valid route

A route that can be used for forwarding; in other words a route that is not Broken or Expired.

3. Notational Conventions

This document uses the conventions found in Table 1 to describe information in the fields from [RFC5444].

Notation Information Location and/or Meaning
Route[DestAddr] A route table entry towards DestAddr
Route[Addr].{field} A field in a route table entry
-- --
<msg-hop-count> RFC 5444 Message Header <msg-hop-count>
<msg-hop-limit> RFC 5444 Message Header <msg-hop-limit>
AddrBlk an RFC 5444 Address TLV Block
AddrBlk[1] The first address slot in AddrBlk
AddrBlk[N] The Nth address slot in AddrBlk
AddrBlk[OrigNode] AddrBlk[1]
AddrBlk[TargNode] AddrBlk[2]
AddrTLV an RFC 5444 Address Block TLV
AddrTLV[1] the first item in AddrTLV
AddrTLV[N] the Nth item in AddrTLV
AddrTLV[OrigNode] AddrTLV[1]
AddrTLV[TargNode] AddrTLV[2]
MetricTLV Metric AddrTLV for AddrBlk
SeqNumTLV Sequence Number AddrTLV for AddrBlk
-- --
OrigNode Originating Node
RREQ_Gen AODVv2 router originating an RREQ
RREP_Gen AODVv2 router responding to an RREQ
RteMsg Either RREQ or RREP
RteMsg.{field} Field in RREQ or RREP
HandlingRtr Handling Router
TargNode Target Node
UnreachableNode Unreachable Node

4. Applicability Statement

The AODVv2 routing protocol is designed for stub (i.e., non-transit) or disconnected (i.e., from the Internet) mobile ad hoc networks (MANETs). AODVv2 handles a wide variety of mobility patterns by determining routes on-demand. AODVv2 also handles a wide variety of traffic patterns. In networks with a large number of routers, AODVv2 is best suited for relatively sparse traffic scenarios where any particular router forwards packets to only a small percentage of the AODVv2 routers in the network, due to the on-demand nature of route discovery and route maintenance. AODVv2 supports routers with multiple interfaces, as long as each interface has its own (unicast routeable) IP address; the set of all network interfaces supporting AODVv2 is administratively configured in a list (namely, AODVv2_INTERFACES).

Although AODVv2 is closely related to AODV [RFC3561], and has some of the features of DSR [RFC4728], AODVv2 is not interoperable with either of those other two protocols.

AODVv2 is applicable to memory constrained devices, since little routing state is maintained in each AODVv2 router. Only routing information related to routes between active sources and destinations is maintained, in contrast to proactive routing protocols that require routing information to all routers within the MANET be maintained.

In addition to routing for their local applications, AODVv2 routers can also route on behalf of other non-routing nodes (i.e., "hosts", or, in this document, "clients"), reachable via those interfaces. Each AODVv2 router, if serving router clients other than itself, is configured with information about the IP addresses of its clients. No AODVv2 router is required to have information about the relationship between any other AODVv2 router and its router clients.

The coordination among multiple AODVv2 routers to distribute routing information correctly for a shared address (i.e. an address that is advertised and can be reached via multiple AODVv2 routers) is not described in this document. The AODVv2 router operation of shifting responsibility for a routing client from one AODVv2 router to another is mentioned in Appendix D. Address assignment procedures are entirely out of scope for AODVv2. Any such node which is not itself an AODVv2 router SHOULD NOT be served by more than one AODVv2 router.

Multi-homing is difficult unless the sequence number is expanded to include the AODVv2 router's IP address as well as SeqNum. Otherwise, comparing sequence numbers would not work to evaluate freshness. Even when the IP address is included, there isn't a good way to compare sequence numbers from different IP addresses, but at least a handling node can determine whether the two given sequence numbers are comparable. If the route table can store multiple routes for the same destination, then multi-homing can work with sequence numbers augmented by IP addresses.

AODVv2 routers perform route discovery to find a route toward a particular destination. Therefore, AODVv2 routers MUST must be configured to respond to RREQs for a certain set of addresses. When AODVv2 is the only protocol interacting with the forwarding table, AODVv2 MAY be configured to perform route discovery for all unknown unicast destinations.

AODVv2 only utilizes bidirectional links. In the case of possible unidirectional links, either blacklists (see Section 5.2) or other means (e.g. adjacency establishment with only neighboring routers that have bidirectional communication as indicated by NHDP [RFC6130]) of assuring and monitoring bi-directionality is recommended. Otherwise, persistent packet loss or persistent protocol failures could occur. The Cost(L) of bidirectional link L may depend upon the direction across the link for which the cost is measured.

The routing algorithm in AODVv2 may be operated at layers other than the network layer, using layer-appropriate addresses. The routing algorithm makes of some persistent state; if there is no persistent storage available for this state, recovery can impose a performance penalty (e.g., in case of AODVv2 router reboots).

5. Data Structures

5.1. Route Table Entry

The route table entry is a conceptual data structure. Implementations may use any internal representation so long as it provides access to the information specified below.

Conceptually, a route table entry has the following fields:


The (host or network) destination address of the node(s) associated with the routing table entry

The length of the netmask/prefix. If the value of the Route.PrefixLength is not INVALID_PREFIX_LENGTH and is different than the length of addresses in the address family used by the AODVv2 routers, the associated address is a routing prefix, rather than a host address.

The Sequence Number associated with a route table entry

An IP address of the adjacent AODVv2 router on the path toward the Route.Address

The interface used to send packets toward the Route.Address

The time that this route was last used

The time at which this route must expire

A flag indicating whether this Route is broken. This flag is set to true if the next-hop becomes unreachable or in response to processing to a RERR (see Section 8.4)

The type of the metric for the route towards Route.Address

The cost of the route towards Route.Address

A route table entry (i.e., a route) may be in one of the following states:


An Active route is in current use for forwarding packets

An Idle route can be used for forwarding packets, even though it is not in current use

After a route has been idle for too long, it expires, and may no longer be used for forwarding packets

A route marked as Broken cannot be used for forwarding packets but still has valid destination sequence number information.

The expiration of a Timed route is controlled by the Route.ExpirationTime time of the route table entry, not MAX_IDLETIME. Until that time, a Timed route can be used for forwarding packets. Afterwards, the route must be Expired (or expunged).

The route's state determines the operations that can be performed on the route table entry. During use, an Active route is maintained continuously by AODVv2 and is considered to remain active as long as it is used at least once during every ACTIVE_INTERVAL. When a route is no longer Active, it becomes an Idle route. After a route remains Idle for MAX_IDLETIME, it becomes an Expired route; an Expired route is not used for forwarding, but the sequence number information can be maintained until the destination sequence number has had no updates for MAX_SEQNUM_LIFETIME. After MAX_SEQNUM_LIFETIME, old sequence number information is considered no longer valuable and the route is expunged.

MAX_SEQNUM_LIFETIME is the time after a reboot during which an AODVv2 router MUST NOT transmit any routing messages. Thus, if all other AODVv2 routers expunge routes to the rebooted router after that time interval, the rebooted AODVv2 router's sequence number will not be considered stale by any other AODVv2 router in the MANET.

When the link to a route's next hop is broken, the route is marked as being Broken, and the route may no longer be used.

5.2. Bidirectional Connectivity and Blacklists

To avoid repeated failure of Route Discovery, an AODVv2 router (HandlingRtr) handling a RREP message MAY attempt to verify connectivity to the next upstream router towards AODVv2 router originating an RREQ message, by including the Acknowledgement Request (AckReq) message TLV (see Section 15.2) in the RREP. Any unicast packet will satisfy the Acknowledgement Request, for example an ICMP REPLY message. If the verification is not received within UNICAST_MESSAGE_SENT_TIMEOUT, HandlingRtr SHOULD put the upstream neighbor in the blacklist. RREQs received from a blacklisted node SHOULD NOT be retransmitted by HandlingRtr. However, the upstream neighbor should not be permanently blacklisted; after a certain time (MAX_BLACKLIST_TIME), it should once again be considered as a viable upstream neighbor for route discovery operations.

For this purpose, a list of blacklisted nodes along with their time of removal should be maintained:


The IP address of the node that did not verify bidirectional connectivity.

The time at which Blacklist.Node will be removed from the blacklist.

5.3. Router Clients and Client Networks

An AODVv2 router may offer routing services to other nodes that are not AODVv2 routers. AODVv2 defines the Sequence Number to be the same for the AODVv2 router and each of its clients.

For this purpose, CLIENT_ADDRESSES must be configured on each AODVv2 router with the following information:

Client IP address

The IP address of the node that requires routing service from the AODVv2 router.
Client Prefix Length

The length of the routing prefix associated with the client IP address.

If the Client Prefix Length is not the full length of the Client IP address, then the prefix defines a Client Network. If an AODVv2 router is configured to serve a Client Network, then the AODVv2 router MUST serve every node that has an address within the range defined by the routing prefix of the Client Network. The list of Routing Clients for an AODVv2 router is never empty, since an AODVv2 router is always its own client as well.

5.4. AODVv2 Packet Header Fields and Information Elements

In its default mode of operation, AODVv2 uses the UDP port 269 [RFC5498] to carry protocol packets. In addition, IP Protocol Number 138 has been reserved for MANET protocols [RFC5498]. Most AODVv2 packets are sent with the IP destination address set to the link-local multicast address LL-MANET-Routers [RFC5498] unless otherwise specified. Therefore, all AODVv2 routers MUST subscribe to LL-MANET-Routers [RFC5498] to receiving AODVv2 messages. In order to reduce multicast overhead, retransmitting multicast packets in MANETs SHOULD be done according to methods specified in [RFC6621]. AODVv2 does not specify which method should be used to restrict the set of AODVv2 routers that have the responsibility to retransmit multicast packets. Note that multicast packets 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.

The IPv4 TTL (IPv6 Hop Limit) field for all packets containing AODVv2 messages is set to 255. If a packet is received with a value other than 255, any AODVv2 message contained in the packet MUST be disregarded by AODVv2. This mechanism, known as "The Generalized TTL Security Mechanism" (GTSM) [RFC5082] helps to assure that packets have not traversed any intermediate routers.

IP packets containing AODVv2 protocol messages SHOULD be given priority queuing and channel access.

AODVv2 messages are transmitted in packets that conform to the packet and message format specified in [RFC5444]. Here is a brief summary of the format. [RFC5444]. The length of an address (32 bits for IPv4 and 128 bits for IPv6) inside an AODVv2 message is indicated by the msg-addr-length (MAL) in the msg-header, as specified in [RFC5444].

A packet formatted according to RFC 5444 contains zero or more messages.
A message contains a message header, message TLV block, and zero or more address blocks.
Each address block may also have an associated TLV block; this TLV block may encode multiple TLVs. According to RFC 5444, each such TLV may itself include an array of values.

If a packet contains only a single AODVv2 message and no packet TLVs, it need only include a minimal Packet-Header

When multiple messages are aggregated into a single packet according to RFC 5444 formatting, and the aggregation of messages is also authenticated (e.g., with IPsec), and the IP destination is multiple hops away, it becomes infeasible to delete individual messages. In such cases, instead of deleting individual messages, they are maintained in the aggregation of messages, but simply ignored for further processing. In such cases where individual messages cannot be deleted, in this document "disregarded" means "ignored". Otherwise, any such "disregarded" AODVv2 messages SHOULD be deleted from the aggregated messages in the RFC 5444 packet.

5.5. Sequence Numbers

Sequence Numbers allow AODVv2 routers to evaluate the freshness of routing information. Proper maintenance of sequence numbers assures that the destination sequence number value stored by intermediate AODVv2 routers is monotonically increasing along any path from any source to the destination. As a consequence, loop freedom is assured.

Each AODVv2 router in the network MUST maintain its own sequence number An AODVv2 router increments its SeqNum as follows. Most of the time, SeqNum is incremented by simply adding one (1). But to increment SeqNum when it has the value of the largest largest possible number representable as a 16-bit unsigned integer (i.e., 65,535), it MUST be set to one (1). In other words, the sequence number after 65,535 is 1.

An AODVv2 router SHOULD maintain its SeqNum in persistent storage. If an AODVv2 router's SeqNum is lost, it MUST take the following actions to avoid the danger of routing loops. First, the AODVv2 router MUST invalidate all route table entries, by setting Route.Broken for each entry. Furthermore the AODVv2 router MUST wait for at least MAX_SEQNUM_LIFETIME before transmitting or retransmitting any AODVv2 RREQ or RREP messages. If an AODVv2 protocol message is received during this waiting period, the AODVv2 router SHOULD perform normal route table entry updates. If a data packet is received for forwarding to another destination during this waiting period, the AODVv2 router MUST transmit a RERR message indicating that no route is available. At the end of the waiting period the AODVv2 router sets its SeqNum to one (1) and begins performing AODVv2 protocol functions again.

5.6. Enabling Alternate Metrics

AODVv2 route selection in MANETs depends upon associating metric information with each route table entry. When presented with candidate route update information, deciding whether to use the update involves evaluating the metric. Some applications may require metric information other than Hop Count, which has traditionally been the default metric associated with routes in MANET. Unfortunately, it is well known that reliance on Hop Count can cause selection of the worst possible route in many situations.

It is beyond the scope of this document to describe how applications specify route selection at the time they launch processing. One possibility would be to provide a route metric preference as part of the library routines for opening sockets. In view of the above considerations, it is important to enable route selection based on metric information other than Hop Count -- in other words, based on "alternate metrics". Each such alternate metric measures a "cost" of using the associated route, and there are many different kinds of cost (latency, delay, monetary, energy, etc.).

The most significant change when enabling use of alternate metrics is to require the possibility of multiple routes to the same destination, where the "cost" of each of the multiple routes is measured by a different metric. Moreover, the method by which route updates are tested for usefulness has to be slightly generalized to depend upon a more abstract method of evaluation which, in this document, is named "Cost(R)", where 'R' is the route for which the Cost to be evaluated. From the above, the route table information for 'R' must always include the type of metric by which Cost(R) is evaluated, so the metric type does not have to be shown as a distinct parameter for Cost(R). Since determining loop freedom is known to depend on comparing the Cost(R) of route update information to the Cost(R) of an existing stored route using the same metric, AODVv2 must also be able to invoke an abstract routine which in this document is called "LoopFree(R1, R2)". LoopFree(R1, R2) returns TRUE when, (under the assumption of nondecreasing SeqNum during Route Discovery) given that R2 is loop-free and Cost(R2) is the cost of route R2, Cost(R1) is known to guarantee loop freedom of the route R1. In this document, LoopFree(R1,R2) will only be invoked for routes R1 and R2 which use the same metric.

Generally, HopCount may still be considered the default metric for use in MANETs, notwithstanding the above objections. Each metric has to have a Metric Type, and the Metric Type is allocated by IANA as specified in [RFC6551]. Each Route has to include the Metric Type as part of the route table entry for that route. Hop Count has Metric Type assignment 3. The Cost of a route using Metric Type 3 is simply the hop count between the router and the destination. For routes R1 and R2 using Metric Type 3, LoopFree (R1, R2) is TRUE when Cost(R2) ≤ (Cost(R1) + 1). The specification of Cost(R) and LoopFree(R1,R2) for metric types other than 3 is beyond the scope of this document.

Whenever an AODV router receives metric information in an incoming message, the value of the metric is as measured by the transmitting router, and does not reflect the cost of traversing the incoming link. In order to simplify the description of storing accrued route costs in the route table, the Cost() function is also defined to return the value of traversing a link 'L'. In other words, the domain of the Cost() function is enlarged to include links as well as routes. For Metric Type 3, (i.e., the HopCount metric) Cost(L) = 1 for all links. The specification of Cost(L) for metric types other than 3 is beyond the scope of this document. Whether the argument of the Cost() function is a link or a route will, in this document, always be clear. As a natural result of the way routes are looked up according to conformant metric type, all intermediate routers handling a RteMsg will assign the same metric type to all metric information in the RteMsg.

For some metrics, a maximum value is defined, namely MAX_METRIC[i] where 'i' is the Metric Type. AODVv2 does not store routes that cost more than MAX_METRIC[i]. MAX_METRIC[3] is defined to be MAX_HOPCOUNT, where as before 3 is the Metric Type of the HopCount metric. MAX_HOPCOUNT MUST be larger than the AODVv2 network diameter. Otherwise, AODVv2 protocol messages may not reach their intended destinations.

5.7. RREQ Table: Received RREQ

Two incoming RREQ messages are considered to be "comparable" if they were generated by the same AODVv2 router in order to discover a route for the same destination with the same metric type. Using that notion of comparability, when RREQ messages are flooded in a MANET, an AODVv2 router may well receive comparable RREQ messages from more than one of its neighbors. A router, after receiving an RREQ message, MUST check against previous RREQs to assure that its response message would contain useful information. Otherwise, multicast RREQs are likely to be retransmitted over and over again with zero additional benefit but generating a great deal of unnecessary signaling traffic and interference.

When optional multicast RREP (see Section 13.4) is used to enable selection from among multiple possible return routes, an AODVv2 router can eliminate useless RREP messages using the analogous mechanism along with a RREP Table. Nevertheless, the description in this section only refers to RREQ multicast messages.

To avoid transmission of useless RREQ messages, while still enabling the proper handling of earlier RREQ messages that may have somehow been delayed in the network, it is needed for each AODVv2 router to keep a list of the certain information about RREQ messages which it has recently received.

This list is called the AODVv2 Received RREQ Table -- or, more briefly, the RREQ Table. Two AODVv2 RREQ messages are comparable if:

The RREQ Table is maintained so that no two entries in the RREQ Table are comparable -- that is, all RREQs represented in the RREQ Table either have different OrigNode addresses, different TargNode addresses, different metric types, or different message types. If two RREQs have the same metric type and OrigNode and Targnode addresses, the information from the one with the older Sequence Number is not needed in the table; in case they have the same Sequence Number, the one with the greater Metric value is not needed; in case they have the same Metric as well, it does not matter which table entry is maintained. Whenever a RREQ Table entry is updated, its Timestamp field should also be updated to reflect the Current_Time.

Each entry in the RREQ Table has the following fields:

Protocol handling of RERR messages eliminates the need for tracking RERR messages, since the rules for RERR regeneration prevent the phenomenon of useless retansmission that affects RREQ and RREP multicast.

6. AODVv2 Operations on Route Table Entries

In this section, operations are specified for updating the route table due to timeouts and route updates within AODVv2 messages. Route update information in AODVv2 messages includes a destination IP address (DestIP), SeqNum and prefix length associated with DestIP, and the Metric from the node transmitting the AODVv2 message to DestIP. DestIP and prefix length are encoded within an RFC 5444 Address Block, and the SeqNum and Metric associated with each DestIP are encoded in RFC 5444 AddrTLVs. Optionally, there may be AddedNode route updates included in AODVv2 messages, as specified in Section 13.7. In this section, RteMsg is either RREQ or RREP, RteMsg.Addr denotes the [i]th address in an RFC 5444 AddrBlk of the RteMsg, RteMsg.PrefixLength denotes the associated prefix length for RteMsg.Addr, and RteMsg.{field} denotes the corresponding value in the named AddrTLV block associated with RteMsg.Addr. All SeqNum comparisons use signed 16-bit arithmetic.

6.1. Evaluating Incoming Routing Information

If the incoming RteMsg does not have a MetricType Message TLV, then the metric information contained by RteMsg is considered to be of type DEFAULT_METRIC_TYPE -- by default, 3 (for HopCount). Whenever an AODVv2 router (HandlingRtr) handles an incoming RteMsg (i.e., RREQ or RREP), for every relevant address (RteMsg.Addr) in the RteMsg, HandlingRtr searches its route table to see if there is a route table entry with the same MetricType of the RteMsg, matching RteMsg.Addr. If not, HandlingRtr creates a route table entry for RteMsg.Addr as described in Section 6.2. Otherwise, HandlingRtr compares the incoming routing information in RteMsg against the already stored routing information in the route table entry (Route) for RteMsg.Addr, as described below.

	 (RteMsg.SeqNum > Route.SeqNum) OR
	{(RteMsg.SeqNum == Route.SeqNum) AND
       [(RteMsg.Cost < Route.Metric) OR
       ((Route.Broken == TRUE) && LoopFree (RteMsg, Route))]}

Suppose Route[RteMsg.Addr] uses the same metric type as the incoming routing information, and contains Route.SeqNum, Route.Metric, and Route.Broken. Suppose the incoming routing information for Route.Addr is RteMsg.SeqNum and RteMsg.Metric. Define RteMsg.Cost to be (RteMsg.Metric + Cost(L)), where L is the incoming link. The incoming routing information is compared as follows:

1. Stale::
RteMsg.SeqNum < Route.SeqNum :
If RteMsg.SeqNum < Route.SeqNum the incoming information is stale. Using stale routing information is not allowed, since that might result in routing loops. HandlingRtr MUST NOT update the route table entry using the routing information for RteMsg.Addr.
2. Unsafe against loops::
(TRUE != LoopFree (RteMsg, Route)) :
If RteMsg is not Stale (as in (1) above), RteMsg.Cost is next considered to insure loop freedom. If (TRUE != LoopFree (RteMsg, Route)) (see Section 5.6), then the incoming RteMsg information is not guaranteed to prevent routing loops, and it MUST NOT be used to update any route table entry.
3. Longer::

(RteMsg.Cost >= Route.Metric) && (Route.Broken==FALSE)
When RteMsg.SeqNum is the same as in a valid route table entry, and LoopFree (RteMsg, Route) assures loop freedom, incoming information still does not offer any improvement over the existing route table information if RteMsg.Cost ≥ Route.Metric. Using such incoming routing information to update a route table entry is not recommended.
4. Offers improvement::

Incoming routing information that does not match any of the above criteria is better than existing routing table information and SHOULD be used to improve the route table. The following pseudo-code illustrates whether incoming routing information should be used to update an existing route table entry as described in Section 6.2.
  • it is more recent, or
  • it is not stale and is shorter, or
  • it can safely repair a broken route.

6.2. Applying Route Updates To Route Table Entries

To apply the route update, the route table entry is populated with the following information:

With these assignments to the route table entry, a route has been made available, and the route can be used to send any buffered data packets and subsequently to forward any incoming data packets for Route.Addr. An updated route entry also fulfills any outstanding route discovery (RREQ) attempts for Route.Addr.

6.3. Route Table Entry Timeouts

During normal operation, AODVv2 does not require any explicit timeouts to manage the lifetime of a route. However, the route table entry MUST be examined be before using it to forward a packet, as discussed in Section 8.1. Any required expiry or deletion can occur at that time. Nevertheless, it is permissible to implement timers and timeouts to achieve the same effect.

At any time, the route table can be examined and route table entries can be expunged according to their current state at the time of examination, as follows. Section 13.3) then the precursor lists must also be expunged at the same time that the route itself is expunged.

If precursor lists are maintained for the route (as described in

7. Routing Messages RREQ and RREP (RteMsgs)

AODVv2 message types RREQ and RREP are together known as Routing Messages (RteMsgs) and are used to discover a route between an Originating and Target Node, denoted here by OrigNode and TargNode. The constructed route is bidirectional, enabling packets to flow between OrigNode and TargNode. RREQ and RREP have similar information and function, but have some differences in their rules for handling. The main difference between the two messages is that RREQ messages are typically multicast to solicit a RREP, whereas RREP is typically unicast as a response to RREQ.

When an AODVv2 router needs to forward a data packet from a node (OrigNode) in its set of router clients, and it does not have a forwarding route toward the packet's IP destination address (TargNode), the AODVv2 router (RREQ_Gen) generates a RREQ (as described in Section 7.3) to discover a route toward TargNode. Subsequently RREQ_Gen awaits reception of an RREP message (see Section 7.4) or other route table update (see Section 6.2) to establish a route toward TargNode. The RREQ message contains routing information to enable RREQ recipients to route packets back to OrigNode, and the RREP message contains routing information enabling RREP recipients to route packets to TargNode.

7.1. Route Discovery Retries and Buffering

After issuing a RREQ, as described above RREQ_Gen awaits a RREP providing a bidirectional route toward Target Node. If the RREP is not received within RREQ_WAIT_TIME, RREQ_Gen may retry the Route Discovery by generating another RREQ. Route Discovery SHOULD be considered to have failed after DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for a RREP response to the final RREQ. After the attempted Route Discovery has failed, RREQ_Gen MUST wait at least RREQ_HOLDDOWN_TIME before attempting another Route Discovery to the same destination.

To reduce congestion in a network, repeated attempts at route discovery for a particular Target Node SHOULD utilize an binary exponential backoff.

Data packets awaiting a route SHOULD be buffered by RREQ_Gen. This buffer SHOULD have a fixed limited size (BUFFER_SIZE_PACKETS or BUFFER_SIZE_BYTES). Determining which packets to discard first is a matter of policy at each AODVv2 router; in the absence of policy constraints, by default older data packets SHOULD be discarded first. Buffering of data packets can have both positive and negative effects (albeit usually positive). Nodes without sufficient memory available for buffering SHOULD be configured to disable buffering by configuring BUFFER_SIZE_PACKETS == 0 and BUFFER_SIZE_BYTES == 0. Doing so will affect the latency required for launching TCP applications to new destinations.

If a route discovery attempt has failed (i.e., DISCOVERY_ATTEMPTS_MAX attempts have been made without receiving a RREP) to find a route toward the Target Node, any data packets buffered for the corresponding Target Node MUST BE dropped and a Destination Unreachable ICMP message (Type 3) SHOULD be delivered to the source of the data packet. The code for the ICMP message is 1 (Host unreachable error). If RREQ_Gen is not the source (OrigNode), then the ICMP is sent over the interface from which OrigNode sent the packet to the AODVv2 router.

7.2. RteMsg Structure

RteMsgs have the following general format:

    |       RFC 5444 Message Header (optionally, with MsgTLVs)      |
    |              AddrBlk[1,2]:= [OrigNode,TargNode]               |
    |      AddrBlk.PrefixLength[OrigNode OR TargNode] (Optional)    |
    |             SeqNumTLV [OrigNode AND/OR TargNode]              |
    |          MetricTLV [OrigNode, TargNode] (Optional)            |
    |              Added Node Address Block (Optional)              |
    |                 Added Node Address SeqNumTLV                  |
    |           Added Node Address MetricTLV[MetricType]            |

Figure 1: RREQ and RREP (RteMsg) message structure

Required Message Header Fields

The RteMsg MUST contain the following:
  • <msg-hop-limit>
  • Metric Type Message TLV, if MetricType != 3

Optional Message Header Fields

The RteMsg may contain the following:
  • <msg-hop-count>
  • DestOnly TLV (RREQ only: no Intermediate RREP)
  • MetricType TLV (Metric Type for Metric AddrTLV)
  • AckReq TLV (Acknowledgement Requested)


This Address Block contains the IP addresses for RREQ Originating and Target Node (OrigNode and TargNode). For both RREP and RREQ, OrigNode and TargNode are as identified in the context of the RREQ message originator.
SeqNumTLV (Sequence Number AddrTLV)

This Address Block TLV is REQUIRED and carries the destination sequence numbers associated with either OrigNode or TargNode or both.
(Optional) Added Node AddrBlk

AODVv2 allows the inclusion of routing information for other nodes in addition to OrigNode and TargNode.
(Optional) SeqNum AddrTLV
If the Added Node AddrBlk is present, the SeqNum AddrTLV is REQUIRED, to carry the destination sequence numbers associated with the Added Nodes.
(Optional) Metric AddrTLV
If the Added Node AddrBlk is present, this AddrTLV is REQUIRED, to carry the metric information associated with the Added Nodes. See Below.

7.3. RREQ Generation

The AODVv2 router generating the RREQ (RREQ_Gen) on behalf of its client OrigNode follows the steps in this section. OrigNode MUST be a unicast address. The order of protocol elements is illustrated schematically in Figure 1.

  1. RREQ_Gen MUST increment its SeqNum by one (1) according to the rules specified in Section 5.5. This assures that each node receiving the RREQ will update its route table using the information in the RREQ.
  2. If RREQ_Gen requires that only the router providing connectivity to TargNode is allowed to generate a RREP, then RREQ_Gen includes the "Destination RREP Only" (DestOnly) TLV as part of the RFC 5444 message header. This also assures that RREP_Gen increments its sequence number. Otherwise, (if the optional behavior is enabled) other AODVv2 routers MAY respond to the RREQ if they have an valid route to TargNode (see Section 13.2).
  3. <msg-hop-limit> SHOULD be set to MAX_HOPCOUNT.
  4. <msg-hop-count>, if included, MUST be set to 0.
    • This RFC 5444 constraint causes the typical RREQ payload to incur additional enlargement (otherwise, <msg-hop-count> could often be used as the metric).
  5. RREQ.AddrBlk[1] := OrigNode.Addr
  6. RREQ.AddrBlk[2] := TargNode.Addr
  7. If Route[OrigNode].PrefixLength/8 is equal to the number of bytes in the addresses of the RREQ (4 for IPv4, 16 for IPv6), then no <prefix-length> is included with the RREQ.AddrBlk. Otherwise, RREQ.PrefixLength[OrigNode] := Route[OrigNode].PrefixLength according to the rules of RFC 5444 AddrBlk encoding.
  8. RREQ.AddrTLV.SeqNum[1] := RREQ_Gen SeqNum
  9. RREQ.AddrTLV.SeqNum[2] := TargNode SeqNum (only if known)

    If a previous value of the TargNode's SeqNum is known (e.g., from an invalid routing table entry using longest-prefix matching), RREQ_Gen SHOULD include TargNode's SeqNum. If TargNode's SeqNum is not included, AODVv2 routers handling the RREQ assumed that RREQ_Gen does not have that information. If ENABLE_IRREP is enabled, then any route to TargNode will satisfy the RREQ [I-D.perkins-irrep].
  10. RREQ.MetricTLV[1] := Route[OrigNode].Metric

An example RREQ message format is illustrated in Appendix A.1.

7.4. RREP Generation

This section specifies the generation of an RREP by an AODVv2 router (RREP_Gen) that provides connectivity for the Target Node (TargNode) of a RREQ, thus satisfying the routing requirement for packets to flow between OrigNode and TargNode. If TargNode is not a unicast IP address the RREP MUST NOT be generated, and processing for the RREQ is complete. Before transmitting a RREP, the routing information of the RREQ is processed as specified in Section 6.2. The basic format of an RREP conforms to the structure for RteMsgs as shown in Figure 1.

RREP_Gen generates the RREP as follows:

  1. RREP_Gen checks the RREQ against recently received RREQ information as specified in Section 7.6. If a previously received RREQ has made the information in the incoming RREQ to be useless, no RREP is generated and processing is complete.
  2. RREP_Gen MUST increment its SeqNum by one (1) according to the rules specified in Section 5.5.
  3. RREP.AddrBlk[OrigNode] := RREQ.AddrBlk[OrigNode]
  4. RREP.AddrBlk[TargNode] := RREQ.AddrBlk[TargNode]
  5. RREP.SeqNumTLV[OrigNode] := RREQ.SeqNumTLV[OrigNode]
  6. RREP.SeqNumTLV[TargNode] := RREP_Gen's SeqNum
  7. If Route[TargNode].PrefixLength/8 is equal to the number of bytes in the addresses of the RREQ (4 for IPv4, 16 for IPv6), then no <prefix-length> is included with the RREP.AddrBlk. Otherwise, RREP.PrefixLength[TargNode] := Route[TargNode].PrefixLength according to the rules of RFC 5444 AddrBlk encoding.
  8. RREP.MetricType[TargNode] := Route[TargNode].MetricType
  9. RREP.Metric[TargNode] := Route[TargNode].Metric
  10. <msg-hop-count>, if included, MUST be set to 0.
  11. <msg-hop-limit> SHOULD be set to RREQ.<msg-hop-count>.
  12. IP.DestinationAddr := Route[OrigNode].NextHop

An example message format for RREP is illustrated in Appendix A.2.

7.5. Handling a Received RteMsg

Before an AODVv2 router (HandlingRtr) can make use of a received RteMsg (i.e., RREQ or RREP), it first must verify that the RteMsg is permissible according to the following steps. For RREQ, RteMsg.Metric is MetricTLV[OrigNode]. For RREP, RteMsg.Metric is MetricTLV[TargNode].

  1. HandlingRtr MUST handle RteMsgs only from adjacent routers as specified in Section 5.4. RteMsgs from other sources MUST be disregarded.
  2. HandlingRtr examines the RteMsg to ascertain that it contains the required information: TargNode.Addr, OrigNode.Addr, RteMsg.Metric, RteMsg.SeqNum and <msg-hop-limit>. If the required information does not exist, the message is disregarded.
  3. HandlingRtr checks that OrigNode.Addr and TargNode.Addr are valid routable unicast addresses. If not, the message is disregarded.
  4. HandlingRtr checks the Metric Type MsgTLV (if present) to assure that the Metric Type associated with the Metric AddrTLV information in the RREQ or RREP is known, and that Cost(L) can be computed, where 'L' is the incoming link. If not, the message is disregarded.
    • DISCUSSION: or, can change the AddrBlk metric to use HopCount, e.g., measured from <msg-hop-count>.
  5. If (MAX_METRIC[RteMsg.MetricType] - Cost(L)) ≤ RteMsg.Metric, the RteMsg is disregarded, where Cost(L) denotes the cost of traversing the incoming link (i.e., as measured by the network interface receiving the incoming RteMsg).

An AODVv2 router (HandlingRtr) handles a permissible RteMsg according to the following steps.

  1. HandlingRtr MUST process the routing information for OrigNode and TargNode contained in the RteMsg as specified in Section 6.1.
  2. HandlingRtr MAY process AddedNode routing information (if present) as specified in Section 13.7.1. Otherwise, if AddedNode information is not processed, it MUST be deleted.
  3. If RteMsg.<msg-hop-limit> is zero (0), no further action is taken. Otherwise, HandlingRtr MUST decrement RteMsg.<msg-hop-limit>.
  4. If the RteMsg.<msg-hop-count> is present, and <msg-hop-count> == MAX_HOPCOUNT, then no further action is taken. Otherwise, HandlingRtr MUST increment RteMsg.<msg-hop-count>
  5. By sending a RteMsg, HandlingRtr advertises that it will route for addresses contained in the RteMsg based on the information enclosed. HandlingRtr MAY choose not to send the RteMsg, though not resending the RteMsg could decrease connectivity in the network or result in nonoptimal paths. The circumstances under which HandlingRtr might choose not to re-transmit a RteMsg are not specified in this document. Some examples might include the following:
    • HandlingRtr is already heavily loaded and does not want to advertise routing for more traffic
    • HandlingRtr recently transmitted identical routing information (e.g. in a RteMsg advertising the same metric) Section 7.6
    • HandlingRtr is low on energy and has to reduce energy expended for sending protocol messages or packet forwarding

    Unless HandlingRtr is prepared to send a RteMsg, it halts processing. Otherwise, further actions to transmit an updated RteMsg depend upon whether the incoming RteMsg is an RREP or an RREQ.

7.5.1. Additional Handling for Incoming RREQ

  • If the upstream router is in the Blacklist, and Current_Time < Blacklist.RemoveTime, then HandlingRtr MUST NOT transmit any outgoing RteMsg, and processing is complete.
  • Otherwise, if the upstream router is in the Blacklist, and Current_Time ≥ Blacklist.RemoveTime, then the upstream router SHOULD be removed from the Blacklist, and message processing continued.
  • The incoming RREQ MUST be checked against previously received information from the RREQ Table Section 7.6. If the information in the incoming RteMsg is useless, then then no further action is taken.
  • If TargNode is a client of HandlingRtr, then HandlingRtr generates a RREP message as specified in Section 7.4, and subsequently processing for the RREQ is complete. Otherwise, processing continues as follows.
  • RREQ.MetricType := Route[OrigNode].MetricType
  • RREQ.MetricTLV[OrigNode] := Route[OrigNode].Metric
  • The RREQ (with updated fields as specified above>) SHOULD be sent to the IP multicast address LL-MANET-Routers [RFC5498]. If the RREQ is unicast, the IP.DestinationAddress is set to Route[RREQ.TargNode].NextHopAddress.

7.5.2. Additional Handling for Incoming RREP

As before, OrigNode and TargNode are named in the context of the router (i.e., RREQ_Gen) originating the RREQ for which the RREP was generated (see Table 1).

  • If no forwarding route exists to OrigNode, then a RERR SHOULD be transmitted to RREP.AddrBlk[TargNode]. Otherwise, if HandlingRtr is not RREQ_Gen then the outgoing RREP is sent to the Route.NextHopAddress for the RREP.AddrBlk[OrigNode].
  • If HandlingRtr is RREQ_Gen then the RREP satisfies RREQ_Gen's earlier RREQ, and RREP processing is completed. Any packets buffered for OrigNode should be transmitted.

7.6. Suppressing Useless RteMsgs

Since RREQ messages are multicast, there are common circumstances in which an AODVv2 router might respond by sending out a RteMsgs (RREQ or RREQ) that is useless, given the information transmitted after receiving in some other recent RteMsg (see Section 5.7). Before transmitting a RteMsg, AODVv2 routers MUST suppress such useless RteMsgs; this is done by checking the list of recently received RteMsgs to determine whether the incoming RteMsg contains useful new information, as follows:

  • The AODVv2 router searches the RteMsg Table for recent entries with the same OrigNode, TargNode, and Metric Type. If there is no such entry, the incoming RteMsg message is not suppressed. A new entry for the incoming RteMsg information is created in the RteMsg Table.
  • If there is such an entry, and the incoming RteMsg has a newer sequence number, the incoming RteMsg is not suppressed, and the existing table entry MUST be updated to reflect the new Sequence Number and Metric.
  • Similarly, if the Sequence Numbers are the same, and the incoming RteMsg offers a better Metric, the incoming RteMsg not suppressed, and the RteMsg Table entry MUST be updated to reflect the new Metric.
  • Otherwise, the incoming RteMsg is suppressed.

8. Route Maintenance

AODVv2 routers attempt to maintain active routes. When a routing problem is encountered, an AODVv2 router (denoted RERR_Gen) attempts to quickly notify upstream routers. Two kinds of routing problems may trigger generation of a RERR message. The first case happens when the router receives a packet but does not have a route for the destination of the packet. The second case happens immediately upon detection of a broken link (see Section 8.2) of an Active route, to quickly notify upstream AODVv2 routers that that route is no longer available. When the RERR message is generated, it MUST be the only message in the RFC 5444 packet.

8.1. Maintaining Route Lifetimes During Packet Forwarding

Before using a route to forward a packet, an AODVv2 router MUST check the status of the route as follows.

  • If the route is marked has been marked as Broken, it cannot be used for forwarding.
  • If Current_Time > Route.ExpirationTime, the route table entry has expired.
  • Similarly, if (Route.ExpirationTime == MAXTIME), and if (Current_Time - Route.LastUsed) > (ACTIVE_INTERVAL + MAX_IDLETIME), the route has expired.
  • Furthermore, if Current_Time - Route.LastUsed > (MAX_SEQNUM_LIFETIME), the route table entry MUST be expunged.

If any of the above route error conditions hold true, the route cannot be used to forward the packet, and an RERR message MUST be generated (see Section 8.3).

Otherwise, Route.LastUsed := Current_Time, and the packet is forwarded to the route's next hop.

Optionally, if a precursor list is maintained for the route, see Section 13.3 for precursor lifetime operations.

8.2. Active Next-hop Router Adjacency Monitoring

AODVv2 routers SHOULD monitor connectivity to adjacent routers along active routes. This monitoring can be accomplished by one or several mechanisms, including:

  • Neighborhood discovery [RFC6130]
  • Route timeout
  • Lower layer trigger that a link is broken
  • TCP timeouts
  • Other monitoring mechanisms or heuristics

If a next-hop AODVv2 router has become unreachable, RERR_Gen follows the procedures specified in Section 8.3.2.

8.3. RERR Generation

    |     RFC 5444 Message Header <msg-hoplimit> <msg-hopcount>     |
    |      UnreachableNode AddrBlk (Unreachable Node addresses)     |
    |             UnreachableNode SeqNum AddrBlk TLV                |

Figure 2: RERR message structure

An RERR message is generated by a AODVv2 router (in this section, called RERR_Gen) in order to notify upstream routers that packets cannot be delivered to certain destinations. An RERR message has the following general structure:

Required Message Header Fields

The RERR MUST contain the following:
  • <msg-hop-limit>
  • PktSource Message TLV, if the RERR is unicast
  • Metric Type Message TLV, if MetricType != 3

Optional Message Header Fields

The RERR may contain the following:
  • <msg-hop-count>

UnreachableNode AddrBlk

This Address Block contains the IP addresses unreachable by AODVv2 router transmitting the RERR.
Sequence Number AddrBlk TLV

This Address Block TLV carries the destination sequence number associated with each UnreachableNode when that information is available.

The prefix length associated with an UnreachableNode.

There are two kinds of events indicating that packets cannot be delivered to certain destinations. The two cases differ in the way that the neighboring IP destination address for the RERR is chosen, and in the way that the set of UnreachableNodes is identified.

In both cases, the <msg-hop-limit> MUST be included and SHOULD be set to MAX_HOPCOUNT. <msg-hop-count> SHOULD be be included and set to 0, to facilitate use of various route repair strategies including expanding rings multicast and Intermediate RREP [I-D.perkins-irrep].

8.3.1. Case 1: Undeliverable Packet

The first case happens when the router receives a packet but does not have a valid route for the destination of the packet. In this case, there is exactly one UnreachableNode to be included in the RERR's AddrBlk (either IP.DestinationAddress from a data packet or RREP.AddrBlk[TargNode]). The RERR SHOULD be sent to the multicast address LL-MANET-Routers, but RERR_Gen MAY instead send the RERR to the next hop towards the source IP address of the packet which was undeliverable. In the latter case, the PktSource Message TLV MUST be included, containing the the source IP address of the undeliverable packet. If SeqNum UnreachableNode is known, it SHOULD be placed in the RERR. Otherwise, if no Seqnum AddrTLV is included, all nodes handling the RERR will assume their route through RERR_Gen towards the UnreachableNode is no longer valid and flag those routes as broken. RERR_Gen MUST discard the packet or message that triggered generation of the RERR.

If an AODVv2 router receives an ICMP packet from the address of one of its client nodes, it simply relays the packet to the ICMP packet's destination address, and does not generate any RERR message.

8.3.2. Case 2: Broken Link

The second case happens when the link breaks to an active adjacent AODVv2 router (i.e., the next hop of an active route). In this case, the RERR MUST be sent to the multicast address LL-MANET-Routers, except when the optional feature of maintaining precursor lists is used as specified in Section 13.3. All routes (Active, Idle and Expired) that use the broken link MUST be marked as Broken. The set of UnreachableNodes is initialized by identifying those Active routes which use the broken link. For each such Active Route, Route.Dest is added to the set of Unreachable Nodes. After the Active Routes using the broken link have all been included as UnreachableNodes, idle routes MAY also be included, if allowed by the setting of ENABLE_IDLE_UNREACHABLE, as long as the packet size of the RERR does not exceed the MTU (interface "Maximum Transfer Unit") of the physical medium.

If the set of UnreachableNodes is empty, no RERR is generated. Otherwise, RERR_Gen generates a new RERR, and the address of each UnreachableNode is inserted into an AddrBlock. If a prefix is known for the UnreachableNode.Address, it SHOULD be included. Otherwise, the UnreachableNode.Address is assumed to be a host address with a full length prefix. The value for each UnreachableNode's SeqNum (UnreachableNode.SeqNum) MUST be placed in a SeqNum AddrTLV. If none of UnreachableNode.Addr entries are associated with known prefix lengths, then the AddrBlk SHOULD NOT include any prefix-length information. Otherwise, for each UnreachableNode.Addr that does not have any associated prefix-length information, the prefix-length for that address MUST be assigned to INVALID_PREFIX_LENGTH, which is a length strictly greater than the length of any valid address.

Every broken route reported in the RERR MUST have the same Metric Type. If the Metric Type is not 3, then the RERR message MUST contain a MetricType MsgTLV indicating the Metric Type of the broken route(s).

8.4. Receiving and Handling RERR Messages

When an AODVv2 router (HandlingRtr) receives a RERR message, it uses the information provided to invalidate affected routes. If the information in the RERR may be useful to upstream neighbors using those routes, HandlingRtr subsequently sends another RERR to those neighbors. This operation has the effect of retransmitting the RERR information and is counted as another "hop" for purposes of properly modifying Msg.<msg-hop-limit> and Msg.<msg-hop-count>.

HandlingRtr examines the incoming RERR to assure that it contains Msg.<msg-hop-limit> and at least one UnreachableNode.Address. If the required information does not exist, the incoming RERR message is disregarded and further processing stopped. Otherwise, for each UnreachableNode.Address, HandlingRtr searches its route table for a route using longest prefix matching. If no such Route is found, processing is complete for that UnreachableNode.Address. Otherwise, HandlingRtr verifies the following:

  1. The UnreachableNode.Address is a routable unicast address.
  2. Route.NextHopAddress is the same as RERR IP.SourceAddress.
  3. Route.NextHopInterface is the same as the interface on which the RERR was received.
  4. The UnreachableNode.SeqNum is unknown, OR Route.SeqNum <= UnreachableNode.SeqNum (using signed 16-bit arithmetic).

If the route satisfies all of the above conditions, HandlingRtr sets the Route.Broken flag for that route. Furthermore, if Msg.<msg-hop-limit> is greater than 0, then HandlingRtr adds the UnreachableNode address and TLV information to an AddrBlk for delivery in the outgoing RERR message.

If there are no UnreachableNode addresses to be transmitted in an RERR to upstream routers, HandlingRtr MUST discard the RERR, and no further action is taken.

Otherwise, Msg.<msg-hop-limit> is decremented by one (1) and processing continues as follows:

  • (Optional) If precursor lists are maintained, the outgoing RERR SHOULD be sent to the active precursors of the broken route as specified in Section 13.3.
  • Otherwise, if the incoming RERR message was received at the LL-MANET-Routers [RFC5498] multicast address, the outgoing RERR SHOULD also be sent to LL-MANET-Routers.
  • Otherwise, if the PktSource Message TLV is present, and HandlingRtr has a Route to PktSource.Addr, then HandlingRtr MUST send the outgoing RERR to Route[PktSource.Addr].NextHop.
  • Otherwise, the outgoing RERR MUST be sent to LL-MANET-Routers.

9. Unknown Message and TLV Types

If a message with an unknown type is received, the message is disregarded.

For handling of messages that contain unknown TLV types, ignore the information for processing, but preserve it unmodified for forwarding.

10. Simple Internet Attachment

Simple Internet attachment means attachment of a stub (i.e., non-transit) network of AODVv2 routers to the Internet via a single Internet AODVv2 router (called IAR).

As in any Internet-attached network, AODVv2 routers, and their clients, wishing to be reachable from hosts on the Internet MUST have IP addresses within the IAR's routable and topologically correct prefix (e.g.

     / +----------------+        \
    /  |  AODVv2 Router |         \
    |  |  |         |
    |  +----------------+         |            Routable 
    |                       +-----+--------+   Prefix
    |                       |   Internet   |  /191.0.2/24
    |                       | AODVv2 Router| /
    |                       |   |/       /----------------\         
    |                       | serving net  +-------+     Internet     \  
    |                       |  191.0.2/24  |       \                  /  
    |                       +-----+--------+        \----------------/ 
    |         +----------------+  |
    |         |  AODVv2 Router |  |
    |         |  |  |
    \         +----------------+  /
     \                           /

Figure 3: Simple Internet Attachment Example

When an AODVv2 router within the AODVv2 MANET wants to discover a route toward a node on the Internet, it uses the normal AODVv2 route discovery for that IP Destination Address. The IAR MUST respond to RREQ on behalf of all Internet destinations.

When a packet from a node on the Internet destined for a node in the AODVv2 MANET reaches the IAR, if the IAR does not have a route toward that destination it will perform normal AODVv2 route discovery for that destination.

11. Multiple Interfaces

AODVv2 may be used with multiple interfaces; therefore, the particular interface over which packets arrive MUST be known whenever a packet is received. Whenever a new route is created, the interface through which the Route.Address can be reached is also recorded in the route table entry.

When multiple interfaces are available, a node transmitting a multicast packet with IP.DestinationAddress set to LL-MANET-Routers SHOULD send the packet on all interfaces that have been configured for AODVv2 operation.

Similarly, AODVv2 routers SHOULD subscribe to LL-MANET-Routers on all their AODVv2 interfaces.

12. AODVv2 Control Packet/Message Generation Limits

To avoid messaging overload, each AODVv2 router's rate of packet/message generation SHOULD be limited. The rate and algorithm for limiting messages (CONTROL_TRAFFIC_LIMITS) is left to the implementor and should be administratively configurable. AODVv2 messages SHOULD be discarded in the following order of preference: RREQ, RREP, and finally RERR.

13. Optional Features

Some optional features of AODVv2, associated with AODV, are not required by minimal implementations. These features are expected to be useful in networks with greater mobility, or larger node populations, or requiring shorter latency for application launches. The optional features are as follows:

  • Expanding Rings Multicast
  • Intermediate RREPs (iRREPs): Without iRREP, only the destination can respond to a RREQ.
  • Precursor lists.
  • Reporting Multiple Unreachable Nodes. An RERR message can carry more than one Unreachable Destination node for cases when a single link breakage causes multiple destinations to become unreachable from an intermediate router.
  • Message Aggregation.
  • Inclusion of Added Routing Information.

13.1. Expanding Rings Multicast

For multicast RREQ, Msg.<msg-hop-limit> MAY be set in accordance with an expanding ring search as described in [RFC3561] to limit the RREQ propagation to a subset of the local network and possibly reduce route discovery overhead.

13.2. Intermediate RREP

This specification has been published as a separate Internet Draft [I-D.perkins-irrep].

13.3. Precursor Lists and Notifications

This section specifies an interoperable enhancement to AODVv2 (and possibly other reactive routing protocols) enabling more economical notifications to active sources of traffic upon determination that a route needed to forward such traffic to its destination has become Broken.

13.3.1. Overview

In many circumstances, there can be several sources of traffic for a certain destination. Each such source of traffic is known as a "precursor" for the destination, as well as all upstream routers between the forwarding AODVv2 router and the traffic source. For each active destination, an AODVv2 router MAY choose to keep track of the upstream neighbors that have provided traffic for that destination; there is no need to keep track of upstream routers any farther away than the next hop.

Moreover, any particular link to an adjacent AODVv2 router may be a path component of multiple routes towards various destinations. The precursors for all destinations using the next hop across any link are collectively known as the precursors for that next hop.

When an AODVv2 router determines that an active link to one of its downstream neighbors has broken, the AODVv2 router detecting the broken link must mark multiple routes as Broken, for each of the newly unreachable destinations, as described in Section 8.3. Each route that relies on the newly broken link is no longer valid. Furthermore, the precursors of the broken link should be notified (using RERR) about the change in status of their route to a destination downstream along the broken next hop.

13.3.2. Precursor Notification Details

During normal operation, each AODVv2 router wishing to maintain precursor lists as described above, maintains a precursor table and updates the table whenever the node forwards traffic to one of the destinations in its route table. For each precursor in the precursor list, a record must be maintained to indicate whether the precursor has been used for recent traffic (in other words, whether the precursor is an Active precursor). So, when traffic arrives from a precursor, the Current_Time is used to mark the time of last use for the precursor list element associated with that precursor.

When an AODVv2 router detects that a link is broken, then for each precursor using that next hop, the node MAY notify the precursor using either unicast or multicast RERR:

unicast RERR to each Active precursor

This option is useful when there are few Active precursors compared to the number of neighboring AODVv2 routers.

RERR_PRECURSORS is, by default, LL-MANET-Routers [RFC5498]. This option is typically preferable when there are many precursors, since fewer packet transmissions are required.

Each active upstream neighbor (i.e., precursor) MAY then execute the same procedure until all active upstream routers have received the RERR notification.

13.4. Multicast RREP Response to RREQ

The RREQ Target Router (RREP_Gen) MAY, as an alternative to unicasting a RREP, be configured to distribute routing information about the route toward the RREQ TargNode (RREP_Gen's client) more widely. That is, RREP_Gen MAY be configured respond to a route discovery by generating a RREP, using the procedure in Section 7.4, but multicasting the RREP to LL-MANET-Routers [RFC5498] (subject to similar suppression algorithm for useless RREP multicasts as described in Section 7.6). The useless message suppression must occur at every router handling the multicast RREP. Afterwards, RREP_Gen processing for the incoming RREQ is complete.

Broadcast RREP response to incoming RREQ was originally specified to handle unidirectional links, but it is expensive. Due to the significant overhead, AODVv2 routers MUST NOT use multicast RREP unless configured to do so by setting the administrative parameter USE_MULTICAST_RREP.

13.5. RREP_ACK

Instead of relying on existing mechanisms for requesting verification of link bidirectionality during Route Discovery, RREP_Ack is provided as an optional feature and modeled on the RREP_Ack message type from AODV [RFC3561].

Since the RREP_ACK is simply echoed back to the node from which the RREP was received, there is no need for any additional RFC 5444 address information (or TLVs). Considerations of packet TTL are as specified in Section 5.4. An example message format is illustrated in section Appendix A.4.

13.6. Message Aggregation

The aggregation of multiple messages into a packet is specified in RFC 5444 [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].

13.7. Added Routing Information in RteMsgs

DSR [RFC4728] includes source routes as part of the data of its RREPs and RREQs. Doing so allows additional topology information to be multicast along with the RteMsg, and potentially allows updating for stale routing information at MANET routers along new paths between source and destination. To maintain this functionality, AODVv2 has defined a somewhat more general method that enables inclusion of source routes in RteMsgs.

Including additional routing information in outgoing RREQ or RREP messages can eliminate some route discovery attempts to the nodes whose information is included, if AODVv2 routers receiving the information use it to update their routing tables.

Note that, since the initial merger of DSR with AODV to create this protocol, further experimentation has shown that including the additional routing information is not always helpful. Sometimes it seems to help, and other times it seems to reduce overall performance. The results depend upon packet size and traffic patterns.

13.7.1. Including Added Node Information

An AODVv2 router (HandlingRtr) MAY optionally append AddedNode routing information to a RteMsg. This is controllable by an option (APPEND_INFORMATION) which SHOULD be administratively configurable or controlled according to the traffic characteristics of the network.

The following notation is used to specify the methods for inclusion of routing information for addtional nodes.


The IP address of an additional node that can be reached via the AODVv2 router adding this information. Each AddedNode.Address MUST include its prefix. Each AddedNode.Address MUST also have an associated Node.SeqNum in the address TLV block.

The Sequence Number associated with the AddedNode's routing information.

The cost of the route needed to reach the associated AddedNode.Address. This field is increased by Cost(L) at each intermediate AODVv2 router, where 'L' is the incoming link. If, for the Metric Type of the AddrBlk, it is not known how to compute Cost(L), the AddedNode.Addr information MUST be deleted from the AddedNode AddrBlk.

The VALIDITY_TIME of routing information for appended address(es) MUST be included, to inform routers about when to expire this information. A typical value for VALIDITY_TIME is (ACTIVE_INTERVAL+MAX_IDLETIME) - (Current_Time - Route.LastUsed) but other values (less than MAX_SEQNUM_TIME) MAY be chosen. The VALIDITY_TIME TLV is defined in [RFC5497].

SeqNum and Metric AddrTLVs about any appended address(es) MUST be included.

Routing information about the TargNode MUST NOT be added to the AddedAddrBlk. Also, duplicate address entries SHOULD NOT be added. Only the best routing information (Section 6.1) for a particular address SHOULD be included; if route information is included for a destination address already in the AddedAddrBlk, the previous information SHOULD NOT be included in the RteMsg.

13.7.2. Handling Added Node Information

An intermediate node (i.e., HandlingRtr) obeys the following procedures when processing AddedNode.Address information and other associated TLVs that are included with a RteMsg. For each AddedNode (except the TargetNode) in the RteMsg, the AddedNode.Metric information MUST be increased by Cost(L), where 'L' is the incoming link. If, for the Metric Type of the AddrBlk, it is not known how to compute Cost(L), the AddedNode.Addr information MUST be deleted from the AddedNode AddrBlk. If the resulting Cost of the route to the AddedNode is greater than MAX_METRIC[i], the AddedNode information is discarded. If the resulting Distance value for another node is greater than MAX_METRIC[i], the associated address and its information are removed from the RteMsg.

After handling the OrigNode's routing information, then each address that is not the TargetNode MAY be considered for creating and updating routes. Creating and updating routes to other nodes can eliminate RREQ for those IP destinations, in the event that data needs to be forwarded to the IP destination(s) now or in the near future.

For each of the additional addresses considered, HandlingRtr first checks that the address is a routable unicast address. If the address is not a unicast address, then the address and all related information MUST be removed.

If the routing table does not have a matching route with a known Route.SeqNum for this additional address using longest-prefix matching, then a route MAY be created and updated as described in Section 6.2. If a route table entry exists with a known Route.SeqNum, the incoming routing information is compared with the route table entry following the procedure described in Section 6.1. If the incoming routing information is used, the route table entry SHOULD be updated as described in Section 6.2.

If the routing information for an AddedNode.Address is not used, then it is removed from the RteMsg.

If route information is included for a destination address already in the AddedAddrBlk, the previous information SHOULD NOT be included in the RteMsg.

14. Administratively Configurable Parameters and Timer Values

AODVv2 uses various configurable parameters of various types:

  • Timers
  • Protocol constants
  • Administrative (functional) controls
  • Other administrative parameters and lists

The tables in the following sections show the parameters along their definitions and default values (if any).

Note: several fields have limited size (bits or bytes). These sizes and their encoding may place specific limitations on the values that can be set. For example, <msg-hop-count> is a 8-bit field and therefore MAX_HOPCOUNT cannot be larger than 255.

14.1. Timers

AODVv2 requires certain timing information to be associated with route table entries. The default values are as follows, subject to future experience:

Timing Parameter Values
Name Default Value
MAX_IDLETIME 200 seconds

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 for the network where AODVv2 is used. Ideally, for networks with frequent topology changes the AODVv2 parameters should be adjusted using either experimentally determined values or dynamic adaptation. For example, in networks with infrequent topology changes MAX_IDLETIME may be set to a much larger value.

14.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 specification describing their use.

Parameter Values
Name Default Value Description
MAX_HOPCOUNT 20 hops Section 5.6
MAX_METRIC[i] Specified only for HopCount Section 5.6
MAXTIME [TBD] Maximum expressible clock time

14.3. Administrative (functional) controls

The following administrative controls may be used to change the operation of the network, by enabling optional behaviors. These options are not required for correct routing behavior, although they may potentially reduce AODVv2 protocol messaging in certain situations. The default behavior is to NOT enable most such options, options. Packet buffering is enabled by default.

Administratively Configured Controls
Name Description
DEFAULT_METRIC_TYPE 3 {Hop Count (see [RFC6551])}
ENABLE_IRREP Section 7.3

14.4. Other administrative parameters and lists

The following table lists contains AODVv2 parameters which should be administratively configured for each specific network.

Other Administrative Parameters
Name Default Value Cross Reference
CONTROL_TRAFFIC_LIMIT TBD [50 packets/sec?] Section 12

15. IANA Considerations

This section specifies several message types, message tlv-types, and address tlv-types. Also, a new registry of 16-bit alternate metric types is specified.

15.1. AODVv2 Message Types Specification

AODVv2 Message Types
Name Type (TBD)
Route Request (RREQ) 10
Route Reply (RREP) 11
Route Error (RERR) 12
Route Reply Acknowledgement (RREP_ACK) 13

15.2. Message TLV Type Specification

Message TLV Types
Name Type (TBD) Length in octets Cross Reference
Acknowledgment Request (AckReq) 10 0 Section 5.2
Destination RREP Only (DestOnly) 11 0 Section 7.3
Packet Source (PktSource) 12 4 or 16 Section 8.3
Metric Type 13 1 Section 7.2

15.3. Address Block TLV Specification

Address Block TLV (AddrTLV) Types
Name Type (TBD) Length Value
Metric 10 depends on Metric Type Section 7.2
Sequence Number (SeqNum) 11 2 octets Section 7.2
VALIDITY_TIME 1 1 octet [RFC5497]

15.4. Metric Type Number Allocation

Metric types are identified according to the assignments as specified in [RFC6551]. The metric type of the Hop Count metric is assigned to be 3, in order to maintain compatibility with that existing table of values from RFC 6551. Non-addititve metrics are not supported in this draft.

Metric Types
Name Type Metric Size
Unallocated 0 -- 2 TBD
Hop Count 3 - TBD 1 octet
Unallocated 4 -- 254 TBD
Reserved 255 Undefined

16. Security Considerations

The objective of the AODVv2 protocol is for each router to communicate reachability information about addresses for which it is responsible. Positive routing information (i.e. a route exists) is distributed via RteMsgs and negative routing information (i.e. a route does not exist) via RERRs. AODVv2 routers that handle these messages store the contained information to properly forward data packets, and they generally provide this information to other AODVv2 routers.

This section does not mandate any specific security measures. Instead, this section describes various security considerations and potential avenues to secure AODVv2 routing.

The most important security mechanisms for AODVv2 routing are integrity/authentication and confidentiality.

In situations where routing information or router identity are suspect, integrity and authentication techniques SHOULD be applied to AODVv2 messages. In these situations, routing information that is distributed over multiple hops SHOULD also verify the integrity and identity of information based on originator of the routing information.

A digital signature could be used to identify the source of AODVv2 messages and information, along with its authenticity. A nonce or timestamp SHOULD also be used to protect against replay attacks. S/MIME and OpenPGP are two authentication/integrity protocols that could be adapted for this purpose.

In situations where confidentiality of AODVv2 messages is important, cryptographic techniques can be applied.

In certain situations, for example sending a RREP or RERR, an AODVv2 router could include proof that it has previously received valid routing information to reach the destination, at one point of time in the past. In situations where routers are suspected of transmitting maliciously erroneous information, the original routing information along with its security credentials SHOULD be included.

Note that if multicast is used, any confidentiality and integrity algorithms used MUST permit multiple receivers to handle the message.

Routing protocols, however, are prime targets for impersonation attacks. In networks where the node membership is not known, it is difficult to determine the occurrence of impersonation attacks, and security prevention techniques are difficult at best. However, when the network membership is known and there is a danger of such attacks, AODVv2 messages must be protected by the use of authentication techniques, such as those involving generation of unforgeable and cryptographically strong message digests or digital signatures. While AODVv2 does not place restrictions on the authentication mechanism used for this purpose, IPsec Authentication Message (AH) is an appropriate choice for cases where the nodes share an appropriate security association that enables the use of AH.

In particular, routing messages SHOULD be authenticated to avoid creation of spurious routes to a destination. Otherwise, an attacker could masquerade as that destination and maliciously deny service to the destination and/or maliciously inspect and consume traffic intended for delivery to the destination. RERR messages SHOULD be authenticated in order to prevent malicious nodes from disrupting active routes between communicating nodes.

If the mobile nodes in the ad hoc network have pre-established security associations, the purposes for which the security associations are created should include that of authorizing the processing of AODVv2 control packets. Given this understanding, the mobile nodes should be able to use the same authentication mechanisms based on their IP addresses as they would have used otherwise.

If the mobile nodes in the ad hoc network have pre-established security associations, the purposes for which the security associations Most AODVv2 messages are transmitted to the multicast address LL-MANET-Routers [RFC5498]. It is therefore required for security that AODVv2 neighbors exchange security information that can be used to insert an ICV [RFC6621] into the AODVv2 message block [RFC5444]. This enables hop-by-hop security, which is proper for these message types that may have mutable fields. For destination-only RREP discovery procedures, AODVv2 routers that share a security association SHOULD use the appropriate mechanisms as specified in RFC 6621. The establishment of these security associations is out of scope for this document.

17. 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-Royer for her long time authorship of AODV. Additional thanks to Luke Klein-Berndt, Pedro Ruiz, Fransisco Ros, Henning Rogge, Koojana Kuladinithi, Ramon Caceres, Thomas Clausen, Christopher Dearlove, Seung Yi, Romain Thouvenin, Tronje Krop, Henner Jakob, Alexandru Petrescu, Christoph Sommer, Cong Yuan, Lars Kristensen, and Derek Atkins for reviewing of AODVv2, as well as several specification suggestions.

This revision of AODVv2 separates the minimal base specification from other optional features to expedite the process of assuring compatibility with the existing LOADng specification [I-D.clausen-lln-loadng] (minimal reactive routing protocol specification). Thanks are due to T. Clausen, A. Colin de Verdiere, J. Yi, A. Niktash, Y. Igarashi, Satoh. H., and U. Herberg for their development of LOADng and sharing details for assuring appropriateness of AODVv2 for their application.

18. References

18.1. Normative References

[RFC1812] Baker, F., "Requirements for IP Version 4 Routers", RFC 1812, June 1995.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P. and C. Pignataro, "The Generalized TTL Security Mechanism (GTSM)", RFC 5082, October 2007.
[RFC5444] Clausen, T., Dearlove, C., Dean, J. and C. Adjih, "Generalized Mobile Ad Hoc Network (MANET) Packet/Message Format", RFC 5444, February 2009.
[RFC5497] Clausen, T. and C. Dearlove, "Representing Multi-Value Time in Mobile Ad Hoc Networks (MANETs)", RFC 5497, March 2009.
[RFC5498] Chakeres, I., "IANA Allocations for Mobile Ad Hoc Network (MANET) Protocols", RFC 5498, March 2009.
[RFC6551] Vasseur, JP., Kim, M., Pister, K., Dejean, N. and D. Barthel, "Routing Metrics Used for Path Calculation in Low-Power and Lossy Networks", RFC 6551, March 2012.

18.2. Informative References

[RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, April 1998.
[RFC2501] Corson, M.S. and J. Macker, "Mobile Ad hoc Networking (MANET): Routing Protocol Performance Issues and Evaluation Considerations", RFC 2501, January 1999.
[RFC5340] Coltun, R., Ferguson, D., Moy, J. and A. Lindem, "OSPF for IPv6", RFC 5340, July 2008.
[RFC3561] Perkins, C., Belding-Royer, E. and S. Das, "Ad hoc On-Demand Distance Vector (AODV) Routing", RFC 3561, July 2003.
[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast Addresses", RFC 4193, October 2005.
[RFC4728] Johnson, D., Hu, Y. and D. Maltz, "The Dynamic Source Routing Protocol (DSR) for Mobile Ad Hoc Networks for IPv4", RFC 4728, February 2007.
[RFC4861] Narten, T., Nordmark, E., Simpson, W. and H. Soliman, "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, September 2007.
[RFC5148] Clausen, T., Dearlove, C. and B. Adamson, "Jitter Considerations in Mobile Ad Hoc Networks (MANETs)", RFC 5148, February 2008.
[RFC6130] Clausen, T., Dearlove, C. and J. Dean, "Mobile Ad Hoc Network (MANET) Neighborhood Discovery Protocol (NHDP)", RFC 6130, April 2011.
[RFC6549] Lindem, A., Roy, A. and S. Mirtorabi, "OSPFv2 Multi-Instance Extensions", RFC 6549, March 2012.
[RFC6621] Macker, J., "Simplified Multicast Forwarding", RFC 6621, May 2012.
[I-D.perkins-irrep] Perkins, C and I Chakeres, "Intermediate RREP for dynamic MANET On-demand (AODVv2) Routing", Internet-Draft draft-perkins-irrep-01, October 2012.
[Perkins99] Perkins, C. and E. Belding-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.
[I-D.clausen-lln-loadng] Clausen, T, Verdiere, A, Yi, J, Niktash, A, Igarashi, Y, Satoh, H, Herberg, U, Lavenu, C, Lys, T, Perkins, C and J Dean, "The Lightweight On-demand Ad hoc Distance-vector Routing Protocol - Next Generation (LOADng)", Internet-Draft draft-clausen-lln-loadng-06, October 2012.

Appendix A. Example RFC 5444-compliant packet formats

The following three subsections show example RFC 5444-compliant packets for AODVv2 message types RREQ, RREP, and RERR. These proposed message formats are designed based on expected savings from IPv6 addressable MANET nodes, and a layout for the Address TLVs that may be viewed as natural, even if perhaps not the absolute most compact possible encoding.

For RteMsgs, the msg-hdr fields are followed by at least one and optionally two Address Blocks. The first AddrBlk contains OrigNode and TargNode. For each AddrBlk, there must be AddrTLVs of type Seqnum and of type Metric.

In addition to the Seqnum TLV, there MUST be an AddrTLV of type Metric. The msg-hop-count counts the number of hops followed by the RteMsg from point of generation to the current intermediate AODVv2 router handling the RteMsg. Alternate metrics are enabled by the inclusion of the MetricType Message TLV. When there is no such MetricType Message TLV present, then the Metric AddrTLV measures HopCount. The Metric AddrTLV also provides a way for the AODV router generating the RREQ or RREP to supply an initial nonzero cost for the route to its client node (OrigNode or TargNode, for RREQ or RREP respectively).

AddedNode information MAY be included in a RteMsg by adding a second AddrBlk. Both Metric AddrTLVs use the same Metric Type.

In all cases, the length of an address (32 bits for IPv4 and 128 bits for IPv6) inside an AODVv2 message is indicated by the msg-addr-length (MAL) in the msg-header, as specified in [RFC5444].

A.1. RREQ Message Format

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     | PV=0 |  PF=0  | msg-type=RREQ | MF=4  | MAL=3 |  msg-size=28  |
     |  msg-size=28  | msg-hop-limit |      msg.tlvs-length=0        |
     |   num-addr=2  |1|0|0|0|0| Rsv | head-length=3 |Head(Orig&Targ)|
     | Head (bytes for Orig & Target)|   Orig.Tail   |  Target.Tail  |
     |      addr.tlvs-length=11      |  type=SeqNum  |0|1|0|1|0|0|Rsv|
     | Index-start=0 | tlv-length=2  |     Orig.Node Sequence #      |
     |  type=Metric  |0|1|0|1|0|0|Rsv| Index-start=0 | tlv-length=1  |
     | OrigNodeHopCt |

Figure 4: Example IPv4 RREQ, with SeqNum and Metric AddrTLVs

Figure 4 illustrates a packet format for an example RREQ message.

The fields in Figure 4 are to be interpreted as follows:

  • PV=0 (Packet Header Version = 0)
  • PF=0 (Packet Flags = 0)
  • msg-type=RREQ (first [and only] message is of type RREQ)
  • MF=4 (Message Flags = 4 [only msg-hop-limit field is present])
  • MAL=3 (Message Address Length indicator [3 for IPv4, 15 for IPv6])
  • msg-size=28 (octets -- counting MsgHdr, MsgTLVs, and AddrBlks)
  • msg-hop-limit (initially MAX_HOPCOUNT by default)
  • msg.tlvs-length=0 (no Message TLVs)
  • num-addr=2 (OrigNode and TargNode addresses in RteMsg AddrBlock)
  • AddrBlk flags:
    • bit 0 (ahashead): 1
    • bit 1 (ahasfulltail): 0
    • bit 2 (ahaszerotail): 0
    • bit 3 (ahassingleprelen): 0
    • bit 4 (ahasmultiprelen): 0
    • bits 5-7: RESERVED
  • head-length=3 (length of head part of each address is 3 octets)
  • Head (3 initial bytes for both Originating & Target addresses)
  • Orig.Tail (4th byte of Originating Node IP address)
  • Target.Tail (4th byte of Target Node IP address)
  • addr.tlvs-length=11 (length in bytes for SeqNum and Metric TLVs
  • type=SeqNum (AddrTLV type of first AddrBlk TLV, values 2 octets)
  • AddrTLV flags for SeqNumTLV:
    • bit 0 (thastypeext): 0
    • bit 1 (thassingleindex): 1
    • bit 2 (thasmultiindex): 0
    • bit 3 (thasvalue): 1
    • bit 4 (thasextlen): 0
    • bit 5 (tismultivalue): 0
    • bits 6-7: RESERVED
  • Index-start=0 (SeqNum TLV values start at index 0)
  • tlv-length=2 (so there is only one TLV value, [1 = 2/2])
  • Orig.Node Sequence # (first [and only] TLV value for SeqNum TLVs
  • type=Metric (AddrTLV type of second AddrBlk TLV, values 1 octet)
  • AddrTLV flags for MetricTLV:
    • bit 0 (thastypeext): 0
    • bit 1 (thassingleindex): 1
    • bit 2 (thasmultiindex): 0
    • bit 3 (thasvalue): 1
    • bit 4 (thasextlen): 0
    • bit 5 (tismultivalue): 0
    • bits 6-7: RESERVED
  • Index-start=0 (Metric TLV values start at index 0)
  • tlv-length=1 (so there is only one TLV value, [1 = 1/1])
  • OrigNodeHopCt (first [and only] TLV value for Metric TLVs)

A.2. RREP Message Format

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     | PV=0 |  PF=0  | msg-type=RREP | MF=4  | MAL=3 |  msg-size=30  |
     |  msg-size=30  | msg-hop-limit |      msg.tlvs-length=0        |
     |   num-addr=2  |1|0|0|0|0| Rsv | head-length=3 |Head(Orig&Targ)|
     | Head (bytes for Orig & Target)|   Orig.Tail   |  Target.Tail  |
     |      addr.tlvs-length=13      |  type=SeqNum  |0|1|0|1|0|0|Rsv|
     | Index-start=0 | tlv-length=2  |     Orig.Node Sequence #      |
     |    Target.Node Sequence #     |  type=Metric  |0|1|0|1|0|0|Rsv|
     | Index-start=1 | tlv-length=1  | TargNodeHopCt |

Figure 5: Example IPv4 RREP, with 2 SeqNums and 1 Metric

Figure 5 illustrates a packet format for an example RREP message.

The fields in Figure 5 are to be interpreted as follows:

  • PV=0 (Packet Header Version = 0)
  • PF=0 (Packet Flags = 0)
  • msg-type=RREP (first [and only] message is of type RREP)
  • MF=4 (Message Flags = 4 [only msg-hop-limit field is present])
  • MAL=3 (Message Address Length indicator [3 for IPv4, 15 for IPv6])
  • msg-size=28 (octets -- counting MsgHdr, MsgTLVs, and AddrBlks)
  • msg-hop-limit (initially MAX_HOPCOUNT by default)
  • msg.tlvs-length=0 (no Message TLVs)
  • num-addr=2 (OrigNode and TargNode addresses in RteMsg AddrBlock)
  • AddrBlk flags:
    • bit 0 (ahashead): 1
    • bit 1 (ahasfulltail): 0
    • bit 2 (ahaszerotail): 0
    • bit 3 (ahassingleprelen): 0
    • bit 4 (ahasmultiprelen): 0
    • bits 5-7: RESERVED
  • head-length=3 (length of head part of each address is 3 octets)
  • Head (3 initial bytes for both Originating & Target addresses)
  • Orig.Tail (4th byte of Originating Node IP address)
  • Target.Tail (4th byte of Target Node IP address)
  • addr.tlvs-length=13 (length in bytes for SeqNum and Metric TLVs
  • type=SeqNum (AddrTLV type of first AddrBlk TLV, values 2 octets)
  • AddrTLV flags for SeqNumTLV:
    • bit 0 (thastypeext): 0
    • bit 1 (thassingleindex): 1
    • bit 2 (thasmultiindex): 0
    • bit 3 (thasvalue): 1
    • bit 4 (thasextlen): 0
    • bit 5 (tismultivalue): 0
    • bits 6-7: RESERVED
  • Index-start=0 (SeqNum TLV values start at index 0)
  • tlv-length=4 (so there is are two TLV values, [2 = 4/2])
  • Orig.Node Sequence # (first of two TLV values for SeqNum TLVs
  • Targ.Node Sequence # (second of two TLV values for SeqNum TLVs
  • type=Metric (AddrTLV type of second AddrBlk TLV, values 1 octet)
  • AddrTLV flags for MetricTLV [01010000, same as for SeqNumTLV]
  • Index-start=1 (Metric TLV values start at index 1)
  • tlv-length=1 (so there is only one TLV value, [1 = 1/1])
  • TargNodeHopCt (first [and only] TLV value for Metric TLVs)

A.3. RERR Message Format

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     | PV=0 |  PF=0  | msg-type=RERR | MF=4  | MAL=3 |  msg-size=24  |
     |  msg-size=24  | msg-hop-limit |      msg.tlvs-length=0        |
     |   num-addr=2  |1|0|0|0|0| Rsv | head-length=3 | Head (3 bytes)|
     | Head (for both destinations)  |  Tail(Dest_1) | Tail(Dest_2)  |
     |      addr.tlvs-length=7       |  type=SeqNum  |0|0|1|1|0|1|Rsv|
     | tlv-length=4  |        Dest_1 Sequence #      |  Dest_2 Seq#  |
     |  Dest_2 Seq#  |

Figure 6: Example IPv4 RERR with Two Unreachable Nodes

Figure 6 illustrates a packet format for an example RERR message. Figure 6 are to be interpreted as follows:

  • PV=0 (Packet Header Version = 0)
  • PF=0 (Packet Flags = 0)
  • msg-type=RERR (first [and only] message is of type RERR)
  • MF=4 (Message Flags = 4 [only msg-hop-limit field is present])
  • MAL=3 (Message Address Length indicator [3 for IPv4, 15 for IPv6])
  • msg-size=24 (octets -- counting MsgHdr, MsgTLVs, and AddrBlks)
  • msg-hop-limit (initially MAX_HOPCOUNT by default)
  • msg.tlvs-length=0 (no Message TLVs)
  • num-addr=2 (OrigNode and TargNode addresses in RteMsg AddrBlock)
  • AddrBlk flags == 10000000 [same as RREQ and RREP AddrBlk examples]
  • head-length=3 (length of head part of each address is 3 octets)
  • Head (3 initial bytes for both Unreachable Nodes, Dest_1 and Dest_2)
  • Dest_1.Tail (4th byte of Dest_1 IP address)
  • Dest_2.Tail (4th byte of Dest_2 IP address)
  • addr.tlvs-length=7 (length in bytes for SeqNum TLV
  • type=SeqNum (AddrTLV type of AddrBlk TLV, values 2 octets each)
  • AddrTLV flags for SeqNumTLV:
    • bit 0 (thastypeext): 0
    • bit 1 (thassingleindex): 0
    • bit 2 (thasmultiindex): 1
    • bit 3 (thasvalue): 1
    • bit 4 (thasextlen): 0
    • bit 5 (tismultivalue): 1
    • bits 6-7: RESERVED
  • Index-start=0 (SeqNum TLV values start at index 0)
  • tlv-length=4 (so there is are two TLV values, [2 = 4/2])
  • Dest_1 Sequence # (first of two TLV values for SeqNum TLVs)
  • Dest_2 Sequence # (second of two TLV values for SeqNum TLVs)

A.4. RREP_ACK Message Format

The figure below illustrates a packet format for an example RREP_ACK message.

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     | PV=0 |  PF=0  |msgtype=RREPAck| MF=0  | MAL=3 |  msg-size=4   |
     |  msg-size=4   |

Figure 7: Example IPv4 RREP_ACK

Appendix B. Changes since revision ...-24.txt

The main goals of this revision are to improve readability and to introduce a protocol update to handle suppression of unnecessary multicast RREQs and certain other messages.

  • Specified operations for maintenance and use of RREQ Table (see Section 5.7, Section 7.6).
  • Inserted explanations for example packet formats in appendix (see Appendix A).
  • Eliminated OwnSeqNum, RERR_dest, and various other abbreviations, reworded relevant text.
  • Reorganized Section 14 into four sections so that the various parameters are grouped more naturally into tables of similar types.
  • Replaced parameter descriptions in the tables in Section 14, with cross references to the parameter descriptions in the body of the specification.
  • Created parameters and administrative controls ENABLE_IRREP and MAX_BLACKLIST_TIME which had been alluded to in the body of the specification.
  • Corrected metric comparison formulae to include cost of incoming link.
  • Renamed Unicast Response Request MsgTLV to be Acknowledgment Request.
  • Clarified <msg-hop-limit> and <msg-hop-count> mandates and initialization.
  • Reformatted various tables to improve readability.
  • Changed some descriptions to apply to "Incoming" messages instead of "Outgoing" messages, enabling simpler specification.
  • Many other minor editorial improvements to improve readability and eliminate possibly ambiguities.

Appendix C. Changes between revisions ...-21.txt and ...-24.txt

The revisions of this document that were numbered 22 and 23 were produced without sufficient time for preparation, and suffered from numerous editorial errors. Therefore, this list of changes is enumerated based on differences between this revision (24) and revision 21.

  • Alternate metrics enabled:
    • New section added to describe general design approach.
    • Abstract functions "Cost()" and "LoopFree()" defined.
    • MAX_HOPCOUNT typically replaced by MAX_METRIC.
    • DEFAULT_METRIC_TYPE parameter defined, defaulting to HopCount.
    • MetricType Message TLV defined.
    • Metric Address TLV defined.
  • Many changes for RFC 5444 compliance
  • New section added for "Notational Conventions" (see Table 1). Many changes to improve readability and accuracy (e.g., eliminate use of "Flooding", "ThisNode", ...).
  • Reorganized and simplified route lifetime management (see Section 5.1).
  • Reorganized document structure, combining closely related small sections and eliminating top-level "Detailed ..." section.
    • RREQ and RREP specification sections coalesced.
    • RERR specification sections coalesced.
    • Eliminated resulting duplicated specification.
    • New section added for "Notational Conventions".
  • Internet-Facing AODVv2 router renamed to be IAR
  • "Optional Features" section (see Section 13) created to contain features not required within base specification, including:
    • Adding RREP-ACK message type instead of relying on reception of arbitrary packets as sufficient response to establish bidirectionality.
    • Expanding Rings Multicast
    • Intermediate RREPs (iRREPs): Without iRREP, only the destination can respond to a RREQ.
    • Precursor lists.
    • Reporting Multiple Unreachable Nodes. An RERR message can carry more than one Unreachable Destination node for cases when a single link breakage causes multiple destinations to become unreachable from an intermediate router.
    • Message Aggregation.
    • Inclusion of Added Routing Information.
  • Sequence number MUST be incremented after generating any RteMsg.
  • Resulting simplifications for accepting route updates in RteMsgs.
  • Sequence number MUST (instead of SHOULD) be set to 1 after rollover.
  • AODVv2 routers MUST (instead of SHOULD) only handle AODVv2 messages from adjacent routers.
  • Clarification that Added Routing information in RteMsgs is optional (MAY) to use.
  • Clarification that if Added Routing information in RteMsgs is used, then the Route Table Entry SHOULD be updated using normal procedures as described in Section 6.2.
  • Clarification in Section 7.1 that nodes may be configured to buffer zero packets.
  • Clarification in Section 7.1 that buffered packets MUST be dropped if route discovery fails.
  • In Section 8.2, relax mandate for monitoring connectivity to next-hop AODVv2 neighbors (from MUST to SHOULD), in order to allow for minimal implementations
  • Remove Route.Forwarding flag; identical to "NOT" Route.Broken.
  • Routing Messages MUST be originated with the <msg-hop-limit> set to MAX_HOPCOUNT.
  • Maximum hop count set to MAX_HOPCOUNT, and 255 is reserved for "unknown". Since the current draft only uses hop-count as distance, this is also the current maximum distance.

Appendix D. Shifting Network Prefix Advertisement Between AODVv2 Routers

Only one AODVv2 router within a MANET SHOULD be responsible for a particular address at any time. If two AODVv2 routers dynamically shift the advertisement of a network prefix, correct AODVv2 routing behavior must be observed. The AODVv2 router adding the new network prefix must wait for any existing routing information about this network prefix to be purged from the network. Therefore, it must wait at least ROUTER_SEQNUM_AGE_MAX_TIMEOUT after the previous AODVv2 router for this address stopped advertising routing information on its behalf.

Authors' Addresses

Charles E. Perkins Futurewei Inc. 2330 Central Expressway Santa Clara, CA 95050 USA Phone: +1-408-330-5305 EMail:
Ian D Chakeres CenGen 9250 Bendix Road North Columbia, Maryland 21045 USA EMail: URI: