INET Framework for OMNeT++/OMNEST
inet::ieee80211::BlockAckRecord Class Reference

#include <BlockAckRecord.h>

Public Member Functions

 BlockAckRecord (MacAddress originatorAddress, Tid tid)
 
virtual ~BlockAckRecord ()
 
void blockAckPolicyFrameReceived (const Ptr< const Ieee80211DataHeader > &header)
 
bool getAckState (SequenceNumberCyclic sequenceNumber, FragmentNumber fragmentNumber)
 
void removeAckStates (SequenceNumberCyclic sequenceNumber)
 
MacAddress getOriginatorAddress ()
 
Tid getTid ()
 

Protected Attributes

MacAddress originatorAddress = MacAddress::UNSPECIFIED_ADDRESS
 
Tid tid = -1
 
std::map< SequenceControlField, bool > acknowledgmentState
 

Constructor & Destructor Documentation

◆ BlockAckRecord()

inet::ieee80211::BlockAckRecord::BlockAckRecord ( MacAddress  originatorAddress,
Tid  tid 
)
15  :
17  tid(tid)
18 {
19 }

◆ ~BlockAckRecord()

virtual inet::ieee80211::BlockAckRecord::~BlockAckRecord ( )
inlinevirtual
31 {}

Member Function Documentation

◆ blockAckPolicyFrameReceived()

void inet::ieee80211::BlockAckRecord::blockAckPolicyFrameReceived ( const Ptr< const Ieee80211DataHeader > &  header)
22 {
23  SequenceNumberCyclic sequenceNumber = header->getSequenceNumber();
24  FragmentNumber fragmentNumber = header->getFragmentNumber();
25  acknowledgmentState[SequenceControlField(sequenceNumber.get(), fragmentNumber)] = true;
26 }

Referenced by inet::ieee80211::RecipientBlockAckAgreement::blockAckPolicyFrameReceived().

◆ getAckState()

bool inet::ieee80211::BlockAckRecord::getAckState ( SequenceNumberCyclic  sequenceNumber,
FragmentNumber  fragmentNumber 
)
29 {
30  // The status of MPDUs that are considered “old” and prior to the sequence number
31  // range for which the receiver maintains status shall be reported as successfully
32  // received (i.e., the corresponding bit in the bitmap shall be set to 1).
33  if (containsKey(acknowledgmentState, SequenceControlField(sequenceNumber.get(), fragmentNumber))) {
34  return true;
35  }
36  else if (acknowledgmentState.size() == 0) {
37  return true; // TODO old?
38  }
39  else {
40  auto earliest = acknowledgmentState.begin();
41  return SequenceNumberCyclic(earliest->first.getSequenceNumber()) > sequenceNumber; // old = true
42  }
43 }

Referenced by inet::ieee80211::RecipientBlockAckProcedure::buildBlockAck().

◆ getOriginatorAddress()

MacAddress inet::ieee80211::BlockAckRecord::getOriginatorAddress ( )
inline

◆ getTid()

Tid inet::ieee80211::BlockAckRecord::getTid ( )
inline

◆ removeAckStates()

void inet::ieee80211::BlockAckRecord::removeAckStates ( SequenceNumberCyclic  sequenceNumber)
46 {
47  auto it = acknowledgmentState.begin();
48  while (it != acknowledgmentState.end()) {
49  if (SequenceNumberCyclic(it->first.getSequenceNumber()) < sequenceNumber)
50  it = acknowledgmentState.erase(it);
51  else
52  it++;
53  }
54 }

Referenced by inet::ieee80211::BlockAckReordering::passedUp().

Member Data Documentation

◆ acknowledgmentState

std::map<SequenceControlField, bool> inet::ieee80211::BlockAckRecord::acknowledgmentState
protected

◆ originatorAddress

MacAddress inet::ieee80211::BlockAckRecord::originatorAddress = MacAddress::UNSPECIFIED_ADDRESS
protected

◆ tid

Tid inet::ieee80211::BlockAckRecord::tid = -1
protected

The documentation for this class was generated from the following files:
inet::ieee80211::FragmentNumber
int8_t FragmentNumber
Definition: Ieee80211Defs.h:16
inet::ieee80211::BlockAckRecord::originatorAddress
MacAddress originatorAddress
Definition: BlockAckRecord.h:25
inet::ieee80211::BlockAckRecord::acknowledgmentState
std::map< SequenceControlField, bool > acknowledgmentState
Definition: BlockAckRecord.h:27
inet::ieee80211::BlockAckRecord::tid
Tid tid
Definition: BlockAckRecord.h:26
inet::containsKey
bool containsKey(const std::map< K, V, _C > &m, const Tk &a)
Definition: stlutils.h:80