Fixed seqno overflow
authorKirill Andreev <andreev@iitp.ru>
Tue, 04 Aug 2009 14:57:35 +0400
changeset 5147 546c5d9a7e64
parent 5146 9e0edb76a8c7
child 5148 359f9e62b9b6
Fixed seqno overflow
src/devices/mesh/dot11s/hwmp-protocol.cc
src/devices/mesh/flame/flame-protocol.cc
--- a/src/devices/mesh/dot11s/hwmp-protocol.cc	Mon Aug 03 19:22:42 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-protocol.cc	Tue Aug 04 14:57:35 2009 +0400
@@ -389,7 +389,7 @@
     }
   else
     {
-      if (i->second > preq.GetOriginatorSeqNumber ())
+      if ((int32_t)(i->second - preq.GetOriginatorSeqNumber ())  > 0)
         {
           return;
         }
@@ -507,7 +507,7 @@
           //we have got from PREQ, and set the rest lifetime of the
           //route if the information is correct
           uint32_t lifetime = result.lifetime.GetMicroSeconds () / 1024;
-          if ((lifetime > 0) && (result.seqnum >= (*i)->GetDestSeqNumber ()))
+          if ((lifetime > 0) && ((int32_t)(result.seqnum - (*i)->GetDestSeqNumber ()) >= 0))
             {
               SendPrep (
                   (*i)->GetDestinationAddress (),
@@ -555,7 +555,7 @@
     }
   else
   {
-    if (i->second > prep.GetOriginatorSeqNumber ())
+    if ((int32_t)(i->second - prep.GetOriginatorSeqNumber ()) > 0)
       {
         return;
       }
@@ -634,7 +634,7 @@
     if (!(
         (result.retransmitter != from) ||
         (result.ifIndex != interface) ||
-        (result.seqnum > destinations[i].seqnum)
+        ((int32_t)(result.seqnum - destinations[i].seqnum) > 0)
         ))
       {
         retval.push_back (destinations[i]);
@@ -732,7 +732,7 @@
     }
   else
   {
-    if (i->second >= seqno)
+    if ((int32_t)(i->second - seqno)  >= 0)
       {
         return true;
       }
--- a/src/devices/mesh/flame/flame-protocol.cc	Mon Aug 03 19:22:42 2009 +0400
+++ b/src/devices/mesh/flame/flame-protocol.cc	Tue Aug 04 14:57:35 2009 +0400
@@ -328,7 +328,7 @@
       return true;
     }
   FlameRtable::LookupResult result = m_rtable->Lookup (source);
-  if ((result.retransmitter != Mac48Address::GetBroadcast ()) && (result.seqnum >= seqno))
+  if ((result.retransmitter != Mac48Address::GetBroadcast ()) && ((int16_t)(result.seqnum - seqno) >= 0))
     {
       return true;
     }