[aodvv2-discuss] Re: Justin's review

  • From: John Dowdell <john.dowdell486@xxxxxxxxx>
  • To: AODVv2 Discuss <aodvv2-discuss@xxxxxxxxxxxxx>
  • Date: Fri, 4 Mar 2016 10:52:33 +0000

Hi Charlie and all

On 3 Mar 2016, at 21:12, Charlie Perkins <charles.perkins@xxxxxxxxxxxxx> 
wrote:


  The Ad Hoc On-demand Distance Vector Version 2 (AODVv2) routing
  protocol (formerly named DYMO) enables on-demand, multihop unicast
  routing among AODVv2 routers in mobile ad hoc networks (MANETs)
  [RFC2501].
(We jumped right in here would prefer some intro to AODV and how AODVv2 is 
derived from that work. JWD)

For intro to AODV, we could wordsmith the introduction to RFC 3561.

Significant differences between AODV and AODVv2:
- RFC 5444
- Security mechanisms from RFC 718* and upcoming
- Intermediate node operation separated out
- Extended and improved definitions for sequence number timeout, route 
timeouts
- Improved verification for link bidirectionally

Agree with that



(Wireless properties of the network is not mentioned at all and this is 
quite important as I’m pretty sure AODVv2 for used in a wired network 
would be a bad idea JWD)

This is not true.  AODV could very well be used in a wired network. More 
examples later, but already IoT comes to mind.  A generic scenario would be 
one in which there is a cost to maintaining a link, and there are many more 
links available than communication channels needed at any one time.

Completely agree. We are media independent, and have not, so far as I know, 
expressed a preference. Yes it is more likely that wireless is used because of 
the ad-hoc nature, but temporary links such as the ethernet-over-mains from an 
electric car charging station is just as ad-hoc. 

  attached to external networks, as discussed in Section 9. (some mention of 
limitations of the provided approach is required.  No default gateways, 
drawbacks/overhead of using AODVv2 network to connect to the Internet using 
provided approach JWD)

I'm fine with no default gateways right now -- we can design this later and 
it's nontrivial.

For the drawbacks/overhead -- I'll have to ask because I don't know what is 
being suggested.

Suggest we dress neither in this draft. As you say its way non-trivial, so 
gateways to other routing domains and their attendant drawbacks belong together.


(There is an issue with trust being limited to single hops and no way to 
verify information more than one hop away JWD)

Maybe the E2E draft will help with this.

Yup.

(this should be disallowed as it can form non valid routes with 
uni-directional links JWD)

I'll post to the list about using the MAC addresses.

I didn’t respond directly but I did like that idea.



(AODVv2_INTERFACES isn’t defined before now it should be. Also what does 
this configuration consist of? Also is the list empty if there is  only one 
interface? JWD!)

Something went wrong here.  There is a dangling reference in section 11.3.  I 
think it's best to simply define AODVv2_INTERFACES.  It could be as simple as 
the list of interfaces over which AODVv2 control messages may be sent.  It 
has to be clear that we're not sending these control messages out into the 
Internet.  The wording in section 4.1 has to be adjusted to more clearly 
allow AODVv2_INTERFACES to contain a single interface.

  router at any one time. (do things break when a Router Client is served by 
more than one AODVv2 Router?  My guess is yes and therefore SHOULD be a 
MUST. JWD)

Basically, this exhibits a difference of opinion about the definition of 
SHOULD versus MUST.  SHOULD means "do it" unless you have a good reason not 
to do it.  In this case, a good reason would have to guarantee correct 
handling of the sequence number for the client.  I wish we could make more 
room for future designers but even so I'm not going to fuss about this.

How about we make this a MUST so it’s consistent with the rest of the I-D? If 
we can come up with a good way of dual-homing a client in an extension draft, 
the MUST then becomes SHOULD? Oh but by doing this have we burnt any bridges to 
any extension draft before we even begin?
 


(How does one know which outgoing interface is the neighbor associated with? 
 This seems like a very LARGE missing piece of required information JWD!)

I'm O.K. with putting in information about the outgoing interface. I don't 
know just where we would have to use it, though.

If you want to expand the Blacklist to allow multiple entries for the same 
neighbor, then you might be able to allow connectivity by some interfaces and 
not by others -- for instance only responding to RREQs over certain 
interfaces and not others.  This is related to the MIA discussion I sent out 
earlier today.

(I’m assuming this is here to hint at the possibility of a unified router 
with multiple routing protocols playing nicely together JWD)

I don't know what to make of this.  Should we eliminate the term Route Set?  
I don't see why the suggested hint would be inferred.

(I noticed that Unconfirmed is the only state that uses Route Request 
message instead of route message, is that intended?  Can unconfirmed route 
state only be reached through Route Request messages? JWD)

As far as I know the answer is yes.  Does that need to be said?

(There wasn’t any text above and it’s not clear how this is enforced.  I 
have an idle route and an unconfirmed route, the unconfirmed route is 
updated to confirmed, I now have two valid route entries and no way to 
demote/decide or otherwise purge one of them but I’m not allowed to do 
that. Setting the worse and previously idle route to unconfirmed seems wrong 
and broken. JWD!)

Don't we say that an idle route can be purged at any time?

I certainly thought so. Idles get purged after a timeout, unless I missed 
something.


(this seems like an entry that would always be full 1s on a route request if 
true that should be stated to make things more clear JWD)

The RREQ should only be requesting a route for a unicast address. Specifying 
subnet RREQ is not part of the current draft.
I don't think that TargPrefixLen should appear at all in RREQ.

Agree. How could you ever know in advance how big the subnet was at TargAddr 
anyway?


(would this ever be in a RREQ?  If no then I suggest using words similar to 
“if RteMsg is an RREP JWD)

If TargSeqNum appears in RREQ, then RREQ_Gen is asking for a route with 
SeqNum newer than TargSeqNum



(consider adding a maximum single hop value JWD)

I don't think this is a good idea.

(Just to be clear one MUST wait 5 mins before starting to request any route 
without a persistent store of the seq num, yes? JWD)

Only after reboot or loss, but we allow particular deployments to use smaller 
values.

(It isn’t clear what the previous sentence means as the link was already 
part of the route discovery procedure if I know about it yes? JWD)

I thought that such links were blacklisted...?

(previous bullet points are a bit wordy consider using upstream and 
downstream and just list, route request, route reply to confirm downstream 
and route reqeust, route reply , route reply ack for upstream JWD)

I'm fine with upstream and downstream.  Previously there were loud complaints 
about using those terms.

 If
  an external process signals that a link is not bidirectional, the the
  value of Neighbor.State MAY be changed to Blacklisted, e.g. notification 
of a TCP timeout.  (I can’t see how the above would be helpful at all JWD)

??!!  I don't understand.  If a node has a way to determine that a link isn't 
working, that is useful information.

  If the message is an RREP which answers a recently sent RREQ, or an
  RREP_Ack which answers a recently sent RREP, the link to the neighbor
  is bidirectional.
(The valid entry in the Multicast Route Message Table must be identified 
this is too wishy washy for me to understand what is meant by recently sent 
JWD!)

Should we clarify that the RREP verifies the downstream neighbor and the 
RREP_Ack verifies the upstream neighbour?

Personally I don’t see the need for clarification, but if the whole 
downstream/upstream makes it clearer then go ahead.


  If an RREP_Ack is not received within the expected time (what is the 
expected time? list the entry we are checking assuming in the Multicast 
Route Message Tablet? outline it. JWD)

RREP_Ack_SENT_TIMEOUT



(What does this mean?  How would one determine a link to a neighbor to be 
broken….suggest removing it JWD)

Does this mean to simply remove the neighbor from the blacklist?  I think 
that would be O.K. unless we have a reason to keep the information.  But I 
don't remember any reason for that.

What is he asking to be removed? RREP_Acks? We have spent so much time on those 
and so definitely need them to assure bidirectionality.

  o  RREQ messages SHOULD be given priority over RERR messages for
     newly invalidated routes, since the invalidated routes may not
     still be in use, and if there is an attempt to use the route, a
     new RERR message will be generated.
(So is this 4th or second? It’s not clear and it should be. JWD)

Well, it appears next after "Second" and "Third", but one could say "Fourth" 
although it doesn't sound natural to me.

(It’s not clear to me how this priority works.  Do the messages just get 
dropped when tsome threshold for max number of messages is reached?  Is 
there some queuing method because if their isn’t I don’t see how 
priority would work at all, as the choices are drop or send.  This whole 
section seems out of place as we have’t talked about generating messages. 
I’d suggest moving or removing JWD)

This is a good point.  In order to be clear, we need to say that there is a 
queue of messages and then use the priority mechanism to discard low-priority 
queued messages.  Or, perhaps better, we can say that messages are not sent 
more frequently than one message per (1 / CONTROL_TRAFFIC_LIMIT)th of a 
second, and then the queue is reordered based on priority.

I’m happy with that.


  Messages may travel a maximum of MAX_HOPCOUNT hops.
(Messages don’t really travel though do they as they are regenerated at 
each hop. JWD)

Could say "Messages may be regenerated a maximum of MAX_HOPCOUNT times.”

OK


If packets are not queued, no notification should be
  sent to the source. (What notification is sent to the source when packets 
are queued? JWD)

ICMP Destination Unreachable ICMP message is mentioned later.

(This doesn’t specify with any detail what buffer methods should be used 
or even some that might be appropriate. Mentioning that different buffer 
methods doesn’t affect interoperability should be done JWD)

Yes, we should mention that it does not affect interoperability.

  RREQ_Gen awaits reception of a Route Reply message (RREP) containing
  a route toward TargAddr. (is there some table that lists routes that are 
being waited on? JWD)

Only the Multicast table.  For RREP_Ack, the information could be kept in the 
route table for the unconfirmed route.

  Section 6.7.1.  The Local Route Set MAY then be updated according to
  Section 6.7.2.  (MAY not MUST? Why wouldn’t one update it according to 
section 6.7.2? JWD)

MUST is O.K. here, I think.

(this is ambugious as there may be more than one unconfirmed LocalRoute 
unless I’m missing something.  JWD)

I'm not sure what's wrong here.  Should we repeat "LocalRoute.Address"?

      associated route request retry timers can be cancelled.
(can? not SHOULD or MUST? JWD)

I'm O.K. with this either way.

Me too. I agree with Justin’s point.


(we seem to be missing when the Route Information Base should be updated 
based on the new Local Route Set.  JWD)

Immediately?

(it’s not clear to me what the use case of removing the sequence number 
while the route is still active will achieve. suggest removal or some small 
explination JWD)

We have correctly specified the operation.  Keeping sequence numbers past 
their expiration time seems dangerous to me, but we could explore that as 
well.  Or we could initiate a unicast RREQ to get the new sequence number, 
but that's just more overhead.

(how would one know if a link breaks? Assuming some external process or 
notification.
JWD)

Well, layer 2 is sometimes good for that sort of information.

DLEP’s pretty good for that …


(it’s not clear to me how the RERR’s are identified consider rewording 
to make it more clear. JWD)

I'll have to ask how it can be made more clear.

     LocalRoute.State set to Unconfirmed.
(Shouldn’t they also be removed from the Route Information Base? JWD)

Unconfirmed routes cannot be used for forwarding data.

(This will only occur when a target starts sending packets to an originator 
address when only part of the reverse path has been confirmed, in the middle 
of a route request from originator to source? Am I correct?  If so then the 
route request would have been sent normally and I see no issue. JWD)

I pretty much agree, but I need to think about it some more.

(perhaps I’m missing a table or something but I don’t remember any RREQ 
table or list being described which i can check if a RREQ has been recently 
sent with associated timers. If there is such a table then it should be 
mentioned here. If there isn’t aon there should be. JWD!)

I think our Multicast Table should serve the purpose here, but we can also 
have another conceptual table if that's appropriate.

I’m happy with the Multicast Route table.


There might be a problem with very short validity times on very low metric 
routes in that they will be selected regardless of the time. Not a problem 
but something that could cause issues. Perhaps some minimum time should be 
mandated. JWD)

I am fine with a minimum time, but it would have to be in the milliseconds.

(please specify what in the message matches the configured Router Client. 
JWD)

?? The Target Address matches an address of one of the router's clients or 
prefixes ??

       received RREP
(please specify how one determines how to check the intended recipient.  
What data element in the AckReq matches what ?  JWD)

I think this has to do with multicast RREP, sigh.

  network or result in non-optimal paths.
(This seems like a bad idea to do on the reverse path.  It would be a good 
way to attack a network Forward RREQ and drop all RREP. JWD)

Nevertheless we have to allow it because a node can change its processing 
context between the time the RREQ is received and the RREP is received.  Of 
course malicious nodes will do this even if you tell them not to do it.

(THere needs to be some sort of table which is updated  with timer 
associated with this AckReq JWD)

This is related to previous comments.  We can have a list, or simply delete 
the unconfirmed route.  In the latter case, the RREP_Ack would not match 
anything...

(Shouldn’t this check come before updating?  The only way the 
Neighbor.State is set to Blacklisted is that its already Blacklisted and 
there is no need to update the Neighbor Table. JWD)

There's something wrong here, probably a cut-and-paste error.


      *  If it was not expected, no actions are required.
(What are we checking! What table or timer is there to check? JWD!)

Could say, "if there is no Unconfirmed Route to be confirmed" ...

(How is this done?  There is no table with recently sent RERR messages to 
check. There needs to be though. JWD!)

There could be such a table.

(it’s not clear to me what the point of this invalid route is. It 
doesn’t get used and doesn’t remove any existing routes. JWD)

The point of an invalid route is to keep the Sequence Number.  One point of 
keeping Sequence Numbers is to avoid processing stale messages that might be 
received after long queuing delays.

  3.  Check if there are unreachable addresses which MUST be reported
      in a regenerated RERR
(How do we check? It’s not at all clear how this is done. JWD!)

It is described that only addresses that are actually in use need to be sent 
in the regenerated RERR.  I dunno, make it clearer, repeat the condition?

  4.  For each LocalRoute that needs to be reported:
(it’s not clear how we know which localroutes need to be reported JWD!)

Isn't this the same question?

  An RREQ contains no Message TLVs.
(this ins’t mandatory, right? Just AODVv2 doesn’t define any message 
TLVs for use with RREQ JWD)

This would change with the E2E authentication text.

  An RREP contains no Message TLVs.
(This isn’t mandatory is it? just none are defined by AODVv2. JWD)


  An RREP_Ack contains no Message TLVs.
(Mandatory or just not defined? JWD)

One could imagine a multi-purpose RREP_Ack in the future.  I don't know why 
this is different than the preceding.

It’s a statement of fact. There are no Message TLVs in such messages.


  When a LocalRoute is expunged, any precursor list associated with it
  MUST also be expunged.


(I feel like this is underspecified and would be better served in a separate 
document like Intermediate RREP.  Is there anything wrong with leaving the 
behavior required a MAY and describing that behavior in another draft? JWD)

It would be nice to understand why it is underspecified.  I don't think it 
belongs in a separate document.

I agree, Charlie. We don’t have to specify every last nut and bolt, surely?

Regards
John


(is MAX_SEQNUM_LIFETIME the only parameter which MUST be configured the same 
across the network?  JWD)

Not sure about this...


Well, that's it.  I'll appreciate any comments.  It's probably too long for a 
single mail message, so I might break it up into parts somehow.

Regards,
Charlie P.




























































































































Other related posts: