From a02d1df1ece6255d4afcc3159928ff2db46c70b8 Mon Sep 17 00:00:00 2001 From: Rediet Date: Mon, 23 Mar 2020 14:35:49 +0100 Subject: [PATCH] wifi: Use txop instead of state in ChannelAccessManager --- src/wifi/model/channel-access-manager.cc | 188 +++++++++--------- src/wifi/model/channel-access-manager.h | 48 ++--- src/wifi/test/channel-access-manager-test.cc | 198 +++++++++---------- 3 files changed, 213 insertions(+), 221 deletions(-) diff --git a/src/wifi/model/channel-access-manager.cc b/src/wifi/model/channel-access-manager.cc index 3cb40153f..381713a9d 100644 --- a/src/wifi/model/channel-access-manager.cc +++ b/src/wifi/model/channel-access-manager.cc @@ -39,10 +39,10 @@ public: /** * Create a PhyListener for the given ChannelAccessManager. * - * \param dcf the ChannelAccessManager + * \param cam the ChannelAccessManager */ - PhyListener (ns3::ChannelAccessManager *dcf) - : m_dcf (dcf) + PhyListener (ns3::ChannelAccessManager *cam) + : m_cam (cam) { } virtual ~PhyListener () @@ -50,52 +50,52 @@ public: } void NotifyRxStart (Time duration) { - m_dcf->NotifyRxStartNow (duration); + m_cam->NotifyRxStartNow (duration); } void NotifyRxEndOk (void) { - m_dcf->NotifyRxEndOkNow (); + m_cam->NotifyRxEndOkNow (); } void NotifyRxEndError (void) { - m_dcf->NotifyRxEndErrorNow (); + m_cam->NotifyRxEndErrorNow (); } void NotifyTxStart (Time duration, double txPowerDbm) { - m_dcf->NotifyTxStartNow (duration); + m_cam->NotifyTxStartNow (duration); } void NotifyMaybeCcaBusyStart (Time duration) { - m_dcf->NotifyMaybeCcaBusyStartNow (duration); + m_cam->NotifyMaybeCcaBusyStartNow (duration); } void NotifySwitchingStart (Time duration) { - m_dcf->NotifySwitchingStartNow (duration); + m_cam->NotifySwitchingStartNow (duration); } void NotifySleep (void) { - m_dcf->NotifySleepNow (); + m_cam->NotifySleepNow (); } void NotifyOff (void) { - m_dcf->NotifyOffNow (); + m_cam->NotifyOffNow (); } void NotifyWakeup (void) { - m_dcf->NotifyWakeupNow (); + m_cam->NotifyWakeupNow (); } void NotifyOn (void) { - m_dcf->NotifyOnNow (); + m_cam->NotifyOnNow (); } private: - ns3::ChannelAccessManager *m_dcf; //!< ChannelAccessManager to forward events to + ns3::ChannelAccessManager *m_cam; //!< ChannelAccessManager to forward events to }; /**************************************************************** - * Implement the DCF manager of all DCF state holders + * Implement the channel access manager of all Txop holders ****************************************************************/ ChannelAccessManager::ChannelAccessManager () @@ -133,7 +133,7 @@ void ChannelAccessManager::DoDispose (void) { NS_LOG_FUNCTION (this); - for (Ptr i : m_states) + for (Ptr i : m_txops) { i->Dispose (); i = 0; @@ -200,10 +200,10 @@ ChannelAccessManager::GetEifsNoDifs () const } void -ChannelAccessManager::Add (Ptr dcf) +ChannelAccessManager::Add (Ptr txop) { - NS_LOG_FUNCTION (this << dcf); - m_states.push_back (dcf); + NS_LOG_FUNCTION (this << txop); + m_txops.push_back (txop); } Time @@ -293,9 +293,9 @@ ChannelAccessManager::NeedBackoffUponAccess (Ptr txop) } void -ChannelAccessManager::RequestAccess (Ptr state, bool isCfPeriod) +ChannelAccessManager::RequestAccess (Ptr txop, bool isCfPeriod) { - NS_LOG_FUNCTION (this << state); + NS_LOG_FUNCTION (this << txop); if (m_phy) { m_phy->NotifyChannelAccessRequested (); @@ -307,37 +307,37 @@ ChannelAccessManager::RequestAccess (Ptr state, bool isCfPeriod) } if (isCfPeriod) { - state->NotifyAccessRequested (); + txop->NotifyAccessRequested (); Time delay = (MostRecent ({GetAccessGrantStart (true), Simulator::Now ()}) - Simulator::Now ()); - m_accessTimeout = Simulator::Schedule (delay, &ChannelAccessManager::DoGrantPcfAccess, this, state); + m_accessTimeout = Simulator::Schedule (delay, &ChannelAccessManager::DoGrantPcfAccess, this, txop); return; } /* * EDCAF operations shall be performed at slot boundaries (Sec. 10.22.2.4 of 802.11-2016) */ - Time accessGrantStart = GetAccessGrantStart () + (state->GetAifsn () * m_slot); + Time accessGrantStart = GetAccessGrantStart () + (txop->GetAifsn () * m_slot); - if (state->IsQosTxop () && state->GetBackoffStart () > accessGrantStart) + if (txop->IsQosTxop () && txop->GetBackoffStart () > accessGrantStart) { // The backoff start time reported by the EDCAF is more recent than the last // time the medium was busy plus an AIFS, hence we need to align it to the // next slot boundary. - Time diff = state->GetBackoffStart () - accessGrantStart; + Time diff = txop->GetBackoffStart () - accessGrantStart; uint32_t nIntSlots = (diff / m_slot).GetHigh () + 1; - state->UpdateBackoffSlotsNow (0, accessGrantStart + (nIntSlots * m_slot)); + txop->UpdateBackoffSlotsNow (0, accessGrantStart + (nIntSlots * m_slot)); } UpdateBackoff (); - NS_ASSERT (!state->IsAccessRequested ()); - state->NotifyAccessRequested (); + NS_ASSERT (!txop->IsAccessRequested ()); + txop->NotifyAccessRequested (); DoGrantDcfAccess (); DoRestartAccessTimeoutIfNeeded (); } void -ChannelAccessManager::DoGrantPcfAccess (Ptr state) +ChannelAccessManager::DoGrantPcfAccess (Ptr txop) { - state->NotifyAccessGranted (); + txop->NotifyAccessGranted (); } void @@ -345,49 +345,48 @@ ChannelAccessManager::DoGrantDcfAccess (void) { NS_LOG_FUNCTION (this); uint32_t k = 0; - for (States::iterator i = m_states.begin (); i != m_states.end (); k++) + for (Txops::iterator i = m_txops.begin (); i != m_txops.end (); k++) { - Ptr state = *i; - if (state->IsAccessRequested () - && GetBackoffEndFor (state) <= Simulator::Now () ) + Ptr txop = *i; + if (txop->IsAccessRequested () + && GetBackoffEndFor (txop) <= Simulator::Now () ) { /** - * This is the first DCF we find with an expired backoff and which + * This is the first Txop we find with an expired backoff and which * needs access to the medium. i.e., it has data to send. */ - NS_LOG_DEBUG ("dcf " << k << " needs access. backoff expired. access granted. slots=" << state->GetBackoffSlots ()); + NS_LOG_DEBUG ("dcf " << k << " needs access. backoff expired. access granted. slots=" << txop->GetBackoffSlots ()); i++; //go to the next item in the list. k++; - std::vector > internalCollisionStates; - for (States::iterator j = i; j != m_states.end (); j++, k++) + std::vector > internalCollisionTxops; + for (Txops::iterator j = i; j != m_txops.end (); j++, k++) { - Ptr otherState = *j; - if (otherState->IsAccessRequested () - && GetBackoffEndFor (otherState) <= Simulator::Now ()) + Ptr otherTxop = *j; + if (otherTxop->IsAccessRequested () + && GetBackoffEndFor (otherTxop) <= Simulator::Now ()) { NS_LOG_DEBUG ("dcf " << k << " needs access. backoff expired. internal collision. slots=" << - otherState->GetBackoffSlots ()); + otherTxop->GetBackoffSlots ()); /** - * all other DCFs with a lower priority whose backoff + * all other Txops with a lower priority whose backoff * has expired and which needed access to the medium * must be notified that we did get an internal collision. */ - internalCollisionStates.push_back (otherState); + internalCollisionTxops.push_back (otherTxop); } } /** * Now, we notify all of these changes in one go. It is necessary to - * perform first the calculations of which states are colliding and then + * perform first the calculations of which Txops are colliding and then * only apply the changes because applying the changes through notification * could change the global state of the manager, and, thus, could change * the result of the calculations. */ - state->NotifyAccessGranted (); - for (std::vector >::iterator l = internalCollisionStates.begin (); - l != internalCollisionStates.end (); l++) + txop->NotifyAccessGranted (); + for (auto collidingTxop : internalCollisionTxops) { - (*l)->NotifyInternalCollision (); + collidingTxop->NotifyInternalCollision (); } break; } @@ -458,21 +457,21 @@ ChannelAccessManager::GetAccessGrantStart (bool ignoreNav) const } Time -ChannelAccessManager::GetBackoffStartFor (Ptr state) +ChannelAccessManager::GetBackoffStartFor (Ptr txop) { - NS_LOG_FUNCTION (this << state); - Time mostRecentEvent = MostRecent ({state->GetBackoffStart (), - GetAccessGrantStart () + (state->GetAifsn () * m_slot)}); + NS_LOG_FUNCTION (this << txop); + Time mostRecentEvent = MostRecent ({txop->GetBackoffStart (), + GetAccessGrantStart () + (txop->GetAifsn () * m_slot)}); NS_LOG_DEBUG ("Backoff start: " << mostRecentEvent.As (Time::US)); return mostRecentEvent; } Time -ChannelAccessManager::GetBackoffEndFor (Ptr state) +ChannelAccessManager::GetBackoffEndFor (Ptr txop) { - NS_LOG_FUNCTION (this << state); - Time backoffEnd = GetBackoffStartFor (state) + (state->GetBackoffSlots () * m_slot); + NS_LOG_FUNCTION (this << txop); + Time backoffEnd = GetBackoffStartFor (txop) + (txop->GetBackoffSlots () * m_slot); NS_LOG_DEBUG ("Backoff end: " << backoffEnd.As (Time::US)); return backoffEnd; @@ -483,11 +482,9 @@ ChannelAccessManager::UpdateBackoff (void) { NS_LOG_FUNCTION (this); uint32_t k = 0; - for (States::iterator i = m_states.begin (); i != m_states.end (); i++, k++) + for (auto txop : m_txops) { - Ptr state = *i; - - Time backoffStart = GetBackoffStartFor (state); + Time backoffStart = GetBackoffStartFor (txop); if (backoffStart <= Simulator::Now ()) { uint32_t nIntSlots = ((Simulator::Now () - backoffStart) / m_slot).GetHigh (); @@ -502,15 +499,16 @@ ChannelAccessManager::UpdateBackoff (void) * that a minimum of AIFS has elapsed since last busy * medium. */ - if (state->IsQosTxop ()) + if (txop->IsQosTxop ()) { nIntSlots++; } - uint32_t n = std::min (nIntSlots, state->GetBackoffSlots ()); + uint32_t n = std::min (nIntSlots, txop->GetBackoffSlots ()); NS_LOG_DEBUG ("dcf " << k << " dec backoff slots=" << n); Time backoffUpdateBound = backoffStart + (n * m_slot); - state->UpdateBackoffSlotsNow (n, backoffUpdateBound); + txop->UpdateBackoffSlotsNow (n, backoffUpdateBound); } + ++k; } } @@ -524,12 +522,11 @@ ChannelAccessManager::DoRestartAccessTimeoutIfNeeded (void) */ bool accessTimeoutNeeded = false; Time expectedBackoffEnd = Simulator::GetMaximumSimulationTime (); - for (States::iterator i = m_states.begin (); i != m_states.end (); i++) + for (auto txop : m_txops) { - Ptr state = *i; - if (state->IsAccessRequested ()) + if (txop->IsAccessRequested ()) { - Time tmp = GetBackoffEndFor (state); + Time tmp = GetBackoffEndFor (txop); if (tmp > Simulator::Now ()) { accessTimeoutNeeded = true; @@ -659,18 +656,17 @@ ChannelAccessManager::NotifySwitchingStartNow (Time duration) } //Reset backoffs - for (States::iterator i = m_states.begin (); i != m_states.end (); i++) + for (auto txop : m_txops) { - Ptr state = *i; - uint32_t remainingSlots = state->GetBackoffSlots (); + uint32_t remainingSlots = txop->GetBackoffSlots (); if (remainingSlots > 0) { - state->UpdateBackoffSlotsNow (remainingSlots, now); - NS_ASSERT (state->GetBackoffSlots () == 0); + txop->UpdateBackoffSlotsNow (remainingSlots, now); + NS_ASSERT (txop->GetBackoffSlots () == 0); } - state->ResetCw (); - state->m_accessRequested = false; - state->NotifyChannelSwitching (); + txop->ResetCw (); + txop->m_accessRequested = false; + txop->NotifyChannelSwitching (); } NS_LOG_DEBUG ("switching start for " << duration); @@ -691,10 +687,9 @@ ChannelAccessManager::NotifySleepNow (void) } //Reset backoffs - for (States::iterator i = m_states.begin (); i != m_states.end (); i++) + for (auto txop : m_txops) { - Ptr state = *i; - state->NotifySleep (); + txop->NotifySleep (); } } @@ -710,10 +705,9 @@ ChannelAccessManager::NotifyOffNow (void) } //Reset backoffs - for (States::iterator i = m_states.begin (); i != m_states.end (); i++) + for (auto txop : m_txops) { - Ptr state = *i; - state->NotifyOff (); + txop->NotifyOff (); } } @@ -722,18 +716,17 @@ ChannelAccessManager::NotifyWakeupNow (void) { NS_LOG_FUNCTION (this); m_sleeping = false; - for (States::iterator i = m_states.begin (); i != m_states.end (); i++) + for (auto txop : m_txops) { - Ptr state = *i; - uint32_t remainingSlots = state->GetBackoffSlots (); + uint32_t remainingSlots = txop->GetBackoffSlots (); if (remainingSlots > 0) { - state->UpdateBackoffSlotsNow (remainingSlots, Simulator::Now ()); - NS_ASSERT (state->GetBackoffSlots () == 0); + txop->UpdateBackoffSlotsNow (remainingSlots, Simulator::Now ()); + NS_ASSERT (txop->GetBackoffSlots () == 0); } - state->ResetCw (); - state->m_accessRequested = false; - state->NotifyWakeUp (); + txop->ResetCw (); + txop->m_accessRequested = false; + txop->NotifyWakeUp (); } } @@ -742,18 +735,17 @@ ChannelAccessManager::NotifyOnNow (void) { NS_LOG_FUNCTION (this); m_off = false; - for (States::iterator i = m_states.begin (); i != m_states.end (); i++) + for (auto txop : m_txops) { - Ptr state = *i; - uint32_t remainingSlots = state->GetBackoffSlots (); + uint32_t remainingSlots = txop->GetBackoffSlots (); if (remainingSlots > 0) { - state->UpdateBackoffSlotsNow (remainingSlots, Simulator::Now ()); - NS_ASSERT (state->GetBackoffSlots () == 0); + txop->UpdateBackoffSlotsNow (remainingSlots, Simulator::Now ()); + NS_ASSERT (txop->GetBackoffSlots () == 0); } - state->ResetCw (); - state->m_accessRequested = false; - state->NotifyOn (); + txop->ResetCw (); + txop->m_accessRequested = false; + txop->NotifyOn (); } } diff --git a/src/wifi/model/channel-access-manager.h b/src/wifi/model/channel-access-manager.h index 06d6aea3d..752149af2 100644 --- a/src/wifi/model/channel-access-manager.h +++ b/src/wifi/model/channel-access-manager.h @@ -101,7 +101,7 @@ public: Time GetEifsNoDifs (void) const; /** - * \param dcf a new Txop. + * \param txop a new Txop. * * The ChannelAccessManager does not take ownership of this pointer so, the callee * must make sure that the Txop pointer will stay valid as long @@ -110,7 +110,7 @@ public: * has the highest priority, the second Txop added, has the second * highest priority, etc. */ - void Add (Ptr dcf); + void Add (Ptr txop); /** * Determine if a new backoff needs to be generated when a packet is queued @@ -122,7 +122,7 @@ public: bool NeedBackoffUponAccess (Ptr txop); /** - * \param state a Txop + * \param txop a Txop * \param isCfPeriod flag whether it is called during the CF period * * Notify the ChannelAccessManager that a specific Txop needs access to the @@ -130,29 +130,29 @@ public: * timer and, invoking Txop::DoNotifyAccessGranted when the access * is granted if it ever gets granted. */ - void RequestAccess (Ptr state, bool isCfPeriod = false); + void RequestAccess (Ptr txop, bool isCfPeriod = false); /** * \param duration expected duration of reception * - * Notify the DCF that a packet reception started + * Notify the Txop that a packet reception started * for the expected duration. */ void NotifyRxStartNow (Time duration); /** - * Notify the DCF that a packet reception was just + * Notify the Txop that a packet reception was just * completed successfully. */ void NotifyRxEndOkNow (void); /** - * Notify the DCF that a packet reception was just + * Notify the Txop that a packet reception was just * completed unsuccessfully. */ void NotifyRxEndErrorNow (void); /** * \param duration expected duration of transmission * - * Notify the DCF that a packet transmission was + * Notify the Txop that a packet transmission was * just started and is expected to last for the specified * duration. */ @@ -160,31 +160,31 @@ public: /** * \param duration expected duration of CCA busy period * - * Notify the DCF that a CCA busy period has just started. + * Notify the Txop that a CCA busy period has just started. */ void NotifyMaybeCcaBusyStartNow (Time duration); /** * \param duration expected duration of channel switching period * - * Notify the DCF that a channel switching period has just started. + * Notify the Txop that a channel switching period has just started. * During switching state, new packets can be enqueued in Txop/QosTxop * but they won't access to the medium until the end of the channel switching. */ void NotifySwitchingStartNow (Time duration); /** - * Notify the DCF that the device has been put in sleep mode. + * Notify the Txop that the device has been put in sleep mode. */ void NotifySleepNow (void); /** - * Notify the DCF that the device has been put in off mode. + * Notify the Txop that the device has been put in off mode. */ void NotifyOffNow (void); /** - * Notify the DCF that the device has been resumed from sleep mode. + * Notify the Txop that the device has been resumed from sleep mode. */ void NotifyWakeupNow (void); /** - * Notify the DCF that the device has been resumed from off mode. + * Notify the Txop that the device has been resumed from off mode. */ void NotifyOnNow (void); /** @@ -261,20 +261,20 @@ private: * Return the time when the backoff procedure * started for the given Txop. * - * \param state the Txop + * \param txop the Txop * * \return the time when the backoff procedure started */ - Time GetBackoffStartFor (Ptr state); + Time GetBackoffStartFor (Ptr txop); /** * Return the time when the backoff procedure * ended (or will ended) for the given Txop. * - * \param state the Txop + * \param txop the Txop * * \return the time when the backoff procedure ended (or will ended) */ - Time GetBackoffEndFor (Ptr state); + Time GetBackoffEndFor (Ptr txop); void DoRestartAccessTimeoutIfNeeded (void); @@ -284,22 +284,22 @@ private: */ void AccessTimeout (void); /** - * Grant access to DCF + * Grant access to Txop using DCF/EDCF contention rules */ void DoGrantDcfAccess (void); /** - * Grant access to PCF + * Grant access to Txop using PCF preemption * - * \param state the Txop + * \param txop the Txop */ - void DoGrantPcfAccess (Ptr state); + void DoGrantPcfAccess (Ptr txop); /** * typedef for a vector of Txops */ - typedef std::vector > States; + typedef std::vector> Txops; - States m_states; //!< the DCF states + Txops m_txops; //!< the vector of managed Txops Time m_lastAckTimeoutEnd; //!< the last Ack timeout end time Time m_lastCtsTimeoutEnd; //!< the last CTS timeout end time Time m_lastNavStart; //!< the last NAV start time diff --git a/src/wifi/test/channel-access-manager-test.cc b/src/wifi/test/channel-access-manager-test.cc index 758c567a3..9e43eea4f 100644 --- a/src/wifi/test/channel-access-manager-test.cc +++ b/src/wifi/test/channel-access-manager-test.cc @@ -42,8 +42,8 @@ public: /** * Constructor * - * \param test the test DCF manager - * \param i the DCF state + * \param test the test channel access manager + * \param i the index of the Txop */ TxopTest (ChannelAccessManagerTest *test, uint32_t i); @@ -72,7 +72,7 @@ private: typedef std::list ExpectedBackoffs; //!< expected backoffs typedef ExpectedBackoffs m_expectedInternalCollision; //!< expected backoff due to an internal collision - ExpectedBackoffs m_expectedBackoff; //!< expected backoff (not due to an internal colllision) + ExpectedBackoffs m_expectedBackoff; //!< expected backoff (not due to an internal collision) ExpectedGrants m_expectedGrants; //!< expected grants /** @@ -85,11 +85,11 @@ private: */ void NotifyAccessRequested (void); /** - * Notify the DCF that access has been granted. + * Notify the Txop that access has been granted. */ void NotifyAccessGranted (void); /** - * Notify the DCF that internal collision has occurred. + * Notify the Txop that internal collision has occurred. */ void NotifyInternalCollision (void); /** @@ -97,8 +97,8 @@ private: */ void GenerateBackoff (void); /** - * Check if the DCF has frames to transmit. - * \return true if the DCF has frames to transmit. + * Check if the Txop has frames to transmit. + * \return true if the Txop has frames to transmit. */ bool HasFramesToTransmit (void); /** @@ -116,7 +116,7 @@ private: void NotifyWakeUp (void); ChannelAccessManagerTest *m_test; //!< the test DCF/EDCA manager - uint32_t m_i; //!< the DCF state + uint32_t m_i; //!< the index of the Txop bool m_accessRequested; //!< true if access requested }; @@ -148,7 +148,7 @@ public: * \ingroup wifi-test * \ingroup tests * - * \brief Dcf Manager Test + * \brief Channel Access Manager Test */ template class ChannelAccessManagerTest : public TestCase @@ -159,22 +159,22 @@ public: /** * Notify access granted function - * \param i the DCF state + * \param i the index of the Txop */ void NotifyAccessGranted (uint32_t i); /** * Notify internal collision function - * \param i the DCF state + * \param i the index of the Txop */ void NotifyInternalCollision (uint32_t i); /** * Generate backoff function - * \param i the DCF state + * \param i the index of the Txop */ void GenerateBackoff (uint32_t i); /** * Notify channel switching function - * \param i the DCF state + * \param i the index of the Txop */ void NotifyChannelSwitching (uint32_t i); @@ -185,33 +185,33 @@ private: * \param slotTime the slot time * \param sifs the SIFS * \param eifsNoDifsNoSifs the EIFS no DIFS no SIFS - * \param ackTimeoutValue the ack timeout value + * \param ackTimeoutValue the Ack timeout value */ void StartTest (uint64_t slotTime, uint64_t sifs, uint64_t eifsNoDifsNoSifs, uint32_t ackTimeoutValue = 20); /** - * Add DCF state function + * Add Txop function * \param aifsn the AIFSN */ - void AddDcfState (uint32_t aifsn); + void AddTxop (uint32_t aifsn); /// End test function void EndTest (void); /** * Expect internal collision function - * \param time the expectedtime + * \param time the expected time * \param nSlots the number of slots * \param from the expected from */ void ExpectInternalCollision (uint64_t time, uint32_t nSlots, uint32_t from); /** * Expect generate backoff function - * \param time the expectedtime + * \param time the expected time * \param nSlots the number of slots * \param from the expected from */ void ExpectBackoff (uint64_t time, uint32_t nSlots, uint32_t from); /** * Schedule a check that the channel access manager is busy or idle - * \param time the expectedtime + * \param time the expected time * \param busy whether the manager is expected to be busy */ void ExpectBusy (uint64_t time, bool busy); @@ -221,8 +221,8 @@ private: */ void DoCheckBusy (bool busy); /** - * Add receive ok event function - * \param at + * Add receive OK event function + * \param at the event time * \param duration the duration */ void AddRxOkEvt (uint64_t at, uint64_t duration); @@ -264,7 +264,7 @@ private: */ void AddNavStart (uint64_t at, uint64_t duration); /** - * Add ack timeout reset function + * Add Ack timeout reset function * \param at the event time */ void AddAckTimeoutReset (uint64_t at); @@ -273,33 +273,33 @@ private: * \param at the event time * \param txTime the transmit time * \param expectedGrantTime the expected grant time - * \param from + * \param from the index of the requesting Txop */ void AddAccessRequest (uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t from); /** - * Add access request with ack timeout + * Add access request with Ack timeout * \param at time to schedule DoAccessRequest event - * \param txTime DoAccessRequest txTime - * \param expectedGrantTime DoAccessRequest expectedGrantTime - * \param from DoAccessRequest TxopTest + * \param txTime the transmit time + * \param expectedGrantTime the expected grant time + * \param from the index of the requesting Txop */ void AddAccessRequestWithAckTimeout (uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t from); /** * Add access request with successful ack * \param at time to schedule DoAccessRequest event - * \param txTime DoAccessRequest txTime - * \param expectedGrantTime DoAccessRequest expectedGrantTime - * \param ackDelay is delay of the ack after txEnd - * \param from DoAccessRequest TxopTest + * \param txTime the transmit time + * \param expectedGrantTime the expected grant time + * \param ackDelay the delay of the Ack after txEnd + * \param from the index of the requesting Txop */ void AddAccessRequestWithSuccessfullAck (uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from); /** - * Add access request with successful ack - * \param txTime DoAccessRequest txTime - * \param expectedGrantTime DoAccessRequest expectedGrantTime + * Add access request with successful Ack + * \param txTime the transmit time + * \param expectedGrantTime the expected grant time * \param state TxopTest */ void DoAccessRequest (uint64_t txTime, uint64_t expectedGrantTime, Ptr> state); @@ -325,9 +325,9 @@ private: typedef std::vector>> TxopTests; //!< the TXOP tests typedef Ptr m_low; //!< the MAC low stubbed - Ptr m_ChannelAccessManager; //!< the DCF manager - TxopTests m_txop; //!< the TXOP - uint32_t m_ackTimeoutValue; //!< the ack timeout value + Ptr m_ChannelAccessManager; //!< the channel access manager + TxopTests m_txop; //!< the vector of Txop test instances + uint32_t m_ackTimeoutValue; //!< the Ack timeout value }; template @@ -544,7 +544,7 @@ ChannelAccessManagerTest::StartTest (uint64_t slotTime, uint64_t sifs, template void -ChannelAccessManagerTest::AddDcfState (uint32_t aifsn) +ChannelAccessManagerTest::AddTxop (uint32_t aifsn) { Ptr> txop = CreateObject> (this, m_txop.size ()); txop->SetAifsn (aifsn); @@ -726,7 +726,7 @@ ChannelAccessManagerTest::DoRun (void) // | sifs | aifsn | tx | idle | sifs | aifsn | tx | // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddAccessRequest (1, 1, 5, 0); AddAccessRequest (8, 2, 12, 0); EndTest (); @@ -738,7 +738,7 @@ ChannelAccessManagerTest::DoRun (void) // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddAccessRequest (1, 1, 5, 0); AddRxInsideSifsEvt (7, 10); AddTxEvt (9, 1); @@ -755,7 +755,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 request access. backoff slots: 4 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddRxOkEvt (80, 20); AddAccessRequest (30, 2, 118, 0); @@ -769,7 +769,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 request access. backoff slots: 0 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddAccessRequest (30, 2, 70, 0); ExpectBackoff (30, 0, 0); // backoff: 0 slots @@ -782,7 +782,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 request access. backoff slots: 0 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddRxOkEvt (60, 40); AddAccessRequest (30, 2, 110, 0); @@ -795,7 +795,7 @@ ChannelAccessManagerTest::DoRun (void) // | rx | idle | sifs | aifsn | tx | // StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddAccessRequest (62, 2, 72, 0); EndTest (); @@ -806,7 +806,7 @@ ChannelAccessManagerTest::DoRun (void) // | rx | idle | sifs | aifsn | tx | // StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddAccessRequest (70, 2, 80, 0); EndTest (); @@ -818,7 +818,7 @@ ChannelAccessManagerTest::DoRun (void) // | | <------eifs------>| // 30 request access. backoff slots: 4 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 40); AddAccessRequest (30, 2, 102, 0); ExpectBackoff (30, 4, 0); //backoff: 4 slots @@ -832,7 +832,7 @@ ChannelAccessManagerTest::DoRun (void) // | sifs + aifsn | // request access 70 80 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 40); AddAccessRequest (70, 2, 86, 0); EndTest (); @@ -844,7 +844,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 40 force Rx error StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 40, 20); // At time 20, start reception for 40, but force error 20 into frame ExpectBusy (41, true); // channel should remain busy for remaining duration ExpectBusy (59, true); @@ -858,7 +858,7 @@ ChannelAccessManagerTest::DoRun (void) // | | <--eifs-->| // 30 request access. backoff slots: 4 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 40); AddAccessRequest (30, 2, 101, 0); ExpectBackoff (30, 4, 0); //backoff: 4 slots @@ -873,8 +873,8 @@ ChannelAccessManagerTest::DoRun (void) // DCF1 | rx | sifs | aifsn | aifsn | aifsn | | sifs | aifsn | aifsn | aifsn | bslot | tx | // 94 98 102 106 110 112 StartTest (4, 6, 10); - AddDcfState (1); //high priority DCF - AddDcfState (3); //low priority DCF + AddTxop (1); //high priority DCF + AddTxop (3); //low priority DCF AddRxOkEvt (20, 40); AddAccessRequest (30, 10, 78, 0); ExpectBackoff (30, 2, 0); //backoff: 2 slot @@ -884,71 +884,71 @@ ChannelAccessManagerTest::DoRun (void) EndTest (); // Test of AckTimeout handling: First queue requests access and ack procedure fails, - // inside the ack timeout second queue with higher priority requests access. + // inside the Ack timeout second queue with higher priority requests access. // // 20 26 34 54 74 80 - // DCF1 - low | sifs | aifsn | tx | ack timeout | sifs | | + // DCF1 - low | sifs | aifsn | tx | Ack timeout | sifs | | // DCF0 - high | | | sifs | tx | // ^ request access StartTest (4, 6, 10); - AddDcfState (0); //high priority DCF - AddDcfState (2); //low priority DCF + AddTxop (0); //high priority DCF + AddTxop (2); //low priority DCF AddAccessRequestWithAckTimeout (20, 20, 34, 1); AddAccessRequest (64, 10, 80, 0); EndTest (); // Test of AckTimeout handling: // - // First queue requests access and ack is 2 us delayed (got ack interval at the picture), + // First queue requests access and Ack is 2 us delayed (got Ack interval at the picture), // inside this interval second queue with higher priority requests access. // // 20 26 34 54 56 62 - // DCF1 - low | sifs | aifsn | tx | got ack | sifs | | + // DCF1 - low | sifs | aifsn | tx | got Ack | sifs | | // DCF0 - high | | | sifs | tx | // ^ request access StartTest (4, 6, 10); - AddDcfState (0); //high priority DCF - AddDcfState (2); //low priority DCF + AddTxop (0); //high priority DCF + AddTxop (2); //low priority DCF AddAccessRequestWithSuccessfullAck (20, 20, 34, 2, 1); AddAccessRequest (55, 10, 62, 0); EndTest (); //Repeat the same but with one queue: // 20 26 34 54 60 62 68 76 80 - // DCF0 | sifs | aifsn | tx | sifs | ack | sifs | aifsn | bslot0 | tx | + // DCF0 | sifs | aifsn | tx | sifs | Ack | sifs | aifsn | bslot0 | tx | // ^ request access StartTest (4, 6, 10); - AddDcfState (2); + AddTxop (2); AddAccessRequest (20, 20, 34, 0); - AddRxOkEvt (60, 2); // ack + AddRxOkEvt (60, 2); // Ack AddAccessRequest (61, 10, 80, 0); ExpectBackoff (61, 1, 0); // 1 slot EndTest (); - // test simple NAV count. This scenario modelizes a simple DATA+ACK handshake - // where the data rate used for the ACK is higher than expected by the DATA source - // so, the data exchange completes before the end of nav. + // test simple NAV count. This scenario models a simple Data+Ack handshake + // where the data rate used for the Ack is higher than expected by the Data source + // so, the data exchange completes before the end of NAV. StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddNavStart (60, 15); AddRxOkEvt (66, 5); AddNavStart (71, 0); AddAccessRequest (30, 10, 93, 0); - ExpectBackoff (30, 2, 0); //backoff: 2 slot + ExpectBackoff (30, 2, 0); //backoff: 2 slots EndTest (); - // test more complex NAV handling by a CF-poll. This scenario modelizes a - // simple DATA+ACK handshake interrupted by a CF-poll which resets the + // test more complex NAV handling by a CF-poll. This scenario models a + // simple Data+Ack handshake interrupted by a CF-poll which resets the // NAV counter. StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 40); AddNavStart (60, 15); AddRxOkEvt (66, 5); AddNavReset (71, 2); AddAccessRequest (30, 10, 91, 0); - ExpectBackoff (30, 2, 0); //backoff: 2 slot + ExpectBackoff (30, 2, 0); //backoff: 2 slots EndTest (); @@ -956,14 +956,14 @@ ChannelAccessManagerTest::DoRun (void) // | rx | idle | sifs | aifsn | tx | // ^ request access StartTest (4, 6, 10); - AddDcfState (2); + AddTxop (2); AddRxOkEvt (20, 40); AddAccessRequest (80, 10, 94, 0); EndTest (); StartTest (4, 6, 10); - AddDcfState (2); + AddTxop (2); AddRxOkEvt (20, 40); AddRxOkEvt (78, 8); AddAccessRequest (30, 50, 108, 0); @@ -977,7 +977,7 @@ ChannelAccessManagerTest::DoRun (void) // | switching | idle | sifs | aifsn | tx | // ^ access request. StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddSwitchingEvt (0, 20); AddAccessRequest (21, 1, 25, 0); EndTest (); @@ -988,7 +988,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 busy. 45 access request. // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddSwitchingEvt (20,20); AddCcaBusyEvt (30,20); ExpectBackoff (45, 2, 0); //backoff: 2 slots @@ -1000,7 +1000,7 @@ ChannelAccessManagerTest::DoRun (void) // ^ access request. // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddRxStartEvt (20, 40); AddSwitchingEvt (30, 20); AddAccessRequest (51, 1, 55, 0); @@ -1011,7 +1011,7 @@ ChannelAccessManagerTest::DoRun (void) // ^ access request. // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddCcaBusyEvt (20, 40); AddSwitchingEvt (30, 20); AddAccessRequest (51, 1, 55, 0); @@ -1022,19 +1022,19 @@ ChannelAccessManagerTest::DoRun (void) // ^ access request. // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddNavStart (20,40); AddSwitchingEvt (30,20); AddAccessRequest (51, 1, 55, 0); EndTest (); // 20 23 24 44 54 59 60 63 64 65 - // | sifs | aifsn | tx | ack timeout | switching | idle | sifs | aifsn | tx | + // | sifs | aifsn | tx | Ack timeout | switching | idle | sifs | aifsn | tx | // | | // 49 access request. ^ access request. // StartTest (1, 3, 10); - AddDcfState (1); + AddTxop (1); AddAccessRequestWithAckTimeout (20, 20, 24, 0); AddAccessRequest (49, 1, 54, 0); AddSwitchingEvt (54, 5); @@ -1047,7 +1047,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 access request. ^ access request. // StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20,40); AddAccessRequest (30, 2, 80, 0); ExpectBackoff (30, 4, 0); //backoff: 4 slots @@ -1069,7 +1069,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 52 request access StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 30); AddAccessRequest (52, 20, 60, 0); EndTest (); @@ -1080,7 +1080,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 58 request access StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 30); AddAccessRequest (52, 20, 60, 0); EndTest (); @@ -1091,7 +1091,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 62 request access StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 30); AddAccessRequest (62, 20, 64, 0); EndTest (); @@ -1103,7 +1103,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 55 request access StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 30); AddAccessRequest (55, 20, 76, 0); EndTest (); @@ -1115,7 +1115,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 70 request access StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 30); AddAccessRequest (70, 20, 76, 0); EndTest (); @@ -1127,7 +1127,7 @@ ChannelAccessManagerTest::DoRun (void) // | // 82 request access StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxErrorEvt (20, 30); AddAccessRequest (82, 20, 84, 0); EndTest (); @@ -1139,7 +1139,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 request access. decrement decrement decrement decrement // backoff slots: 4 slots: 3 slots: 2 slots: 1 slots: 0 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 30); AddAccessRequest (30, 20, 76, 0); ExpectBackoff (30, 4, 0); @@ -1152,7 +1152,7 @@ ChannelAccessManagerTest::DoRun (void) // 30 request access. decrement decrement decrement // backoff slots: 3 slots: 2 slots: 1 slots: 0 StartTest (4, 6, 10); - AddDcfState (1); + AddTxop (1); AddRxOkEvt (20, 30); AddRxOkEvt (61, 10); AddRxOkEvt (87, 10); @@ -1165,38 +1165,38 @@ ChannelAccessManagerTest::DoRun (void) * \ingroup wifi-test * \ingroup tests * - * \brief Dcf Test Suite + * \brief Txop Test Suite */ -class DcfTestSuite : public TestSuite +class TxopTestSuite : public TestSuite { public: - DcfTestSuite (); + TxopTestSuite (); }; -DcfTestSuite::DcfTestSuite () +TxopTestSuite::TxopTestSuite () : TestSuite ("wifi-devices-dcf", UNIT) { AddTestCase (new ChannelAccessManagerTest, TestCase::QUICK); } -static DcfTestSuite g_dcfTestSuite; +static TxopTestSuite g_dcfTestSuite; /** * \ingroup wifi-test * \ingroup tests * - * \brief Edca Test Suite + * \brief QosTxop Test Suite */ -class EdcaTestSuite : public TestSuite +class QosTxopTestSuite : public TestSuite { public: - EdcaTestSuite (); + QosTxopTestSuite (); }; -EdcaTestSuite::EdcaTestSuite () +QosTxopTestSuite::QosTxopTestSuite () : TestSuite ("wifi-devices-edca", UNIT) { AddTestCase (new ChannelAccessManagerTest, TestCase::QUICK); } -static EdcaTestSuite g_edcaTestSuite; +static QosTxopTestSuite g_edcaTestSuite;