Mobile Ad hoc Networks Working Group C. Perkins
Internet-Draft Futurewei
Intended status: Standards Track S. Ratliff
Expires: August 29, 2013 Cisco
J. Dowdell
Cassidian
February 25, 2013
Dynamic MANET On-demand (AODVv2) Routingdraft-ietf-manet-dymo-26
Abstract
The revised Ad Hoc On-demand Distance Vector (AODVv2) routing
protocol is intended for use by mobile routers in wireless, multihop
networks. AODVv2 determines unicast routes among AODVv2 routers
within the network in an on-demand fashion, offering on-demand
convergence in dynamic topologies.
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on August 29, 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://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
Perkins, et al. Expires August 29, 2013 [Page 1]

Internet-Draft AODVv2 February 20131. Overview
The revised Ad Hoc On-demand Distance Vector (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, the originating 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 to
be forwarded downstream 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].
Perkins, et al. Expires August 29, 2013 [Page 4]

Internet-Draft AODVv2 February 2013
This document also uses some terminology from [RFC5444].
This document defines the following terminology:
Adjacency
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 indicated by 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.
Current_Time
The current time as maintained by the AODVv2 router.
disregard
Ignore for further processing (see Section 5.4), and discard
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.
MANET
A Mobile Ad Hoc Network as defined in [RFC2501].
node
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.
Perkins, et al. Expires August 29, 2013 [Page 5]

Internet-Draft AODVv2 February 2013
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.
reactive
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 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 router 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.
Perkins, et al. Expires August 29, 2013 [Page 6]

Internet-Draft AODVv2 February 2013
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". The Sequence
Number guarantees the temporal order of routing information to
maintain loop-free routes, and fulfills the same role as the
"Destination Sequence Number" of DSDV, and as the 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.
Perkins, et al. Expires August 29, 2013 [Page 7]

Internet-Draft AODVv2 February 2013
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 its own local applications, each AODVv2
router 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
(see Section 5.3).
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 E. 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
at any one time.
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
Perkins, et al. Expires August 29, 2013 [Page 9]

Internet-Draft AODVv2 February 2013
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 supports 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 are recommended.
Otherwise, persistent packet loss or persistent protocol failures
could occur. The cost of bidirectional link L (denoted Cost(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 Structures5.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:
Route.Address
The (host or network) destination address of the node(s)
associated with the routing table entry
Route.PrefixLength
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.
Perkins, et al. Expires August 29, 2013 [Page 10]

Internet-Draft AODVv2 February 2013
Route.SeqNum
The Sequence Number associated with a route table entry
Route.NextHopAddress
An IP address of the adjacent AODVv2 router on the path toward the
Route.Address
Route.NextHopInterface
The interface used to send packets toward the Route.Address
Route.LastUsed
The time that this route was last used
Route.ExpirationTime
The time at which this route must expire
Route.Broken
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)
Route.MetricType
The type of the metric for the route towards Route.Address
Route.Metric
The cost of the route towards Route.Address
A route table entry (i.e., a route) may be in one of the following
states:
Active
An Active route is in current use for forwarding packets
Idle
An Idle route can be used for forwarding packets, even though it
is not in current use
Expired
After a route has been idle for too long, it expires, and may no
longer be used for forwarding packets
Broken
A route marked as Broken cannot be used for forwarding packets but
still has valid destination sequence number information.
Perkins, et al. Expires August 29, 2013 [Page 11]

Internet-Draft AODVv2 February 2013
Timed
The expiration of a Timed route is controlled by the
Route.ExpirationTime time of the route table entry (instead of
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 an idle 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 that time, old
sequence number information is considered no longer valuable and the
Expired route MUST BE 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:
Perkins, et al. Expires August 29, 2013 [Page 12]

Internet-Draft AODVv2 February 2013
Blacklist.Node
The IP address of the node that did not verify bidirectional
connectivity.
Blacklist.RemoveTime
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 transmits UDP packets using
the parameters for port number and IP protocol specified in [RFC5498]
to carry protocol packets. By default, 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
Perkins, et al. Expires August 29, 2013 [Page 13]

Internet-Draft AODVv2 February 2013
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.
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 [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].
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
Perkins, et al. Expires August 29, 2013 [Page 14]

Internet-Draft AODVv2 February 2013
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 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, but not
forward the message to other nodes. 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
operations 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.).
Perkins, et al. Expires August 29, 2013 [Page 15]

Internet-Draft AODVv2 February 2013
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 is 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 to the same destination 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.
Perkins, et al. Expires August 29, 2013 [Page 16]

Internet-Draft AODVv2 February 2013
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 Messages
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. According to
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 information that is not redundant.
Otherwise, multicast RREQs are likely to be retransmitted again and
again with almost no additional benefit, but generating a great deal
of unnecessary signaling traffic and interference.
To avoid transmission of redundant 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:
o they have the same metric type
o they have the same OrigNode and TargNode addresses
Each entry in the RREQ Table has the following fields:
o Metric Type
o OrigNode address
o TargNode address
o Sequence Number
o Metric
Perkins, et al. Expires August 29, 2013 [Page 17]

Internet-Draft AODVv2 February 2013
o Timestamp
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, or different metric 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.
When optional multicast RREP (see Section 13.4) is used to enable
selection from among multiple possible return routes, an AODVv2
router can eliminate redundant RREP messages using the analogous
mechanism along with a RREP Table. Nevertheless, the description in
this section only refers to RREQ multicast messages.
Protocol handling of RERR messages eliminates the need for tracking
RERR messages, since the rules for RERR regeneration prevent the
phenomenon of redundant 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 IP addresses,
along with the SeqNum and prefix length associated with each IP
address, and including the Metric measured from the node transmitting
the AODVv2 message to the IP address in the route update. IP
addresses and prefix length are encoded within an RFC 5444 AddrBlk,
and the SeqNum and Metric associated with each address in the AddrBlk
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[i] denotes the [i]th address in an RFC 5444 AddrBlk of
the RteMsg. RteMsg.PrefixLength[i] denotes the associated prefix
length for RteMsg.Addr[i], and RteMsg.{field} denotes the
corresponding value in the named AddrTLV block associated with
RteMsg.Addr[i]. All SeqNum comparisons use signed 16-bit arithmetic.
Perkins, et al. Expires August 29, 2013 [Page 18]

Internet-Draft AODVv2 February 20136.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 -- which is 3 (for HopCount) unless changed
by administrative action. 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.
Suppose Route[RteMsg.Addr] uses the same metric type as the incoming
routing information, and the route entry 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 classified 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. More costly::
(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.
Perkins, et al. Expires August 29, 2013 [Page 19]

Internet-Draft AODVv2 February 2013
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.
(RteMsg.SeqNum > Route.SeqNum) OR
{(RteMsg.SeqNum == Route.SeqNum) AND
[(RteMsg.Cost < Route.Metric) OR
((Route.Broken == TRUE) && LoopFree (RteMsg, Route))]}
The above logic corresponds to placing the following conditions on
the incoming route update (compared to the existing route table
entry) before it can be used:
* it is more recent, or
* it is not stale and is less costly, 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:
o Route.Address := RteMsg.Addr
o If RteMsg.PrefixLength exists and is not INVALID_PREFIX_LENGTH,
then Route.PrefixLength := RteMsg.PrefixLength
o Route.SeqNum := RteMsg.SeqNum
o Route.NextHopAddress := IP.SourceAddress (i.e., an address of the
node from which the RteMsg was received)
o Route.NextHopInterface is set to the interface on which RteMsg was
received
o Route.Broken flag := FALSE
o If RteMsg.MetricType is included, then
Route.MetricType := RteMsg.MetricType. Otherwise,
Route.MetricType := DEFAULT_METRIC_TYPE.
Perkins, et al. Expires August 29, 2013 [Page 20]

Internet-Draft AODVv2 February 2013
o Route.Metric := (RteMsg.Metric + Cost(L)), where L is the incoming
link.
o Route.LastUsed := Current_Time
o If RteMsg.VALIDITY_TIME is included, then
Route.ExpirationTime := Current_Time + RteMsg.VALIDITY_TIME,
otherwise, Route.ExpirationTime := Current_Time + (ACTIVE_INTERVAL
+ MAX_IDLETIME).
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 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.
o An Active route MUST NOT be expunged.
o An Idle route SHOULD NOT be expunged.
o An Expired route MAY be expunged (least recently used first).
o A route MUST be expunged if (Current_Time - Route.LastUsed) >=
MAX_SEQNUM_LIFETIME.
o A route MUST be expunged if Current_Time >= Route.ExpirationTime
If precursor lists are maintained for the route (as described in
Section 13.3) then the precursor lists must also be expunged at the
same time that the route itself is expunged.
7. Routing Messages RREQ and RREP (RteMsgs)
AODVv2 message types RREQ and RREP are together known as Routing
Perkins, et al. Expires August 29, 2013 [Page 21]

Internet-Draft AODVv2 February 2013
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. Optionally, RREQ_Gen MAY specify
that only the router serving TargNode is allowed to generate an RREP
message, by including the DestOnly message TLV (see Section 7.3).
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 a 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
Perkins, et al. Expires August 29, 2013 [Page 22]

Internet-Draft AODVv2 February 2013
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)
AddrBlk
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.
OrigSeqNum AND/OR TargSeqNum AddrTLV
At least one of OrigSeqNum or TargSeqNum Address Block TLV is
REQUIRED and carries the destination sequence numbers associated
with either OrigNode or TargNode. Both may appear when SeqNum
information is available for both OrigNode and TargNode.
(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.
RteMsgs carry information about OrigNode and TargNode. Since their
addresses may appear in arbitrary order within the RFC 5444 AddrBlk,
the OrigSeqNum and/or TargSeqNum TLVs must be used to distinguish the
nature of the node addresses present in the AddrBlk. In each RteMsg,
at least one of OrigSeqNumTLV or TargSeqNumTLV MUST appear. Both
TLVs MAY appear in the same RteMsg, but each one MUST NOT appear more
than once, because there is only one OrigNode and only one TargNode
address in the AddrBlk.
If the OrigSeqNum TLV appears, then the address range for the
OrigSeqNum TLV MUST be limited to a single position in the AddrBlk.
That position is used as the OrigNdx, identifying the OrigNode
address. The other address in the AddrBlk is, by elimination, the
Perkins, et al. Expires August 29, 2013 [Page 24]

Internet-Draft AODVv2 February 2013
TargNode address, and TargNdx is set appropriately.
Otherwise, if the TargSeqNum TLV appears, then the address range for
the TargSeqNum TLV MUST be limited to a single position in the
AddrBlk. That position is used as the TargNdx, identifying the
TargNode address. The other address in the AddrBlk is, by
elimination, the OrigNode address, and OrigNdx is set appropriately.
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 RFC5444 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 a 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 := {OrigNode.Addr, TargNode.Addr}
Let OrigNodeNdx and TargNodeNdx denote the indexes of OrigNode
and TargNode respectively in the RREQ.AddrBlk list.
6. 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[OrigNodeNdx] := Route[OrigNode].PrefixLength
according to the rules of RFC 5444 AddrBlk encoding.
Perkins, et al. Expires August 29, 2013 [Page 25]

Internet-Draft AODVv2 February 2013
7. RREQ.OrigSeqNumTLV[OrigNodeNdx] := RREQ_Gen SeqNum
8. RREQ.TargSeqNumTLV[TargNodeNdx] := TargNode SeqNum (only if
known)
RREQ_Gen SHOULD include TargNode's SeqNum, if a previous value of
the TargNode's SeqNum is known (e.g., from an invalid routing
table entry using longest-prefix matching). If TargNode's SeqNum
is not included, AODVv2 routers handling the RREQ assume 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].
9. 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 enabling the establishment of a route 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; after such processing,
RREP_Gen has an updated route to OrigNode as well as TargNode. 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 redundant, 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.Addr, TargNode.Addr}
Let OrigNodeNdx and TargNodeNdx denote the indexes of OrigNode
and TargNode respectively in the RREQ.AddrBlk list.
4. RREP.OrigSeqNumTLV[OrigNodeNdx] := Route[OrigNode].Seqnum
Perkins, et al. Expires August 29, 2013 [Page 26]

Internet-Draft AODVv2 February 2013
5. RREP.TargSeqNumTLV[TargNodeNdx] := RREP_Gen's SeqNum
6. 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[TargNodeNdx] :=
Route[TargNode].PrefixLength according to the rules of RFC 5444
AddrBlk encoding.
7. RREP.MetricType[TargNodeNdx] := Route[TargNode].MetricType
8. RREP.Metric[TargNodeNdx] := Route[TargNode].Metric
9. <msg-hop-count>, if included, MUST be set to 0.
10. <msg-hop-limit> SHOULD be set to RREQ.<msg-hop-count>.
11. 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 can make use of a received RteMsg (i.e., RREQ
or RREP), the router first must verify that the RteMsg is permissible
according to the following steps. OrigNodeNdx and TargNodeNdx are
set according to the rules in Section 7.2. For RREQ, RteMsg.Metric
is MetricTLV[OrigNodeNdx]. For RREP, RteMsg.Metric is
MetricTLV[TargNodeNdx]. In this section (unless qualified by
additional description such as "upstream" or "neighboring") all
occurrences of the term "router" refer to the AODVv2 router handling
the received RteMsg.
1. A router MUST handle RteMsgs only from neighbors as specified in
Section 5.4. RteMsgs from other sources MUST be disregarded.
2. The router examines the RteMsg to ascertain that it contains the
required information: <msg-hop-limit>, TargNode.Addr,
OrigNode.Addr, RteMsg.Metric, and either RteMsg.OrigSeqNum or
RteMsg.TargSeqNum. If the required information does not exist,
the message is disregarded.
3. The router checks that OrigNode.Addr and TargNode.Addr are valid
routable unicast addresses. If not, the message is disregarded.
4. The router 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
Perkins, et al. Expires August 29, 2013 [Page 27]

Internet-Draft AODVv2 February 2013
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 handles a permissible RteMsg according to the
following steps.
1. The router MUST process the routing information for OrigNode and
TargNode contained in the RteMsg as specified in Section 6.1.
2. The router 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, because it may
no longer be accurate as a route update to any upstream router.
3. If RteMsg.<msg-hop-limit> is zero (0), no further action is
taken, and the RteMsg is not retransmitted. Otherwise, the
router 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, the
router MUST increment RteMsg.<msg-hop-count>
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
o By sending a RREQ, a router advertises that it will route for
addresses contained in the RteMsg based on the information
enclosed. The router MAY choose not to send the RREQ, though not
resending the RREQ could decrease connectivity in the network or
result in nonoptimal paths. The circumstances under which a
router might choose not to re-transmit a RREQ are not specified in
this document. Some examples might include the following:
* The router is already heavily loaded and does not want to
advertise routing for more traffic
* The router recently transmitted identical routing information
(e.g. in a RREQ advertising the same metric) Section 7.6Perkins, et al. Expires August 29, 2013 [Page 28]

Internet-Draft AODVv2 February 2013
* The router is low on energy and has to reduce energy expended
for sending protocol messages or packet forwarding
Unless the router is prepared to send a RREQ, it halts processing.
o If the upstream router sending a RREQ is in the Blacklist, and
Current_Time < Blacklist.RemoveTime, then the router receiving
that RREQ MUST NOT transmit any outgoing RteMsg, and processing is
complete.
o 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.
o 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 redundant, then then no further action
is taken.
o If TargNode is a client of the router receiving the RREQ, then the
router generates a RREP message as specified in Section 7.4, and
subsequently processing for the RREQ is complete. Otherwise,
processing continues as follows.
o RREQ.MetricType := Route[OrigNode].MetricType
o RREQ.MetricTLV[OrigNodeNdx] := Route[OrigNode].Metric
o 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 RREQ_Gen
(i.e., the router originating the RREQ for which the RREP was
generated) (see Table 1). OrigNodeNdx and TargNodeNdx are set
according to the rules in Section 7.2.
o If no forwarding route exists to OrigNode, then a RERR SHOULD be
transmitted to RREP.AddrBlk[TargNodeNdx]. Otherwise, if
HandlingRtr is not RREQ_Gen then the outgoing RREP is sent to the
Route.NextHopAddress for the RREP.AddrBlk[OrigNodeNdx].
o If HandlingRtr is RREQ_Gen then the RREP satisfies RREQ_Gen's
earlier RREQ, and RREP processing is completed. Any packets
Perkins, et al. Expires August 29, 2013 [Page 29]

Internet-Draft AODVv2 February 2013
buffered for OrigNode should be transmitted.
7.6. Suppressing Redundant RREQ messages
Since RREQ messages are multicast, there are common circumstances in
which an AODVv2 router might transmit a redundant response (RREQ or
RREP), duplicating the information transmitted in response to some
other recent RREQ (see Section 5.7). Before responding, an AODVv2
router MUST suppress such redundant RREQ messages. This is done by
checking the list of recently received RREQs to determine whether the
incoming RREQ contains new information, as follows:
o The AODVv2 router searches the RREQ Table for recent entries with
the same OrigNode, TargNode, and Metric Type. If there is no such
entry, the incoming RREQ message is not suppressed. A new entry
for the incoming RREQ is created in the RREQ Table.
o If there is such an entry, and the incoming RREQ has a newer
sequence number, the incoming RREQ is not suppressed, and the
existing table entry MUST be updated to reflect the new Sequence
Number and Metric.
o Similarly, if the Sequence Numbers are the same, and the incoming
RREQ offers a better Metric, the incoming RREQ is not suppressed,
and the RREQ Table entry MUST be updated to reflect the new
Metric.
o Otherwise, the incoming RREQ is suppressed.
8. Route Maintenance and RERR Messages
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.
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.
Perkins, et al. Expires August 29, 2013 [Page 30]

Internet-Draft AODVv2 February 2013
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, and cannot be used for forwarding.
Similarly, if (Route.ExpirationTime == MAXTIME), and if
(Current_Time - Route.LastUsed) > (ACTIVE_INTERVAL +
MAX_IDLETIME), the route has expired, and cannot be used for
forwarding.
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:
o Neighborhood discovery [RFC6130]
o Route timeout
o Lower layer trigger that a link is broken
o TCP timeouts
o Promiscuous listening
o 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.
Perkins, et al. Expires August 29, 2013 [Page 31]

Internet-Draft AODVv2 February 20138.3. RERR Generation
An RERR message is generated by a AODVv2 router (i.e., RERR_Gen) in
order to notify upstream routers that packets cannot be delivered to
certain destinations. An RERR message has the following general
structure:
+---------------------------------------------------------------+
| RFC 5444 Message Header <msg-hoplimit> <msg-hopcount> |
+---------------------------------------------------------------+
| UnreachableNode AddrBlk (Unreachable Node addresses) |
+---------------------------------------------------------------+
| UnreachableNode SeqNum AddrBlk TLV |
+---------------------------------------------------------------+
Figure 2: RERR message structure
Required Message Header Fields
The RERR MUST contain the following:
* <msg-hop-limit>
* PktSource Message TLV (see Section 15), if the RERR is unicast
* Metric Type Message TLV (see Section 15), 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.
UnreachableNode.PrefixLength
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.
Perkins, et al. Expires August 29, 2013 [Page 32]

Internet-Draft AODVv2 February 2013
In both cases, the <msg-hop-limit> MUST be included and SHOULD be set
to MAX_HOPCOUNT. <msg-hop-count> SHOULD 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 from another
AODVv2 router 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[OrigNode]). 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. For unicast RERR, the PktSource Message TLV
MUST be included, containing the the source IP address of the
undeliverable packet, or the IP address of TargRtr in case the
undeliverable packet was an RREP message generated by TargRtr. If a
Sequence Number for UnreachableNode is known, that Sequence Number
SHOULD be included in a Seqnum AddrTLV the RERR. Otherwise 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, regardless of the Sequnce Number information for those
routes. 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.
Perkins, et al. Expires August 29, 2013 [Page 33]

Internet-Draft AODVv2 February 2013
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 relevant 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-hop-limit> and <msg-hop-count> in the RERR message
header.
HandlingRtr examines the incoming RERR to assure that it contains
<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).
Perkins, et al. Expires August 29, 2013 [Page 34]

Internet-Draft AODVv2 February 2013
If the route satisfies all of the above conditions, HandlingRtr sets
the Route.Broken flag for that route. Furthermore, if <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-hop-limit> is decremented by one (1) and processing
continues as follows:
o (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.
o 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.
o 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.
o 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. 191.0.2.0/24).
Perkins, et al. Expires August 29, 2013 [Page 35]

Internet-Draft AODVv2 February 2013
/-------------------------\
/ +----------------+ \
/ | AODVv2 Router | \
| | 191.0.2.2/32 | |
| +----------------+ | Routable
| +-----+--------+ Prefix
| | Internet | /191.0.2/24
| | AODVv2 Router| /
| | 191.0.2.1 |/ /----------------\
| | serving net +-------+ Internet \
| | 191.0.2/24 | \ /
| +-----+--------+ \----------------/
| +----------------+ |
| | AODVv2 Router | |
| | 191.0.2.3/32 | |
\ +----------------+ /
\ /
\-------------------------/
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.
Perkins, et al. Expires August 29, 2013 [Page 36]

Internet-Draft AODVv2 February 201312. 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
apply in networks with greater mobility, or larger node populations,
or requiring reduced latency for application launches. The optional
features are as follows:
o Expanding Rings Multicast
o Intermediate RREPs (iRREPs): Without iRREP, only the destination
can respond to a RREQ.
o Precursor lists.
o 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.
o RREP_ACK.
o Message Aggregation.
o Inclusion of Added Routing Information.
13.1. Expanding Rings Multicast
For multicast RREQ, <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].
Perkins, et al. Expires August 29, 2013 [Page 37]

Internet-Draft AODVv2 February 201313.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:
Perkins, et al. Expires August 29, 2013 [Page 38]

Internet-Draft AODVv2 February 2013
unicast RERR to each Active precursor
This option is applicable when there are few Active precursors
compared to the number of neighboring AODVv2 routers.
multicast RERR to RERR_PRECURSORS
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 redundant RREP multicasts as
described in Section 7.6). The redundant 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.
Perkins, et al. Expires August 29, 2013 [Page 39]

Internet-Draft AODVv2 February 201313.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 RREQ or RREP. 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.
AddedNode
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.
Perkins, et al. Expires August 29, 2013 [Page 40]

Internet-Draft AODVv2 February 2013
AddedNode.SeqNum
The Sequence Number associated with the AddedNode's routing
information.
AddedNode.Metric
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
Perkins, et al. Expires August 29, 2013 [Page 41]

Internet-Draft AODVv2 February 2013
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:
o Timers
o Protocol constants
o Administrative (functional) controls
o 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.
Perkins, et al. Expires August 29, 2013 [Page 42]

Internet-Draft AODVv2 February 201315.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.
+-----------------------+----------+-------------+
| Name | Type | Metric Size |
+-----------------------+----------+-------------+
| Unallocated | 0 -- 2 | TBD |
| Hop Count | 3 - TBD | 1 octet |
| Unallocated | 4 -- 254 | TBD |
| Reserved | 255 | Undefined |
+-----------------------+----------+-------------+
Table 9: Metric Types
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.
Perkins, et al. Expires August 29, 2013 [Page 46]

Internet-Draft AODVv2 February 2013
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
Perkins, et al. Expires August 29, 2013 [Page 47]

Internet-Draft AODVv2 February 2013
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 RFC6621. 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. References18.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.
Perkins, et al. Expires August 29, 2013 [Page 48]

Internet-Draft AODVv2 February 2013
[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.
[RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF
for IPv6", RFC 5340, July 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.
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
Perkins, et al. Expires August 29, 2013 [Page 50]

Internet-Draft AODVv2 February 2013
o Replaced instances of "useless" by "redundant". Made numerous
other editorial changes and corrections.
o Changed membership of editorial team.
o Formally changed document name to "aodvv2" instead of "dymo".
Appendix C. 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.
o Specified operations for maintenance and use of RREQ Table (see
Section 5.7, Section 7.6).
o Inserted explanations for example packet formats in appendix (see
Appendix A).
o Eliminated OwnSeqNum, RERR_dest, and various other abbreviations,
reworded relevant text.
o Reorganized Section 14 into four sections so that the various
parameters are grouped more naturally into tables of similar
types.
o Replaced parameter descriptions in the tables in Section 14, with
cross references to the parameter descriptions in the body of the
specification.
o Created parameters and administrative controls ENABLE_IRREP and
MAX_BLACKLIST_TIME which had been alluded to in the body of the
specification.
o Corrected metric comparison formulae to include cost of incoming
link.
o Renamed Unicast Response Request MsgTLV to be Acknowledgment
Request.
o Clarified <msg-hop-limit> and <msg-hop-count> mandates and
initialization.
o Reformatted various tables to improve readability.
o Changed some descriptions to apply to "Incoming" messages instead
of "Outgoing" messages, enabling simpler specification.
o Many other minor editorial improvements to improve readability and
eliminate possibly ambiguities.
Appendix D. 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.
Perkins, et al. Expires August 29, 2013 [Page 57]

Internet-Draft AODVv2 February 2013
o Clarification in Section 7.1 that nodes may be configured to
buffer zero packets.
o Clarification in Section 7.1 that buffered packets MUST be dropped
if route discovery fails.
o 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
o Remove Route.Forwarding flag; identical to "NOT" Route.Broken.
o Routing Messages MUST be originated with the <msg-hop-limit> set
to MAX_HOPCOUNT.
o 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 E. 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: charliep@computer.org
Perkins, et al. Expires August 29, 2013 [Page 59]