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 |
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 ()=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... | |
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 | 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 42 of file dcf-manager.cc.
|
virtual |
Definition at line 52 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::DcaTxop::Dcf, ns3::EdcaTxopN::Dcf, and ns3::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::DcaTxop::Dcf, ns3::EdcaTxopN::Dcf, and ns3::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::DcaTxop::Dcf, ns3::EdcaTxopN::Dcf, and ns3::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::DcaTxop::Dcf, ns3::EdcaTxopN::Dcf, and ns3::DcfStateTest.
Referenced by NotifyInternalCollision().
uint32_t ns3::DcfState::GetAifsn | ( | void | ) | const |
Return the number of slots that make up an AIFS.
Definition at line 74 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 123 of file dcf-manager.cc.
References m_backoffSlots.
Referenced by ns3::DcfManager::DoGrantAccess(), ns3::DcfManager::GetBackoffEndFor(), ns3::DcfManager::NotifySwitchingStartNow(), ns3::DcfManager::RequestAccess(), and ns3::DcfManager::UpdateBackoff().
|
private |
Return the time when the backoff procedure started.
Definition at line 128 of file dcf-manager.cc.
References m_backoffStart.
Referenced by ns3::DcfManager::GetBackoffStartFor().
uint32_t ns3::DcfState::GetCw | ( | void | ) | const |
Definition at line 118 of file dcf-manager.cc.
References m_cw.
Referenced by ns3::DcaTxop::DoInitialize(), ns3::EdcaTxopN::DoInitialize(), ns3::DcaTxop::EndTxNoAck(), ns3::EdcaTxopN::EndTxNoAck(), ns3::EdcaTxopN::GotAck(), ns3::DcaTxop::GotAck(), ns3::EdcaTxopN::GotBlockAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::EdcaTxopN::MissedCts(), ns3::DcaTxop::MissedCts(), ns3::EdcaTxopN::NotifyCollision(), and ns3::DcaTxop::NotifyCollision().
uint32_t ns3::DcfState::GetCwMax | ( | void | ) | const |
Return the maximum congestion window size.
Definition at line 84 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 79 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 133 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().
|
private |
Notify that access has been granted.
Definition at line 143 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 138 of file dcf-manager.cc.
References m_accessRequested.
Referenced by ns3::DcfManager::RequestAccess().
|
private |
Notify that the device is switching channel.
Definition at line 160 of file dcf-manager.cc.
References DoNotifyChannelSwitching().
Referenced by ns3::DcfManager::NotifySwitchingStartNow().
|
private |
Notify that collision has occurred.
Definition at line 150 of file dcf-manager.cc.
References DoNotifyCollision().
Referenced by ns3::DcfManager::RequestAccess().
|
private |
Notify that internal collision has occurred.
Definition at line 155 of file dcf-manager.cc.
References DoNotifyInternalCollision().
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 90 of file dcf-manager.cc.
Referenced by ns3::DcaTxop::DoInitialize(), ns3::EdcaTxopN::DoInitialize(), ns3::DcaTxop::EndTxNoAck(), ns3::EdcaTxopN::EndTxNoAck(), ns3::EdcaTxopN::GotAck(), ns3::DcaTxop::GotAck(), ns3::EdcaTxopN::GotBlockAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedCts(), ns3::DcaTxop::MissedCts(), ns3::DcfManager::NotifySwitchingStartNow(), 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 57 of file dcf-manager.cc.
References m_aifsn.
Referenced by ns3::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 68 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 109 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::EdcaTxopN::GotAck(), ns3::DcaTxop::GotAck(), ns3::EdcaTxopN::GotBlockAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::EdcaTxopN::MissedCts(), ns3::DcaTxop::MissedCts(), ns3::DcfManagerTest::NotifyCollision(), ns3::EdcaTxopN::NotifyCollision(), ns3::DcaTxop::NotifyCollision(), and ns3::DcfManagerTest::NotifyInternalCollision().
|
private |
Update backoff slots that nSlots has passed.
nSlots | |
backoffUpdateBound |
Definition at line 101 of file dcf-manager.cc.
References m_backoffSlots, m_backoffStart, and MY_DEBUG.
Referenced by ns3::DcfManager::NotifySwitchingStartNow(), 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 95 of file dcf-manager.cc.
Referenced by ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedAck(), ns3::EdcaTxopN::MissedBlockAck(), ns3::EdcaTxopN::MissedCts(), and ns3::DcaTxop::MissedCts().
|
friend |
Definition at line 122 of file dcf-manager.h.
|
private |
Definition at line 211 of file dcf-manager.h.
Referenced by IsAccessRequested(), NotifyAccessGranted(), NotifyAccessRequested(), and ns3::DcfManager::NotifySwitchingStartNow().
|
private |
Definition at line 202 of file dcf-manager.h.
Referenced by GetAifsn(), and SetAifsn().
|
private |
Definition at line 203 of file dcf-manager.h.
Referenced by GetBackoffSlots(), StartBackoffNow(), and UpdateBackoffSlotsNow().
|
private |
Definition at line 207 of file dcf-manager.h.
Referenced by GetBackoffStart(), StartBackoffNow(), and UpdateBackoffSlotsNow().
|
private |
Definition at line 210 of file dcf-manager.h.
Referenced by GetCw(), ResetCw(), and UpdateFailedCw().
|
private |
Definition at line 209 of file dcf-manager.h.
Referenced by GetCwMax(), SetCwMax(), and UpdateFailedCw().
|
private |
Definition at line 208 of file dcf-manager.h.
Referenced by GetCwMin(), ResetCw(), and SetCwMin().