keep track of the last time a backoff was updated.

This commit is contained in:
Mathieu Lacage
2007-11-15 14:21:48 +01:00
parent 0394180213
commit 18e5bf9c07
2 changed files with 6 additions and 4 deletions

View File

@@ -55,10 +55,11 @@ DcfState::UpdateFailedCw (void)
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 @@ DcfManager::UpdateBackoff (void)
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 @@ DcfManager::UpdateBackoff (void)
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);
}
}
}

View File

@@ -29,7 +29,7 @@ private:
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;