keep track of the state needed for a single DCF function. More...
#include "dcf-manager.h"
Public Member Functions | |
DcfState () | |
virtual | ~DcfState () |
uint32_t | GetAifsn (void) const |
Return the number of slots that make up an AIFS. More... | |
uint32_t | GetCw (void) const |
uint32_t | GetCwMax (void) const |
Return the maximum congestion window size. More... | |
uint32_t | GetCwMin (void) const |
Return the minimum congestion window size. More... | |
bool | IsAccessRequested (void) const |
virtual bool | IsEdca (void) const =0 |
void | ResetCw (void) |
Update the value of the CW variable to take into account a transmission success or a transmission abort (stop transmission of a packet after the maximum number of retransmissions has been reached). More... | |
void | SetAifsn (uint32_t aifsn) |
void | SetCwMax (uint32_t maxCw) |
Set the maximum congestion window size. More... | |
void | SetCwMin (uint32_t minCw) |
Set the minimum congestion window size. More... | |
void | StartBackoffNow (uint32_t nSlots) |
void | UpdateFailedCw (void) |
Update the value of the CW variable to take into account a transmission failure. More... | |
Private Member Functions | |
virtual void | DoNotifyAccessGranted (void)=0 |
Called by DcfManager to notify a DcfState subclass that access to the medium is granted and can start immediately. More... | |
virtual void | DoNotifyChannelSwitching (void)=0 |
Called by DcfManager to notify a DcfState subclass that a channel switching occured. More... | |
virtual void | DoNotifyCollision (void)=0 |
Called by DcfManager to notify a DcfState subclass that a normal collision occured, that is, that the medium was busy when access was requested. More... | |
virtual void | DoNotifyInternalCollision (void)=0 |
Called by DcfManager to notify a DcfState subclass that an 'internal' collision occured, that is, that the backoff timer of a higher priority DcfState expired at the same time and that access was granted to this higher priority DcfState. More... | |
virtual void | DoNotifySleep (void)=0 |
Called by DcfManager to notify a DcfState subclass that the device has begun to sleep. More... | |
virtual void | DoNotifyWakeUp (void)=0 |
Called by DcfManager to notify a DcfState subclass that the device has begun to wake up. More... | |
uint32_t | GetBackoffSlots (void) const |
Return the current number of backoff slots. More... | |
Time | GetBackoffStart (void) const |
Return the time when the backoff procedure started. More... | |
void | NotifyAccessGranted (void) |
Notify that access has been granted. More... | |
void | NotifyAccessRequested (void) |
Notify that access request has been received. More... | |
void | NotifyChannelSwitching (void) |
Notify that the device is switching channel. More... | |
void | NotifyCollision (void) |
Notify that collision has occurred. More... | |
void | NotifyInternalCollision (void) |
Notify that internal collision has occurred. More... | |
void | NotifySleep (void) |
Notify that the device has started to sleep. More... | |
void | NotifyWakeUp (void) |
Notify that the device has started to wake up. More... | |
void | UpdateBackoffSlotsNow (uint32_t nSlots, Time backoffUpdateBound) |
Update backoff slots that nSlots has passed. More... | |
Private Attributes | |
bool | m_accessRequested |
uint32_t | m_aifsn |
uint32_t | m_backoffSlots |
Time | m_backoffStart |
uint32_t | m_cw |
uint32_t | m_cwMax |
uint32_t | m_cwMin |
Friends | |
class | DcfManager |
keep track of the state needed for a single DCF function.
Multiple instances of a DcfState can be registered in a single DcfManager to implement 802.11e-style relative QoS. DcfState::SetAifsn and DcfState::SetCwBounds allow the user to control the relative QoS differentiation.
Definition at line 46 of file dcf-manager.h.
ns3::DcfState::DcfState | ( | ) |
Definition at line 41 of file dcf-manager.cc.
|
virtual |
Definition at line 51 of file dcf-manager.cc.
|
privatepure virtual |
Called by DcfManager to notify a DcfState subclass that access to the medium is granted and can start immediately.
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by NotifyAccessGranted().
|
privatepure virtual |
Called by DcfManager to notify a DcfState subclass that a channel switching occured.
The subclass is expected to flush the queue of packets.
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by NotifyChannelSwitching().
|
privatepure virtual |
Called by DcfManager to notify a DcfState subclass that a normal collision occured, that is, that the medium was busy when access was requested.
The subclass is expected to start a new backoff by calling DcfState::StartBackoffNow and DcfManager::RequestAccess is access is still needed.
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by NotifyCollision().
|
privatepure virtual |
Called by DcfManager to notify a DcfState subclass that an 'internal' collision occured, that is, that the backoff timer of a higher priority DcfState expired at the same time and that access was granted to this higher priority DcfState.
The subclass is expected to start a new backoff by calling DcfState::StartBackoffNow and DcfManager::RequestAccess is access is still needed.
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by NotifyInternalCollision().
|
privatepure virtual |
Called by DcfManager to notify a DcfState subclass that the device has begun to sleep.
The subclass is expected to re-insert the pending packet into the queue
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by NotifySleep().
|
privatepure virtual |
Called by DcfManager to notify a DcfState subclass that the device has begun to wake up.
The subclass is expected to restart a new backoff by calling DcfState::StartBackoffNow and DcfManager::RequestAccess is access is still needed.
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by NotifyWakeUp().
uint32_t ns3::DcfState::GetAifsn | ( | void | ) | const |
Return the number of slots that make up an AIFS.
Definition at line 84 of file dcf-manager.cc.
References m_aifsn.
Referenced by ns3::DcaTxop::GetAifsn(), ns3::EdcaTxopN::GetAifsn(), and ns3::DcfManager::GetBackoffStartFor().
|
private |
Return the current number of backoff slots.
Definition at line 138 of file dcf-manager.cc.
References m_backoffSlots.
Referenced by ns3::DcfManager::DoGrantAccess(), ns3::DcfManager::GetBackoffEndFor(), ns3::DcfManager::NotifySwitchingStartNow(), ns3::DcfManager::NotifyWakeupNow(), ns3::DcfManager::RequestAccess(), and ns3::DcfManager::UpdateBackoff().
|
private |
Return the time when the backoff procedure started.
Definition at line 144 of file dcf-manager.cc.
References m_backoffStart.
Referenced by ns3::DcfManager::GetBackoffStartFor().
uint32_t ns3::DcfState::GetCw | ( | void | ) | const |
Definition at line 132 of file dcf-manager.cc.
References m_cw.
Referenced by ns3::DcaTxop::DoInitialize(), ns3::EdcaTxopN::DoInitialize(), ns3::DcaTxop::EndTxNoAck(), ns3::EdcaTxopN::EndTxNoAck(), ns3::DcaTxop::GotAck(), ns3::EdcaTxopN::GotAck(), ns3::EdcaTxopN::GotBlockAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::DcaTxop::MissedCts(), ns3::EdcaTxopN::MissedCts(), ns3::DcaTxop::NotifyCollision(), and ns3::EdcaTxopN::NotifyCollision().
uint32_t ns3::DcfState::GetCwMax | ( | void | ) | const |
Return the maximum congestion window size.
Definition at line 96 of file dcf-manager.cc.
References m_cwMax.
Referenced by ns3::DcaTxop::GetMaxCw(), and ns3::EdcaTxopN::GetMaxCw().
uint32_t ns3::DcfState::GetCwMin | ( | void | ) | const |
Return the minimum congestion window size.
Definition at line 90 of file dcf-manager.cc.
References m_cwMin.
Referenced by ns3::DcaTxop::GetMinCw(), and ns3::EdcaTxopN::GetMinCw().
bool ns3::DcfState::IsAccessRequested | ( | void | ) | const |
Definition at line 150 of file dcf-manager.cc.
References m_accessRequested.
Referenced by ns3::DcfManager::DoGrantAccess(), ns3::DcfManager::DoRestartAccessTimeoutIfNeeded(), ns3::DcfManager::RequestAccess(), ns3::DcaTxop::RestartAccessIfNeeded(), ns3::EdcaTxopN::RestartAccessIfNeeded(), ns3::DcaTxop::StartAccessIfNeeded(), and ns3::EdcaTxopN::StartAccessIfNeeded().
|
pure virtual |
This method, which must be overridden in derived classes, indicates whether DCF or EDCAF rules should be used for this channel access function. This affects the behavior of DcfManager when dealing with this instance.
Implemented in ns3::EdcaTxopN::Dcf, ns3::DcaTxop::Dcf, and DcfStateTest.
Referenced by ns3::DcfManager::UpdateBackoff().
|
private |
Notify that access has been granted.
Definition at line 161 of file dcf-manager.cc.
References DoNotifyAccessGranted(), m_accessRequested, and NS_ASSERT.
Referenced by ns3::DcfManager::DoGrantAccess().
|
private |
Notify that access request has been received.
Definition at line 155 of file dcf-manager.cc.
References m_accessRequested.
Referenced by ns3::DcfManager::RequestAccess().
|
private |
Notify that the device is switching channel.
Definition at line 181 of file dcf-manager.cc.
References DoNotifyChannelSwitching().
Referenced by ns3::DcfManager::NotifySwitchingStartNow().
|
private |
Notify that collision has occurred.
Definition at line 169 of file dcf-manager.cc.
References DoNotifyCollision().
Referenced by ns3::DcfManager::RequestAccess().
|
private |
Notify that internal collision has occurred.
Definition at line 175 of file dcf-manager.cc.
References DoNotifyInternalCollision().
|
private |
Notify that the device has started to sleep.
Definition at line 187 of file dcf-manager.cc.
References DoNotifySleep().
Referenced by ns3::DcfManager::NotifySleepNow().
|
private |
Notify that the device has started to wake up.
Definition at line 193 of file dcf-manager.cc.
References DoNotifyWakeUp().
Referenced by ns3::DcfManager::NotifyWakeupNow().
void ns3::DcfState::ResetCw | ( | void | ) |
Update the value of the CW variable to take into account a transmission success or a transmission abort (stop transmission of a packet after the maximum number of retransmissions has been reached).
By default, this resets the CW variable to minCW.
Definition at line 102 of file dcf-manager.cc.
Referenced by ns3::DcaTxop::DoInitialize(), ns3::EdcaTxopN::DoInitialize(), ns3::DcaTxop::EndTxNoAck(), ns3::EdcaTxopN::EndTxNoAck(), ns3::DcaTxop::GotAck(), ns3::EdcaTxopN::GotAck(), ns3::EdcaTxopN::GotBlockAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::DcaTxop::MissedCts(), ns3::EdcaTxopN::MissedCts(), ns3::DcfManager::NotifySwitchingStartNow(), ns3::DcfManager::NotifyWakeupNow(), SetCwMax(), and SetCwMin().
void ns3::DcfState::SetAifsn | ( | uint32_t | aifsn | ) |
aifsn | the number of slots which make up an AIFS for a specific DCF. a DIFS corresponds to an AIFSN = 2. |
Calling this method after DcfManager::Add has been called is not recommended.
Definition at line 56 of file dcf-manager.cc.
References m_aifsn.
Referenced by DcfManagerTest::AddDcfState(), ns3::DcaTxop::SetAifsn(), and ns3::EdcaTxopN::SetAifsn().
void ns3::DcfState::SetCwMax | ( | uint32_t | maxCw | ) |
Set the maximum congestion window size.
maxCw | the maximum congestion window size |
Definition at line 73 of file dcf-manager.cc.
References m_cwMax, and ResetCw().
Referenced by ns3::DcaTxop::SetMaxCw(), and ns3::EdcaTxopN::SetMaxCw().
void ns3::DcfState::SetCwMin | ( | uint32_t | minCw | ) |
Set the minimum congestion window size.
minCw | the minimum congestion window size |
Definition at line 62 of file dcf-manager.cc.
References m_cwMin, and ResetCw().
Referenced by ns3::DcaTxop::SetMinCw(), and ns3::EdcaTxopN::SetMinCw().
void ns3::DcfState::StartBackoffNow | ( | uint32_t | nSlots | ) |
nSlots | the number of slots of the backoff. |
Start a backoff by initializing the backoff counter to the number of slots specified.
Definition at line 123 of file dcf-manager.cc.
References m_backoffSlots, m_backoffStart, MY_DEBUG, ns3::Simulator::Now(), and NS_ASSERT.
Referenced by ns3::DcaTxop::DoInitialize(), ns3::EdcaTxopN::DoInitialize(), ns3::DcaTxop::EndTxNoAck(), ns3::EdcaTxopN::EndTxNoAck(), ns3::DcaTxop::GotAck(), ns3::EdcaTxopN::GotAck(), ns3::EdcaTxopN::GotBlockAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::DcaTxop::MissedCts(), ns3::EdcaTxopN::MissedCts(), DcfManagerTest::NotifyCollision(), ns3::DcaTxop::NotifyCollision(), ns3::EdcaTxopN::NotifyCollision(), and DcfManagerTest::NotifyInternalCollision().
|
private |
Update backoff slots that nSlots has passed.
nSlots | |
backoffUpdateBound |
Definition at line 115 of file dcf-manager.cc.
References m_backoffSlots, m_backoffStart, and MY_DEBUG.
Referenced by ns3::DcfManager::NotifySwitchingStartNow(), ns3::DcfManager::NotifyWakeupNow(), and ns3::DcfManager::UpdateBackoff().
void ns3::DcfState::UpdateFailedCw | ( | void | ) |
Update the value of the CW variable to take into account a transmission failure.
By default, this triggers a doubling of CW (capped by maxCW).
Definition at line 108 of file dcf-manager.cc.
References m_cw, m_cwMax, and min.
Referenced by ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::DcaTxop::MissedCts(), and ns3::EdcaTxopN::MissedCts().
|
friend |
Definition at line 132 of file dcf-manager.h.
Referenced by DcfManagerTest::StartTest().
|
private |
Definition at line 243 of file dcf-manager.h.
Referenced by IsAccessRequested(), NotifyAccessGranted(), NotifyAccessRequested(), ns3::DcfManager::NotifySwitchingStartNow(), and ns3::DcfManager::NotifyWakeupNow().
|
private |
Definition at line 234 of file dcf-manager.h.
Referenced by GetAifsn(), and SetAifsn().
|
private |
Definition at line 235 of file dcf-manager.h.
Referenced by GetBackoffSlots(), StartBackoffNow(), and UpdateBackoffSlotsNow().
|
private |
Definition at line 239 of file dcf-manager.h.
Referenced by GetBackoffStart(), StartBackoffNow(), and UpdateBackoffSlotsNow().
|
private |
Definition at line 242 of file dcf-manager.h.
Referenced by GetCw(), ResetCw(), and UpdateFailedCw().
|
private |
Definition at line 241 of file dcf-manager.h.
Referenced by GetCwMax(), SetCwMax(), and UpdateFailedCw().
|
private |
Definition at line 240 of file dcf-manager.h.
Referenced by GetCwMin(), ResetCw(), and SetCwMin().