[aodvv2-discuss] Re: Review of draft 13a (October 25 edition)

  • From: Charlie Perkins <charles.perkins@xxxxxxxxxxxxx>
  • To: aodvv2-discuss@xxxxxxxxxxxxx
  • Date: Thu, 5 Nov 2015 18:53:00 -0800

Hello folks,

More follow-up on John's comments...


On 11/3/2015 6:39 PM, John Dowdell wrote:


Section 4.5 Multicast Route Message Table (MRMT). This and section 4.6 could really use some introductory words on the uses of the MRMT, Local Route Set and the RIB (or other forwarding table belonging to the operating system), just to set the context for what is to be discussed. This table also needs to be mentioned in the introductory paragraph of section 6.

RREP: It would be worth explaining when RREPs would be multicast, as it is not obvious (or wasn’t to me anyway).




All through this section: would be worth tightening up on the name of the parameter when mentioned (e.g. RteMsg.OrigPrefixLen: The prefix length associated with /*RteMsg*/.OrigAddr)

The tradeoff between simplicity versus precision has to be considered. In this case simplicity seems unlikely to cause confusion.


RteMsg.OrigSeqNum: “The sequence number … if present …”. Why would the sequence number not be present?

It's present in RREQ messages, not RREP messages.


RteMsg.RemoveTime: The time .. MUST be removed …”. Removed from where? Also there are two event times mentioned in this definition, which takes priority, or is it whichever is earlier or later?

I guess it means, removed from the MRMT. The relevant event time depends on whether the message is RREQ or RREP; the current wording does say that; could you suggest a more clear formulation?


Section 4.6 Local Route Set

Para starting “Note that multiple entries …” (bottom of page 15), second sentence “… but may offer improvement …”. So why is that route still Unconfirmed? Is it really up to the implementor to decide which routes to confirm and which to not? This sounds like a potential interoperability issue to me.

Actually, I think it is O.K. to have multiple entries in the route table. We don't have to prohibit that. Some operating systems may not support it, but that is not AODVv2's problem.


Section 5 Metrics

Bullet 2 “ …AODVv2 cannot store routes that cost more than MAX_METRIC(MetricType)”. Anything is possible. Surely “AODVv2 /*MUST NOT*/ store routes …”?

MAX_METRIC was originally defined as a property of the metric itself, not a configuration parameter for AODV. So, the existing language is probably O.K. But that should perhaps be clarified in the text.




Section 6.3 Neighbour Table Update

Neighbour.IPAddress … where do we find this information, since it isn’t (according to the table in section 7.1) explicitly in the RREQ message? I guess it’s the source address of the RFC5444 packet. In any case, how can we assure that the neighbour IP address that RFC5444 parser uses is the same as the one that AODVv2 has allocated to the interface the message was to be sent over?

Why would the addresses be different?




Section 6.4 Interaction with the Forwarding Plane

Second bullet in the second batch of bullets reads “A route discovery was not attempted”. Why would the router not attempt the discovery?

Good question...!

The sentence continues “any buffered packets requiring that the route be discarded” which should perhaps read “/*If any packets are buffered, they MUST be discarded and the source of the packet should be notified that the destination is unreachable (using an ICMP Destination Unreachable message”.*/

I do not see this as an interoperability problem. If someone wants to build an operating system that returns undelivered packets to an application, or even to a runtime signal handler, that should not be prohibited by AODVv2.

/*
*/
Section 6.6 Route Discovery …

....

Fourth paragraph reads "Determining which packets to discard first when the buffer is full is a matter of policy at each AODVv2 router. Routers without sufficient memory available for buffering SHOULD have buffering disabled. This will affect the latency for launching TCP applications to new destinations.” So what is the behaviour here when buffer space is constrained? Should the router discard the packets while seeking to discover the route, without sending ICMP Destination Unreachable? Whatever the behaviour is, please advise some text to put here because it’s not clear.

It definitely should NOT send ICMP Destination Unreachable. I can't think of a useful mandate to insert here. Basically, TCP will timeout and retransmit, but if you send ICMP the application would just quit, period, and no timeout retransmission would be available.


Section 6.7 Processing Received Route Information

“All AODVv2 route messages contain a route”. Surely the RREQ message generated by RREQ_Gen does not include any route information yet?

Yes, the RREQ message does include route information -- it offers a route back to RREQ_Gen.



Section 6.8 Suppressing Redundant …

First para “… and generates unnecessary signalling traffic and interference”. Interference? How can we be sure, this will depend on the exact radio configuration used? Suggest to delete the words “and interference”.

I definitely would like to keep the word "interference". You could say "and may generate unnecessary interference" if more precision is required at the cost of extra verbosity.

...

Section 6.9.2 Reporting Invalid Routes

There are three conditions when an RERR SHOULD be sent. Are there no conditions when an RERR MUST be sent?

Not really. SHOULD is strong enough. Some (perhaps very few) implementations may decide that the only applications which are to be supported do not need to recover from such error conditions, even at the cost of extra wasted traffic.


Section 7.1.2 RREQ Reception

Point 1, bullets 1 and 2; where is Remove Time defined? I couldn’t find a definition.

I think this is the Reset Time.


Point 7, suggest the words “is redundant” are replaced by “was previously received”. The word ‘redundant’ is so abused in the UK (mostly by HR departments in relation to people they can no longer afford to employ) that the meaning is now unclear.

I'm not sure about "was previously received". For one thing, RFC 5444 gets in the way. For another thing, hop count might be different to OrigAddr. I can live with redundant.



Section 7.2.2 RREP Reception

Step 1; should the blacklisting also be revoked?

Yes.

Step 7 7; what should be the action if the route to TargAddr does not match an outstanding route request? Should the RREP be discarded?

I think that the first clause should simply be deleted.



7.4.1 RERR Generation

I was just wondering if we should make an exception for ICMP messages particularly those signalling errors, and not send an RERR in those cases. We could potentially have a compound situation where the routers are trying to deliver ICMP failure messages when the user data IP packet has already triggered an RERR. Or am I chasing my tail here? This occurred to me because a router is required to discard the IP packet that triggered the RERR, and got to wondering whether we should send an ICMP message. I’m open to discussion here.

I am not getting a clear picture about how this would happen. Suppose node A gets an ICMP to destination D, but has no route for D. Do you mean that A should NOT send RERR for this problem? A lot of things run over ICMP that are not errors. Should node A inspect the ICMP type code before deciding?

I think that making such distinctions as this enters dangerous territory for AODVv2. Maybe some future enhancement would be needed when a particular vulnerability is discovered.


Third bullet starting “When a link breaks …”. There is a point about MTU being exceeded … we’re sending AODVv2 messages, not RFC5444 packets. How will AODVv2 know the MTU is being exceeded? In fact how do we know the MTU at all, since AODVv2 has not asked to be notified about it by the forwarding plane in section 6.4. Anyhow is that not the RFC5444 parsers problem (or maybe even the SMF parser if that is being used as well)? Perhaps we should convert that text into an advisory to the implementor.

I guess that AODVv2 needs to find out about MTU for this to be implementable. By the way, there is "must". Maybe reword to avoid mandate-like language, because a mandate is not needed here.



Sending an RERR in response to an undeliverable IP packet … SHOULD be sent unicast to the next hop or /alternatively/ MUST be multicast … which is it please? I can sort of see what is being said but the logic is not clear.

I don't remember why we need the multicast alternative. Can it be deleted?


Section 7.4.2 RERR Reception

Typo … Step 1 bullet 1 .. ignore this RREP … should read ignore this /*RERR*/.

I believe we need to use stronger language in the sentence “If any of the above are false …”, I propose "If any of the above are false, the LocalRoute does not need to be made Invalid and the unreachable address does not need to be advertised in a regenerated RERR.” be changed to "If any of the above are false, the LocalRoute /*MUST NOT*/ be made Invalid and the unreachable address /*MUST NOT*/ be advertised in a regenerated RERR.”

I think it's more that "there is no matching LocalRoute" and then your second clause.


There are conflicting directives all over the second half of this section. If we have routes matching those in the RERR, SHOULD or MUST an RERR be regenerated? There is no defining logic here. The bullets in step 2 sometimes say we SHOULD, the directive at step 4 is to do it anyway. There is no clear decision tree. I propose that we MUST regenerate an RERR in all cases if the RERR passes the validity test in the first half of this section.

I am O.K. with this, but I am also O.K. with SHOULD.




8. RFC5444 Representation.

Hold up. Control plane message SHOULD use RFC5444? I thought that was the whole point of AODVv2. Surely MUST?

Oh, the pain is so intense. The whole point of AODVv2 is to be a reactive protocol. It was retrofitted with RFC 5444, but that was not the whole point. Ouch.


Section 11.2 Protocol Constants / Section 11.6 MetricType Allocation

MAX_METRIC[MetricType] … just a note for the future that DLEP had a discussion on the field length of a metric. Might as well recommend that AODVv2 metric fields are compatible with DLEP.

I don't know about this, but DLEP is much more localized than AODVv2 and so any extra bytes only hurt locally, in contrast to flooding the entire network with extra pain.


Section 13 Security Considerations

There is a theme of reliance on ICV to show the message has integrity. That’s ok by itself, but it should also be pointed out that the messages must be robustly processed according to the steps in section 7 (which must itself be robustly specified). If there are holes in our specifications, or if there are implementation holes, or chances for common attack vectors (e.g. sending a huge RERR causing a buffer overflow), then that’s a problem, particularly for the constrained memory devices we have discussed in the past.

Do you mean to say that if a device fails to implement the AODVv2 specification, it might not work robustly?

I would hope we don't have to say that.


Regards,
Charlie P.

Other related posts: