keep track of the last time a backoff was updated.
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 15 Nov 2007 14:21:48 +0100
changeset 2122 ee136bc4f214
parent 2121 60c0176e2389
child 2123 af94e972806a
keep track of the last time a backoff was updated.
src/devices/wifi/dcf-manager.cc
src/devices/wifi/dcf-manager.h
--- a/src/devices/wifi/dcf-manager.cc	Thu Nov 15 13:44:58 2007 +0100
+++ b/src/devices/wifi/dcf-manager.cc	Thu Nov 15 14:21:48 2007 +0100
@@ -55,10 +55,11 @@
   m_cw = cw;
 }
 void 
-DcfState::UpdateBackoffSlotsNow (uint32_t nSlots)
+DcfState::UpdateBackoffSlotsNow (uint32_t nSlots, Time backoffUpdateBound)
 {
   uint32_t n = std::min (nSlots, m_backoffSlots);
   m_backoffSlots -= n;
+  m_backoffStart = backoffUpdateBound;
 }
 
 void 
@@ -319,7 +320,7 @@
       if (backoffStart <= Simulator::Now ())
         {
           Scalar nSlots = (Simulator::Now () - backoffStart) / m_slotTime;
-          uint32_t nIntSlots = lrint (nSlots.GetDouble ());
+          uint32_t nIntSlots = lrint (nSlots.GetDouble ());          
           /**
            * For each DcfState, calculate how many backoff slots elapsed since
            * the last time its backoff counter was updated. If the number of 
@@ -329,7 +330,8 @@
           if (nIntSlots > state->GetAifsn ())
             {
               MY_DEBUG ("dcf " << k << " dec backoff slots=" << nIntSlots);
-              state->UpdateBackoffSlotsNow (nIntSlots);
+              Time backoffUpdateBound = backoffStart + Scalar (nIntSlots) * m_slotTime;
+              state->UpdateBackoffSlotsNow (nIntSlots, backoffUpdateBound);
             }
         }
     }
--- a/src/devices/wifi/dcf-manager.h	Thu Nov 15 13:44:58 2007 +0100
+++ b/src/devices/wifi/dcf-manager.h	Thu Nov 15 14:21:48 2007 +0100
@@ -29,7 +29,7 @@
   uint32_t GetBackoffSlots (void) const;
   Time GetBackoffStart (void) const;
 
-  void UpdateBackoffSlotsNow (uint32_t nSlots);
+  void UpdateBackoffSlotsNow (uint32_t nSlots, Time backoffUpdateBound);
 
   virtual bool NeedsAccess (void) const = 0;
   virtual void NotifyAccessGranted (void) = 0;