[aodvv2-discuss] Stylistic Edits

  • From: Victoria Mercieca <vmercieca0@xxxxxxxxx>
  • To: "aodvv2-discuss@xxxxxxxxxxxxx" <aodvv2-discuss@xxxxxxxxxxxxx>
  • Date: Tue, 14 Apr 2015 18:36:31 +0100

Hi everyone,

I've now worked through the entire document and made a LOT of changes - if
you do a diff it will probably have difficulty matching old and new.
However, the changes really consist of collecting the information into the
correct sections, rearranging sections for better reading flow, renaming a
few sections, and re-wording so that each section presents the information
clearly.

However, while doing this I have come up with a lot of questions. I will
send separate emails about those and you wont need to read this version of
the draft to respond to those.

In regards to recent email discussion:
I haven't updated the RERR with the idea that we dont have to send one
message per metric type.
I haven't updated the RFC 5444 section.
I haven't done anything with the list elements in the messages.
I did make some changes to LoopFree, and Evaluating Incoming Routing
Information.

I reaaaallllly hope you all like it!! Shoot any comments at me whenever you
get a chance.

Kind regards,
Vicky.




Mobile Ad hoc Networks Working Group C. Perkins
Internet-Draft Futurewei
Intended status: Standards Track S. Ratliff
Expires: October 16, 2015 Idirect
J. Dowdell
Airbus Defence and Space
L. Steenbrink
HAW Hamburg, Dept. Informatik
V. Mercieca
Airbus Defence and Space
April 14, 2015


Ad Hoc On-demand Distance Vector (AODVv2) Routing
draft-ietf-manet-aodvv2-09b

Abstract

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

Status of This Memo

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

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

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

This Internet-Draft will expire on October 16, 2015.

Copyright Notice

Copyright (c) 2015 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



Perkins, et al. Expires October 16, 2015 [Page 1]

Internet-Draft AODVv2 April 2015


(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
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 . . . . . . . . . . . . . . . . . . . 9
4. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 10
4.1. Interface List . . . . . . . . . . . . . . . . . . . . . 10
4.2. Router Client List . . . . . . . . . . . . . . . . . . . 10
4.3. Blacklist . . . . . . . . . . . . . . . . . . . . . . . . 11
4.4. Sequence Numbers . . . . . . . . . . . . . . . . . . . . 11
4.5. Multicast Route Message Table . . . . . . . . . . . . . . 12
4.6. Route Table Entry . . . . . . . . . . . . . . . . . . . . 14
5. Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1. Cost Function . . . . . . . . . . . . . . . . . . . . . . 15
5.2. LoopFree Function . . . . . . . . . . . . . . . . . . . . 15
5.3. Default Metric Type . . . . . . . . . . . . . . . . . . . 16
5.4. Alternate Metric Types . . . . . . . . . . . . . . . . . 17
6. AODVv2 Protocol Operations . . . . . . . . . . . . . . . . . 17
6.1. Initialization . . . . . . . . . . . . . . . . . . . . . 17
6.2. Adjacency Monitoring . . . . . . . . . . . . . . . . . . 18
6.3. Message Transmission . . . . . . . . . . . . . . . . . . 19
6.4. Route Discovery, Retries and Buffering . . . . . . . . . 20
6.5. Processing Received Route Information . . . . . . . . . . 21
6.5.1. Evaluating Route Information . . . . . . . . . . . . 22
6.5.2. Applying Route Updates . . . . . . . . . . . . . . . 23
6.6. Suppressing Redundant Messages . . . . . . . . . . . . . 24
6.7. Route Maintenance . . . . . . . . . . . . . . . . . . . . 25
6.7.1. Route State . . . . . . . . . . . . . . . . . . . . . 25
6.7.2. Reporting Invalid Routes . . . . . . . . . . . . . . 27
7. AODVv2 Protocol Messages . . . . . . . . . . . . . . . . . . 27
7.1. Route Request (RREQ) Message . . . . . . . . . . . . . . 27
7.1.1. RREQ Generation . . . . . . . . . . . . . . . . . . . 29
7.1.2. RREQ Reception . . . . . . . . . . . . . . . . . . . 30
7.1.3. RREQ Regeneration . . . . . . . . . . . . . . . . . . 31
7.2. Route Reply (RREP) Message . . . . . . . . . . . . . . . 32
7.2.1. RREP Generation . . . . . . . . . . . . . . . . . . . 34
7.2.2. RREP Reception . . . . . . . . . . . . . . . . . . . 35
7.2.3. RREP Regeneration . . . . . . . . . . . . . . . . . . 36
7.3. Route Reply Acknowledgement (RREP_Ack) Message . . . . . 37
7.3.1. RREP_Ack Generation . . . . . . . . . . . . . . . . . 38



Perkins, et al. Expires October 16, 2015 [Page 2]

Internet-Draft AODVv2 April 2015


7.3.2. RREP_Ack Reception . . . . . . . . . . . . . . . . . 38
7.4. Route Error (RERR) Message . . . . . . . . . . . . . . . 38
7.4.1. RERR Generation . . . . . . . . . . . . . . . . . . . 40
7.4.2. RERR Reception . . . . . . . . . . . . . . . . . . . 41
7.4.3. RERR Regeneration . . . . . . . . . . . . . . . . . . 43
8. RFC 5444 Representation . . . . . . . . . . . . . . . . . . . 44
9. Simple Internet Attachment . . . . . . . . . . . . . . . . . 45
10. Optional Features . . . . . . . . . . . . . . . . . . . . . . 46
10.1. Expanding Rings Multicast . . . . . . . . . . . . . . . 46
10.2. Precursor Lists . . . . . . . . . . . . . . . . . . . . 47
10.3. Multicast RREP . . . . . . . . . . . . . . . . . . . . . 47
10.4. Intermediate RREP . . . . . . . . . . . . . . . . . . . 48
10.5. Message Aggregation Delay . . . . . . . . . . . . . . . 48
11. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 48
11.1. Timers . . . . . . . . . . . . . . . . . . . . . . . . . 48
11.2. Protocol Constants . . . . . . . . . . . . . . . . . . . 49
11.3. Local Settings . . . . . . . . . . . . . . . . . . . . . 50
11.4. Network-Wide Settings . . . . . . . . . . . . . . . . . 50
11.5. Optional Feature Settings . . . . . . . . . . . . . . . 51
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 51
12.1. AODVv2 Message Types for RFC 5444 . . . . . . . . . . . 51
12.2. Message TLV Types for RFC 5444 . . . . . . . . . . . . . 52
12.3. Address Block TLV Types for RFC 5444 . . . . . . . . . . 52
12.4. MetricType Allocation . . . . . . . . . . . . . . . . . 52
13. Security Considerations . . . . . . . . . . . . . . . . . . . 53
14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 54
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 54
15.1. Normative References . . . . . . . . . . . . . . . . . . 54
15.2. Informative References . . . . . . . . . . . . . . . . . 55
Appendix A. Features of IP needed by AODVv2 . . . . . . . . . . 56
Appendix B. Multi-homing Considerations . . . . . . . . . . . . 57
Appendix C. Moving Router Clients Between Routers . . . . . . . 57
Appendix D. Example Algorithms for AODVv2 Operations . . . . . . 57
D.1. General Operations . . . . . . . . . . . . . . . . . . . 59
D.1.1. Check_Route_State . . . . . . . . . . . . . . . . . . 59
D.1.2. Process_Routing_Info . . . . . . . . . . . . . . . . 60
D.1.3. Fetch_Route_Table_Entry . . . . . . . . . . . . . . . 61
D.1.4. Update_Route_Table_Entry . . . . . . . . . . . . . . 62
D.1.5. Create_Route_Table_Entry . . . . . . . . . . . . . . 63
D.1.6. LoopFree . . . . . . . . . . . . . . . . . . . . . . 65
D.1.7. Fetch_Rte_Msg_Table_Entry . . . . . . . . . . . . . . 65
D.1.8. Update_Rte_Msg_Table . . . . . . . . . . . . . . . . 65
D.1.9. Build_RFC_5444_Message_Header . . . . . . . . . . . . 66
D.2. RREQ Operations . . . . . . . . . . . . . . . . . . . . . 67
D.2.1. Generate_RREQ . . . . . . . . . . . . . . . . . . . . 67
D.2.2. Receive_RREQ . . . . . . . . . . . . . . . . . . . . 68
D.2.3. Regenerate_RREQ . . . . . . . . . . . . . . . . . . . 70
D.3. RREP Operations . . . . . . . . . . . . . . . . . . . . . 71



Perkins, et al. Expires October 16, 2015 [Page 3]

Internet-Draft AODVv2 April 2015


D.3.1. Generate_RREP . . . . . . . . . . . . . . . . . . . . 71
D.3.2. Receive_RREP . . . . . . . . . . . . . . . . . . . . 72
D.3.3. Regenerate_RREP . . . . . . . . . . . . . . . . . . . 73
D.4. RREP_Ack Operations . . . . . . . . . . . . . . . . . . . 75
D.4.1. Generate_RREP_Ack . . . . . . . . . . . . . . . . . . 75
D.4.2. Receive_RREP_Ack . . . . . . . . . . . . . . . . . . 75
D.4.3. Timeout_RREP_Ack . . . . . . . . . . . . . . . . . . 75
D.5. RERR Operations . . . . . . . . . . . . . . . . . . . . . 75
D.5.1. Generate_RERR . . . . . . . . . . . . . . . . . . . . 75
D.5.2. Receive_RERR . . . . . . . . . . . . . . . . . . . . 77
D.5.3. Regenerate_RERR . . . . . . . . . . . . . . . . . . . 78
Appendix E. AODVv2 Draft Updates . . . . . . . . . . . . . . . . 80
E.1. Changes between revisions 8 and 9 . . . . . . . . . . . . 80
E.2. Changes between revisions 7 and 8 . . . . . . . . . . . . 82
E.3. Changes between revisions 6 and 7 . . . . . . . . . . . . 83
E.4. Changes between revisions 5 and 6 . . . . . . . . . . . . 85
E.5. Changes between revisions 4 and 5 . . . . . . . . . . . . 86
E.6. Changes between revisions 3 and 4 . . . . . . . . . . . . 87
E.7. Changes between revisions 2 and 3 . . . . . . . . . . . . 87
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 88

1. Overview

The revised Ad hoc On-demand Distance Vector (AODVv2) routing
protocol [formerly named DYMO] enables on-demand, multihop unicast
routing among AODVv2 routers in mobile ad hoc networks [MANETs]
[RFC2501]. The basic operations of the AODVv2 protocol are route
discovery and route maintenance.

Route discovery is performed when an AODVv2 router needs to forward a
packet for one of its clients, but does not have a valid route to the
packet's destination. AODVv2 routers use Route Reply and Route
Request messages to carry route information between the originator of
the route discovery and the target, establishing a route to both
endpoints on all intermediate routers.

Metrics are included in RREQ and RREP messages to represent the cost
of the route to the originator or target of the route discovery.
AODVv2 compares route metrics in a way that ensures loop avoidance.
AODVv2 also uses sequence numbers to assure loop freedom, enabling
identification of stale routing information so that it can be
discarded.

Route maintenance involves monitoring the router's links and routes
for changes. This includes confirming links to other AODVv2 routers
are bidirectional, issuing Route Error messages if link failures
invalidate routes, extending and enforcing route timeouts, and
reacting to received Route Error messages.



Perkins, et al. Expires October 16, 2015 [Page 4]

Internet-Draft AODVv2 April 2015


AODVv2 control plane messages use the Generalized MANET Packet/
Message Format defined in [RFC5444] and the parameters in [RFC5498].
AODVv2 defines a set of data elements which map to RFC 5444 Address
Blocks, Address Block TLVs, and Message TLVs.

Security for authentication of AODVv2 routers, and/or encryption of
traffic is dealt with by the underlying transport mechanism (e.g., by
using the techniques for Authentication, Integrity, and
Confidentiality documented in [RFC5444]).

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:

Adjacency
A bi-directional relationship between neighboring AODVv2 routers
for the purpose of exchanging routing information.

AckReq
The data element which indicates acknowledgement of a Route Reply
message is required.

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

Current_Time
The current time as maintained by the AODVv2 router.

Data Element
A named object used within AODVv2 protocol messages (see Table 1).

Disregard
Ignore for further processing.

Invalid route
A route that cannot be used for forwarding.

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

MetricList
The metrics associated with the addresses in an AddressList.




Perkins, et al. Expires October 16, 2015 [Page 5]

Internet-Draft AODVv2 April 2015


Node
An IP addressable device in the ad hoc network. All nodes in this
document are either AODVv2 Routers or Router Clients.

OrigAddrMetric
The metric associated with the route to OrigAddr.

Originator Address (OrigAddr)
The Originating Node's IP address, used as the source IP address
of the packet triggering route discovery.

OrigSeqNum
The sequence number used by an AODVv2 router in a Route Request
message.

Originating Node (OrigNode)
The node that launched the application requiring communication
with the Target Address.

PktSource
The source address of a packet sent to an unreachable address.

PrefixLengthList
A list of prefix lengths associated with addresses in an
AddressList.

Reactive
A protocol operation is called "reactive" if it is performed only
in reaction to specific events. In this document, "reactive" is
synonymous with "on-demand".

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.

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

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

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

Route Request (RREQ)



Perkins, et al. Expires October 16, 2015 [Page 6]

Internet-Draft AODVv2 April 2015


The AODVv2 message type used to discover a route to the Target
Address and distribute information about the route to the
Originator Address.

Router Client
A node that requires the services of an AODVv2 router. An AODVv2
router is also its own client.

Router Interface
In this document, an interface on an AODVv2 router which is
configured for use by AODVv2.

RREP Generating Router (RREP_Gen)
The AODVv2 router responsible for the Target Node of a Route
Request message, i.e., the router that creates the Route Reply
message.

RREQ Generating Router (RREQ_Gen)
The AODVv2 router that creates the Route Request message on behalf
of the Originating Node to discover a route for Target Address.

Sequence Number (SeqNum)
One of the sequence numbers maintained by an AODVv2 router to
avoid indicate freshness of route information.

SeqNumList
A list of sequence numbers associated with addresses in an
AddressList, used in RERR messages.

TargAddrMetric
The metric associated with the route to TargAddr.

Target Address (TargAddr)
The destination IP address for which a route is requested, an IP
address of the Target Node.

TargSeqNum
The sequence number used by an AODVv2 router in a Route Reply
message.

Target Node (TargNode)
The node hosting the IP address toward which a route is needed.

Type-Length-Value structure (TLV)
A generic way to represent information, e.g., as used in
[RFC5444].

Unreachable Address



Perkins, et al. Expires October 16, 2015 [Page 7]

Internet-Draft AODVv2 April 2015


An address for which a valid route is not known.

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

Valid route
A route that can be used for forwarding.

ValidityTime
The duration of time for which a route should be considered to be
valid.

This document defines a set of Data Elements in Table 1 which are
used in AODVv2 messages.

+------------------+------------------------------------------------+
| Data Elements | Meaning |
+------------------+------------------------------------------------+
| msg_hop_limit | Number of hops the message is allowed to |
| | traverse |
| msg_hop_count | Number of hops traversed so far by the message |
| AckReq | Acknowledgement Requested for RREP |
| PktSource | Source address of a data packet |
| AddressList | A list of IP addresses |
| OrigAddr | IP address of the Originating Node |
| TargAddr | IP address of the Target Node |
| PrefixLengthList | A list of routing prefixes associated with |
| | addresses in AddressList |
| SeqNum | Sequence number, when used in RERR messages |
| SeqNumList | A list of sequence numbers |
| OrigSeqNum | Sequence number associated with OrigAddr |
| TargSeqNum | Sequence number associated with TargAddr |
| MetricType | The metric type for values in MetricList |
| MetricList | Metric values for routes to addresses in |
| | AddressList |
| OrigAddrMetric | Metric value for route to OrigAddr |
| TargAddrMetric | Metric value for route to TargAddr |
| ValidityTime | Length of time a route is valid |
| ValidityTimeList | A list of ValidityTime values for routes to |
| | addresses in AddressList |
+------------------+------------------------------------------------+

Table 1: Data Elements

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




Perkins, et al. Expires October 16, 2015 [Page 8]

Internet-Draft AODVv2 April 2015


+------------------------+------------------------------------------+
| Notation | Meaning |
+------------------------+------------------------------------------+
| Route[Address] | A route table entry toward Address |
| Route[Address].{field} | A field in a route table entry toward |
| | Address |
| RREQ_Gen | An AODVv2 router originating an RREQ |
| RREP_Gen | An AODVv2 router responding to an RREQ |
| RERR_Gen | An AODVv2 router originating an RERR |
| RteMsg | Either RREQ or RREP |
| RteMsg.{field} | A field in either RREQ or RREP |
| AdvRte | A route advertised in an incoming RteMsg |
+------------------------+------------------------------------------+

Table 2: Notational Conventions

3. Applicability Statement

The AODVv2 routing protocol is a reactive routing protocol designed
for stub or disconnected mobile ad hoc networks, i.e., non-transit
networks or those not connected to the internet.

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 packets to a small percentage of
other AODVv2 routers in the network.

AODVv2 is well suited to reactive scenarios such as emergency and
disaster relief, where the ability to communicate is more important
than being assured of secure operations. For other ad hoc networking
applications, in which insecure operation could negate the value of
establishing communication paths, it is important for neighboring
AODVv2 nodes to establish security associations with one another.

By default, AODVv2 only supports bidirectional links. AODVv2
messages from routers which cannot confirm bidirectional connectivity
should be ignored to avoid persistent packet loss or protocol
failures.

AODVv2 is applicable to memory constrained devices, since only a
little routing state is maintained in each AODVv2 router. In
contrast to proactive routing protocols, which maintain routing
information for all destinations within the MANET, AODVv2 routes that
are not needed for forwarding data do not need to be maintained. On
routers unable to store persistent AODVv2 state, recovery can impose
a performance penalty (e.g., in case of AODVv2 router reboot).




Perkins, et al. Expires October 16, 2015 [Page 9]

Internet-Draft AODVv2 April 2015


AODVv2 supports routers with multiple interfaces, as long as each
interface has its own unicast routable IP address. Address
assignment procedures are out of scope for AODVv2.

Multi-homing is not supported by AODVv2, and therefore a Router
Client SHOULD NOT be served by more than one AODVv2 router at any one
time. Appendix B describes some notes on this topic.

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

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

When AODVv2 is the only protocol interacting with the forwarding
table, AODVv2 MAY be configured to perform route discovery for all
unknown unicast destinations. Such routers will reply for each
address request.

4. Data Structures

4.1. Interface List

A list of the interfaces supporting AODVv2 should be configured in
the AODVv2_INTERFACES list.

This list MAY contain the sequence numbers relating to each interface
(see Section 4.4).

4.2. Router Client List

An AODVv2 router may provide routing services for its own local
applications and for other non-routing nodes that are directly
reachable via its network interfaces. These nodes, including the
AODVv2 router itself, are referred to as Router Clients.

Each AODVv2 router MUST be configured with information about the IP
addresses of its clients. For this purpose, a CLIENT_ADDRESSES list
should exist with the following information:

Client.Address
The IP address of the client node or subnet that requires routing
services from the AODVv2 router.

Client.PrefixLength
The length, in bits, of the routing prefix associated with the
client IP address or subnet.



Perkins, et al. Expires October 16, 2015 [Page 10]

Internet-Draft AODVv2 April 2015


The list of Router Clients for an AODVv2 router is never empty, since
an AODVv2 router is always its own client. The IP Addresses of the
router's interfaces will appear in the Router Client list.

The router MUST respond to a Route Request for each of its Router
Clients. If a subnet is configured as a Router Client, the AODVv2
router MUST serve every node in that subnet. In the initial state,
an AODVv2 router is not required to have information about the Router
Clients of any other AODVv2 router.

A Router Client SHOULD NOT be served by more than one AODVv2 router
at any one time. Shifting responsibility for a Router Client to a
different AODVv2 router is discussed in Appendix C.

4.3. Blacklist

A blacklist SHOULD be maintained with information about neighboring
AODVv2 routers which cannot confirm bidirectional connectivity.
Routers should be blacklisted for a maximum of MAX_BLACKLIST_TIME,
but can be removed from the blacklist before this time if an
indication of bidirectional connectivity is received.

The blacklist is used to determine whether certain incoming AODVv2
messages have arrived on non-bidirectional links and should be
ignored.

Blacklist entries should contain:

Blacklist.IP Address
An IP address of the blacklisted router.

Blacklist.RemoveTime
The time at which this entry SHOULD be removed from the blacklist.
By default this value is calculated at the time the entry is
created and is equal to Current_Time + MAX_BLACKLIST_TIME.

Section 6.2 discusses how to monitor bidirectional connectivity.

4.4. Sequence Numbers

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

Each AODVv2 router in the network MUST maintain its own sequence
number as a 16-bit unsigned integer. All route messages (Route



Perkins, et al. Expires October 16, 2015 [Page 11]

Internet-Draft AODVv2 April 2015


Request and Route Reply messages) created by an AODVv2 router include
the router's sequence number.

However, if the router has multiple AODVv2 interfaces, it can
maintain different sequence numbers for each interface IP address,
but the router MUST NOT use multiple sequence numbers for any one
interface IP address. All route messages created on behalf of Router
Clients on a particular interface MUST include the sequence number of
that interface's IP address.

Each AODVv2 router MUST ensure that its sequence number is strictly
increasing. It can ensure this by incrementing the sequence number
whenever a route message is created. The sequence number is
incremented by adding one (1), 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 for an address is unknown.

A router receiving a route message uses the sequence number to
determine the freshness of the route information in the message in
comparison with any existing information about the same route. If
the sequence number in the message is higher than the sequence number
stored in the route table, the stored information for that route is
considered stale and the route should be updated. Conversely, if the
sequence number in the message is lower than the sequence number
stored in the route table, the message is considered stale and MUST
NOT be used to update the route table.

As a consequence, loop freedom is assured.

An AODVv2 router SHOULD maintain its sequence number(s) in persistent
storage. If a 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. Multicast Route Message Table

A route message (RteMsg) is either a Route Request and Route Reply
message. The Multicast Route Message Table (RteMsg Table) contains
information about previously received route messages, so that when a
multicast route message is received, an AODVv2 router can determine
if the incoming information is redundant, and avoid unnecessary
regeneration of the route message.

Each entry in the RteMsg Table stores the following information,
copied from the route message:

RteMsg.MessageType



Perkins, et al. Expires October 16, 2015 [Page 12]

Internet-Draft AODVv2 April 2015


Either RREQ or RREP.

RteMsg.OrigAddr
The IP address of the originating node wishing to send a packet.

RteMsg.TargAddr
The IP address of the target node, the destination of the packet.

RteMsg.OrigSeqNum
The sequence number associated with the originator, if present in
RteMsg.

RteMsg.TargSeqNum
The sequence number associated with the target, if present in
RteMsg.

RteMsg.MetricType
The metric type of the route requested.

RteMsg.Metric
The metric value received in the RteMsg.

RteMsg.Timestamp
The last time this entry was updated.

RteMsg.RemoveTime
The time at which this entry MUST be removed.

Entries in the RteMsg Table MUST be deleted when the sequence number
is no longer valid, i.e., after MAX_SEQNUM_LIFETIME. RemoveTime
should be set when the sequence number of the entry is updated, i.e.,
when OrigSeqNum is updated for a RREQ, and when TargSeqNum is updated
for a RREP. RemoveTime should be set to Current_Time +
MAX_SEQNUM_LIFETIME. Memory-constrained devices MAY remove the entry
before this time, but the entry 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.

Multicast RteMsgs are considered to be comparable if they have the
same MessageType, OrigAddr, TargAddr, and MetricType. The RteMsg
Table is maintained so that no two entries are comparable, i.e., all
entries either have different MessageType, different OrigAddr,
different TargAddr, or different MetricType. See Section 6.6 for
details on updating this table.







Perkins, et al. Expires October 16, 2015 [Page 13]

Internet-Draft AODVv2 April 2015


4.6. Route Table Entry

The route table entry is a conceptual data structure.
Implementations MAY use any internal representation that provides
access to the following information:

Route.Address
An address or address prefix of a node.

Route.PrefixLength
The prefix length, in bits, associated with the address. If it is
less than the length of Route.Address, this is a route to the
subnet on which Route.Address resides.

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

Route.NextHop
An IP address of the AODVv2 router used for the next hop on the
path toward Route.Address.

Route.NextHopInterface
The interface used to send packets toward Route.Address.

Route.LastUsed
The time this route was last used to forward a packet.

Route.LastSeqNumUpdate
The time the sequence number for this route was last updated.

Route.ExpirationTime
The time at which this route must be marked as Invalid.

Route.Timed
TRUE if the route has a limited validity time.

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

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

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




Perkins, et al. Expires October 16, 2015 [Page 14]

Internet-Draft AODVv2 April 2015


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

An AODVv2 route may be valid for a limited time. In this case, the
Route.Timed flag is set and the Route.ExpirationTime reflects the
shortened validity time of the route.

5. Metrics

Metrics measure a cost or quality associated with a route or a link,
e.g., latency, delay, financial cost, energy, etc.

AODVv2 enables the use of monotonically increasing metrics. Each
metric that can be used in AODVv2 has a MetricType, which is
allocated by IANA as specified in [RFC6551] and also detailed in
Section 12.4. The default metric type is discussed in Section 5.3.
Alternate metrics are discussed in Section 5.4.

For each MetricType, a maximum value is defined, denoted
MAX_METRIC[MetricType]. AODVv2 cannot store routes that cost more
than MAX_METRIC[MetricType]. If a received route exceeds this
maximum, it is ignored.

Metric information reported in incoming route messages describes the
metric as measured by message sender, and does not reflect the cost
of traversing the link to that sender. The receiving router
calculates the cost of the route from its perspective. This cost is
used to determine whether to use incoming information to update an
existing route.

5.1. Cost Function

This document uses the following notation to represent costs:

o Cost(L) for link cost

o Cost(R) for route cost

These functions return the cost of traversing a link or a route.
Cost(L) and Cost(R) for the default metric type are detailed in
Section 5.3. The Cost() functions for other metric types are beyond
the scope of this document.

5.2. LoopFree Function

When comparing an advertised route to an existing route for the same
destination and the same metric type, the metric value should be




Perkins, et al. Expires October 16, 2015 [Page 15]

Internet-Draft AODVv2 April 2015


examined to ensure that using the advertised route to update the
route table will not cause a routing loop to form.

The function LoopFree(R1, R2) is defined to verify that a route R1 is
independent of another route R2. LoopFree returns TRUE if R2 cannot
be a sub-section of the route R1.

An AODVv2 router invokes LoopFree() to compare an advertised route to
a stored route as part of the process in Section 6.5.1. The
advertised route (AdvRte) is used as parameter R1, and the stored
route (Route) is used as parameter R2.

The LoopFree(R1,R2) function for the default metric type is detailed
in Section 5.3. The LoopFree(R1,R2) functions for other metric types
are beyond the scope of this document.

5.3. Default Metric Type

AODVv2's default metric type (DEFAULT_METRIC_TYPE) is HopCount, and
is the only metric described in detail in this document. Alternate
metrics are discussed in Section 5.4.

For the HopCount metric:

o Cost(L) = 1

o Cost(R) = hop count between the router and the destination

o LoopFree(R1, R2) returns TRUE when the cost of R1 is less than or
equal to the cost of R2, i.e., Cost(R1) <= Cost(R2)

o MAX_METRIC[HopCount] = MAX_HOPCOUNT

The LoopFree function is derived from the fact that route cost
increases with number of hops. When examining two routes, the route
with higher cost may include the route with lower cost as a sub-
section of its route. Therefore, an advertised route with higher
cost than the corresponding stored route could include the stored
route as a sub-section. Replacing the stored route with the received
route could form a routing loop. LoopFree returns FALSE in this case
to indicate that an advertised route with higher cost is not to be
used to update a stored route, even if the stored route is invalid.

MAX_HOPCOUNT is a constant defined in Section 11.2. It MUST be
larger than the AODVv2 network diameter, in order that AODVv2
protocol messages may reach their intended destinations.





Perkins, et al. Expires October 16, 2015 [Page 16]

Internet-Draft AODVv2 April 2015


5.4. Alternate Metric Types

Some applications may require metric information other than hop
count. For this reason, AODVv2 enables route selection based on
alternate metric types.

Using non-default metrics in an AODVv2 message requires the inclusion
of the MetricType data element.

Alternate metrics may have different types and ranges, for example
integers or floating point numbers, or restricted subsets thereof.
Therefore the size of the metric field in route messages may vary.
See Section 12.4 for further information on MetricType number
allocation and size.

It is out of the scope of this document to specify for alternate
metrics the Cost(L) and Cost(R) functions. Where possible these
should take into account differences in the link cost in each
direction.

The LoopFree() function for alternate metric types is also out of
scope for this document.

6. AODVv2 Protocol Operations

The AODVv2 protocol's operations include managing sequence numbers,
monitoring adjacent AODVv2 routers, performing route discovery and
dealing with requests from other routers, processing incoming route
information and updating the route table, suppressing redundant
messages, maintaining the route table and reporting broken routes.
These processes are discussed in detail in the following sections.

6.1. Initialization

During initialization where the previous sequence number is unknown,
or if the sequence number is lost at any point, an AODVv2 router
resets its sequence number(s) to one (1). However, other AODVv2
routers may still hold sequence number information this router
previously issued. Since sequence number information will be removed
if there have been no sequence number updates in MAX_SEQNUM_LIFETIME,
the initializing router must wait for MAX_SEQNUM_LIFETIME before it
creates any messages containing its 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:

o Create RREQ or RREP messages



Perkins, et al. Expires October 16, 2015 [Page 17]

Internet-Draft AODVv2 April 2015


During this wait period, the router can do the following:

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

o Send a RREP_Ack

o Regenerate a received RREQ or RREP

o Forward data packets to Router Clients, and to other routers, if a
route exists

o Create, process and regenerate RERR messages

6.2. Adjacency Monitoring

An adjacency is a bidirectional relationship between neighboring
AODVv2 routers for the purpose of exchanging routing information.
Not every pair of neighboring routers will necessarily form an
adjacency, but AODVv2 routers SHOULD monitor connectivity to
neighboring AODVv2 routers along active routes. If bidirectional
connectivity does not exist, routers should not share routing
information using AODVv2.

The default approach for monitoring connectivity is to request
acknowledgement of Route Reply messages. An acknowledgement proves
that bidirectional connectivity exists. See Section 7.2 and
Section 7.3 for further details on how this is accomplished.

When routers perform other operations such as those from the list
below, these can 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

For example, receipt of a Neighborhood Discovery Protocol HELLO
message with the receiving router listed as a neighbor is a signal of
bidirectional connectivity. In this case, the AODVv2 router doesn't



Perkins, et al. Expires October 16, 2015 [Page 18]

Internet-Draft AODVv2 April 2015


need to request an acknowledgement of the RREP. Similarly, if AODVv2
received notification of a timeout, this may be due to a
disconnection, and the AODVv2 router SHOULD attempt to verify
connectivity by requesting acknowledgement of any RREP messages sent
to that neighbor.

Received RREPs are also an indication of bidirectional connectivity,
since a RREP is a reply to a RREQ which previously crossed the link
in the opposite direction.

When a link to a neighbor is determined to be unidirectional, either
by failure to acknowledge a RREP, or by some other means, the
neighbor MUST be placed in a blacklist as described in Section 4.3.
The blacklisted neighbor SHOULD NOT be permanently blacklisted; after
a certain time (MAX_BLACKLIST_TIME), it SHOULD once again be
considered as a viable neighbor for route discovery operations.
Also, if other indications are received that a blacklisted router has
restored bidirectional connectivity, then the router SHOULD be
immediately removed from the blacklist.

RREQs received from a blacklisted router, or any router over a link
that is known to be incoming-only, MUST be disregarded.

6.3. Message Transmission

In its default mode of operation, AODVv2 sends [RFC5444] formatted
messages using the parameters for port number and IP protocol
specified in [RFC5498]. Mapping of AODVv2 data elements to RFC 5444
is detailed in Section 8.

Unless otherwise specified, 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.

Implementations are free to choose their own heuristics for reducing
multicast overhead. Some methods for doing so are described in
[RFC6621]. AODVv2 does not specify which method should be used to
restrict the set of AODVv2 routers that have the responsibility to
regenerate multicast packets. Note that multicast packets MAY be
sent via unicast. For example, this may occur for certain link-types
(non-broadcast media), for manually configured router adjacencies, or
in order to improve robustness.

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



Perkins, et al. Expires October 16, 2015 [Page 19]

Internet-Draft AODVv2 April 2015


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. The implementation is free to choose the
algorithm for limiting messages and the rate (CONTROL_TRAFFIC_LIMIT)
should be administratively configurable. AODVv2 messages SHOULD be
discarded in the following order of preference: RREQ, RREP, RERR,
RREP_Ack.

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

6.4. Route Discovery, Retries and Buffering

AODVv2's RREQ and RREP messages are used for route discovery and are
together known as route messages (RteMsgs). The main difference
between the two messages is that, by default, RREQ messages are
multicast to solicit a RREP, whereas RREP is unicast as a response to
the RREQ. The constants used in this section are defined in
Section 11.

When an AODVv2 router needs to forward a data packet (with source
address OrigAddr and destination address TargAddr) from one of its
Router Clients, it needs a route to the packet's destination. If no
route exists, the AODVv2 router, hereafter referred to as RREQ_Gen,
generates a Route Request message (RREQ) using OrigAddr and TargAddr.
The procedure for this is described in Section 7.1.1.

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

RREQ_Gen awaits reception of a Route Reply message (RREP) or other
route message containing a route toward TargAddr. A RREQ from
TargAddr would also fulfil the request.

If a route to TargAddr is not learned within RREQ_WAIT_TIME, RREQ_Gen
MAY retry the route discovery by generating another RREQ. To reduce
congestion in a network, repeated attempts at route discovery for a



Perkins, et al. Expires October 16, 2015 [Page 20]

Internet-Draft AODVv2 April 2015


particular target address SHOULD utilize a binary exponential
backoff, as described in [RFC3561], where the wait time is doubled
for each retry.

Route discovery SHOULD be considered to have failed after
DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for a RREP
response to the final RREQ. After the attempted route discovery has
failed, RREQ_Gen MUST wait at least RREQ_HOLDDOWN_TIME before
attempting another route discovery to the same destination. Any data
packets buffered for TargAddr MUST also be dropped and a Destination
Unreachable ICMP message (Type 3) with a code of 1 (Host Unreachable
Error) SHOULD be delivered to the source of the data packet. The
source may be an application on the AODVv2 router or on the Router
Client with address OrigAddr.

If RREQ_Gen receives a route message containing a route to TargAddr
within the timeout, it processes the message according to Section 7.
Once the route is installed, the router can begin sending the
buffered packets. Any retry timers for the corresponding RREQ SHOULD
then be cancelled.

During route discovery, all routers on the path learn a route to both
OrigAddr and TargAddr, making the constructed route bidirectional.

6.5. Processing Received Route Information

All AODVv2 route messages contain a route. A Route Request (RREQ)
includes a route to OrigAddr, and a Route Reply (RREP) contains a
route to TargAddr.

All AODVv2 routers that receive a route message can store the route
contained within it. Incoming information is first checked to verify
that it is both safe to use and offers an improvement to existing
information. This process is explained in Section 6.5.1. The route
table may then be updated according to Section 6.5.2.

In the processes below, RteMsg is used to denote the route message,
AdvRte is used to denote the route contained within it, and Route
denotes a stored routing table entry which matches AdvRte.

AdvRte has the following properties:

o AdvRte.Address = RteMsg.OrigAddr (in RREQ) or RteMsg.TargAddr (in
RREP)

o AdvRte.PrefixLength = RteMsg.OrigPrefixLen (in RREQ) or
RteMsg.TargPrefixLen (in RREP) if included, or if no prefix length




Perkins, et al. Expires October 16, 2015 [Page 21]

Internet-Draft AODVv2 April 2015


was included in RteMsg, the address length, in bits, of
AdvRte.Address

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

o AdvRte.MetricType = RteMsg.MetricType if included, or
DEFAULT_METRIC_TYPE if not

o AdvRte.Metric = RteMsg.Metric

o AdvRte.Cost = AdvRte.Metric + Cost(L) using the cost function
associated with the route's metric type, where L is the link from
the advertising router

o AdvRte.ValidityTime = RteMsg.ValidityTime, if included

If prefix length information is present, the route describes the
subnet the address resides on rather than a single device.

6.5.1. Evaluating Route Information

To determine whether the advertised route should be used to update
the routing table, the incoming route information MUST be processed
as follows:

1. Search for a routing table entry (Route) matching AdvRte's
address, prefix length and metric type

* If no route exists, AdvRte SHOULD be used to update the
routing table.

* If a route exists, continue to Step 2.

2. Compare sequence numbers

* If AdvRte is more recent (AdvRte.SeqNum > Route.SeqNum),
AdvRte MUST be used to update Route.

* If AdvRte is stale (AdvRte.SeqNum < Route.SeqNum), AdvRte MUST
NOT be used to update Route.

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

3. Compare route costs

* For some metric types, including the default metric, the best
route is the route with the lowest metric value. For other



Perkins, et al. Expires October 16, 2015 [Page 22]

Internet-Draft AODVv2 April 2015


metric types, the best route may be the route with the highest
metric.

* If AdvRte is better, it SHOULD be used to update Route because
it offers improvement.

* If AdvRte is not better (i.e., it is worse or equal) and Route
is valid, AdvRte MUST NOT be used to update Route because it
does not offer any improvement.

* If AdvRte is not better (i.e., it is worse or equal) but Route
is Invalid, continue to Step 4.

4. Check that AdvRte is safe against routing loops (see Section 5.2)

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

* If LoopFree(AdvRte, Route) returns TRUE, AdvRte SHOULD be used
to update Route because it can safely repair the existing
invalid route.

If the advertised route SHOULD be used to update the route table, the
procedure in Section 6.5.2 is followed.

6.5.2. Applying Route Updates

If no existing route in the route table matches AdvRte on address,
prefix length and metric type, a new route table entry is created and
initialized as follows:

o Route.Address = AdvRte.Address

o Route.PrefixLength = AdvRte.PrefixLength (if included), or the
length, in bits, of Route.Address (32 for IPv4 or 128 for IPv6)

o Route.MetricType = AdvRte.MetricType

o Route.State = Idle

The other fields of the route table entry are assigned as follows:

o Route.SeqNum = AdvRte.SeqNum

o Route.NextHop = IP.SourceAddress (the address of the router from
which the AdvRte was received)




Perkins, et al. Expires October 16, 2015 [Page 23]

Internet-Draft AODVv2 April 2015


o Route.NextHopInterface = interface on which RteMsg was received

o Route.Metric = AdvRte.Cost

o Route.LastUsed = Current_Time

o Route.LastSeqNumUpdate = Current_Time

o Route.ExpirationTime = Current_Time + AdvRte.ValidityTime if a
validity time exists, otherwise MAXTIME

o Route.Timed = TRUE if AdvRte.ValidityTime exists, otherwise FALSE

In addition, if Route.State was Invalid before the update, it should
be set to Idle.

If this route update fulfills any route discoveries in progress, the
associated timers can be cancelled and any buffered packets for this
route can be forwarded.

6.6. Suppressing Redundant Messages

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

Each AODVv2 router stores information about recently received route
messages in the AODVv2 Multicast RteMsg Table (Section 4.5).
Received RteMsgs are tested against previously received RteMsgs, and
if determined to be redundant, regeneration can be avoided. Where
necessary, regeneration is performed using the processes in
Section 7.

To determine if a received RREQ is redundant:

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

* If there is none, create an entry to store information about
the received RREQ and regenerate the RREQ.

* If there is an entry, update the timestamp field, since
comparable RteMsgs are still traversing the network, and
continue to Step 2.

2. Compare the sequence numbers




Perkins, et al. Expires October 16, 2015 [Page 24]

Internet-Draft AODVv2 April 2015


* If the entry has a lower OrigSeqNum than the received RREQ,
update the entry using information from the new RREQ and
regenerate the RREQ.

* If the entry has a higher OrigSeqNum than the received RREQ,
do not update the entry and do not regenerate the RREQ.

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

3. Compare the metric values

* If the entry has a Metric that is worse than the received
RREQ, update the entry using information from the new RREQ.
The RREQ MAY be suppressed to avoid extra control traffic, or
regenerated to ensure other routers have the up-to-date
information.

* If the entry has a Metric that is better than the received
RREQ, do not update the entry and do not regenerate the RREQ.

If the processing of the RteMsg results in an update to the route
table, the router MAY force regeneration of the RteMsg even if it
would be considered redundant, to ensure other routers have up-to-
date information.

Section 10.3 describes an optional feature for AODVv2 where RREP
messages are sent using multicast. If this feature is enabled,
regeneration of redundant RREP messages should be avoided using an
analogous process, substituting RREP for RREQ, TargSeqNum for
OrigSeqNum, and Section 7.2.3 for Section 7.1.3.

6.7. Route Maintenance

Route maintenance involves monitoring and updating route state,
handling route timeouts and reporting routes that become invalid.

Before using a route to forward a packet, an AODVv2 router MUST check
the status of the route (Section 6.7.1). If the route is valid, it
must be marked as Active and its LastUsed timestamp must be updated,
before forwarding the packet to the route's next hop. If there is no
valid route, this MUST be reported to the packet's source (see
Section 6.7.2).

6.7.1. Route State

During normal operation, AODVv2 does not require any explicit
timeouts to manage the lifetime of a route. At any time, any route
table entry can be examined and updated according to the rules below.



Perkins, et al. Expires October 16, 2015 [Page 25]

Internet-Draft AODVv2 April 2015


Route state should be checked before packet forwarding and before any
operation based on route state.

There are three possible states for an AODVv2 route:

Active
An Active route is in current use for forwarding packets. If the
route is not timed, it becomes Idle if not used within
ACTIVE_INTERVAL. A timed route remains Active until its
expiration time, after which it MAY either be expunged or marked
as Invalid.

Idle
An Idle route has not been used in the last ACTIVE_INTERVAL, but
can still be used for forwarding packets, in which case it becomes
an Active route again. If not used, an Idle route remains idle
for MAX_IDLETIME before becoming an Invalid route.

Invalid
An Invalid route cannot be used for forwarding packets, but the
sequence number information MAY be maintained until
MAX_SEQNUM_LIFETIME after the last sequence number update. This
allows incoming information to be assessed for freshness.

If the time since the route's last sequence number update exceeds
MAX_SEQNUM_LIFETIME, the sequence number must be removed from the
route. If the route is Invalid at this time, it MUST be expunged.
Active and Idle routes can continue to be used to forward packets.
The removal of the sequence number is required to ensure that any
AODVv2 routers following the initialization procedure can safely
begin routing functions using a new sequence number.

Appendix D.1.1 contains an algorithmic representation of this timeout
behavior.

Routes can become Invalid before a timeout occurs:

o If a link breaks, all routes using that link as the next hop MUST
immediately be marked as Invalid.

o If a Route Error (RERR) message containing the route is received
from the route's next hop, the route MUST immediately be marked as
Invalid.

Memory constrained devices MAY choose to expunge routes from the
AODVv2 route table before their expiration time, but MUST adhere to
the following rules:




Perkins, et al. Expires October 16, 2015 [Page 26]

Internet-Draft AODVv2 April 2015


o An Active route MUST NOT be expunged.

o An Idle route SHOULD NOT be expunged.

o Any Invalid route MAY be expunged; least recently used Invalid
routes SHOULD be expunged first.

6.7.2. Reporting Invalid Routes

When an Active route becomes Invalid as a result of a broken link or
a received Route Error (RERR) message, other routers should be
informed by sending a RERR message containing details of the
invalidated routes.

A RERR message should also be sent when an AODVv2 router receives a
packet to forward on behalf of another router but does not have a
valid route for the destination of the packet. This packet may be a
data packet or, in rare cases, a RREP message, if the route to the
request originator has been lost. The packet triggering the RERR
MUST be discarded.

Generation of a 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 elements. Rules for
the generation, reception and regeneration of each message type are
described in the following sections. Section 8 discusses how the
data elements map to RFC 5444 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 general structure:











Perkins, et al. Expires October 16, 2015 [Page 27]

Internet-Draft AODVv2 April 2015


+-----------------------------------------------------------------+
| msg_hop_limit, msg_hop_count (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| OrigSeqNum, TargSeqNum (optional) |
+-----------------------------------------------------------------+
| MetricType (optional) |
+-----------------------------------------------------------------+
| MetricList |
+-----------------------------------------------------------------+
| ValidityTimeList (optional) |
+-----------------------------------------------------------------+

Figure 1: RREQ message structure

RREQ Data Elements

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 packet for which a route is requested.
OrigAddr and TargAddr MUST be routable unicast addresses.

PrefixLengthList
Contains the length, in bits, of the prefix associated with
OrigAddr. If omitted, the prefix length is equal to OrigAddr's
address length in bits. If OrigAddr resides on a subnet
configured as a Router Client, the prefix length represents the
number of bits in the subnet mask.

OrigSeqNum
The sequence number associated with OrigAddr.

TargSeqNum
A sequence number associated with TargAddr. This may be
included if an Invalid route exists to the target.

MetricType



Perkins, et al. Expires October 16, 2015 [Page 28]

Internet-Draft AODVv2 April 2015


The type of metric associated with entries in the MetricList.
This element can be omitted if the default metric type is used.

MetricList
Carries one metric, OrigAddrMetric, which is the metric
associated with the route to OrigAddr, as measured by the
sender of the message.

ValidityTimeList
Carries the length of time that the message sender is willing
to offer a route toward OrigAddr, and is omitted if no time
limit is imposed.

The OrigSeqNum data element in a RteMsg MUST apply only to OrigAddr.
Therefore the other address in the AddressList is TargAddr. If the
TargSeqNum data element is included, then it MUST apply only to
TargAddr.

7.1.1. RREQ Generation

A RREQ is generated when a packet needs to be forwarded for a Router
Client, and no valid route currently exists for the packet's
destination.

Before creating a RREQ, the router should check if a RREQ has
recently been sent for the requested destination. If already
awaiting a response, the packet should be buffered and the router
should continue to await a response without generating a new RREQ.

If the limit for the rate of AODVv2 control message generation has
been reached, no message should be generated.

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

1. Set msg_hop_limit = MAX_HOPCOUNT

2. Set msg_hop_count = zero, if including it

3. Set AddressList = {OrigAddr, TargAddr}

4. For the PrefixLengthList:

* If OrigAddr resides on a Router Client subnet, set
PrefixLengthList = {OrigAddr's prefix length in bits, null}.

* Otherwise, omit PrefixLengthList.




Perkins, et al. Expires October 16, 2015 [Page 29]

Internet-Draft AODVv2 April 2015


5. For the Sequence Number List:

* Increment the SeqNum as specified in Section 4.4.

* Set OrigSeqNum = SeqNum.

* If an Invalid route exists matching TargAddr using longest
prefix matching and has a valid sequence number, set
TargSeqNum = route's sequence number.

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

6. Include the MetricType data element if requesting a route for a
non-default metric type, and set the type accordingly

7. Set MetricList = {Route[OrigAddr].Metric, null}

8. Include the ValidityTimeList if advertising that the route to
OrigAddr via this router is valid for a limited time, and set
ValidityTimeList = {ValidityTime for OrigAddr, null}

This AODVv2 message is used to create a corresponding RFC 5444
message (see Section 8) which is multicast, by default, to LL-MANET-
Routers.

7.1.2. RREQ Reception

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

1. If the sender is blacklisted (Section 4.3), check the entry's
remove time

* If Current_Time < Remove Time, ignore this RREQ for further
processing.

* If Current_Time >= Remove Time, remove the blacklist entry and
continue to Step 2.

2. Verify that the message hop count hasn't exceeded MAX_HOPCOUNT

* If so, ignore this RREQ for further processing.

3. Verify that the message contains the required data elements:
msg_hop_limit, OrigAddr, TargAddr, OrigSeqNum, and a Metric for
OrigAddr, and that OrigAddr and TargAddr are valid addresses
(routable and unicast)




Perkins, et al. Expires October 16, 2015 [Page 30]

Internet-Draft AODVv2 April 2015


* If not, ignore this RREQ for further processing.

4. If the MetricType data element is present, check that the metric
type is known

* 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 as specified in Section 6.5.1

7. Check if the message is redundant by comparing to entries in the
RteMsg table (Section 6.6)

* If redundant, ignore this RREQ for further processing.

* If not redundant, save the information in the RteMsg table to
identify future duplicates and continue processing.

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

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

* If not, continue to RREQ regeneration.

7.1.3. RREQ Regeneration

By regenerating a RREQ, a router advertises that it will forward
packets to the OrigAddr contained in the RREQ according to the
information enclosed. The router MAY choose not to regenerate the
RREQ, though this could decrease connectivity in the network or
result in non-optimal paths. The circumstances under which a router
may avoid regenerating a RREQ are not declared in this document,
though examples include the router being heavily loaded or low on
energy and therefore unwilling to advertise routing capability for
more traffic.

The RREQ should not be regenerated if the limit for the rate of
AODVv2 control message generation has been reached, or if the
msg_hop_limit in the received RREQ is zero, or if msg_hop_count is
present and greater than or equal to MAX_HOPCOUNT.

The procedure for RREQ regeneration is as follows:




Perkins, et al. Expires October 16, 2015 [Page 31]

Internet-Draft AODVv2 April 2015


1. Set msg_hop_limit = received msg_hop_limit - 1

2. Set msg_hop_count = received msg_hop_count + 1, if included,
otherwise omit msg_hop_count

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

4. Set MetricList = {Route[OrigAddr].Metric, null}

5. If the received RREQ contains a ValidityTimeList, or if the
regenerating router wishes to limit the time that its route to
OrigAddr may be used, the regenerated RREQ MUST include a
ValidityTimeList

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

* Set ValidityTimeList = {ValidityTime for OrigAddr, null}.

This AODVv2 message is used to create a corresponding RFC 5444
message (see Section 8) which is multicast, by default, to LL-MANET-
Routers. However, the regenerated RREQ can be unicast to the next
hop address of the route toward TargAddr, if known.

7.2. Route Reply (RREP) Message

A Route Reply message is sent in response to a Route Request message
and offers a route to the target address from the RREQ. RREP
messages have the following general structure:




















Perkins, et al. Expires October 16, 2015 [Page 32]

Internet-Draft AODVv2 April 2015


+-----------------------------------------------------------------+
| msg_hop_limit, msg_hop_count (optional) |
+-----------------------------------------------------------------+
| AckReq (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| TargSeqNum |
+-----------------------------------------------------------------+
| MetricType (optional) |
+-----------------------------------------------------------------+
| MetricList |
+-----------------------------------------------------------------+
| ValidityTimeList (optional) |
+-----------------------------------------------------------------+

Figure 2: RREP message structure

RREP Data Elements

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
Indicates that an acknowledgement to the RREP is requested by
the sender (optional).

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

PrefixLengthList
Contains the length, in bits, of the prefix associated with
TargAddr. If omitted, the prefix length is equal to TargAddr's
address length, in bits. If TargAddr resides on a subnet
configured as a Router Client, the prefix length represents the
number of bits in the subnet mask.

TargSeqNum
The sequence number associated with TargAddr.



Perkins, et al. Expires October 16, 2015 [Page 33]

Internet-Draft AODVv2 April 2015


MetricType
The type of metric associated with entries in the MetricList.
This element can be omitted if the default metric type is used.

MetricList
Carries one metric, the metric associated with the route to
TargAddr, as seen from the sender of the message.

ValidityTimeList
Carries the length of time that the message sender is willing
to offer a route toward TargAddr, and is omitted if no time
limit is imposed.

The TargSeqNum data element in a RteMsg MUST apply only to TargAddr.
Therefore the other address in the AddressList is OrigAddr.

7.2.1. RREP Generation

A RREP is generated when a RREQ arrives for one of the AODVv2
router's Router Clients.

Before creating a RREP, the router should check if the corresponding
RREQ is redundant, i.e., a response has already been generated, or if
the limit for the rate of AODVv2 control message generation has been
reached. If so, the RREP should not be created.

The RREP can include an AckReq data element in order to achieve
adjacency monitoring as described in Section 6.2. The AckReq
indicates that an acknowledgement to the RREP is requested, in the
form of a Route Reply Acknowledgement (RREP_Ack). If no
acknowledgement or other indication of bidirectional connectivity is
received within RREP_Ack_SENT_TIMEOUT, the next hop is added to the
blacklist (Section 4.3).

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 bidirectional connectivity to the next hop toward OrigAddr is
not already confirmed, include the AckReq data element

4. Set Address List = {OrigAddr, TargAddr}

5. For the PrefixLengthList:



Perkins, et al. Expires October 16, 2015 [Page 34]

Internet-Draft AODVv2 April 2015


* If TargAddr resides on a Router Client subnet, set
PrefixLengthList = {null, TargAddr subnet's prefix length, in
bits}.

* Otherwise, omit PrefixLengthList.

6. For the TargSeqNum:

* Increment the SeqNum as specified in Section 4.4.

* Set TargSeqNum = SeqNum.

7. Include the MetricType data element if the route requested is for
a non-default metric type, and set the type accordingly

8. Set MetricList = {null, Route[TargAddr].Metric}

9. Include the ValidityTimeList if advertising that the route to
TargAddr via this router is valid for a limited time, and set
ValidityTimeList = {ValidityTime for TargAddr, null}

This AODVv2 message is used to create a corresponding RFC 5444
message (see Section 8) which is unicast, by default, to the IP
address of the next hop of RREP_Gen's route to OrigAddr.

7.2.2. RREP Reception

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

1. If the sender is blacklisted (Section 4.3), it should be removed
from the blacklist since a RREP is an indication of
bidirectional connectivity

2. Verify that the message hop count hasn't exceeded MAX_HOPCOUNT

* If so, ignore this RREQ for further processing.

3. Verify that the message contains the required data elements:
msg_hop_limit, OrigAddr, TargAddr, TargSeqNum, and a Metric for
TargAddr, and that OrigAddr and TargAddr are valid addresses
(routable and unicast)

* If not, ignore this RREP for further processing.

4. If the MetricType data element is present, check that the metric
type is known

* If not, ignore this RREP for further processing.



Perkins, et al. Expires October 16, 2015 [Page 35]

Internet-Draft AODVv2 April 2015


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 RREP for further processing.

6. Process the route to TargAddr as specified in Section 6.5.1

* If the route to TargAddr fulfills a previously sent RREQ, any
associated timeouts will be cancelled and buffered packets
will be forwarded to TargAddr, but processing continues to
Step 6.

7. If the AckReq data element is present, send an acknowledgement
as specified in Section 7.3

8. Check if the message is redundant by comparing to entries in the
RteMsg table (Section 6.6)

* If redundant, ignore this RREP for further processing.

* If not redundant, save the information in the RteMsg 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.

10. Check if a valid route exists to OrigAddr

* If so, continue to RREP regeneration.

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

7.2.3. RREP Regeneration

Unless the router is prepared to advertise the route contained within
the RREP, it halts processing. By forwarding a RREP, a router
advertises that it will forward packets to TargAddr according to the
information enclosed. The router MAY choose not to regenerate the
RREP, in the same way it may choose not to regenerate a RREQ (see
Section 7.1.3), though this could decrease connectivity in the
network or result in non-optimal paths.





Perkins, et al. Expires October 16, 2015 [Page 36]

Internet-Draft AODVv2 April 2015


The RREP should not be regenerated if the limit for the rate of
AODVv2 control message generation has been reached, or if the
msg_hop_limit in the received RREP is zero, or if msg_hop_count is
present and greater than or equal to MAX_HOPCOUNT.

The procedure for RREP regeneration is as follows:

1. Set msg_hop_limit = received msg_hop_limit - 1

2. Set msg_hop_count = received msg_hop_count + 1, if it was
included, otherwise omit msg_hop_count

3. If bidirectional connectivity to the next hop toward OrigAddr is
not already confirmed, include the AckReq data element

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

5. Set MetricList = {null, Route[TargAddr].Metric}

6. If the received RREP contains a ValidityTimeList, or if the
regenerating router wishes to limit the time that its route to
TargAddr may be used, the regenerated RREP MUST include a
ValidityTimeList

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

* Set ValidityTimeList = {null, ValidityTime for TargAddr}.

This AODVv2 message is used to create a corresponding RFC 5444
message (see Section 8) which is unicast, by default, to the IP
address of the next hop of RREP_Gen's route to OrigAddr.

7.3. Route Reply Acknowledgement (RREP_Ack) Message

The Route Reply Acknowledgement is sent in response to a received
Route Reply which includes an AckReq data element. When the RREP_Ack
is received, it confirms that bidirectional connectivity exists
between the two routers. The RREP_Ack is modeled on the RREP_Ack
message from AODV ([RFC3561]). It is never regenerated. RREP_Ack
messages have the following general structure:








Perkins, et al. Expires October 16, 2015 [Page 37]

Internet-Draft AODVv2 April 2015


+-----------------------------------------------------------------+
| msg_hop_limit |
+-----------------------------------------------------------------+

Figure 3: RREP_Ack message structure

RREP_Ack Data Elements

msg_hop_limit
The remaining number of hops allowed for dissemination of the
RREP_Ack message.

7.3.1. RREP_Ack Generation

A RREP_Ack is generated when the AckReq data element is included in a
received RREP. The RREP_Ack should not be generated if the limit for
the rate of AODVv2 control message generation has been reached.

To generate the RREP_Ack, the router follows this procedure:

1. Set msg_hop_limit = 1

This AODVv2 message is used to create a corresponding RFC 5444
message (see Section 8) which is unicast, by default, to the IP
address of the router that requested it.

7.3.2. RREP_Ack Reception

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

1. If a RREP_Ack message was expected from the IP source address of
the RREP_Ack, the router cancels any associated timeouts

2. If the RREP_Ack was expected, ensure the router sending the
RREP_Ack is not in the blacklist

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. A RERR
message has the following general structure:









Perkins, et al. Expires October 16, 2015 [Page 38]

Internet-Draft AODVv2 April 2015


+-----------------------------------------------------------------+
| msg_hop_limit |
+-----------------------------------------------------------------+
| PktSource (optional) |
+-----------------------------------------------------------------+
| AddressList |
+-----------------------------------------------------------------+
| PrefixLengthList (optional) |
+-----------------------------------------------------------------+
| SeqNumList (optional) |
+-----------------------------------------------------------------+
| MetricType (optional) |
+-----------------------------------------------------------------+

Figure 4: RERR message structure

RERR Data Elements

msg_hop_limit
The remaining number of hops allowed for dissemination of the
RERR message.

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

AddressList
The addresses of the routes no longer available through
RERR_Gen.

PrefixLengthList
The prefix lengths, in bits, associated with the routes no
longer available through RERR_Gen, indicating whether a route
represents a single device or a subnet.

SeqNumList
The sequence numbers of the routes no longer available through
RERR_Gen.

MetricType
The type of metric associated with the routes no longer
available through RERR_Gen. This element can be omitted if all
routes use the default metric type.







Perkins, et al. Expires October 16, 2015 [Page 39]

Internet-Draft AODVv2 April 2015


7.4.1. RERR Generation

A RERR is generated when an AODVv2 router needs to report that a
destination is no longer reachable. There are two events that cause
this response:

o If a packet arrives that cannot be forwarded because no valid
route exists for its destination, the RERR generated MUST contain
the PktSource data element and will contain only one unreachable
address. The contents of PktSource and AddressList depend on the
packet that triggered the RERR:

* If the packet is a data packet forwarded by another AODVv2
router, PktSource will contain the source IP address of the
packet, and the AddressList will contain the destination IP
address of the packet.

* If the packet is a RREP where the route to OrigAddr has been
lost, PktSource will contain the TargAddr of the RREP, and the
AddressList will contain the OrigAddr from the RREP.

The prefix length and sequence number MAY be included if known
from an Invalid route entry to the destination IP address of the
packet. The MetricType data element MAY also be included if an
Invalid route exists and the metric type is not
DEFAULT_METRIC_TYPE.

RERR_Gen MUST discard the packet or message that triggered
generation of the RERR.

o When a link breaks, multiple routes may become Invalid, and the
RERR generated MAY contain multiple unreachable addresses. If the
message would cause the MTU to be exceeded, or if routes with
multiple metric types become Invalid, multiple RERR messages must
be sent. The RERR MUST contain the MetricType data element if the
metric type is not DEFAULT_METRIC_TYPE. The PktSource data
element is omitted.

All previously Active routes that used the broken link MUST be
reported. The AddressList, PrefixLengthList, and SeqNumList will
contain entries for each invalidated route.

A RERR message is only sent if an Active route becomes Invalid,
though an AODVv2 router can also include Idle routes that become
Invalid if the configuration parameter ENABLE_IDLE_IN_RERR is set
(see Section 11.3).





Perkins, et al. Expires October 16, 2015 [Page 40]

Internet-Draft AODVv2 April 2015


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

The RERR should not be generated if the limit for the rate of AODVv2
control message generation has been reached.

To generate the RERR, the router (also referred to as RERR_Gen)
follows this procedure:

1. Set msg_hop_limit = MAX_HOPCOUNT

2. If necessary, include the PktSource data element and set the
value to the source address of the packet triggering the RERR

3. If necessary, include the MetricType data element and set the
value accordingly

4. For each route that needs to be reported, while respecting the
interface MTU:

* Insert the route address into the AddressList.

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

* Insert the sequence number into SeqNumList, if known.

5. If interface MTU would be exceeded, create additional RERR
messages

The AODVv2 message is used to create a corresponding RFC 5444 message
(see Section 8). If the RERR is sent in response to an undeliverable
packet, it SHOULD be sent unicast to the next hop on the route to
PktSource, or alternatively 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.

7.4.2. RERR Reception

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

1. If the sender is blacklisted (Section 4.3), check the entry's
remove time

* If Current_Time < Remove Time, ignore this RREQ for further
processing.



Perkins, et al. Expires October 16, 2015 [Page 41]

Internet-Draft AODVv2 April 2015


* If Current_Time >= Remove Time, remove the blacklist entry and
continue to Step 2.

2. Verify that the message hop count hasn't exceeded MAX_HOPCOUNT

* If so, ignore this RREQ for further processing.

3. Verify that the message contains the required data elements:
msg_hop_limit and at least one unreachable address

* If not, ignore this RREP for further processing.

4. If the MetricType data element is present, check that the metric
type is known

* If not, ignore this RREP for further processing.

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

* The address is valid (routable and unicast)

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

* The route's next hop is the sender of the RERR

* The route's next hop interface is the interface on which the
RERR was received

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

If any of the above are false, the route does not need to be
invalidated and the unreachable address does not need to be
advertised in a regenerated RERR.

If all of the above are true:

* If the route's prefix length is the same as the unreachable
address' prefix length, set the route state to Invalid, and
note that the route needs to be advertised in a regenerated
RERR.

* If the prefix length is shorter than the original route, the
route MUST be expunged from the routing table, since it is a
sub-route of the larger route which is reported to be Invalid.





Perkins, et al. Expires October 16, 2015 [Page 42]

Internet-Draft AODVv2 April 2015


* If the prefix length is different, create a new route with the
unreachable address, and its prefix and sequence number, set
the state to Invalid, and note that the route needs to be
advertised in a regenerated RERR.

* Update the sequence number on the stored route, if the
reported sequence number is greater.

6. Check if there are unreachable addresses which need to be
advertised in a regenerated RERR

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

* If not, take no further action.

7.4.3. RERR Regeneration

The RERR should not be generated if the limit for the rate of AODVv2
control message generation has been reached, or if the msg_hop_limit
in the received RERR is zero, or if msg_hop_count is present and
greater than or equal to MAX_HOPCOUNT.

The procedure for RERR regeneration is as follows:

1. Set msg_hop_limit = received msg_hop_limit - 1

2. If the PktSource data element was included in the original RERR,
copy it into the regenerated RERR

3. For each unreachable address that needs to be reported, while
respecting the interface MTU:

* Insert the address into the AddressList.

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

* Insert the sequence number into SeqNumList, if known.

4. If interface MTU would be exceeded, create additional RERR
messages

The AODVv2 message is used to create a corresponding RFC 5444 message
(see Section 8). If the RERR contains the PktSource data element,
the regenerated RERR SHOULD be sent unicast to the next hop on the
route to PktSource, or alternatively it MUST be multicast to LL-
MANET-Routers. If the RERR is sent in response to a broken link, the
RERR is, by default, multicast to LL-MANET-Routers.



Perkins, et al. Expires October 16, 2015 [Page 43]

Internet-Draft AODVv2 April 2015


8. RFC 5444 Representation

AODVv2 specifies that all control plane messages between routers
SHOULD use the Generalized Mobile Ad Hoc Network Packet/Message
Format [RFC5444], and therefore AODVv2 defines route messages
comprising data elements that map to message elements in RFC 5444.

RFC 5444 provides a multiplexed transport for multiple protocols. An
RFC 5444 multiplexer may choose to optimize the content of certain
message elements to reduce control plane overhead.

A brief summary of the RFC 5444 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, a contiguous set of addresses, or a
single address in the Address Block

AODVv2 does not require access to the RFC 5444 packet header.

In the message header, AODVv2 uses msg-hop-limit, msg-hop-count, msg-
type and msg-addr-length. msg-addr-length 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 an Address Block TLV must be associated with the correct address
in the Address Block. To indicate which address each value is
associated with, an AODVv2 router creates a message where the order
of the addresses in the AddressList (OrigAddr and TargAddr) matches
the order of values in the other lists, e.g., OrigAddrMetric and
TargAddrMetric in the MetricList.

The following table shows how AODVv2 data elements are represented in
RFC 5444 messages.






Perkins, et al. Expires October 16, 2015 [Page 44]

Internet-Draft AODVv2 April 2015


+-----------------------+-------------------------------------------+
| Data Element | RFC 5444 Message Representation |
+-----------------------+-------------------------------------------+
| msg_hop_limit | RFC 5444 Message Header <msg-hop-limit> |
| msg_hop_count | RFC 5444 Message Header <msg-hop-count> |
| AckReq | Acknowledgement Request Message TLV |
| PktSource | Packet Source Message TLV |
| RteMsg AddressList | RFC 5444 Address Block |
| - OrigAddr | |
| - TargAddr | |
| - PrefixLengthList | |
| RERR AddressList | RFC 5444 Address Block |
| - UnreachableAddress | |
| - PrefixLengthList | |
| SeqNumList | Sequence Number Address Block TLV |
| - SeqNum | |
| OrigSeqNum | Originating Node Sequence Number Address |
| | Block TLV |
| TargSeqNum | Target Node Sequence Number Address Block |
| | TLV |
| MetricType | Extension byte of Metric Address Block |
| | TLV |
| MetricList | Metric Address Block TLV |
| - OrigAddrMetric | - corresponds to OrigAddr |
| - TargAddrMetric | - corresponds to TargAddr |
| ValidityTimeList | VALIDITY_TIME Address Block TLV |
| - ValidityTime | |
+-----------------------+-------------------------------------------+

Table 3

See Section 12 for more information about the Message TLVs and
Address Block TLVs AODVv2 defines.

9. Simple Internet Attachment

Figure 5 shows a stub (i.e., non-transit) network of AODVv2 routers
which is attached to the Internet via a single Internet AODVv2 Router
(abbreviated IAR).

As in any Internet-attached network, AODVv2 routers and clients that
wish to be reachable from hosts on the Internet MUST have IP
addresses within the IAR's routable and topologically correct prefix
(i.e., 191.0.2.0/24).







Perkins, et al. Expires October 16, 2015 [Page 45]

Internet-Draft AODVv2 April 2015


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

Figure 5: Simple Internet Attachment Example

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

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

10. Optional Features

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

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.





Perkins, et al. Expires October 16, 2015 [Page 46]

Internet-Draft AODVv2 April 2015


10.2. Precursor Lists

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

There can be several sources of traffic for a certain destination.
Each such 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 the upstream neighbors that have
provided traffic for that destination, though there is no need to
keep track of upstream routers any farther away than the next hop.

During normal operation, each AODVv2 router maintaining precursor
lists for a route must update the precursor list whenever it forwards
traffic to the destination using this route. 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 routes 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 packet
transmissions are required.

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

When a route is expunged, any precursor list associated with it must
also be expunged.

10.3. Multicast RREP

An AODVv2 router creating a Route Reply (RREP) message MAY be
configured to use multicast to distribute the RREP. The RREP is
created as described in Section 7.2.1, but is multicast to the link-
local MANET routers address [RFC5498] in the same way as a Route
Request. Routers receiving the multicast RREP must perform RteMsg
suppression (see Section 6.6).

Multicast RREP was originally specified to handle unidirectional
links, but it is expensive. Due to the significant overhead, AODVv2
routers MUST NOT use multicast RREP unless configured to do so by



Perkins, et al. Expires October 16, 2015 [Page 47]

Internet-Draft AODVv2 April 2015


setting the administrative parameter USE_MULTICAST_RREP. This
technique can be used to find the best return path rather than follow
the RREQ path in reverse.

10.4. Intermediate RREP

Without iRREP, only the AODVv2 router responsible for the target
address can respond to a RREQ. This specification has been published
as a separate Internet Draft [I-D.perkins-irrep].

10.5. Message Aggregation Delay

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

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

11. Configuration

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

o Timers

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
route table entries and message replies. The default values are as
follows:









Perkins, et al. Expires October 16, 2015 [Page 48]

Internet-Draft AODVv2 April 2015


+------------------------+----------------+
| 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 4: 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.

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.4 |
| MAX_METRIC[MetricType] | [TBD] | Section 5 |
| MAX_METRIC[HopCount] | 20 hops | Section 5 and Section 7 |
| MAX_HOPCOUNT | 20 | Same as MAX_METRIC[HopCount] |
| MAXTIME | [TBD] | Maximum expressible clock time |
| | | (Section 6.5.2) |
+------------------------+---------+--------------------------------+

Table 5: AODVv2 Constants

Note that <msg-hop-count> is an 8-bit field in the RFC 5444 message
header and therefore MAX_HOPCOUNT cannot be larger than 255. Field
lengths associated with metrics are to be found in Section 12.4.

MAX_METRIC[MetricType] MUST always be the maximum expressible metric
of type MetricType.



Perkins, et al. Expires October 16, 2015 [Page 49]

Internet-Draft AODVv2 April 2015


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: Nodes with higher values are likely to be
more successful at finding routes, at the cost of additional
control traffic.

o MAX_HOPCOUNT: Nodes with a value too small would not be able to
discover routes to distant addresses.

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

o MAXTIME: No interoperability problems due to variations on
different nodes, 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 node:

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

Table 6: 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 nodes in the network
will not result in protocol errors, but poor performance may result,
especially if metrics are misinterpreted because DEFAULT_METRIC_TYPE
is configured differently at different nodes.







Perkins, et al. Expires October 16, 2015 [Page 50]

Internet-Draft AODVv2 April 2015


+----------------------+----------------------+----------------+
| Name | Default | Description |
+----------------------+----------------------+----------------+
| DEFAULT_METRIC_TYPE | 3 (i.e., Hop Count) | [RFC6551] |
| ENABLE_IDLE_IN_RERR | Disabled | Section 7.4.1 |
+----------------------+----------------------+----------------+

Table 7: 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.

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

Table 8: Configuration for Optional Features

12. IANA Considerations

This section specifies several RFC 5444 message types, message tlv-
types, and address tlv-types required for AODVv2. Also, a new
registry of 16-bit metric types is specified.

12.1. AODVv2 Message Types for RFC 5444

+-----------------------------------------+-----------+
| 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



Perkins, et al. Expires October 16, 2015 [Page 51]

Internet-Draft AODVv2 April 2015


12.2. Message TLV Types for RFC 5444

+------------------------+----------+---------------+---------------+
| Name of TLV | Type | Length | Reference |
| | | (octets) | |
+------------------------+----------+---------------+---------------+
| AckReq (Acknowledgment | 10 (TBD) | 0 | Section 6.2 |
| Request) | | | |
| PktSource (Packet | 11 (TBD) | 4 or 16 | Section 7.4.1 |
| Source) | | | |
+------------------------+----------+---------------+---------------+

Table 10: AODVv2 Message TLV Types

12.3. Address Block TLV Types for RFC 5444

+------------------------+----------+---------------+---------------+
| Name of TLV | Type | Length | Reference |
+------------------------+----------+---------------+---------------+
| Metric | 10 (TBD) | depends on | Section 7 |
| | | MetricType | |
| Sequence Number | 11 (TBD) | 2 octets | Section 7 |
| (SeqNum) | | | |
| Originating Node | 12 (TBD) | 2 octets | Section 7 |
| Sequence Number | | | |
| (OrigSeqNum) | | | |
| Target Node Sequence | 13 (TBD) | 2 octets | Section 7 |
| Number (TargSeqNum) | | | |
| VALIDITY_TIME | 1 | 1 octet | [RFC5497] |
+------------------------+----------+---------------+---------------+

Table 11: AODVv2 Address Block TLV Types

12.4. MetricType Allocation

Metric types are identified according to the assignments in
[RFC6551]. The metric type of the HopCount metric is assigned to be
3, in order to maintain compatibility with the existing values from
RFC 6551.












Perkins, et al. Expires October 16, 2015 [Page 52]

Internet-Draft AODVv2 April 2015


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

Table 12: AODVv2 Metric Types

13. Security Considerations

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

This section describes various security considerations and potential
avenues to secure AODVv2 routing. Security for authentication of
AODVv2 routers, and/or encryption of traffic is dealt with by the
underlying transport mechanism (e.g., by using the techniques for
Authentication, Integrity, and Confidentiality documented in
[RFC5444]). The most important security mechanism for AODVv2 routing
is integrity/authentication.

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

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

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






Perkins, et al. Expires October 16, 2015 [Page 53]

Internet-Draft AODVv2 April 2015


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

Routing protocols, however, are prime targets for impersonation
attacks. In networks where the node membership is not known, it is
difficult to determine the occurrence of impersonation attacks, and
security prevention techniques are difficult at best. However, when
the network membership is known and there is a danger of such
attacks, AODVv2 messages must be protected by the use of
authentication techniques, such as those involving generation of
unforgeable and cryptographically strong message digests or digital
signatures.

Most AODVv2 messages are transmitted to the multicast address LL-
MANET-Routers [RFC5498]. It is therefore required for security that
AODVv2 neighbors exchange security information that can be used to
insert an ICV [RFC7182] into the AODVv2 message block [RFC5444].
This enables hop-by-hop security. For destination-only RREP
discovery procedures, AODVv2 routers that share a security
association SHOULD use the appropriate mechanisms as specified in
[RFC7182].

The establishment of these security associations is out of scope for
this document.

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, Christopher Dearlove, Ulrich Herberg, Henner Jakob,
Luke Klein-Berndt, Lars Kristensen, Tronje Krop, Koojana Kuladinithi,
Kedar Namjoshi, Alexandru Petrescu, Henning Rogge, Fransisco Ros,
Pedro Ruiz, Christoph Sommer, Lotte Steenbrink, Romain Thouvenin,
Richard Trefler, Jiazi Yi, Seung Yi, and Cong Yuan, for their reviews
AODVv2 and DYMO, as well as numerous specification suggestions.

15. References

15.1. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.




Perkins, et al. Expires October 16, 2015 [Page 54]

Internet-Draft AODVv2 April 2015


[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, February 2006.

[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., and C.
Pignataro, "The Generalized TTL Security Mechanism
(GTSM)", RFC 5082, October 2007.

[RFC5444] Clausen, T., Dearlove, C., Dean, J., and C. Adjih,
"Generalized Mobile Ad Hoc Network (MANET) Packet/Message
Format", RFC 5444, February 2009.

[RFC5497] Clausen, T. and C. Dearlove, "Representing Multi-Value
Time in Mobile Ad Hoc Networks (MANETs)", RFC 5497, March
2009.

[RFC5498] Chakeres, I., "IANA Allocations for Mobile Ad Hoc Network
(MANET) Protocols", RFC 5498, March 2009.

[RFC6551] Vasseur, JP., Kim, M., Pister, K., Dejean, N., and D.
Barthel, "Routing Metrics Used for Path Calculation in
Low-Power and Lossy Networks", RFC 6551, March 2012.

15.2. Informative References

[I-D.perkins-irrep]
Perkins, C. and I. Chakeres, "Intermediate RREP for
dynamic MANET On-demand (AODVv2) Routing", draft-perkins-
irrep-02 (work in progress), November 2012.

[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, M. and J. Macker, "Mobile Ad hoc Networking
(MANET): Routing Protocol Performance Issues and
Evaluation Considerations", RFC 2501, January 1999.






Perkins, et al. Expires October 16, 2015 [Page 55]

Internet-Draft AODVv2 April 2015


[RFC3561] Perkins, C., Belding-Royer, E., and S. Das, "Ad hoc On-
Demand Distance Vector (AODV) Routing", RFC 3561, July
2003.

[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
Addresses", RFC 4193, October 2005.

[RFC4728] Johnson, D., Hu, Y., and D. Maltz, "The Dynamic Source
Routing Protocol (DSR) for Mobile Ad Hoc Networks for
IPv4", RFC 4728, February 2007.

[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
September 2007.

[RFC5148] Clausen, T., Dearlove, C., and B. Adamson, "Jitter
Considerations in Mobile Ad Hoc Networks (MANETs)", RFC
5148, February 2008.

[RFC6130] Clausen, T., Dearlove, C., and J. Dean, "Mobile Ad Hoc
Network (MANET) Neighborhood Discovery Protocol (NHDP)",
RFC 6130, April 2011.

[RFC6621] Macker, J., "Simplified Multicast Forwarding", RFC 6621,
May 2012.

[RFC7182] Herberg, U., Clausen, T., and C. Dearlove, "Integrity
Check Value and Timestamp TLV Definitions for Mobile Ad
Hoc Networks (MANETs)", RFC 7182, April 2014.

Appendix A. Features of IP needed by AODVv2

AODVv2 needs the following:

o information that IP routes are requested

o information that packets are flowing

o the ability to queue packets

A reactive protocol reacts when a route is needed. A route is
requested when an application tries to send a packet. The
fundamental concept of reactive routing is to avoid creating routes
that are not needed. The trigger for route discovery is an
application trying to send a packet. If a route is not available to
forward the packet, the packet is queued while the route is
requested.




Perkins, et al. Expires October 16, 2015 [Page 56]

Internet-Draft AODVv2 April 2015


Appendix B. Multi-homing Considerations

Multi-homing is not supported by the AODVv2 specification. The
coordination between multiple AODVv2 routers to distribute routing
information correctly for a shared address is not defined.

Previous work indicates that it can be supported by expanding the
sequence number to include the AODVv2 router's IP address as a
parsable field of the SeqNum. Without this, comparing sequence
numbers would not work to evaluate freshness. Even when the IP
address is included, there is no good way to compare sequence numbers
from different IP addresses, but a handling node can determine
whether the two given sequence numbers are comparable. If the route
table can store multiple routes for the same destination, then multi-
homing can work with sequence numbers augmented by IP addresses.

This non-normative information is provided simply to document the
results of previous efforts to enable multi-homing. The intention is
to simplify the task of future specification if multihoming becomes
necessary for reactive protocol operation.

Appendix C. Moving Router Clients Between Routers

Only one AODVv2 router within a MANET SHOULD be responsible for a
particular address at any time. If two AODVv2 routers dynamically
shift the advertisement of a network prefix, correct AODVv2 routing
behavior must be observed. The AODVv2 router adding the new network
prefix must wait for any existing routing information about this
network prefix to be purged from the network, i.e., it must wait at
least MAX_SEQNUM_LIFETIME after the previous AODVv2 router's last
SeqNum update for this network prefix.

Appendix D. Example Algorithms for AODVv2 Operations

The following subsections show example algorithms for protocol
operations required by AODVv2. AODVv2 requires general algorithms
for manipulating and comparing table entries, and algorithms specific
to each message type.

Processing for messages follows the following general outline:

1. Receive incoming message.

2. Update route table as appropriate.

3. Respond as needed, often regenerating the incoming message with
updated information.




Perkins, et al. Expires October 16, 2015 [Page 57]

Internet-Draft AODVv2 April 2015


Once the route table has been updated, the information contained
there is known to be the most recent available information for any
fields in the outgoing message. For this reason, the algorithms are
written as if outgoing message field values are assigned from the
route table information, even though it is often equally appropriate
to use fields from the incoming message.

The following table indicates the field names used in subsequent
sections to describe the AODVv2 algorithms.

+-------------------------+-----------------------------------------+
| Parameter | Description |
+-------------------------+-----------------------------------------+
| RteMsg | A route message |
| | (inRREQ/outRREQ/inRREP/outRREP) |
| RteMsg.HopLimit | Hop limit for the message |
| RteMsg.HopCount | Hop count for the message |
| RteMsg.AckReq | True/False, optional in RREP |
| RteMsg.MetricType | The type of metric included, optional |
| RteMsg.OrigAddr | Address of source of queued data |
| RteMsg.TargAddr | Address route is requested for |
| RteMsg.OrigPrefixLen | Prefix length of OrigAddr, optional |
| RteMsg.TargPrefixLen | Prefix length of TargAddr, optional |
| RteMsg.OrigSeqNum | SeqNum of OrigAddr, in RREQ only |
| RteMsg.TargSeqNum | SeqNum of TargAddr, in RREP, optional |
| | in RREQ |
| RteMsg.OrigAddrMetric | Metric to OrigAddr, in RREQ only |
| RteMsg.TargAddrMetric | Metric to TargAddr, in RREP only |
| RteMsg.ValidityTime | Time limit for route advertised |
| RteMsg.NbrIP | Sender of the RteMsg |
| RteMsg.Netif | Interface on which the RteMsg arrived |
| AdvRte | Derived from a RteMsg (see Section 6.5) |
| AdvRte.Address | Route destination address |
| AdvRte.PrefixLength | Route destination prefix length |
| AdvRte.SeqNum | SeqNum associated with route |
| AdvRte.MetricType | MetricType associated with route |
| AdvRte.Metric | Advertised metric of route |
| AdvRte.Cost | Cost from receiving router |
| AdvRte.ValidityTime | Time limit for route advertised |
| AdvRte.NextHopIP | Sender of the RteMsg |
| AdvRte.NextHopIntf | Interface on which the RteMsg arrived |
| AdvRte.HopCount | Number of hops traversed |
| AdvRte.HopLimit | Allowed number of hops remaining |
| Route | A route table entry (see Section 4.6) |
| Route.Address | Route destination address |
| Route.PrefixLength | Route destination prefix length |
| Route.SeqNum | SeqNum associated with route |
| Route.NextHop | Address of router which advertised the |



Perkins, et al. Expires October 16, 2015 [Page 58]

Internet-Draft AODVv2 April 2015


| | route |
| Route.NextHopInterface | Interface on which next hop is |
| | reachable |
| Route.LastUsed | Time this route was last used for |
| | packet forwarding |
| Route.LastSeqNumUpdate | Time the SeqNum of the route was last |
| | updated |
| Route.ExpirationTime | Time at which the route will expire |
| Route.MetricType | MetricType associated with route |
| Route.Metric | Cost from receiving router |
| Route.State | Active/Idle/Invalid |
| Route.Timed | True/False |
| Route.Precursors | Optional (see Section 10.2) |
| RERR | Route Error message (inRERR/outRERR) |
| RERR.HopLimit | Hop limit for the message |
| RERR.PktSource | Source address of packet which |
| | triggered RERR |
| RERR.MetricType | MetricType for the invalid routes |
| RERR.AddressList[] | List of unreachable route addresses |
| RERR.PrefixLengthList[] | List of PrefixLengths for AddressList |
| RERR.SeqNumList[] | List of SeqNums for AddressList |
| RERR.Netif | Interface on which the RERR arrived |
+-------------------------+-----------------------------------------+

Table 13: Notation used in Appendix

D.1. General Operations

D.1.1. Check_Route_State






















Perkins, et al. Expires October 16, 2015 [Page 59]

Internet-Draft AODVv2 April 2015


/* Update the state of the route entry based on timeouts. Return
whether the route can be used for forwarding a packet. */

Check_Route_State(route)
{
if (Current_Time > route.ExpirationTime)
route.State = Invalid;
if ((Current_Time - route.LastUsed > ACTIVE_INTERVAL + MAX_IDLETIME)
AND (route.Timed == FALSE))
route.State = Invalid;
if ((Current_Time - route.LastUsed > ACTIVE_INTERVAL)
AND (route.Timed == FALSE))
route.State = Idle;
if ((Current_Time - route.LastSeqNumUpdate > MAX_SEQNUM_LIFETIME)
AND (route.State == Invalid))
/* remove route from route table */
if ((Current_Time - route.LastSeqNumUpdate > MAX_SEQNUM_LIFETIME)
AND (route.State != Invalid)
route.SeqNum = 0;

if (route still exists AND route.State != Invalid)
return TRUE;
else
return FALSE;
}

D.1.2. Process_Routing_Info

(See Section 6.5.1)





















Perkins, et al. Expires October 16, 2015 [Page 60]

Internet-Draft AODVv2 April 2015


/* Compare incoming route information to stored route, and if better,
use to update stored route. */

Process_Routing_Info (advRte)
{
rte = Fetch_Route_Table_Entry (advRte);
if (!rte exists)
{
rte = Create_Route_Table_Entry(advRte);
return rte;
}

if (AdvRte.SeqNum > Route.SeqNum /* stored route is stale */
OR
(AdvRte.SeqNum == Route.SeqNum /* same SeqNum */
AND
((Route.State == Invalid AND LoopFree(advRte, rte))
/* advRte can repair stored */
OR AdvRte.Cost < Route.Metric))) /* advRte is better */
{
Update_Route_Table_Entry (rte, advRte);
}
return rte;
}

D.1.3. Fetch_Route_Table_Entry

























Perkins, et al. Expires October 16, 2015 [Page 61]

Internet-Draft AODVv2 April 2015


/* Lookup a route table entry matching an advertised route */

Fetch_Route_Table_Entry (advRte)
{
foreach (rteTableEntry in rteTable)
{
if (rteTableEntry.Address == advRte.Address
AND rteTableEntry.MetricType == advRte.MetricType)
return rteTableEntry;
}
return null;
}

/* Lookup a route table entry matching address and metric type */

Fetch_Route_Table_Entry (destination, metricType)
{
foreach (rteTableEntry in rteTable)
{
if (rteTableEntry.Address == destination
AND rteTableEntry.MetricType == metricType)
return rteTableEntry;
}
return null;
}

D.1.4. Update_Route_Table_Entry
























Perkins, et al. Expires October 16, 2015 [Page 62]

Internet-Draft AODVv2 April 2015


/* Update a route table entry using AdvRte in received RteMsg */

Update_Route_Table_Entry (rte, advRte);
{
rte.SeqNum = advRte.SeqNum;
rte.NextHop = advRte.NextHopIp;
rte.NextHopInterface = advRte.NextHopIntf;
rte.LastUsed = Current_Time;
rte.LastSeqNumUpdate = Current_Time;
if (validityTime)
{
rte.ExpirationTime = Current_Time + advRte.ValidityTime;
rte.Timed = TRUE;
}
else
{
rte.Timed = FALSE;
rte.ExpirationTime = MAXTIME;
}

rte.Metric = advRte.Cost;
if (rte.State == Invalid)
rte.State = Idle;
}

D.1.5. Create_Route_Table_Entry

























Perkins, et al. Expires October 16, 2015 [Page 63]

Internet-Draft AODVv2 April 2015


/* Create a route table entry from address and prefix length */

Create_Route_Table_Entry (address, prefixLength, seqNum, metricType)
{
rte = allocate_memory();
rte.Address = address;
rte.PrefixLength = prefixLength;
rte.SeqNum = seqNum;
rte.MetricType = metricType;
}


/* Create a route table entry from the advertised route */

Create_Route_Table_Entry(advRte)
{
rte = allocate_memory();

rte.Address = advRte.Address;
if (advRte.PrefixLength)
rte.PrefixLength = advRte.PrefixLength;
else
rte.PrefixLength = maxPrefixLenForAddressFamily;

rte.SeqNum = advRte.SeqNum;
rte.NextHop = advRte.NextHopIp;
rte.NextHopInterface = advRte.NextHopIntf;
rte.LastUsed = Current_Time;
rte.LastSeqNumUpdate = Current_Time;
if (validityTime)
{
rte.ExpirationTime = Current_Time + advRte.ValidityTime;
rte.Timed = TRUE;
}
else
{
rte.Timed = FALSE;
rte.ExpirationTime = MAXTIME;
}
rte.MetricType = advRte.MetricType;
rte.Metric = advRte.Metric;
rte.State = Idle;
}








Perkins, et al. Expires October 16, 2015 [Page 64]

Internet-Draft AODVv2 April 2015


D.1.6. LoopFree

/* Return TRUE if the route advRte is LoopFree compared to rte */

LoopFree(advRte, rte)
{
if (advRte.Cost <= rte.Cost)
return TRUE;
else
return FALSE;
}

D.1.7. Fetch_Rte_Msg_Table_Entry

/* Find an entry in the RteMsg table matching the given
message's msg-type, OrigAddr, TargAddr, MetricType */

Fetch_Rte_Msg_Table_Entry (rteMsg)
{
foreach (entry in RteMsgTable)
{
if (entry.msg-type == rteMsg.msg-type
AND entry.OrigAddr == rteMsg.OrigAddr
AND entry.TargAddr == rteMsg.TargAddr
AND entry.MetricType == rteMsg.MetricType)
return entry;
}
return NULL;
}

D.1.8. Update_Rte_Msg_Table

(See Section 4.5)

/* Update the multicast route message suppression table based on the
received RteMsg, return true if it was created or the SeqNum was
updated (i.e. it needs to be regenerated) */

Update_Rte_Msg_Table(rteMsg)
{
/* search for a comparable entry */
entry = Fetch_Rte_Msg_Table_Entry(rteMsg);

/* if there is none, create one */
if (entry does not exist)
{
entry.MessageType = rteMsg.msg_type;
entry.OrigAddr = rteMsg.OrigAddr;



Perkins, et al. Expires October 16, 2015 [Page 65]

Internet-Draft AODVv2 April 2015


entry.TargAddr = rteMsg.TargAddr;
entry.OrigSeqNum = rteMsg.origSeqNum; // (if present)
entry.TargSeqNum = rteMsg.targSeqNum; // (if present)
entry.MetricType = rteMsg.MetricType;
entry.Metric = rteMsg.origAddrMetric; // (for RREQ)
or rteMsg.targAddrMetric; // (for RREP)
entry.Timestamp = Current_Time;
return TRUE;
}

/* if current entry is stale */
if (
(rteMsg.msg-type == RREQ AND entry.OrigSeqNum < rteMsg.OrigSeqNum)
OR
(rteMsg.msg-type == RREP AND entry.TargSeqNum < rteMsg.TargSeqNum))
{
entry.OrigSeqNum = rteMsg.OrigSeqNum; // (if present)
entry.TargSeqNum = rteMsg.TargSeqNum; // (if present)
entry.Timestamp = Current_Time;
return TRUE;
}

/* if received rteMsg is stale */
if (
(rteMsg.msg-type == RREQ AND entry.OrigSeqNum > rteMsg.OrigSeqNum)
OR
(rteMsg.msg-type == RREP AND entry.TargSeqNum > rteMsg.TargSeqNum))
{
entry.Timestamp = Current_Time;
return FALSE;
}

/* if same SeqNum but rteMsg has lower metric */
if (entry.Metric > rteMsg.Metric)
entry.Metric = rteMsg.Metric;

entry.Timestamp = Current_Time;
return FALSE;
}

D.1.9. Build_RFC_5444_Message_Header










Perkins, et al. Expires October 16, 2015 [Page 66]

Internet-Draft AODVv2 April 2015


/* This pseudocode shows possible RFC 5444 actions, and would not
be performed by the AODVv2 implementation. It is shown only to
provide more understanding about the AODVv2 message that will be
constructed by RFC 5444.
MAL = Message Address Length
MF = Message Flags
Size = number of octets in MsgHdr, AddrBlk, AddrTLVs */

Build_RFC_5444_Message_Header (msgType, Flags, AddrFamily, Size,
hopLimit, hopCount, tlvLength)
{
/* Build RFC 5444 message header fields */
msg-type = msgType;
MF = Flags;
MAL = 3 or 15; // for IPv4 or IPv6
msg-size = Size;
msg-hop-limit = hopLimit;
if (hopCount != 0) /* if hopCount is 0, do not include */
msg-hop-count = hopCount;
msg.tlvs-length = tlvLength;
}

D.2. RREQ Operations

D.2.1. Generate_RREQ

/* Generate a route request message to find a route from OrigAddr
to TargAddr using the given MetricType
origAddr = IP address of Router Client which generated the
packet to be forwarded
origPrefix = prefix length associated with the Router Client
targAddr = destination IP address in the packet to be forwarded
targSeqNum = sequence number in existing route to targAddr
mType = metric type for the requested route */

Generate_RREQ(origAddr, origPrefix, targAddr, targSeqNum, mType)
{
/* Increment sequence number in nonvolatile storage */
mySeqNum = (1 + mySeqNum);

/* Marshall parameters */
outRREQ.HopLimit = MAX_HOPCOUNT;
outRREQ.HopCount = 0; // if included
outRREQ.MetricType = mType; //include if not DEFAULT_METRIC_TYPE
outRREQ.OrigAddr = origAddr;
outRREQ.TargAddr = targAddr;
outRREQ.OrigPrefixLen = origPrefix; //include if not address length
outRREQ.OrigSeqNum = mySeqNum;



Perkins, et al. Expires October 16, 2015 [Page 67]

Internet-Draft AODVv2 April 2015


outRREQ.TargSeqNum = targSeqNum; //included if available
outRREQ.OrigAddrMetric = MIN_METRIC(mType); //zero by default
outRREQ.ValidityTime = limit for route to OrigAddr; //if required

/* Build Address Blk using prefix length information from
outRREQ.OrigPrefixLen if necessary */
AddrBlk = {outRREQ.OrigAddr, outRREQ.TargAddr};

/* Include sequence numbers in appropriate Address Block TLVs */
/* OrigSeqNum Address Block TLV */
origSeqNumAddrBlkTlv.value = outRREQ.OrigSeqNum;
/* TargSeqNum Address Block TLV */
if (outRREQ.TargSeqNum is known)
targSeqNumAddrBlkTlv.value = outRREQ.TargSeqNum;

/* Build Metric Address Block TLV, include Metric AddrBlkTlv
Extension byte if a non-default metric */
metricAddrBlkTlv.value = outRREQ.OrigAddrMetric;
if (outRREQ.MetricType != DEFAULT_METRIC_TYPE)
metricAddrBlkTlv.typeExtension = outRREQ.MetricType;

if (outRREQ.ValidityTime is required)
{
/* Build VALIDITY_TIME Address Block TLV */
VALIDITY_TIMEAddrBlkTlv.value = outRREQ.ValidityTime;
}

Build_RFC_5444_Message_Header (RREQ, 4, IPv4 or IPv6, NN,
outRREQ.HopLimit, outRREQ.HopCount, tlvLength);

/* multicast RFC 5444 message to LL-MANET-Routers */
}

D.2.2. Receive_RREQ

















Perkins, et al. Expires October 16, 2015 [Page 68]

Internet-Draft AODVv2 April 2015


/* Process a RREQ received on link L */

Receive_RREQ (inRREQ, L)
{
if (inRREQ.NbrIP present in blacklist)
{
if (blacklist_expiration_time < current_time)
return; // don't process or regenerate RREQ
else
remove nbrIP from blacklist;
}
if (inRREQ does not contain msg_hop_limit, OrigAddr,
TargAddr, OrigSeqNum, OrigAddrMetric)
return;
if (inRREQ.OrigAddr and inRREQ.TargAddr are not valid routable
and unicast addresses)
return;
if (inRREQ.MetricType is present but an unknown value)
return;
if (inRREQ.OrigAddrMetric > MAX_METRIC[inRREQ.MetricType] - Cost(L))
return;

/* Extract inRREQ values */
advRte.Address = inRREQ.OrigAddr;
advRte.PrefixLength = inRREQ.OrigPrefixLen; (if present)
or the address length of advRte.Address;
advRte.SeqNum = inRREQ.OrigSeqNum;
advRte.MetricType = inRREQ.MetricType;
advRte.Metric = inRREQ.OrigAddrMetric;
advRte.Cost = inRREQ.OrigAddrMetric + Cost(L);
//according to the indicated MetricType
advRte.ValidityTime = inRREQ.ValidityTime; //if present
advRte.NextHopIP = inRREQ.NbrIP;
advRte.NextHopIntf = inRREQ.Netif;
advRte.HopCount = inRREQ.HopCount;
advRte.HopLimit = inRREQ.HopLimit;

rte = Process_Routing_Info (advRte);

/* Update the RteMsgTable and determine if the RREQ needs
to be regenerated */
regenerate = Update_Rte_Msg_Table(inRREQ);

if (inRREQ.TargAddr is in Router Client list)
Generate_RREP(inRREQ, rte);
else if (regenerate)
Regenerate_RREQ(inRREQ, rte);
}



Perkins, et al. Expires October 16, 2015 [Page 69]

Internet-Draft AODVv2 April 2015


D.2.3. Regenerate_RREQ

/* Called from receive_RREQ()
rte = the route to OrigAddr */

Regenerate_RREQ (inRREQ, rte)
{
if (outRREQ.HopLimit == 0)
return; // don't regenerate
outRREQ.HopLimit = inRREQ.HopLimit - 1;

if (inRREQ.HopCount exists)
{
if (inRREQ.HopCount >= MAX_HOPCOUNT)
return; // don't regenerate
outRREQ.HopCount = inRREQ.HopCount + 1;
}

/* Marshall parameters */
outRREQ.MetricType = rte.MetricType;
outRREQ.OrigAddr = rte.Address;
outRREQ.TargAddr = inRREQ.TargAddr;
/* include prefix length if not equal to address length */
outRREQ.OrigPrefixLen = rte.PrefixLength;
outRREQ.OrigSeqNum = rte.SeqNum;
outRREQ.TargSeqNum = inRREQ.TargSeqNum; // if present
outRREQ.OrigAddrMetric = rte.Metric;
outRREQ.ValidityTime = rte.ValidityTime;
or the time limit this router wishes to put on
route to OrigAddr

/* Build Address Block using prefix length information from
outRREQ.OrigPrefixLen if necessary */
AddrBlk = {outRREQ.OrigAddr, outRREQ.TargAddr};

/* Include sequence numbers in appropriate Address Block TLVs */
/* OrigSeqNum Address Block TLV */
origSeqNumAddrBlkTlv.value = outRREQ.OrigSeqNum;
/* TargSeqNum Address Block TLV */
if (outRREQ.TargSeqNum is known)
targSeqNumAddrBlkTlv.value = outRREQ.TargSeqNum;

/* Build Metric Address Block TLV, include Metric AddrBlkTlv
Extension byte if a non-default metric */
metricAddrBlkTlv.value = outRREQ.OrigAddrMetric;
if (outRREQ.MetricType != DEFAULT_METRIC_TYPE)
metricAddrBlkTlv.typeExtension = outRREQ.MetricType;




Perkins, et al. Expires October 16, 2015 [Page 70]

Internet-Draft AODVv2 April 2015


if (outRREQ.ValidityTime is required)
{
/* Build VALIDITY_TIME Address Block TLV */
VALIDITY_TIMEAddrBlkTlv.value = outRREQ.ValidityTime;
}
Build_RFC_5444_Message_Header (RREQ, 4, IPv4 or IPv6, NN,
outRREQ.HopLimit, outRREQ.HopCount, tlvLength);

/* Multicast RFC 5444 message to LL-MANET-Routers, or if
inRREQ was unicast, the message can be unicast to the next
hop on the route to TargAddr, if known */
}

D.3. RREP Operations

D.3.1. Generate_RREP

Generate_RREP(inRREQ, rte)
{
/* Increment sequence number in nonvolatile storage */
mySeqNum = (1 + mySeqNum);

/* Marshall parameters */
outRREP.HopLimit = inRREQ.HopCount;
outRREP.HopCount = 0;
/* Include the AckReq when:
- previous RREP does not seem to enable any data flow, OR
- when RREQ is received from same OrigAddr after RREP was
unicast to rte.NextHop */
outRREP.AckReq = TRUE or FALSE; //TRUE if acknowledgement required
/* if included, set timeout RREP_Ack_SENT_TIMEOUT */

if (rte.MetricType != DEFAULT_METRIC_TYPE)
outRREP.MetricType = rte.MetricType;
outRREP.OrigAddr = rte.Address;
outRREP.TargAddr = inRREQ.TargAddr;
outRREP.TargPrefixLen = rte.PrefixLength; //if not address length
outRREP.TargSeqNum = mySeqNum;
outRREP.TargAddrMetric = MIN_METRIC(inRREQ.MetricType);
//zero by default
outRREP.ValidityTime = limit for route to TargAddr; //if required

if (outRREP.AckReq == TRUE)
/* include AckReq Message TLV */

/* Build Address Block using prefix length information from
outRREP.TargPrefixLen if necessary */
AddrBlk = {outRREP.OrigAddr, outRREP.TargAddr};



Perkins, et al. Expires October 16, 2015 [Page 71]

Internet-Draft AODVv2 April 2015


/* TargSeqNum Address Block TLV */
targSeqNumAddrBlkTlv.value = outRREP.TargSeqNum;

/* Build Metric Address Block TLV include Metric AddrBlkTlv
Extension byte if a non-default metric */
metricAddrBlkTlv.value = outRREP.TargAddrMetric;
if (outRREP.MetricType != DEFAULT_METRIC_TYPE)
metricAddrBlkTlv.typeExtension = outRREP.MetricType;

if (outRREP.ValidityTime is required)
{
/* Build VALIDITY_TIME Address Block TLV */
VALIDITY_TIMEAddrBlkTlv.value = outRREP.ValidityTime;
}

Build_RFC_5444_Message_Header (RREP, 4, IPv4 or IPv6, NN,
outRREP.HopLimit, outRREQ.HopCount, tlvLength);

/* unicast RFC 5444 message to rte[OrigAddr].NextHop */
}

D.3.2. Receive_RREP

/* Process a RREP received on link L */

Receive_RREP (inRREP, L)
{
if (inRREP.NbrIP present in blacklist)
{
if (blacklist_expiration_time < current_time)
return; // don't process or regenerate RREP
else
remove NbrIP from blacklist;
}

if (inRREP does not contain msg_hop_limit, OrigAddr,
TargAddr, TargSeqNum, TargAddrMetric)
return;
if (inRREP.OrigAddr and inRREQ.TargAddr are not
valid routable and unicast addresses)
return;
if (inRREP.MetricType is present but an unknown value)
return;
if (inRREP.TargAddrMetric > MAX_METRIC[inRREP.MetricType] - Cost(L))
return;

/* Extract inRREP values */
advRte.Address = inRREP.TargAddr;



Perkins, et al. Expires October 16, 2015 [Page 72]

Internet-Draft AODVv2 April 2015


advRte.PrefixLength = inRREP.TargPrefixLen; //if present
or the address length of advRte.Address;
advRte.SeqNum = inRREP.TargSeqNum;
advRte.MetricType = inRREP.MetricType;
advRte.Metric = inRREP.TargAddrMetric;
advRte.Cost = inRREP.TargAddrMetric + Cost(L);
//according to the indicated MetricType
advRte.ValidityTime = inRREP.ValidityTime; //if present
advRte.NextHopIP = inRREP.NbrIP;
advRte.NextHopIntf = inRREP.Netif;
advRte.HopCount = inRREP.HopCount;
advRte.HopLimit = inRREP.HopLimit; //if included

rte = Process_Routing_Info (advRte);

` if (inRREP includes AckReq data element)
Generate_RREP_Ack(inRREP);

/* Update the RteMsgTable and determine if the RREP needs
to be regenerated */
regenerate = Update_Rte_Msg_Table(inRREP);

if (inRREP.TargAddr is in the Router Client list)
send_buffered_packets(rte); /* start to use the route */
else if (regenerate)
Regenerate_RREP(inRREP, rte);
}

D.3.3. Regenerate_RREP

Regenerate_RREP(inRREP, rte)
{
if (rte does not exist)
{
Generate_RERR(inRREP);
return;
}

if (outRREP.HopLimit == 0) /* don't regenerate */
return;
outRREP.HopLimit = inRREP.HopLimit - 1;

if (inRREP.HopCount exists)
{
if (inRREP.HopCount >= MAX_HOPCOUNT)
return; // don't regenerate the RREP
outRREP.HopCount = inRREP.HopCount + 1;
}



Perkins, et al. Expires October 16, 2015 [Page 73]

Internet-Draft AODVv2 April 2015


/* Marshall parameters */
/* Include the AckReq when:
- previous unicast RREP seems not to enable data flow, OR
- when RREQ is received from same OrigAddr after RREP
was unicast to rte.NextHop */
outRREP.AckReq = TRUE or FALSE; //TRUE if acknowledgement required
/* if included, set timeout RREP_Ack_SENT_TIMEOUT */

if (rte.MetricType != DEFAULT_METRIC_TYPE)
outRREP.MetricType = rte.MetricType;
outRREP.OrigAddr = inRREP.OrigAddr;
outRREP.TargAddr = rte.Address;
outRREP.TargPrefixLen = rte.PrefixLength; //if not address length
outRREP.TargSeqNum = rte.SeqNum;
outRREP.TargAddrMetric = rte.Metric;
outRREP.ValidityTime = limit for route to TargAddr; //if required
outRREP.NextHop = rte.NextHop

if (outRREP.AckReq == TRUE)
/* include AckReq Message TLV */

/* Build Address Block using prefix length information from
outRREP.TargPrefixLen if necessary */
AddrBlk = {outRREP.OrigAddr, outRREP.TargAddr};

/* TargSeqNum Address Block TLV */
targSeqNumAddrBlkTlv.value = outRREP.TargSeqNum;

/* Build Metric Address Block TLV include Metric AddrBlkTlv
Extension byte if a non-default metric */
metricAddrBlkTlv.value = outRREP.TargAddrMetric;
if (outRREP.MetricType != DEFAULT_METRIC_TYPE)
metricAddrBlkTlv.typeExtension = outRREP.MetricType;

if (outRREP.ValidityTime is required)
{
/* Build VALIDITY_TIME Address Block TLV */
VALIDITY_TIMEAddrBlkTlv.value = outRREP.ValidityTime;
}

Build_RFC_5444_Message_Header (RREP, 4, IPv4 or IPv6, NN,
outRREP.HopLimit, 0, tlvLength);

/* unicast RFC 5444 message to rte[OrigAddr].NextHop */
}






Perkins, et al. Expires October 16, 2015 [Page 74]

Internet-Draft AODVv2 April 2015


D.4. RREP_Ack Operations

D.4.1. Generate_RREP_Ack

/* To be sent when a received RREP includes the AckReq data element */

Generate_RREP_Ack(inRREP)
{
Build_RFC_5444_Message_Header (RREP_Ack, 4, IPv4 or IPv6, NN,
1, 0, 0);
/* unicast RFC 5444 message to inRREP.NbrIP */
}

D.4.2. Receive_RREP_Ack

Receive_RREP_Ack(inRREP_Ack)
{
/* cancel timeout event for the node sending RREP_Ack */
}

D.4.3. Timeout_RREP_Ack

Timeout_RREP_Ack(outRREP)
{
/* insert unresponsive node into blacklist */
}

D.5. RERR Operations

D.5.1. Generate_RERR

There are two parts to this function, based on whether it was
triggered by an undeliverable packet or a broken link to neighboring
AODVv2 router.

/* Generate a Route Error message.
errorType = undeliverablePacket or brokenLink */

Generate_RERR(errorType, triggerPkt, brokenLinkNbrIp)
{
switch (errorType)
{
case (brokenLink):
/* a RERR will be required for each MetricType */
foreach metric type in use
{
doGenerate = FALSE;
num-broken-addr = 0;



Perkins, et al. Expires October 16, 2015 [Page 75]

Internet-Draft AODVv2 April 2015


precursors[] = new empty precursor list;
outRERR.HopLimit = MAX_HOPCOUNT;
outRERR.MetricType = the metric type for this loop;
/* find routes which are now Invalid */
foreach (rte in route table)
{
if (brokenLinkNbrIp == rte.NextHop
AND rte.MetricType == outRERR.MetricType
AND (rte.State == Active
OR
(rte.State == Idle AND ENABLE_IDLE_IN_RERR)))
{
if (rte.State == Active)
doGenerate = TRUE;
rte.State = Invalid;
precursors += rte.Precursors (if any);
outRERR.AddressList[num-broken-addr] = rte.Address;
outRERR.PrefixLengthList[num-broken-addr] =
rte.PrefixLength;
outRERR.SeqNumList[num-broken-addr] = rte.SeqNum;
num-broken-addr = num-broken-addr + 1;
}
}
if (doGenerate == TRUE)
/* build and send RFC5444 message as below, then
repeat loop for other MetricTypes */
}
case (undeliverablePacket):
num-broken-addr = 1;
outRERR.HopLimit = MAX_HOPCOUNT;
outRERR.PktSource = triggerPkt.SrcIP;
or triggerPkt.TargAddr; //if pkt was a RREP
/* optional to include outRERR.MetricType */
outRERR.AddressList[0] = triggerPkt.DestIP;
or triggerPkt.OrigAddr; //if pkt was RREP
}
if (triggerPkt exists)
{
/* Build PktSource Message TLV */
pktSourceMessageTlv.value = outRERR.PktSource;
}

/* The remaining steps add address, prefix length and sequence
number information for each unreachable address, while
conforming to the allowed MTU. If the MTU is reached, a new
message MUST be created. */

/* Build Address Block using prefix length information from



Perkins, et al. Expires October 16, 2015 [Page 76]

Internet-Draft AODVv2 April 2015


outRERR.PrefixLengthList[] if necessary */
AddrBlk = outRERR.AddressList[];

/* Add SeqNum Address Block TLV including index values, and
include Metric AddrBlkTlv extension byte if necessary */
seqNumAddrBlkTLV = outRERR.SeqNumList[];
if (outRERR.MetricType != DEFAULT_METRIC_TYPE)
metricAddrBlkTlv.typeExtension = outRERR.MetricType;

Build_RFC_5444_Message_Header (RERR, 4, IPv4 or IPv6, NN,
outRERR.HopLimit, 0, tlvLength);

if (undeliverablePacket)
/* unicast outRERR to rte[outRERR.PktSource].NextHop */
else if (brokenLink)
/* unicast to precursors, or multicast to LL-MANET-Routers */
}

D.5.2. Receive_RERR

Receive_RERR (inRERR)
{
if (inRERR does not contain msg_hop_limit and at least
one unreachable address)
return;
if (inRERR.MetricType is present but an unknown value)
return;

/* Extract inRERR values, copy relevant unreachable addresses,
their prefix lengths, and sequence numbers to outRERR */
num-broken-addr = 0;
precursors[] = new empty precursor list;
foreach (unreachableAddress in inRERR.AddressList)
{
if (unreachableAddress is not valid routable and unicast)
continue;
/* Find a matching route table entry, assume
DEFAULT_METRIC_TYPE if no MetricType included */
rte = Fetch_Route_Table_Entry (unreachableAddress,
inRERR.MetricType)
if (rte does not exist)
continue;
if (rte.State == Invalid)/* ignore already invalid routes */
continue;
if (rte.NextHop != inRERR.NbrIP
OR
rte.NextHopInterface != inRERR.Netif)
continue;



Perkins, et al. Expires October 16, 2015 [Page 77]

Internet-Draft AODVv2 April 2015


if (unreachableAddress SeqNum (if known) < rte.SeqNum)
continue;

/* keep a note of all precursors of newly Invalid routes */
precursors += rte.Precursors; //if any

/* assume prefix length is address length if not included */
if (rte.PrefixLength != unreachableAddress prefixLength)
{
/* create new route with unreachableAddress information */
invalidRte = Create_Route_Table_Entry(unreachableAddress,
unreachableAddress prefixLength,
unreachableAddress seqNum,
inRERR.MetricType);
invalidRte.State = Invalid;

if (rte.PrefixLength > unreachableAddress prefixLength)
expunge_route(rte);
rte = invalidRte;
}
else if (rte.PrefixLength == unreachableAddress prefixLength)
rte.State = Invalid;

outRERR.AddressList[num-broken-addr] = rte.Address;
outRERR.PrefixLengthList[num-broken-addr] = rte.PrefixLength;
outRERR.SeqNumList[num-broken-addr] = rte.SeqNum;
num-broken-addr = num-broken-addr + 1;
}

if (num-broken-addr)
Regenerate_RERR(outRERR, inRERR, precursors);
}

D.5.3. Regenerate_RERR

















Perkins, et al. Expires October 16, 2015 [Page 78]

Internet-Draft AODVv2 April 2015


Regenerate_RERR (outRERR, inRERR, precursors)
{
/* Marshal parameters */
outRERR.HopLimit = inRERR.HopLimit - 1;
if (outRERR.HopLimit == 0) // don't regenerate
return;

outRERR.PktSource = inRERR.PktSource; //if included
outRERR.MetricType = inRERR.MetricType; //if included
or DEFAULT_METRIC_TYPE;
/* AddressList[], SeqNumList[], and PrefixLengthList[] are
already up-to-date */

if (outRERR.PktSource exists)
{
/* Build PktSource Message TLV */
pktSourceMessageTlv.value = outRERR.PktSource;
}

/* Build Address Block using prefix length information from
outRERR.PrefixLengthList[] if necessary */
AddrBlk = outRERR.AddressList[];

/* Add SeqNum AddressBlock TLV including index values */
seqNumAddrTLV = outRERR.SeqNumList[];

if (outRERR.MetricType != DEFAULT_METRIC_TYPE)
{
/* Include MetricType in Metric Address Block TLV */
metricMsgTlv.extensionType = outRERR.MetricType;
}

Build_RFC_5444_Message_Header (RERR, 4, IPv4 or IPv6, NN,
outRERR.HopLimit, 0, tlvLength);

if (outRERR.PktSource exists)
/* unicast RFC 5444 message to next hop towards
outRERR.PktSource */
else if (number of precursors == 1)
/* unicast RFC 5444 message to precursors[0] */
else if (number of precursors > 1)
/* unicast RFC 5444 message to all precursors, or multicast
RFC 5444 message to RERR_PRECURSORS if preferable */
else
/* multicast RFC 5444 message to LL-MANET-Routers */
}





Perkins, et al. Expires October 16, 2015 [Page 79]

Internet-Draft AODVv2 April 2015


Appendix E. AODVv2 Draft Updates

E.1. Changes between revisions 8 and 9

This section lists the changes between AODVv2 revisions ...-08.txt
and ...-09.txt.

o Numerous editorial improvements were made.

o Moved AODVv2 Message Transmission into AODVv2 Protocol Operations.

o Added Interfaces List and Router Client List to Data Structures
and reorganized order of subsections.

o Moved Adjacency Monitoring to AODVv2 Protocol Operations.

o Added Initialization to AODVv2 Protocol Operations and reorganized
order of subsections, combined sections on Evaluating and Applying
received route inforamtion into a subsection named Processing
Received Route Information.

o Expanded acronyms in AODVv2 Protocol Messages subtitles.

o Renamed the RFC 5444 section to "RFC 5444 Representation"

o Renamed some subtitles slightly for simplicity.

o Moved pseudo-code appendix to be after the three smaller ones on
multi-homing, shifting advertisements between routers, and
requirements from IP.

o Reorganized Draft Update Appendices into one Appendix, used
similar subtitles.

o Updated Overview to simpify a little and cover more than just
route discovery and maintenance.

o Relocated some of the more specific statements into relevant
sections, or removed unnecessary text, e.g. comment about value
(0) under SeqNum in Terminology.

o Updated some Terminology definitions.

o Changed some wording in Data Elements tables in Section 3.
Incorporated Section 3 into Section 2 Terminology.

o Updated Applicability Statement to move some of the non-
applicability text and to simplify what remains.



Perkins, et al. Expires October 16, 2015 [Page 80]

Internet-Draft AODVv2 April 2015


o Collected all SeqNum information in Sequence Numbers section in
Data Structures.

o Collected Router Client info in section in Data Structures.

o Simplified Blacklist section to describe the data structure and
moved the bidirectional checking to AODVv2 Protocol Operations.

o Updated messages processed if router on blacklist and which are
indicators of bidirectional links.

o Moved route state information from Route Table Entry to AODVv2
Protocol Operations under Route Maintenance.

o Simplified RteMsg Table section. Added RemoveTime.

o Consistent formatting for descriptions of data structures and
fields.

o Added short description of timed route to Route Table Entry
section.

o Removed mentions of precursors from main text, except one mention
in Route Table Entry.

o Simplified Metric section and subsections.

o Updated AODVv2 Protocol Operations section and subsections,
including Adjacency Monitoring, making algorithms easier to read
and making notation consistent, general improvements to the text.

o Simplified overview of AODVv2 Protocol Messages, moving text to
more relevant sections.

o Simplified the packet diagrams, since some of their contents was
already explained in the text below and then again as part of
generation, reception and regeneration processes.

o Clarified some elements of the message content descriptions.

o Moved MetricType above MetricList for consistency.

o Mirrored structure throughout AODVv2 Protocol Messages.

o Added some pre-message-generation checks.

o Removed statements about neighbors but added blacklist checks
where necessary.



Perkins, et al. Expires October 16, 2015 [Page 81]

Internet-Draft AODVv2 April 2015


o Moved RREP_Ack before RERR, and expanded description of use.
Changed order of blacklist check.

o Updated RERR section for readability.

o Updated RFC 5444 overview and simplified/rearranged text in this
section.

o Minor clarifications in Simple Internet Attachment section.

o Tidied Optional Features section.

o Tidied Admin/Config section, rearranged and renamed to show local
config vs. network-wide config, plus optional features separate.

o Tidied small appendices.

o Removed list of algorithms in Example Algorithm appendix. Made
use of capital letters consistent for each data structure and
field, removed details of how to fill in AdvRte from the intro
since this duplicated earlier section of the text, added algorithm
for Check_Route_State and moved the pseudo-code text from earlier
section. Moved all lists into a table at the beginning of the
appendix.

E.2. Changes between revisions 7 and 8

This section lists the changes between AODVv2 revisions ...-07.txt
and ...-08.txt.

o MetricType is now an Address Block TLV. Minor changes to the
text. By using an extension type in the Metric TLV we can
represent MetricType more elegantly in the RFC 5444 message.

o Updated Overview to be slightly more concise.

o Moved MetricType next to Metric when mentioned for better flow.

o Added text to Applicability to address comments on mailing list
regarding gateway behavior and NHDP HELLO messages.

o Removed paragraph in AODVv2 Message Transmission section regarding
TTL.

o Added reference where precursors are mentioned in route table
entry.





Perkins, et al. Expires October 16, 2015 [Page 82]

Internet-Draft AODVv2 April 2015


o Added text to bidirectionality explanation regarding NHDP HELLO
messages and lower layer triggers.

o Clarified blacklist removal with SHOULD rather than MAY.

o Removed pseudo-code from section on evaluating incoming routing
information.

o Clarified rules for expunging route entries on memory-constrained
devices.

o Clarified the use of exponential backoff for route discovery
attempts.

o Small updates to message sections. Removed steps about checking
if neighbors.

o Renamed RFC 5444 parser to multiplexer in Section 10.

o Removed "optional feature" to include multiple addresses in RERR.

o Removed MetricType from the Message TLV Type Specification.

o Updated Security Considerations.

o Added reference to RFC 7182.

o Small updates to message algorithms, including moving MetricType
from Message TLV to the Metric TLV in the Address Block TLV Block,
and only generating RERR if an Active route was made Invalid.

o

E.3. Changes between revisions 6 and 7

This section lists the changes since AODVv2 revision ...-06.txt

o Added Victoria Mercieca as co-author.

o Reorganized protocol message descriptions into major subsections
for each protocol message. For protocol messages, organized
processing into Generation, Reception, and Regeneration
subsections.

o Separated RREQ and RREP message processing description into
separate major subsection which had previously been combined into
RteMsg description.




Perkins, et al. Expires October 16, 2015 [Page 83]

Internet-Draft AODVv2 April 2015


o Enlarged RREQ Table function to include similar processing for
optional flooded RREP messages. The table name has been
correspondingly been changed to be the Table for Multicast
RteMsgs.

o Moved sections for Multiple Interfaces and AODVv2 Control Message
Generation Limits to be major subsections of the AODVv2 Protocol
Operations section.

o Reorganized the protocol message processing steps into the
subsections as previously described, adopting a more step-by-step
presentation.

o Coalesced the router states Broken and Expired into a new combined
state named the Invalid state. No changes in processing are
required for this.

o Merged the sections describing Next-hop Router Adjacency
Monitoring and Blacklists.

o Specified that routes created during Route Discovery are marked as
Idle routes. If they are used for carrying data they become
Active routes.

o Added Route.LastSeqNumUpdate information to route table, so that
route activity and sequence number validity can be tracked
separately. An active route can still forward traffic even if the
sequence number has not been refreshed within MAX_SEQNUM_LIFETIME.

o Mandated implementation of RREP_Ack as response to AckReq Message
TLV in RREP messages.
Added field to RREP_Ack to ensure correspondence to the correct
AckReq message.

o Added explanations for what happens if protocol constants are
given different values on different AODVv2 routers.

o Specified that AODVv2 implementations are free to choose their own
heuristics for reducing multicast overhead, including RFC 6621.

o Added appendix to identify AODVv2 requirements from OS
implementation of IP and ICMP.

o Deleted appendix showing example RFC 5444 packet formats.

o Clarification on the use of RFC 5497 VALIDITY_TIME.





Perkins, et al. Expires October 16, 2015 [Page 84]

Internet-Draft AODVv2 April 2015


o In Terminology, deleted superfluous definitions, added missing
definitions.

o Numerous editorial improvements and clarifications.

E.4. Changes between revisions 5 and 6

This section lists the changes between AODVv2 revisions ...-05.txt
and ...-06.txt.

o Added Lotte Steenbrink as co-author.

o Reorganized section on Metrics to improve readability by putting
specific topics into subsections.

o Introduced concept of data element, which is used to clarify the
method of enabling RFC 5444 representation for AODVv2 data
elements. A list of Data Elements was introduced in section 3,
which provides a better understanding of their role than was
previously supplied by the table of notational devices.

o Replaced instances of OrigNode by OrigAddr whenever the more
specific meaning is appropriate. Similarly for instances of other
node versus address terminology.

o Introduced concepts of PrefixLengthList and MetricList in order to
avoid use of index-based terminology such as OrigNdx and TargNdx.

o Added section 5, "AODVv2 Message Transmission", describing the
intended interface to RFC 5444.

o Included within the main body of the specification the mandatory
setting of the TLV flag thassingleindex for TLVs OrigSeqNum and
TargSeqNum.

o Removed the Route.Timed state. Created a new flag for route table
entries known as Route.Timed. This flag can be set when the route
is in the active state. Previous description would require that
the route table entry be in two states at the same time, which
seems to be misleading. The new flag is used to clarify other
specification details for Timed routes.

o Created table 3 to show the correspondence between AODVv2 data
elements and RFC 5444 message components.

o Replaced "invalid" terminology by the more specific terms "broken"
or "expired" where appropriate.




Perkins, et al. Expires October 16, 2015 [Page 85]

Internet-Draft AODVv2 April 2015


o Eliminated the instance of duplicate specification for inclusion
of OrigNode (now, OrigAddr) in the message.

o Corrected the terminology to be Mid instead of Tail for the
trailing address bits of OrigAddr and TargAddr for the example
message formats in the appendices.

o Repaired remaining instances of phraseology that could be
construed as indicating that AODV only supports a single network
interface.

o Numerous editorial improvements and clarifications.

E.5. Changes between revisions 4 and 5

This section lists the changes between AODVv2 revisions ...-04.txt
and ...-05.txt.

o Normative text moved out of definitions into the relevant section
of the body of the specification.

o Editorial improvements and improvements to consistent terminology
were made. Replaced "retransmit" by the slightly more accurate
term "regenerate".

o Issues were resolved as discussed on the mailing list.

o Changed definition of LoopFree as suggested by Kedar Namjoshi and
Richard Trefler to avoid the failure condition that they have
described. In order to make understanding easier, replaced
abstract parameters R1 by RteMsg and R2 by Route to reduce the
level of abstraction when the function LoopFree is discussed.

o Added text to clarify that different metrics may have different
data types and different ranges of acceptable values.

o Added text to section "RteMsg Structure" to emphasize the proper
use of RFC 5444.

o Included within the main body of the specification the mandatory
setting of the TLV flag thassingleindex for TLVs OrigSeqNum and
TargSeqNum.

o Made more extensive use of the AdvRte terminology, in order to
better distinguish between the incoming RREQ or RREP message
(i.e., RteMsg) versus the route advertised by the RteMsg (i.e.,
AdvRte).




Perkins, et al. Expires October 16, 2015 [Page 86]

Internet-Draft AODVv2 April 2015


E.6. Changes between revisions 3 and 4

This section lists the changes between AODVv2 revisions ...-03.txt
and ...-04.txt.

o An appendix was added to exhibit algorithmic code for
implementation of AODVv2 functions.

o Numerous editorial improvements and improvements to consistent
terminology were made. Terminology related to prefix lengths was
made consistent. Some items listed in "Notational Conventions"
were no longer used, and so deleted.

o Issues were resolved as discussed on the mailing list.

o Appropriate instances of "may" were changed to "MAY".

o Definition inserted for "upstream".

o Route.Precursors included as an *optional* route table field

o Reworded text to avoid use of "relevant".

o Deleted references to "DestOnly" flag.

o Refined statements about MetricType TLV to allow for omission when
MetricType == HopCount.

o Bulletized list in section 8.1

o ENABLE_IDLE_UNREACHABLE renamed to be ENABLE_IDLE_IN_RERR

o Transmission and subscription to LL-MANET-Routers converted to
MUST from SHOULD.

E.7. Changes between revisions 2 and 3

This section lists the changes between AODVv2 revisions ...-02.txt
and ...-03.txt.

o The "Added Node" feature was removed. This feature was intended
to enable additional routing information to be carried within a
RREQ or a RREP message, thus increasing the amount of topological
information available to nodes along a routing path. However,
enlarging the packet size to include information which might never
be used can increase congestion of the wireless medium. The
feature can be included as an optional feature at a later date




Perkins, et al. Expires October 16, 2015 [Page 87]

Internet-Draft AODVv2 April 2015


when better algorithms are understood for determining when the
inclusion of additional routing information might be worthwhile.

o Numerous editorial improvements and improvements to consistent
terminology were made. Instances of OrigNodeNdx and TargNodeNdx
were replaced by OrigNdx and TargNdx, to be consistent with the
terminology shown in Table 2.

o Example RREQ and RREP message formats shown in the Appendices were
changed to use OrigSeqNum and TargSeqNum message TLVs instead of
using the SeqNum message TLV.

o Inclusion of the OrigNode's SeqNum in the RREP message is not
specified. The processing rules for the OrigNode's SeqNum were
incompletely specified in previous versions of the draft, and very
little benefit is foreseen for including that information, since
reverse path forwarding is used for the RREP.

o Additional acknowledgements were included, and contributors names
were alphabetized.

o Definitions in the Terminology section capitalize the term to be
defined.

o Uncited bibliographic entries deleted.

o Ancient "Changes" sections were deleted.

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




Perkins, et al. Expires October 16, 2015 [Page 88]

Internet-Draft AODVv2 April 2015


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 October 16, 2015 [Page 89]

Other related posts:

  • » [aodvv2-discuss] Stylistic Edits - Victoria Mercieca