Bug 1188

Summary: Begin hello transmission only if part of active route
Product: ns-3 Reporter: John Abraham <john.abraham.in>
Component: aodvAssignee: ns-bugs <ns-bugs>
Status: PATCH PENDING ---    
Severity: normal CC: acstanton515, alupia, ammo6818, tomh
Priority: P5    
Version: ns-3-dev   
Hardware: All   
OS: All   
Attachments: Patch

Description John Abraham 2011-06-16 00:27:27 EDT
RFC 3561 recommends the below

6.9. Hello Messages

   A node MAY offer connectivity information by broadcasting local Hello
   messages.  A node SHOULD only use hello messages if it is part of an
   active route.

but currently we begin Hello transmission right after installation of the IP stack which not in-line with the reactive nature of AODV.
Comment 1 Tom Henderson 2011-06-28 16:16:34 EDT
I agree with the suggested fix.
Comment 2 Andrew Stanton 2013-04-15 12:47:08 EDT
I'm trying to figure out what was the suggested fix mentioned by Tom.  There were several bugs opened at this time, and I thought perhaps it was suggested in a different bug, but I did not see this addressed in any of those.

I might be interested in fixing this problem, but I want to open more discussion for what is the purpose of the hello in AODV.

According to the RFC it seems to me to be only to help with ensuring there is no link loss in the active routing path.

This would really decrease the control packets propagated by AODV simulations if we fixed this bug.

I have seen one very small advantage of the current behavior though in my AODV simulations.  As the environment is just getting started (no routes), several local nodes to lets say A are aware of a route to a A since A sent the hello.  Thus, when a RREQ is generated outside of A's locality for A, all A local nodes have opportunity to respond instead of that RREQ having to hit the node A.  That makes small difference though.

It appears to me our hello implementation is off-base.
Comment 3 Andrea Lupia 2016-09-19 09:39:40 EDT
Created attachment 2584 [details]

I implemented a way to track active routes in RoutingTable class that should fix this bug.
As active route I understood a route with precursors, otherwise the first node broadcasting hello packets will trigger them for all other nodes.
I inserted all active destinations in the m_activeRoutes set, managing it through the method UpdateActiveRoutes (RoutingTableEntry & rt). If an active route is removed from the set and the set becomes empty, the hello transmission is stopped; if a new active route is inserted in the set and the set size is 1, the hello transmission is scheduled.
Hello transmission cancelling and scheduling is obtained through callbacks set in AodvRoutingProtocol only if m_enableHello is true.
I had to remove the method const Purge () from the RoutingTable because now active routes need to be updated after each Invalidate call on RoutingTableEntry.