Skip to main content

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

Revision differences

Document history

Date Rev. By Action
2024-03-07
04 Cindy Morgan Notification list changed to aretana.ietf@gmail.com from Sri Gundavelli <sgundave@cisco.com>, aretana.ietf@gmail.com
2024-03-07
04 Cindy Morgan Document shepherd changed to (None)
2024-03-04
04 Donald Eastlake Added to session: IETF-119: manet  Tue-0730
2024-03-03
04 Charles Perkins New version available: draft-perkins-manet-aodvv2-04.txt
2024-03-03
04 Charles Perkins New version accepted (logged-in submitter: Charles Perkins)
2024-03-03
04 Charles Perkins Uploaded new revision
2023-03-27
03 (System) Document has expired
2023-03-27
03 (System) Removed all action holders (IESG state changed)
2023-03-27
03 (System) IESG state changed to Dead from I-D Exists
2023-03-26
03 Alvaro Retana Stream changed to None from IETF
2023-03-26
03 Alvaro Retana None
2023-03-26
03 Alvaro Retana
My AD term is ending, and this document hasn't been revised in several years.  As it is AD-Sponsored, I am clearing the state and allowing …
My AD term is ending, and this document hasn't been revised in several years.  As it is AD-Sponsored, I am clearing the state and allowing the new responsible AD to decide how to proceed.
2023-03-26
03 (System) Changed action holders to Alvaro Retana (IESG state changed)
2023-03-26
03 Alvaro Retana IESG state changed to I-D Exists from AD Evaluation::Revised I-D Needed
2023-02-23
03 Alvaro Retana Changed action holders to Charles Perkins, John Dowdell, Lotte Steenbrink, Victoria Pritchard
2021-01-11
03 Alvaro Retana IESG state changed to AD Evaluation::Revised I-D Needed from AD Evaluation::AD Followup
2019-02-28
03 (System) Sub state has been changed to AD Followup from Revised ID Needed
2019-02-28
03 Charles Perkins New version available: draft-perkins-manet-aodvv2-03.txt
2019-02-28
03 (System) New version approved
2019-02-28
03 (System)
Request for posting confirmation emailed to previous authors: Lotte Steenbrink , db3546@att.com, Charles Perkins , Stan Ratliff , aretana.ietf@gmail.com, Victoria Mercieca , martin.vigoureux@nokia.com …
Request for posting confirmation emailed to previous authors: Lotte Steenbrink , db3546@att.com, Charles Perkins , Stan Ratliff , aretana.ietf@gmail.com, Victoria Mercieca , martin.vigoureux@nokia.com, John Dowdell
2019-02-28
03 Charles Perkins Uploaded new revision
2018-12-20
02 Alvaro Retana IESG state changed to AD Evaluation::Revised I-D Needed from AD Evaluation::External Party
2018-12-13
02 Alvaro Retana
=== AD Review of draft-perkins-manet-aodvv2-02 (Part 3) ===

Dear authors:

Part 3 of my review includes Section 6 (AODVv2 Protocol Operations).

I have to say …
=== AD Review of draft-perkins-manet-aodvv2-02 (Part 3) ===

Dear authors:

Part 3 of my review includes Section 6 (AODVv2 Protocol Operations).

I have to say that I got lost in some places, specially around §6.7.  IOW, I have a lot of clarifying questions.

Thanks!

Alvaro.


...
  951 6.1.  Initialization

  953  When an AODVv2 router does not have information about its previous
  954  sequence number, or if its sequence number is lost at any point, the
  955  router reinitializes its sequence number to one (1).  However, other
  956  AODVv2 routers may still hold sequence number information that this
  957  router previously issued.  Since sequence number information is
  958  removed if there has been no update to the sequence number in
  959  MAX_SEQNUM_LIFETIME, the initializing router MUST wait for
  960  MAX_SEQNUM_LIFETIME before it creates any messages containing its new
  961  sequence number.

[nit] This section starts when the router has already been initialized...in fact, it already somehow doesn't have information about itself (?).  It just seems a weird place to start talking about Initialization.

[major] §4.4 says that "each AODVv2 router in the network MUST maintain its own sequence number."  Yes, a bug can cause a router to not have information or have lost its sequence number...but the case (guessing from the section name) would more like be initial setting (not reinitialization).  Is that what you're trying to convey?

[minor] §4.4 also says that "zero (0) is reserved to indicate that the router's sequence number is unknown".  Is unknown the same as lost?

[major] "initializing router MUST wait for MAX_SEQNUM_LIFETIME before it creates any messages containing its new sequence number"  That's a long time!  Does that mean that a new router in the network can't request routes (peeking below, what else?) for 5 minutes?  I may be interpreting "initialization" not as intended: I'm thinking of what happens when the AODVv2 process is first started...  Are we talking about the same thing?

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

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

  968  o  Forward a received RREQ or RREP

  970  o  Send an RREP_Ack

  972  o  Maintain valid routes in the Local Route Set

  974  o  Create, process and forward RERR messages

  976 6.2.  Next Hop Monitoring

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

[minor] "If a route discovery is retried by RREQ_Gen, the blacklisted routers are excluded from the process..."  I'm assuming that the blacklisted routers are also excluded from new RREQs (not just retries).  Is that true?  §3 does mention it ("Uni-directional links are not suitable; AODVv2 will detect and exclude those links from route discovery."), but it would be better if the statement was clearly made...

Note that the next sentence ("Further, a route is not to be used for forwarding until the bidirectionality of the link to the next hop is confirmed.") does confirm...  Maybe consolidate the two into a general statement.

  993  o  Bidirectional connectivity to upstream routers is tested as
  994      necessary by requesting acknowledgement of RREP messages,
  995      including an AckReq element to indicate that an acknowledgement is
  996      requested.  This MUST be answered by sending an RREP_Ack in
  997      response.  Receipt of an RREP_Ack within RREP_Ack_SENT_TIMEOUT
  998      demonstrates that bidirectional connectivity exists.  Otherwise,
  999      the link is considered to be unidirectional.  All AODVv2 routers
  1000      MUST support this process, which is explained in Section 7.2 and
  1001      Section 7.3.

[nit] I think that should only be 7.3.

[minor] What does "as necessary" mean?  §7.3 says that the mechanism is used only "over a link which is not known to be bidirectional".  Please say the same thing here…if that is “as necessary".

...
  1019  If no such entry exists, a new entry is created as described in
  1020  Section 6.3.  While the value of Neighbor.State is HEARD,
  1021  acknowledgement of RREP messages sent to that neighbor MUST be
  1022  requested.  If an acknowledgement is not received within the timeout
  1023  period, the neighbor MUST have Neighbor.State set to BLACKLISTED.  If
  1024  an acknowledgement is received within the timeout period,
  1025  Neighbor.State is set to CONFIRMED.  When the value of Neighbor.State
  1026  is CONFIRMED, the request for an acknowledgement of any other RREP
  1027  message is unnecessary.

[major] If continuous (or at least periodic) bidirectional checking is not done, is the assumption then that once the link is determined to be bidirectional that the characteristics won't change?  Or is it assumed that as long as the rest of the protocol machinery is working, then everything is ok?

  1029  Additional indications of connectivity may be available from other
  1030  operations, for example:

  1032  o  MAC layer protocol assuring bidirectional links

  1034  o  Route timeout

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

  1039  o  TCP timeouts

  1041  o  Promiscuous listening

  1043  o  receipt of a Neighborhood Discovery Protocol HELLO message with
  1044      the receiving router listed as a neighbor [RFC6130]

[major] AODVv2 seems to not have any type of neighbor discovery (except waiting for protocol packets to show up).  Is that true?  Does that mean that the routers promiscuously accept request from anyone?  Is that what "promiscuous listening" means?  Since this is the only place where the word "promiscuous" appears in the document, it may be worth explaining further.

[major] What is the relationship with NHDP?  This is the only place where it is mentioned -- is the assumption that it is being used?  Is it optional?  Mandatory?  What are the advantages/changes if it is used?  NHDP has the concept of a "symmetric link", which is equivalent to bidirectional...why isn't that used (instead of defining a native mechanism)? What am I missing?

  1046  o  Other monitoring mechanisms or heuristics
  1047  If such an external process signals that the link to a neighbor is
  1048  bidirectional, the AODVv2 router MAY update the matching Neighbor Set
  1049  entry by changing the value of Neighbor.State to CONFIRMED.  If an
  1050  external process signals that a link is not bidirectional, then the
  1051  value of Neighbor.State MAY be changed to BLACKLISTED.

[major] The text above and §7.3 use MUST to require the ack'ing mechanism to verify bidirectionality.  IOW, the MAYs here contradict that part of the specification.  If external mechanisms can be used (as mentioned here), then the ack'ing above can't be mandatory (MUST).

  1053 6.3.  Neighbor Set Update

...
[minor] What about Neighbor.AckSeqNum and Neighbor.HeardRERRSeqNum?  For completeness, please mention them here too.

...
  1082  o  an RREP_Ack response received from a Neighbor with Neighbor.State
  1083      set to HEARD, where Neighbor.Timeout > CurrentTime

[minor] I think that instead of "Neighbor.Timeout > CurrentTime" you mean something like "the response was received within RREP_Ack_SENT_TIMEOUT".

  1085  then the link to the neighbor is bidirectional and the Neighbor Set
  1086  entry is updated as follows:

[major] This text also proposes an alrernative to the ack mechanism (§7.3), which puts it in conflict with the mandatory (MUST) nature of the ack.


...
  1092  When the Neighbor.Timeout is reached and Neighbor.State is HEARD,
  1093  then an RREP_Ack response has not been received from the neighbor
  1094  within RREP_Ack_SENT_TIMEOUT of sending the RREP_Ack request.  The
  1095  link is considered to be uni-directional and the Neighbor Set entry
  1096  is updated as follows:

[nit] s/When.../If...



  1105  o  Neighbor.State := HEARD

[minor] o  Neighbor.Timeout := INFINITY_TIME

  1107  If an external mechanism reports a link as broken, the Neighbor Set
  1108  entry SHOULD be removed.

[major] This dependency on the external mechanisms makes them Normative, but (except for NHDP) there are no references for them.  I'm assuming you're referring to the list earlier in this section...

[major] If the link is reported as broken, why wouldn't the Neighbor Set always be removed?  IOW, why SHOULD and not MUST?


...
  1116 6.4.  Interaction with the Forwarding Plane

  1118  The signals described in the following are conceptual in nature, and
  1119  can be implemented in various ways.  Conformant implementations of
  1120  AODVv2 are not mandated to implement the forwarding plane separately
  1121  from the control plane or data plane; these signals and interactions
  1122  are identified simply as assistance for implementers who may find
  1123  them useful.

[nit] s/conformant/conforming  According to [1] "conformant" is obsolete.

[1] https://www.merriam-webster.com/dictionary/conformant

[major]  I'm having some trouble with this first paragraph... It talks about conforming implementations, but it also says that the "signals and interactions are identified simply as assistance for implementers who may find them useful", which sounds to me as informative text.  The question is: is the forwarding plane behavior Normative in this document?

To expand a little more...  A "route is unavailable" failure seems to be very important to AODVv2 because of its reactive nature.  OTOH, forwarding success seems less critical.

  1125  AODVv2 requires signals from the forwarding plane:

  1127  o  A packet cannot be forwarded because a route is unavailable:
  1128      AODVv2 needs to know the source and destination IP addresses of
  1129      the packet.  If the source of the packet is configured as a Router
  1130      Client, the router SHOULD initiate route discovery to the
  1131      destination.  If it is not a Router Client, the router SHOULD
  1132      create a Route Error message.

[major] When would the router not perform the actions?  IOW, why use SHOULD and not MUST?

  1134  o  A packet is to be forwarded: AODVv2 needs to check the state of
  1135      the route to ensure it is still valid.

[minor] I'm assuming that the RIB has currently valid information...  But the text above sounds as if the validity of the routes has to be verified each time a packet is to be forwarded.

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

[minor] It would be really nice if there was a clear relationship between this signal and LocalRoute.LastUsed.  In the description of LocalRoute.LastUsed in §4.5 it is not clear how the time is updated.

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

[minor] What are other examples of forwarding failures (besides the route not being available)?

  1143  AODVv2 needs to send signals to the forwarding plane when:

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

[nit] A reference to §6.6 would be nice.

  1148  o  A route discovery failed: any buffered packets requiring that
  1149      route should be discarded, and the source of the packet should be
  1150      notified that the destination is unreachable (using an ICMP
  1151      Destination Unreachable message).  Route discovery fails if an
  1152      RREQ cannot be generated because the control message generation
  1153      limit has been reached (see Section 6.5), or if an RREP is not
  1154      received within RREQ_WAIT_TIME (see Section 6.6).

[major] "...the source of the packet should be notified that the destination is unreachable".  Should the "should" be Normative?

[nit] A reference to ICMP Destination Unreachable message would be nice.


...
  1171 6.5.  Message Transmission

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

[nit] s/Note that multicast messages MAY be sent via unicast./Note that messages MAY be sent via unicast.


...
  1222 6.6.  Route Discovery, Retries and Buffering
...
  1239  Buffering might be configured for IP packets awaiting a route for
  1240  forwarding by RREQ_Gen, if sufficient memory is available.  Buffering
  1241  of IP packets might have both positive and negative effects.  TCP
  1242  connection establishment will benefit if packets are queued while
  1243  route discovery is performed [Koodli01], but real-time traffic,
  1244  voice, and scheduled delivery may suffer if packets are buffered and
  1245  subjected to delays.  Recommendations for appropriate buffer methods
  1246  are out of scope for this specification.  Determining which packets
  1247  to discard first when the buffer is full is a matter of policy at
  1248  each AODVv2 router.  Using different (or no) buffer methods might
  1249  affect performance but does not affect interoperability.

[minor] "Determining which packets to discard first when the buffer is full is a matter of policy at each AODVv2 router."  Buffer mechanisms is out of scope, but what to do when the buffer is full isn't??  Or should the policy also be out of scope (i.e. don't mention the "AODVv2 router")?

  1251  RREQ_Gen awaits reception of a Route Reply message (RREP) containing
  1252  a route toward TargAddr.  This can be achieved by monitoring the
  1253  entry in the Multicast Route Message Table that corresponds to the
  1254  generated RREQ.  When CurrentTime exceeds McMsg.Timestamp +
  1255  RREQ_WAIT_TIME and no RREP has been received, RREQ_Gen will retry the
  1256  route discovery.

[minor] "Multicast Route Message Table"  Do you mean Multicast Route Message Set?

...
  1270  After DISCOVERY_ATTEMPTS_MAX and the corresponding wait time for an
  1271  RREP response to the final RREQ, route discovery is considered to
  1272  have failed.  If an attempted route discovery has failed, RREQ_Gen
  1273  SHOULD wait at least RREQ_HOLDDOWN_TIME before attempting another
  1274  route discovery to the same destination, in order to avoid repeatedly
  1275  generating control traffic that is unlikely to discover a route.  Any
  1276  IP packets buffered for TargAddr are also dropped and a Destination
  1277  Unreachable ICMP message (Type 3) with a code of 1 (Host Unreachable
  1278  Error) is delivered to the source of the packet, so that the
  1279  application knows about the failure.

[major] Do we need Normative language for the action taken?


...
  1292 6.7.  Processing Received Route Information

  1294  A Route Request (RREQ) contains a route to OrigPrefix, and a Route
  1295  Reply (RREP) contains a route to TargPrefix.  All AODVv2 routers that
  1296  receive a route message first check that they have sufficient memory
  1297  to store the route contained within it in their Local Route Set.
  1298  Incoming information is first checked to verify that it is both safe
  1299  to use and offers an improvement to existing information, as
  1300  explained in Section 6.7.1.  If these checks pass, the Local Route
  1301  Set MUST be updated according to Section 6.7.2.

[minor] "first check that they have sufficient memory"  What is the significance of this check?  If not enough memory is available, then what?  §6.10.1 says that "Unconfirmed route MUST NOT be expunged" -- at the point of just receiving (and not processing) a RREQ then entry is still not Unconfirmed...so it seems like it may be ok (at least not contradicting) to not store the route (if that is the action to be taken if there's insuffiecient memory).

[minor] §6.7.1 talks about a route being "safe against routing loops".  Is that what you mean above by "safe to use"?  Please be clear/consistent.

[major] "MUST be updated according to Section 6.7.2."  §6.7.2 contains some SHOULDs -- I haven't read that section in detail (yet), but to avoid a conflict between the MUST in this section and the SHOULDs later on, s/MUST/must  I think that the first paragraph in §6.7.2 is clear in indicating the next step in the process.

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

[nit] "In the processes below..."  The definitions don't just apply here, right?

[minor] So...if AdvRte is contained in the RteMsg, then they're the same, right?  Why do we need two different representations of the same?  ...and then it's all mapped to LocalRoute.  It seems like they are the same but the terminology is used to apply for different stages in the process (from receiving the route to using it)...  If that is true, it may be nice to explain that upfront (here, or maybe even sooner).

[minor] Should the AdvRte structure be defined somewhere?  Maybe generalize the description of McMsg since that seems to overlap with RteMsg...



  1313  o  AdvRte.PrefixLength := RteMsg.OrigPrefixLen (in RREQ) or
  1314      RteMsg.TargPrefixLen (in RREP).  If no prefix length was included
  1315      in RteMsg, prefix length is the address length, in bits, of
  1316      RteMsg.OrigPrefix (in RREQ) or RteMsg.TargPrefix (in RREP)

[major] §4.2 describes RouterClient.PrefixLength and §4.6 McMsg.OrigPrefixLen, but neither point out what to do if the information is not available.  I think that this point should be mentioned there as well.

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

  1321  o  AdvRte.NextHop := RteMsg.IPSourceAddress (an address of the
  1322      sending interface of the router from which the RteMsg was
  1323      received)

[major] IPSourceAddress is not previously defined -- in fact, this is the only place where it comes up.  I think I made the comment before about not understanding the difference between RteMsg and McMsg -- I looked there (§4.6), but couldn't find IPSourceAddress either.  ...  But I did find IP.SourceAddress (§7.3.2), which is compared to Neighbor.IPAddress; IP.SourceAddress doesn't seem to be defined anywhere either...but the use seems to match the description.


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

[minor] I think that the content in §5 is enough to not have to repeat any of it here.  IOW, s/AdvRte.Cost := Cost(R) using.../AdvRte.Cost := Cost(R) (Section 5)

  1334  o  AdvRte.SeqNoRtr := the IP address in the Address List of type
  1335      SeqNoRtr if one exists, otherwise 0

[minor] I think that after 2 or 3 similar comments I finally came to reqlize that SeqNoRtr is not a sequence number, but the "sequence number router", right?  Or am I still lost?  The previous definitions were slightly different -- please make them the same (I guess the difference will be the router being refered to).

[minor] "Address List..."  Hmmm...  "Address List" shows up only once more (§7.2.1), but AddressList shows up more.  I'm guessing you mean the same thing, right?  Please be consistent!!

[major] "Address List of type SeqNoRtr"  §7.1.1/§7.2.1 mention "AddressList, with AddressType SeqNoRtr", but the types (?) are not discussed anywhere.  In fact, when AddressList is defined (§7.2, for example) no types are mentioned.

  1337 6.7.1.  Evaluating Route Information
...
  1344  1.  Search for LocalRoutes in the Local Route Set matching AdvRte's
  1345      address, prefix length, metric type, and SeqNoRtr (the AODVv2
  1346      router address corresponding to the sequence number).

[major] §6.7 uses notation like AdvRte.Address to refer to these items.  Please use them here.  Consistency!

[minor] There's not need to keep defining SeqNoRtr at every mention (regardless of how confusing it may be).  A clear single definition in a prominent place should be enough -- which also avoids variations.

  1348      *  If no matching LocalRoute exists, AdvRte MUST be used to
  1349          update the Local Route Set and no further checks are required.

[minor] It seems like §6.7.2 is where the instructions on how to create new LocalRoute entries are given.  Please add a forward reference.

  1351      *  If matching LocalRoutes are found, continue to the next step.

[minor] Just to be clear, a match means that all the characteristics above are the same, right?  Even the SeqNoRtr?  If that is different then it implies the same destination but different origin of the information...  Is this considered somewhere else?

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

  1356      *  If AdvRte is more recent than all matching LocalRoutes, AdvRte
  1357          MUST be used to update the Local Route Set and no further
  1358          checks are required.

[minor] §4.4 talks about "newer", not "more recent".  Please be consistent!

  1360      *  If AdvRte is stale, AdvRte MUST NOT be used to update the
  1361          Local Route Set. Ignore AdvRte for further processing.

[minor] §4.4 talks about the route being "older...and therefore stale and redundant"; I guess using "stale" is ok, but "older" would be better.

[major] §4.4 says than an older route "MUST therefore be discarded".  Is that effectively the same as the text above?  IOW, is not using the route and ignoring it the same thing as discarding it?  I guess the result is the same: the route has no effect; but discarding implies (among other things) freeing up memory, while not using/ignoring doesn't (at least not immediately).  In a constrained device it maters to be specific.

Note that some of the steps below also talk about ignoring.  Should the action be discard instead?  Are there potential benefits in ignoring/not using and keeping the route around in case it is needed later?

  1363      *  If the sequence numbers are equal, continue to the next step.

[major] (I made a similar comment in §4.4.)  Doesn't that imply a duplicate message?  §14.1.1 says that "duplicate RREQ messages are dropped", but the text above says to continue.


...
  1376  4.  Compare route costs

[minor] §5 says that "implementers MAY consider metric types that are not strictly increasing".  The description below seems to be based on strictly increasing metrics.  Do the better/worse concepts apply in all cases?

  1378      *  If AdvRte is better than all matching LocalRoutes, it MUST be
  1379          used to update the Local Route Set because it offers
  1380          improvement.

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

[major] If it offers no improvement, which are the cases where it could be used?  IOW, why SHOULD NOT and not MUST NOT?

  1386      *  If AdvRte is worse and LocalRoute is valid, ignore AdvRte for
  1387          further processing.  AdvRte MUST NOT be used to update the
  1388          Local Route Set because it does not offer any improvement.

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

[major] There's a Normative contradiction: the worse condition says that the "AdvRte MUST NOT be used", but the not better condition says that "AdvRte SHOULD be used".  MUST trumps SHOULD all the time.  Perhaps a better way to word the process is to check whether the LocalRoute is valid before comparing the cost...or even before step 3 (?).

...
  1402 6.7.2.  Applying Route Updates

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

  1407  If AdvRte is obtained from an RREQ message, the link to the next hop
  1408  neighbor may not be confirmed as bidirectional (see Section 4.3).  If
  1409  there is no existing matching route in the Local Route Set, AdvRte
  1410  MUST be installed to allow a corresponding RREP to be sent.  If a
  1411  matching entry already exists, and the link to the neighbor can be
  1412  confirmed as bidirectional, AdvRte offers potential improvement.

[major] If I interpreted §6.7.1 correctly, it seemed that by the time we get to this section all the ties with existing LocalRoutes have been broken...and where better, the AdvRte "MUST be used to update the Local Route Set".  However, the last sentence above, and the steps below, still have us comparing the AdvRte and the LocalRoutes.  Are there steps missing above?  Did I miss anything?


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

[major nit] "valid" not one of the options for LocalRoute.State (§4.5).  I know that the descriptions of Idle and Active mention valid -- maybe specifically call out the fact that Valid (capitalized) means Idle or Active.


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

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

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

[minor] It seems like this step might also continue to Step 5...??


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

[major] When wouldn't the AdvRte not be stored?  IOW, why SHOULD and not MUST?

[major] What exactly is an "additional entry"?  Is it just an extra route, where both/either could be used?  Are you talking about a backup?  §6.7.1 says that if "AdvRte is equal in cost and LocalRoute is valid, AdvRte SHOULD NOT be used", so I'm confused as to how we got here and the use of the "additional entry".

The description of Unconfirmed (§4.5) says that a route "MUST NOT be stored in the RIB to forward general data-plane traffic".  This helps with the question about it being an "additional entry"...but soon enough the route will be confirmed as bidirectional...

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

  1460      *  LocalRoute.Address := AdvRte.Address

  1462      *  LocalRoute.PrefixLength := AdvRte.PrefixLength

  1464      *  LocalRoute.MetricType := AdvRte.MetricType

[major] What about the rest of the Local Route Set (§4.5)?  If the rest is in the next step, please say so.

  1466  5.  Update the LocalRoute as follows:
...
  1472      *  LocalRoute.NextHopInterface := interface on which RteMsg was
  1473          received

[minor] Why isn't there an AdvRte.NextHopInterface entry?

  1475      *  LocalRoute.Metric := AdvRte.Cost

  1477      *  LocalRoute.LastUsed := CurrentTime

[minor] I was going to comment on the fact that the route hasn't been used at this point...but I rechecked the definition of LocalRoute.LastUsed (§4.5).  By looking at the Local Route Set, how can I tell if the route has been installed in the RIB?


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

[nit] Because the LocalRoute was updated in the last step, the "existing LocalRoute" is the same as the current one...  I think the use of existing is not clear enough...

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

[Hmmm..] I'm lost...I don't know anymore which LocalRoute is the new one, which was the existing one (old?), if the new one is still Unconfirmed, should it be expunged?

An example to illustrate the update process would be very nice.  Maybe in a new sub-section (6.7.3)...

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

[major] When would these routes not be expunged?  IOW, why SHOULD and not MUST?

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

[?] Now I *really* got lost! :-(  A LocalRoute.State of Active or Idle means that the route is valid, has been confirmed as bidirectional, and (for Active) has been used recently.  How can this match "a route request which is still in progress"?  Wouldn't the route request have already been complete?

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

[nit] There a ")" missing.

[minor] "the best LocalRoute will be Unconfirmed"  The best one, really?  Why not the worst one?

[major] When would the router not try to determine bidirectionality?  IOW, why SHOULD and not MUST?

  1511 6.8.  Suppressing Redundant Messages (Multicast Route Message Set)

  1513  When route messages are flooded in a MANET, an AODVv2 router may
  1514  receive several instances of the same message.  Forwarding every one
  1515  of these would provide little additional benefit, while generating
  1516  unnecessary signaling traffic and consequently additional
  1517  interference.  There have been a number of variations of AODV (e.g.,
  1518  [I-D.ietf-roll-aodv-rpl]), that have specified multicast for flooding
  1519  RREP messages as well as RREQ messages.  Since, in this document,
  1520  suppression techniques are only needed for RREQ messages, multicast
  1521  RREP messages are not considered.  However, the technique involved is
  1522  almost identical, and can be handled by substituting "RteMsg" instead
  1523  of RREQ in the following text.

[minor] The slight detour towards "variations of AODV" seems unnecessary at best, and may, at worst, raise questions about their status with respect to this document...  If anyone looks, they'll discover that this document is not even a reference in I-D.ietf-roll-aodv-rpl.

...
  1528  In this section, an entry in the Multicast Route Message Set will be
  1529  called a "multicast entry" for short.  Each multicast entry SHOULD be
  1530  maintained for at least RteMsg_ENTRY_TIME after the last Timestamp
  1531  update in order to account for long-lived RREQs traversing the
  1532  network.  An entry MUST be deleted when the sequence number is no
  1533  longer valid, i.e., after MAX_SEQNUM_LIFETIME.  Memory-constrained
  1534  devices MAY remove the entry before this time.

[major] "MUST be deleted" and "MAY remove" are Normative contradictions.  s/MUST/SHOULD



  1547  If the received message is determined to be redundant, no forwarding
  1548  or response to the message is needed.  A message is considered to be
  1549  redundant if either (a) a comparable newer (as determined by the
  1550  OrigSeqNum) entry has already been received with information about
  1551  the source and destination addresses of the route discovery operation
  1552  or (b) it cannot be determined whether the message is newer compared
  1553  to existing entries, but the received message metric value is not any
  1554  better than metric values in compatible multicast entries.

[nit] simplify: s/a comparable newer (as determined by the OrigSeqNum) entry has already been received with information about the source and destination addresses of the route discovery operation/a comparable newer (as determined by the OrigSeqNum) entry has already been received

[minor] Let me see if I understand.  Point (a) refers to an existing multicast entry (and not the received message)...and point (b) refers to the received message, right?

[minor] Why can't it be "determined whether the message is newer"?  Isn't that what the sequence numbers are for, as explained in §4.4?



  1560  1.  First, search for a comparable multicast entry.  If there is no
  1561      such entry, then create a new entry as follows:

[minor] For the values before, aren't these RteMsg.*?  If so, then just use RteMsg.* and save writing up more explanations.


...
  1623  If processing for the RREQ has not been discontinued according to the
  1624  above instructions, then continue processing the message as specified
  1625  in Section 7.1.3.

[minor] It doesn't feel right that §7 (AODVv2 Protocol Messages) contains operation information when §6 (AODVv2 Protocol Operations) exists...

  1627 6.9.  Suppressing Redundant Route Error Messages (Route Error Set)

  1629  In order to avoid flooding the network with RERR messages when a
  1630  stream of IP packets to an unreachable address arrives, an AODVv2
  1631  router SHOULD avoid creating duplicate messages by determining
  1632  whether an equivalent RERR has recently been sent.  This is achieved
  1633  with the help of the Route Error Set (see Section 4.7).

[major] When would a router create duplicate messages?  IOW, why SHOULD and not MUST?

[major] "SHOULD avoid" is not really something that can be enforced, how do you avoid?  Perhaps: "SHOULD NOT create".

  1635  To determine if a RERR should be created:

  1637  1.  Search for an entry in the Route Error Set where:

[major] Note that §4.7 says that "each RERR message...SHOULD be recorded", not MUST.  This means that even if a RERR was sent it may not be in the Route Error Set -- this could be the justification for using SHOULD above.

  1639      *  RerrMsg.UnreachableAddress == UnreachableAddress to be
  1640          reported

[minor] It may be obvious, but UnreachableAddress is not defined anywhere.

§7.4.1 talks about "unreachable address", but that is not defined anywhere either.  The packet format (§7.4) has an entry called AddressList (defined as "The addresses of the routes not available through RERR_Gen.").  That seems to be the closest definition of UnreachableAddress.  Suggestion: rename the AddressList in the RERR to UnreachableAddress; this will then match the terminology in the Route Error Set (§4.7) and here.

  1642      *  RerrMsg.PktSource == PktSource to be included in the RERR

[minor] PktSource is only defined in the terminology section -- I suggested there that this type of field name should be defined elsewhere.  In this case §4.7 seems like the right one.

  1644      If a matching entry is found, no further processing is required
  1645      and the RERR SHOULD NOT be sent.

  1647  2.  If no matching entry is found, a new entry with the following
  1648      properties is created, and the RERR is created and sent as
  1649      described in Section 7.4.1:

[nit] Redundant: "...a new entry with the following properties is created, and the RERR is created..."


...
  1658 6.10.  Local Route Set Maintenance
...
  1666  o  (for possibly unidirectional links) confirming a route to
  1667      OrigAddr,

[minor] "possibly unidirectional links" is what, Unconfirmed?

  1669  o  reporting routes that become Invalid.

  1671 6.10.1.  LocalRoute State Changes

  1673  During normal operation, AODVv2 does not require explicit timeouts to
  1674  manage the lifetime of a valid route.  At any time, any LocalRoute
  1675  MAY be examined and updated according to the rules below.  In case a
  1676  Routing Information Base is used for forwarding, the corresponding
  1677  RIB entry MUST be updated as soon as the state of a LocalRoute.State
  1678  changes.  Otherwise, if timers are not used to prompt updates of
  1679  LocalRoute.State, the LocalRoute.State MUST be checked before IP
  1680  packet forwarding and before any operation based on LocalRoute.State.

[major] "At any time, any LocalRoute MAY be examined and updated..."  The implication (from the rest of the paragraph) is that there's a timer that controls what "at any time" is.  Do you have recommendations for those potetial timers or other triggers (besides the ones mentioned at the end of the paragraph, which are not optional)?

[major] "the LocalRoute.State MUST be checked before IP packet forwarding"  I'm sure this doesn't mean "for every packet", but it might be worth it adding some qualifiers of what "before IP packet forwarding" means.  I'm assuming that at least within ACTIVE_INTERVAL or MAX_IDLETIME the state doesn't need to be checked.

[major] "the LocalRoute.State MUST be checked...before any operation based on LocalRoute.State"  Which are those operations?

  1682  Route timeout behaviour is as follows:

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

[major] §4.5 defines Invalid as "a route that has expired or has broken."  Should an Unconfirmed route be considered expired after MAX_SEQNUM_LIFETIME?  If so, then it seems to me that it shouldn't be expunged (at least not immediately) becasue of "Invalid route SHOULD remain in the Local Route Set" below.

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

[major] I think there may be a Normative conflict between this statement ("SHOULD remain") and (from later in this same section) "Any Invalid route MAY be expunged."  The conflict can be resolved by indicating above what are the conditions (is there more than one?) under which the Invalid route would not be kept in the Local Route Set -- a mention of the expunging considerations below should be enough.

  1697  o  In all cases, if the time since LocalRoute.LastSeqNumUpdate
  1698      exceeds MAX_SEQNUM_LIFETIME, LocalRoute.SeqNum must be set to 0.
  1699      This is required so that any AODVv2 routers following the
  1700      initialization procedure can safely begin routing functions using
  1701      a new sequence number.  A LocalRoute with LocalRoute.State set to
  1702      Active or Idle can remain in the Local Route Set after the
  1703      sequence number has been set to 0, for example if the route is
  1704      reliably carrying traffic.  If LocalRoute.State is Invalid, or
  1705      later becomes Invalid, the LocalRoute MUST be expunged from the
  1706      Local Route Set.

[minor] Should this me a MUST: "LocalRoute.SeqNum must be set to 0"?

  1708  LocalRoutes can become Invalid before a timeout occurs, as follows:

  1710  o  If an external mechanism reports a link as broken, all LocalRoutes
  1711      using that link for LocalRoute.NextHop MUST immediately have
  1712      LocalRoute.State set to Invalid.

[major] Which "external mechanisms"? Becausee of the MUST, I think that there shuold be a Normative reference to them...  See my comment in §6.3 about this.


  1720      *  There is an Address in AddressList which matches
  1721        LocalRoute.Address, and:

  1723        +  The prefix length associated with this Address, if any,
  1724            matches LocalRoute.PrefixLength

  1726        +  The sequence number associated with this Address, if any, is
  1727            newer or equal to LocalRoute.SeqNum (see Section 4.4)

[major] These last two checks are described with an "and", but both conditions contain "if any".  Is the condition satisfied if the prefix length or sequence number is not present?  Both values are optional in the RRER (§7.4).

  1729        +  The metric type associated with this Address matches
  1730            LocalRoute.MetricType

  1732  A LocalRoute can be confirmed by inferring connectivity to OrigAddr.

[minor] By "confirmed" you mean "confirmed to be bidirectional", right?  Please be specific as the term "confirmed" (on its own) has no specific meaning.

  1734  o  When an AODVv2 router sends an RREP to OrigAddr for destination
  1735      TargAddr, and subsequently the AODVv2 router receives a packet
  1736      from OrigAddr with destination TargAddr, the AODVv2 router infers
  1737      that the route to OrigAddr has been confirmed.  The corresponding
  1738      state for LocalRoute.OrigAddr is changed to Active.

[minor] I don't see LocalRoute.OrigAddr mentioned anywhere else.  I guess you mean that the LocalRoute.State for the entry where LocalRoute.Address is changed to Active, right?

[major] There's no Normative language above, but it contradicts the mandatory nature (MUST) of the ack'ing mechaninsm to confirm bidirectionality.

  1740  LocalRoutes are updated when Neighbor.State is updated:

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

[minor] Please use the structures you already defined: ...any routes with LocalRoute.NextHop...

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

[minor] It seems to me that the definition of BLACKLISTED may correspond more to Unconfirmed than Invalid.  As opposed to removed (below), BLACKLISTED seems to be a case where the bidirectionality has not been confirmed (yet) (§4.3).



  1754  Memory constrained devices MAY choose to expunge routes from the
  1755  AODVv2 Local Route Set at other times, but MUST adhere to the
  1756  following rules:

  1758  o  An Active route MUST NOT be expunged, as it is in use.  If
  1759      deleted, IP traffic forwarded to this router would prompt
  1760      generation of a Route Error message, necessitating a Route Request
  1761      to be generated by the originator's router to re-establish the
  1762      route.

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

[minor] You didn't mention the RRER case here..

[minor] Knowing that ACTIVE_INTERVAL is really short, I would expect it to be normal for routes to flip back and forth between Active and Idle.  If so, why would you allow the Idle routes to be expunged?  IOW, why is that a SHOULD NOT and not a MUST NOT?


...
  1779 6.10.2.  Reporting Invalid Routes

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

[minor] §7.4.1 talks about the possibility of sending multicast RERRs.  If the received RERR above is multicast, then a new RERR is not needed, right?
2018-11-08
02 Alvaro Retana
=== AD Review of draft-perkins-manet-aodvv2-02 (Part 2) ===

Dear authors:

Part 2 of my review includes Section 4 (Data Structures) and 5 (Metrics).

In general, …
=== AD Review of draft-perkins-manet-aodvv2-02 (Part 2) ===

Dear authors:

Part 2 of my review includes Section 4 (Data Structures) and 5 (Metrics).

In general, I have a large (too large, I think, for a document that should be mature) set of comments.

Thanks!

Alvaro.



  503 4.  Data Structures

  505 4.1.  Interface Set

  507  The Interface Set is a conceptual data structure which contains
  508  information about all interfaces configured for use by AODVv2.  Any
  509  interface with an IP address can be used.  Multiple interfaces on a
  510  single router can be used.  Multiple interfaces on the same router
  511  may be configured with the same IP address.

  513  Each member in the Interface Set MUST contain the following:

[major] I have issues with the use of Normative language to describe a "conceptual data structure"...specially one that is not needed if only one interface is used.

[major] It sounds like the intent of the Normative language is not to mandate that the data structure contain an Interface.Id entry for each interface, but that each interface can be identified (using an id).  Is that correct?  If so, then please use the Normative language to mandate an ID per interface, and not an entry in a data structure.  [This may require some structural changes to the document.]

  515  Interface.Id
  516      An identifier that is unique in node-local scope, allowing the
  517      AODVv2 implementation to identify exactly one local network
  518      interface.

[major] How long should the Interface.Id be?  32-bits?  Any locally-significant length?

[major] After asking the question above, I noticed that this document doesn't mention Interface.Id (or identifier) anywhere else.  Given that multiple interfaces can share the same IP address, it sounds important to distinguish between them (maybe when sending or receiving)...  Am I missing something?

  520  If multiple interfaces of the AODVv2 router are configured for use by
  521  AODVv2, they MUST be configured in the Interface Set.

[major] Following the comment above about using Normative language...what does "configured in the Interface Set" mean?  The Interface Set is "a conceptual data structure which contains information about all interfaces configured for use by AODVv2", so it sounds like there's a loop if the interfaces are configured in the Interface Set, which contains information about the interfaces (which presumably were configured directly).  IOW, the interfaces are the ones that need to be configured, right?

[minor] Noticing that "Interface Set" is only used once outside of this Section, it seems to me like the whole construct may be unnecessary beyond a high level description.

[nit] BTW, note that in §6.5 the use of Interface Set seems redundant: "all interfaces that have been configured for AODVv2 operation, as given in the Interface Set" -- no need to mention the Interface Set if already mentioning "all interfaces".

  522  Implementations using only one interface do not need the Interface
  523  Set, since their single interface is already uniquely identifiable.

[major] Pointing out that the Interface Set is not needed is a contradiction of the MUSTs used above.


  525 4.2.  Router Client Set

  527  An AODVv2 router discovers routes for its own local applications and
  528  also for its Router Clients that are reachable without traversing
  529  another AODVv2 router.  The addresses used by these devices, and the
  530  AODVv2 router itself, are configured in the Router Client Set. An
  531  AODVv2 router will only originate Route Request and Route Reply
  532  messages on behalf of its configured Router Client addresses.

  534  Router Client Set entries contain:

[major] How are Router Clients discovered, or are they configured?  In several places (4.4, 6.4, 7.2, 9), there's talk about a configured Router Client -- if configured, in a manet, how would the operator know who are its Router Clients?

The terminology definition talked about a Router Client being an address...does that mean that the range is configured (only configured?) and attached devices can use addresses while connected to the router?

I'm confused...  In the end, this may just be an issue with the terminology...

[minor] The list below seems to be incomplete: there are several mentions of RouterClient.SeqNoRtr.

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

  540  RouterClient.PrefixLength
  541      The length, in bits, of the routing prefix associated with the
  542      RouterClient.IPAddress.  If the prefix length is not equal to the
  543      address length of RouterClient.IPAddress, the AODVv2 router MUST
  544      participate in route discovery on behalf of all addresses within
  545      that prefix.

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

  550 4.3.  Neighbor Set
...
  574  Neighbor.Timeout
  575      Indicates the time at which the Neighbor.State should be updated:

[nit] So...the Neighbor.Timeout is not a timer, but it represents the absolute time.  Just curious: why was it decided to do it this way?  Just wondering because there seem to be "unknowns" like INFINITY_TIME which could vary...  OTOH, if the concept of (for example) "CurrentTime + MAX_BLACKLIST_TIME" really means "set a timer of duration MAX_BLACKLIST_TIME", then that makes it easier to implement, but that is not how the text is specifying the operation...

[minor] It looks like §6.3 includes all the details about the values of Neighbor.Timeout depending on Neighbor.State.  I think that a reference to that Section is better than repeating the information here.

  577  o  If the value of Neighbor.State is BLACKLISTED, this indicates the
  578      time at which Neighbor.State will revert to HEARD.  This value is
  579      calculated at the time the router is blacklisted and by default is
  580      equal to CurrentTime + MAX_BLACKLIST_TIME.

[major] Is the CurrentTime maintained in seconds (since all the times are in seconds)?  I didn't see that specified anywhere.  It seems awkward to compare/add the current time (12:15pm) to a constant (200 sec)...

  582  o  If Neighbor.State is HEARD, and an RREP_Ack has been requested
  583      from the neighbor, it indicates the time at which Neighbor.State
  584      will be set to BLACKLISTED, if an RREP_Ack has not been received.

  586  o  If the value of Neighbor.State is HEARD and no RREP_Ack has been
  587      requested, or if Neighbor.State is CONFIRMED, this time is set to
  588      INFINITY_TIME.

[nit] A forward reference to §11.3 would be nice...or maybe just make the reference below general (not just about Neighbor.AckSeqNum and Neighbor.HeardRERRSeqNum).

  590  Neighbor.Interface
  591      The interface on which the link to the neighbor was established.

[major] Aha!  I was going to ask how should the interface be represented here...but then I found that §6.3 refers back to §4.1, where the Interface Set is defined.  Does that mean that *.Interface should basically be the Interface.Id?  If so, please say it!

  593  Neighbor.AckSeqNum
  594      The next sequence number to use for the TIMESTAMP value in an
  595      RREP_Ack request, in order to detect replay of an RREP_Ack
  596      response.  AckSeqNum is initialized to a random value.

  598  Neighbor.HeardRERRSeqNum
  599      The last heard sequence number used as the TIMESTAMP value in a
  600      RERR received from this neighbor, saved in order to detect replay
  601      of a RERR message.  HeardRERRSeqNum is initialized to zero.

  603  See Section 11.3 and Section 11.4 for more information on how
  604  Neighbor.AckSeqNum and Neighbor.HeardRERRSeqNum are used.

[major] The text above uses "TIMESTAMP value", at least one "timestamp value" is used...in other places you talk about the "TIMESTAMP TLV".  I had to do a little digging to figure out that the TIMESTAMP value refers to the "value in the TIMESTAMP TLV" (§11.3), which rfc7182 calls "time-value".  Please be consistent (including the case) inside the document and with the terminology already defined elsewhere.

[minor] I had to go digging again to figure out the size of the sequence numbers...went looking at §11.3 and 11.4 because that's what the reference above says...then dug into rfc7182 before figuring out that the length of time-value should be defined in this document...that took me to §11, which pointed be back to §4.4.  It was under my nose the whole time...  Please add a reference to §4.4 somewhere above to make it clear that AckSeqNum's initial random value is in fact 16-bit long...

  606 4.4.  Sequence Numbers

  608  Sequence Numbers enable AODVv2 routers to determine the temporal
  609  order of route discovery messages that originate from a AODVv2
  610  router, and thus to identify stale routing information so that it can
  611  be discarded.  The sequence number fulfills the same roles as the
  612  "Destination Sequence Number" of DSDV [Perkins94], and the AODV
  613  Sequence Number in [RFC3561].  The sequence numbers from two
  614  different routers are not comparable; route discovery messages with
  615  sequence numbers belonging to two different routers cannot be
  616  compared to determine temporal ordering.

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

[major] "MUST ensure" is not really Normatively enforceable.  Suggestion: "The sequence number in each router MUST be strictly increasing; it MUST be incremented..."

  628  An AODVv2 router MUST use its sequence number only on behalf of its
  629  configured Router Clients; route messages forwarded by other routers
  630  retain the originator's sequence number.

  632  To determine if newly received information is stale and therefore
  633  redundant compared to other information originated by the same
  634  router, the sequence number attached to the information is compared
  635  to the sequence number of existing information about the same route.
  636  The comparison is carried out by subtracting the existing sequence
  637  number from the newly received sequence number, using unsigned
  638  arithmetic.  The result of the subtraction is to be interpreted as a
  639  signed 16-bit integer.

[nit] You just defined HeardRERRSeqNum above...use it.

  641  o  If the result is negative, the newly received information is
  642      considered older than the existing information and therefore stale
  643      and redundant and MUST therefore be discarded.

  645  o  If the result is positive, the newly received information is newer
  646      than the existing information and is not considered stale or
  647      redundant and MUST therefore be processed.

[major] §11.4 also has Normative text about the comparison of the sequence numbers.  The text about the conditions to discard a packet is not exact, but effectively the same.  However, the condition for processing is simply implicit.  In general, I don't think that defining Normative behavior for the same thing in two different places in the text is a good idea.  A reference (from here to there, or vice-versa) would work better.

  649  o  If the result is zero, the newly received information is not
  650      considered stale, and therefore MUST be processed further in case
  651      the new information offers a better route (see Section 6.7.1 and
  652      Section 6.8).

[major] If the result is zero, doesn't that imply a duplicate message?  §14.1.1 says that "duplicate RREQ messages are dropped", but the text above says that they "MUST be processed".

[major] What does "processed further" mean?  Given that we're talking about a new message that was just received, I'm assuming you really meant "processed".

  ...
  666 4.5.  Local Route Set

  668  All AODVv2 routers MUST maintain a Local Route Set, containing
  669  information obtained from AODVv2 route messages.  The Local Route Set
  670  is considered to be stored separately from the forwarding plane's
  671  routing table (referred to as Routing Information Base (RIB)), which
  672  may be updated by other routing protocols operating on the AODVv2
  673  router as well.  The Routing Information Base is updated using
  674  information from the Local Route Set. Alternatively, if the
  675  information specified below can be added to RIB entries,
  676  implementations MAY choose to modify the Routing Information Base
  677  directly instead of maintaining a dedicated Local Route Set.

[major] There is a Normative contradiction: "routers MUST maintain a Local Route Set...MAY choose to modify the Routing Information Base directly instead of maintaining a dedicated Local Route Set".  Solution: s/MUST/SHOULD

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

  682  LocalRoute.Address
  683      An address, which, when combined with LocalRoute.PrefixLength,
  684      describes the set of destination addresses for which this route
  685      enables forwarding.

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

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

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

[minor] §6.10.1 says that "LocalRoute.SeqNum is used to classify future information about LocalRoute.Address as stale or fresh" -- but it doesn't say that there is a close relationship between it and LocalRoute.NextHop because "sequence numbers belonging to two different routers cannot be compared to determine temporal ordering" (§4.4).  It feels to me like that relationship should be highlighted somewhere to make sure that the appropriate sequence number is used when determining whether an address is stale or fresh...

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

[major] Same comment as above for Neighbor.Interface.

  703  LocalRoute.LastUsed
  704      If this route is installed in the Routing Information Base, the
  705      time it was last used to forward an IP packet.  If not, the time
  706      at which the LocalRoute was created.

[minor] It would be really nice if there was a clear relationship between LocalRoute.LastUsed and the interaction with the forwarding plane (§6.4).  As it is, it is not clear how the time is updated.

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

  711  LocalRoute.MetricType
  712      The type of metric associated with this route.  See Section 5 for
  713      information about AODVv2's handling of multiple metric types.

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

[major] What does it mean to be "consistent with"?  I understand that for Hop Count, for example the Metric could never be 2.3.  The question really comes from me trying to figure out "what happens if the Metric is not consistent?".  I traced LocalRoute.Metric all the way to TargMetric, but there's no place where a check is done for consistency...

Then I found this text in §5: "A maximum value, denoted MAX_METRIC[MetricType].  This MUST always be the maximum expressible metric value of type MetricType"

...which means that the Hop Count could be up to 256 hops.  In the Overview it is claimed that AODVv2 avoids the count to infinity problem, but it is not clear to me how that is achieved specially because if the cost "is not better (i.e., it is worse or equal)...AdvRte SHOULD be used to update the Local Route Set" (§6.7.1) -- that sounds to me like a recipe for counting to infinity.  But I may be missing something...what am I missing?


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

[major] Listing this item here contradicts the "MUST" used before the information in the LocalRoutes.  Suggestion: introduce this item in Section 10.

[minor] Should the list of neighbors include a full Neighbor Set entry or just Neighbor.IPAddress?

[nit] LocalRoute.Precursors is not mentioned anywhere else in the document, not even Section 10.

  722  LocalRoute.SeqNoRtr
  723      If nonzero, the IP address of the router that originated the
  724      Sequence Number for this route.

[minor] This definition is confusing to me...  If what is nonzero, the sequence number?  From §4.4, "value zero (0) is reserved to indicate that the router's sequence number is unknown" -- doesn't that mean that the route shouldn't even be considered?  If so, then at this point (when putting stuff in the Local Route Set) a 0 sequence number shouldn't be an issue...right?

§7.2 talks about "the IP address of TargRtr -- i.e., the router that originated the Sequence Number for this RREP"...which I assume is the same thing we're talking about here.  But I can't find who TargRtr is (that term doesn't show up anywhere else)...

In the end, I'm assuming that the text above could be simplified to something like "the IP address of the router that originated this route".

...
  762 4.6.  Multicast Route Message Set

  764  Multicast Route Request (RREQ) messages can be tested for redundancy
  765  to avoid unnecessary processing and forwarding.

[minor] The first paragraph seems to be redundant with the text below.

  767  The Multicast Route Message Set is a conceptual set which contains
  768  information about previously received multicast route messages, so
  769  that incoming route messages can be compared with previously received
  770  messages to determine if the incoming information is redundant or
  771  stale, so that the router can avoid sending redundant control
  772  traffic.

  774  Multicast Route Message Set entries contain the following
  775  information:

[major] Why is there no Normative language used when describing the contents of this set?  Or maybe I should be asking why is Normative language used for the other sets?  All the Sets (except this one and the Router Client Set) include a "MUST" to describe the contents...  I've made some comments above about optional operation/functionality in conflict with the MUSTs...and even not liking the Normative language in the data structure if not needed (Interface Set)...  Do we need these data structures to be described using Normative language?

[minor] The notation used here (McMsg.*) made me go revisit Table 1, which says this:

  | McMsg.Field          | A field in a Multicast Route Message      |
  |                      | entry                                    |
  | RteMsg.Field          | A field in either RREQ or RREP            |

...but this section talks about "Multicast Route Request (RREQ) messages".  What is the difference then between McMsg.* and RteMsg.* when considering RREQs.

  777  McMsg.OrigPrefix
  778      The prefix associated with OrigAddr, the source address of the IP
  779      packet triggering the route request.

[minor] If I've been keeping track correctly, and you followed my comments related to the terminology, I think this is the first time that OrigAddr is used -- this would be a good time to expand it.

  781  McMsg.OrigPrefixLen
  782      The prefix length associated with McMsg.OrigPrefix, originally
  783      from the Router Client Set entry on RREQ_Gen which includes
  784      OrigAddr.

[major] The Router Client Set described above doesn't contain an entry on RREQ_Gen.

  786  McMsg.TargPrefix
  787      The prefix associated with TargAddr, the destination address of
  788      the IP packet triggering the route request.  In an RREQ this MUST
  789      be set to TargAddr.

[minor] Given that the first sentence of this section says that it talks about RREQ, then the McMsg.TargPrefix is always set to TargAddr, right?

  791  McMsg.OrigSeqNum
  792      The sequence number associated with the route to OrigPrefix, if
  793      RteMsg is an RREQ.

[minor] Please see the question above about the difference between McMsg and RteMsg...to me it is confusing because both seem to be talking about the same thing.

  795  McMsg.TargSeqNum
  796      The sequence number associated with the route to TargPrefix.

  798  McMsg.MetricType
  799      The metric type of the route requested.

  801  McMsg.Metric
  802      The metric value received in the RteMsg.

[minor] Would the McMsg.Metric and the McMsg.MetricType both be contained in the RteMsg?

...
  814  McMsg.SeqNoRtr
  815      If nonzero, the IP address of the router that originated the
  816      Sequence Number for this route.

[minor] See my comment above about LocalRoute.SeqNoRtr.

  818  The Multicast Route Message Set is maintained so that no two entries
  819  have the same OrigPrefix, OrigPrefixLen, TargPrefix, and MetricType.
  820  See Section 6.8 for details about updating this set.

  822 4.7.  Route Error (RERR) Set

  824  Each RERR message sent because no route exists for packet forwarding
  825  SHOULD be recorded in a conceptual set called the Route Error (RERR)
  826  Set. Each entry contains the following information:

  828  RerrMsg.Timeout
  829      The time after which the entry SHOULD be deleted.

[major] Are there case where the entry wouldn't be deleted at RerrMsg.Timeout?  IOW, why is the SHOULD not a MUST?

  831  RerrMsg.UnreachableAddress
  832      The UnreachableAddress reported in the AddressList of the RERR.

[nit] A forward reference to §7.4 would be nice.

  834  RerrMsg.PktSource:
  835      The PktSource of the RERR.

[minor] §7.4 says that PktSource is optional.  What if it is not received?  What should this entry be set to?

  837  See Section 6.9 for instructions on how to update the set.

  839 5.  Metrics

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

  845  In Route Request messages, the metric describes the cost of the route
  846  from OrigPrefix to the router transmitting the Route Request.  For
  847  RREQ_Gen, this is the cost associated with the Router Client Set
  848  entry which includes OrigAddr.  For routers which forward the RREQ,
  849  this is the cost from OrigPrefix to the forwarding router, combining
  850  the metric value from the received RREQ message with knowledge of the
  851  link cost from the sender to the receiver, i.e., the incoming link
  852  cost.  This updated route cost is included when forwarding the Route
  853  Request message, and used to install a route to OrigPrefix.

[minor] Is this operation of "combining" (adding?) explained somewhere else, or is this it?  The text above is not clear enough.

  855  Similarly, in Route Reply messages, the metric reflects the cost of
  856  the route from TargPrefix to the router transmitting the Route Reply.
  857  For RREP_Gen, this is the cost associated with the Router Client Set
  858  entry which includes TargAddr.  For routers which forward the RREP,
  859  this is the cost from TargPrefix to the forwarding router, combining
  860  the metric value from the received RREP message with knowledge of the
  861  link cost from the sender to the receiver, i.e., the incoming link
  862  cost.  This updated route cost is included when forwarding the Route
  863  Reply message, and used to install a route to TargPrefix.

  865  When link metrics are symmetric, the cost of the routes installed in
  866  the Local Route Set at each router will be correct.  This assumption
  867  is often inexact, but calculating incoming/outgoing metric data is
  868  outside of scope of this document.  The route discovered is good for
  869  the requesting router, but the return path may not be the optimal
  870  route.

[nit] Describing the Local Route Set as "correct" gives the impression that asymmetric links result in some type of error condition.  Explaining the fact that the resulting paths are symmetric and that because of how the metrics are reported, the result may be suboptimal may be better.

  872  AODVv2 enables the use of multiple metric types.  Each route
  873  discovery attempt indicates the metric type which is requested for
  874  the route.  Multiple valid routes may exist in the Local Route Set
  875  for the same address and prefix length but for different metric
  876  types.  More than one route to a particular address and prefix length
  877  MUST NOT exist in the Routing Information Base unless each packet can
  878  be inspected to determine which route in the RIB has the proper
  879  metric type as required for that packet.  Otherwise, only one route
  880  at a time to a particular address and prefix length may exist in the
  881  RIB.  The algorithm used to inspect the packet and make the
  882  determination about which the routes should be installed in the
  883  Routing Information Base is outside the scope of AODVv2.

[?] How does the router decide which metric type to request?

[?] You lost me when talking about inspecting the packet to determine the metric type -- are you talking about a "normal" IP packet to be forwarded?

  885  For each MetricType, AODVv2 requires:

[major] What is a "MetricType"?  I'm not asking what is the MetricType, which seems obvious, but *a* MetricType as in "for each MetricType"?

  887  o  A MetricType number, to indicate the metric type of a route.
  888      Currently allocated MetricType numbers are listed in Section 13.4.

[major] In many (all?) of the notation where MetricType is used as the type itself, it corresponds to the MetricType number (described above), right?  If so, then there seems to be no difference between a MetricType and the MetricType number...this adds to the confusion of this section when listing what a MetricType requires.

  890  o  A maximum value, denoted MAX_METRIC[MetricType].  This MUST always
  891      be the maximum expressible metric value of type MetricType.  Field
  892      lengths associated with metric values are found in Section 13.4.
  893      If the cost of a route exceeds MAX_METRIC[MetricType], the route
  894      cannot be stored and is ignored.

[nit] The "cost of a route" is the same as the "route cost", right?  Please be consistent in the terminology used.

  896  o  A function for incoming link cost, denoted Cost(L).  Using
  897      incoming link costs means that the route obtained has a metric
  898      accurate for the direction back towards the originating router.

[nit] Cost(L) doesn't seem to be a function, just a value...

[comment] So the route towards the destination (the prefix being requested) is not accurate, right?  Not a big deal, just a little ironic that the requested route cant be determined accurately...

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

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

[major] Should the text above use rfc2119 language to define what to do in the last case?  The text sounds to me as if there could be situations where the advertised route could be used, even if it could form a loop.

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

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

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

  924  Implementers MAY consider metric types that are not strictly
  925  increasing, but the definitions of Cost and LoopFree functions for
  926  such types are undefined, and interoperability issues need to be
  927  considered.

[major] The "MAY" is out of place because there's no Normative action.  s/MAY/may.  Instead of using the Normative language there, you may want to use it to define what MUST be defined if a different type of metric is considered.
2018-10-12
02 Alvaro Retana
=== AD Review of draft-perkins-manet-aodvv2-02 (Part 1) ===

Dear authors:

I decided to start reviewing this document in parallel with Sri (as Shepherd).  Being that …
=== AD Review of draft-perkins-manet-aodvv2-02 (Part 1) ===

Dear authors:

I decided to start reviewing this document in parallel with Sri (as Shepherd).  Being that this is a long and in-depth draft, my plan is to post partial reviews (maybe about 10 pages at a time) — that is why this message contains “Part 1” in the subject.  I’ll look to post reviews in between working on other documents in my queue.

Please go ahead and address the comments, discuss, post updates at any time — no need to wait for the final part.

Disclaimer: I only skimmed some of the text not included in this review.  This means that some of my questions/comments may already be addressed somewhere else, but also that I reserve the right to revisit the earlier sections if something in the future triggers that.  Also, I haven’t done a thorough review of the WG mail archive.


This review (Part 1) covers the first 3 Sections.  Even though these Sections include introductory material, I have a significant number of comments.  In particular, some of the Major items that I call out below are:

(1) What is the relationship between this document and rfc3561?

(2) The Terminology section includes a lot of entries that I don’t think belong there: abbreviations, elements or variables also described elsewhere.

Please see details below.

Thanks!

Alvaro.


[The line numbers come from the idnits output.]


...
  168 1.  Overview

  170  The Ad hoc On-Demand Distance Vector Version 2 (AODVv2) protocol
  171  enables dynamic, multihop routing between participating mobile nodes
  172  wishing to establish and maintain an ad hoc network.  The basic
  173  operations of the AODVv2 protocol are route discovery and route
  174  maintenance.  AODVv2 does not require nodes to maintain routes to
  175  destinations that are not in active communication.  AODVv2 allows
  176  mobile nodes to respond to link breakages and changes in network
  177  topology in a timely manner.  The operation of AODVv2 is loop-free,
  178  and by avoiding the Bellman-Ford "counting to infinity" problem
  179  offers quick convergence when the ad hoc network topology changes
  180  (typically, when a node moves in the network).  When links break,
  181  AODVv2 causes the affected set of nodes to be notified so that they
  182  are able to invalidate the routes using the lost link.

[minor] An Informative reference to "the Bellman-Ford "counting to infinity" problem" would be nice.  I know what it is, but the casual reader (as in IESG reviewers) may not.

  184  One distinguishing feature of AODVv2 is its use of a destination
  185  sequence number for each route entry.  The destination sequence
  186  number is created by the destination to be included along with any
  187  route information it sends to requesting nodes.  Using destination
  188  sequence numbers ensures loop freedom and is simple to program.
  189  Given the choice between two routes to a destination, a requesting
  190  node is required to select the one with the greatest sequence number.

[minor] It looks like the "destination sequence number" is discussed in §4.4 -- please put a forward reference here.  However, that section just uses "sequence number" (not "destination sequence number") to describe the functionality for AODVv2.  Please be consistent in the use of names/terminology.

  192  Compared to AODV [RFC3561], AODVv2 has moved some features out of the
  193  scope of the document, notably intermediate route replies, expanding
  194  ring search, and route lifetimes.  However, the document has been
  195  designed to allow their specification in a separate document.  Hello
  196  messages and local repair have been removed.  AODVv2 provides a

[major] What is the formal relationship between this document and rfc3561?  The text above sounds as if AODVv2 is the evolution of AODV (which makes sense); should this document Obsolete rfc3561?

[minor] (Pending the response from the last question.) It would be very nice if there was a section that talks about the differences between AODV and AODVv2, specially about the major things that were removed/added/changed.  For example, intermediate route replies seem useful to me -- so understanding the reason to leave them out would be nice.  Maybe this could go in an Appendix.  Note that this item is just "nice to have", not a blocking comment.

[major] I'm confused by the statement of moving "some features out of the scope of the document...[while]...allow their specification in a separate document."  Do those other documents exist?  Are they planned?  Having an extensible protocol is great...but my confusion comes from the fact that the text sounds as if you're talking about an "extensible document".

[minor] It looks like the Hellos have been replaced with NHDP, is that true?  It might be nice to mention that somewhere.  I only found one reference to NHDP (in §6.2) -- I'm not sure if more is needed to understand the relationship between it and AODVv2.

  197  mechanism for the use of multiple metric types.  Message formats have
  198  been updated and made compliant with [RFC5444].  AODVv2 control
  199  messages are defined as sets of data, which are mapped to message
  200  elements using the Generalized MANET Packet/Message Format defined in
  201  [RFC5444] and sent using the parameters in [RFC5498].  Verification
  202  of link bidirectionality has been substantially improved, and
  203  additional refinements made for route timeouts and state management.
  204  Finally, multihoming is now supported.


...
  237 2.  Terminology

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

[nit] Please use the rfc8174 template.

[minor] Some of the terminology included is not really about terms, but about expanding (or explaining abbreviations)  I think those are better served when first used.

[major] In general, it seems to me like pretty much every term in this section doesn't belong here because it represents an abbreviation, it is an element or variable described later in the text...  I have comments below for many entries...


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

[major] There are several terms (including AddressList) defined here that represent fields in messages and that should be fully defined there (and not partially here).  IOW, please remove field names from this section.  If the names are used in the text before they are properly defined, please include a forward reference.

  248  AckReq
  249      Used in a Route Reply Acknowledgement message to indicate that a
  250      Route Reply Acknowledgement is expected in return.

[major] AckReq is an element (as defined in §7.3), not a term.

  252  AdvRte
  253      A route advertised in an incoming route message.

[minor] AdvRte is really an abbreviation...and better described in §6.7.  Note also that the definitions throughout the text are similar, but not exactly the same: "the route contained within [the received route message]" (§6.7), "incoming advertised route" (§6.7.1)

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

  259  CurrentTime
  260      The current time as maintained by the AODVv2 router.

[major] Some terms (including CurrentTime) represent variables used later in the explanation of the protocol.  I think these would be better explained in the specific sections.  IOW, the terminology section shouldn't be used to initialize variables.

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

  266  Interface Set
  267      The set of all network interfaces supporting AODVv2.

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

[minor] This definition is unnecessary.  The Invalid state is better explained later in §4.5 -- and the qualification of a route as invalid becomes obvious then.  Note also that Invalid is also the only state to be defined in this Section...

  273  LocalRoute
  274      An entry in the Local Route Set as defined in Section 4.5.

[nit] If the term is actually defined somewhere else, then we probably don't need to define it here.

In any case, §4.5 says that "Routes obtained from AODVv2 route messages are referred to in this document as LocalRoutes"...which is not exactly the same definition as above.  To be fair, earlier it also points out the "Local Route Set, containing information obtained from AODVv2 route messages"...there is some relation with the definitions, but the reader has to work to find it.  That is also a good reason to keep the definition in one place.

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

[major] I didn't find an explicit definition of MANET in rfc2501.  It then looks like the term above is just an expansion...which would be better positioned when MANET is used in the text for the first time -- the first sentence of §3 seems ideal.

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

[major] This one seems like an obvious abbreviation.  But it is also better discussed/described in §5.  Note that the text there seems to describe MetricType much more in depth that one-line ever could.

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

[major] This is a field in the RERR messge...better described there.

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

[minor] §4.3 does a far better job at completely defining neighbors.  The second part of the text tries to summarize the operation in one sentence...

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

[minor] This one, at best, sounds like a contraction.  In cases like this, what you may want to do is to define "Originator Address" (for example) and then say that OrigAddr is how it is referred to in the text.

  295  OrigMetric
  296      The metric value associated with the route to OrigPrefix.

  298  OrigPrefix
  299      The prefix configured in the Router Client Set entry which
  300      includes OrigAddr.

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

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

  310  PktSource
  311      The source address of the IP packet that triggered a Route Error
  312      message.

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

[major] As with AddressList, these 6 are fields better described elsewhere...

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

[nit] Defining "reactive" by using "reaction" is a circular definition.  Maybe use "in response to" (or something like that).

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

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

  330  RerrMsg (RERR Message)
  331      A Route Error (RERR) message.

[major] So...RerrMsg is a "REER Message"...but RERR is itself a type of "AODVv2 message".  Seems redundant...or maybe incomplete since (§4.7) a RERR set is also considered.  In any case, it is better to describe these where the messages are defined.  I also note that Table 1 does a pretty good job in explaining the meaning of ReffMsg anyway...

  333  Routable Unicast IP Address
  334      A unicast IP address that is scoped sufficiently to be forwarded
  335      by a router.  Globally-scoped unicast IP addresses and Unique
  336      Local Addresses (ULAs) [RFC4193] are examples of routable unicast
  337      IP addresses.

[minor] I find the definition (specifically the used of "scoped") to be unclear.  However, maybe it doesn't matter since this term is not used anywhere in the text.

  339  Router Client
  340      An address within an address range configured on an AODVv2 router,
  341      on behalf of which that router will initiate and respond to route
  342      discoveries.  These addresses may be used by the AODVv2 router
  343      itself or by devices that are reachable without traversing another
  344      AODVv2 router.

[major] The definition here says that a Router Client is an address.  But §4.2 says that a "router discovers routes...for its Router Clients that are reachable without traversing another AODVv2 router.  The addresses used by these devices...", which then implies that a Router Client is not an address, but a device.  And then the Router Client Set is described (to include an IP address, but also a cost and prefix length).  In short, the definition here is not clear/consistent with respect to the rest of the text...and it would be better to simple provide a clear definition in §4.2...or a short summary here.

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

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

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

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

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

[major] Same comments as for RERR/RerrMsg (above).

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

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

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

  376  TargMetric
  377      The metric value associated with the route to TargPrefix.

  379  TargPrefix
  380      The prefix configured in the Router Client Set entry which
  381      includes TargAddr.

  383  TargPrefixLen
  384      The prefix length, in bits, configured in the Router Client Set
  385      entry which includes TargAddr.

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

[major] Back to contractions/abbreviations, fields, elements...

  391  Unreachable Address
  392      An address reported in a Route Error message, as described in
  393      Section 7.4.1.

[minor] §7.4.1 talks about the generation of RERRs, but it doesn't explain what an unreachable address is.  IOW, there is no definition here.

[major] Note that the definition of RERR (above) talks about the router not having a "valid LocalRoute", not an address.  Also, §4.5 talks about a LocalRoute being a route...not an address.  At some point a route is expressed as an address...but the point here is that the definitions/terminology is not consistent.  Please be consistent!

[major] If something is already defined elsewhere, please just define it in one place.

[minor] I think that "unreachable address" is relatively clear as used in the text (without needed to define it).

[major] §4.5 (Local Route Set) talks about an "Invalid" route as one that "has expired or has broken".  Is that the same thing as Unreachable?

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

[minor] Even though the reader can figure out the direction reference (destination to souce of what?), please be specific here.

[minor] If upstream is defined, why is downstream not included?

  399  Valid route
  400      A route that can be used for forwarding.

[major] Again, I think that this definition is better served in §4.5, where the specific qualities are described.


...
  418 3.  Applicability Statement

...
  436  AODVv2 handles a wide variety of mobility and traffic patterns by
  437  determining routes on-demand.  In networks with a large number of
  438  routers, AODVv2 is best suited for relatively sparse traffic
  439  scenarios where each router forwards IP packets to a small percentage
  440  of destination addresses in the network.  In such cases fewer routes
  441  are needed, and far less control traffic is produced.  In large
  442  networks with dense traffic patterns, AODVv2 control messages may
  443  cause a broadcast storm, overwhelming the network with control
  444  messages.  The transmission priorities described in Section 6.5
  445  prioritize route maintenance traffic over route discovery traffic.

[major] "In large networks...AODVv2 control messages may cause a broadcast storm..."  That sounds pretty serious to me, but I see nothing discussed in the Security Considerations section (or anywhere else).  §14.1 is related, but it doesn't specifically address this point.

To be fair, the text above really means that AODVv2 shouldn't be used in "large networks with dense traffic patterns" (after all, it's part of the applicability statement).  However, qualifying "large" and "dense" is not easy, so I would like to see something in §14 (maybe §14.1) that at least mentions the problem and any potential mitigation.  I'm looking for something like this: "in large networks with dense traffic patterns...a broadcast storm may result...but it can be mitigated by using a, b, or c..."...or maybe it can't, but calling it out is important.

  447  Data packets may be buffered until a route to their destination is
  448  available, as described in Section 6.6.

[minor] When thinking that "buffering might be configured for IP packets awaiting a route...if sufficient memory is available" [§6.6], which sounds optional and or course not guaranteed...and the example below of "emergency and disaster relief, where the ability to communicate [is] important"...makes me think: if buffering is not configured (or misconfigured, even if "appropriate buffer methods are out of scope"), and a route is not available, how can communication be guaranteed?

I don't know that the possibility of a failed "emergency and disaster relief" communication is a security issue with the protocol, but at least something to be taken into consideration when implementing and operating a network.

It would be great if this document included an Operations Considerations section to include topics like that in a single place.  Take a look at rfc5706.

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

  458  AODVv2 provides for message integrity and security against replay
  459  attacks by using integrity check values, timestamps and sequence
  460  numbers, as described in Section 14.  When security associations have
  461  been established, encryption can be used for AODVv2 messages to
  462  ensure that only trusted routers participate in routing operations.

[nit] Forward references to §11 and §14 would be nice.

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

[minor] The requirement that "each interface...has at least one unicast IP address" sounds contradictory to the ability to share.  Clarifying, or pointing at §4.1 might help.



  484  The routing algorithm in AODVv2 has been operated at layers other
  485  than the network layer, using layer-appropriate addresses.

[minor] What does that paragraph means?  At best, it seems to not belong in this document.
2018-01-29
02 Alvaro Retana Waiting for Shepherd Review.
2018-01-29
02 Alvaro Retana IESG state changed to AD Evaluation::External Party from Publication Requested
2017-11-06
02 Alvaro Retana Notification list changed to Sri Gundavelli <sgundave@cisco.com>, aretana.ietf@gmail.com from Sri Gundavelli <sgundave@cisco.com>
2017-11-06
02 Alvaro Retana Notification list changed to Sri Gundavelli <sgundave@cisco.com>
2017-11-06
02 Alvaro Retana Document shepherd changed to Sri Gundavelli
2017-11-06
02 Alvaro Retana Assigned to Routing Area
2017-11-06
02 Alvaro Retana IESG process started in state Publication Requested
2017-11-06
02 (System) Earlier history may be found in the Comment Log for /doc/draft-ietf-manet-aodvv2/
2017-11-06
02 Alvaro Retana The authors have requested the AD Sponsored publication of this document.

I am in the process of finding/assigning a Shepherd.
2017-11-06
02 Alvaro Retana Tag Doc Shepherd Follow-up Underway set.
2017-11-06
02 Alvaro Retana IETF WG state changed to Submitted to IESG for Publication
2017-11-06
02 Alvaro Retana Shepherding AD changed to Alvaro Retana
2017-11-06
02 Alvaro Retana Changed consensus to Yes from Unknown
2017-11-06
02 Alvaro Retana Intended Status changed to Proposed Standard from None
2017-11-06
02 Alvaro Retana Stream changed to IETF from None
2017-11-06
02 Alvaro Retana This document now replaces draft-ietf-manet-aodvv2 instead of None
2017-11-03
02 Alvaro Retana Notification list changed to Aretana.ietf@gmail.com
2017-10-30
02 Charles Perkins New version available: draft-perkins-manet-aodvv2-02.txt
2017-10-30
02 (System) New version approved
2017-10-30
02 (System) Request for posting confirmation emailed to previous authors: Lotte Steenbrink , Victoria Mercieca , Stan Ratliff , Charles Perkins , John Dowdell
2017-10-30
02 Charles Perkins Uploaded new revision
2017-07-03
01 Charles Perkins New version available: draft-perkins-manet-aodvv2-01.txt
2017-07-03
01 (System) New version approved
2017-07-03
01 (System) Request for posting confirmation emailed to previous authors: Lotte Steenbrink , Victoria Mercieca , Stan Ratliff , Charles Perkins , John Dowdell
2017-07-03
01 Charles Perkins Uploaded new revision
2017-03-13
00 Charles Perkins New version available: draft-perkins-manet-aodvv2-00.txt
2017-03-13
00 (System) New version approved
2017-03-13
00 Charles Perkins Request for posting confirmation emailed  to submitter and authors: Lotte Steenbrink , Victoria Mercieca , "Charles E. Perkins" , Stan Ratliff , John Dowdell
2017-03-13
00 Charles Perkins Uploaded new revision