Manages all block ack agreements for an originator station. More...
#include "block-ack-manager.h"
Classes | |
struct | Item |
A struct for packet, Wifi header, and timestamp. More... | |
Public Types | |
typedef Callback< void, const WifiMacHeader & > | TxFailed |
typedef for a callback to invoke when a packet transmission was failed. More... | |
typedef Callback< void, const WifiMacHeader & > | TxOk |
typedef for a callback to invoke when a packet transmission was completed successfully. More... | |
Public Member Functions | |
BlockAckManager () | |
~BlockAckManager () | |
bool | AlreadyExists (uint16_t currentSeq, Mac48Address recipient, uint8_t tid) const |
Checks if the packet already exists in the retransmit queue or not if it does then it doesn't add it again. More... | |
void | CompleteAmpduExchange (Mac48Address recipient, uint8_t tid) |
void | CreateAgreement (const MgtAddBaRequestHeader *reqHdr, Mac48Address recipient) |
void | DestroyAgreement (Mac48Address recipient, uint8_t tid) |
bool | ExistsAgreement (Mac48Address recipient, uint8_t tid) const |
bool | ExistsAgreementInState (Mac48Address recipient, uint8_t tid, OriginatorBlockAckAgreement::State state) const |
uint32_t | GetNBufferedPackets (Mac48Address recipient, uint8_t tid) const |
Ptr< const Packet > | GetNextPacket (WifiMacHeader &hdr, bool removePacket) |
uint32_t | GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const |
uint16_t | GetSeqNumOfNextRetryPacket (Mac48Address recipient, uint8_t tid) const |
bool | HasBar (Bar &bar) |
Returns true if the BAR is scheduled. More... | |
bool | HasPackets (void) const |
Returns true if there are packets that need of retransmission or at least a BAR is scheduled. More... | |
bool | NeedBarRetransmission (uint8_t tid, uint16_t seqNumber, Mac48Address recipient) |
This function returns true if the lifetime of the packets a BAR refers to didn't expire yet else it returns false. More... | |
void | NotifyAgreementEstablished (Mac48Address recipient, uint8_t tid, uint16_t startingSeq) |
void | NotifyAgreementUnsuccessful (Mac48Address recipient, uint8_t tid) |
void | NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, WifiMode txMode, double dataSnr) |
void | NotifyMpduTransmission (Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, WifiMacHeader::QosAckPolicy policy) |
Ptr< const Packet > | PeekNextPacketByTidAndAddress (WifiMacHeader &hdr, uint8_t tid, Time *timestamp) |
Peek in retransmit queue and get the next packet having address indicated by type equals to addr, and tid equals to tid. More... | |
bool | RemovePacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber) |
Remove a packet after you peek in the queue and get it. More... | |
void | SetBlockAckInactivityCallback (Callback< void, Mac48Address, uint8_t, bool > callback) |
Set block ack inactivity callback. More... | |
void | SetBlockAckThreshold (uint8_t nPackets) |
void | SetBlockAckType (BlockAckType bAckType) |
void | SetBlockDestinationCallback (Callback< void, Mac48Address, uint8_t > callback) |
Set block destination callback. More... | |
void | SetMaxPacketDelay (Time maxDelay) |
void | SetQueue (const Ptr< WifiMacQueue > queue) |
void | SetTxFailedCallback (TxFailed callback) |
void | SetTxMiddle (const Ptr< MacTxMiddle > txMiddle) |
Set the MacTxMiddle. More... | |
void | SetTxOkCallback (TxOk callback) |
void | SetUnblockDestinationCallback (Callback< void, Mac48Address, uint8_t > callback) |
Set unblock destination callback. More... | |
void | SetWifiRemoteStationManager (const Ptr< WifiRemoteStationManager > manager) |
Set up WifiRemoteStationManager associated with this BlockAckManager. More... | |
void | StorePacket (Ptr< const Packet > packet, const WifiMacHeader &hdr, Time tStamp) |
bool | SwitchToBlockAckIfNeeded (Mac48Address recipient, uint8_t tid, uint16_t startingSeq) |
void | UpdateAgreement (const MgtAddBaResponseHeader *respHdr, Mac48Address recipient) |
![]() | |
Object () | |
Constructor. More... | |
virtual | ~Object () |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose (void) |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator (void) const |
Get an iterator to the Objects aggregated to this one. More... | |
virtual TypeId | GetInstanceTypeId (void) const |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (void) const |
Get a pointer to the requested aggregated Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
void | Initialize (void) |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized (void) const |
Check if the object has been initialized. More... | |
![]() | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount (void) const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. More... | |
void | Ref (void) const |
Increment the reference count. More... | |
void | Unref (void) const |
Decrement the reference count. More... | |
![]() | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising erros. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Register this type. More... | |
![]() | |
static TypeId | GetTypeId (void) |
Get the type ID. More... | |
Private Types | |
typedef std::map< std::pair< Mac48Address, uint8_t >, std::pair< OriginatorBlockAckAgreement, PacketQueue > > | Agreements |
typedef for a map between MAC address and block ACK agreement. More... | |
typedef std::map< std::pair< Mac48Address, uint8_t >, std::pair< OriginatorBlockAckAgreement, PacketQueue > >::const_iterator | AgreementsCI |
typedef for a const iterator for Agreements. More... | |
typedef std::map< std::pair< Mac48Address, uint8_t >, std::pair< OriginatorBlockAckAgreement, PacketQueue > >::iterator | AgreementsI |
typedef for an iterator for Agreements. More... | |
typedef std::list< Item > | PacketQueue |
typedef for a list of Item struct. More... | |
typedef std::list< Item >::const_iterator | PacketQueueCI |
typedef for a const iterator for PacketQueue. More... | |
typedef std::list< Item >::iterator | PacketQueueI |
typedef for an iterator for PacketQueue. More... | |
Private Member Functions | |
BlockAckManager (const BlockAckManager &) | |
type conversion operator More... | |
void | CleanupBuffers (void) |
This method removes packets whose lifetime was exceeded. More... | |
void | InactivityTimeout (Mac48Address recipient, uint8_t tid) |
Inactivity timeout function. More... | |
void | InsertInRetryQueue (PacketQueueI item) |
BlockAckManager & | operator= (const BlockAckManager &block) |
assignment operator More... | |
void | RemoveFromRetryQueue (Mac48Address address, uint8_t tid, uint16_t seq) |
Remove items from retransmission queue. More... | |
Ptr< Packet > | ScheduleBlockAckReqIfNeeded (Mac48Address recipient, uint8_t tid) |
Private Attributes | |
Mac48Address | m_address |
address More... | |
Agreements | m_agreements |
This data structure contains, for each block ack agreement (recipient, tid), a set of packets for which an ack by block ack is requested. More... | |
std::list< Bar > | m_bars |
list of BARs More... | |
Callback< void, Mac48Address, uint8_t, bool > | m_blockAckInactivityTimeout |
block ack inactivity timeout callback More... | |
uint8_t | m_blockAckThreshold |
block ack threshold More... | |
BlockAckType | m_blockAckType |
block ack type More... | |
Callback< void, Mac48Address, uint8_t > | m_blockPackets |
block packets callback More... | |
Time | m_maxDelay |
maximum delay More... | |
Ptr< WifiMacQueue > | m_queue |
queue More... | |
std::list< PacketQueueI > | m_retryPackets |
This list contains all iterators to stored packets that need to be retransmitted. More... | |
Ptr< WifiRemoteStationManager > | m_stationManager |
the station manager More... | |
TxFailed | m_txFailedCallback |
transmit failed callback More... | |
Ptr< MacTxMiddle > | m_txMiddle |
the MacTxMiddle More... | |
TxOk | m_txOkCallback |
transmit ok callback More... | |
Callback< void, Mac48Address, uint8_t > | m_unblockPackets |
unblock packets callback More... | |
Additional Inherited Members | |
![]() | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoDispose (void) |
Destructor implementation. More... | |
virtual void | DoInitialize (void) |
Initialize() implementation. More... | |
virtual void | NotifyNewAggregate (void) |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
![]() | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted (void) |
Notifier called once the ObjectBase is fully constructed. More... | |
![]() | |
static TypeId | GetObjectIid (void) |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
Manages all block ack agreements for an originator station.
Introspection did not find any typical Config paths.
No Attributes are defined for this type.
No TraceSources are defined for this type.
Size of this type is 192 bytes (on a 64-bit architecture).
Definition at line 73 of file block-ack-manager.h.
|
private |
typedef for a map between MAC address and block ACK agreement.
Definition at line 429 of file block-ack-manager.h.
|
private |
typedef for a const iterator for Agreements.
Definition at line 439 of file block-ack-manager.h.
|
private |
typedef for an iterator for Agreements.
Definition at line 434 of file block-ack-manager.h.
|
private |
typedef for a list of Item struct.
Definition at line 412 of file block-ack-manager.h.
|
private |
typedef for a const iterator for PacketQueue.
Definition at line 424 of file block-ack-manager.h.
|
private |
typedef for an iterator for PacketQueue.
Definition at line 420 of file block-ack-manager.h.
typedef Callback<void, const WifiMacHeader&> ns3::BlockAckManager::TxFailed |
typedef for a callback to invoke when a packet transmission was failed.
Definition at line 374 of file block-ack-manager.h.
typedef Callback<void, const WifiMacHeader&> ns3::BlockAckManager::TxOk |
typedef for a callback to invoke when a packet transmission was completed successfully.
Definition at line 369 of file block-ack-manager.h.
|
private |
type conversion operator
ns3::BlockAckManager::BlockAckManager | ( | ) |
Definition at line 70 of file block-ack-manager.cc.
References NS_LOG_FUNCTION.
ns3::BlockAckManager::~BlockAckManager | ( | ) |
Definition at line 75 of file block-ack-manager.cc.
References m_agreements, m_queue, m_retryPackets, and NS_LOG_FUNCTION.
bool ns3::BlockAckManager::AlreadyExists | ( | uint16_t | currentSeq, |
Mac48Address | recipient, | ||
uint8_t | tid | ||
) | const |
Checks if the packet already exists in the retransmit queue or not if it does then it doesn't add it again.
currentSeq | the current sequence |
recipient | the destination address |
tid | the Traffic ID |
Definition at line 516 of file block-ack-manager.cc.
References m_retryPackets, NS_FATAL_ERROR, and NS_LOG_FUNCTION.
Referenced by NotifyGotBlockAck().
|
private |
This method removes packets whose lifetime was exceeded.
Definition at line 828 of file block-ack-manager.cc.
References m_agreements, m_maxDelay, ns3::Simulator::Now(), NS_LOG_FUNCTION, and RemoveFromRetryQueue().
Referenced by GetNextPacket(), NeedBarRetransmission(), and PeekNextPacketByTidAndAddress().
void ns3::BlockAckManager::CompleteAmpduExchange | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID of transmitted packet. |
This method to set the number of packets waiting for blockAck = 0 since the receiver will send the blockAck right away
Definition at line 244 of file block-ack-manager.cc.
References ns3::OriginatorBlockAckAgreement::CompleteExchange(), m_agreements, and NS_ASSERT.
void ns3::BlockAckManager::CreateAgreement | ( | const MgtAddBaRequestHeader * | reqHdr, |
Mac48Address | recipient | ||
) |
reqHdr | Relative Add block ack request (action frame). |
recipient | Address of peer station involved in block ack mechanism. |
Creates a new block ack agreement in pending state. When a ADDBA response with a successful status code is received, the relative agreement becomes established.
Definition at line 117 of file block-ack-manager.cc.
References ns3::MgtAddBaRequestHeader::GetStartingSequence(), ns3::MgtAddBaRequestHeader::GetTid(), ns3::MgtAddBaRequestHeader::GetTimeout(), ns3::WifiRemoteStationManager::HasHtSupported(), ns3::MgtAddBaRequestHeader::IsAmsduSupported(), ns3::MgtAddBaRequestHeader::IsImmediateBlockAck(), m_agreements, m_blockPackets, m_stationManager, NS_LOG_FUNCTION, ns3::OriginatorBlockAckAgreement::PENDING, and ns3::BlockAckAgreement::SetStartingSequence().
void ns3::BlockAckManager::DestroyAgreement | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) |
recipient | Address of peer station involved in block ack mechanism. |
tid | Tid Traffic id of transmitted packet. |
Invoked when a recipient reject a block ack agreement or when a Delba frame is Received/Transmitted.
Definition at line 146 of file block-ack-manager.cc.
References m_agreements, m_bars, m_retryPackets, and NS_LOG_FUNCTION.
bool ns3::BlockAckManager::ExistsAgreement | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) | const |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID. |
Checks if a block ack agreement exists with station addressed by recipient for tid tid.
Definition at line 84 of file block-ack-manager.cc.
References m_agreements, and NS_LOG_FUNCTION.
Referenced by GetNRetryNeededPackets(), and SwitchToBlockAckIfNeeded().
bool ns3::BlockAckManager::ExistsAgreementInState | ( | Mac48Address | recipient, |
uint8_t | tid, | ||
OriginatorBlockAckAgreement::State | state | ||
) | const |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID. |
state | The state for block ack agreement |
Checks if a block ack agreement with a state equals to state exists with station addressed by recipient for tid tid.
Definition at line 91 of file block-ack-manager.cc.
References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ns3::OriginatorBlockAckAgreement::INACTIVE, m_agreements, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::OriginatorBlockAckAgreement::PENDING, and ns3::OriginatorBlockAckAgreement::UNSUCCESSFUL.
Referenced by GetNextPacket(), NotifyGotBlockAck(), PeekNextPacketByTidAndAddress(), and SwitchToBlockAckIfNeeded().
uint32_t ns3::BlockAckManager::GetNBufferedPackets | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) | const |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID. |
Returns number of packets buffered for a specified agreement. This methods doesn't return number of buffered MPDUs but number of buffered MSDUs.
Definition at line 443 of file block-ack-manager.cc.
References m_agreements, and NS_LOG_FUNCTION.
Referenced by SwitchToBlockAckIfNeeded().
Ptr< const Packet > ns3::BlockAckManager::GetNextPacket | ( | WifiMacHeader & | hdr, |
bool | removePacket | ||
) |
hdr | 802.11 header of returned packet (if exists). |
removePacket | flag to indicate whether the packet should be removed from the queue. |
This methods returns a packet (if exists) indicated as not received in corresponding block ack bitmap.
Definition at line 253 of file block-ack-manager.cc.
References ns3::WifiMacHeader::BLOCK_ACK, CleanupBuffers(), ns3::Packet::Copy(), ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), ns3::WifiMacHeader::GetAddr1(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMacHeader::GetSequenceNumber(), ns3::WifiMacHeader::IsQosData(), m_agreements, m_retryPackets, ns3::WifiMacHeader::NORMAL_ACK, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::QosUtilsIsOldPacket(), ns3::WifiMacHeader::SetQosAckPolicy(), ns3::WifiMacHeader::SetRetry(), and SwitchToBlockAckIfNeeded().
uint32_t ns3::BlockAckManager::GetNRetryNeededPackets | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) | const |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID. |
Returns number of packets for a specific agreement that need retransmission. This method doesn't return number of MPDUs that need retransmission but number of MSDUs.
Definition at line 467 of file block-ack-manager.cc.
References ExistsAgreement(), m_retryPackets, NS_FATAL_ERROR, and NS_LOG_FUNCTION.
Referenced by NotifyMpduTransmission(), and ScheduleBlockAckReqIfNeeded().
uint16_t ns3::BlockAckManager::GetSeqNumOfNextRetryPacket | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) | const |
recipient | the destination address |
tid | the Traffic ID |
Returns the sequence number of the next retry packet for a specific agreement. If there are no packets that need retransmission for the specified agreement or the agreement doesn't exist the function returns 4096;
Definition at line 894 of file block-ack-manager.cc.
References m_retryPackets, NS_FATAL_ERROR, and NS_LOG_FUNCTION.
Referenced by NotifyMpduTransmission().
|
static |
Get the type ID.
Definition at line 60 of file block-ack-manager.cc.
References ns3::TypeId::SetParent().
bool ns3::BlockAckManager::HasBar | ( | Bar & | bar | ) |
Returns true if the BAR is scheduled.
Returns false otherwise.
bar |
Definition at line 423 of file block-ack-manager.cc.
References m_bars, and NS_LOG_FUNCTION.
bool ns3::BlockAckManager::HasPackets | ( | void | ) | const |
Returns true if there are packets that need of retransmission or at least a BAR is scheduled.
Returns false otherwise.
Definition at line 436 of file block-ack-manager.cc.
References m_bars, m_retryPackets, and NS_LOG_FUNCTION.
|
private |
Inactivity timeout function.
recipient | the recipient MAC address |
tid | Traffic ID |
Definition at line 696 of file block-ack-manager.cc.
References m_blockAckInactivityTimeout, and NS_LOG_FUNCTION.
Referenced by NotifyGotBlockAck(), and UpdateAgreement().
|
private |
item | Insert item in retransmission queue. This method ensures packets are retransmitted in the correct order. |
Definition at line 926 of file block-ack-manager.cc.
References m_retryPackets, and NS_LOG_INFO.
Referenced by NotifyGotBlockAck().
bool ns3::BlockAckManager::NeedBarRetransmission | ( | uint8_t | tid, |
uint16_t | seqNumber, | ||
Mac48Address | recipient | ||
) |
This function returns true if the lifetime of the packets a BAR refers to didn't expire yet else it returns false.
If it return false then the BAR will be discarded (i.e. will not be re-transmitted)
tid | Traffic ID |
seqNumber | sequence number |
recipient | MAC address |
Definition at line 777 of file block-ack-manager.cc.
References CleanupBuffers(), m_agreements, and NS_ASSERT.
void ns3::BlockAckManager::NotifyAgreementEstablished | ( | Mac48Address | recipient, |
uint8_t | tid, | ||
uint16_t | startingSeq | ||
) |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID of transmitted packet. |
startingSeq | starting sequence field |
Puts corresponding agreement in established state and updates number of packets and starting sequence field. Invoked typically after a block ack refresh.
Definition at line 703 of file block-ack-manager.cc.
References ns3::OriginatorBlockAckAgreement::ESTABLISHED, m_agreements, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by SwitchToBlockAckIfNeeded().
void ns3::BlockAckManager::NotifyAgreementUnsuccessful | ( | Mac48Address | recipient, |
uint8_t | tid | ||
) |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID of transmitted packet. |
Marks an agreement as unsuccessful. This happens if recipient station reject block ack setup by an ADDBA Response frame with a failure status code. For now we assume that every QoS station accepts a block ack setup.
Definition at line 713 of file block-ack-manager.cc.
References m_agreements, NS_ASSERT, NS_LOG_FUNCTION, and ns3::OriginatorBlockAckAgreement::UNSUCCESSFUL.
void ns3::BlockAckManager::NotifyGotBlockAck | ( | const CtrlBAckResponseHeader * | blockAck, |
Mac48Address | recipient, | ||
double | rxSnr, | ||
WifiMode | txMode, | ||
double | dataSnr | ||
) |
blockAck | The received block ack frame. |
recipient | Sender of block ack frame. |
rxSnr | received SNR of the block ack frame itself |
txMode | mode of block ack frame. |
dataSnr | data SNR reported by remote station |
Invoked upon receipt of a block ack frame. Typically, this function, is called by ns3::QosTxop object. Performs a check on which MPDUs, previously sent with ack policy set to Block Ack, were correctly received by the recipient. An acknowledged MPDU is removed from the buffer, retransmitted otherwise.
Definition at line 536 of file block-ack-manager.cc.
References AlreadyExists(), ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), ns3::MacTxMiddle::GetNextSeqNumberByTidAndAddress(), ns3::CtrlBAckResponseHeader::GetTidInfo(), ns3::WifiMode::GetUniqueName(), InactivityTimeout(), InsertInRetryQueue(), ns3::CtrlBAckResponseHeader::IsBasic(), ns3::CtrlBAckResponseHeader::IsCompressed(), ns3::CtrlBAckResponseHeader::IsFragmentReceived(), ns3::CtrlBAckResponseHeader::IsMultiTid(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), ns3::CtrlBAckResponseHeader::IsPacketReceived(), m_agreements, m_stationManager, m_txFailedCallback, m_txMiddle, m_txOkCallback, ns3::MicroSeconds(), NS_FATAL_ERROR, NS_LOG_FUNCTION, RemoveFromRetryQueue(), ns3::WifiRemoteStationManager::ReportAmpduTxStatus(), ns3::Simulator::Schedule(), SwitchToBlockAckIfNeeded(), and timeout.
void ns3::BlockAckManager::NotifyMpduTransmission | ( | Mac48Address | recipient, |
uint8_t | tid, | ||
uint16_t | nextSeqNumber, | ||
WifiMacHeader::QosAckPolicy | policy | ||
) |
recipient | Address of peer station involved in block ack mechanism. |
tid | Traffic ID of transmitted packet. |
nextSeqNumber | Sequence number of the next packet that would be trasmitted by QosTxop. |
policy | ack policy of the transmitted packet. |
This method is typically invoked by ns3::QosTxop object every time that a MPDU with ack policy subfield in Qos Control field set to Block Ack is transmitted. The nextSeqNumber parameter is used to block transmission of packets that are out of bitmap.
Definition at line 725 of file block-ack-manager.cc.
References ns3::WifiMacHeader::BLOCK_ACK, GetNRetryNeededPackets(), GetSeqNumOfNextRetryPacket(), m_agreements, m_bars, NS_ASSERT, NS_LOG_FUNCTION, and ScheduleBlockAckReqIfNeeded().
|
private |
Ptr< const Packet > ns3::BlockAckManager::PeekNextPacketByTidAndAddress | ( | WifiMacHeader & | hdr, |
uint8_t | tid, | ||
Time * | timestamp | ||
) |
Peek in retransmit queue and get the next packet having address indicated by type equals to addr, and tid equals to tid.
This method doesn't remove the packet from this queue.
hdr | wifi mac header |
tid | Traffic ID |
timestamp | timestamp |
Definition at line 339 of file block-ack-manager.cc.
References ns3::WifiMacHeader::BLOCK_ACK, CleanupBuffers(), ns3::Packet::Copy(), ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), ns3::WifiMacHeader::GetAddr1(), ns3::WifiMacHeader::GetSequenceNumber(), m_agreements, m_retryPackets, ns3::WifiMacHeader::NORMAL_ACK, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::QosUtilsIsOldPacket(), ns3::WifiMacHeader::SetQosAckPolicy(), ns3::WifiMacHeader::SetRetry(), and SwitchToBlockAckIfNeeded().
|
private |
Remove items from retransmission queue.
This method should be called when packets are acknowledged.
address | recipient mac address of the packet to be removed |
tid | Traffic ID of the packet to be removed |
seq | sequence number of the packet to be removed |
Definition at line 808 of file block-ack-manager.cc.
References first::address, and m_retryPackets.
Referenced by CleanupBuffers(), and NotifyGotBlockAck().
bool ns3::BlockAckManager::RemovePacket | ( | uint8_t | tid, |
Mac48Address | recipient, | ||
uint16_t | seqnumber | ||
) |
Remove a packet after you peek in the queue and get it.
tid | the Traffic ID |
recipient | the destination address |
seqnumber | sequence number |
Definition at line 399 of file block-ack-manager.cc.
References ns3::WifiMacHeader::GetSequenceNumber(), m_agreements, m_retryPackets, NS_FATAL_ERROR, and NS_LOG_DEBUG.
|
private |
recipient | |
tid |
Checks if all packets, for which a block ack agreement was established or refreshed, have been transmitted. If yes, adds a pair in m_bAckReqs to indicate that at next channel access a block ack request (for established agreement recipient,tid) is needed.
Definition at line 655 of file block-ack-manager.cc.
References ns3::Packet::AddHeader(), ns3::BASIC_BLOCK_ACK, ns3::OriginatorBlockAckAgreement::CompleteExchange(), ns3::COMPRESSED_BLOCK_ACK, GetNRetryNeededPackets(), ns3::BlockAckAgreement::GetStartingSequence(), ns3::BlockAckAgreement::GetTid(), m_agreements, m_blockAckType, m_queue, ns3::MULTI_TID_BLOCK_ACK, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::CtrlBAckRequestHeader::SetStartingSequence(), ns3::CtrlBAckRequestHeader::SetTidInfo(), and ns3::CtrlBAckRequestHeader::SetType().
Referenced by NotifyMpduTransmission().
void ns3::BlockAckManager::SetBlockAckInactivityCallback | ( | Callback< void, Mac48Address, uint8_t, bool > | callback | ) |
Set block ack inactivity callback.
callback | the block ack inactivity callback function |
Definition at line 866 of file block-ack-manager.cc.
References m_blockAckInactivityTimeout, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetBlockAckThreshold | ( | uint8_t | nPackets | ) |
nPackets | Minimum number of packets for use of block ack. |
Upon receipt of a block ack frame, if total number of packets (packets in WifiMacQueue and buffered packets) is greater of nPackets, they are transmitted using block ack mechanism.
Definition at line 502 of file block-ack-manager.cc.
References m_blockAckThreshold, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetBlockAckType | ( | BlockAckType | bAckType | ) |
bAckType | Type of block ack |
See ctrl-headers.h for more details.
Definition at line 648 of file block-ack-manager.cc.
References m_blockAckType, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetBlockDestinationCallback | ( | Callback< void, Mac48Address, uint8_t > | callback | ) |
Set block destination callback.
callback | the block destination callback |
Definition at line 873 of file block-ack-manager.cc.
References m_blockPackets, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetMaxPacketDelay | ( | Time | maxDelay | ) |
maxDelay | Max delay for a buffered packet. |
This method is always called by ns3::WifiMacQueue object and sets max delay equals to ns3:WifiMacQueue delay value.
Definition at line 859 of file block-ack-manager.cc.
References m_maxDelay, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetQueue | ( | const Ptr< WifiMacQueue > | queue | ) |
queue | The WifiMacQueue object. |
Definition at line 753 of file block-ack-manager.cc.
References m_queue, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetTxFailedCallback | ( | TxFailed | callback | ) |
callback | the callback to invoke when a packet transmission was completed unsuccessfully. |
Definition at line 920 of file block-ack-manager.cc.
References m_txFailedCallback.
void ns3::BlockAckManager::SetTxMiddle | ( | const Ptr< MacTxMiddle > | txMiddle | ) |
Set the MacTxMiddle.
txMiddle | the MacTxMiddle |
Definition at line 887 of file block-ack-manager.cc.
References m_txMiddle, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetTxOkCallback | ( | TxOk | callback | ) |
callback | the callback to invoke when a packet transmission was completed successfully. |
Definition at line 914 of file block-ack-manager.cc.
References m_txOkCallback.
void ns3::BlockAckManager::SetUnblockDestinationCallback | ( | Callback< void, Mac48Address, uint8_t > | callback | ) |
Set unblock destination callback.
callback | the unblock destination callback |
Definition at line 880 of file block-ack-manager.cc.
References m_unblockPackets, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::SetWifiRemoteStationManager | ( | const Ptr< WifiRemoteStationManager > | manager | ) |
Set up WifiRemoteStationManager associated with this BlockAckManager.
manager | WifiRemoteStationManager associated with this BlockAckManager |
Definition at line 509 of file block-ack-manager.cc.
References m_stationManager, and NS_LOG_FUNCTION.
void ns3::BlockAckManager::StorePacket | ( | Ptr< const Packet > | packet, |
const WifiMacHeader & | hdr, | ||
Time | tStamp | ||
) |
packet | Packet to store. |
hdr | 802.11 header for packet. |
tStamp | time stamp for packet |
Stores packet for a possible future retransmission. Retransmission occurs if the packet, in a block ack frame, is indicated by recipient as not received.
Definition at line 213 of file block-ack-manager.cc.
References ns3::WifiMacHeader::GetAddr1(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMacHeader::GetSequenceNumber(), ns3::WifiMacHeader::IsQosData(), m_agreements, NS_ASSERT, and NS_LOG_FUNCTION.
bool ns3::BlockAckManager::SwitchToBlockAckIfNeeded | ( | Mac48Address | recipient, |
uint8_t | tid, | ||
uint16_t | startingSeq | ||
) |
recipient | the destination address |
tid | the Traffic ID |
startingSeq |
Checks if there are in the queue other packets that could be send under block ack. If yes adds these packets in current block ack exchange. However, number of packets exchanged in the current block ack, will not exceed the value of BufferSize in the corresponding OriginatorBlockAckAgreement object.
Definition at line 760 of file block-ack-manager.cc.
References ExistsAgreement(), ExistsAgreementInState(), GetNBufferedPackets(), m_blockAckThreshold, m_queue, NotifyAgreementEstablished(), NS_ASSERT, NS_LOG_FUNCTION, ns3::OriginatorBlockAckAgreement::PENDING, and ns3::OriginatorBlockAckAgreement::UNSUCCESSFUL.
Referenced by GetNextPacket(), NotifyGotBlockAck(), and PeekNextPacketByTidAndAddress().
void ns3::BlockAckManager::UpdateAgreement | ( | const MgtAddBaResponseHeader * | respHdr, |
Mac48Address | recipient | ||
) |
respHdr | Relative Add block ack response (action frame). |
recipient | Address of peer station involved in block ack mechanism. |
Invoked upon receipt of a ADDBA response frame from recipient.
Definition at line 180 of file block-ack-manager.cc.
References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ns3::MgtAddBaResponseHeader::GetBufferSize(), ns3::MgtAddBaResponseHeader::GetTid(), ns3::BlockAckAgreement::GetTimeout(), ns3::MgtAddBaResponseHeader::GetTimeout(), InactivityTimeout(), ns3::MgtAddBaResponseHeader::IsAmsduSupported(), ns3::MgtAddBaResponseHeader::IsImmediateBlockAck(), m_agreements, ns3::BlockAckAgreement::m_inactivityEvent, m_unblockPackets, ns3::MicroSeconds(), NS_LOG_FUNCTION, ns3::Simulator::Schedule(), ns3::BlockAckAgreement::SetAmsduSupport(), ns3::BlockAckAgreement::SetBufferSize(), ns3::BlockAckAgreement::SetDelayedBlockAck(), ns3::BlockAckAgreement::SetImmediateBlockAck(), ns3::OriginatorBlockAckAgreement::SetState(), ns3::BlockAckAgreement::SetTimeout(), and timeout.
|
private |
address
Definition at line 499 of file block-ack-manager.h.
|
private |
This data structure contains, for each block ack agreement (recipient, tid), a set of packets for which an ack by block ack is requested.
Every packet or fragment indicated as correctly received in block ack frame is erased from this data structure. Pushed back in retransmission queue otherwise.
Definition at line 485 of file block-ack-manager.h.
Referenced by CleanupBuffers(), CompleteAmpduExchange(), CreateAgreement(), DestroyAgreement(), ExistsAgreement(), ExistsAgreementInState(), GetNBufferedPackets(), GetNextPacket(), NeedBarRetransmission(), NotifyAgreementEstablished(), NotifyAgreementUnsuccessful(), NotifyGotBlockAck(), NotifyMpduTransmission(), PeekNextPacketByTidAndAddress(), RemovePacket(), ScheduleBlockAckReqIfNeeded(), StorePacket(), UpdateAgreement(), and ~BlockAckManager().
list of BARs
Definition at line 493 of file block-ack-manager.h.
Referenced by DestroyAgreement(), HasBar(), HasPackets(), and NotifyMpduTransmission().
|
private |
block ack inactivity timeout callback
Definition at line 501 of file block-ack-manager.h.
Referenced by InactivityTimeout(), and SetBlockAckInactivityCallback().
|
private |
block ack threshold
Definition at line 495 of file block-ack-manager.h.
Referenced by SetBlockAckThreshold(), and SwitchToBlockAckIfNeeded().
|
private |
block ack type
Definition at line 496 of file block-ack-manager.h.
Referenced by ScheduleBlockAckReqIfNeeded(), and SetBlockAckType().
|
private |
block packets callback
Definition at line 502 of file block-ack-manager.h.
Referenced by CreateAgreement(), and SetBlockDestinationCallback().
|
private |
maximum delay
Definition at line 497 of file block-ack-manager.h.
Referenced by CleanupBuffers(), and SetMaxPacketDelay().
|
private |
queue
Definition at line 500 of file block-ack-manager.h.
Referenced by ScheduleBlockAckReqIfNeeded(), SetQueue(), SwitchToBlockAckIfNeeded(), and ~BlockAckManager().
|
private |
This list contains all iterators to stored packets that need to be retransmitted.
A packet needs retransmission if it's indicated as not correctly received in a block ack frame.
Definition at line 492 of file block-ack-manager.h.
Referenced by AlreadyExists(), DestroyAgreement(), GetNextPacket(), GetNRetryNeededPackets(), GetSeqNumOfNextRetryPacket(), HasPackets(), InsertInRetryQueue(), PeekNextPacketByTidAndAddress(), RemoveFromRetryQueue(), RemovePacket(), and ~BlockAckManager().
|
private |
the station manager
Definition at line 506 of file block-ack-manager.h.
Referenced by CreateAgreement(), NotifyGotBlockAck(), and SetWifiRemoteStationManager().
|
private |
transmit failed callback
Definition at line 505 of file block-ack-manager.h.
Referenced by NotifyGotBlockAck(), and SetTxFailedCallback().
|
private |
the MacTxMiddle
Definition at line 498 of file block-ack-manager.h.
Referenced by NotifyGotBlockAck(), and SetTxMiddle().
|
private |
transmit ok callback
Definition at line 504 of file block-ack-manager.h.
Referenced by NotifyGotBlockAck(), and SetTxOkCallback().
|
private |
unblock packets callback
Definition at line 503 of file block-ack-manager.h.
Referenced by SetUnblockDestinationCallback(), and UpdateAgreement().