Mobile Ad hoc Networks Working Group C. Perkins
Internet-Draft Futurewei
Intended status: Standards Track S. Ratliff
Expires: July 21, 2016 Idirect
J. Dowdell
Airbus Defence and Space
L. Steenbrink
HAW Hamburg, Dept. Informatik
V. Mercieca
Airbus Defence and Space
January 18, 2016
Ad Hoc On-demand Distance Vector Version 2 (AODVv2) Routing
draft-ietf-manet-aodvv2-13
Abstract
The Ad Hoc On-demand Distance Vector Version 2 (AODVv2) routing
protocol is intended for use by mobile routers in wireless, multihop
networks. AODVv2 determines unicast routes among AODVv2 routers
within the network in an on-demand fashion.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on July 21, 2016.
Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
Perkins, et al. Expires July 21, 2016 [Page 1]
Internet-Draft AODVv2 January 2016
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Applicability Statement . . . . . . . . . . . . . . . . . . . 8
4. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 10
4.1. Interface List . . . . . . . . . . . . . . . . . . . . . 10
4.2. Router Client Table . . . . . . . . . . . . . . . . . . . 10
4.3. Neighbor Table . . . . . . . . . . . . . . . . . . . . . 11
4.4. Sequence Numbers . . . . . . . . . . . . . . . . . . . . 11
4.5. Local Route Set . . . . . . . . . . . . . . . . . . . . . 12
4.6. Multicast Route Message Table . . . . . . . . . . . . . . 15
5. Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6. AODVv2 Protocol Operations . . . . . . . . . . . . . . . . . 18
6.1. Initialization . . . . . . . . . . . . . . . . . . . . . 18
6.2. Next Hop Monitoring . . . . . . . . . . . . . . . . . . . 19
6.3. Neighbor Table Update . . . . . . . . . . . . . . . . . . 20
6.4. Interaction with the Forwarding Plane . . . . . . . . . . 21
6.5. Message Transmission . . . . . . . . . . . . . . . . . . 23
6.6. Route Discovery, Retries and Buffering . . . . . . . . . 24
6.7. Processing Received Route Information . . . . . . . . . . 25
6.7.1. Evaluating Route Information . . . . . . . . . . . . 26
6.7.2. Applying Route Updates . . . . . . . . . . . . . . . 28
6.8. Suppressing Redundant Messages Using the Multicast Route
Message Table . . . . . . . . . . . . . . . . . . . . . . 29
6.9. Local Route Set Maintenance . . . . . . . . . . . . . . . 32
6.9.1. Local Route State Changes . . . . . . . . . . . . . . 32
6.9.2. Reporting Invalid Routes . . . . . . . . . . . . . . 34
7. AODVv2 Protocol Messages . . . . . . . . . . . . . . . . . . 35
7.1. Route Request (RREQ) Message . . . . . . . . . . . . . . 35
7.1.1. RREQ Generation . . . . . . . . . . . . . . . . . . . 36
7.1.2. RREQ Reception . . . . . . . . . . . . . . . . . . . 38
7.1.3. RREQ Regeneration . . . . . . . . . . . . . . . . . . 39
7.2. Route Reply (RREP) Message . . . . . . . . . . . . . . . 40
7.2.1. RREP Generation . . . . . . . . . . . . . . . . . . . 41
7.2.2. RREP Reception . . . . . . . . . . . . . . . . . . . 43
7.2.3. RREP Regeneration . . . . . . . . . . . . . . . . . . 44
7.3. Route Reply Acknowledgement (RREP_Ack) Message . . . . . 46
7.3.1. RREP_Ack Generation . . . . . . . . . . . . . . . . . 46
7.3.2. RREP_Ack Reception . . . . . . . . . . . . . . . . . 46
7.4. Route Error (RERR) Message . . . . . . . . . . . . . . . 46
Perkins, et al. Expires July 21, 2016 [Page 2]
Internet-Draft AODVv2 January 2016
7.4.1. RERR Generation . . . . . . . . . . . . . . . . . . . 47
7.4.2. RERR Reception . . . . . . . . . . . . . . . . . . . 49
7.4.3. RERR Regeneration . . . . . . . . . . . . . . . . . . 51
8. RFC 5444 Representation . . . . . . . . . . . . . . . . . . . 51
8.1. Route Request Message Representation . . . . . . . . . . 53
8.1.1. Message Header . . . . . . . . . . . . . . . . . . . 53
8.1.2. Message TLV Block . . . . . . . . . . . . . . . . . . 53
8.1.3. Address Block . . . . . . . . . . . . . . . . . . . . 53
8.1.4. Address Block TLV Block . . . . . . . . . . . . . . . 53
8.2. Route Reply Message Representation . . . . . . . . . . . 54
8.2.1. Message Header . . . . . . . . . . . . . . . . . . . 54
8.2.2. Message TLV Block . . . . . . . . . . . . . . . . . . 55
8.2.3. Address Block . . . . . . . . . . . . . . . . . . . . 55
8.2.4. Address Block TLV Block . . . . . . . . . . . . . . . 55
8.3. Route Reply Acknowledgement Message Representation . . . 56
8.3.1. Message Header . . . . . . . . . . . . . . . . . . . 56
8.3.2. Message TLV Block . . . . . . . . . . . . . . . . . . 56
8.3.3. Address Block . . . . . . . . . . . . . . . . . . . . 56
8.3.4. Address Block TLV Block . . . . . . . . . . . . . . . 56
8.4. Route Error Message Representation . . . . . . . . . . . 57
8.4.1. Message Header . . . . . . . . . . . . . . . . . . . 57
8.4.2. Message TLV Block . . . . . . . . . . . . . . . . . . 57
8.4.3. Address Block . . . . . . . . . . . . . . . . . . . . 57
8.4.4. Address Block TLV Block . . . . . . . . . . . . . . . 58
9. Simple External Network Attachment . . . . . . . . . . . . . 58
10. Optional Features . . . . . . . . . . . . . . . . . . . . . . 59
10.1. Expanding Rings Multicast . . . . . . . . . . . . . . . 60
10.2. Precursor Lists . . . . . . . . . . . . . . . . . . . . 60
10.3. Intermediate RREP . . . . . . . . . . . . . . . . . . . 61
10.4. Message Aggregation Delay . . . . . . . . . . . . . . . 61
11. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 61
11.1. Timers . . . . . . . . . . . . . . . . . . . . . . . . . 62
11.2. Protocol Constants . . . . . . . . . . . . . . . . . . . 63
11.3. Local Settings . . . . . . . . . . . . . . . . . . . . . 64
11.4. Network-Wide Settings . . . . . . . . . . . . . . . . . 64
11.5. Optional Feature Settings . . . . . . . . . . . . . . . 64
11.6. MetricType Allocation . . . . . . . . . . . . . . . . . 65
11.7. AddressType Allocation . . . . . . . . . . . . . . . . . 65
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 66
12.1. RFC 5444 Message Types . . . . . . . . . . . . . . . . . 66
12.2. RFC 5444 Address Block TLV Types . . . . . . . . . . . . 66
13. Security Considerations . . . . . . . . . . . . . . . . . . . 66
14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 69
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 69
15.1. Normative References . . . . . . . . . . . . . . . . . . 70
15.2. Informative References . . . . . . . . . . . . . . . . . 71
Appendix A. AODVv2 Draft Updates . . . . . . . . . . . . . . . . 72
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73
Perkins, et al. Expires July 21, 2016 [Page 3]
Internet-Draft AODVv2 January 2016
1. Overview
The Ad Hoc On-demand Distance Vector Version 2 (AODVv2) routing
protocol (formerly named DYMO) enables on-demand, multihop unicast
routing among AODVv2 routers in mobile ad hoc networks (MANETs)
[RFC2501].
(We jumped right in here would prefer some intro to AODV and how AODVv2 is
derived from that work. JWD DONE)
Although AODVv2 is closely related to AODV [RFC3561], and shares some
features of DSR [RFC4728], AODVv2 is not interoperable with either of
those protocols.
Compared to AODV, AODVv2 makes some features optional,
notably intermediate route replies, expanding ring search, and
precursor lists. Hello messages and local repair have been removed.
AODVv2 provides a mechanism for the use of multiple metric types.
Message formats have been updated and made compliant with [RFC5444].
AODVv2 control messages are defined as sets of data, which are mapped
to messages using the Generalized MANET Packet/Message Format defined
in [RFC5444] and sent using the parameters in [RFC5498].
The basic operations of the AODVv2 protocol are route discovery and
route maintenance.
An AODVv2 router is configured to perform route discovery on behalf
of a configured set of IP addresses known as Router Clients. Route
discovery is performed when an AODVv2 router needs to forward an IP
packet from one of its Router Clients, but does not have a valid
route to the packet's destination. AODVv2 routers use Route Request
(RREQ) and Route Reply (RREP) messages to carry route information
between the originator of the route discovery and the target, (shouldnât
this be router responsible for target Router Client?)
establishing a route to both endpoints on all intermediate routers.
A metric value is included to represent the cost of the route
contained within the message. AODVv2 uses sequence numbers to
identify stale routing information, and compares route metric values
to determine if advertised routes could form loops.
Route maintenance includes confirming bidirectionality of links to
next hop AODVv2 routers, issuing Route Error (RERR) messages, reacting to
received Route Error messages, and
extending and enforcing route timeouts.
The on-demand nature of AODVv2 requires signals to be
exchanged between AODVv2 and the forwarding plane. These signals indicate
when: a
a packet is to be forwarded, in order to initiate route discovery;
packet forwarding fails, in order to initiate route error reporting;
a packet is successfully forwarded, for route maintenance.
Security for authentication of AODVv2 routers and encryption of
control messages is accomplished using the TIMESTAMP and ICV TLVs
defined in [RFC7182].
Perkins, et al. Expires July 21, 2016 [Page 4]
Internet-Draft AODVv2 January 2016
2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
[RFC2119]. In addition, this document uses terminology from
[RFC5444], and defines the following terms:
AddressList
A list of IP addresses as used in AODVv2 messages.
AckReq
Used in a Route Reply message to indicate the IP address of the
router from which a Route Reply Acknowledgement is expected.
AdvRte
A route advertised in an incoming route message.
AODVv2 Router
An IP addressable device in the ad hoc network that performs the
AODVv2 protocol operations specified in this document.
CurrentTime
The current time as maintained by the AODVv2 router.
ENAR (External Network Access Router)
An AODVv2 router with an interface to an external, non-AODVv2
network.
Invalid route
A route that cannot be used for forwarding but still contains
useful sequence number information.
Local Route
An entry in the Local Route Set. (Local Route Set should have an entry,
something simple and pointing to the section JWD DONE)
(Later in the document LocalRoute is used pick one JWD DONE)
MANET
A Mobile Ad Hoc Network as defined in [RFC2501].
MetricType
The metric type for a metric value included in a message.
MetricTypeList
A list of metric types associated with the addresses in the
AddressList of a Route Error message.
Neighbor
Perkins, et al. Expires July 21, 2016 [Page 5]
Internet-Draft AODVv2 January 2016
An AODVv2 router from which an RREQ or RREP message has been
received. Neighbors exchange routing information and verify
bidirectionality of the link to a neighbor before installing a
route via that neighbor into the Local Route Set.
OrigAddr
The source IP address of the IP packet triggering route discovery.
OrigMetric
The metric value associated with the route to OrigAddr (and any
other addresses included in the given prefix length).
OrigPrefixLen
The prefix length, in bits, configured in the Router Client entry
which includes OrigAddr.
OrigSeqNum
The sequence number of the AODVv2 router which originated the
Route Request on behalf of OrigAddr.
PktSource
The source address of the IP packet which triggered a Route Error
message.
PrefixLengthList
A list of routing prefix lengths associated with the addresses in
the AddressList of a message.
Reactive
Performed only in reaction to specific events. In AODVv2, routes
are requested only when data packets need to be forwarded. In
this document, "reactive" is synonymous with "on-demand".
RERR (Route Error)
The AODVv2 message type used to indicate that an AODVv2 router
does not have a valid LocalRoute toward one or more particular
destinations.
RERR_Gen (RERR Generating Router)
The AODVv2 router generating a Route Error message.
Routable Unicast IP Address
A routable unicast IP address is a unicast IP address that is
scoped sufficiently to be forwarded by a router. Globally-scoped
unicast IP addresses and Unique Local Addresses (ULAs) [RFC4193]
are examples of routable unicast IP addresses.
Router Client
Perkins, et al. Expires July 21, 2016 [Page 6]
Internet-Draft AODVv2 January 2016
An address or address range configured on an AODVv2 router, on
behalf of which that router will initiate and respond to route
discoveries.
These addresses may be from the AODVv2 router itself or by non-
routing devices that are reachable without traversing another
AODVv2 router.
RREP (Route Reply)
The AODVv2 message type used to reply to a Route Request message.
RREP_Gen (RREP Generating Router)
The AODVv2 router that generates the Route Reply message, i.e.,
the router configured with TargAddr as a Router Client.
RREQ (Route Request)
The AODVv2 message type used to discover a route to TargAddr and
distribute information about a route to OrigAddr.
RREQ_Gen (RREQ Generating Router)
The AODVv2 router that generates the Route Request message, i.e.,
the router configured with OrigAddr as a Router Client.
RteMsg (Route Message)
A Route Request (RREQ) or Route Reply (RREP) message.
SeqNum
The sequence number maintained by an AODVv2 router to indicate
freshness of route information.
SeqNumList
A list of sequence numbers associated with the addresses in the
AddressList of a message.
TargAddr
The target address of a route request, i.e., the destination
address of the IP packet triggering route discovery.
TargMetric
The metric value associated with the route to TargAddr (and any
other addresses included in the given prefix length).
TargPrefixLen
The prefix length, in bits, configured in the Router Client entry
which includes TargAddr.
TargSeqNum
Perkins, et al. Expires July 21, 2016 [Page 7]
Internet-Draft AODVv2 January 2016
The sequence number of the AODVv2 router which originated the
Route Reply on behalf of TargAddr.
Valid route
A route that can be used for forwarding. (the deleted part should be
defined in Route Error Generation section JWD TODO: why there? If you hink it's
a bit too verbose at that place, Local Route Set {#rte} has an in-depth
definition what a valid route is and isn't )
Unreachable Address
An address reported in a Route Error message. (the deleted part should be
defined in Route Error Generation section JWD TODO)
Upstream
In the direction from destination to source (from TargAddr to
OrigAddr).
ValidityTime
The length of time the route described by the message is offered.
This document uses the notational conventions in Table 1 to simplify
the text.
+-----------------------+------------------------------------+
| Notation | Meaning |
+-----------------------+------------------------------------+
| Route[Address] | A route toward Address |
| Route[Address].Field | A field in a route toward Address |
| RteMsg.Field | A field in either RREQ or RREP |
+-----------------------+------------------------------------+
Table 1: Notational Conventions
3. Applicability Statement
(Wireless properties of the network is not mentioned at all and this is quite
important as Iâm pretty sure AODVv2 for used in a wired network would be a
bad idea JWD TODO)
The AODVv2 routing protocol is a reactive routing protocol. A reactive
protocol only sends
messages to discover a route when there is data to send on that
route. Therefore, a reactive routing protocol requires certain
interactions with the forwarding plane (for example, to indicate when
a packet is to be forwarded, in order to initiate route discovery). The set
of signals
exchanged between AODVv2 and the forwarding plane are discussed in
Section 6.4.
Perkins, et al. Expires July 21, 2016 [Page 8]
Internet-Draft AODVv2 January 2016
AODVv2 is designed for stub or disconnected mobile ad hoc networks,
i.e., non-transit networks or those not connected to the internet.
AODVv2 can, however, be configured to perform gateway functions when
attached to external networks, as discussed in Section 9. (some mention of
limitations of the provided approach is required. No default gateways,
drawbacks/overhead of using AODVv2 network to connect to the Internet using
provided approach JWD TODO)
AODVv2 handles a wide variety of mobility and traffic patterns by
determining routes on-demand. In networks with a large number of
routers, AODVv2 is best suited for relatively sparse traffic
scenarios where each router forwards IP packets to a small percentage
of other AODVv2 routers in the network. In this case fewer routes
are needed, and therefore less control traffic is produced.
AODVv2 provides for message integrity and security against replay
attacks by using integrity check values, timestamps and sequence
numbers, as described in Section 13. If security associations can be
established, encryption can be used for AODVv2 messages to ensure
that only trusted routers participate in routing operations.
(There is an issue with trust being limited to single hops and no way to verify
information more than one hop away JWD TODO)
Since the route discovery process aims for a route to be established
in both directions along the same path, uni-directional links are not
suitable. AODVv2 will detect and exclude those links from route
discovery. The route discovered is optimised for the requesting
router, and the return path may not be the optimal route.
AODVv2 is applicable to memory constrained devices, since only a
little routing state is maintained in each AODVv2 router. AODVv2 routes that
are not needed for forwarding data do not need to be maintained. On
routers unable to store persistent AODVv2 state, recovery can impose
a performance penalty (e.g., in case of AODVv2 router reboot), since
if a router loses its sequence number, there is a delay before the
router can resume full operations. This is described in Section 6.1.
AODVv2 supports routers with multiple interfaces and multiple IP
addresses per interface. (this should be disallowed as it can form non
valid routes with uni-directional links JWD TODO) AODVv2 requires that each
interface
configured for AODVv2 has at least one unicast IP address. Address
assignment procedures are out of scope for AODVv2.
AODVv2 supports Router Clients with multiple interfaces, as long as
each interface is configured with its own unicast IP address. Multi-
homing of a Router Client IP address is not supported by AODVv2, and
therefore an IP address SHOULD NOT be configured as a Router Client
on more than one AODVv2 router at any one time.
Perkins, et al. Expires July 21, 2016 [Page 9]
Internet-Draft AODVv2 January 2016
(This should go in the intro JWD DONE)
4. Data Structures
4.1. Interface List
If multiple interfaces of the AODVv2 router are configured for use by
AODVv2, a list of the interfaces MUST be configured in the
AODVv2_INTERFACES list.
(AODVv2_INTERFACES isnât defined before now it should be. Also what does this
configuration consist of? Also is the list empty if there is only one
interface? JWD! DONE)
4.2. Router Client Table
Whatâs the difference between a table and a list why are we using one over
the other?JWD TODO)
An AODVv2 router provides route discovery services for its own local
applications and for other non-routing devices that are reachable
without traversing another AODVv2 router. The addresses used by
these devices, and the AODVv2 router itself, are configured in the
Router Client Table. An AODVv2 router will only originate Route
Request and Route Reply messages on behalf of configured Router
Clients.
Router Client Table entries MUST contain:
RouterClient.IPAddress
An IP address or the start of an address range that requires route
discovery services from the AODVv2 router.
RouterClient.PrefixLength
The length, in bits, of the routing prefix associated with the
RouterClient.IPAddress. If a prefix length is included, the
AODVv2 router MUST provide connectivity for all addresses within
that prefix.
RouterClient.Cost
The cost associated with reaching this Router Client.
Perkins, et al. Expires July 21, 2016 [Page 10]
Internet-Draft AODVv2 January 2016
A Router Client address SHOULD NOT be served by more than one AODVv2
router at any one time. (do things break when a Router Client is served by
more than one AODVv2 Router? My guess is yes and therefore SHOULD be a MUST.
JWD DONE) To shift responsibility for a Router Client
to a different AODVv2 router, correct AODVv2 routing behavior MUST be
observed; The AODVv2 router adding the Router Client MUST wait for
any existing routing information about this Router Client to be
purged from the network, i.e., at least MAX_SEQNUM_LIFETIME since the
last SeqNum update on the router which is removing this Router
Client.
4.3. Neighbor Table
A Neighbor Table MUST be maintained with information about
neighboring AODVv2 routers. Neighbor Table entries are stored when
AODVv2 messages are received. If the Neighbor is chosen as a next
hop on an installed route, the link to the Neighbor will be tested
for bidirectionality and the result stored in this table. A route
will only be considered valid when the link is confirmed to be
bidirectional.
Neighbor Table entries MUST contain:
Neighbor.IPAddress
An IP address of the neighboring router, learned from the source
IP address of a received route message.
Neighbor.State
Indicates whether the link to the neighbor is bidirectional.
There are three possible states: Confirmed, Unknown, and
Blacklisted. Unknown is the initial state. Confirmed indicates
that the link to the neighbor has been confirmed as bidirectional.
Blacklisted indicates that the link to the neighbor is uni-
directional. Section 6.2 discusses how to monitor link
bidirectionality.
Neighbor.ResetTime
When the value of Neighbor.State is Blacklisted, this indicates
the time at which the value of Neighbor.State will revert to
Unknown. By default this value is calculated at the time the
router is blacklisted and is equal to CurrentTime +
MAX_BLACKLIST_TIME. When the value of Neighbor.State is not
Blacklisted, this time is set to INFINITY_TIME.
(How does one know which outgoing interface is the neighbor associated with?
This seems like a very LARGE missing piece of required information JWD! DONE)
4.4. Sequence Numbers
Sequence numbers enable AODVv2 routers to determine the temporal
order of route discovery messages, identifying stale routing
information so that it can be discarded. The sequence number
Perkins, et al. Expires July 21, 2016 [Page 11]
Internet-Draft AODVv2 January 2016
fulfills the same roles as the "Destination Sequence Number" of DSDV
[Perkins94], and the AODV Sequence Number in [RFC3561].
Each AODVv2 router in the network MUST maintain its own sequence
number. All RREQ and RREP messages created by an AODVv2 router
include the router's sequence number, reported as a 16-bit unsigned
integer. Each AODVv2 router MUST ensure that its sequence number is
strictly increasing, and that it is incremented by one (1) whenever
an RREQ or RREP is created, except when the sequence number is 65,535
(the maximum value of a 16-bit unsigned integer), in which case it
MUST be reset to one (1). The value zero (0) is reserved to indicate
that the sequence number is unknown.
An AODVv2 router MUST only attach its own sequence number to
information about a route to one of its configured Router Clients, all route
messages regenerated by other routers retain the
originator's sequence number. To determine staleness the previously stored
sequence number associated with the originator, is subtracted from the
incoming sequence number. The
result of the subtraction is to be interpreted as a signed 16-bit
integer, and if less than zero, the information in the new AODVv2
message is stale and MUST be discarded.
This, along with the processes in Section 6.7.1, ensures loop
freedom.
An AODVv2 router SHOULD maintain its sequence number in persistent
storage. If the sequence number is lost, the router MUST follow the
procedure in Section 6.1 to safely resume routing operations with a
new sequence number.
4.5. Local Route Set
All AODVv2 routers MUST maintain a Local Route Set, containing
information about routes learned from AODVv2 route messages.
Implementations MAY choose to modify the Routing Information Base directly,
(this is the first this term is used and it should be defined I assume itâs
the forwarding planes routing table JWD DONE)
or alternatively, the Local Route Set MAY be stored separately, and the
Routing Information Base can be externally updated using information from
the Local
Route Set. (Iâm assuming this is here to hint at the possibility of a
unified router with multiple routing protocols playing nicely together JWD DONE)
Routes learned from AODVv2 route messages are referred to in this
document as LocalRoutes, and MUST contain the following information:
LocalRoute.Address
An address, which, when combined with LocalRoute.PrefixLength,
describes the set of destination addresses this route includes.
Perkins, et al. Expires July 21, 2016 [Page 12]
Internet-Draft AODVv2 January 2016
LocalRoute.PrefixLength
The prefix length, in bits, associated with LocalRoute.Address.
LocalRoute.SeqNum
The sequence number associated with LocalRoute.Address, obtained
from the last route message that successfully updated this entry.
LocalRoute.NextHop
The source IP address of the IP packet containing the AODVv2
message advertising the route to LocalRoute.Address, i.e. an IP
address of the AODVv2 router used for the next hop on the path
toward LocalRoute.Address.
LocalRoute.NextHopInterface
The interface used to send IP packets toward LocalRoute.Address.
LocalRoute.LastUsed
If this route is installed in the Routing Information Base, the
time it was last used to forward an IP packet.
LocalRoute.LastSeqNumUpdate
The time LocalRoute.SeqNum was last updated.
LocalRoute.ExpirationTime
The time at which this entry must be marked as Invalid.
LocalRoute.MetricType
The type of metric associated with this route.
LocalRoute.Metric
The cost of the route toward LocalRoute.Address expressed in units
consistent with LocalRoute.MetricType.
LocalRoute.State
The last known state (Unconfirmed, Idle, Active, or Invalid) of
the route.
LocalRoute.Precursors (optional feature)
A list of upstream neighbors using the route (see Section 10.2).
There are four possible states for a LocalRoute:
Unconfirmed
A route learned from a Route Request message, which has not yet
been confirmed as bidirectional. It is not able to be used for
forwarding IP packets, and therefore it is not referred to as a
valid route.
(I noticed that Unconfirmed is the only state that uses Route Request message
instead of route message, is that intended? Can unconfirmed route state only
be reached through Route Request messages? JWD DONE: Yes)
Perkins, et al. Expires July 21, 2016 [Page 13]
Internet-Draft AODVv2 January 2016
Idle
A route which has been learned from a route message, and has also
been confirmed, but has not been used in the last ACTIVE_INTERVAL.
It is able to be used for forwarding IP packets, and therefore it
is referred to as a valid route.
Active
A route which has been learned from a route message, and has also
been confirmed, and has been used in the last ACTIVE_INTERVAL. It
is able to be used for forwarding IP packets, and therefore it is
referred to as a valid route.
Invalid
A route which has expired or been lost. It is not able to be used
for forwarding IP packets, and therefore it is not referred to as
a valid route. Invalid routes contain sequence number information
which allows incoming information to be assessed for freshness.
When the Local Route State is stored separately from the Routing
Information Base, routes are added to the Routing Information Base
when LocalRoute.State is valid (set to Active or Idle), and removed
from the Routing Information Base when LocalRoute.State becomes Invalid.
Changes to LocalRoute state are detailed in Section 6.9.1.
An AODVv2 router MAY offer a route for a limited time. In this case,
the route is referred to as a timed route. The length of time for
which the route is valid is referred to as validity time, and is
included in messages which advertise the route. The shortened
validity time is reflected in LocalRoute.ExpirationTime. If a route
is not timed, LocalRoute.ExpirationTime is INFINITY_TIME.
Note that multiple entries for the same address, prefix length and
metric type may exist in the Local Route Set, but only one will be a
valid entry. Any others will be Unconfirmed, but may offer
improvement to the existing valid route, if they can be confirmed as
valid routes (see Section 6.2).
(There wasnât any text above and itâs not clear how this is enforced. I
have an idle route and an unconfirmed route, the unconfirmed route is updated
to confirmed, I now have two valid route entries and no way to demote/decide or
otherwise purge one of them but Iâm not allowed to do that. Setting the
worse and previously idle route to unconfirmed seems wrong and broken. JWD!
DONE
https://github.com/Lotterleben/AODVv2-Draft/commit/01c551f96ee1db2c308abfd40aa4d8f3bbab3baa)
Multiple valid routes for the same address and prefix length but for
different metric types may exist in the Local Route Set, but the
decision of which of these routes to install in the Routing
Information Base to use for forwarding is outside the scope of
AODVv2.
Perkins, et al. Expires July 21, 2016 [Page 14]
Internet-Draft AODVv2 January 2016
4.6. Multicast Route Message Table
A route message (RteMsg) is either a Route Request or Route Reply
message. RREQ messages are multicast by default and regenerated
multiple times, and RREP messages may be multicast when the link to
the next router is not known to be bidirectional. Multiple similar
route messages might be received by any one router during one route
discovery attempt. The AODVv2 router does not need to regenerate or
respond to every one of these messages.
The Multicast Route Message Table is a conceptual table which
contains information about previously received multicast route
messages, so that incoming route messages can be compared with
previously received messages to determine if the incoming information
is redundant or stale, and the router can avoid sending redundant control
traffic.
Multicast Route Message Table entries MUST contain the following
information:
RteMsg.MessageType
Either RREQ or RREP.
RteMsg.OrigAddr
The source address of the IP packet triggering the route request.
RteMsg.OrigPrefixLen
The prefix length associated with RteMsg.OrigAddr, originally from
the Router Client entry on RREQ_Gen which includes
RteMsg.OrigAddr.
RteMsg.TargAddr
The destination address of the IP packet triggering the route
request.
RteMsg.TargPrefixLen
The prefix length associated with RteMsg.TargAddr, originally from
the Router Client entry on RREP_Gen which includes
RteMsg.TargAddr.
(this seems like an entry that would always be full 1s on a route request if
true that should be stated to make things more clear JWD DONE)
RteMsg.OrigSeqNum
The sequence number associated with the route to OrigAddr, if
RteMsg is an RREQ.
RteMsg.TargSeqNum
The sequence number associated with the route to TargAddr, if
present in the RteMsg.
(would this ever be in a RREQ? If no then I suggest using words similar to
âif RteMsg is an RREP JWD DONE)
Perkins, et al. Expires July 21, 2016 [Page 15]
Internet-Draft AODVv2 January 2016
RteMsg.MetricType
The metric type of the route requested.
RteMsg.Metric
The metric value received in the RteMsg.
RteMsg.Timestamp
The last time this Multicast Route Message Table entry was
updated.
RteMsg.RemoveTime
The time at which this entry MUST be removed from the Multicast
Route Message Table. This is set to CurrentTime +
MAX_SEQNUM_LIFETIME, whenever the sequence number of this entry
(RteMsg.OrigSeqNum for an RREQ, or RteMsg.TargSeqNum for an RREP)
is updated.
The Multicast Route Message Table is maintained so that no two
entries have the same MessageType, OrigAddr, TargAddr, and
MetricType. See Section 6.8 for details about updating this table.
5. Metrics
Metrics measure a cost or quality associated with a route or a link,
e.g., latency, delay, financial cost, energy, etc. Metric values are
reported in Route Request and Route Reply messages.
In Route Request messages, the metric describes the cost of the route
from OrigAddr (and any other addresses included in the prefix length
of RREQ_Gen's Router Client entry for OrigAddr) to the router sending
the Route Request. For RREQ_Gen, this is the cost associated with
the Router Client entry which includes OrigAddr. For routers which
regenerate the RREQ, this is the cost from OrigAddr to the
regenerating router, combining the metric value from the received
RREQ message with knowledge of the link cost from the sender to the
receiver, i.e., the incoming link cost. This updated route cost is
included when regenerating the Route Request message, and used to
install a route back toward OrigAddr.
Similarly, in Route Reply messages, the metric reflects the cost of
the route from TargAddr (and any other addresses included in the
prefix length of RREP_Gen's Router Client entry for TargAddr) to the
router sending the Route Reply. For RREP_Gen, this is the cost
associated with the Router Client entry which includes TargAddr. For
routers which regenerate the RREP, this is the cost from TargAddr to
the regenerating router, combining the metric value from the received
RREP message with knowledge of the link cost from the sender to the
receiver, i.e., the incoming link cost. This updated route cost is
Perkins, et al. Expires July 21, 2016 [Page 16]
Internet-Draft AODVv2 January 2016
included when regenerating the Route Reply message, and used to
install a route back toward TargAddr.
Assuming link metrics are symmetric, the cost of the routes installed
in the Local Route Set at each router will be correct. (This is a huge and
often incorrect assumption. It may be possible to mention that calculating
incoming/outgoing metric data is outside of scope of this document and leave it
at that JWD DONE) The route
discovered is optimised for the requesting router, and the return
path may not be the optimal route.
AODVv2 enables the use of multiple metric types. Each route
discovery attempt indicates the metric type which is requested for
the route. Only one metric type may be used in each route discovery
attempt. (Already said this no need to say it again. JWD DONE)
For each MetricType, AODVv2 requires:
o A MetricType number, to indicate the metric type of a route.
MetricType numbers allocated are detailed in Section 11.6.
o A maximum value, denoted MAX_METRIC[MetricType]. If the cost of a
route exceeds MAX_METRIC[MetricType], the route is ignored.
AODVv2 cannot store routes that cost more than
MAX_METRIC[MetricType].
(consider adding a maximum single hop value JWD TODO)
o A function for incoming link cost, denoted Cost(L). Using
incoming link costs means that the route learned has a path
optimized for the direction from OrigAddr to TargAddr.
o A function for route cost, denoted Cost(R).
o A function to analyze routes for potential loops based on metric
information, denoted LoopFree(R1, R2). LoopFree verifies that a
route R2 is not a sub-section of another route R1. An AODVv2
router invokes LoopFree() as part of the process in Section 6.7.1,
when an advertised route (R1) and an existing LocalRoute (R2) have
the same destination address, metric type, and sequence number.
LoopFree returns FALSE to indicate that an advertised route is not
to be used to update a stored LocalRoute, as it may cause a
routing loop. In the case where the existing LocalRoute is
Invalid, it is possible that the advertised route includes the
existing LocalRoute and came from a router which did not yet
receive notification of the route becoming Invalid, so the
advertised route should not be used to update the Local Route Set,
in case it forms a loop to a broken route.
Perkins, et al. Expires July 21, 2016 [Page 17]
Internet-Draft AODVv2 January 2016
AODVv2 currently supports cost metrics where Cost(R) is strictly
increasing, by defining:
o Cost(R) := Sum of Cost(L) of each link in the route
o LoopFree(R1, R2) := ( Cost(R1) <= Cost(R2) )
Implementers MAY consider other metric types, but the definitions of
Cost and LoopFree functions for such types are undefined, and
interoperability issues need to be considered.
6. AODVv2 Protocol Operations
The AODVv2 protocol's operations include managing sequence numbers,
monitoring next hop AODVv2 routers on discovered routes and updating
the Neighbor Table, performing route discovery and dealing with
requests from other routers, processing incoming route information
and updating the Local Route Set, updating the Multicast Route
Message Table and suppressing redundant messages, and reporting
broken routes. These processes are discussed in detail in the
following sections.
6.1. Initialization
During initialization where an AODVv2 router does not have
information about its previous sequence number, or if its sequence
number is lost at any point, the router resets its sequence number to
one (1). However, other AODVv2 routers may still hold sequence
number information that this router previously issued. Since
sequence number information is removed if there has been no update to
the sequence number in MAX_SEQNUM_LIFETIME, the initializing router
must wait for MAX_SEQNUM_LIFETIME before it creates any messages
containing its new sequence number. It can then be sure that the
information it sends will not be considered stale.
Until MAX_SEQNUM_LIFETIME after its sequence number is reset, the
router SHOULD NOT create RREQ or RREP messages.
(Just to be clear one MUST wait 5 mins before starting to request any route
without a persistent store of the seq num, yes? JWD DONE)
During this wait period, the router is permitted to do the following:
o Process information in a received RREQ or RREP message to learn a
route to the originator or target of that route discovery
o Regenerate a received RREQ or RREP
o Send an RREP_Ack
o Maintain valid routes in the Local Route Set
Perkins, et al. Expires July 21, 2016 [Page 18]
Internet-Draft AODVv2 January 2016
o Create, process and regenerate RERR messages
6.2. Next Hop Monitoring
(needless, obvious and hard to follow JWD DONE)
To ensure AODVv2 Routers do not establish routes over uni-directional links,
AODVv2 routers MUST verify that the link to the next hop router is
bidirectional before marking a route as valid in the Local Route Set.
If link bidirectionality cannot be verified, this link MUST be
excluded from the route discovery procedure. (It isnât clear what the
previous sentence means as the link was already part of the route discovery
procedure if I know about it yes? JWD DONE: delete last sentence)
AODVv2 routers do not
need to monitor bidirectionality for links to neighboring routers
which are not used as next hops on routes in the Local Route Set.
o For the next hop router on the route toward OrigAddr, the approach
for testing bidirectional connectivity is to request
acknowledgement of Route Reply messages. Receipt of an
acknowledgement proves that bidirectional connectivity exists.
All AODVv2 routers MUST support this process, which is explained
in Section 7.2 and Section 7.3. A link to a neighbor is
determined to be unidirectional if a requested acknowledgement is
not received within RREP_Ack_SENT_TIMEOUT, or bidirectional if the
acknowledgement is received within the timeout.
o For the next hop router on the route toward TargAddr, receipt of
the Route Reply message containing the route to TargAddr is
confirmation of bidirectionality, since a Route Reply message is a
reply to a Route Request message which previously crossed the link
in the opposite direction.
(previous bullet points are a bit wordy consider using upstream and downstream
and just list, route request, route reply to confirm downstream and route
reqeust, route reply , route reply ack for upstream JWD DONE)
To assist with next hop monitoring, a Neighbor Table (Section 4.3) is
maintained. When an RREQ or RREP is received from an IP address
which does not already have an entry in the Neighbor Table, a new
entry is created as described in Section 6.3. While the value of
Neighbor.State is Unknown, acknowledgement of RREP messages sent to
that neighbor MUST be requested. If an acknowledgement is not
received within the timeout period, the neighbor MUST have
Neighbor.State set to Blacklisted. If an acknowledgement is received
within the timeout period, Neighbor.State is set to Confirmed. While
Perkins, et al. Expires July 21, 2016 [Page 19]
Internet-Draft AODVv2 January 2016
the value of Neighbor.State is Confirmed, the request for an
acknowledgement of any other RREP message is unnecessary.
When routers perform other operations such as those from the list
below, these MAY be used as additional indications of connectivity:
o NHDP HELLO Messages [RFC6130]
o Route timeout
o Lower layer triggers, e.g. message reception or link status
notifications
o TCP timeouts
o Promiscuous listening
o Other monitoring mechanisms or heuristics
If such an external process signals that the link to a neighbor is
bidirectional, the AODVv2 router MAY update the matching Neighbor
Table entry by changing the value of Neighbor.State to Confirmed, e.g.
receipt of a Neighborhood Discovery Protocol HELLO message with the receiving
router listed as a neighbor. If
an external process signals that a link is not bidirectional, the the
value of Neighbor.State MAY be changed to Blacklisted, e.g. notification of
a TCP timeout. (I canât see how the above would be helpful at all JWD DONE
[deleted text as suggested])
6.3. Neighbor Table Update
On receipt of an RREQ or RREP message, the Neighbor Table MUST be
checked for an entry with Neighbor.IPAddress which matches the source
IP address of the packet containing the AODVv2 message. If no matching
entry is found, a new
entry is created.
A new Neighbor Table entry is created as follows:
Perkins, et al. Expires July 21, 2016 [Page 20]
Internet-Draft AODVv2 January 2016
o Neighbor.IPAddress := Source IP address of the received route
message
o Neighbor.State := Unknown
o Neighbor.ResetTime := INFINITY_TIME
If the message is an RREP which answers a recently sent RREQ, or an
RREP_Ack which answers a recently sent RREP, the link to the neighbor
is bidirectional.
(The valid entry in the Multicast Route Message Table must be identified this
is too wishy washy for me to understand what is meant by recently sent JWD!
DONE: was sent within $timeout_constant... also check if it matches an existing
unconfirmed route ) When the link to the neighbor is determined to be
bidirectional, the Neighbor Table entry is updated as follows:
o Neighbor.State := Confirmed
o Neighbor.ResetTime := INFINITY_TIME
If an RREP_Ack is not received within the expected time (what is the
expected time? list the entry we are checking assuming in the Multicast Route
Message Tablet? outline it. JWD TODO: The MRMT is not the right place, but I'm
nt sure if we're descrivng timers for this anywhere? shoud we?), the link is
considered to be uni-directional. When the link to the neighbor is
determined to be uni-directional, the Neighbor Table entry is updated
as follows:
o Neighbor.State := Blacklisted
o Neighbor.ResetTime := CurrentTime + MAX_BLACKLIST_TIME
When the Neighbor.ResetTime is reached, the Neighbor Table entry is
updated as follows:
o Neighbor.State := Unknown
(What does this mean? How would one determine a link to a neighbor to be
brokenâ¦.suggest removing it JWD TODO)
Route requests from neighbors with Neighbor.State set to Blacklisted
are ignored to avoid persistent IP packet loss or protocol failures.
Neighbor.ResetTime allows the neighbor to again be allowed
to participate in route discoveries in case
the link between the routers has become bidirectional.
6.4. Interaction with the Forwarding Plane
(This has already been said in different words in the intro and applicability
sections not needed again here JWD DONE)
These are conceptual signals, and can be implemented in various ways.
Conformant implementations of AODVv2 are not mandated to implement
the forwarding plane separately from the control plane or data plane;
these signals and interactions are identified simply as assistance
for implementers who may find them useful.
AODVv2 requires signals from the forwarding plane:
Perkins, et al. Expires July 21, 2016 [Page 21]
Internet-Draft AODVv2 January 2016
o A packet cannot be forwarded because a route is unavailable:
AODVv2 needs to know the source and destination IP addresses of
the packet. If the source of the packet is configured
as a Router Client, the router should initiate route
discovery to the destination. If it is not a Router Client, the router
should create
a Route Error message.
o A packet is to be forwarded: AODVv2 needs to check the state of
the route to ensure it is still
valid.
o Packet forwarding succeeds: AODVv2 needs to update the record of
when a route was last used to forward a packet.
o Packet forwarding failure occurs: AODVv2 needs to create a Route
Error message.
AODVv2 needs to send signals to the forwarding plane:
o A route discovery is in progress: buffering might be configured
for packets requiring a route, while route discovery is attempted (see
[](#route_discovery)).
(This is the first mention of buffering. It should be included in the
applicability section as well along with a reference to text on how they are
managed JWD DONE)
o A route discovery failed: any buffered packets requiring that
route should be discarded, and the source of the packet should be
notified that the destination is unreachable (using an ICMP
Destination Unreachable message). Route discovery fails if an
RREQ cannot be generated because the control message generation
limit has been reached, or if an RREP is not received within the
expected time. (reference the section detailing the behavior of what
defines expected time JWD DONE)
o A route discovery is not permitted: any buffered packets requiring
that route should be discarded. A route discovery will not be
attempted if the source address of the packet needing a route is
not configured as a Router Client.
o A route discovery succeeded: install the corresponding route into
the Routing Information Base and begin transmitting buffered
packets.
o A route has been made invalid: remove the corresponding route from
the Routing Information Base.
o A route has been updated: update the corresponding route in the
Routing Information Base.
Perkins, et al. Expires July 21, 2016 [Page 22]
Internet-Draft AODVv2 January 2016
(moved to the beginning of the section so this is understood upfront JWD
DONE)
6.5. Message Transmission
AODVv2 sends [RFC5444] formatted messages using the parameters for
port number and IP protocol specified in [RFC5498]. Mapping of
AODVv2 data to [RFC5444] messages is detailed in Section 8. AODVv2
multicast messages are sent to the link-local multicast address LL-
MANET-Routers [RFC5498]. All AODVv2 routers MUST subscribe to LL-
MANET-Routers [RFC5498] to receive AODVv2 messages. Note that
multicast messages MAY be sent via unicast. For example, this may
occur for certain link-types (non-broadcast media), for manually
configured router adjacencies, or in order to improve robustness.
When multiple interfaces are available, an AODVv2 router transmitting
a multicast message to LL-MANET-Routers MUST send the message on all
interfaces that have been configured for AODVv2 operation, as given
in the AODVv2_INTERFACES list (Section 4.1). Similarly, AODVv2
routers MUST subscribe to LL-MANET-Routers on all their AODVv2
interfaces.
To avoid congestion, each AODVv2 router's rate of message generation
SHOULD be limited (CONTROL_TRAFFIC_LIMIT) and administratively
configurable. To prioritize transmission of AODVv2 control messages
in order to respect the CONTROL_TRAFFIC_LIMIT:
o Highest priority SHOULD be given to RREP_Ack messages. This
allows links between routers to be confirmed as bidirectional and
avoids undesirable blacklisting of next hop routers.
o Second priority SHOULD be given to RERR messages for undeliverable
IP packets, so that broken routes that are still in use by other
AODVv2 routers can be reported to those routers, to avoid IP data
packets being repeatedly forwarded to AODVv2 routers which cannot
forward them to their destination.
o Third priority SHOULD be given to RREP messages in order that
RREQs do not time out.
o RREQ messages SHOULD be given priority over RERR messages for
newly invalidated routes, since the invalidated routes may not
still be in use, and if there is an attempt to use the route, a
new RERR message will be generated.
(So is this 4th or second? Itâs not clear and it should be. JWD DONE)
o Lowest priority SHOULD be given to RERR messages generated in
response to RREP messages which cannot be regenerated. In this
case the route request will be retried at a later point.
(Itâs not clear to me how this priority works. Do the messages just get
dropped when tsome threshold for max number of messages is reached? Is there
some queuing method because if their isnât I donât see how priority would
work at all, as the choices are drop or send. This whole section seems out of
place as we haveât talked about generating messages. Iâd suggest moving or
removing JWD DONE partially ([master e9927a8] redo priority definition))
Perkins, et al. Expires July 21, 2016 [Page 23]
Internet-Draft AODVv2 January 2016
Messages may travel a maximum of MAX_HOPCOUNT hops.
(Messages donât really travel though do they as they are regenerated at each
hop. JWD DONE: sentence removed )
6.6. Route Discovery, Retries and Buffering
AODVv2's RREQ and RREP messages are used for route discovery. RREQ
messages are multicast to solicit an RREP, whereas RREP are unicast
where possible. The constants used in this section are defined in
Section 11.
When an AODVv2 router needs to forward an IP packet (with source
address OrigAddr and destination address TargAddr) from one of its
Router Clients, it needs a route to TargAddr in its Routing
Information Base. If no route exists, the AODVv2 router (RREQ_Gen) generates
and multicasts a Route Request message (RREQ), on all configured interfaces,
containing OrigAddr and
TargAddr. The procedure for this is described in Section 7.1.1.
Each generated RREQ results in an increment to the router's sequence
number.
Buffering might be configured for IP packets awaiting a route for
forwarding by RREQ_Gen, if sufficient memory is available. Buffering
of IP packets might have both positive and negative effects. Real-
time traffic, voice, and scheduled delivery may suffer if packets are
buffered and subjected to delays, but TCP connection establishment
will benefit if packets are queued while route discovery is performed
[Koodli01]. If packets are not queued, no notification should be
sent to the source. (What notification is sent to the source when packets
are queued? JWD DONE) Determining which packets to discard first when
the buffer is full is a matter of policy at each AODVv2 router.
(This doesnât specify with any detail what buffer methods should be used or
even some that might be appropriate. Mentioning that different buffer methods
doesnât affect interoperability should be done JWD DONE)
RREQ_Gen awaits reception of a Route Reply message (RREP) containing
a route toward TargAddr. (is there some table that lists routes that are
being waited on? JWD TODO) If a valid route to TargAddr is not learned
within RREQ_WAIT_TIME, RREQ_Gen will retry the route discovery. To
reduce congestion in a network, repeated attempts at route discovery
for a particular target address utilize a binary exponential backoff:
for each additional attempt, the time to wait for receipt of the RREP
is multiplied by 2. If the requested route is not learned within the
wait period, another RREQ is sent, up to a total of
DISCOVERY_ATTEMPTS_MAX. This is the same technique used in AODV
[RFC3561].
The RREQ is received by neighboring AODVv2 routers, and processed and
regenerated as described in Section 7.1. Routers learn a potential
route to OrigAddr (and other addresses as indicated by OrigPrefixLen)
from the RREQ and store it in the Local Route Set. The router
responsible for TargAddr responds by generating a Route Reply message
(RREP) and sends it back toward RREQ_Gen via the next hop on the
potential route to OrigAddr. Each intermediate router learns the
Perkins, et al. Expires July 21, 2016 [Page 24]
Internet-Draft AODVv2 January 2016
route to TargAddr (and other addresses as indicated by
TargPrefixLen), regenerates the RREP and sends toward OrigAddr.
(seems like a good overview paragraph but not sure what it adds here. Should be
moved further up in the document or removed. JWD DONE)
Through the use of bidirectional link monitoring and blacklists (Section 6.2)
uni-directional links on initial selected route will be ignored on subsequent
route discovery attempts.
(Seems like a more direct way of saying the same thing JWD DONE)
Route discovery is considered to have failed after
DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for an RREP
response to the final RREQ. After the attempted route discovery has
failed, RREQ_Gen waits at least RREQ_HOLDDOWN_TIME before attempting
another route discovery to the same destination, in order to avoid
repeatedly generating control traffic that is unlikely to discover a
route. Any IP packets buffered for TargAddr are also dropped and a
Destination Unreachable ICMP message (Type 3) with a code of 1 (Host
Unreachable Error) is delivered to the source of the packet, so that
the application knows about the failure. (we know this already. JWD DONE)
If RREQ_Gen does receive a route message containing a route to
TargAddr within the timeout, it processes the message according to
Section 7. When a valid LocalRoute entry is created in the Local
Route Set, the route is also installed in the Routing Information
Base, and the router will begin sending the buffered IP packets. Any
retry timers for the corresponding RREQ are then cancelled.
During route discovery, all routers on the path learn a route to both
OrigAddr and TargAddr, so that routes are constructed in both
directions. The route is optimized for the forward route, and the
return route uses the same path in reverse.
6.7. Processing Received Route Information
All AODVv2 route messages contain a route. A Route Request (RREQ)
contains a route toward OrigAddr (and other addresses as indicated by
OrigPrefixLen), and a Route Reply (RREP) contains a route toward
TargAddr (and other addresses as indicated by TargPrefixLen). All
AODVv2 routers that receive a route message are able to store the
route contained within it in their Local Route Set. Incoming
information is first checked to verify that it is both safe to use
and offers an improvement to existing information, as explained in
Perkins, et al. Expires July 21, 2016 [Page 25]
Internet-Draft AODVv2 January 2016
Section 6.7.1. The Local Route Set MAY then be updated according to
Section 6.7.2. (MAY not MUST? Why wouldnât one update it according to
section 6.7.2? JWD DONE)
In the processes below, RteMsg is used to denote the route message,
AdvRte is used to denote the route contained within it, and
LocalRoute denotes an existing entry in the Local Route Set which
matches AdvRte on address, prefix length, and metric type.
AdvRte has the following properties:
o AdvRte.Address := network address given by combining
RteMsg.OrigAddr and RteMsg.OrigPrefixLen (in RREQ) or
RteMsg.TargAddr and RteMsg.TargPrefixLen (in RREP)
o AdvRte.PrefixLength := RteMsg.OrigPrefixLen (in RREQ) or
RteMsg.TargPrefixLen (in RREP). If no prefix length was included
in RteMsg, prefix length is the address length, in bits, of
RteMsg.OrigAddr (in RREQ) or RteMsg.TargAddr (in RREP)
o AdvRte.SeqNum := RteMsg.OrigSeqNum (in RREQ) or RteMsg.TargSeqNum
(in RREP)
o AdvRte.NextHop := RteMsg.IPSourceAddress (an address of the router
from which the RteMsg was received)
(surely this must be an address of the sending interface of the router from
which the RteMsg was received. JWD DONE)
o AdvRte.MetricType := RteMsg.MetricType
o AdvRte.Metric := RteMsg.Metric
o AdvRte.Cost := Cost(R) using the cost function associated with the
route's metric type, i.e. Cost(R) = AdvRte.Metric + Cost(L), as
described in Section 5, where L is the link from the advertising
router
o AdvRte.ValidityTime := RteMsg.ValidityTime, if included
6.7.1. Evaluating Route Information
An incoming advertised route (AdvRte) is compared to existing
LocalRoutes to determine whether the advertised route is to be used
to update the AODVv2 Local Route Set. The incoming route information
MUST be processed as follows:
1. Search for a LocalRoute in the Local Route Set matching AdvRte's
address, prefix length and metric type
* If no matching LocalRoute exists, AdvRte MUST be used to
update the Local Route Set.
Perkins, et al. Expires July 21, 2016 [Page 26]
Internet-Draft AODVv2 January 2016
* If a matching LocalRoute exists, continue to Step 2.
2. Compare sequence numbers using the technique described in
Section 4.4
* If AdvRte is more recent, AdvRte MUST be used to update the
Local Route Set.
* If AdvRte is stale, AdvRte MUST NOT be used to update the
Local Route Set.
* If the sequence numbers are equal, continue to Step 3.
3. Check that AdvRte is safe against routing loops (see Section 5)
* If LoopFree(AdvRte, LocalRoute) returns FALSE, AdvRte MUST NOT
be used to update the Local Route Set because using the
incoming information might cause a routing loop.
(does processing stop here? It seems like it hsould be that isnât stated.
JWD DONE)
* If LoopFree(AdvRte, LocalRoute) returns TRUE, continue to Step
4.
4. Compare route costs
* If AdvRte is better, it SHOULD be used to update the Local
Route Set because it offers improvement. If it is not used to
update the Local Route Set, the existing non-optimal
LocalRoute will continue to be used, causing data traffic to
use a non-optimal route.
* If AdvRte is equal in cost and LocalRoute is valid, AdvRte MAY
be used to update the Local Route Set but will offer no
improvement.
* If AdvRte is worse and LocalRoute is valid, AdvRte MUST NOT be
used to update the Local Route Set because it does not offer
any improvement.
(does processing stop here? It seems like it hsould be that isnât stated.
JWD DONE)
* If AdvRte is not better (i.e., it is worse or equal) but
LocalRoute is Invalid or Unconfirmed, AdvRte SHOULD be used to
update the Local Route Set because it can safely repair the
existing Invalid LocalRoute or offer an alternative to the
existing Unconfirmed route.
If the advertised route is to be used to update the Local Route Set,
the procedure in Section 6.7.2 MUST be followed.
Perkins, et al. Expires July 21, 2016 [Page 27]
Internet-Draft AODVv2 January 2016
6.7.2. Applying Route Updates
After determining that AdvRte is to be used to update the Local Route
Set (as described in Section 6.7.1), the following procedure applies.
If AdvRte is learned from an RREQ message, the link to the next hop
neighbor may not be confirmed as bidirectional (see Section 4.3).
The route will offer improvement to the Local Route Set if the
neighbor can be confirmed. If there is no existing matching route,
AdvRte allows a corresponding RREP to be sent. If a matching entry
already exists, AdvRte offers potential improvement.
The route update is applied as follows:
1. If no existing entry in the Local Route Set matches AdvRte's
address, prefix length and metric type, continue to Step 3 and
create a new entry in the Local Route Set.
2. If a matching entry (LocalRoute) exists in the Local Route Set:
* If AdvRte has a different next hop to LocalRoute, and both
AdvRte.NextHop's Neighbor.State is Unknown and
LocalRoute.State is Active or Idle, the current route is valid
but the advertised route may offer improvement, if the link to
the next hop can be confirmed as bidirectional. AdvRte SHOULD
be stored as an additional entry in the Local Route Set, with
LocalRoute.State set to Unconfirmed. Continue processing from
Step 3 to create a new LocalRoute.
* If AdvRte.NextHop's Neighbor.State is Unknown and
LocalRoute.State is Invalid, the advertised route can replace
the existing LocalRoute. Continue processing from Step 4 to
update the existing LocalRoute.
* If AdvRte.NextHop's Neighbor.State is Confirmed, continue
processing from Step 4 to update the existing LocalRoute.
* If the existing LocalRoute.State is Unconfirmed, continue
processing from Step 3 to create a new LocalRoute.
3. Create an entry in the Local Route Set and initialize as follows:
* LocalRoute.Address := AdvRte.Address
* LocalRoute.PrefixLength := AdvRte.PrefixLength
* LocalRoute.MetricType := AdvRte.MetricType
Perkins, et al. Expires July 21, 2016 [Page 28]
Internet-Draft AODVv2 January 2016
4. Update the LocalRoute as follows:
* LocalRoute.SeqNum := AdvRte.SeqNum
* LocalRoute.NextHop := AdvRte.NextHop
* LocalRoute.NextHopInterface := interface on which RteMsg was
received
* LocalRoute.Metric := AdvRte.Cost
* LocalRoute.LastUsed := CurrentTime
* LocalRoute.LastSeqNumUpdate := CurrentTime
* LocalRoute.ExpirationTime := CurrentTime + AdvRte.ValidityTime
if a validity time exists, otherwise INFINITY_TIME
5. If a new LocalRoute was created, or if the existing
LocalRoute.State is Invalid or Unconfirmed, update LocalRoute as
follows:
(this is ambugious as there may be more than one unconfirmed LocalRoute unless
Iâm missing something. JWD DONEâ we don't support multiple routes anymore)
* LocalRoute.State := Unconfirmed (if the next hop's
Neighbor.State is Unknown) or Idle (if the next hop's
Neighbor.State is Confirmed)
6. If an existing LocalRoute.State changed from Invalid or
Unconfirmed to become Idle, any matching LocalRoute with worse
metric value SHOULD be expunged.
7. If this update results in LocalRoute.State of Active or Idle,
which matches a route request which is still in progress, the
associated route request retry timers can be cancelled.
(can? not SHOULD or MUST? JWD DONE)
If this update to the Local Route Set results in multiple LocalRoutes
to the same address, the best LocalRoute will be Unconfirmed. In
order to improve the route used for forwarding, the router SHOULD try
to determine if the link to the next hop of that LocalRoute is
bidirectional, by using that LocalRoute to forward future RREPs and
request acknowledgements (see Section 7.2.1).
(we seem to be missing when the Route Information Base should be updated based
on the new Local Route Set. JWD DONE)
6.8. Suppressing Redundant Messages Using the Multicast Route Message
Table
When route messages are flooded in a MANET, an AODVv2 router may
receive multiple similar messages. Regenerating every one of these
gives little additional benefit, and generates unnecessary signaling
traffic and might generate unnecessary interference.
Perkins, et al. Expires July 21, 2016 [Page 29]
Internet-Draft AODVv2 January 2016
Each AODVv2 router stores information about recently received route
messages in the AODVv2 Multicast Route Message Table (Section 4.6).
Multicast Route Message Table Entries consist of:
o RteMsg.MessageType := RREQ or RREP
o RteMsg.OrigAddr := OrigAddr from the message
o RteMsg.OrigPrefixLen := the prefix length associated with OrigAddr
o RteMsg.TargAddr := TargAddr from the message
o RteMsg.TargPrefixLen := the prefix length associated with TargAddr
o RteMsg.OrigSeqNum := the sequence number associated with OrigAddr,
if present in the message
o RteMsg.TargSeqNum := the sequence number associated with TargAddr,
if present in the message
o RteMsg.MetricType := the metric type of the route requested
o RteMsg.Metric := the metric value associated with OrigAddr in an
RREQ or TargAddr in an RREP
o RteMsg.Timestamp := CurrentTime
o RteMsg.RemoveTime := CurrentTime + MAX_SEQNUM_LIFETIME
(This information is repeated later in this same section. Suggest making this
just a list and updating the later section with the assignments as the later is
incomplete. JWD DONE)
Entries in the Multicast Route Message Table SHOULD be maintained for
at least RteMsg_ENTRY_TIME after the last Timestamp update in order
to account for long-lived RREQs traversing the network. An entry
MUST be deleted when the sequence number is no longer valid, i.e.,
after MAX_SEQNUM_LIFETIME. Memory-constrained devices MAY remove the
entry before this time.
Received route messages are tested against previously received route
messages, and if determined to be redundant, regeneration or response
can be avoided.
To determine if a received message is redundant:
1. Search for an entry in the Multicast Route Message Table with the
same MessageType, OrigAddr, TargAddr, and MetricType
* If there is no entry, the message is not redundant.
Perkins, et al. Expires July 21, 2016 [Page 30]
Internet-Draft AODVv2 January 2016
* If there is an entry, continue to Step 2.
2. Compare sequence numbers using the technique described in
Section 4.4
* For RREQ messages, use OrigSeqNum of the entry for comparison.
For RREP messages, use TargSeqNum of the entry for comparison.
* If the entry has an older sequence number than the received
message, the message is not redundant.
* If the entry has a newer sequence number than the received
message, the message is redundant.
* If the entry has the same sequence number, continue to Step 3.
3. Compare the metric values
* If the entry has a Metric value that is worse than or equal to
the metric in the received message, the message is redundant.
* If the entry has a Metric value that is better than the metric
in the received message, the message is not redundant.
If the message is redundant, update the Timestamp and RemoveTime on
the entry, since matching route messages are still traversing the
network and this entry should be maintained. This message SHOULD NOT
be regenerated or responded to.
If the message is not redundant, create an entry or update the
existing entry.
To update a Multicast Route Message Table entry, set:
o RteMsg.OrigSeqNum := the sequence number associated with OrigAddr,
if present in the received message
o RteMsg.TargSeqNum := the sequence number associated with TargAddr,
if present in the received message
o RteMsg.Metric := the metric value associated with OrigAddr in a
received RREQ or TargAddr in a received RREP
o RteMsg.Timestamp := CurrentTime
o RteMsg.RemoveTime := CurrentTime + MAX_SEQNUM_LIFETIME
(this list is incomplete and should be replaced with the one presented earlier.
JWD DONE)
Perkins, et al. Expires July 21, 2016 [Page 31]
Internet-Draft AODVv2 January 2016
When a message is determined to be not redundant before Step 3, it MUST
be regenerated or responded to. Whena message is determined to be not
redundant in Step 3, it MAY be suppressed to avoid extra control
traffic. However, since the processing of the message will result in
an update to the Local Route Set, the message SHOULD be regenerated
or responded to, to ensure other routers have up-to-date information
and the best metrics. If the message is not regenerated, the best route may
not be
found. Regeneration and response is to be performed using
the processes outlined in Section 7.
6.9. Local Route Set Maintenance
Route maintenance involves monitoring LocalRoutes in the Local Route
Set, updating LocalRoute.State to handle route timeouts and reporting
routes that become Invalid.
6.9.1. Local Route State Changes
During normal operation, AODVv2 does not require any explicit
timeouts to manage the lifetime of a route. At any time, any
LocalRoute MAY be examined and updated according to the rules below.
If timers are not used to prompt updates of LocalRoute.State, the
LocalRoute.State MUST be checked before IP packet forwarding and
before any operation based on LocalRoute.State.
Route timeout behaviour is as follows:
o An Unconfirmed route MUST be expunged at MAX_SEQNUM_LIFETIME after
LocalRoute.LastSeqNumUpdate.
o An Idle route MUST become Active when used to forward an IP
packet. If the route is not used to forward an IP packet within
MAX_IDLETIME, LocalRoute.State MUST become Invalid.
o An Active route which is a timed route (i.e., with
LocalRoute.ExpirationTime not equal to INFINITY_TIME) remains
Active until LocalRoute.ExpirationTime, after which it MUST become
Invalid. If it it not a timed route, it MUST become Idle if the
route is not used to forward an IP packet within ACTIVE_INTERVAL.
o An Invalid route SHOULD remain in the Local Route Set, since
LocalRoute.SeqNum is used to classify future information about
LocalRoute.Address as stale or fresh.
o In all cases, if the time since LocalRoute.LastSeqNumUpdate
exceeds MAX_SEQNUM_LIFETIME, LocalRoute.SeqNum must be set to
zero. This is required to ensure that any AODVv2 routers
following the initialization procedure can safely begin routing
Perkins, et al. Expires July 21, 2016 [Page 32]
Internet-Draft AODVv2 January 2016
functions using a new sequence number. A LocalRoute with
LocalRoute.State set to Active or Idle can remain in the Local
Route Set after removing the sequence number, but if
LocalRoute.State is Invalid, or later becomes Invalid, the
LocalRoute MUST be expunged from the Local Route Set.
(itâs not clear to me what the use case of removing the sequence number while
the route is still active will achieve. suggest removal or some small
explination JWD DONE:
https://github.com/Lotterleben/AODVv2-Draft/commit/caaa1530ed6d14d2f6e6bcab29f02f4f9874ab6a)
LocalRoutes can become Invalid before a timeout occurs:
o If a link breaks, all LocalRoutes using that link for
LocalRoute.NextHop MUST immediately have LocalRoute.State set to
Invalid.
(how would one know if a link breaks? Assuming some external process or
notification.
JWD DONE)
o If a Route Error (RERR) message containing the route is received,
either from LocalRoute.NextHop, or with PktSource set to a Router
Client address, LocalRoute.State MUST immediately be set to
Invalid.
(itâs not clear to me how the RERRâs are identified consider rewording to
make it more clear. JWD DONE)
LocalRoutes are also updated when Neighbor.State is updated:
o While the value of Neighbor.State is set to Unknown, any routes in
the Local Route Set using that neighbor as a next hop MUST have
LocalRoute.State set to Unconfirmed.
(Shouldnât they also be removed from the Route Information Base? JWD DONE)
o When the value of Neighbor.State is set to Confirmed, the
Unconfirmed routes in the Local Route Set using that neighbor as a
next hop MUST have LocalRoute.State set to Idle. Any other
matching LocalRoutes with metric values worse than
LocalRoute.Metric MUST be expunged from the Local Route Set.
o When the value of Neighbor.State is set to Blacklisted, any valid
routes in the Local Route Set using that neighbor for their next
hop MUST have LocalRoute.State set to Invalid.
o When a Neighbor Table entry is removed, all routes in the Local
Route Set using that neighbor as next hop MUST have
LocalRoute.State set to Invalid.
In some cases, by setting LocalRoute.State to Confirmed when
Neighbor.State is set to Confirmed, an issue can occur if data
packets are forwarded to LocalRoute.Address before the links that
form the rest of the route are confirmed as bidirectional.
Intermediate routers will not have a valid route to forward these
data packets, and will generate a Route Error message. This in turn
results in routes to that destination being removed from other
routers. However, subsequent data packets will cause a new route
discovery attempt to be initiated by the router with the source
address of the data packet configured as a Router Client.
(This will only occur when a target starts sending packets to an originator
address when only part of the reverse path has been confirmed, in the middle of
a route request from originator to source? Am I correct? If so then the route
request would have been sent normally and I see no issue. JWD DONE)
Perkins, et al. Expires July 21, 2016 [Page 33]
Internet-Draft AODVv2 January 2016
Memory constrained devices MAY choose to expunge routes from the
AODVv2 Local Route Set before LocalRoute.ExpirationTime, but MUST
adhere to the following rules:
o An Active route MUST NOT be expunged, as it is in use. If
deleted, IP traffic forwarded to this router will prompt
generation of a Route Error message, and it will be necessary for
a Route Request to be generated by the originator's router to re-
establish the route.
o An Idle route SHOULD NOT be expunged, as it is still valid for
forwarding IP traffic. If deleted, this could result in dropped
IP packets and a Route Request could be generated to re-establish
the route.
o Any Invalid route MAY be expunged. Least recently used Invalid
routes SHOULD be expunged first, since the sequence number
information is less likely to be useful.
o An Unconfirmed route MUST NOT be expunged if it was installed
within the last RREQ_WAIT_TIME, because it may correspond to a
route discovery in progress. A Route Reply message might be
received which needs to use the LocalRoute.NextHop information.
Otherwise, it MAY be expunged.
6.9.2. Reporting Invalid Routes
When LocalRoute.State changes from Active to Invalid as a result of a
broken link or a received Route Error (RERR) message, other AODVv2
routers MUST be informed by sending an RERR message containing
details of the invalidated route.
An RERR message MUST also be sent when an AODVv2 router receives an
IP packet to forward on behalf of another router but does not have a
valid route in its Routing Information Base for the destination of
the packet.
An RERR message MUST also be sent when an AODVv2 router receives an
RREP message to regenerate, but the LocalRoute to the OrigAddr in the
RREP has been lost or is marked as Invalid.
The packet or message triggering the RERR MUST be discarded.
Generation of an RERR message is described in Section 7.4.1.
Perkins, et al. Expires July 21, 2016 [Page 34]
Internet-Draft AODVv2 January 2016
7. AODVv2 Protocol Messages
AODVv2 defines four message types: Route Request (RREQ), Route Reply
(RREP), Route Reply Acknowledgement (RREP_Ack), and Route Error
(RERR).
Each AODVv2 message is defined as a set of data. Rules for the
generation, reception and regeneration of each message type are
described in the following sections. Section 8 discusses how the
data is mapped to [RFC5444] Message TLVs, Address Blocks, and Address
TLVs.
7.1. Route Request (RREQ) Message
Route Request messages are used in route discovery operations to
request a route to a specified target address. RREQ messages have
the following contents:
+-----------------------------------------------------------------+
| msg_hop_limit, (optional) msg_hop_count |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| OrigSeqNum, (optional) TargSeqNum |
+-----------------------------------------------------------------+
| MetricType |
+-----------------------------------------------------------------+
| OrigMetric |
+-----------------------------------------------------------------+
| ValidityTime (optional) |
+-----------------------------------------------------------------+
Figure 1: RREQ message contents
msg_hop_limit
The remaining number of hops allowed for dissemination of the RREQ
message.
msg_hop_count
The number of hops already traversed during dissemination of the
RREQ message.
AddressList
Contains OrigAddr and TargAddr, the source and destination
addresses of the IP packet for which a route is requested.
OrigAddr and TargAddr MUST be routable unicast addresses.
Perkins, et al. Expires July 21, 2016 [Page 35]
Internet-Draft AODVv2 January 2016
PrefixLengthList
Contains OrigPrefixLen, i.e., the length, in bits, of the prefix
associated with the Router Client entry which includes OrigAddr.
If omitted, the prefix length is equal to OrigAddr's address
length in bits.
OrigSeqNum
The sequence number associated with OrigAddr.
TargSeqNum
A sequence number associated with an existing Invalid route to
TargAddr. This MAY be included if available, and is useful for
the optional Intermediate RREP feature (see Section 10.3).
MetricType
The metric type associated with OrigMetric.
OrigMetric
The metric value associated with the LocalRoute to OrigAddr (and
to any other addresses included in the given prefix length), as
seen from the sender of the message.
ValidityTime
The length of time that the message sender is willing to offer a
route toward OrigAddr (and any other addresses included in the
given prefix length). Omitted if no time limit is imposed.
7.1.1. RREQ Generation
A RREQ is generated when an IP packet needs to be forwarded for a
Router Client, and no valid route currently exists for the packet's
destination in the Routing Information Base.
Before creating a RREQ, the router SHOULD check if a RREQ has
recently been sent for the requested destination. If so, and the
wait time for a reply has not yet been reached, the router SHOULD
continue to await a response without generating a new RREQ. If the
timeout has been reached, a new RREQ MAY be generated. If buffering
is configured, incoming IP packets awaiting this route SHOULD be
buffered until the route discovery is completed.
(perhaps Iâm missing a table or something but I donât remember any RREQ
table or list being described which i can check if a RREQ has been recently
sent with associated timers. If there is such a table then it should be
mentioned here. If there isnât aon there should be. JWD! DONE: refer to
multicast table)
If the limit for the rate of AODVv2 control message generation has
been reached, no message SHOULD be generated. If approaching the
limit, the message should be sent if the priorities in Section 6.5
allow it.
(There is no defined behavior here. Approaching the limit? Section 6.5 outlines
which messages are more important but now how to decide to allow them to be
transmitted or not. JWD TODO)
To generate the RREQ, the router (referred to as RREQ_Gen) follows
this procedure:
Perkins, et al. Expires July 21, 2016 [Page 36]
Internet-Draft AODVv2 January 2016
1. Set msg_hop_limit := MAX_HOPCOUNT
2. Set msg_hop_count := 0, if including it
3. Set AddressList := {OrigAddr, TargAddr}
4. For the PrefixLengthList:
* If OrigAddr is part of an address range configured as a Router
Client, set PrefixLengthList := {RouterClient.PrefixLength,
null}. This allows receiving routers to learn a route to all
the addresses included by the prefix length, not only to
OrigAddr.
* Otherwise, omit PrefixLengthList.
5. For OrigSeqNum:
* Increment the router SeqNum as specified in Section 4.4.
* Set OrigSeqNum := SeqNum.
6. For TargSeqNum:
* If an Invalid route exists in the Local Route Set matching
TargAddr using longest prefix matching and has a valid
sequence number, set TargSeqNum := LocalRoute.SeqNum.
* If no Invalid route exists in the Local Route Set matching
TargAddr, or the route doesn't have a sequence number, omit
TargSeqNum.
7. Include MetricType and set the type accordingly
8. Set OrigMetric := RouterClient.Cost for the Router Client entry
which includes OrigAddr
9. Include ValidityTime if advertising that the route to OrigAddr
(and any other addresses included in the given prefix length) via
this router is offered for a limited time, and set ValidityTime
accordingly
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8) which is multicast, by default, to LL-MANET-
Routers on all interfaces configured for AODVv2 operation. (TODO: slightly
reword to "instruct 5444 to multicast it")
Perkins, et al. Expires July 21, 2016 [Page 37]
Internet-Draft AODVv2 January 2016
7.1.2. RREQ Reception
Upon receiving a Route Request, an AODVv2 router performs the
following steps:
1. Update the Neighbor Table according to Section 6.3
* If the sender has Neighbor.State set to Blacklisted after the
update, ignore this RREQ for further processing.
2. Verify that the message hop count, if included, hasn't exceeded
MAX_HOPCOUNT
* If so, ignore this RREQ for further processing.
3. Verify that the message contains the required data:
msg_hop_limit, OrigAddr, TargAddr, OrigSeqNum, and OrigMetric,
and that OrigAddr and TargAddr are valid addresses (routable and
unicast)
* If not, ignore this RREQ for further processing.
4. Check that the MetricType is supported and configured for use
* If not, ignore this RREQ for further processing.
5. Verify that the cost of the advertised route will not exceed the
maximum allowed metric value for the metric type (Metric <=
MAX_METRIC[MetricType] - Cost(L))
* If it will, ignore this RREQ for further processing.
6. Process the route to OrigAddr (and any other addresses included
in the given prefix length) as specified in Section 6.7
7. Check if the information in the message is redundant by comparing
to entries in the Multicast Route Message table, following the
procedure in Section 6.8
* If redundant, ignore this RREQ for further processing.
* If not redundant, continue processing.
8. Check if the TargAddr belongs to one of the Router Clients
* If so, generate an RREP as specified in Section 7.2.1.
* If not, continue to RREQ regeneration.
(this was good JWD)
Perkins, et al. Expires July 21, 2016 [Page 38]
Internet-Draft AODVv2 January 2016
7.1.3. RREQ Regeneration
By regenerating an RREQ, a router advertises that it will forward IP
packets to the OrigAddr contained in the RREQ (and to other addresses
included in the given prefix length) according to the information
enclosed. The router MAY choose not to regenerate the RREQ, for
example if the router is heavily loaded or low on energy and
therefore unwilling to advertise routing capability for more traffic.
This could, however, decrease connectivity in the network or result
in non-optimal paths.
The RREQ SHOULD NOT be regenerated if the limit for the rate of
AODVv2 control message generation has been reached. If approaching
the limit, the message should be sent if the priorities in
Section 6.5 allow it.
(this again doesnât describe a defined behaivor. approaching athe limit? and
6.5 doesnât disalow anything JWD TODO)
The procedure for RREQ regeneration is as follows:
1. Set msg_hop_limit := received msg_hop_limit - 1
2. If msg_hop_limit is now zero, do not continue the regeneration
process
3. Set msg_hop_count := received msg_hop_count + 1, if included,
otherwise omit msg_hop_count
4. Set AddressList, PrefixLengthList, sequence numbers and
MetricType to the values in the received RREQ
5. Set OrigMetric := LocalRoute[OrigAddr].Metric
6. If the received RREQ contains a ValidityTime, or if the
regenerating router wishes to limit the time that it offers a
route to OrigAddr (and any other addresses included in the given
prefix length), the regenerated RREQ MUST include ValidityTime
* The ValidityTime is either the time limit the previous AODVv2
router specified, or the time limit this router wishes to
impose, whichever is lower.
There might be a problem with very short validity times on very low metric
routes in that they will be selected regardless of the time. Not a problem but
something that could cause issues. Perhaps some minimum time should be
mandated. JWD TODO)
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8) which is multicast, by default, to LL-MANET-
Routers on all interfaces configured for AODVv2 operation. However,
the regenerated RREQ can be unicast to the next hop address of the
LocalRoute toward TargAddr, if known.
Perkins, et al. Expires July 21, 2016 [Page 39]
Internet-Draft AODVv2 January 2016
7.2. Route Reply (RREP) Message
When a Route Request message is received, requesting a route to a
target address (TargAddr) which is configured as part of a Router
Client entry, a Route Reply message is sent in response. The RREP
offers a route to TargAddr (and any other addresses included in the
prefix length).
RREP messages have the following contents:
+-----------------------------------------------------------------+
| msg_hop_limit, (optional) msg_hop_count |
+-----------------------------------------------------------------+
| AckReq (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| TargSeqNum |
+-----------------------------------------------------------------+
| MetricType |
+-----------------------------------------------------------------+
| TargMetric |
+-----------------------------------------------------------------+
| ValidityTime (optional) |
+-----------------------------------------------------------------+
Figure 2: RREP message contents
msg_hop_limit
The remaining number of hops allowed for dissemination of the RREP
message.
msg_hop_count
The number of hops already traversed during dissemination of the
RREP message.
AckReq
The address of the intended next hop of the RREP. This is
included when the link to the next hop toward OrigAddr is not
known to be bidirectional. It indicates that an acknowledgement
of the RREP is requested by the sender from the intended next hop
(see Section 6.2).
AddressList
Perkins, et al. Expires July 21, 2016 [Page 40]
Internet-Draft AODVv2 January 2016
Contains OrigAddr and TargAddr, the source and destination
addresses of the IP packet for which a route is requested.
OrigAddr and TargAddr MUST be routable unicast addresses.
PrefixLengthList
Contains TargPrefixLen, i.e., the length, in bits, of the prefix
associated with the Router Client entry which includes TargAddr.
If omitted, the prefix length is equal to TargAddr's address
length, in bits.
TargSeqNum
The sequence number associated with TargAddr.
MetricType
The metric type associated with TargMetric.
TargMetric
The metric value associated with the LocalRoute to TargAddr (and
any other addresses included in the given prefix length), as seen
from the sender of the message.
ValidityTime
The length of time that the message sender is willing to offer a
route toward TargAddr (and any other addresses included in the
given prefix length). Omitted if no time limit is imposed.
7.2.1. RREP Generation
A Route Reply message is generated when a Route Request arrives,
requesting a route to an address which is configured as a Router
Client of the AODVv2 router.
(please specify what in the message matches the configured Router Client. JWD
DONE)
Before creating an RREP, the router SHOULD check if the corresponding
RREQ is redundant, i.e., a Route Reply has already been generated in
response to the RREQ, or if the limit for the rate of AODVv2 control
message generation has been reached. If so, the RREP SHOULD NOT be
created. If approaching the limit, the message should be sent if the
priorities in Section 6.5 allow it.
(same as before JWD TODO)
The RREP will follow the path of the route to OrigAddr. If the best
route to OrigAddr in the Local Route Set is Unconfirmed, the link to
the next hop neighbor is not yet confirmed as bidirectional (as
described in Section 6.2). In this case the RREP MUST include AckReq
set to the intended next hop address. The AckReq indicates that an
acknowledgement to the RREP is requested from the intended next hop
router in the form of a Route Reply Acknowledgement (RREP_Ack). If
the best route to OrigAddr in the Local Route Set is valid, the link
Perkins, et al. Expires July 21, 2016 [Page 41]
Internet-Draft AODVv2 January 2016
to the next hop neighbor is already confirmed as bidirectional, and
the AckReq can be omitted.
Implementations MAY allow a number of retries of the RREP if a
requested acknowledgement is not received within
RREP_Ack_SENT_TIMEOUT, doubling the timeout with each retry, up to a
maximum of RREP_RETRIES, using the same exponential backoff described
in Section 6.6 for RREQ retries. The acknowledgement MUST be
considered to have failed after the wait time for an RREP_Ack
response to the final RREP.
To generate the RREP, the router (also referred to as RREP_Gen)
follows this procedure:
1. Set msg_hop_limit := msg_hop_count from the received RREQ
message, if it was included, or MAX_HOPCOUNT if it was not
included
2. Set msg_hop_count := 0, if including it
3. If the link to the next hop router toward OrigAddr is not known
to be bidirectional, include the AckReq with the address of the
intended next hop router
(please include section describing AckReq formating JWD DONE)
4. Set Address List := {OrigAddr, TargAddr}
5. For the PrefixLengthList:
* If TargAddr is part of an address range configured as a Router
Client, set PrefixLengthList := {null,
RouterClient.PrefixLength}. This allows receiving routers to
learn a route to all the addresses included by the prefix
length, not only to TargAddr.
* Otherwise, omit PrefixLengthList.
6. For the TargSeqNum:
* Increment the router SeqNum as specified in Section 4.4.
* Set TargSeqNum := SeqNum.
7. Include MetricType and set the type to match the MetricType in
the received RREQ message
8. Set TargMetric := RouterClient.Cost for the Router Client entry
which includes TargAddr
Perkins, et al. Expires July 21, 2016 [Page 42]
Internet-Draft AODVv2 January 2016
9. Include ValidityTime if advertising that the route to TargAddr
(and any other addresses included in the given prefix length) via
this router is offered for a limited time, and set ValidityTime
accordingly
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8). If the Neighbor Table contains an entry for
the neighbor stored as LocalRoute[OrigAddr].NextHop, with
Neighbor.State set to Confirmed, the RREP is sent by unicast to
LocalRoute[OrigAddr].NextHop. Otherwise, the RREP is sent multicast
to LL-MANET-Routers.
7.2.2. RREP Reception
Upon receiving a Route Reply, an AODVv2 router performs the following
steps:
1. Update the Neighbor Table according to Section 6.3
2. Verify that the message hop count, if included, hasn't exceeded
MAX_HOPCOUNT
* If so, ignore this RREQ for further processing.
3. Verify that the message contains the required data:
msg_hop_limit, OrigAddr, TargAddr, TargSeqNum, and TargMetric,
and that OrigAddr and TargAddr are valid addresses (routable and
unicast)
* If not, ignore this RREP for further processing.
4. Check that the MetricType is supported and configured for use
* If not, ignore this RREP for further processing.
5. Verify that the cost of the advertised route does not exceed the
maximum allowed metric value for the metric type (Metric <=
MAX_METRIC[MetricType] - Cost(L))
* If it does, ignore this RREP for further processing.
6. If the AckReq is present, check the intended recipient of the
received RREP
(please specify how one determines how to check the intended recipient. What
data element in the AckReq matches what ? JWD DONE)
* If the receiving router is the intended recipient, send an
acknowledgement as specified in Section 7.3 and continue
processing.
Perkins, et al. Expires July 21, 2016 [Page 43]
Internet-Draft AODVv2 January 2016
* If the receiving router is not the intended recipient, ignore
this RREP for further processing.
7. Process the route to TargAddr (and any other addresses included
in the given prefix length) as specified in Section 6.7
8. Check if the message is redundant by comparing to entries in the
Multicast Route Message table (Section 6.8)
* If redundant, ignore this RREP for further processing.
* If not redundant, save the information in the Multicast Route
Message table to identify future redundant RREP messages and
continue processing.
9. Check if the OrigAddr belongs to one of the Router Clients
* If so, no further processing is necessary.
* If not, continue to Step 10.
10. Check if a valid (Active or Idle) or Unconfirmed LocalRoute
exists to OrigAddr
* If so, continue to RREP regeneration.
* If not, a Route Error message SHOULD be transmitted to
TargAddr according to Section 7.4.1 and the RREP SHOULD be
discarded and not regenerated.
(again mostly good here JWD)
7.2.3. RREP Regeneration
A received Route Reply message is regenerated toward OrigAddr.
Unless the router is prepared to advertise the route contained within
the received RREP, it halts processing. By regenerating a RREP, a
router advertises that it will forward IP packets to TargAddr (and
any other addresses included in the given prefix length) according to
the information enclosed. The router MAY choose not to regenerate
the RREP, in the same way it MAY choose not to regenerate an RREQ
(see Section 7.1.3), though this could decrease connectivity in the
network or result in non-optimal paths.
(This seems like a bad idea to do on the reverse path. It would be a good way
to attack a network Forward RREQ and drop all RREP. JWD DONE?)
The RREP SHOULD NOT be regenerated if the limit for the rate of
AODVv2 control message generation has been reached. If approaching
the limit, the message should be sent if the priorities in
Section 6.5 allow it.
(The undefined approaching the limit thing again JWD DONE)
Perkins, et al. Expires July 21, 2016 [Page 44]
Internet-Draft AODVv2 January 2016
(All of the above is redundant. JWD DONE)
The procedure for RREP regeneration is as follows:
1. Set msg_hop_limit := received msg_hop_limit - 1
2. If msg_hop_limit is now zero, do not continue the regeneration
process
3. Set msg_hop_count := received msg_hop_count + 1, if it was
included, otherwise omit msg_hop_count
4. If the link to the next hop router toward OrigAddr is not known
to be bidirectional, include the AckReq with the address of the
intended next hop router
(THere needs to be some sort of table which is updated with timer associated
with this AckReq JWD TODO)
5. Set AddressList, PrefixLengthList, TargSeqNum and MetricType to
the values in the received RREP
6. Set TargMetric := LocalRoute[TargAddr].Metric
7. If the received RREP contains a ValidityTime, or if the
regenerating router wishes to limit the time that it will offer a
route to TargAddr (and any other addresses included in the given
prefix length), the regenerated RREP MUST include ValidityTime
* The ValidityTime is either the time limit the previous AODVv2
router specified, or the time limit this router wishes to
impose, whichever is lower.
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8). If the Neighbor Table contains an entry for
the neighbor stored as LocalRoute[OrigAddr].NextHop, with
Neighbor.State set to Confirmed, the RREP is sent by unicast to
LocalRoute[OrigAddr].NextHop. Otherwise, the RREP is sent multicast
to LL-MANET-Routers.
Perkins, et al. Expires July 21, 2016 [Page 45]
Internet-Draft AODVv2 January 2016
7.3. Route Reply Acknowledgement (RREP_Ack) Message
The Route Reply Acknowledgement is a response to a Route Reply
message. When the RREP_Ack message is received by the sender of the
RREP, it confirms that the link between the two routers is
bidirectional (see Section 6.2). The RREP_Ack has no further data.
7.3.1. RREP_Ack Generation
An RREP_Ack MUST be generated if a received Route Reply includes an
AckReq with an address matching one of the receiving router's IP
addresses. The RREP_Ack SHOULD NOT be generated if the limit for the
rate of AODVv2 control message generation has been reached.
There is no further data in an RREP_Ack. The [RFC5444]
representation is discussed in Section 8. The RREP_Ack is unicast,
by default, to the source IP address of the RREP message that
requested it.
7.3.2. RREP_Ack Reception
Upon receiving an RREP_Ack, an AODVv2 router performs the following
steps:
1. Update the Neighbor Table according to Section 6.3
* If the sender has Neighbor.State set to Blacklisted after the
update, ignore this RREQ for further processing.
(Shouldnât this check come before updating? The only way the Neighbor.State
is set to Blacklisted is that its already Blacklisted and there is no need to
update the Neighbor Table. JWD TODO)
2. Check if the RREP_Ack was expected from the IP source address of
the RREP_Ack, in response to an RREP sent previously by this
router
* If it was expected, the router cancels any associated
timeouts.
* If it was not expected, no actions are required.
(What are we checking! What table or timer is there to check? JWD!
DONE: refer to multicast table to check for legitimacy
)
7.4. Route Error (RERR) Message
A Route Error message is generated by an AODVv2 router to notify
other AODVv2 routers of routes that are no longer available. An RERR
message has the following contents:
Perkins, et al. Expires July 21, 2016 [Page 46]
Internet-Draft AODVv2 January 2016
+-----------------------------------------------------------------+
| msg_hop_limit |
+-----------------------------------------------------------------+
| PktSource (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| SeqNumList (optional) |
+-----------------------------------------------------------------+
| MetricTypeList |
+-----------------------------------------------------------------+
Figure 3: RERR message contents
msg_hop_limit
The remaining number of hops allowed for dissemination of the RERR
message.
PktSource
The source address of the IP packet triggering the RERR. If the
RERR is triggered by a broken link, PktSource is not required.
AddressList
The addresses of the routes not available through RERR_Gen.
PrefixLengthList
The prefix lengths, in bits, associated with the routes not
available through RERR_Gen. These values indicate whether routes
represent a single device or an address range.
SeqNumList
The sequence numbers of the routes not available through RERR_Gen
(where known).
MetricTypeList
The metric types associated with the routes not available through
RERR_Gen.
7.4.1. RERR Generation
A Route Error message is generated when an AODVv2 router (also
referred to as RERR_Gen) needs to report that a destination is not
reachable. There are three events that cause this response:
o When an IP packet that has been forwarded from another router, but
cannot be forwarded further because there is no valid route in the
Perkins, et al. Expires July 21, 2016 [Page 47]
Internet-Draft AODVv2 January 2016
Routing Information Base for its destination. The source of the
packet needs to be informed that the route to the destination of
the packet does not exist. The RERR generated MUST include
PktSource set to the source address of the IP packet, and MUST
contain only one unreachable address in the AddressList, i.e., the
destination address of the IP packet. RERR_Gen MUST discard the
IP packet that triggered generation of the RERR. The prefix length,
sequence number and metric type SHOULD be included if known from
an Invalid LocalRoute to the unreachable address.
o When an RREP message cannot be regenerated because the LocalRoute
to OrigAddr has been lost or is Invalid. RREP_Gen needs to be
informed that the route to OrigAddr does not exist. The RERR
generated MUST include PktSource set to the TargAddr of the RREP,
and MUST contain only one unreachable address in the AddressList,
the OrigAddr from the RREP. RERR_Gen MUST discard the RREP
message that triggered generation of the RERR. The prefix length,
sequence number and metric type SHOULD be included if known from
an Invalid LocalRoute to the unreachable address.
o When a link breaks, multiple LocalRoutes may become Invalid, and
the RERR generated MAY contain multiple unreachable addresses.
The RERR MUST include MetricTypeList. PktSource is omitted. All
previously Active LocalRoutes that used the broken link MUST be
reported. The AddressList, PrefixLengthList, SeqNumList, and
MetricTypeList will contain entries for each LocalRoute which has
become Invalid. An RERR message is only sent if an Active
LocalRoute becomes Invalid, though an AODVv2 router can also
include Idle LocalRoutes that become Invalid if the configuration
parameter ENABLE_IDLE_IN_RERR is set (see Section 11.3).
In order to avoid flooding the network with RERR messages when a
stream of IP packets to an unreachable address arrives, an AODVv2
router SHOULD determine whether an RERR has recently been sent with
the same unreachable address and PktSource, and SHOULD avoid creating
duplicate RERR messages.
(How is this done? There is no table with recently sent RERR messages to
check. There needs to be though. JWD!
DONE: add RERR table
-> store: route and the next hop router
(but not mandatory for interop))
The RERR SHOULD NOT be generated if the limit for the rate of AODVv2
control message generation has been reached. If approaching the
limit, the message should be sent if the priorities in Section 6.5
allow it.
(The undefined approaching the limit thing again. JWD DONE)
Incidentally, if an AODVv2 router receives an ICMP error packet to or
from the address of one of its Router Clients, it forwards the ICMP
Perkins, et al. Expires July 21, 2016 [Page 48]
Internet-Draft AODVv2 January 2016
packet in the same way as any other IP packet, and will not generate
any RERR message based on the contents of the ICMP packet.
To generate the RERR, the router follows this procedure:
1. Set msg_hop_limit := MAX_HOPCOUNT
2. If necessary, include PktSource and set the value as given above
3. For each LocalRoute that needs to be reported:
* Insert LocalRoute.Address into the AddressList.
* Insert LocalRoute.PrefixLength into PrefixLengthList, if known
and not equal to the address length.
* Insert LocalRoute.SeqNum into SeqNumList, if known.
* Insert LocalRoute.MetricType into MetricTypeList.
The AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8).
If the RERR is sent in response to an undeliverable IP packet or RREP
message, i.e., if PktSource is included, the RERR SHOULD be sent
unicast to the next hop on the route to PktSource, or alternatively,
if there is no route to PktSource, the RERR MUST be multicast to LL-
MANET-Routers. If the RERR is sent in response to a broken link,
i.e., PktSource is not included, the RERR is, by default, multicast
to LL-MANET-Routers.
Section 10.2 describes processing steps when the optional precursor
lists feature is enabled.
7.4.2. RERR Reception
Upon receiving a Route Error, an AODVv2 router performs the following
steps:
1. Verify that the message contains the required data: msg_hop_limit
and at least one unreachable address
* If not, ignore this RERR for further processing.
2. For each address in the AddressList, check that:
* The address is valid (routable and unicast)
Perkins, et al. Expires July 21, 2016 [Page 49]
Internet-Draft AODVv2 January 2016
* The MetricType is supported and configured for use
* There is a valid LocalRoute with the same MetricType matching
the address using longest prefix matching
* Either the LocalRoute's next hop is the sender of the RERR and
the next hop interface is the interface on which the RERR was
received, or PktSource is present in the RERR and is a Router
Client address
* The unreachable address' sequence number is either unknown, or
is greater than the LocalRoute's sequence number
If any of the above are false, a matching LocalRoute MUST NOT be
made Invalid and the unreachable address MUST NOT be advertised
in a regenerated RERR.
If all of the above are true, the LocalRoute is no longer valid.
If the LocalRoute was previously Active, it MUST be reported in a
regenerated RERR. If the LocalRoute was previously Idle, it MAY
be reported in a regenerated RERR, if ENABLE_IDLE_IN_RERR is
configured. The Local Route Set MUST be updated according to
these rules:
* If the LocalRoute's prefix length is the same as the
unreachable address' prefix length, set LocalRoute.State to
Invalid.
* If the LocalRoute's prefix length is longer than the
unreachable address' prefix length, the LocalRoute MUST be
expunged from the Local Route Set, since it is a sub-route of
the route which is reported to be Invalid.
* If the prefix length is different, create a new LocalRoute
with the unreachable address, and its prefix length and
sequence number, and set LocalRoute.State to Invalid.
(itâs not clear to me what the point of this invalid route is. It doesnât
get used and doesnât remove any existing routes. JWD DONE)
* Update the sequence number on the existing LocalRoute, if the
reported sequence number is determined to be newer using the
comparison technique described in Section 4.4.
3. Check if there are unreachable addresses which MUST be reported
in a regenerated RERR
(How do we check? Itâs not at all clear how this is done. JWD!
DONE: -> see line 2865! : remove the word "check":
"If there are UnreachableAddresses identified in step 2,...")
* If so, regenerate the RERR as detailed in Section 7.4.3.
* If not, take no further action.
Perkins, et al. Expires July 21, 2016 [Page 50]
Internet-Draft AODVv2 January 2016
7.4.3. RERR Regeneration
The Route Error message SHOULD NOT be regenerated if the limit for
the rate of AODVv2 control message generation has been reached. If
approaching the limit, the message should be sent if the priorities
in Section 6.5 allow it.
(Approaching the limit thing again JWD DONE)
The procedure for RERR regeneration is as follows:
1. Set msg_hop_limit := received msg_hop_limit - 1
2. If msg_hop_limit is now zero, do not continue the regeneration
process
3. If PktSource was included in the original RERR, and PktSource is
not a Router Client, copy it into the regenerated RERR
4. For each LocalRoute that needs to be reported:
(itâs not clear how we know which localroutes need to be reported JWD!
DONE: + reference "as identified in section 7.4.2." )
* Insert LocalRoute.Address into the AddressList.
* Insert LocalRoute.PrefixLength into PrefixLengthList, if known
and not equal to the address length.
* Insert LocalRoute.SeqNum into SeqNumList, if known.
* Insert LocalRoute.MetricType into MetricTypeList.
The AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8). If the RERR contains PktSource, the
regenerated RERR SHOULD be sent unicast to the next hop on the
LocalRoute to PktSource, or alternatively if there is no route to
PktSource, or PktSource is a Router Client, it MUST be multicast to
LL-MANET-Routers. If the RERR is sent in response to a broken link,
the RERR is, by default, multicast to LL-MANET-Routers.
8. RFC 5444 Representation
AODVv2 specifies that all control messages between routers MUST use
the Generalized Mobile Ad Hoc Network Packet/Message Format
[RFC5444], and therefore AODVv2's route messages comprise data which
is mapped to message elements in [RFC5444].
[RFC5444] provides a multiplexed transport for multiple protocols.
An [RFC5444] multiplexer MAY choose to optimize the content of
certain message elements to reduce control message overhead.
A brief summary of the [RFC5444] format:
Perkins, et al. Expires July 21, 2016 [Page 51]
Internet-Draft AODVv2 January 2016
1. A packet contains zero or more messages
2. A message contains a Message Header, one Message TLV Block, zero
or more Address Blocks, and one Address Block TLV Block per
Address Block
3. The Message TLV Block MAY contain zero or more Message TLVs
4. An Address Block TLV Block MAY include zero or more Address Block
TLVs
5. Each TLV value in an Address Block TLV Block can be associated
with all of the addresses, or with a contiguous set of addresses,
or with a single address in the Address Block
AODVv2 does not require access to the [RFC5444] packet header.
In the message header, AODVv2 uses <msg-hop-limit>, <msg-hop-count>,
<msg-type> and <msg-addr-length>. The <msg-addr-length> field
indicates the length of any addresses in the message, using <msg-
addr-length> := (address length in octets - 1), i.e. 3 for IPv4 and
15 for IPv6.
The addresses in an Address Block MAY appear in any order, and values
in a TLV in the Address Block TLV Block must be associated with the
correct address in the Address Block by the [RFC5444] implementation.
To indicate which value is associated with each address, the AODVv2
message representation uses lists where the order of the addresses in
the AODVv2 AddressList matches the order of values in other data
lists, e.g., the order of SeqNums in the SeqNumList in an RERR.
[RFC5444] maps this information to Address Block TLVs associated with
the relevant addresses in the Address Block.
Each address included in the Address Block is identified as OrigAddr,
TargAddr, PktSource, or Unreachable Address by including an
ADDRESS_TYPE TLV in the Address Block TLV Block.
The following sections show how AODVv2 data is represented in
[RFC5444] messages. AODVv2 makes use of the VALIDITY_TIME TLV from
[RFC5497], and defines (in Section 12) a number of new TLVs.
Where the extension type of a TLV is set to zero, this is the default
[RFC5444] value and the extension type will not be included in the
message.
Perkins, et al. Expires July 21, 2016 [Page 52]
Internet-Draft AODVv2 January 2016
8.1. Route Request Message Representation
8.1.1. Message Header
+---------------+-----------------+---------------------------------+
| Data | Header Field | Value |
+---------------+-----------------+---------------------------------+
| None | <msg-type> | RREQ |
| msg_hop_limit | <msg-hop-limit> | MAX_HOPCOUNT, reduced by number |
| | | of hops traversed so far by the |
| | | message. |
| msg_hop_count | <msg-hop-count> | Number of hops traversed so far |
| | | by the message. |
+---------------+-----------------+---------------------------------+
8.1.2. Message TLV Block
An RREQ contains no Message TLVs.
(this insât mandatory, right? Just AODVv2 doesnât define any message TLVs
for use with RREQ JWD TODO?)
8.1.3. Address Block
An RREQ contains two addresses, OrigAddr and TargAddr, and each
address has an associated prefix length. If the prefix length has
not been included in the AODVv2 message, it is equal to the address
length in bits.
+-------------------------+------------------------------+
| Data | Address Block |
+-------------------------+------------------------------+
| OrigAddr/OrigPrefixLen | <address> + <prefix-length> |
| TargAddr/TargPrefixLen | <address> + <prefix-length> |
+-------------------------+------------------------------+
8.1.4. Address Block TLV Block
Address Block TLVs are always associated with one or more addresses
in the Address Block. The following sections show the TLVs that
apply to each address.
8.1.4.1. Address Block TLVs for OrigAddr
Perkins, et al. Expires July 21, 2016 [Page 53]
Internet-Draft AODVv2 January 2016
+--------------+---------------+------------+-----------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+--------------+---------------+------------+-----------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_ORIGADDR |
| OrigSeqNum | SEQ_NUM | 0 | Sequence number of |
| | | | RREQ_Gen, the router |
| | | | which initiated route |
| | | | discovery. |
| OrigMetric | PATH_METRIC | MetricType | Metric value for the |
| /MetricType | | | route to OrigAddr, |
| | | | using MetricType. |
| ValidityTime | VALIDITY_TIME | 0 | ValidityTime for |
| | | | route to OrigAddr. |
+--------------+---------------+------------+-----------------------+
8.1.4.2. Address Block TLVs for TargAddr
+------------+--------------+-------------+-------------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+------------+--------------+-------------+-------------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_TARGADDR |
| TargSeqNum | SEQ_NUM | 0 | The last known |
| | | | TargSeqNum for |
| | | | TargAddr. |
+------------+--------------+-------------+-------------------------+
8.2. Route Reply Message Representation
8.2.1. Message Header
+---------------+-----------------+---------------------------------+
| Data | Header Field | Value |
+---------------+-----------------+---------------------------------+
| None | <msg-type> | RREP |
| msg_hop_limit | <msg-hop-limit> | <msg-hop-count> from |
| | | corresponding RREQ, reduced by |
| | | number of hops traversed so far |
| | | by the message. |
| msg_hop_count | <msg-hop-count> | Number of hops traversed so far |
| | | by the message. |
+---------------+-----------------+---------------------------------+
Perkins, et al. Expires July 21, 2016 [Page 54]
Internet-Draft AODVv2 January 2016
8.2.2. Message TLV Block
An RREP contains no Message TLVs.
(This isnât mandatory is it? just none are defined by AODVv2. JWD TODO?)
8.2.3. Address Block
An RREP contains a minimum of two addresses, OrigAddr and TargAddr,
and each address has an associated prefix length. If the prefix
length has not been included in the AODVv2 message, it is equal to
the address length in bits.
It MAY also contain the address of the intended next hop, in order to
request acknowledgement to confirm bidirectionality of the link, as
described in Section 6.2. The prefix length associated with this
address is equal to the address length in bits.
+-------------------------+------------------------------+
| Data | Address Block |
+-------------------------+------------------------------+
| OrigAddr/OrigPrefixLen | <address> + <prefix-length> |
| TargAddr/TargPrefixLen | <address> + <prefix-length> |
| AckReq | <address> + <prefix-length> |
+-------------------------+------------------------------+
8.2.4. Address Block TLV Block
Address Block TLVs are always associated with one or more addresses
in the Address Block. The following sections show the TLVs that
apply to each address.
8.2.4.1. Address Block TLVs for OrigAddr
+-------+---------------+-----------------+--------------------+
| Data | TLV Type | Extension Type | Value |
+-------+---------------+-----------------+--------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_ORIGADDR |
+-------+---------------+-----------------+--------------------+
8.2.4.2. Address Block TLVs for TargAddr
Perkins, et al. Expires July 21, 2016 [Page 55]
Internet-Draft AODVv2 January 2016
+--------------+---------------+------------+-----------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+--------------+---------------+------------+-----------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_TARGADDR |
| TargSeqNum | SEQ_NUM | 0 | Sequence number of |
| | | | RREP_Gen, the router |
| | | | which created the |
| | | | RREP. |
| TargMetric | PATH_METRIC | MetricType | Metric value for the |
| /MetricType | | | route to TargAddr, |
| | | | using MetricType. |
| ValidityTime | VALIDITY_TIME | 0 | ValidityTime for |
| | | | route to TargAddr. |
+--------------+---------------+------------+-----------------------+
8.2.4.3. Address Block TLVs for AckReq Intended Recipient Address
+-------+---------------+-----------------+------------------+
| Data | TLV Type | Extension Type | Value |
+-------+---------------+-----------------+------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_INTEND |
+-------+---------------+-----------------+------------------+
8.3. Route Reply Acknowledgement Message Representation
8.3.1. Message Header
+-------+---------------+-----------+
| Data | Header Field | Value |
+-------+---------------+-----------+
| None | <msg-type> | RREP_Ack |
+-------+---------------+-----------+
8.3.2. Message TLV Block
An RREP_Ack contains no Message TLVs.
(Mandatory or just not defined? JWD TODO?)
8.3.3. Address Block
An RREP_Ack contains no Address Block.
(Mandatory or just not defined? Guessing mandatory on this one. JWD TODO)
8.3.4. Address Block TLV Block
An RREP_Ack contains no Address Block TLV Block.
(Mandatory or just not defined? Guessing mandatory on this one. JWD TODO)
Perkins, et al. Expires July 21, 2016 [Page 56]
Internet-Draft AODVv2 January 2016
8.4. Route Error Message Representation
Route Error Messages MAY be split into multiple [RFC5444] messages
when the desired contents would exceed the MTU. However, all of the
resulting messages MUST have the same message header as described
below. If PktSource is included in the AODVv2 message, it MUST be
included in all of the resulting [RFC5444] messages.
8.4.1. Message Header
+---------------+-----------------+---------------------------------+
| Data | Header Field | Value |
+---------------+-----------------+---------------------------------+
| None | <msg-type> | RERR |
| msg_hop_limit | <msg-hop-limit> | MAX_HOPCOUNT, reduced by number |
| | | of hops traversed so far by the |
| | | message. |
+---------------+-----------------+---------------------------------+
8.4.2. Message TLV Block
An RERR contains no Message TLVs.
(Mandatory or just not defined? JWD TODO)
8.4.3. Address Block
The Address Block in an RERR MAY contain PktSource, the source
address of the IP packet triggering RERR generation, as detailed in
Section 7.4. The prefix length associated with PktSource is equal to
the address length in bits.
Address Block always contains one address per route that is no longer
valid, and each address has an associated prefix length. If a prefix
length has not been included for this address, it is equal to the
address length in bits.
+------------------------------+------------------------------------+
| Data | Address Block |
+------------------------------+------------------------------------+
| PktSource | <address> + <prefix-length> for |
| | PktSource |
| AddressList/PrefixLengthList | <address> + <prefix-length> for |
| | each unreachable address in |
| | AddressList |
+------------------------------+------------------------------------+
Perkins, et al. Expires July 21, 2016 [Page 57]
Internet-Draft AODVv2 January 2016
8.4.4. Address Block TLV Block
Address Block TLVs are always associated with one or more addresses
in the Address Block. The following sections show the TLVs that
apply to each type of address in the RERR.
8.4.4.1. Address Block TLVs for PktSource
+------------+---------------+----------------+---------------------+
| Data | TLV Type | Extension Type | Value |
+------------+---------------+----------------+---------------------+
| PktSource | ADDRESS_TYPE | 0 | ADDRTYPE_PKTSOURCE |
+------------+---------------+----------------+---------------------+
8.4.4.2. Address Block TLVs for Unreachable Addresses
+----------------+--------------+------------+----------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+----------------+--------------+------------+----------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_UNREACHABLE |
| SeqNumList | SEQ_NUM | 0 | Sequence number |
| | | | associated with |
| | | | invalid route to the |
| | | | unreachable address. |
| MetricTypeList | PATH_METRIC | MetricType | None. Extension Type |
| | | | set to MetricType of |
| | | | the route to the |
| | | | unreachable address. |
+----------------+--------------+------------+----------------------+
9. Simple External Network Attachment
Figure 4 shows a stub (i.e., non-transit) network of AODVv2 routers
which is attached to an external network via a single External
Network Access Router (ENAR). The interface to the external network
MUST NOT be configured in the AODVv2_INTERFACES list.
As in any externally-attached network, AODVv2 routers and Router
Clients that wish to be reachable from the external network MUST have
IP addresses within the ENAR's routable and topologically correct
prefix (e.g.., 191.0.2.0/24 in Figure 4). This AODVv2 network and
networks attached to routers within it will be advertised to the
external network using procedures which are out of scope for this
specification.
Perkins, et al. Expires July 21, 2016 [Page 58]
Internet-Draft AODVv2 January 2016
/-------------------------\
/ +----------------+ \
/ | AODVv2 Router | \
| | 191.0.2.2/32 | |
| +----------------+ | Routable
| +-----+--------+ Prefix
| | ENAR | /191.0.2.0/24
| | AODVv2 Router| /
| | 191.0.2.1 |/ /---------------\
| | serving net +------+ External \
| | 191.0.2.0/24 | \ Network /
| +-----+--------+ \---------------/
| +----------------+ |
| | AODVv2 Router | |
| | 191.0.2.3/32 | |
\ +----------------+ /
\ /
\-------------------------/
Figure 4: Simple External Network Attachment Example
When an AODVv2 router within the AODVv2 MANET wants to discover a
route toward an address on the external network, it uses the normal
AODVv2 route discovery for that IP Destination Address. The ENAR
MUST respond to RREQ on behalf of all external network destinations,
e.g.., destinations not on the configured 191.0.2.0/24 network. RREQs
for addresses inside the AODVv2 network, e.g. destinations on the
configured 191.0.2.0/24 network, are handled using the standard
processes described in Section 7.
When an IP packet from an address on the external network destined
for an address in the AODVv2 MANET reaches the ENAR, if the ENAR does
not have a route toward that destination in its Routing
Information Base, it will perform normal AODVv2 route discovery for
that destination.
Configuring the ENAR as a default router is outside the scope of this
specification.
10. Optional Features
A number of optional features for AODVv2, associated initially with
AODV, may be useful in networks with greater mobility or larger
populations, or networks requiring reduced latency for application
launches. These features are not required by minimal
implementations.
Perkins, et al. Expires July 21, 2016 [Page 59]
Internet-Draft AODVv2 January 2016
10.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.
10.2. Precursor Lists
This section specifies an interoperable enhancement to AODVv2
enabling more economical Route Error notifications.
There can be several sources of traffic for a certain destination.
Each source of traffic and each upstream router between the
forwarding AODVv2 router and the traffic source is known as a
"precursor" for the destination. For each destination, an AODVv2
router MAY choose to keep track of precursors that have provided
traffic for that destination. Route Error messages about that
destination can be sent unicast to these precursors instead of
multicast to all AODVv2 routers.
Since a RERR will be regenerated if it comes from a next hop on a
valid LocalRoute, the RERR SHOULD ideally be sent backwards along the
route that the source of the traffic uses, to ensure it is
regenerated at each hop and reaches the traffic source. If the
reverse path is unknown, the RERR SHOULD be sent toward the source
along some other route. Therefore, the options for saving precursor
information are as follows:
o Save the next hop on an existing route to the IP packet's source
address as the precursor. In this case, it is not guaranteed that
an RERR that is sent will follow the reverse of the source's
route. In rare situations, this may prevent the route from being
invalidated at the source of the data traffic.
o Save the IP packet's source address as the precursor. In this
case, the RERR can be sent along any existing route to the source
of the data traffic, and SHOULD include PktSource to ensure that
the route will be invalidated at the source of the traffic, in
case the RERR does not follow the reverse of the source's route.
o By inspecting the MAC address of each forwarded IP packet,
determine which router forwarded the packet, and save the router
address as a precursor. This ensures that when an RERR is sent to
the precursor router, the route will be invalidated at that
router, and the RERR will be regenerated toward the source of the
IP packet.
Perkins, et al. Expires July 21, 2016 [Page 60]
Internet-Draft AODVv2 January 2016
During normal operation, each AODVv2 router maintaining precursor
lists for a LocalRoute must update the precursor list whenever it
uses this route to forward traffic to the destination. Precursors
are classified as Active if traffic has recently been forwarded by
the precursor. The precursor is marked with a timestamp to indicate
the time it last forwarded traffic on this route.
When an AODVv2 router detects that one or more LocalRoutes are
broken, it MAY notify each Active precursor using a unicast Route
Error message instead of creating multicast traffic. Unicast is
applicable when there are few Active precursors compared to the
number of neighboring AODVv2 routers. However, the default multicast
behavior is still preferable when there are many precursors, since
fewer message transmissions are required.
When an AODVv2 router supporting precursor lists receives an RERR
message, it MAY identify the list of its own affected Active
precursors for the routes in the RERR, and choose to send a unicast
RERR to those, rather than send a multicast RERR.
When a LocalRoute is expunged, any precursor list associated with it
MUST also be expunged.
(I feel like this is underspecified and would be better served in a separate
document like Intermediate RREP. Is there anything wrong with leaving the
behavior required a MAY and describing that behavior in another draft? JWD TODO)
10.3. Intermediate RREP
Without iRREP, only the AODVv2 router responsible for the target
address can respond to an RREQ. Using iRREP, route discoveries can
be faster and create less control traffic. This specification has
been published as a separate Internet Draft [I-D.perkins-irrep].
10.4. Message Aggregation Delay
The aggregation of multiple messages into a packet is specified in
[RFC5444].
Implementations MAY choose to briefly delay transmission of messages
for the purpose of aggregation (into a single packet) or to improve
performance by using jitter [RFC5148].
11. Configuration
AODVv2 uses various parameters which can be grouped into the
following categories:
o Timers
o Protocol constants
Perkins, et al. Expires July 21, 2016 [Page 61]
Internet-Draft AODVv2 January 2016
o Administrative parameters and controls
This section show the parameters along with their definitions and
default values (if any).
Note that several fields have limited size (bits or bytes). These
sizes and their encoding may place specific limitations on the values
that can be set.
11.1. Timers
AODVv2 requires certain timing information to be associated with
Local Route Set entries and message replies. The default values are
as follows:
+------------------------+----------------+
| Name | Default Value |
+------------------------+----------------+
| ACTIVE_INTERVAL | 5 second |
| MAX_IDLETIME | 200 seconds |
| MAX_BLACKLIST_TIME | 200 seconds |
| MAX_SEQNUM_LIFETIME | 300 seconds |
| RteMsg_ENTRY_TIME | 12 seconds |
| RREQ_WAIT_TIME | 2 seconds |
| RREP_Ack_SENT_TIMEOUT | 1 second |
| RREQ_HOLDDOWN_TIME | 10 seconds |
+------------------------+----------------+
Table 2: Timing Parameter Values
The above timing parameter values have worked well for small and
medium well-connected networks with moderate topology changes. The
timing parameters SHOULD be administratively configurable. Ideally,
for networks with frequent topology changes the AODVv2 parameters
SHOULD be adjusted using experimentally determined values or dynamic
adaptation. For example, in networks with infrequent topology
changes MAX_IDLETIME MAY be set to a much larger value.
If MAX_SEQNUM_LIFETIME was configured differently across the network,
and any of the routers lost their sequence number or rebooted, this
could result in their next route messages being classified as stale
at any AODVv2 router using a greater value for MAX_SEQNUM_LIFETIME.
This would delay route discovery from and to the re-initializing
router.
(is MAX_SEQNUM_LIFETIME the only parameter which MUST be configured the same
across the network? JWD TODO: yes?)
Perkins, et al. Expires July 21, 2016 [Page 62]
Internet-Draft AODVv2 January 2016
11.2. Protocol Constants
AODVv2 protocol constants typically do not require changes. The
following table lists these constants, along with their values and a
reference to the section describing their use.
+------------------------+---------+--------------------------------+
| Name | Default | Description |
+------------------------+---------+--------------------------------+
| DISCOVERY_ATTEMPTS_MAX | 3 | Section 6.6 |
| RREP_RETRIES | 2 | Section 7.2.1 |
| MAX_METRIC[MetricType] | [TBD] | Section 5 |
| MAX_METRIC[HopCount] | 255 | Section 5 and Section 7 |
| MAX_HOPCOUNT | 20 | Limit to number of hops an |
| | | AODVv2 message can traverse |
| INFINITY_TIME | [TBD] | Maximum expressible clock time |
| | | (Section 6.7.2) |
+------------------------+---------+--------------------------------+
Table 3: AODVv2 Constants
Note that <msg-hop-count> is an 8-bit field in the [RFC5444] message
header and therefore MAX_HOPCOUNT cannot be larger than 255.
MAX_METRIC[MetricType] MUST always be the maximum expressible metric
value of type MetricType. Field lengths associated with metric
values are found in Section 11.6.
These protocol constants MUST have the same values for all AODVv2
routers in the ad hoc network. If the values were configured
differently, the following consequences may be observed:
o DISCOVERY_ATTEMPTS_MAX: Routers with higher values are likely to
be more successful at finding routes, at the cost of additional
control traffic.
o RREP_RETRIES: Routers with lower values are more likely to
blacklist neighbors when there is a
o MAX_METRIC[MetricType]: No interoperability problems due to
variations on different routers, but routers with lower values may
exhibit overly restrictive behavior during route comparisons.
temporary fluctuation in link quality.
o MAX_HOPCOUNT: Routers with a value too small would not be able to
discover routes to distant addresses.
Perkins, et al. Expires July 21, 2016 [Page 63]
Internet-Draft AODVv2 January 2016
o INFINITY_TIME: No interoperability problems due to variations on
different routers, but if a lower value is used, route state
management may exhibit overly restrictive behavior.
11.3. Local Settings
The following table lists AODVv2 parameters which SHOULD be
administratively configured for each router:
+------------------------+------------------------+--------------+
| Name | Default Value | Description |
+------------------------+------------------------+--------------+
| AODVv2_INTERFACES | | Section 3 |
| BUFFER_SIZE_PACKETS | 2 | Section 6.6 |
| BUFFER_SIZE_BYTES | MAX_PACKET_SIZE [TBD] | Section 6.6 |
| CONTROL_TRAFFIC_LIMIT | [TBD - 50 pkts/sec?] | Section 7 |
+------------------------+------------------------+--------------+
Table 4: Configuration for Local Settings
11.4. Network-Wide Settings
The following administrative controls MAY be used to change the
operation of the network. The same settings SHOULD be used across
the network. Inconsistent settings at different routers in the
network will not result in protocol errors, but poor performance may
result.
+----------------------+-----------+----------------+
| Name | Default | Description |
+----------------------+-----------+----------------+
| ENABLE_IDLE_IN_RERR | Disabled | Section 7.4.1 |
+----------------------+-----------+----------------+
Table 5: Configuration for Network-Wide Settings
11.5. Optional Feature Settings
These options are not required for correct routing behavior, although
they may reduce AODVv2 protocol overhead in certain situations. The
default behavior is to leave these options disabled.
Perkins, et al. Expires July 21, 2016 [Page 64]
Internet-Draft AODVv2 January 2016
+---------------------------+----------+----------------------------+
| Name | Default | Description |
+---------------------------+----------+----------------------------+
| PRECURSOR_LISTS | Disabled | Local setting (Section |
| | | 10.2) |
| MSG_AGGREGATION | Disabled | Local setting (Section |
| | | 10.4) |
| ENABLE_IRREP | Disabled | Network-wide setting |
| | | (Section 10.3) |
| EXPANDING_RINGS_MULTICAST | Disabled | Network-wide setting |
| | | (Section 10.1) |
+---------------------------+----------+----------------------------+
Table 6: Configuration for Optional Features
11.6. MetricType Allocation
The metric types used by AODVv2 are identified according to the
assignments in [RFC6551]. All implementations MUST use these values.
+---------------------+----------+--------------------+
| Name of MetricType | Type | Metric Value Size |
+---------------------+----------+--------------------+
| Unassigned | 0 | Undefined |
| Hop Count | 3 [TBD] | 1 octet |
| Unallocated | 9 - 254 | TBD |
| Reserved | 255 | Undefined |
+---------------------+----------+--------------------+
Table 7: AODVv2 Metric Types
11.7. AddressType Allocation
These values are used in the [RFC5444] Address Type TLV discussed in
Section 8. All implementations MUST use these values.
+-----------------------+--------+
| Address Type | Value |
+-----------------------+--------+
| ADDRTYPE_ORIGADDR | 0 |
| ADDRTYPE_TARGADDR | 1 |
| ADDRTYPE_UNREACHABLE | 2 |
| ADDRTYPE_PKTSOURCE | 3 |
| ADDRTYPE_INTEND | 4 |
| ADDRTYPE_UNSPECIFIED | 255 |
+-----------------------+--------+
Table 8: AODVv2 Address Types
Perkins, et al. Expires July 21, 2016 [Page 65]
Internet-Draft AODVv2 January 2016
12. IANA Considerations
This section specifies several [RFC5444] message types and address
tlv-types required for AODVv2.
12.1. RFC 5444 Message Types
This specification defines four Message Types, to be allocated from
the 0-223 range of the "Message Types" namespace defined in
[RFC5444], as specified in Table 9.
+-----------------------------------------+-----------+
| Name of Message | Type |
+-----------------------------------------+-----------+
| Route Request (RREQ) | 10 (TBD) |
| Route Reply (RREP) | 11 (TBD) |
| Route Error (RERR) | 12 (TBD) |
| Route Reply Acknowledgement (RREP_Ack) | 13 (TBD) |
+-----------------------------------------+-----------+
Table 9: AODVv2 Message Types
12.2. RFC 5444 Address Block TLV Types
This specification defines three Address Block TLV Types, to be
allocated from the "Address Block TLV Types" namespace defined in
[RFC5444], as specified in Table 10.
+------------------------+----------+---------------+---------------+
| Name of TLV | Type | Length | Reference |
| | | (octets) | |
+------------------------+----------+---------------+---------------+
| PATH_METRIC | 10 (TBD) | depends on | Section 7 |
| | | MetricType | |
| SEQ_NUM | 11 (TBD) | 2 | Section 7 |
| ADDRESS_TYPE | 15 (TBD) | 1 | Section 8 |
+------------------------+----------+---------------+---------------+
Table 10: AODVv2 Address Block TLV Types
13. Security Considerations
This section describes various security considerations and potential
avenues to secure AODVv2 routing. The objective of the AODVv2
protocol is for each router to communicate reachability information
about addresses for which it is responsible, and for routes it has
learned from other AODVv2 routers. Positive routing information
(i.e. a route exists) is distributed via RREQ and RREP messages.
Perkins, et al. Expires July 21, 2016 [Page 66]
Internet-Draft AODVv2 January 2016
AODVv2 routers store the information contained in these messages in
order to properly forward IP packets, and they generally provide this
information to other AODVv2 routers. Negative routing information
(i.e. a route does not exist) is distributed via RERR messages.
AODVv2 routers process these messages and remove routes, and forward
this information to other AODVv2 routers.
Networks using AODVv2 to maintain connectivity and establish routes
on demand may be vulnerable to certain well-known types of threats.
Flooding attacks using RREQ amount to a denial of service for route
discovery. Valid route table entries can be replaced by maliciously
constructed RREQ and RREP messages. Links could be erroneously
treated as bidirectional if malicious unsolicited RREP or RREP_Ack
messages were to be accepted. Replay attacks using RERR messages
could, in some circumstances, be used to disrupt active routes.
Passive inspection of AODVv2 control messages could enable
unauthorized devices to gain information about the network topology,
since exchanging such information is the main purpose of AODVv2.
The on-demand nature of AODVv2 route discovery reduces the
vulnerability to route disruption. Since control traffic for
updating route tables is diminished, there is less opportunity for
failure. Processing requirements for AODVv2 are typically quite
small, and would typically be dominated by calculations to verify
integrity. This has the effect of reducing (but by no means
eliminating) AODVv2's vulnerability to denial of service attacks.
Encryption MAY be used for AODVv2 messages. If the routers share a
packet-level security association, the message data can be encrypted
prior to message transmission. The establishment of such security
associations is outside the scope of this specification. Encryption
will not only protect against unauthorized devices obtaining
information about network topology but will ensure that only trusted
routers participate in routing operations.
Message integrity checking is enabled by the Integrity Check Value
mechanisms defined in [RFC7182]. The data contained in AODVv2
routing protocol messages SHOULD be verified using ICV values, to
avoid the use of message data if the message has been tampered with
or replayed. Otherwise, it would be possible to disrupt
communications by injecting nonexistent or malicious routes into the
route tables of routers within the ad hoc network. This can result
in loss of data or message processing by unauthorized devices.
The remainder of this section provides specific recommendations for
the use of the integrity checking and timestamp functions defined in
[RFC7182] to ensure the integrity of each AODVv2 message. The
calculation used for the Integrity Check Value will depend on the
Perkins, et al. Expires July 21, 2016 [Page 67]
Internet-Draft AODVv2 January 2016
message type. Sequence numbers can be used as timestamps to protect
against replay, since they are known to be strictly increasing.
RREQ messages advertise a route to OrigAddr, and impose very little
processing requirement for receivers. The main threat presented by
sending an RREQ message with false information is that traffic to
OrigAddr could be disrupted. Since RREQ is multicast and likely to
be received by all routers in the ad hoc network, this threat could
have serious impact on applications communicating by way of OrigAddr.
The actual threat to disrupt routes to OrigAddr is reduced by the
AODVv2 mechanism of marking RREQ-derived routes as "Unconfirmed"
until the link to the next hop is confirmed. If AODVv2 routers
always verify the integrity of the RREQ message data, then the threat
of disruption is minimized. The ICV mechanisms offered in [RFC7182]
are sufficient for this purpose. Since OrigAddr is included in the
RREQ, the ICV can be calculated and verified using message contents.
The ICV SHOULD be verified at every step along the dispersal path of
the RREQ to mitigate the threat. Since RREQ_Gen's sequence number is
incremented for each new RREQ, replay protection is already afforded
and no extra timestamp mechanism is required.
RREP messages advertise a route to TargAddr, and impose very little
processing requirement for receivers. The main threat presented by
sending an RREP message with false information is that traffic to
TargAddr could be disrupted. Since RREP is unicast, this threat is
restricted to receivers along the path from OrigAddr to TargAddr. If
AODVv2 routers always verify the integrity of the RREP message data,
then this threat is minimized. This facility is offered by the ICV
mechanisms in [RFC7182]. Since TargAddr is included as a Data
Element of the RREP, the ICV can be calculated and verified using
message contents. The ICV SHOULD be verified at every step along the
unicast path of the RREP. Since RREP_Gen's sequence number is
incremented for each new RREP, replay protection is afforded and no
extra timestamp mechanism is required.
RREP_Ack messages are intended to verify bidirectional neighbor
connectivity, and impose very little processing requirement for
receivers. The main threat presented by sending an RREP_Ack message
with false information is that the route advertised to a target
address in an RREP might be erroneously accepted even though the
route would contain a unidirectional link and thus not be suitable
for most traffic. Since RREP_Ack is unicast, this threat is strictly
local to the RREP transmitter expecting the acknowledgement. A
malicious router could also attempt to send an unsolicited RREP_Ack
to convince another router that a bidirectional link exists and
subsequently use further messages to divert traffic along a route
which is not valid. If AODVv2 routers always verify the integrity of
the RREP_Ack message data, then this threat is minimized. This
Perkins, et al. Expires July 21, 2016 [Page 68]
Internet-Draft AODVv2 January 2016
facility is offered by the ICV mechanisms in [RFC7182]. The RREP_Gen
SHOULD use the source IP address of the RREP_Ack to identify the
sender, and so the ICV SHOULD be calculated using the message
contents and the IP source address. The message must also include
the Timestamp defined in [RFC7182] to protect against replay attacks,
using TargSeqNum from the RREP as the value in the TIMESTAMP TLV.
RERR messages remove routes, and impose very little processing
requirement for receivers. The main threat presented by sending an
RERR message with false information is that traffic to the advertised
destinations could be disrupted. Since RERR is multicast and can be
received by many routers in the ad hoc network, this threat could
have serious impact on applications communicating by way of the
sender of the RERR message. However, since the sender of the RERR
message with erroneous information MAY be presumed to be either
malicious or broken, it is better that such routes not be used
anyway. Another threat is that a malicious RERR message MAY be sent
with a PktSource included, to disrupt PktSource's ability to send to
the addresses contained in the RERR. If AODVv2 routers always verify
the integrity of the RERR message data, then this threat is reduced.
This facility is offered by the ICV mechanisms in [RFC7182]. The
receiver of the RERR SHOULD use the source IP address of the RERR to
identify the sender. The message must also include the Timestamp
defined in [RFC7182] to protect against replay attacks, using SeqNum
from RERR_Gen as the value in the TIMESTAMP TLV.
(I did NOT review the security section JWD)
14. Acknowledgments
AODVv2 is a descendant of the design of previous MANET on-demand
protocols, especially AODV [RFC3561] and DSR [RFC4728]. Changes to
previous MANET on-demand protocols stem from research and
implementation experiences. Thanks to Elizabeth Belding and Ian
Chakeres for their long time authorship of AODV. Additional thanks
to Derek Atkins, Emmanuel Baccelli, Abdussalam Baryun, Ramon Caceres,
Thomas Clausen, Justin Dean, Christopher Dearlove, Ulrich Herberg,
Henner Jakob, Luke Klein-Berndt, Lars Kristensen, Tronje Krop,
Koojana Kuladinithi, Kedar Namjoshi, Keyur Patel, Alexandru Petrescu,
Henning Rogge, Fransisco Ros, Pedro Ruiz, Christoph Sommer, Romain
Thouvenin, Richard Trefler, Jiazi Yi, Seung Yi, and Cong Yuan, for
their reviews of AODVv2 and DYMO, as well as numerous specification
suggestions.
15. References
Perkins, et al. Expires July 21, 2016 [Page 69]
Internet-Draft AODVv2 January 2016
15.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/
RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC3561] Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On-
Demand Distance Vector (AODV) Routing", RFC 3561, DOI
10.17487/RFC3561, July 2003,
<http://www.rfc-editor.org/info/rfc3561>.
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, DOI 10.17487/RFC4291, February
2006, <http://www.rfc-editor.org/info/rfc4291>.
[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C.
Pignataro, "The Generalized TTL Security Mechanism
(GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007,
<http://www.rfc-editor.org/info/rfc5082>.
[RFC5444] Clausen, T., Dearlove, C., Dean, J., and C. Adjih,
"Generalized Mobile Ad Hoc Network (MANET) Packet/Message
Format", RFC 5444, DOI 10.17487/RFC5444, February 2009,
<http://www.rfc-editor.org/info/rfc5444>.
[RFC5497] Clausen, T. and C. Dearlove, "Representing Multi-Value
Time in Mobile Ad Hoc Networks (MANETs)", RFC 5497, DOI
10.17487/RFC5497, March 2009,
<http://www.rfc-editor.org/info/rfc5497>.
[RFC5498] Chakeres, I., "IANA Allocations for Mobile Ad Hoc Network
(MANET) Protocols", RFC 5498, DOI 10.17487/RFC5498, March
2009, <http://www.rfc-editor.org/info/rfc5498>.
[RFC6551] Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N.,
and D. Barthel, "Routing Metrics Used for Path Calculation
in Low-Power and Lossy Networks", RFC 6551, DOI 10.17487/
RFC6551, March 2012,
<http://www.rfc-editor.org/info/rfc6551>.
[RFC7182] Herberg, U., Clausen, T., and C. Dearlove, "Integrity
Check Value and Timestamp TLV Definitions for Mobile Ad
Hoc Networks (MANETs)", RFC 7182, DOI 10.17487/RFC7182,
April 2014, <http://www.rfc-editor.org/info/rfc7182>.
Perkins, et al. Expires July 21, 2016 [Page 70]
Internet-Draft AODVv2 January 2016
15.2. Informative References
[I-D.perkins-irrep]
Perkins, C., "Intermediate RREP for dynamic MANET On-
demand (AODVv2) Routing", draft-perkins-irrep-03 (work in
progress), May 2015.
[Koodli01]
Koodli, R. and C. Perkins, "Fast handovers and context
transfers in mobile networks", Proceedings of the ACM
SIGCOMM Computer Communication Review 2001, Volume 31
Issue 5, 37-47, October 2001.
[Perkins94]
Perkins, C. and P. Bhagwat, "Highly Dynamic Destination-
Sequenced Distance-Vector Routing (DSDV) for Mobile
Computers", Proceedings of the ACM SIGCOMM '94 Conference
on Communications Architectures, Protocols and
Applications, London, UK, pp. 234-244, August 1994.
[Perkins99]
Perkins, C. and E. Royer, "Ad hoc On-Demand Distance
Vector (AODV) Routing", Proceedings of the 2nd IEEE
Workshop on Mobile Computing Systems and Applications, New
Orleans, LA, pp. 90-100, February 1999.
[RFC2501] Corson, S. and J. Macker, "Mobile Ad hoc Networking
(MANET): Routing Protocol Performance Issues and
Evaluation Considerations", RFC 2501, DOI 10.17487/
RFC2501, January 1999,
<http://www.rfc-editor.org/info/rfc2501>.
[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,
<http://www.rfc-editor.org/info/rfc4193>.
[RFC4728] Johnson, D., Hu, Y., and D. Maltz, "The Dynamic Source
Routing Protocol (DSR) for Mobile Ad Hoc Networks for
IPv4", RFC 4728, DOI 10.17487/RFC4728, February 2007,
<http://www.rfc-editor.org/info/rfc4728>.
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
DOI 10.17487/RFC4861, September 2007,
<http://www.rfc-editor.org/info/rfc4861>.
Perkins, et al. Expires July 21, 2016 [Page 71]
Internet-Draft AODVv2 January 2016
[RFC5148] Clausen, T., Dearlove, C., and B. Adamson, "Jitter
Considerations in Mobile Ad Hoc Networks (MANETs)", RFC
5148, DOI 10.17487/RFC5148, February 2008,
<http://www.rfc-editor.org/info/rfc5148>.
[RFC6130] Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc
Network (MANET) Neighborhood Discovery Protocol (NHDP)",
RFC 6130, DOI 10.17487/RFC6130, April 2011,
<http://www.rfc-editor.org/info/rfc6130>.
[Sholander02]
Sholander, P., Coccoli, P., Oakes, T., and S. Swank, "A
Portable Software Implementation of a Hybrid MANET Routing
Protocol", 2002.
Appendix A. AODVv2 Draft Updates
This section lists the changes between AODVv2 revisions ...-12.txt
and ...-13.txt.
o Updated uses of host and node.
o Removed use of Data Element.
o Added explanation of self-healing issue of hop-by-hop
acknowledgements.
o Moved appendix on relocation of routing prefix to a different
router into the main draft.
o Added notes on forwarding plane to the Overview and added to text
in the Applicability Statement.
o Separated AODVv2's Local Route Set from the Routing Information
Base.
o Updated Adjacency Monitoring to Next Hop Monitoring.
o Added extra description in Multicast Route Message Table section.
o Added extra notes on possible implementations of Local Route Set.
o Added short description of reactive routing protocols to
Applicability Statement.
o Added extra note in Applicability Statement about multiple IP
addresses per router interface.
Perkins, et al. Expires July 21, 2016 [Page 72]
Internet-Draft AODVv2 January 2016
o Used clear references to Neighbor.State and LocalRoute.State.
o Added reference for text aboute buffering TCP packets.
o Updated text about Route.State to be clear which routes may be
copied to a Routing Information Base.
o Added explanation of when a route discovery might not be attempted
and action taken instead.
o Added text to explain that routes to prefixes are learned when
prefix lengths are included in AODVv2 messages.
o Changed rule for adding new route if current routes to the same
address have Route.State set to Unconfirmed.
o Changed text about reporting broken routes to use MUST instead of
SHOULD.
o Updated message processing algorithms to refer to Neighbor
Table updates.
o Added extra explanation for use of AckReq in RREP message.
o Added extra explanation for RREP_Ack handling.
o Removed references to MTU in RERR section and updated processing
rules.
o Removed reference to RFC 6621.
o Removed appendix about multi-homing.
o Removed appendix containing pseudo-code.
o Minor editorial improvements.
Authors' Addresses
Charles E. Perkins
Futurewei Inc.
2330 Central Expressway
Santa Clara, CA 95050
USA
Phone: +1-408-330-4586
Email: charliep@xxxxxxxxxxxx
Perkins, et al. Expires July 21, 2016 [Page 73]
Internet-Draft AODVv2 January 2016
Stan Ratliff
Idirect
13861 Sunrise Valley Drive, Suite 300
Herndon, VA 20171
USA
Email: ratliffstan@xxxxxxxxx
John Dowdell
Airbus Defence and Space
Celtic Springs
Newport, Wales NP10 8FZ
United Kingdom
Email: john.dowdell@xxxxxxxxxx
Lotte Steenbrink
HAW Hamburg, Dept. Informatik
Berliner Tor 7
D-20099 Hamburg
Germany
Email: lotte.steenbrink@xxxxxxxxxxxxxx
Victoria Mercieca
Airbus Defence and Space
Celtic Springs
Newport, Wales NP10 8FZ
United Kingdom
Email: victoria.mercieca@xxxxxxxxxx
Perkins, et al. Expires July 21, 2016 [Page 74]
Mobile Ad hoc Networks Working Group C. Perkins
Internet-Draft Futurewei
Intended status: Standards Track S. Ratliff
Expires: October 6, 2016 Idirect
J. Dowdell
Airbus Defence and Space
L. Steenbrink
HAW Hamburg, Dept. Informatik
V. Mercieca
Airbus Defence and Space
April 4, 2016
Ad Hoc On-demand Distance Vector Version 2 (AODVv2) Routing
draft-ietf-manet-aodvv2-14
Abstract
The Ad Hoc On-demand Distance Vector Version 2 (AODVv2) routing
protocol is intended for use by mobile routers in wireless, multihop
networks. AODVv2 determines unicast routes among AODVv2 routers
within the network in an on-demand fashion.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 6, 2016.
Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
Perkins, et al. Expires October 6, 2016 [Page 1]
Internet-Draft AODVv2 April 2016
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Applicability Statement . . . . . . . . . . . . . . . . . . . 9
4. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 11
4.1. InterfaceSet . . . . . . . . . . . . . . . . . . . . . . 11
4.2. Router Client Table . . . . . . . . . . . . . . . . . . . 11
4.3. Neighbor Table . . . . . . . . . . . . . . . . . . . . . 12
4.4. Sequence Numbers . . . . . . . . . . . . . . . . . . . . 12
4.5. Local Route Set . . . . . . . . . . . . . . . . . . . . . 13
4.6. Multicast Route Message Table . . . . . . . . . . . . . . 15
4.7. Route Error (RERR) Table . . . . . . . . . . . . . . . . 17
5. Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6. AODVv2 Protocol Operations . . . . . . . . . . . . . . . . . 19
6.1. Initialization . . . . . . . . . . . . . . . . . . . . . 19
6.2. Next Hop Monitoring . . . . . . . . . . . . . . . . . . . 20
6.3. Neighbor Table Update . . . . . . . . . . . . . . . . . . 22
6.4. Interaction with the Forwarding Plane . . . . . . . . . . 23
6.5. Message Transmission . . . . . . . . . . . . . . . . . . 24
6.6. Route Discovery, Retries and Buffering . . . . . . . . . 25
6.7. Processing Received Route Information . . . . . . . . . . 26
6.7.1. Evaluating Route Information . . . . . . . . . . . . 27
6.7.2. Applying Route Updates . . . . . . . . . . . . . . . 29
6.8. Suppressing Redundant Messages Using the Multicast Route
Message Table . . . . . . . . . . . . . . . . . . . . . . 31
6.9. Suppressing Redundant Route Error Messages using the
Route Error Table . . . . . . . . . . . . . . . . . . . . 33
6.10. Local Route Set Maintenance . . . . . . . . . . . . . . . 34
6.10.1. LocalRoute State Changes . . . . . . . . . . . . . . 34
6.10.2. Reporting Invalid Routes . . . . . . . . . . . . . . 36
7. AODVv2 Protocol Messages . . . . . . . . . . . . . . . . . . 37
7.1. Route Request (RREQ) Message . . . . . . . . . . . . . . 37
7.1.1. RREQ Generation . . . . . . . . . . . . . . . . . . . 38
7.1.2. RREQ Reception . . . . . . . . . . . . . . . . . . . 40
7.1.3. RREQ Regeneration . . . . . . . . . . . . . . . . . . 40
7.2. Route Reply (RREP) Message . . . . . . . . . . . . . . . 41
7.2.1. RREP Generation . . . . . . . . . . . . . . . . . . . 43
7.2.2. RREP Reception . . . . . . . . . . . . . . . . . . . 44
7.2.3. RREP Regeneration . . . . . . . . . . . . . . . . . . 46
7.3. Route Reply Acknowledgement (RREP_Ack) Message . . . . . 46
Perkins, et al. Expires October 6, 2016 [Page 2]
Internet-Draft AODVv2 April 2016
7.3.1. RREP_Ack Generation . . . . . . . . . . . . . . . . . 47
7.3.2. RREP_Ack Reception . . . . . . . . . . . . . . . . . 47
7.4. Route Error (RERR) Message . . . . . . . . . . . . . . . 47
7.4.1. RERR Generation . . . . . . . . . . . . . . . . . . . 48
7.4.2. RERR Reception . . . . . . . . . . . . . . . . . . . 50
7.4.3. RERR Regeneration . . . . . . . . . . . . . . . . . . 51
8. RFC 5444 Representation . . . . . . . . . . . . . . . . . . . 52
8.1. Route Request Message Representation . . . . . . . . . . 53
8.1.1. Message Header . . . . . . . . . . . . . . . . . . . 53
8.1.2. Message TLV Block . . . . . . . . . . . . . . . . . . 53
8.1.3. Address Block . . . . . . . . . . . . . . . . . . . . 53
8.1.4. Address Block TLV Block . . . . . . . . . . . . . . . 54
8.2. Route Reply Message Representation . . . . . . . . . . . 55
8.2.1. Message Header . . . . . . . . . . . . . . . . . . . 55
8.2.2. Message TLV Block . . . . . . . . . . . . . . . . . . 55
8.2.3. Address Block . . . . . . . . . . . . . . . . . . . . 55
8.2.4. Address Block TLV Block . . . . . . . . . . . . . . . 55
8.3. Route Reply Acknowledgement Message Representation . . . 56
8.3.1. Message Header . . . . . . . . . . . . . . . . . . . 56
8.3.2. Message TLV Block . . . . . . . . . . . . . . . . . . 56
8.3.3. Address Block . . . . . . . . . . . . . . . . . . . . 56
8.3.4. Address Block TLV Block . . . . . . . . . . . . . . . 57
8.4. Route Error Message Representation . . . . . . . . . . . 57
8.4.1. Message Header . . . . . . . . . . . . . . . . . . . 57
8.4.2. Message TLV Block . . . . . . . . . . . . . . . . . . 57
8.4.3. Address Block . . . . . . . . . . . . . . . . . . . . 57
8.4.4. Address Block TLV Block . . . . . . . . . . . . . . . 58
9. Simple External Network Attachment . . . . . . . . . . . . . 58
10. Optional Features . . . . . . . . . . . . . . . . . . . . . . 59
10.1. Expanding Rings Multicast . . . . . . . . . . . . . . . 60
10.2. Precursor Lists . . . . . . . . . . . . . . . . . . . . 60
10.3. Intermediate RREP . . . . . . . . . . . . . . . . . . . 61
10.4. Message Aggregation Delay . . . . . . . . . . . . . . . 61
11. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 61
11.1. Timers . . . . . . . . . . . . . . . . . . . . . . . . . 62
11.2. Protocol Constants . . . . . . . . . . . . . . . . . . . 63
11.3. Local Settings . . . . . . . . . . . . . . . . . . . . . 64
11.4. Network-Wide Settings . . . . . . . . . . . . . . . . . 64
11.5. Optional Feature Settings . . . . . . . . . . . . . . . 64
11.6. MetricType Allocation . . . . . . . . . . . . . . . . . 65
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 65
12.1. RFC 5444 Message Types . . . . . . . . . . . . . . . . . 65
12.2. RFC 5444 Address Block TLV Types . . . . . . . . . . . . 66
12.3. ADDRESS_TYPE TLV Values . . . . . . . . . . . . . . . . 66
13. Security Considerations . . . . . . . . . . . . . . . . . . . 67
13.1. Availability . . . . . . . . . . . . . . . . . . . . . . 67
13.1.1. Denial of Service . . . . . . . . . . . . . . . . . 67
13.1.2. Malicious RERR messages . . . . . . . . . . . . . . 68
Perkins, et al. Expires October 6, 2016 [Page 3]
Internet-Draft AODVv2 April 2016
13.1.3. False Confirmation of Link Bidirectionality . . . . 69
13.1.4. Message Deletion . . . . . . . . . . . . . . . . . . 70
13.2. Confidentiality . . . . . . . . . . . . . . . . . . . . 70
13.3. Integrity . . . . . . . . . . . . . . . . . . . . . . . 71
13.3.1. Message Insertion . . . . . . . . . . . . . . . . . 71
13.3.2. Message Modification - Man in the Middle . . . . . . 71
13.3.3. Replay Attacks . . . . . . . . . . . . . . . . . . . 72
13.4. Protection Mechanisms . . . . . . . . . . . . . . . . . 72
13.4.1. Confidentiality and Authentication . . . . . . . . . 72
13.4.2. Integrity and Trust using ICVs . . . . . . . . . . . 72
13.4.3. Replay Protection using Timestamps . . . . . . . . . 73
13.4.4. Application to AODVv2 . . . . . . . . . . . . . . . 73
14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 75
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 76
15.1. Normative References . . . . . . . . . . . . . . . . . . 76
15.2. Informative References . . . . . . . . . . . . . . . . . 77
Appendix A. AODVv2 Draft Updates . . . . . . . . . . . . . . . . 78
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 79
1. Overview
The Ad hoc On-Demand Distance Vector Version 2 (AODVv2) protocol
enables dynamic, self-starting, multihop routing between
participating mobile nodes wishing to establish and maintain an ad
hoc network. The basic operations of the AODVv2 protocol are route
discovery and route maintenance. AODVv2 does not require nodes to
maintain routes to destinations that are not in active communication.
AODVv2 allows mobile nodes to respond to link breakages and changes
in network topology in a timely manner. The operation of AODVv2 is
loop-free, and by avoiding the Bellman-Ford "counting to infinity"
problem offers quick convergence when the ad hoc network topology
changes (typically, when a node moves in the network). When links
break, AODVv2 causes the affected set of nodes to be notified so that
they are able to invalidate the routes using the lost link.
One distinguishing feature of AODVv2 is its use of a destination
sequence number for each route entry. The destination sequence
number is created by the destination to be included along with any
route information it sends to requesting nodes. Using destination
sequence numbers ensures loop freedom and is simple to program.
Given the choice between two routes to a destination, a requesting
node is required to select the one with the greatest sequence number.
Compared to AODV [RFC3561], AODVv2 makes some features optional,
notably intermediate route replies, expanding ring search, and
precursor lists. Hello messages and local repair have been removed.
AODVv2 provides a mechanism for the use of multiple metric types.
Message formats have been updated and made compliant with [RFC5444].
Perkins, et al. Expires October 6, 2016 [Page 4]
Internet-Draft AODVv2 April 2016
AODVv2 control messages are defined as sets of data, which are mapped
to message elements using the Generalized MANET Packet/Message Format
defined in [RFC5444] and sent using the parameters in [RFC5498].
Verification of link bidirectionality has been substantially
improved, and additional refinements made for route timeouts and
state management.
Although AODVv2 is closely related to AODV [RFC3561], and shares some
features of DSR [RFC4728], AODVv2 is not interoperable with either of
those protocols. Compared to AODV, AODVv2 makes some features
optional, notably intermediate route replies, expanding ring search,
and precursor lists. Hello messages and local repair have been
removed. AODVv2 provides a mechanism for the use of multiple metric
types. Message formats have been updated and made compliant with
[RFC5444].
AODVv2 control messages are defined as sets of data, which are mapped
to messages using the Generalized MANET Packet/Message Format defined
in [RFC5444] and sent using the parameters in [RFC5498].
The basic operations of the AODVv2 protocol are route discovery and
route maintenance.
An AODVv2 router is configured to perform route discovery on behalf
of a configured set of IP addresses known as Router Clients. Route
discovery is performed when an AODVv2 router needs to forward an IP
packet from one of its Router Clients, but does not have a valid
route to the packet's destination. AODVv2 routers use Route Request
(RREQ) and Route Reply (RREP) messages to carry route information
between the originator of the route discovery and the router
responsible for the target, establishing a route to both endpoints on
all intermediate routers. A metric value is included to represent
the cost of the route contained within the message. AODVv2 uses
sequence numbers to identify stale routing information, and compares
route metric values to determine if advertised routes could form
loops.
Route maintenance includes confirming bidirectionality of links to
next hop AODVv2 routers, issuing Route Error (RERR) messages,
reacting to received Route Error messages, and extending and
enforcing route timeouts.
The on-demand nature of AODVv2 requires signals to be exchanged
between AODVv2 and the forwarding plane. These signals indicate
when: a packet is to be forwarded, in order to initiate route
discovery; packet forwarding fails, in order to initiate route error
reporting; a packet is successfully forwarded, for route maintenance.
Perkins, et al. Expires October 6, 2016 [Page 5]
Internet-Draft AODVv2 April 2016
Security for authentication of AODVv2 routers and encryption of
control messages is accomplished using the TIMESTAMP and ICV TLVs
defined in [RFC7182].
2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
[RFC2119]. In addition, this document uses terminology from
[RFC5444], and defines the following terms:
AddressList
A list of IP addresses as used in AODVv2 messages.
AckReq
Used in a Route Reply message to indicate the IP address of the
router from which a Route Reply Acknowledgement is expected.
AdvRte
A route advertised in an incoming route message.
AODVv2 Router
An IP addressable device in the ad hoc network that performs the
AODVv2 protocol operations specified in this document.
CurrentTime
The current time as maintained by the AODVv2 router.
ENAR (External Network Access Router)
An AODVv2 router with an interface to an external, non-AODVv2
network.
InterfaceSet
The set of all network interfaces supporting AODVv2.
Invalid route
A route that cannot be used for forwarding but still contains
useful sequence number information.
LocalRoute
An entry in the Local Route Set as defined in Section 4.5.
MANET
A Mobile Ad Hoc Network as defined in [RFC2501].
MetricType
The metric type for a metric value included in a message.
Perkins, et al. Expires October 6, 2016 [Page 6]
Internet-Draft AODVv2 April 2016
MetricTypeList
A list of metric types associated with the addresses in the
AddressList of a Route Error message.
Neighbor
An AODVv2 router from which an RREQ or RREP message has been
received. Neighbors exchange routing information and verify
bidirectionality of the link to a neighbor before installing a
route via that neighbor into the Local Route Set.
OrigAddr
The source IP address of the IP packet triggering route discovery.
OrigMetric
The metric value associated with the route to OrigAddr (and any
other addresses included in the given prefix length).
OrigPrefixLen
The prefix length, in bits, configured in the Router Client entry
which includes OrigAddr.
OrigSeqNum
The sequence number of the AODVv2 router which originated the
Route Request on behalf of OrigAddr.
PktSource
The source address of the IP packet which triggered a Route Error
message.
PrefixLengthList
A list of routing prefix lengths associated with the addresses in
the AddressList of a message.
Reactive
Performed only in reaction to specific events. In AODVv2, routes
are requested only when data packets need to be forwarded. In
this document, "reactive" is synonymous with "on-demand".
RERR (Route Error)
The AODVv2 message type used to indicate that an AODVv2 router
does not have a valid LocalRoute toward one or more particular
destinations.
RERR_Gen (RERR Generating Router)
The AODVv2 router generating a Route Error message.
RerrMsg (RERR Message)
A Route Error (RERR) message.
Perkins, et al. Expires October 6, 2016 [Page 7]
Internet-Draft AODVv2 April 2016
Routable Unicast IP Address
A routable unicast IP address is a unicast IP address that is
scoped sufficiently to be forwarded by a router. Globally-scoped
unicast IP addresses and Unique Local Addresses (ULAs) [RFC4193]
are examples of routable unicast IP addresses.
Router Client
An address or address range configured on an AODVv2 router, on
behalf of which that router will initiate and respond to route
discoveries. These addresses may be used by the AODVv2 router
itself or by non-routing devices that are reachable without
traversing another AODVv2 router.
RREP (Route Reply)
The AODVv2 message type used to reply to a Route Request message.
RREP_Gen (RREP Generating Router)
The AODVv2 router that generates the Route Reply message, i.e.,
the router configured with TargAddr as a Router Client.
RREQ (Route Request)
The AODVv2 message type used to discover a route to TargAddr and
distribute information about a route to OrigAddr.
RREQ_Gen (RREQ Generating Router)
The AODVv2 router that generates the Route Request message, i.e.,
the router configured with OrigAddr as a Router Client.
RteMsg (Route Message)
A Route Request (RREQ) or Route Reply (RREP) message.
SeqNum
The sequence number maintained by an AODVv2 router to indicate
freshness of route information.
SeqNumList
A list of sequence numbers associated with the addresses in the
AddressList of a message.
TargAddr
The target address of a route request, i.e., the destination
address of the IP packet triggering route discovery.
TargMetric
The metric value associated with the route to TargAddr (and any
other addresses included in the given prefix length).
TargPrefixLen
Perkins, et al. Expires October 6, 2016 [Page 8]
Internet-Draft AODVv2 April 2016
The prefix length, in bits, configured in the Router Client entry
which includes TargAddr.
TargSeqNum
The sequence number of the AODVv2 router which originated the
Route Reply on behalf of TargAddr.
Unreachable Address
An address reported in a Route Error message, either the address
on a LocalRoute which became Invalid, or the destination address
of an IP packet that could not be forwarded because a valid
LocalRoute to the destination is not known, and will not be
requested.
Upstream
In the direction from destination to source (from TargAddr to
OrigAddr).
ValidityTime
The length of time the route described by the message is offered.
Valid route
A route that can be used for forwarding, which has been confirmed
as having a bidirectional link to the next hop, and has not timed
out or been made invalid by a route error.
This document uses the notational conventions in Table 1 to simplify
the text.
+-----------------------+------------------------------------+
| Notation | Meaning |
+-----------------------+------------------------------------+
| Route[Address] | A route toward Address |
| Route[Address].Field | A field in a route toward Address |
| RteMsg.Field | A field in either RREQ or RREP |
+-----------------------+------------------------------------+
Table 1: Notational Conventions
3. Applicability Statement
The AODVv2 routing protocol is a reactive routing protocol. A
reactive protocol only sends messages to discover a route when there
is data to send on that route. Therefore, a reactive routing
protocol requires certain interactions with the forwarding plane (for
example, to indicate when a packet is to be forwarded, in order to
initiate route discovery). The set of signals exchanged between
AODVv2 and the forwarding plane are discussed in Section 6.4.
Perkins, et al. Expires October 6, 2016 [Page 9]
Internet-Draft AODVv2 April 2016
AODVv2 is designed for stub or disconnected mobile ad hoc networks,
i.e., non-transit networks or those not connected to the internet.
AODVv2 can, however, be configured to perform gateway functions when
attached to external networks, as discussed in Section 9.
AODVv2 handles a wide variety of mobility and traffic patterns by
determining routes on-demand. In networks with a large number of
routers, AODVv2 is best suited for relatively sparse traffic
scenarios where each router forwards IP packets to a small percentage
of other AODVv2 routers in the network. In this case fewer routes
are needed, and therefore less control traffic is produced. Data
packets may be buffered until a route to their destination is
available, as described in Section 6.6.
AODVv2 provides for message integrity and security against replay
attacks by using integrity check values, timestamps and sequence
numbers, as described in Section 13. If security associations can be
established, encryption can be used for AODVv2 messages to ensure
that only trusted routers participate in routing operations.
Since the route discovery process aims for a route to be established
in both directions along the same path, uni-directional links are not
suitable. AODVv2 will detect and exclude those links from route
discovery. The route discovered is optimised for the requesting
router, and the return path may not be the optimal route.
AODVv2 is applicable to memory constrained devices, since only a
little routing state is maintained in each AODVv2 router. AODVv2
routes that are not needed for forwarding data do not need to be
maintained. On routers unable to store persistent AODVv2 state,
recovery can impose a performance penalty (e.g., in case of AODVv2
router reboot), since if a router loses its sequence number, there is
a delay before the router can resume full operations. This is
described in Section 6.1.
AODVv2 supports routers with multiple interfaces and multiple IP
addresses per interface. A router may also use the same IP address
on multiple interfaces. AODVv2 requires only that each interface
configured for AODVv2 has at least one unicast IP address. Address
assignment procedures are out of scope for AODVv2.
AODVv2 supports Router Clients with multiple interfaces, as long as
each interface is configured with its own unicast IP address. Multi-
homing of a Router Client IP address is not supported by AODVv2, and
therefore an IP address SHOULD NOT be configured as a Router Client
on more than one AODVv2 router at any one time.
Perkins, et al. Expires October 6, 2016 [Page 10]
Internet-Draft AODVv2 April 2016
The routing algorithm in AODVv2 MAY be operated at layers other than
the network layer, using layer-appropriate addresses.
4. Data Structures
4.1. InterfaceSet
The InterfaceSet is a conceptual data structure which contains
information about all interfaces available to AODVv2. Each element
in the InterfaceSet MUST contain the following:
Interface.Id
An identifier that is unique in node-local scope and that allows
the AODVv2 implementation to identify exactly one local network
interface.
If multiple interfaces of the AODVv2 router are configured for use by
AODVv2, they MUST be configured in the InterfaceSet.
Otherwise the InterfaceSet MAY be empty.
4.2. Router Client Table
An AODVv2 router provides route discovery services for its own local
applications and for other non-routing devices that are reachable
without traversing another AODVv2 router. The addresses used by
these devices, and the AODVv2 router itself, are configured in the
Router Client Table. An AODVv2 router will only originate Route
Request and Route Reply messages on behalf of configured Router
Client addresses.
Router Client Table entries MUST contain:
RouterClient.IPAddress
An IP address or the start of an address range that requires route
discovery services from the AODVv2 router.
RouterClient.PrefixLength
The length, in bits, of the routing prefix associated with the
RouterClient.IPAddress. If a prefix length is included, the
AODVv2 router MUST provide connectivity for all addresses within
that prefix.
RouterClient.Cost
The cost associated with reaching this address or address range.
A Router Client address MUST NOT be served by more than one AODVv2
router at any one time. To shift responsibility for a Router Client
Perkins, et al. Expires October 6, 2016 [Page 11]
Internet-Draft AODVv2 April 2016
to a different AODVv2 router, correct AODVv2 routing behavior MUST be
observed; The AODVv2 router adding the Router Client MUST wait for
any existing routing information about this Router Client to be
purged from the network, i.e., at least MAX_SEQNUM_LIFETIME since the
last SeqNum update on the router which is removing this Router
Client.
4.3. Neighbor Table
A Neighbor Table MUST be maintained with information about
neighboring AODVv2 routers. Neighbor Table entries are stored when
AODVv2 messages are received. If the Neighbor is chosen as a next
hop on an installed route, the link to the Neighbor MUST be tested
for bidirectionality and the result stored in this table. A route
will only be considered valid when the link is confirmed to be
bidirectional.
Neighbor Table entries MUST contain:
Neighbor.IPAddress
An IP address of the neighboring router, learned from the source
IP address of a received route message.
Neighbor.State
Indicates whether the link to the neighbor is bidirectional.
There are three possible states: Confirmed, Unknown, and
Blacklisted. Unknown is the initial state. Confirmed indicates
that the link to the neighbor has been confirmed as bidirectional.
Blacklisted indicates that the link to the neighbor is uni-
directional. Section 6.2 discusses how to monitor link
bidirectionality.
Neighbor.ResetTime
When the value of Neighbor.State is Blacklisted, this indicates
the time at which the value of Neighbor.State will revert to
Unknown. By default this value is calculated at the time the
router is blacklisted and is equal to CurrentTime +
MAX_BLACKLIST_TIME. When the value of Neighbor.State is not
Blacklisted, this time is set to INFINITY_TIME.
Neighbor.Interface
The interface on which the link to the neighbor was established.
4.4. Sequence Numbers
Sequence numbers enable AODVv2 routers to determine the temporal
order of route discovery messages, identifying stale routing
information so that it can be discarded. The sequence number
Perkins, et al. Expires October 6, 2016 [Page 12]
Internet-Draft AODVv2 April 2016
fulfills the same roles as the "Destination Sequence Number" of DSDV
[Perkins94], and the AODV Sequence Number in [RFC3561].
Each AODVv2 router in the network MUST maintain its own sequence
number. All RREQ and RREP messages created by an AODVv2 router
include the router's sequence number, reported as a 16-bit unsigned
integer. Each AODVv2 router MUST ensure that its sequence number is
strictly increasing, and that it is incremented by one (1) whenever
an RREQ or RREP is created, except when the sequence number is 65,535
(the maximum value of a 16-bit unsigned integer), in which case it
MUST be reset to one (1). The value zero (0) is reserved to indicate
that the sequence number is unknown.
An AODVv2 router MUST only attach its own sequence number to
information about a route to one of its configured Router Clients,
all route messages regenerated by other routers retain the
originator's sequence number. Tod determine staleness, the
previously stored sequence number associated with the originator, is
subtracted from the incoming sequence number. The result of the
subtraction is to be interpreted as a signed 16-bit integer, and if
less than zero, the information in the new AODVv2 message is stale
and MUST be discarded.
This, along with the processes in Section 6.7.1, ensures loop
freedom.
An AODVv2 router SHOULD maintain its sequence number in persistent
storage. If the sequence number is lost, the router MUST follow the
procedure in Section 6.1 to safely resume routing operations with a
new sequence number.
4.5. Local Route Set
All AODVv2 routers MUST maintain a Local Route Set, containing
information about routes learned from AODVv2 route messages. The
Local Route Set is stored separately from the forwarding plane's
routing table (referred to as Routing Information Base (RIB)), which
may be updated by other routing protocols operating on the AODVv2
router as well. The Routing Information Base is updated using
information from the Local Route Set. Alternatively, implementations
MAY choose to modify the Routing Information Base directly.
Routes learned from AODVv2 route messages are referred to in this
document as LocalRoutes, and MUST contain the following information:
LocalRoute.Address
An address, which, when combined with LocalRoute.PrefixLength,
describes the set of destination addresses this route includes.
Perkins, et al. Expires October 6, 2016 [Page 13]
Internet-Draft AODVv2 April 2016
LocalRoute.PrefixLength
The prefix length, in bits, associated with LocalRoute.Address.
LocalRoute.SeqNum
The sequence number associated with LocalRoute.Address, obtained
from the last route message that successfully updated this entry.
LocalRoute.NextHop
The source IP address of the IP packet containing the AODVv2
message advertising the route to LocalRoute.Address, i.e. an IP
address of the AODVv2 router used for the next hop on the path
toward LocalRoute.Address.
LocalRoute.NextHopInterface
The interface used to send IP packets toward LocalRoute.Address.
LocalRoute.LastUsed
If this route is installed in the Routing Information Base, the
time it was last used to forward an IP packet.
LocalRoute.LastSeqNumUpdate
The time LocalRoute.SeqNum was last updated.
LocalRoute.ExpirationTime
The time at which this LocalRoute MUST be marked as Invalid. An
AODVv2 router MAY be offered a route for a limited time. In this
case, the route is referred to as a timed route. If a route is
not timed, LocalRoute.ExpirationTime is INFINITY_TIME.
LocalRoute.MetricType
The type of metric associated with this route.
LocalRoute.Metric
The cost of the route toward LocalRoute.Address expressed in units
consistent with LocalRoute.MetricType.
LocalRoute.State
The last known state (Unconfirmed, Idle, Active, or Invalid) of
the route.
LocalRoute.Precursors (optional feature)
A list of upstream neighbors using the route (see Section 10.2).
There are four possible states for a LocalRoute:
Unconfirmed
A route learned from a Route Request message, which has not yet
been confirmed as bidirectional. It MUST NOT be used for
Perkins, et al. Expires October 6, 2016 [Page 14]
Internet-Draft AODVv2 April 2016
forwarding IP packets, and therefore it is not referred to as a
valid route. This state only applies to routes learned through
RREQ messages.
Idle
A route which has been learned from a route message, and has also
been confirmed, but has not been used in the last ACTIVE_INTERVAL.
It is able to be used for forwarding IP packets, and therefore it
is referred to as a valid route.
Active
A route which has been learned from a route message, and has also
been confirmed, and has been used in the last ACTIVE_INTERVAL. It
is able to be used for forwarding IP packets, and therefore it is
referred to as a valid route.
Invalid
A route which has expired or been lost. It MUST NOT be used for
forwarding IP packets, and therefore it is not referred to as a
valid route. Invalid routes contain sequence number information
which allows incoming information to be assessed for freshness.
When the Local Route Set is stored separately from the Routing
Information Base, routes are added to the Routing Information Base
when LocalRoute.State is valid (set to Active or Idle), and removed
from the Routing Information Base when LocalRoute.State becomes
Invalid.
Changes to LocalRoute state are detailed in Section 6.10.1.
Note that multiple entries for the same address, prefix length and
metric type may exist in the Local Route Set, but only one will be a
valid entry. Any others will be Unconfirmed, but may offer
improvement to the existing valid route, if they can be confirmed as
valid routes (see Section 6.2). Section 6.10.1 also describes the
appropriate changes in this situation.
Multiple valid routes for the same address and prefix length but for
different metric types may exist in the Local Route Set, but the
decision of which of these routes to install in the Routing
Information Base to use for forwarding is outside the scope of
AODVv2.
4.6. Multicast Route Message Table
A route message (RteMsg) is either a Route Request or Route Reply
message. RREQ messages are multicast by default and regenerated
multiple times, and RREP messages will be multicast when the link to
Perkins, et al. Expires October 6, 2016 [Page 15]
Internet-Draft AODVv2 April 2016
the next router is not known to be bidirectional. Multiple similar
route messages might be received by any one router during one route
discovery attempt. The AODVv2 router does not need to regenerate or
respond to every one of these messages.
The Multicast Route Message Table is a conceptual table which
contains information about previously received multicast route
messages, so that incoming route messages can be compared with
previously received messages to determine if the incoming information
is redundant or stale, and the router can avoid sending redundant
control traffic.
Multicast Route Message Table entries MUST contain the following
information:
RteMsg.MessageType
Either RREQ or RREP.
RteMsg.OrigAddr
The source address of the IP packet triggering the route request.
RteMsg.OrigPrefixLen
The prefix length associated with RteMsg.OrigAddr, originally from
the Router Client entry on RREQ_Gen which includes
RteMsg.OrigAddr.
RteMsg.TargAddr
The destination address of the IP packet triggering the route
request.
RteMsg.TargPrefixLen
The prefix length associated with RteMsg.TargAddr, originally from
the Router Client entry on RREP_Gen which includes
RteMsg.TargAddr. If RteMsg is a RREQ, RteMsg.TargPrefixLen MUST
equal address length.
RteMsg.OrigSeqNum
The sequence number associated with the route to OrigAddr, if
RteMsg is an RREQ.
RteMsg.TargSeqNum
The sequence number associated with the route to TargAddr, if
RteMsg is an RREP.
RteMsg.MetricType
The metric type of the route requested.
RteMsg.Metric
Perkins, et al. Expires October 6, 2016 [Page 16]
Internet-Draft AODVv2 April 2016
The metric value received in the RteMsg.
RteMsg.Timestamp
The last time this Multicast Route Message Table entry was
updated.
RteMsg.RemoveTime
The time at which this entry MUST be removed from the Multicast
Route Message Table. This is set to CurrentTime +
MAX_SEQNUM_LIFETIME, whenever the sequence number of this entry
(RteMsg.OrigSeqNum for an RREQ, or RteMsg.TargSeqNum for an RREP)
is updated.
RteMsg.AckReqAddr
The address from which a RREP_Ack is expected, if RteMsg is a RREP
that contains an AckReq.
The Multicast Route Message Table is maintained so that no two
entries have the same MessageType, OrigAddr, TargAddr, and
MetricType. See Section 6.8 for details about updating this table.
4.7. Route Error (RERR) Table
Each sent RERR message SHOULD be recorded in a conceptual table
called the Route Error (RERR) Table. Each entry contains the
following information:
RerrMsg.Timeout
The time after which the entry SHOULD be deleted.
RerrMsg.AddressList
The AddressList of the RERR to be recorded.
RerrMsg.PktSource:
The PktSource of the RERR to be recorded, if any.
See section Section 6.9 for instructions on how to update the table.
5. Metrics
Metrics measure a cost or quality associated with a route or a link,
e.g., latency, delay, financial cost, energy, etc. Metric values are
reported in Route Request and Route Reply messages.
In Route Request messages, the metric describes the cost of the route
from OrigAddr (and any other addresses included in the prefix length
of RREQ_Gen's Router Client entry for OrigAddr) to the router sending
the Route Request. For RREQ_Gen, this is the cost associated with
Perkins, et al. Expires October 6, 2016 [Page 17]
Internet-Draft AODVv2 April 2016
the Router Client entry which includes OrigAddr. For routers which
regenerate the RREQ, this is the cost from OrigAddr to the
regenerating router, combining the metric value from the received
RREQ message with knowledge of the link cost from the sender to the
receiver, i.e., the incoming link cost. This updated route cost is
included when regenerating the Route Request message, and used to
install a route back toward OrigAddr.
Similarly, in Route Reply messages, the metric reflects the cost of
the route from TargAddr (and any other addresses included in the
prefix length of RREP_Gen's Router Client entry for TargAddr) to the
router sending the Route Reply. For RREP_Gen, this is the cost
associated with the Router Client entry which includes TargAddr. For
routers which regenerate the RREP, this is the cost from TargAddr to
the regenerating router, combining the metric value from the received
RREP message with knowledge of the link cost from the sender to the
receiver, i.e., the incoming link cost. This updated route cost is
included when regenerating the Route Reply message, and used to
install a route back toward TargAddr.
Assuming link metrics are symmetric, the cost of the routes installed
in the Local Route Set at each router will be correct. While this
assumption is not always correct, calculating incoming/outgoing
metric data is outside of scope of this document. The route
discovered is optimised for the requesting router, and the return
path may not be the optimal route.
AODVv2 enables the use of multiple metric types. Each route
discovery attempt indicates the metric type which is requested for
the route. Only one metric type MUST be used in each route discovery
attempt.
For each MetricType, AODVv2 requires:
o A MetricType number, to indicate the metric type of a route.
MetricType numbers allocated are detailed in Section 11.6.
o A maximum value, denoted MAX_METRIC[MetricType]. This MUST always
be the maximum expressible metric value of type MetricType. Field
lengths associated with metric values are found in Section 11.6.
If the cost of a route exceeds MAX_METRIC[MetricType], the route
is ignored.
o A function for incoming link cost, denoted Cost(L). Using
incoming link costs means that the route learned has a path
optimized for the direction from OrigAddr to TargAddr.
o A function for route cost, denoted Cost(R).
Perkins, et al. Expires October 6, 2016 [Page 18]
Internet-Draft AODVv2 April 2016
o A function to analyze routes for potential loops based on metric
information, denoted LoopFree(R1, R2). LoopFree verifies that a
route R2 is not a sub-section of another route R1. An AODVv2
router invokes LoopFree() as part of the process in Section 6.7.1,
when an advertised route (R1) and an existing LocalRoute (R2) have
the same destination address, metric type, and sequence number.
LoopFree returns FALSE to indicate that an advertised route is not
to be used to update a stored LocalRoute, as it may cause a
routing loop. In the case where the existing LocalRoute is
Invalid, it is possible that the advertised route includes the
existing LocalRoute and came from a router which did not yet
receive notification of the route becoming Invalid, so the
advertised route should not be used to update the Local Route Set,
in case it forms a loop to a broken route.
AODVv2 currently supports cost metrics where Cost(R) is strictly
increasing, by defining:
o Cost(R) := Sum of Cost(L) of each link in the route
o LoopFree(R1, R2) := ( Cost(R1) <= Cost(R2) )
Implementers MAY consider other metric types, but the definitions of
Cost and LoopFree functions for such types are undefined, and
interoperability issues need to be considered.
6. AODVv2 Protocol Operations
The AODVv2 protocol's operations include managing sequence numbers,
monitoring next hop AODVv2 routers on discovered routes and updating
the Neighbor Table, performing route discovery and dealing with
requests from other routers, processing incoming route information
and updating the Local Route Set, updating the Multicast Route
Message Table and suppressing redundant messages, and reporting
broken routes. These processes are discussed in detail in the
following sections.
6.1. Initialization
During initialization where an AODVv2 router does not have
information about its previous sequence number, or if its sequence
number is lost at any point, the router resets its sequence number to
one (1). However, other AODVv2 routers may still hold sequence
number information that this router previously issued. Since
sequence number information is removed if there has been no update to
the sequence number in MAX_SEQNUM_LIFETIME, the initializing router
MUST wait for MAX_SEQNUM_LIFETIME before it creates any messages
Perkins, et al. Expires October 6, 2016 [Page 19]
Internet-Draft AODVv2 April 2016
containing its new sequence number. It can then be sure that the
information it sends will not be considered stale.
During this wait period, the router is permitted to do the following:
o Process information in a received RREQ or RREP message to learn a
route to the originator or target of that route discovery
o Regenerate a received RREQ or RREP
o Send an RREP_Ack
o Maintain valid routes in the Local Route Set
o Create, process and regenerate RERR messages
6.2. Next Hop Monitoring
To ensure AODVv2 routers Routers do not establish routes over uni-
directional links, AODVv2 routers MUST verify that the link to the
next hop router is bidirectional before marking a route as valid in
the Local Route Set.
AODVv2 provides a mechanism for testing bidirectional connectivity
during route discovery, and blacklisting routers where bidirectional
connectivity is not available. If a route discovery is retried by
RREQ_Gen, the blacklisted routers can be excluded from the process,
and a different route can be discovered. Further, a route is not to
be used for forwarding until the bidirectionality of the link to the
next hop is confirmed. AODVv2 routers do not need to monitor
bidirectionality for links to neighboring routers which are not used
as next hops on routes in the Local Route Set.
o Bidirectional connectivity to upstream routers is tested by
requesting acknowledgement of RREP messages by including an
AckReq, which MUST be answered by sending an RREP_Ack. Receipt of
an RREP_Ack within RREP_Ack_SENT_TIMEOUT proves that bidirectional
connectivity exists. Otherwise, a link is determined to be
unidirectional. All AODVv2 routers MUST support this process,
which is explained in Section 7.2 and Section 7.3.
o For the downstream router, receipt of an RREP message containing
the route to TargAddr is confirmation of bidirectionality , since
an RREP message is a reply to a RREQ message which previously
crossed the link in the opposite direction.
Perkins, et al. Expires October 6, 2016 [Page 20]
Internet-Draft AODVv2 April 2016
To assist with next hop monitoring, a Neighbor Table (Section 4.3) is
maintained. When an RREQ or RREP is received, search for an entry in
the Neighbor Table where all of the following conditions are met:
o Neighbor.IPAddress == IP address from which the RREQ or RREP was
received
o Neighbor.Interface == Interface on which the RREQ or RREP was
received.
If such an entry does not exist, a new entry is created as described
in Section 6.3. While the value of Neighbor.State is Unknown,
acknowledgement of RREP messages sent to that neighbor MUST be
requested. If an acknowledgement is not received within the timeout
period, the neighbor MUST have Neighbor.State set to Blacklisted. If
an acknowledgement is received within the timeout period,
Neighbor.State is set to Confirmed. While the value of
Neighbor.State is Confirmed, the request for an acknowledgement of
any other RREP message is unnecessary.
When routers perform other operations such as those from the list
below, these MAY be used as additional indications of connectivity:
o NHDP HELLO Messages [RFC6130]
o Route timeout
o Lower layer triggers, e.g. message reception or link status
notifications
o TCP timeouts
o Promiscuous listening
o Other monitoring mechanisms or heuristics
If such an external process signals that the link to a neighbor is
bidirectional, the AODVv2 router MAY update the matching Neighbor
Table entry by changing the value of Neighbor.State to Confirmed,
e.g. receipt of a Neighborhood Discovery Protocol HELLO message with
the receiving router listed as a neighbor. If an external process
signals that a link is not bidirectional, the the value of
Neighbor.State MAY be changed to Blacklisted, e.g. notification of a
TCP timeout.
Perkins, et al. Expires October 6, 2016 [Page 21]
Internet-Draft AODVv2 April 2016
6.3. Neighbor Table Update
On receipt of an RREQ or RREP message, the Neighbor Table MUST be
checked for an entry with Neighbor.IPAddress which matches the source
IP address of a packet containing the AODVv2 message. If no matching
entry is found, a new entry is created.
A new Neighbor Table entry is created as follows:
o Neighbor.IPAddress := Source IP address of the received route
message
o Neighbor.State := Unknown
o Neighbor.ResetTime := INFINITY_TIME
o Neighbor.Interface := Interface on which the RREQ or RREP was
received. MUST equal Interface.Id of one of the entries in the
InterfaceSet (see Section 4.1).
If the message is one of the following:
o an RREP which answers a RREQ sent within RREQ_WAIT_TIME over the
same interface as Neighbor.Interface
o an RREP_Ack which answers a RREP sent within RREP_Ack_SENT_TIMEOUT
over the same interface as Neighbor.Interface
the link to the neighbor is bidirectional and the Neighbor
Table entry is updated as follows:
o Neighbor.State := Confirmed
o Neighbor.ResetTime := INFINITY_TIME
If an RREP_Ack is not received within RREP_Ack_SENT_TIMEOUT, the link
is considered to be uni-directional and the Neighbor Table entry is
updated as follows:
o Neighbor.State := Blacklisted
o Neighbor.ResetTime := CurrentTime + MAX_BLACKLIST_TIME
When the Neighbor.ResetTime is reached, the Neighbor Table entry is
updated as follows:
o Neighbor.State := Unknown
Perkins, et al. Expires October 6, 2016 [Page 22]
Internet-Draft AODVv2 April 2016
When a link to a neighbor is determined to be broken, the Neighbor
Table entry SHOULD be removed.
Route requests from neighbors with Neighbor.State set to Blacklisted
are ignored to avoid persistent IP packet loss or protocol failures.
Neighbor.ResetTime allows the neighbor to again be allowed to
participate in route discoveries after MAX_BLACKLIST_TIME, in case
the link between the routers has become bidirectional.
6.4. Interaction with the Forwarding Plane
The signals descried in the following are conceptual signals, and can
be implemented in various ways. Conformant implementations of AODVv2
are not mandated to implement the forwarding plane separately from
the control plane or data plane; these signals and interactions are
identified simply as assistance for implementers who may find them
useful.
AODVv2 requires signals from the forwarding plane:
o A packet cannot be forwarded because a route is unavailable:
AODVv2 needs to know the source and destination IP addresses of
the packet. If the source of the packet is configured as a Router
Client, the router should initiate route discovery to the
destination. If it is not a Router Client, the router should
create a Route Error message.
o A packet is to be forwarded: AODVv2 needs to check the state of
the route to ensure it is still valid.
o Packet forwarding succeeds: AODVv2 needs to update the record of
when a route was last used to forward a packet.
o Packet forwarding failure occurs: AODVv2 needs to create a Route
Error message.
AODVv2 needs to send signals to the forwarding plane:
o A route discovery is in progress: buffering might be configured
for packets requiring a route, while route discovery is attempted.
o A route discovery failed: any buffered packets requiring that
route should be discarded, and the source of the packet should be
notified that the destination is unreachable (using an ICMP
Destination Unreachable message). Route discovery fails if an
RREQ cannot be generated because the control message generation
limit has been reached, or if an RREP is not received within
RREQ_WAIT_TIME (see Section 6.6).
Perkins, et al. Expires October 6, 2016 [Page 23]
Internet-Draft AODVv2 April 2016
o A route discovery is not permitted: any buffered packets requiring
that route should be discarded. A route discovery will not be
attempted if the source address of the packet needing a route is
not configured as a Router Client.
o A route discovery succeeded: install a corresponding route into
the Routing Information Base and begin transmitting any buffered
packets.
o A route has been made invalid: remove the corresponding route from
the Routing Information Base.
o A route has been updated: update the corresponding route in the
Routing Information Base.
6.5. Message Transmission
AODVv2 sends [RFC5444] formatted messages using the parameters for
port number and IP protocol specified in [RFC5498]. Mapping of
AODVv2 data to [RFC5444] messages is detailed in Section 8. AODVv2
multicast messages are sent to the link-local multicast address LL-
MANET-Routers [RFC5498]. All AODVv2 routers MUST subscribe to LL-
MANET-Routers on all AODVv2 interfaces [RFC5498] to receive AODVv2
messages. Note that multicast messages MAY be sent via unicast. For
example, this may occur for certain link-types (non-broadcast media),
for manually configured router adjacencies, or in order to improve
robustness.
When multiple interfaces are available, an AODVv2 router transmitting
a multicast message to LL-MANET-Routers MUST send the message on all
interfaces that have been configured for AODVv2 operation, as given
in the InterfaceSet (Section 4.1).
To avoid congestion, each AODVv2 router's rate of message generation
SHOULD be limited (CONTROL_TRAFFIC_LIMIT) and administratively
configurable. Messages SHOULD NOT be sent more frequently than one
message per (1 / CONTROL_TRAFFIC_LIMIT)th of a second. If this
threshold is reached, messages MUST be sent based on their priority:
o Highest priority SHOULD be given to RREP_Ack messages. This
allows links between routers to be confirmed as bidirectional and
avoids undesired blacklisting of next hop routers.
o Second priority SHOULD be given to RERR messages for undeliverable
IP packets. This avoids repeated forwarding of packets over
broken routes that are still in use by other routers.
Perkins, et al. Expires October 6, 2016 [Page 24]
Internet-Draft AODVv2 April 2016
o Third priority SHOULD be given to RREP messages in order that
RREQs do not time out.
o Fourth priority SHOULD be given to RREQ messages.
o Fifth priority SHOULD be given to RERR messages for newly
invalidated routes.
o Lowest priority SHOULD be given to RERR messages generated in
response to RREP messages which cannot be regenerated. In this
case the route request will be retried at a later point.
6.6. Route Discovery, Retries and Buffering
AODVv2's RREQ and RREP messages are used for route discovery. RREQ
messages are multicast to solicit an RREP, whereas RREP are unicast
where possible. The constants used inSection 6.7.1 this section are
defined in Section 11.
When an AODVv2 router needs to forward an IP packet (with source
address OrigAddr and destination address TargAddr) from one of its
Router Clients, it needs a route to TargAddr in its Routing
Information Base. If no route exists, the AODVv2 router generates
(RREQ_Gen) and multicasts a Route Request message (RREQ), on all
configured interfaces, containing OrigAddr and TargAddr. The
procedure for this is described in Section 7.1.1. Each generated
RREQ results in an increment to the router's sequence number. The
AODVv2 router generating an RREQ is referred to as RREQ_Gen.
Buffering might be configured for IP packets awaiting a route for
forwarding by RREQ_Gen, if sufficient memory is available. Buffering
of IP packets might have both positive and negative effects. Real-
time traffic, voice, and scheduled delivery may suffer if packets are
buffered and subjected to delays, but TCP connection establishment
will benefit if packets are queued while route discovery is performed
[Koodli01]. Recommendations for appropriate buffer methods are out
of scope for this specification. Determining which packets to
discard first when the buffer is full is a matter of policy at each
AODVv2 router. Note that using different or no buffer methods does
not affect interoperability.
RREQ_Gen awaits reception of a Route Reply message (RREP) containing
a route toward TargAddr. If a valid route to TargAddr is not learned
within RREQ_WAIT_TIME, RREQ_Gen will retry the route discovery. To
reduce congestion in a network, repeated attempts at route discovery
for a particular target address utilize a binary exponential backoff:
for each additional attempt, the time to wait for receipt of the RREP
is multiplied by 2. If the requested route is not learned within the
Perkins, et al. Expires October 6, 2016 [Page 25]
Internet-Draft AODVv2 April 2016
wait period, another RREQ is sent, up to a total of
DISCOVERY_ATTEMPTS_MAX. This is the same technique used in AODV
[RFC3561].
Through the use of bidirectional link monitoring and blacklists (see
Section 6.2) uni-directional links on initial selected route will be
ignored on subsequent route discovery attempts.
Route discovery is considered to have failed after
DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for an RREP
response to the final RREQ. After the attempted route discovery has
failed, RREQ_Gen waits at least RREQ_HOLDDOWN_TIME before attempting
another route discovery to the same destination, in order to avoid
repeatedly generating control traffic that is unlikely to discover a
route. Any IP packets buffered for TargAddr are also dropped and a
Destination Unreachable ICMP message (Type 3) with a code of 1 (Host
Unreachable Error) is delivered to the source of the packet, so that
the application knows about the failure.
If RREQ_Gen does receive a route message containing a route to
TargAddr within the timeout, it processes the message according to
Section 7. When a valid LocalRoute entry is created in the Local
Route Set, the route is also installed in the Routing Information
Base, and the router will begin sending the buffered IP packets. Any
retry timers for the corresponding RREQ are then cancelled.
During route discovery, all routers on the path learn a route to both
OrigAddr and TargAddr, so that routes are constructed in both
directions. The route is optimized for the forward route.
6.7. Processing Received Route Information
All AODVv2 route messages contain a route. A Route Request (RREQ)
contains a route toward OrigAddr (and other addresses as indicated by
OrigPrefixLen), and a Route Reply (RREP) contains a route toward
TargAddr (and other addresses as indicated by TargPrefixLen). All
AODVv2 routers that receive a route message are able to store the
route contained within it in their Local Route Set. Incoming
information is first checked to verify that it is both safe to use
and offers an improvement to existing information, as explained in
Section 6.7.1. If these checks pass, the Local Route Set MUST be
updated according to Section 6.7.2.
In the processes below, RteMsg is used to denote the route message,
AdvRte is used to denote the route contained within it, and
LocalRoute denotes an existing entry in the Local Route Set which
matches AdvRte on address, prefix length, and metric type.
Perkins, et al. Expires October 6, 2016 [Page 26]
Internet-Draft AODVv2 April 2016
AdvRte has the following properties:
o AdvRte.Address := network address given by combining
RteMsg.OrigAddr and RteMsg.OrigPrefixLen (in RREQ) or
RteMsg.TargAddr and RteMsg.TargPrefixLen (in RREP)
o AdvRte.PrefixLength := RteMsg.OrigPrefixLen (in RREQ) or
RteMsg.TargPrefixLen (in RREP). If no prefix length was included
in RteMsg, prefix length is the address length, in bits, of
RteMsg.OrigAddr (in RREQ) or RteMsg.TargAddr (in RREP)
o AdvRte.SeqNum := RteMsg.OrigSeqNum (in RREQ) or RteMsg.TargSeqNum
(in RREP)
o AdvRte.NextHop := RteMsg.IPSourceAddress (an address of the
sending interface of the router from which the RteMsg was
received)
o AdvRte.MetricType := RteMsg.MetricType
o AdvRte.Metric := RteMsg.Metric
o AdvRte.Cost := Cost(R) using the cost function associated with the
route's metric type, i.e. Cost(R) = AdvRte.Metric + Cost(L), as
described in Section 5, where L is the link from the advertising
router
o AdvRte.ValidityTime := RteMsg.ValidityTime, if included
6.7.1. Evaluating Route Information
An incoming advertised route (AdvRte) is compared to existing
LocalRoutes to determine whether the advertised route is to be used
to update the AODVv2 Local Route Set. The incoming route information
MUST be processed as follows:
1. Search for LocalRoutes in the Local Route Set matching AdvRte's
address, prefix length and metric type
* If no matching LocalRoute exists, AdvRte MUST be used to
update the Local Route Set and no further checks are required.
* If matching LocalRoutes are found, continue to Step 2.
2. Compare sequence numbers using the technique described in
Section 4.4
Perkins, et al. Expires October 6, 2016 [Page 27]
Internet-Draft AODVv2 April 2016
* If AdvRte is more recent than all matching LocalRoutes, AdvRte
MUST be used to update the Local Route Set and no further
checks are required.
* If AdvRte is stale, AdvRte MUST NOT be used to update the
Local Route Set. Ignore AdvRte for further processing.
* If the sequence numbers are equal, continue to Step 3.
3. Check that AdvRte is safe against routing loops compared to all
matching LocalRoutes (see Section 5)
* If LoopFree(AdvRte, LocalRoute) returns FALSE, ignore AdvRte
for further processing. AdvRte MUST NOT be used to update the
Local Route Set because using the incoming information might
cause a routing loop.
* If LoopFree(AdvRte, LocalRoute) returns TRUE, continue to Step
4.
4. Compare route costs
* If AdvRte is better than all matching LocalRoutes, it SHOULD
be used to update the Local Route Set because it offers
improvement. If it is not used to update the Local Route Set,
the existing non-optimal LocalRoute will continue to be used,
causing data traffic to use a non-optimal route.
* If AdvRte is equal in cost and LocalRoute is valid, AdvRte
SHOULD NOT be used to update the Local Route Set because it
will offer no improvement.
* If AdvRte is worse and LocalRoute is valid, ignore AdvRte for
further processing. AdvRte MUST NOT be used to update the
Local Route Set because it does not offer any improvement.
* If AdvRte is not better (i.e., it is worse or equal) but
LocalRoute is Invalid, AdvRte SHOULD be used to update the
Local Route Set because it can safely repair the existing
Invalid LocalRoute.
If the advertised route is to be used to update the Local Route Set,
the procedure in Section 6.7.2 MUST be followed. If not, non-optimal
routes will remain in the Local Route Set.
For information on how to apply these changes to the Routing
Information Base, see Section 4.5.
Perkins, et al. Expires October 6, 2016 [Page 28]
Internet-Draft AODVv2 April 2016
6.7.2. Applying Route Updates
After determining that AdvRte is to be used to update the Local Route
Set (as described in Section 6.7.1), the following procedure applies.
If AdvRte is learned from an RREQ message, the link to the next hop
neighbor may not be confirmed as bidirectional (see Section 4.3).
The route will offer improvement to the Local Route Set if the
neighbor can be confirmed. If there is no existing matching route,
AdvRte allows a corresponding RREP to be sent. If a matching entry
already exists, AdvRte offers potential improvement.
The route update is applied as follows:
1. If no existing entry in the Local Route Set matches AdvRte's
address, prefix length and metric type, continue to Step 4 and
create a new entry in the Local Route Set.
2. If two matching LocalRoutes exist in the Local Route Set, one is
a valid route, and one is an Unconfirmed route, AdvRte may offer
further improvement to the Unconfirmed route, or may offer an
update to the valid route.
* If AdvRte.NextHop's Neighbor.State is Unknown, the advertised
route may offer improvement to the existing valid route, if
the link to the next hop can be confirmed as bidirectional.
Continue processing from Step 5 to update the existing
Unconfirmed LocalRoute.
* If AdvRte.NextHop's Neighbor.State is Confirmed, the
advertised route offers an update or improvement to the
existing valid route. Continue processing from Step 5 to
update the existing valid LocalRoute.
3. If only one matching LocalRoute exists in the Local Route Set:
* If AdvRte.NextHop's Neighbor.State is Confirmed, continue
processing from Step 5 to update the existing LocalRoute.
* If AdvRte.NextHop's Neighbor.State is Unknown, AdvRte may
offer improvement the existing LocalRoute, if the link to
AdvRte.NextHop can be confirmed as bidirectional.
* If LocalRoute.State is Unconfirmed, AdvRte is an improvement
to an existing Unconfirmed route. Continue processing from
Step 5 to update the existing LocalRoute.
Perkins, et al. Expires October 6, 2016 [Page 29]
Internet-Draft AODVv2 April 2016
* If LocalRoute.State is Invalid, AdvRte can replace the
existing LocalRoute. Continue processing from Step 5 to
update the existing LocalRoute.
* If LocalRoute.State is Active or Idle, AdvRte SHOULD be stored
as an additional entry in the Local Route Set, with
LocalRoute.State set to Unconfirmed. Continue processing from
Step 4 to create a new LocalRoute.
4. Create an entry in the Local Route Set and initialize as follows:
* LocalRoute.Address := AdvRte.Address
* LocalRoute.PrefixLength := AdvRte.PrefixLength
* LocalRoute.MetricType := AdvRte.MetricType
5. Update the LocalRoute as follows:
* LocalRoute.SeqNum := AdvRte.SeqNum
* LocalRoute.NextHop := AdvRte.NextHop
* LocalRoute.NextHopInterface := interface on which RteMsg was
received
* LocalRoute.Metric := AdvRte.Cost
* LocalRoute.LastUsed := CurrentTime
* LocalRoute.LastSeqNumUpdate := CurrentTime
* LocalRoute.ExpirationTime := CurrentTime + AdvRte.ValidityTime
if a validity time exists, otherwise INFINITY_TIME
6. If a new LocalRoute was created, or if the existing
LocalRoute.State is Invalid or Unconfirmed, update LocalRoute as
follows:
* LocalRoute.State := Unconfirmed (if the next hop's
Neighbor.State is Unknown)
* LocalRoute.State := Idle (if the next hop's Neighbor.State is
Confirmed)
7. If an existing LocalRoute.State changed from Invalid or
Unconfirmed to become Idle, any matching Unconfirmed LocalRoute
with worse metric value SHOULD be expunged.
Perkins, et al. Expires October 6, 2016 [Page 30]
Internet-Draft AODVv2 April 2016
8. If an existing LocalRoute was updated with a better metric value,
any matching Unconfirmed LocalRoute with worse metric value
SHOULD be expunged.
9. If this update results in LocalRoute.State of Active or Idle,
which matches a route request which is still in progress, the
associated route request retry timers SHOULD be cancelled.
If this update to the Local Route Set results in two LocalRoutes to
the same address, the best LocalRoute will be Unconfirmed. In order
to improve the route used for forwarding, the router SHOULD try to
determine if the link to the next hop of that LocalRoute is
bidirectional, by using that LocalRoute to forward future RREPs and
request acknowledgements (see Section 7.2.1).
6.8. Suppressing Redundant Messages Using the Multicast Route Message
Table
When route messages are flooded in a MANET, an AODVv2 router may
receive multiple similar messages. Regenerating every one of these
gives little additional benefit, and generates unnecessary signaling
traffic and might generate unnecessary interference.
Each AODVv2 router stores information about recently received route
messages in the AODVv2 Multicast Route Message Table (Section 4.6).
Its Entries consist of:
o RteMsg.MessageType
o RteMsg.OrigAddr
o RteMsg.OrigPrefixLen
o RteMsg.TargAddr
o RteMsg.TargPrefixLen
o RteMsg.OrigSeqNum
o RteMsg.TargSeqNum
o RteMsg.MetricType
o RteMsg.Metric
o RteMsg.Timestamp
o RteMsg.RemoveTime
Perkins, et al. Expires October 6, 2016 [Page 31]
Internet-Draft AODVv2 April 2016
Entries in the Multicast Route Message Table SHOULD be maintained for
at least RteMsg_ENTRY_TIME after the last Timestamp update in order
to account for long-lived RREQs traversing the network. An entry
MUST be deleted when the sequence number is no longer valid, i.e.,
after MAX_SEQNUM_LIFETIME. Memory-constrained devices MAY remove the
entry before this time.
Received route messages are tested against previously received route
messages, and if determined to be redundant, regeneration or response
can be avoided.
To determine if a received message is redundant:
1. Search for an entry in the Multicast Route Message Table with the
same MessageType, OrigAddr, TargAddr, and MetricType
* If there is no entry, the message is not redundant.
* If there is an entry, continue to Step 2.
2. Compare sequence numbers using the technique described in
Section 4.4
* For RREQ messages, use OrigSeqNum of the entry for comparison.
For RREP messages, use TargSeqNum of the entry for comparison.
* If the entry has an older sequence number than the received
message, the message is not redundant.
* If the entry has a newer sequence number than the received
message, the message is redundant.
* If the entry has the same sequence number, continue to Step 3.
3. Compare the metric values
* If the entry has a Metric value that is worse than or equal to
the metric in the received message, the message is redundant.
* If the entry has a Metric value that is better than the metric
in the received message, the message is not redundant.
If the message is redundant, update the Timestamp and RemoveTime on
the entry, since matching route messages are still traversing the
network and this entry should be maintained. This message MUST NOT
be regenerated or responded to.
Perkins, et al. Expires October 6, 2016 [Page 32]
Internet-Draft AODVv2 April 2016
If the message is not redundant, create an entry or update the
existing entry.
To update a Multicast Route Message Table entry, set:
o RteMsg.MessageType := the message type of the received message
o RteMsg.OrigAddr := OrigAddr from the message
o RteMsg.OrigPrefixLen := the prefix length associated with OrigAddr
o RteMsg.TargAddr := TargAddr from the message
o RteMsg.TargPrefixLen := the prefix length associated with TargAddr
o RteMsg.OrigSeqNum := the sequence number associated with OrigAddr,
if present in the received message
o RteMsg.TargSeqNum := the sequence number associated with TargAddr,
if present in the received message
o RteMsg.Metric := the metric value associated with OrigAddr in a
received RREQ or TargAddr in a received RREP
o RteMsg.MetricType := the metric type associated with RteMsg.Metric
o RteMsg.Timestamp := CurrentTime
o RteMsg.RemoveTime := CurrentTime + MAX_SEQNUM_LIFETIME
Where the message is determined not redundant before Step 3, it MUST
be regenerated or responded to. When a message is determined to be
not redundant in Step 3, it MAY be suppressed to avoid extra control
traffic. However, since the processing of the message will result in
an update to the Local Route Set, the message SHOULD be regenerated
or responded to, to ensure other routers have up-to-date information
and the best metrics. If the message is not regenerated, the best
route may not be found. Regeneration or response is to be performed
using the processes outlined in Section 7.
6.9. Suppressing Redundant Route Error Messages using the Route Error
Table
In order to avoid flooding the network with RERR messages when a
stream of IP packets to an unreachable address arrives, an AODVv2
router SHOULD avoid creating duplicate messages by determining
whether an equivalent RERR has recently been sent. This is achieved
with the help of the Route Error Table (see Section 4.7).
Perkins, et al. Expires October 6, 2016 [Page 33]
Internet-Draft AODVv2 April 2016
To determine if a received RERR is redundant:
1. Search for an entry in the Route Error Table where:
* RerrMsg.AddressList == RERR.AddressList
* RerrMsg.PktSource == RERR.PktSource
If a matching entry is found, no further processing is required
and the RERR SHOULD NOT be sent.
2. If no matching entry is found, a new entry with the following
properties is created:
* RerrMsg.Timeout := CurrentTime + RERR_TIMEOUT
* RerrMsg.AddressList == RERR.AddressList
* RerrMsg.PktSource == RERR.PktSource
6.10. Local Route Set Maintenance
Route maintenance involves monitoring LocalRoutes in the Local Route
Set, updating LocalRoute.State to handle route timeouts and reporting
routes that become Invalid.
6.10.1. LocalRoute State Changes
During normal operation, AODVv2 does not require any explicit
timeouts to manage the lifetime of a route. At any time, any
LocalRoute MAY be examined and updated according to the rules below.
If timers are not used to prompt updates of LocalRoute.State, the
LocalRoute.State MUST be checked before IP packet forwarding and
before any operation based on LocalRoute.State.
Route timeout behaviour is as follows:
o An Unconfirmed route MUST be expunged at MAX_SEQNUM_LIFETIME after
LocalRoute.LastSeqNumUpdate.
o An Idle route MUST become Active when used to forward an IP
packet. If the route is not used to forward an IP packet within
MAX_IDLETIME, LocalRoute.State MUST become Invalid.
o An Active route which is a timed route (i.e., with
LocalRoute.ExpirationTime not equal to INFINITY_TIME) remains
Active until LocalRoute.ExpirationTime, after which it MUST become
Perkins, et al. Expires October 6, 2016 [Page 34]
Internet-Draft AODVv2 April 2016
Invalid. If it it not a timed route, it MUST become Idle if the
route is not used to forward an IP packet within ACTIVE_INTERVAL.
o An Invalid route SHOULD remain in the Local Route Set, since
LocalRoute.SeqNum is used to classify future information about
LocalRoute.Address as stale or fresh.
o In all cases, if the time since LocalRoute.LastSeqNumUpdate
exceeds MAX_SEQNUM_LIFETIME, LocalRoute.SeqNum must be set to
zero. This is required to ensure that any AODVv2 routers
following the initialization procedure can safely begin routing
functions using a new sequence number. A LocalRoute with
LocalRoute.State set to Active or Idle can remain in the Local
Route Set after removing the sequence number, for exmple if the
route is reliably carrying traffic. If LocalRoute.State is
Invalid, or later becomes Invalid, the LocalRoute MUST be expunged
from the Local Route Set.
LocalRoutes can become Invalid before a timeout occurs:
o If an external mechanism reports a link as broken, all LocalRoutes
using that link for LocalRoute.NextHop MUST immediately have
LocalRoute.State set to Invalid.
o LocalRoute.State MUST immediately be set to Invalid if a Route
Error (RERR) message is received where:
* The sender is LocalRoute.NextHop or PktSource is a Router
Client address
* There is an Address in AddressList which matches
LocalRoute.Address, and:
+ The prefix length associated with this Address, if any,
matches LocalRoute.PrefixLength
+ The sequence number associated with this Address, if any, is
newer or equal to LocalRoute.SeqNum (see Section 4.4)
+ The metric type associated with this Address matches
LocalRoute.MetricType
LocalRoutes are also updated when Neighbor.State is updated:
o While the value of Neighbor.State is set to Unknown, any routes in
the Local Route Set using that neighbor as a next hop MUST have
LocalRoute.State set to Unconfirmed.
Perkins, et al. Expires October 6, 2016 [Page 35]
Internet-Draft AODVv2 April 2016
o When the value of Neighbor.State is set to Confirmed, the
Unconfirmed routes in the Local Route Set using that neighbor as a
next hop MUST have LocalRoute.State set to Idle. Any other
matching LocalRoutes with metric values worse than
LocalRoute.Metric MUST be expunged from the Local Route Set.
o When the value of Neighbor.State is set to Blacklisted, any valid
routes in the Local Route Set using that neighbor for their next
hop MUST have LocalRoute.State set to Invalid.
o When a Neighbor Table entry is removed, all routes in the Local
Route Set using that neighbor as next hop MUST have
LocalRoute.State set to Invalid.
Memory constrained devices MAY choose to expunge routes from the
AODVv2 Local Route Set before LocalRoute.ExpirationTime, but MUST
adhere to the following rules:
o An Active route MUST NOT be expunged, as it is in use. If
deleted, IP traffic forwarded to this router will prompt
generation of a Route Error message, and it will be necessary for
a Route Request to be generated by the originator's router to re-
establish the route.
o An Idle route SHOULD NOT be expunged, as it is still valid for
forwarding IP traffic. If deleted, this could result in dropped
IP packets and a Route Request could be generated to re-establish
the route.
o Any Invalid route MAY be expunged. Least recently used Invalid
routes SHOULD be expunged first, since the sequence number
information is less likely to be useful.
o An Unconfirmed route MUST NOT be expunged if it was installed
within the last RREQ_WAIT_TIME, because it may correspond to a
route discovery in progress. A Route Reply message might be
received which needs to use the LocalRoute.NextHop information.
Otherwise, it MAY be expunged.
6.10.2. Reporting Invalid Routes
When LocalRoute.State changes from Active to Invalid as a result of a
broken link or a received Route Error (RERR) message, other AODVv2
routers MUST be informed by sending an RERR message containing
details of the invalidated route.
An RERR message MUST also be sent when an AODVv2 router receives an
IP packet to forward on behalf of another router but does not have a
Perkins, et al. Expires October 6, 2016 [Page 36]
Internet-Draft AODVv2 April 2016
valid route in its Routing Information Base for the destination of
the packet.
An RERR message MUST also be sent when an AODVv2 router receives an
RREP message to regenerate, but the LocalRoute to the OrigAddr in the
RREP has been lost or is marked as Invalid.
The packet or message triggering the RERR MUST be discarded.
Generation of an RERR message is described in Section 7.4.1.
7. AODVv2 Protocol Messages
AODVv2 defines four message types: Route Request (RREQ), Route Reply
(RREP), Route Reply Acknowledgement (RREP_Ack), and Route Error
(RERR).
Each AODVv2 message is defined as a set of data. Rules for the
generation, reception and regeneration of each message type are
described in the following sections. Section 8 discusses how the
data is mapped to [RFC5444] Message TLVs, Address Blocks, and Address
TLVs.
7.1. Route Request (RREQ) Message
Route Request messages are used in route discovery operations to
request a route to a specified target address. RREQ messages have
the following contents:
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| OrigSeqNum, (optional) TargSeqNum |
+-----------------------------------------------------------------+
| MetricType |
+-----------------------------------------------------------------+
| OrigMetric |
+-----------------------------------------------------------------+
| ValidityTime (optional) |
+-----------------------------------------------------------------+
Figure 1: RREQ message contents
AddressList
Perkins, et al. Expires October 6, 2016 [Page 37]
Internet-Draft AODVv2 April 2016
Contains OrigAddr and TargAddr, the source and destination
addresses of the IP packet for which a route is requested.
OrigAddr and TargAddr MUST be routable unicast addresses.
PrefixLengthList
Contains OrigPrefixLen, i.e., the length, in bits, of the prefix
associated with the Router Client entry which includes OrigAddr.
If omitted, the prefix length is equal to OrigAddr's address
length in bits.
OrigSeqNum
The sequence number associated with OrigAddr.
TargSeqNum
A sequence number associated with an existing Invalid route to
TargAddr. This MAY be included if available, and is useful for
the optional Intermediate RREP feature (see Section 10.3).
MetricType
The metric type associated with OrigMetric.
OrigMetric
The metric value associated with the LocalRoute to OrigAddr (and
to any other addresses included in the given prefix length), as
seen from the sender of the message.
ValidityTime
The length of time that the message sender is willing to offer a
route toward OrigAddr (and any other addresses included in the
given prefix length). Omitted if no time limit is imposed.
7.1.1. RREQ Generation
An RREQ is generated when an IP packet needs to be forwarded for a
Router Client, and no valid route currently exists for the packet's
destination in the Routing Information Base.
Before creating an RREQ, the router SHOULD check the Multicast Route
Message Table to see if an RREQ has recently been sent for the
requested destination. If so, and the wait time for a reply has not
yet been reached, the router SHOULD continue to await a response
without generating a new RREQ. If the timeout has been reached, a
new RREQ MAY be generated. If buffering is configured, incoming IP
packets awaiting this route SHOULD be buffered until the route
discovery is completed.
If the limit for the rate of AODVv2 control message generation has
been reached, no message SHOULD be generated. If approaching the
Perkins, et al. Expires October 6, 2016 [Page 38]
Internet-Draft AODVv2 April 2016
limit, the message should be sent if the priorities in Section 6.5
allow it.
To generate the RREQ, the router (referred to as RREQ_Gen) follows
this procedure:
1. Set AddressList := {OrigAddr, TargAddr}
2. For the PrefixLengthList:
* If OrigAddr is part of an address range configured as a Router
Client, set PrefixLengthList := {RouterClient.PrefixLength,
null}. This allows receiving routers to learn a route to all
the addresses included by the prefix length, not only to
OrigAddr.
* Otherwise, omit PrefixLengthList.
3. For OrigSeqNum:
* Increment the router SeqNum as specified in Section 4.4.
* Set OrigSeqNum := SeqNum.
4. For TargSeqNum:
* If an Invalid route exists in the Local Route Set matching
TargAddr using longest prefix matching and has a valid
sequence number, set TargSeqNum := LocalRoute.SeqNum.
* If no Invalid route exists in the Local Route Set matching
TargAddr, or the route doesn't have a sequence number, omit
TargSeqNum.
5. Include MetricType and set the type accordingly
6. Set OrigMetric := RouterClient.Cost for the Router Client entry
which includes OrigAddr
7. Include ValidityTime if advertising that the route to OrigAddr
(and any other addresses included in the given prefix length) via
this router is offered for a limited time, and set ValidityTime
accordingly
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8) which is multicast, by default, to LL-MANET-
Routers on all interfaces configured for AODVv2 operation.
Perkins, et al. Expires October 6, 2016 [Page 39]
Internet-Draft AODVv2 April 2016
7.1.2. RREQ Reception
Upon receiving a Route Request, an AODVv2 router performs the
following steps:
1. Update the Neighbor Table according to Section 6.3
* If the sender has Neighbor.State set to Blacklisted after the
update, ignore this RREQ for further processing.
2. Verify that the message contains the required data: OrigAddr,
TargAddr, OrigSeqNum, and OrigMetric, and that OrigAddr and
TargAddr are valid addresses (routable and unicast)
* If not, ignore this RREQ for further processing.
3. Check that the MetricType is supported and configured for use
* If not, ignore this RREQ for further processing.
4. Verify that the cost of the advertised route will not exceed the
maximum allowed metric value for the metric type (Metric <=
MAX_METRIC[MetricType] - Cost(L))
* If it will, ignore this RREQ for further processing.
5. Process the route to OrigAddr (and any other addresses included
in the given prefix length) as specified in Section 6.7
6. Check if the information in the message is redundant by comparing
to entries in the Multicast Route Message table, following the
procedure in Section 6.8
* If redundant, ignore this RREQ for further processing.
* If not redundant, continue processing.
7. Check if the TargAddr belongs to one of the Router Clients
* If so, generate an RREP as specified in Section 7.2.1.
* If not, continue to RREQ regeneration.
7.1.3. RREQ Regeneration
By regenerating an RREQ, a router advertises that it will forward IP
packets to the OrigAddr contained in the RREQ (and to other addresses
included in the given prefix length) according to the information
Perkins, et al. Expires October 6, 2016 [Page 40]
Internet-Draft AODVv2 April 2016
enclosed. The router MAY choose not to regenerate the RREQ, for
example if the router is heavily loaded or low on energy and
therefore unwilling to advertise routing capability for more traffic.
This could, however, decrease connectivity in the network or result
in non-optimal paths.
The RREQ SHOULD NOT be regenerated if the limit for the rate of
AODVv2 control message generation has been reached. If approaching
the limit, the message should be sent if the priorities in
Section 6.5 allow it.
The procedure for RREQ regeneration is as follows:
1. Set AddressList, PrefixLengthList, sequence numbers and
MetricType to the values in the received RREQ
2. Set OrigMetric := LocalRoute[OrigAddr].Metric
3. If the received RREQ contains a ValidityTime, or if the
regenerating router wishes to limit the time that it offers a
route to OrigAddr (and any other addresses included in the given
prefix length), the regenerated RREQ MUST include ValidityTime
* The ValidityTime is either the time limit the previous AODVv2
router specified, or the time limit this router wishes to
impose, whichever is lower.
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8) which is multicast, by default, to LL-MANET-
Routers on all interfaces configured for AODVv2 operation. However,
the regenerated RREQ can be unicast to the next hop address of the
LocalRoute toward TargAddr, if known.
7.2. Route Reply (RREP) Message
When a Route Request message is received, requesting a route to a
target address (TargAddr) which is configured as part of a Router
Client entry, a Route Reply message is sent in response. The RREP
offers a route to TargAddr (and any other addresses included in the
prefix length).
RREP messages have the following contents:
Perkins, et al. Expires October 6, 2016 [Page 41]
Internet-Draft AODVv2 April 2016
+-----------------------------------------------------------------+
| AckReq (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| TargSeqNum |
+-----------------------------------------------------------------+
| MetricType |
+-----------------------------------------------------------------+
| TargMetric |
+-----------------------------------------------------------------+
| ValidityTime (optional) |
+-----------------------------------------------------------------+
Figure 2: RREP message contents
AckReq
The address of the intended next hop of the RREP. This is
included when the link to the next hop toward OrigAddr is not
known to be bidirectional. It indicates that an acknowledgement
of the RREP is requested by the sender from the intended next hop
(see Section 6.2).
AddressList
Contains OrigAddr and TargAddr, the source and destination
addresses of the IP packet for which a route is requested.
OrigAddr and TargAddr MUST be routable unicast addresses.
PrefixLengthList
Contains TargPrefixLen, i.e., the length, in bits, of the prefix
associated with the Router Client entry which includes TargAddr.
If omitted, the prefix length is equal to TargAddr's address
length, in bits.
TargSeqNum
The sequence number associated with TargAddr.
MetricType
The metric type associated with TargMetric.
TargMetric
The metric value associated with the LocalRoute to TargAddr (and
any other addresses included in the given prefix length), as seen
from the sender of the message.
ValidityTime
Perkins, et al. Expires October 6, 2016 [Page 42]
Internet-Draft AODVv2 April 2016
The length of time that the message sender is willing to offer a
route toward TargAddr (and any other addresses included in the
given prefix length). Omitted if no time limit is imposed.
7.2.1. RREP Generation
A Route Reply message is generated when a Route Request for a Router
Client of the AODVv2 router arrives. This is the case when
RteMsg.TargAddr matches an address which is configured as a Router
Client of the AODVv2 router.
Before creating an RREP, the router SHOULD check if the corresponding
RREQ is redundant, i.e., a Route Reply has already been generated in
response to the RREQ, or if the limit for the rate of AODVv2 control
message generation has been reached. If so, the RREP SHOULD NOT be
created. If approaching the limit, the message should be sent if the
priorities in Section 6.5 allow it.
The RREP will follow the path of the route to OrigAddr. If the best
route to OrigAddr in the Local Route Set is Unconfirmed, the link to
the next hop neighbor is not yet confirmed as bidirectional (as
described in Section 6.2). In this case the RREP MUST include AckReq
set to the intended next hop address. The AckReq indicates that an
acknowledgement to the RREP is requested from the intended next hop
router in the form of a Route Reply Acknowledgement (RREP_Ack). If
the best route to OrigAddr in the Local Route Set is valid, the link
to the next hop neighbor is already confirmed as bidirectional, and
the AckReq can be omitted.
Implementations MAY allow a number of retries of the RREP if a
requested acknowledgement is not received within
RREP_Ack_SENT_TIMEOUT, doubling the timeout with each retry, up to a
maximum of RREP_RETRIES, using the same exponential backoff described
in Section 6.6 for RREQ retries. The acknowledgement MUST be
considered to have failed after the wait time for an RREP_Ack
response to the final RREP.
To generate the RREP, the router (also referred to as RREP_Gen)
follows this procedure:
1. If the link to the next hop router toward OrigAddr is not known
to be bidirectional, include the AckReq with the address of the
intended next hop router (see Section 8.2.3)
2. Set Address List := {OrigAddr, TargAddr}
3. For the PrefixLengthList:
Perkins, et al. Expires October 6, 2016 [Page 43]
Internet-Draft AODVv2 April 2016
* If TargAddr is part of an address range configured as a Router
Client, set PrefixLengthList := {null,
RouterClient.PrefixLength}. This allows receiving routers to
learn a route to all the addresses included by the prefix
length, not only to TargAddr.
* Otherwise, omit PrefixLengthList.
4. For the TargSeqNum:
* Increment the router SeqNum as specified in Section 4.4.
* Set TargSeqNum := SeqNum.
5. Include MetricType and set the type to match the MetricType in
the received RREQ message
6. Set TargMetric := RouterClient.Cost for the Router Client entry
which includes TargAddr
7. Include ValidityTime if advertising that the route to TargAddr
(and any other addresses included in the given prefix length) via
this router is offered for a limited time, and set ValidityTime
accordingly
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8). If the Neighbor Table contains an entry for
the neighbor stored as LocalRoute[OrigAddr].NextHop, with
Neighbor.State set to Confirmed, the RREP is sent by unicast to
LocalRoute[OrigAddr].NextHop. Otherwise, the RREP is sent multicast
to LL-MANET-Routers. The RREP MUST be sent over the same interface
on which the RREQ that triggered it was received.
7.2.2. RREP Reception
Upon receiving a Route Reply, an AODVv2 router performs the following
steps:
1. Verify that the message contains the required data: OrigAddr,
TargAddr, TargSeqNum, and TargMetric, and that OrigAddr and
TargAddr are valid addresses (routable and unicast)
* If not, ignore this RREP for further processing.
2. Check that the MetricType is supported and configured for use
* If not, ignore this RREP for further processing.
Perkins, et al. Expires October 6, 2016 [Page 44]
Internet-Draft AODVv2 April 2016
3. If this RREP does not correspond to a RREQ generated or
regenerated in the last RREQ_WAIT_TIME, ignore for further
processing.
4. Update the Neighbor Table according to Section 6.3
5. Verify that the cost of the advertised route does not exceed the
maximum allowed metric value for the metric type (Metric <=
MAX_METRIC[MetricType] - Cost(L))
* If it does, ignore this RREP for further processing.
6. If the AckReq is present, check the intended recipient of the
received RREP:
* If there is an entry in the Router Client Table where
RouterClient.IPAddress matches the address associated with
the AckReq (see Section 8.2.3), the receiving router is the
intended recipient. Send an acknowledgement as specified in
Section 7.3 and continue processing.
* Otherwise, ignore this RREP for further processing.
7. Process the route to TargAddr (and any other addresses included
in the given prefix length) as specified in Section 6.7
8. Check if the message is redundant by comparing to entries in the
Multicast Route Message table (Section 6.8)
* If redundant, ignore this RREP for further processing.
* If not redundant, save the information in the Multicast Route
Message table to identify future redundant RREP messages and
continue processing.
9. Check if the OrigAddr belongs to one of the Router Clients
* If so, no further processing is necessary.
* If not, continue to Step 10.
10. Check if a valid (Active or Idle) or Unconfirmed LocalRoute
exists to OrigAddr
* If so, continue to RREP regeneration.
Perkins, et al. Expires October 6, 2016 [Page 45]
Internet-Draft AODVv2 April 2016
* If not, a Route Error message SHOULD be transmitted to
TargAddr according to Section 7.4.1 and the RREP SHOULD be
discarded and not regenerated.
7.2.3. RREP Regeneration
A received Route Reply message is regenerated toward OrigAddr. By
regenerating a RREP, a router advertises that it will forward IP
packets to TargAddr.
The RREP SHOULD NOT be regenerated if CONTROL_TRAFFIC_LIMIT has been
reached. If approaching the limit, the message should be sent if the
priorities in Section 6.5 allow it. Otherwise, the router MUST
regenerate the RREP.
The procedure for RREP regeneration is as follows:
1. If the link to the next hop router toward OrigAddr is not known
to be bidirectional, include the AckReq with the address of the
intended next hop router
2. Set AddressList, PrefixLengthList, TargSeqNum and MetricType to
the values in the received RREP
3. Set TargMetric := LocalRoute[TargAddr].Metric
4. If the received RREP contains a ValidityTime, or if the
regenerating router wishes to limit the time that it will offer a
route to TargAddr (and any other addresses included in the given
prefix length), the regenerated RREP MUST include ValidityTime
* The ValidityTime is either the time limit the previous AODVv2
router specified, or the time limit this router wishes to
impose, whichever is lower.
This AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8). If the Neighbor Table contains an entry for
the neighbor stored as LocalRoute[OrigAddr].NextHop, with
Neighbor.State set to Confirmed, the RREP is sent by unicast to
LocalRoute[OrigAddr].NextHop. Otherwise, the RREP is sent multicast
to LL-MANET-Routers. The RREP MUST be sent over
LocalRoute[OrigAddr].NextHopInterface.
7.3. Route Reply Acknowledgement (RREP_Ack) Message
The Route Reply Acknowledgement is a response to a Route Reply
message. When the RREP_Ack message is received by the sender of the
Perkins, et al. Expires October 6, 2016 [Page 46]
Internet-Draft AODVv2 April 2016
RREP, it confirms that the link between the two routers is
bidirectional (see Section 6.2). The RREP_Ack has no further data.
7.3.1. RREP_Ack Generation
An RREP_Ack MUST be generated if a received Route Reply includes an
AckReq with an address matching one of the receiving router's IP
addresses. The RREP_Ack SHOULD NOT be generated if the limit for the
rate of AODVv2 control message generation has been reached.
There is no further data in an RREP_Ack. The [RFC5444]
representation is discussed in Section 8. The RREP_Ack is unicast,
by default, to the source IP address of the RREP message that
requested it. It MUST be sent over the same interface on which the
RREP that triggered it was received.
7.3.2. RREP_Ack Reception
Upon receiving an RREP_Ack, an AODVv2 router performs the following
steps:
1. Check if the RREP_Ack was expected:
* Check if the Multicast Route Message Table contains an entry
where:
+ RteMsg.MessageType == RREP
+ RteMsg.AckReqAddr matches the source IP address of the
RREP_Ack
+ RteMsg.Timestamp > CurrentTime - RREP_Ack_SENT_TIMEOUT
* If it does, the router cancels any associated timeouts and
processing continues to Step 2.
* Otherwise no actions are required and processing ends.
2. Update the Neighbor Table according to Section 6.3
7.4. Route Error (RERR) Message
A Route Error message is generated by an AODVv2 router to notify
other AODVv2 routers of routes that are no longer available. An RERR
message has the following contents:
Perkins, et al. Expires October 6, 2016 [Page 47]
Internet-Draft AODVv2 April 2016
+-----------------------------------------------------------------+
| PktSource (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| SeqNumList (optional) |
+-----------------------------------------------------------------+
| MetricTypeList |
+-----------------------------------------------------------------+
Figure 3: RERR message contents
PktSource
The source address of the IP packet triggering the RERR. If the
RERR is triggered by a broken link, PktSource is not required.
AddressList
The addresses of the routes not available through RERR_Gen.
PrefixLengthList
The prefix lengths, in bits, associated with the routes not
available through RERR_Gen. These values indicate whether routes
represent a single device or an address range.
SeqNumList
The sequence numbers of the routes not available through RERR_Gen
(where known).
MetricTypeList
The metric types associated with the routes not available through
RERR_Gen.
7.4.1. RERR Generation
A Route Error message is generated when an AODVv2 router (also
referred to as RERR_Gen) needs to report that a destination is not
reachable. There are three events that cause this response:
o When an IP packet that has been forwarded from another router, but
cannot be forwarded further because there is no valid route in the
Routing Information Base for its destination, the source of the
packet needs to be informed that the route to the destination of
the packet does not exist. The RERR generated MUST include
PktSource set to the source address of the IP packet, and MUST
contain only one unreachable address in the AddressList, i.e., the
destination address of the IP packet. RERR_Gen MUST discard the
Perkins, et al. Expires October 6, 2016 [Page 48]
Internet-Draft AODVv2 April 2016
IP packet that triggered generation of the RERR. The prefix
length, sequence number and metric type SHOULD be included if
known from an existing Invalid LocalRoute to the unreachable
address.
o When an RREP message cannot be regenerated because the LocalRoute
to OrigAddr has been lost or is Invalid, RREP_Gen needs to be
informed that the route to OrigAddr does not exist. The RERR
generated MUST include PktSource set to the TargAddr of the RREP,
and MUST contain only one unreachable address in the AddressList,
the OrigAddr from the RREP. RERR_Gen MUST discard the RREP
message that triggered generation of the RERR. The prefix length,
sequence number and metric type SHOULD be included if known from
an Invalid LocalRoute to the unreachable address.
o When a link breaks, multiple LocalRoutes may become Invalid, and
the RERR generated MAY contain multiple unreachable addresses.
The RERR MUST include MetricTypeList. PktSource is omitted. All
previously Active LocalRoutes that used the broken link MUST be
reported. The AddressList, PrefixLengthList, SeqNumList, and
MetricTypeList will contain entries for each LocalRoute which has
become Invalid. An RERR message is only sent if an Active
LocalRoute becomes Invalid, though an AODVv2 router can also
include Idle LocalRoutes that become Invalid if the configuration
parameter ENABLE_IDLE_IN_RERR is set (see Section 11.3).
The RERR SHOULD NOT be generated if CONTROL_TRAFFIC_LIMIT has been
reached. If approaching the limit, the message should be sent if the
priorities in Section 6.5 allow it. The RERR also SHOULD NOT be
generated if it is a duplicate, as determined by Section 6.9.
Incidentally, if an AODVv2 router receives an ICMP error packet to or
from the address of one of its Router Clients, it forwards the ICMP
packet in the same way as any other IP packet, and will not generate
any RERR message based on the contents of the ICMP packet.
To generate the RERR, the router follows this procedure:
1. If necessary, include PktSource and set the value as given above
2. For each LocalRoute that needs to be reported:
* Insert LocalRoute.Address into the AddressList.
* Insert LocalRoute.PrefixLength into PrefixLengthList, if known
and not equal to the address length.
* Insert LocalRoute.SeqNum into SeqNumList, if known.
Perkins, et al. Expires October 6, 2016 [Page 49]
Internet-Draft AODVv2 April 2016
* Insert LocalRoute.MetricType into MetricTypeList.
The AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8).
If the RERR is sent in response to an undeliverable IP packet or RREP
message, i.e., if PktSource is included, the RERR SHOULD be sent
unicast to the next hop on the route to PktSource. It MUST be sent
over the same interface on which the undeliverable IP packet was
received. If there is no route to PktSource, the RERR MUST be
multicast to LL-MANET-Routers. If the RERR is sent in response to a
broken link, i.e., PktSource is not included, the RERR is, by
default, multicast to LL-MANET-Routers.
Section 10.2 describes processing steps when the optional precursor
lists feature is enabled.
7.4.2. RERR Reception
Upon receiving a Route Error, an AODVv2 router performs the following
steps:
1. Verify that the message contains the required data: at least one
unreachable address
* If not, ignore this RERR for further processing.
2. For each address in the AddressList, check that:
* The address is valid (routable and unicast)
* The MetricType is supported and configured for use
* There is a LocalRoute with the same MetricType matching the
address using longest prefix matching
* Either the LocalRoute's next hop is the sender of the RERR and
the next hop interface is the interface on which the RERR was
received, or PktSource is present in the RERR and is a Router
Client address
* The unreachable address' sequence number is either unknown, or
is greater than the LocalRoute's sequence number
If any of the above are false the address does not match a
LocalRoute and MUST NOT be processed or regenerated in a RERR.
Perkins, et al. Expires October 6, 2016 [Page 50]
Internet-Draft AODVv2 April 2016
If all of the above are true, the LocalRoute which matches the
address is no longer valid. If the LocalRoute was previously
Active, it MUST be reported in a regenerated RERR. If the
LocalRoute was previously Idle, it MAY be reported in a
regenerated RERR, if ENABLE_IDLE_IN_RERR is configured. The
Local Route Set MUST be updated according to these rules:
* If the LocalRoute's prefix length is the same as the
unreachable address' prefix length, set LocalRoute.State to
Invalid.
* If the LocalRoute's prefix length is longer than the
unreachable address' prefix length, the LocalRoute MUST be
expunged from the Local Route Set, since it is a sub-route of
the route which is reported to be Invalid.
* If the prefix length is different, create a new LocalRoute
with the unreachable address, and its prefix length and
sequence number, and set LocalRoute.State to Invalid. These
Invalid routes are retained to avoid processing stale
messages.
* Update the sequence number on the existing LocalRoute, if the
reported sequence number is determined to be newer using the
comparison technique described in Section 4.4.
3. If there are previously Active LocalRoutes that MUST be reported,
as identified in step 2.:
* Regenerate the RERR as detailed in Section 7.4.3.
7.4.3. RERR Regeneration
The Route Error message SHOULD NOT be regenerated if
CONTROL_TRAFFIC_LIMIT has been reached. If approaching the limit,
the message should be sent if the priorities in Section 6.5 allow it.
The procedure for RERR regeneration is as follows:
1. If PktSource was included in the original RERR, and PktSource is
not a Router Client, copy it into the regenerated RERR
2. For each LocalRoute that needs to be reported as identified in
Section 7.4.1:
* Insert LocalRoute.Address into the AddressList.
Perkins, et al. Expires October 6, 2016 [Page 51]
Internet-Draft AODVv2 April 2016
* Insert LocalRoute.PrefixLength into PrefixLengthList, if known
and not equal to the address length.
* Insert LocalRoute.SeqNum into SeqNumList, if known.
* Insert LocalRoute.MetricType into MetricTypeList.
The AODVv2 message is used to create a corresponding [RFC5444]
message (see Section 8). If the RERR contains PktSource, the
regenerated RERR SHOULD be sent unicast to the next hop on the
LocalRoute to PktSource. It MUST be sent over the same interface on
which the undeliverable IP packet was received. If there is no route
to PktSource, or PktSource is a Router Client, it MUST be multicast
to LL-MANET-Routers. If the RERR is sent in response to a broken
link, the RERR is, by default, multicast to LL-MANET-Routers.
8. RFC 5444 Representation
AODVv2 specifies that all control messages between routers MUST use
the Generalized Mobile Ad Hoc Network Packet/Message Format
[RFC5444], and therefore AODVv2's route messages comprise data which
is mapped to message elements in [RFC5444].
[RFC5444] provides a multiplexed transport for multiple protocols.
An [RFC5444] multiplexer MAY choose to optimize the content of
certain message elements to reduce control message overhead.
A brief summary of the [RFC5444] format:
1. A packet contains zero or more messages
2. A message contains a Message Header, one Message TLV Block, zero
or more Address Blocks, and one Address Block TLV Block per
Address Block
3. The Message TLV Block MAY contain zero or more Message TLVs
4. An Address Block TLV Block MAY include zero or more Address Block
TLVs
5. Each TLV value in an Address Block TLV Block can be associated
with all of the addresses, or with a contiguous set of addresses,
or with a single address in the Address Block
AODVv2 does not require access to the [RFC5444] packet header.
In the message header, AODVv2 uses <msg-type> and <msg-addr-length>.
The <msg-addr-length> field indicates the length of any addresses in
Perkins, et al. Expires October 6, 2016 [Page 52]
Internet-Draft AODVv2 April 2016
the message, using <msg-addr-length> := (address length in octets -
1), i.e. 3 for IPv4 and 15 for IPv6.
The addresses in an Address Block MAY appear in any order, and values
in a TLV in the Address Block TLV Block must be associated with the
correct address in the Address Block by the [RFC5444] implementation.
To indicate which value is associated with each address, the AODVv2
message representation uses lists where the order of the addresses in
the AODVv2 AddressList matches the order of values in other data
lists, e.g., the order of SeqNums in the SeqNumList in an RERR.
[RFC5444] maps this information to Address Block TLVs associated with
the relevant addresses in the Address Block.
Each address included in the Address Block is identified as OrigAddr,
TargAddr, PktSource, or Unreachable Address by including an
ADDRESS_TYPE TLV in the Address Block TLV Block.
The following sections show how AODVv2 data is represented in
[RFC5444] messages. AODVv2 makes use of the VALIDITY_TIME Address
Block TLV from [RFC5497], and defines (in Section 12) a number of new
TLVs. To calculate the time-value for the VALIDITY_TIME Address
Block TLV, the value of C is defined in Section 11.2.
Where the extension type of a TLV is set to zero, this is the default
[RFC5444] value and the extension type will not be included in the
message.
8.1. Route Request Message Representation
8.1.1. Message Header
+-------+---------------+--------+
| Data | Header Field | Value |
+-------+---------------+--------+
| None | <msg-type> | RREQ |
+-------+---------------+--------+
8.1.2. Message TLV Block
An RREQ contains no Message TLVs.
8.1.3. Address Block
An RREQ contains two addresses, OrigAddr and TargAddr, and each
address has an associated prefix length. If the prefix length has
not been included in the AODVv2 message, it is equal to the address
length in bits.
Perkins, et al. Expires October 6, 2016 [Page 53]
Internet-Draft AODVv2 April 2016
+-------------------------+------------------------------+
| Data | Address Block |
+-------------------------+------------------------------+
| OrigAddr/OrigPrefixLen | <address> + <prefix-length> |
| TargAddr/TargPrefixLen | <address> + <prefix-length> |
+-------------------------+------------------------------+
8.1.4. Address Block TLV Block
Address Block TLVs are always associated with one or more addresses
in the Address Block. The following sections show the TLVs that
apply to each address.
8.1.4.1. Address Block TLVs for OrigAddr
+--------------+---------------+------------+-----------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+--------------+---------------+------------+-----------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_ORIGADDR |
| OrigSeqNum | SEQ_NUM | 0 | Sequence number of |
| | | | RREQ_Gen, the router |
| | | | which initiated route |
| | | | discovery. |
| OrigMetric | PATH_METRIC | MetricType | Metric value for the |
| /MetricType | | | route to OrigAddr, |
| | | | using MetricType. |
| ValidityTime | VALIDITY_TIME | 0 | ValidityTime for |
| | | | route to OrigAddr, |
| | | | represented as |
| | | | detailed in |
| | | | [RFC5497]. |
+--------------+---------------+------------+-----------------------+
8.1.4.2. Address Block TLVs for TargAddr
+------------+--------------+-------------+-------------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+------------+--------------+-------------+-------------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_TARGADDR |
| TargSeqNum | SEQ_NUM | 0 | The last known |
| | | | TargSeqNum for |
| | | | TargAddr. |
+------------+--------------+-------------+-------------------------+
Perkins, et al. Expires October 6, 2016 [Page 54]
Internet-Draft AODVv2 April 2016
8.2. Route Reply Message Representation
8.2.1. Message Header
+-------+---------------+--------+
| Data | Header Field | Value |
+-------+---------------+--------+
| None | <msg-type> | RREP |
+-------+---------------+--------+
8.2.2. Message TLV Block
An RREP contains no Message TLVs.
8.2.3. Address Block
An RREP contains a minimum of two addresses, OrigAddr and TargAddr,
and each address has an associated prefix length. If the prefix
length has not been included in the AODVv2 message, it is equal to
the address length in bits.
It MAY also contain the address of the intended next hop, in order to
request acknowledgement to confirm bidirectionality of the link, as
described in Section 6.2. The prefix length associated with this
address is equal to the address length in bits.
+-------------------------+------------------------------+
| Data | Address Block |
+-------------------------+------------------------------+
| OrigAddr/OrigPrefixLen | <address> + <prefix-length> |
| TargAddr/TargPrefixLen | <address> + <prefix-length> |
| AckReq | <address> + <prefix-length> |
+-------------------------+------------------------------+
8.2.4. Address Block TLV Block
Address Block TLVs are always associated with one or more addresses
in the Address Block. The following sections show the TLVs that
apply to each address.
8.2.4.1. Address Block TLVs for OrigAddr
+-------+---------------+-----------------+--------------------+
| Data | TLV Type | Extension Type | Value |
+-------+---------------+-----------------+--------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_ORIGADDR |
+-------+---------------+-----------------+--------------------+
Perkins, et al. Expires October 6, 2016 [Page 55]
Internet-Draft AODVv2 April 2016
8.2.4.2. Address Block TLVs for TargAddr
+--------------+---------------+------------+-----------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+--------------+---------------+------------+-----------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_TARGADDR |
| TargSeqNum | SEQ_NUM | 0 | Sequence number of |
| | | | RREP_Gen, the router |
| | | | which created the |
| | | | RREP. |
| TargMetric | PATH_METRIC | MetricType | Metric value for the |
| /MetricType | | | route to TargAddr, |
| | | | using MetricType. |
| ValidityTime | VALIDITY_TIME | 0 | ValidityTime for |
| | | | route to TargAddr, |
| | | | represented as |
| | | | detailed in |
| | | | [RFC5497]. |
+--------------+---------------+------------+-----------------------+
8.2.4.3. Address Block TLVs for AckReq Intended Recipient Address
+-------+---------------+-----------------+------------------+
| Data | TLV Type | Extension Type | Value |
+-------+---------------+-----------------+------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_INTEND |
+-------+---------------+-----------------+------------------+
8.3. Route Reply Acknowledgement Message Representation
8.3.1. Message Header
+-------+---------------+-----------+
| Data | Header Field | Value |
+-------+---------------+-----------+
| None | <msg-type> | RREP_Ack |
+-------+---------------+-----------+
8.3.2. Message TLV Block
An RREP_Ack contains no Message TLVs.
8.3.3. Address Block
An RREP_Ack contains no Address Block.
Perkins, et al. Expires October 6, 2016 [Page 56]
Internet-Draft AODVv2 April 2016
8.3.4. Address Block TLV Block
An RREP_Ack contains no Address Block TLV Block.
8.4. Route Error Message Representation
Route Error Messages MAY be split into multiple [RFC5444] messages
when the desired contents would exceed the MTU. However, all of the
resulting messages MUST have the same message header as described
below. If PktSource is included in the AODVv2 message, it MUST be
included in all of the resulting [RFC5444] messages.
8.4.1. Message Header
+-------+---------------+--------+
| Data | Header Field | Value |
+-------+---------------+--------+
| None | <msg-type> | RERR |
+-------+---------------+--------+
8.4.2. Message TLV Block
An RERR contains no Message TLVs.
8.4.3. Address Block
The Address Block in an RERR MAY contain PktSource, the source
address of the IP packet triggering RERR generation, as detailed in
Section 7.4. The prefix length associated with PktSource is equal to
the address length in bits.
Address Block always contains one address per route that is no longer
valid, and each address has an associated prefix length. If a prefix
length has not been included for this address, it is equal to the
address length in bits.
+------------------------------+------------------------------------+
| Data | Address Block |
+------------------------------+------------------------------------+
| PktSource | <address> + <prefix-length> for |
| | PktSource |
| AddressList/PrefixLengthList | <address> + <prefix-length> for |
| | each unreachable address in |
| | AddressList |
+------------------------------+------------------------------------+
Perkins, et al. Expires October 6, 2016 [Page 57]
Internet-Draft AODVv2 April 2016
8.4.4. Address Block TLV Block
Address Block TLVs are always associated with one or more addresses
in the Address Block. The following sections show the TLVs that
apply to each type of address in the RERR.
8.4.4.1. Address Block TLVs for PktSource
+------------+---------------+----------------+---------------------+
| Data | TLV Type | Extension Type | Value |
+------------+---------------+----------------+---------------------+
| PktSource | ADDRESS_TYPE | 0 | ADDRTYPE_PKTSOURCE |
+------------+---------------+----------------+---------------------+
8.4.4.2. Address Block TLVs for Unreachable Addresses
+----------------+--------------+------------+----------------------+
| Data | TLV Type | Extension | Value |
| | | Type | |
+----------------+--------------+------------+----------------------+
| None | ADDRESS_TYPE | 0 | ADDRTYPE_UNREACHABLE |
| SeqNumList | SEQ_NUM | 0 | Sequence number |
| | | | associated with |
| | | | invalid route to the |
| | | | unreachable address. |
| MetricTypeList | PATH_METRIC | MetricType | None. Extension Type |
| | | | set to MetricType of |
| | | | the route to the |
| | | | unreachable address. |
+----------------+--------------+------------+----------------------+
9. Simple External Network Attachment
Figure 4 shows a stub (i.e., non-transit) network of AODVv2 routers
which is attached to an external network via a single External
Network Access Router (ENAR). The interface to the external network
MUST NOT be configured in the InterfaceSet
As in any externally-attached network, AODVv2 routers and Router
Clients that wish to be reachable from the external network MUST have
IP addresses within the ENAR's routable and topologically correct
prefix (e.g., 191.0.2.0/24 in Figure 4). This AODVv2 network and
networks attached to routers within it will be advertised to the
external network using procedures which are out of scope for this
specification.
Perkins, et al. Expires October 6, 2016 [Page 58]
Internet-Draft AODVv2 April 2016
/-------------------------\
/ +----------------+ \
/ | AODVv2 Router | \
| | 191.0.2.2/32 | |
| +----------------+ | Routable
| +-----+--------+ Prefix
| | ENAR | /191.0.2.0/24
| | AODVv2 Router| /
| | 191.0.2.1 |/ /---------------\
| | serving net +------+ External \
| | 191.0.2.0/24 | \ Network /
| +-----+--------+ \---------------/
| +----------------+ |
| | AODVv2 Router | |
| | 191.0.2.3/32 | |
\ +----------------+ /
\ /
\-------------------------/
Figure 4: Simple External Network Attachment Example
When an AODVv2 router within the AODVv2 MANET wants to discover a
route toward an address on the external network, it uses the normal
AODVv2 route discovery for that IP Destination Address. The ENAR
MUST respond to RREQ on behalf of all external network destinations,
e.g., destinations not on the configured 191.0.2.0/24 network. RREQs
for addresses inside the AODVv2 network, e.g. destinations on the
configured 191.0.2.0/24 network, are handled using the standard
processes described in Section 7.
When an IP packet from an address on the external network destined
for an address in the AODVv2 MANET reaches the ENAR, if the ENAR does
not have a route toward that destination in its Routing Information
Base, it will perform normal AODVv2 route discovery for that
destination.
Configuring the ENAR as a default router is outside the scope of this
specification.
10. Optional Features
A number of optional features for AODVv2, associated initially with
AODV, may be useful in networks with greater mobility or larger
populations, or networks requiring reduced latency for application
launches. These features are not required by minimal
implementations.
Perkins, et al. Expires October 6, 2016 [Page 59]
Internet-Draft AODVv2 April 2016
10.1. Expanding Rings Multicast
For multicast RREQ, the [RFC5444] message may initially be limited to
a low number of hops to limit the RREQ propagation to a subset of the
local network and possibly reduce route discovery overhead. If the
route is not discovered, the number of hops allowed for distribution
of the RREQ is increased, in accordance with an expanding ring
search, as described in [RFC3561].
10.2. Precursor Lists
This section specifies an interoperable enhancement to AODVv2
enabling more economical Route Error notifications.
There can be several sources of traffic for a certain destination.
Each source of traffic and each upstream router between the
forwarding AODVv2 router and the traffic source is known as a
"precursor" for the destination. For each destination, an AODVv2
router MAY choose to keep track of precursors that have provided
traffic for that destination. Route Error messages about that
destination can be sent unicast to these precursors instead of
multicast to all AODVv2 routers.
Since an RERR will be regenerated if it comes from a next hop on a
valid LocalRoute, the RERR SHOULD ideally be sent backwards along the
route that the source of the traffic uses, to ensure it is
regenerated at each hop and reaches the traffic source. If the
reverse path is unknown, the RERR SHOULD be sent toward the source
along some other route. Therefore, the options for saving precursor
information are as follows:
o Save the next hop on an existing route to the IP packet's source
address as the precursor. In this case, it is not guaranteed that
an RERR that is sent will follow the reverse of the source's
route. In rare situations, this may prevent the route from being
invalidated at the source of the data traffic.
o Save the IP packet's source address as the precursor. In this
case, the RERR can be sent along any existing route to the source
of the data traffic, and SHOULD include PktSource to ensure that
the route will be invalidated at the source of the traffic, in
case the RERR does not follow the reverse of the source's route.
o By inspecting the MAC address of each forwarded IP packet,
determine which router forwarded the packet, and save the router
address as a precursor. This ensures that when an RERR is sent to
the precursor router, the route will be invalidated at that
Perkins, et al. Expires October 6, 2016 [Page 60]
Internet-Draft AODVv2 April 2016
router, and the RERR will be regenerated toward the source of the
IP packet.
During normal operation, each AODVv2 router maintaining precursor
lists for a LocalRoute must update the precursor list whenever it
uses this route to forward traffic to the destination. Precursors
are classified as Active if traffic has recently been forwarded by
the precursor. The precursor is marked with a timestamp to indicate
the time it last forwarded traffic on this route.
When an AODVv2 router detects that one or more LocalRoutes are
broken, it MAY notify each Active precursor using a unicast Route
Error message instead of creating multicast traffic. Unicast is
applicable when there are few Active precursors compared to the
number of neighboring AODVv2 routers. However, the default multicast
behavior is still preferable when there are many precursors, since
fewer message transmissions are required.
When an AODVv2 router supporting precursor lists receives an RERR
message, it MAY identify the list of its own affected Active
precursors for the routes in the RERR, and choose to send a unicast
RERR to those, rather than send a multicast RERR.
When a LocalRoute is expunged, any precursor list associated with it
MUST also be expunged.
10.3. Intermediate RREP
Without iRREP, only the AODVv2 router responsible for the target
address can respond to an RREQ. Using iRREP, route discoveries can
be faster and create less control traffic. This specification has
been published as a separate Internet Draft [I-D.perkins-irrep].
10.4. Message Aggregation Delay
The aggregation of multiple messages into a packet is specified in
[RFC5444].
Implementations MAY choose to briefly delay transmission of messages
for the purpose of aggregation (into a single packet) or to improve
performance by using jitter [RFC5148].
11. Configuration
AODVv2 uses various parameters which can be grouped into the
following categories:
o Timers
Perkins, et al. Expires October 6, 2016 [Page 61]
Internet-Draft AODVv2 April 2016
o Protocol constants
o Administrative parameters and controls
This section show the parameters along with their definitions and
default values (if any).
Note that several fields have limited size (bits or bytes). These
sizes and their encoding may place specific limitations on the values
that can be set.
11.1. Timers
AODVv2 requires certain timing information to be associated with
Local Route Set entries and message replies. The default values are
as follows:
+------------------------+----------------+
| Name | Default Value |
+------------------------+----------------+
| ACTIVE_INTERVAL | 5 second |
| MAX_IDLETIME | 200 seconds |
| MAX_BLACKLIST_TIME | 200 seconds |
| MAX_SEQNUM_LIFETIME | 300 seconds |
| RERR_TIMEOUT | 3 seconds |
| RteMsg_ENTRY_TIME | 12 seconds |
| RREQ_WAIT_TIME | 2 seconds |
| RREP_Ack_SENT_TIMEOUT | 1 second |
| RREQ_HOLDDOWN_TIME | 10 seconds |
+------------------------+----------------+
Table 2: Timing Parameter Values
The above timing parameter values have worked well for small and
medium well-connected networks with moderate topology changes. The
timing parameters SHOULD be administratively configurable. Ideally,
for networks with frequent topology changes the AODVv2 parameters
SHOULD be adjusted using experimentally determined values or dynamic
adaptation. For example, in networks with infrequent topology
changes MAX_IDLETIME MAY be set to a much larger value.
If MAX_SEQNUM_LIFETIME was configured differently across the network,
and any of the routers lost their sequence number or rebooted, this
could result in their next route messages being classified as stale
at any AODVv2 router using a greater value for MAX_SEQNUM_LIFETIME.
This would delay route discovery from and to the re-initializing
router.
Perkins, et al. Expires October 6, 2016 [Page 62]
Internet-Draft AODVv2 April 2016
11.2. Protocol Constants
AODVv2 protocol constants typically do not require changes. The
following table lists these constants, along with their values and a
reference to the section describing their use.
+------------------------+---------+--------------------------------+
| Name | Default | Description |
+------------------------+---------+--------------------------------+
| DISCOVERY_ATTEMPTS_MAX | 3 | Section 6.6 |
| RREP_RETRIES | 2 | Section 7.2.1 |
| MAX_METRIC[MetricType] | [TBD] | Section 5 |
| MAX_METRIC[HopCount] | 255 | Section 5 and Section 7 |
| INFINITY_TIME | [TBD] | Maximum expressible clock time |
| | | (Section 6.7.2) |
| C | 1/1024 | Constant used in validity time |
| | | calculation [RFC5497] |
+------------------------+---------+--------------------------------+
Table 3: AODVv2 Constants
MAX_METRIC[MetricType] MUST always be the maximum expressible metric
value of type MetricType. Field lengths associated with metric
values are found in Section 11.6.
These protocol constants MUST have the same values for all AODVv2
routers in the ad hoc network. If the values were configured
differently, the following consequences may be observed:
o DISCOVERY_ATTEMPTS_MAX: Routers with higher values are likely to
be more successful at finding routes, at the cost of additional
control traffic.
o RREP_RETRIES: Routers with lower values are more likely to
blacklist neighbors when there is a
o MAX_METRIC[MetricType]: No interoperability problems due to
variations on different routers, but routers with lower values may
exhibit overly restrictive behavior during route comparisons.
temporary fluctuation in link quality.
o INFINITY_TIME: No interoperability problems due to variations on
different routers, but if a lower value is used, route state
management may exhibit overly restrictive behavior.
o C: Routers with lower values will invalidate timed routes before
routers with higher values, which will cause Route Error messages
Perkins, et al. Expires October 6, 2016 [Page 63]
Internet-Draft AODVv2 April 2016
to be generated and the route will effectively take on the shorter
validity time.
11.3. Local Settings
The following table lists AODVv2 parameters which SHOULD be
administratively configured for each router:
+------------------------+------------------------+--------------+
| Name | Default Value | Description |
+------------------------+------------------------+--------------+
| InterfaceSet | | Section 4.1 |
| BUFFER_SIZE_PACKETS | 2 | Section 6.6 |
| BUFFER_SIZE_BYTES | MAX_PACKET_SIZE [TBD] | Section 6.6 |
| CONTROL_TRAFFIC_LIMIT | [TBD - 50 pkts/sec?] | Section 7 |
+------------------------+------------------------+--------------+
Table 4: Configuration for Local Settings
11.4. Network-Wide Settings
The following administrative controls MAY be used to change the
operation of the network. The same settings SHOULD be used across
the network. Inconsistent settings at different routers in the
network will not result in protocol errors, but poor performance may
result.
+----------------------+-----------+----------------+
| Name | Default | Description |
+----------------------+-----------+----------------+
| ENABLE_IDLE_IN_RERR | Disabled | Section 7.4.1 |
+----------------------+-----------+----------------+
Table 5: Configuration for Network-Wide Settings
11.5. Optional Feature Settings
These options are not required for correct routing behavior, although
they may reduce AODVv2 protocol overhead in certain situations. The
default behavior is to leave these options disabled.
Perkins, et al. Expires October 6, 2016 [Page 64]
Internet-Draft AODVv2 April 2016
+---------------------------+----------+----------------------------+
| Name | Default | Description |
+---------------------------+----------+----------------------------+
| PRECURSOR_LISTS | Disabled | Local setting (Section |
| | | 10.2) |
| MSG_AGGREGATION | Disabled | Local setting (Section |
| | | 10.4) |
| ENABLE_IRREP | Disabled | Network-wide setting |
| | | (Section 10.3) |
| EXPANDING_RINGS_MULTICAST | Disabled | Network-wide setting |
| | | (Section 10.1) |
+---------------------------+----------+----------------------------+
Table 6: Configuration for Optional Features
11.6. MetricType Allocation
The metric types used by AODVv2 are identified according to the
assignments in [RFC6551]. All implementations MUST use these values.
+---------------------+----------+--------------------+
| Name of MetricType | Type | Metric Value Size |
+---------------------+----------+--------------------+
| Unassigned | 0 | Undefined |
| Hop Count | 3 [TBD] | 1 octet |
| Unallocated | 9 - 254 | TBD |
| Reserved | 255 | Undefined |
+---------------------+----------+--------------------+
Table 7: AODVv2 Metric Types
12. IANA Considerations
This section specifies several [RFC5444] message types and address
tlv-types required for AODVv2.
12.1. RFC 5444 Message Types
This specification defines four Message Types, to be allocated from
the 0-223 range of the "Message Types" namespace defined in
[RFC5444], as specified in Table 8.
Perkins, et al. Expires October 6, 2016 [Page 65]
Internet-Draft AODVv2 April 2016
+-----------------------------------------+-----------+
| Name of Message | Type |
+-----------------------------------------+-----------+
| Route Request (RREQ) | 10 (TBD) |
| Route Reply (RREP) | 11 (TBD) |
| Route Error (RERR) | 12 (TBD) |
| Route Reply Acknowledgement (RREP_Ack) | 13 (TBD) |
+-----------------------------------------+-----------+
Table 8: AODVv2 Message Types
12.2. RFC 5444 Address Block TLV Types
This specification defines three Address Block TLV Types, to be
allocated from the "Address Block TLV Types" namespace defined in
[RFC5444], as specified in Table 9.
+------------------------+----------+---------------+---------------+
| Name of TLV | Type | Length | Reference |
| | | (octets) | |
+------------------------+----------+---------------+---------------+
| PATH_METRIC | 11 (TBD) | depends on | Section 7 |
| | | MetricType | |
| SEQ_NUM | 12 (TBD) | 2 | Section 7 |
| ADDRESS_TYPE | 13 (TBD) | 1 | Section 8 |
+------------------------+----------+---------------+---------------+
Table 9: AODVv2 Address Block TLV Types
12.3. ADDRESS_TYPE TLV Values
These values are used in the [RFC5444] Address Type TLV discussed in
Section 8. All implementations MUST use these values.
+---------------+--------+
| Address Type | Value |
+---------------+--------+
| ORIGADDR | 0 |
| TARGADDR | 1 |
| UNREACHABLE | 2 |
| PKTSOURCE | 3 |
| INTEND | 4 |
| UNSPECIFIED | 255 |
+---------------+--------+
Table 10: AODVv2 Address Types
Perkins, et al. Expires October 6, 2016 [Page 66]
Internet-Draft AODVv2 April 2016
13. Security Considerations
This section describes various security considerations and potential
avenues to secure AODVv2 routing. The main objective of the AODVv2
protocol is for each router to communicate reachability information
about addresses for which it is responsible, and for routes it has
learned from other AODVv2 routers.
Networks using AODVv2 to maintain connectivity and establish routes
on demand may be vulnerable to certain well-known types of threats,
which will be detailed in the following. Some of the threats
described can be mitigated or eliminated. Tools to do so will be
described also.
Since route messages are regenerated at each router, AODVv2 assumes a
security model of transitive trust. The sender of a message MUST be
trusted in order for receiving one-hop neighbours to store the
routing information it provides and regenerate the message to their
own one-hop neighbours.
Routes are installed based on information received from trusted
neighbours. Therefore a chain of trust back to the originator of a
message is assumed by any router using the routing information
received.
Since messages are regenerated rather than forwarded, the message
concepts known as RREQ, RREP and RERR do not travel as a single
unchanged entity between source and destination, and therefore
message integrity cannot be assured end-to-end between OrigAddr and
TargAddr.
The on-demand nature of AODVv2 route discovery automatically reduces
the vulnerability to route disruption. Since control traffic for
updating route tables is diminished, there is less opportunity for
attack and failure.
13.1. Availability
Threats to AODVv2 which reduce availability are considered below.
13.1.1. Denial of Service
Flooding attacks using RREQ amount to a (BLIND) denial of service for
route discovery: By issuing RREQ messages for targets that don't
exist, an attacker can flood the network, blocking resources and
drowning out legitimate traffic. The effect of this attack is
dampened by the fact that duplicate RREQ messages are dropped
(preventing the network from DDoSing itself). Processing
Perkins, et al. Expires October 6, 2016 [Page 67]
Internet-Draft AODVv2 April 2016
requirements for AODVv2 messages are typically quite small, however
AODVv2 routers receiving RREQs do allocate resources in the form of
Neighbor Table, Local Route Set and Multicast Route Message
Table entries. The attacker can maximize their impact on table
growth by changing OrigAddr for each RREQ. If a specific node is to
be targeted, this attack may be carried out in a DISTRIBUTED fashion,
either by compromising its direct neighbors or by specifying the
target's address as TargAddr. Note that it might be more economical
for the attacker to simply jam the medium; an attack which AODVv2
cannot defend itself against.
Mitigation:
o If AODVv2 routers always verify that the sender of the RERR
message is trusted, this threat is reduced. Processing
requirements would typically be dominated by calculations to
verify integrity. This has the effect of reducing (but by no
means eliminating) AODVv2's vulnerability to denial of service
attacks.
o Authentication of senders can prevent foreign nodes from DoSing an
AODVv2 router. However, this does not protect the network if an
attacker has access to an already authorized router.
13.1.2. Malicious RERR messages
RERR messages are designed to cause removal of installed routes. A
malicious node could send an RERR message with false information to
attempt to get other routers to remove a route to one or more
specific destinations, therefore disrupting traffic to the advertised
destinations.
Routes will be deleted if an RERR is received, withdrawing a route
for which the sender is the receiver's next hop, and when the RERR
includes the MetricType of the installed route, and includes either
no sequence number for the route, or includes a greater sequence
number than the sequence number stored with that route in the
receiver's Local Route Set. Routes will also be deleted if a received
RERR contains a PktSource address corresponding to a Router Client.
The information necessary to construct a malicious RERR could be
learned by eavesdropping, either by listening to AODVv2 messages or
by watching data packet flows.
Since the RERR is multicast, it can be received by many routers in
the ad hoc network, and will be regenerated when processing results
in an active route being removed. This threat could have serious
Perkins, et al. Expires October 6, 2016 [Page 68]
Internet-Draft AODVv2 April 2016
impact on applications communicating by way of the sender of the RERR
message.
o The set of routers which use the malicious router as a next hop
may be targeted with a malicious RERR with no PktSource address
included, if the RERR contains routes for which the malicious
router is a next hop from the receiving router. However, since
the sender of the RERR message is either malicious or broken, it
is better that it is not used as a next hop for these routes
anyway.
o A single router which does not use the malicious router as part of
its route may be targeted with a malicious RERR with a PktSource
address included.
o Replayed RERR messages could be used to disrupt active routes.
Mitigation:
o Protection against eavesdropping of AODVv2 messages would mitigate
this attack to some extent, but eavesdropping of data packets can
also be used to deduce the information about which routes could be
targeted.
o Protection against a malicious router becoming part of a route
will mitigate the attack where a set of routers are targeted.
This will not protect against the attack if a PktSource address is
included.
o By only regenerating RERR messages where active routes are
removed, the spread of the malicious RERR is limited.
o Including sequence numbers in RERR messages offers protection
against attacks using replays of these RERR messages.
o If AODVv2 routers always verify that the sender of the RERR
message is trusted, this threat is reduced.
13.1.3. False Confirmation of Link Bidirectionality
Links could be erroneously treated as bidirectional if malicious
unsolicited or spoofed RREP messages were to be accepted. This would
result in a route being installed which could not in fact be used to
forward data to the destination, and may divert data packets away
from the intended destination.
Perkins, et al. Expires October 6, 2016 [Page 69]
Internet-Draft AODVv2 April 2016
There is a window of RREQ_WAIT_TIME after an RREQ is sent, in which
any malicious router could send an RREP in response, in order for the
link to the malicious router to be deemed as bidirectional.
Mitigation:
o Ignoring unsolicited RREP and RREP_Ack messages partially
mitigates against this threat.
o If AODVv2 routers always verify that the sender of the RERR
message is trusted, this threat is reduced.
13.1.4. Message Deletion
A malicious router could decide not to regenerate a RREQ or RREP or
RERR message. Not regenerating a RERR or RREP message would disrupt
route discovery. Not regenerating a RERR message would result in the
source of data packets continuing to maintain and use the route, and
further RERR messages being generated by the sender of the non-
regenerated RERR. A malicious router could intentionally disrupt
traffic flows by not allowing the source of data traffic to re-
discover a new route when one breaks.
Failing to send a RREP_Ack would also disrupt route establishment, by
not allowing the reverse route to be validated. Return traffic which
needs that route will prompt a new route discovery, wasting resources
and incurring a slight delay but not disrupting the ability for
applications to communicate.
Mitigation:
o None. also note that malicious router would have to wait for a
route to break before it could perform this attack.
13.2. Confidentiality
Passive inspection (eavesdropping) of AODVv2 control messages could
enable unauthorized devices to gain information about the network
topology, since exchanging such information is the main purpose of
AODVv2.
Eavesdropping of data traffic could allow a malicious device to
obtain information about how data traffic is being routed. With
knowledge of source and destination addresses, malicious messages
could be constructed to disrupt normal operation.
Perkins, et al. Expires October 6, 2016 [Page 70]
Internet-Draft AODVv2 April 2016
13.3. Integrity
Integrity of route information can be compromised in the following
types of attack:
13.3.1. Message Insertion
Valid route table entries can be replaced or modified by maliciously
constructed AODVv2 messages, destroying existing routes and the
network's integrity. Any router may pose as another router by
sending RREQ, RREP, RREP_Ack and RERR messages in its name.
o Sending an RREQ message with false information can disrupt traffic
to OrigAddr, if the sequence number attached is not stale compared
to any existing information about OrigAddr. Since RREQ is
multicast and likely to be received by all routers in the ad hoc
network, this threat could have serious impact on applications
communicating with OrigAddr. The actual threat to disrupt routes
to OrigAddr is reduced by the AODVv2 mechanism of marking RREQ-
derived routes as "Unconfirmed" until the link to the next hop is
confirmed.
o Sending an RREP message with false information can disrupt traffic
to TargAddr. Since RREP is unicast, and ignored if a
corresponding RREQ was not recently sent, this threat is
minimized, and is restricted to receivers along the path from
OrigAddr to TargAddr.
o Sending an RREP_Ack message with false information can cause the
route advertised to a target address in an RREP to be erroneously
accepted even though the route would contain a unidirectional link
and thus not be suitable for most traffic. Since RREP_Ack is
unicast, and ignored if a RREP was not sent recently to the sender
of the RREP_Ack, this threat is minimized and is strictly local to
the RREP transmitter expecting the acknowledgement. Unsolicited
RREP_Acks are ignored.
o Sending an RERR message with false information is discussed in
Section 13.1.2.
Mitigation: * If AODVv2 routers always verify that the sender of a
message is trusted, this threat is reduced.
13.3.2. Message Modification - Man in the Middle
Any AODVv2 router can regenerate messages with modified data.
Mitigation:
Perkins, et al. Expires October 6, 2016 [Page 71]
Internet-Draft AODVv2 April 2016
o If AODVv2 routers verify the integrity of AODVv2 messages, then
the threat of disruption is minimized. A man in the middle with
no knowledge of the shared secret key used to calculate an
integrity check value MAY modify a message but the message will be
rejected when it fails an integrity check.
13.3.3. Replay Attacks
Replaying of RREQ or RREP messages would be of less use to an
attacker, since they would be dropped immediately due to their stale
sequence number. RERR messages MAY or MAY NOT include sequence
numbers and are therefore susceptible to replay attacks. RREP_Ack
messages do not include sequence numbers and are therefore
susceptible to replay attacks.
Mitigation:
o Use of timestamps or sequence numbers prevents replay attacks.
13.4. Protection Mechanisms
13.4.1. Confidentiality and Authentication
Encryption MAY be used for AODVv2 messages. If the routers share a
packet-level security association, the message data can be encrypted
prior to message transmission. The establishment of such security
associations is outside the scope of this specification. Encryption
will not only protect against unauthorized devices obtaining
information about network topology (eavesdropping) but will ensure
that only trusted routers participate in routing operations.
13.4.2. Integrity and Trust using ICVs
Cryptographic Integrity Check Values (ICVs) can be used to ensure
integrity of received messages, protecting against man in the middle
attacks. Further, by using ICVs, only those routers with knowledge
of a shared secret key are allowed to participate in routing
information exchanges. [RFC7182] defines ICV TLVs for use with
[RFC5444].
The data contained in AODVv2 routing protocol messages MUST be
verified using Integrity Check Values, to avoid the use of message
data if the message has been tampered with.
The method of distribution of shared secret keys is out of the scope
of this protocol. Key management is not specified for the following
reasons:
Perkins, et al. Expires October 6, 2016 [Page 72]
Internet-Draft AODVv2 April 2016
13.4.3. Replay Protection using Timestamps
Replay attacks MUST be prevented by using timestamps or sequence
numbers in messages. [RFC7182] defines a TIMESTAMP TLV for use with
[RFC5444].
The data contained in AODVv2 routing protocol messages MUST be
protected with a TIMESTAMP value to ensure the protection against
replaying of the message. Sequence numbers can be used as
timestamps, since they are known to be strictly increasing.
13.4.4. Application to AODVv2
Implementations of AODVv2 MUST support ICV TLVs using type-extensions
1 and 2, hash-function HASH_FUNCTION, and cryptographic function
CRYPTOGRAPHIC_FUNCTION. An ICV MUST be included with every message.
The ICV value MAY be truncated as specified in [RFC7182].
Implementations of AODVv2 MUST support a TIMESTAMP TLV using type-
extension 0. The timestamp used is a sequence number, and therefore
the length of the <TIMESTAMP-value> field matches the AODVv2 sequence
number defined in Section 4.4. The TIMESTAMP TLV MUST be included in
RREP_Ack and RERR messages.
When more than one message is included in an RFC5444 packet, using a
single ICV Packet TLV or single TIMESTAMP Packet TLV is more
efficient than including ICV and TIMESTAMP Message TLVs in each
message created. In this case, the RFC5444 multiplexer MUST be
instructed to include the Packet TLVs in packets containing AODVv2
messages, or MUST be selected because it always performs these
additions. If the multiplexer is not capable of adding the Packet
TLVs, the TLVs MUST be included as Message TLVs in each AODVv2
message in the packet.
After message generation but before transmission, the ICV and
TIMESTAMP TLVs MUST be added according to each message type as
detailed in the following sections. The following steps list the
generic procedure to be performed:
1. The considerations in Section 8 of [RFC7182] are followed,
removing existing ICV TLVs and adjusting the size and flags
fields.
2. The ICV is calculated over the fields specified below, depending
on message type. This value MAY be truncated (as specified in
[RFC7182]).
Perkins, et al. Expires October 6, 2016 [Page 73]
Internet-Draft AODVv2 April 2016
3. If the TIMESTAMP is to be included, add the TIMESTAMP TLV,
updating size fields as necessary.
4. Add the ICV TLV, updating size fields as necessary.
5. The changes made in Step 1 are reversed to re-add any existing
ICV TLVs and adjusting the size and flags fields.
The ICV MUST be verified at the receiver. Verification of a received
ICV value is performed by repeating Step 1 and Step 2. If the ICV
value calculated from the received message or packet does not match
the value of <ICV-data> in the received message or packet, the
validation fails and the AODVv2 message MUST be discarded.
Verification of a received TIMESTAMP value is performed differently
depending on message type.
13.4.4.1. RREQ Generation and Reception
Since OrigAddr is included in the RREQ, the ICV can be calculated and
verified using all of the message contents. This provides message
integrity and endpoint authentication, because trusted routers MUST
hold the shared key in order to calculate the ICV value. The ICV TLV
has type extension := 1.
Since RREQ_Gen's sequence number is incremented for each new RREQ,
replay protection is already afforded and no extra timestamp
mechanism is required.
13.4.4.2. RREP Generation and Reception
Since TargAddr is included in the RREP, the ICV can be calculated and
verified using all of the message contents. This provides message
integrity and endpoint authentication, because trusted routers MUST
hold the shared key in order to calculate the ICV value. The ICV TLV
has type extension := 1.
Since RREP_Gen's sequence number is incremented for each new RREP,
replay protection is afforded and no extra timestamp mechanism is
required.
13.4.4.3. RREP_Ack Generation and Reception
The RREP_Gen uses the source IP address of the RREP_Ack to identify
the sender to look up whether the RREP_Ack is expected and update the
Neighbour Table, and so the ICV MUST be calculated using the message
contents and the IP source address. The ICV TLV has type extension
:= 2 in order to accomplish this. This provides message integrity
Perkins, et al. Expires October 6, 2016 [Page 74]
Internet-Draft AODVv2 April 2016
and endpoint authentication, because trusted routers MUST hold the
shared key in order to calculate the ICV value.
The message MUST also include a timestamp to protect against replay
attacks, using TargSeqNum from the RREP as the value in the TIMESTAMP
TLV. Verification of a received TIMESTAMP value is performed by
comparing the sequence number in the <TIMESTAMP-value> field with the
sequence number in a recently sent RREP awaiting acknowledgement from
the sender of the RREP_Ack. If the sequence number is not equal, the
AODVv2 message MUST be discarded.
13.4.4.4. RERR Generation and Reception
The receiver of the RERR MUST use the source IP address of the RERR
to identify the sender to look up routes using that sender as next
hop, and so the ICV MUST be calculated using the message contents and
the IP source address. The ICV TLV has type extension := 2 in order
to accomplish this. This provides message integrity and endpoint
authentication, because trusted routers MUST hold the shared key in
order to calculate the ICV value.
The message MUST also include a timestamp to protect against replay
attacks, incrementing and using RERR_Gen's sequence number as the
value in the TIMESTAMP TLV. Verification of a received TIMESTAMP
value is performed by comparing the sequence number in the
<TIMESTAMP-value> field with the last seen sequence number from the
sender of the RERR. If the sequence number is not greater, the
AODVv2 message MUST be discarded.
14. Acknowledgments
AODVv2 is a descendant of the design of previous MANET on-demand
protocols, especially AODV [RFC3561] and DSR [RFC4728]. Changes to
previous MANET on-demand protocols stem from research and
implementation experiences. Thanks to Elizabeth Belding and Ian
Chakeres for their long time authorship of AODV. Additional thanks
to Derek Atkins, Emmanuel Baccelli, Abdussalam Baryun, Ramon Caceres,
Thomas Clausen, Justin Dean, Christopher Dearlove, Fatemeh Ghassemi,
Ulrich Herberg, Henner Jakob, Ramtin Khosravi, Luke Klein-Berndt,
Lars Kristensen, Tronje Krop, Koojana Kuladinithi, Kedar Namjoshi,
Keyur Patel, Alexandru Petrescu, Henning Rogge, Fransisco Ros, Pedro
Ruiz, Christoph Sommer, Romain Thouvenin, Richard Trefler, Jiazi Yi,
Seung Yi, Behnaz Yousefi, and Cong Yuan, for their reviews of AODVv2
and DYMO, as well as numerous specification suggestions.
Perkins, et al. Expires October 6, 2016 [Page 75]
Internet-Draft AODVv2 April 2016
15. References
15.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC3561] Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On-
Demand Distance Vector (AODV) Routing", RFC 3561,
DOI 10.17487/RFC3561, July 2003,
<http://www.rfc-editor.org/info/rfc3561>.
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, DOI 10.17487/RFC4291, February
2006, <http://www.rfc-editor.org/info/rfc4291>.
[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C.
Pignataro, "The Generalized TTL Security Mechanism
(GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007,
<http://www.rfc-editor.org/info/rfc5082>.
[RFC5444] Clausen, T., Dearlove, C., Dean, J., and C. Adjih,
"Generalized Mobile Ad Hoc Network (MANET) Packet/Message
Format", RFC 5444, DOI 10.17487/RFC5444, February 2009,
<http://www.rfc-editor.org/info/rfc5444>.
[RFC5497] Clausen, T. and C. Dearlove, "Representing Multi-Value
Time in Mobile Ad Hoc Networks (MANETs)", RFC 5497,
DOI 10.17487/RFC5497, March 2009,
<http://www.rfc-editor.org/info/rfc5497>.
[RFC5498] Chakeres, I., "IANA Allocations for Mobile Ad Hoc Network
(MANET) Protocols", RFC 5498, DOI 10.17487/RFC5498, March
2009, <http://www.rfc-editor.org/info/rfc5498>.
[RFC6551] Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N.,
and D. Barthel, "Routing Metrics Used for Path Calculation
in Low-Power and Lossy Networks", RFC 6551,
DOI 10.17487/RFC6551, March 2012,
<http://www.rfc-editor.org/info/rfc6551>.
[RFC7182] Herberg, U., Clausen, T., and C. Dearlove, "Integrity
Check Value and Timestamp TLV Definitions for Mobile Ad
Hoc Networks (MANETs)", RFC 7182, DOI 10.17487/RFC7182,
April 2014, <http://www.rfc-editor.org/info/rfc7182>.
Perkins, et al. Expires October 6, 2016 [Page 76]
Internet-Draft AODVv2 April 2016
15.2. Informative References
[I-D.perkins-irrep]
Perkins, C., "Intermediate RREP for dynamic MANET On-
demand (AODVv2) Routing", draft-perkins-irrep-03 (work in
progress), May 2015.
[Koodli01]
Koodli, R. and C. Perkins, "Fast handovers and context
transfers in mobile networks", Proceedings of the ACM
SIGCOMM Computer Communication Review 2001, Volume 31
Issue 5, 37-47, October 2001.
[Perkins94]
Perkins, C. and P. Bhagwat, "Highly Dynamic Destination-
Sequenced Distance-Vector Routing (DSDV) for Mobile
Computers", Proceedings of the ACM SIGCOMM '94 Conference
on Communications Architectures, Protocols and
Applications, London, UK, pp. 234-244, August 1994.
[Perkins99]
Perkins, C. and E. Royer, "Ad hoc On-Demand Distance
Vector (AODV) Routing", Proceedings of the 2nd IEEE
Workshop on Mobile Computing Systems and Applications, New
Orleans, LA, pp. 90-100, February 1999.
[RFC2501] Corson, S. and J. Macker, "Mobile Ad hoc Networking
(MANET): Routing Protocol Performance Issues and
Evaluation Considerations", RFC 2501,
DOI 10.17487/RFC2501, January 1999,
<http://www.rfc-editor.org/info/rfc2501>.
[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,
<http://www.rfc-editor.org/info/rfc4193>.
[RFC4728] Johnson, D., Hu, Y., and D. Maltz, "The Dynamic Source
Routing Protocol (DSR) for Mobile Ad Hoc Networks for
IPv4", RFC 4728, DOI 10.17487/RFC4728, February 2007,
<http://www.rfc-editor.org/info/rfc4728>.
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
DOI 10.17487/RFC4861, September 2007,
<http://www.rfc-editor.org/info/rfc4861>.
Perkins, et al. Expires October 6, 2016 [Page 77]
Internet-Draft AODVv2 April 2016
[RFC5148] Clausen, T., Dearlove, C., and B. Adamson, "Jitter
Considerations in Mobile Ad Hoc Networks (MANETs)",
RFC 5148, DOI 10.17487/RFC5148, February 2008,
<http://www.rfc-editor.org/info/rfc5148>.
[RFC6130] Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc
Network (MANET) Neighborhood Discovery Protocol (NHDP)",
RFC 6130, DOI 10.17487/RFC6130, April 2011,
<http://www.rfc-editor.org/info/rfc6130>.
[Sholander02]
Sholander, P., Coccoli, P., Oakes, T., and S. Swank, "A
Portable Software Implementation of a Hybrid MANET Routing
Protocol", 2002.
Appendix A. AODVv2 Draft Updates
This section lists the changes between AODVv2 revisions ...-13.txt
and ...-14.txt.
o Moved Address Type TLV Value definitions to IANA section.
o Removed use of MAX_HOPCOUNT and [RFC5444] msg-hop-limit, msg-hop-
count.
o Allow only one Unconfirmed route.
o Incorporated changes from Justin Dean's review, including
removing, moving, extending and clarifying text.
o Extended Introduction.
o Clarified wording such as "recently sent", "the expected time", or
"the expected RREP_Ack" or substituted it with instructions.
o Extended and reorganized Security Considerations.
o Updated text regarding message prioritization.
o Updated text regarding buffering.
o Added references to other sections where needed for clarity.
o Added RteMsg.AckReqAddr to the Multicast Route Message Table to
check whether an RREP_Ack was expected.
o Renamed AODVv2_INTERFACES to InterfaceSet, extended its
definition.
Perkins, et al. Expires October 6, 2016 [Page 78]
Internet-Draft AODVv2 April 2016
o Added Route Error Table to check for duplicate RERR messages.
o Turned SHOULDs into MUSTs where appropriate.
o Updated forwarding plane text.
o RREPs MUST be regenerated if CONTROL_TRAFFIC_LIMIT is not reached
o Explained why you'd want to keep routes with a lost sequence
number
o Included interfaces in the Neighbor Table, next hop neighbor
monitoring and message transmission
Authors' Addresses
Charles E. Perkins
Futurewei Inc.
2330 Central Expressway
Santa Clara, CA 95050
USA
Phone: +1-408-330-4586
Email: charliep@xxxxxxxxxxxx
Stan Ratliff
Idirect
13861 Sunrise Valley Drive, Suite 300
Herndon, VA 20171
USA
Email: ratliffstan@xxxxxxxxx
John Dowdell
Airbus Defence and Space
Celtic Springs
Newport, Wales NP10 8FZ
United Kingdom
Email: john.dowdell@xxxxxxxxxx
Perkins, et al. Expires October 6, 2016 [Page 79]
Internet-Draft AODVv2 April 2016
Lotte Steenbrink
HAW Hamburg, Dept. Informatik
Berliner Tor 7
D-20099 Hamburg
Germany
Email: lotte.steenbrink@xxxxxxxxxxxxxx
Victoria Mercieca
Airbus Defence and Space
Celtic Springs
Newport, Wales NP10 8FZ
United Kingdom
Email: victoria.mercieca@xxxxxxxxxx
Perkins, et al. Expires October 6, 2016 [Page 80]