Exponential retry timer for PREQ
authorKirill Andreev <andreev@iitp.ru>
Thu, 06 Aug 2009 13:09:02 +0400
changeset 5149 1c070bb8a48a
parent 5148 359f9e62b9b6
child 5150 70e68391cf42
Exponential retry timer for PREQ
src/devices/mesh/dot11s/hwmp-protocol.cc
--- a/src/devices/mesh/dot11s/hwmp-protocol.cc	Tue Aug 04 17:35:24 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-protocol.cc	Thu Aug 06 13:09:02 2009 +0400
@@ -943,8 +943,8 @@
   if (i == m_preqTimeouts.end ())
     {
       m_preqTimeouts[dst] = Simulator::Schedule (
-          MilliSeconds (2*(m_dot11MeshHWMPnetDiameterTraversalTime.GetMilliSeconds())),
-          &HwmpProtocol::RetryPathDiscovery, this, dst, 0);
+          m_dot11MeshHWMPnetDiameterTraversalTime * Scalar (2),
+          &HwmpProtocol::RetryPathDiscovery, this, dst, 1);
       return true;
     }
   return false;
@@ -965,7 +965,7 @@
       return;
     }
   numOfRetry++;
-  if (numOfRetry > m_dot11MeshHWMPmaxPREQretries)
+  if (numOfRetry >= m_dot11MeshHWMPmaxPREQretries)
     {
       QueuedPacket packet = DequeueFirstPacketByDst (dst);
       //purge queue and delete entry from retryDatabase
@@ -987,7 +987,7 @@
       i->second->RequestDestination (dst, originator_seqno, dst_seqno);
     }
   m_preqTimeouts[dst] = Simulator::Schedule (
-      MilliSeconds (2*(m_dot11MeshHWMPnetDiameterTraversalTime.GetMilliSeconds())),
+      Scalar (2 * (numOfRetry + 1)) *  m_dot11MeshHWMPnetDiameterTraversalTime,
       &HwmpProtocol::RetryPathDiscovery, this, dst, numOfRetry);
 }
 //Proactive PREQ routines: