Classes | Public Member Functions

ns3::BlockAckManager Class Reference

Manages all block ack agreements for an originator station. More...

#include <block-ack-manager.h>

Collaboration diagram for ns3::BlockAckManager:
Collaboration graph
[legend]

List of all members.

Classes

struct  Item

Public Member Functions

bool ExistsAgreement (Mac48Address recipient, uint8_t tid) const
bool ExistsAgreementInState (Mac48Address recipient, uint8_t tid, enum OriginatorBlockAckAgreement::State state) const
void CreateAgreement (const MgtAddBaRequestHeader *reqHdr, Mac48Address recipient)
void DestroyAgreement (Mac48Address recipient, uint8_t tid)
void UpdateAgreement (const MgtAddBaResponseHeader *respHdr, Mac48Address recipient)
void StorePacket (Ptr< const Packet > packet, const WifiMacHeader &hdr, Time tStamp)
Ptr< const PacketGetNextPacket (WifiMacHeader &hdr)
bool HasBar (struct Bar &bar)
bool HasPackets (void) const
void NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient)
uint32_t GetNBufferedPackets (Mac48Address recipient, uint8_t tid) const
uint32_t GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const
void NotifyAgreementEstablished (Mac48Address recipient, uint8_t tid, uint16_t startingSeq)
void NotifyAgreementUnsuccessful (Mac48Address recipient, uint8_t tid)
void NotifyMpduTransmission (Mac48Address recipient, uint8_t tid)
void SetBlockAckThreshold (uint8_t nPackets)
void SetQueue (Ptr< WifiMacQueue > queue)
void SetTxMiddle (MacTxMiddle *txMiddle)
void SetBlockAckType (enum BlockAckType bAckType)
void TearDownBlockAck (Mac48Address recipient, uint8_t tid)
bool HasOtherFragments (uint16_t sequenceNumber) const
uint32_t GetNextPacketSize (void) const
void SetMaxPacketDelay (Time maxDelay)
void SetBlockAckInactivityCallback (Callback< void, Mac48Address, uint8_t, bool > callback)
void SetBlockDestinationCallback (Callback< void, Mac48Address, uint8_t > callback)
void SetUnblockDestinationCallback (Callback< void, Mac48Address, uint8_t > callback)
bool SwitchToBlockAckIfNeeded (Mac48Address recipient, uint8_t tid, uint16_t startingSeq)

Detailed Description

Manages all block ack agreements for an originator station.


Member Function Documentation

void ns3::BlockAckManager::CreateAgreement ( const MgtAddBaRequestHeader reqHdr,
Mac48Address  recipient 
)
Parameters:
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.

void ns3::BlockAckManager::DestroyAgreement ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters:
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.

bool ns3::BlockAckManager::ExistsAgreement ( Mac48Address  recipient,
uint8_t  tid 
) const
Parameters:
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.

bool ns3::BlockAckManager::ExistsAgreementInState ( Mac48Address  recipient,
uint8_t  tid,
enum OriginatorBlockAckAgreement::State  state 
) const
Parameters:
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.

uint32_t ns3::BlockAckManager::GetNBufferedPackets ( Mac48Address  recipient,
uint8_t  tid 
) const
Parameters:
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.

Ptr<const Packet> ns3::BlockAckManager::GetNextPacket ( WifiMacHeader hdr  ) 
Parameters:
hdr 802.11 header of returned packet (if exists).

This methods returns a packet (if exists) indicated as not received in corresponding block ack bitmap.

uint32_t ns3::BlockAckManager::GetNextPacketSize ( void   )  const

Returns size of the next packet that needs retransmission.

uint32_t ns3::BlockAckManager::GetNRetryNeededPackets ( Mac48Address  recipient,
uint8_t  tid 
) const
Parameters:
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 methods doesn't return number of MPDUs that need retransmission but number MSDUs.

bool ns3::BlockAckManager::HasOtherFragments ( uint16_t  sequenceNumber  )  const
Parameters:
sequenceNumber Sequence number of the packet which fragment is part of.

Returns true if another fragment with sequence number sequenceNumber is scheduled for retransmission.

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.

void ns3::BlockAckManager::NotifyAgreementEstablished ( Mac48Address  recipient,
uint8_t  tid,
uint16_t  startingSeq 
)
Parameters:
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.

void ns3::BlockAckManager::NotifyAgreementUnsuccessful ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters:
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 ADDBAResponse frame with a failure status code. FOr now we assume that every QoS station accepts a block ack setup.

void ns3::BlockAckManager::NotifyGotBlockAck ( const CtrlBAckResponseHeader blockAck,
Mac48Address  recipient 
)
Parameters:
blockAck The received block ack frame.
recipient Sender of block ack frame.

Invoked upon receipt of a block ack frame. Typically, this function, is called by ns3::EdcaTxopN 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.

void ns3::BlockAckManager::NotifyMpduTransmission ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters:
recipient Address of peer station involved in block ack mechanism.
tid Traffic ID of transmitted packet.

This methods is typically invoked by ns3::EdcaTxopN object every time that a MPDU with ack policy subfield in Qos Control field set to Block Ack is transmitted.

void ns3::BlockAckManager::SetBlockAckThreshold ( uint8_t  nPackets  ) 
Parameters:
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.

void ns3::BlockAckManager::SetBlockAckType ( enum BlockAckType  bAckType  ) 
Parameters:
bAckType Type of block ack

See ctrl-headers.h for more details.

void ns3::BlockAckManager::SetMaxPacketDelay ( Time  maxDelay  ) 
Parameters:
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.

void ns3::BlockAckManager::SetQueue ( Ptr< WifiMacQueue queue  ) 
Parameters:
queue The WifiMacQueue object.
void ns3::BlockAckManager::StorePacket ( Ptr< const Packet packet,
const WifiMacHeader hdr,
Time  tStamp 
)
Parameters:
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.

bool ns3::BlockAckManager::SwitchToBlockAckIfNeeded ( Mac48Address  recipient,
uint8_t  tid,
uint16_t  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.

void ns3::BlockAckManager::TearDownBlockAck ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters:
recipient Address of station involved in block ack mechanism.
tid Traffic ID.

This method is invoked by EdcaTxopN object upon receipt of a DELBA frame from recipient. The relative block ack agreement is destroyed.

void ns3::BlockAckManager::UpdateAgreement ( const MgtAddBaResponseHeader respHdr,
Mac48Address  recipient 
)
Parameters:
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.


The documentation for this class was generated from the following file: