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

#include <OriginatorQoSAckPolicy.h>

Inheritance diagram for inet::ieee80211::OriginatorQoSAckPolicy:
inet::ieee80211::ModeSetListener inet::ieee80211::IOriginatorQoSAckPolicy

Public Member Functions

virtual bool isAckNeeded (Ieee80211ManagementFrame *frame) const override
 
virtual AckPolicy computeAckPolicy (Ieee80211DataFrame *frame, OriginatorBlockAckAgreement *agreement) const override
 
virtual bool isBlockAckPolicyEligibleFrame (Ieee80211DataFrame *frame) const override
 
virtual bool isBlockAckReqNeeded (InProgressFrames *inProgressFrames, TxopProcedure *txopProcedure) const override
 
virtual std::tuple< MACAddress, SequenceNumber, TidcomputeBlockAckReqParameters (InProgressFrames *inProgressFrames, TxopProcedure *txopProcedure) const override
 
virtual simtime_t getAckTimeout (Ieee80211DataOrMgmtFrame *dataOrMgmtFrame) const override
 
virtual simtime_t getBlockAckTimeout (Ieee80211BlockAckReq *blockAckReq) const override
 
- Public Member Functions inherited from inet::ieee80211::IOriginatorQoSAckPolicy
virtual ~IOriginatorQoSAckPolicy ()
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual bool checkAgreementPolicy (Ieee80211DataFrame *frame, OriginatorBlockAckAgreement *agreement) const
 
virtual std::map< MACAddress, std::vector< Ieee80211DataFrame * > > getOutstandingFramesPerReceiver (InProgressFrames *inProgressFrames) const
 
virtual int computeStartingSequenceNumber (const std::vector< Ieee80211DataFrame * > &outstandingFrames) const
 
virtual bool isCompressedBlockAckReq (const std::vector< Ieee80211DataFrame * > &outstandingFrames, int startingSequenceNumber) const
 
- Protected Member Functions inherited from inet::ieee80211::ModeSetListener
virtual void receiveSignal (cComponent *source, simsignal_t signalID, cObject *obj, cObject *details) override
 

Protected Attributes

IQoSRateSelectionrateSelection = nullptr
 
int maxBlockAckPolicyFrameLength = -1
 
int blockAckReqTreshold = -1
 
simtime_t blockAckTimeout = -1
 
simtime_t ackTimeout = -1
 
- Protected Attributes inherited from inet::ieee80211::ModeSetListener
Ieee80211ModeSetmodeSet = nullptr
 

Member Function Documentation

bool inet::ieee80211::OriginatorQoSAckPolicy::checkAgreementPolicy ( Ieee80211DataFrame frame,
OriginatorBlockAckAgreement agreement 
) const
protectedvirtual

Referenced by computeAckPolicy().

127 {
128  bool bufferFull = agreement->getBufferSize() == agreement->getNumSentBaPolicyFrames();
129  bool aMsduOk = agreement->getIsAMsduSupported() || !frame->getAMsduPresent();
130  // TODO: bool baPolicy = agreement->getIsDelayedBlockAckPolicySupported() || !frame->getAckPolicy();
131  return !bufferFull && aMsduOk && (frame->getSequenceNumber() >= agreement->getStartingSequenceNumber()); // TODO: && baPolicy
132 }
virtual bool getIsAMsduSupported() const
Definition: OriginatorBlockAckAgreement.h:60
virtual int getNumSentBaPolicyFrames() const
Definition: OriginatorBlockAckAgreement.h:65
virtual uint16_t getSequenceNumber() const
virtual bool getAMsduPresent() const
virtual SequenceNumber getStartingSequenceNumber()
Definition: OriginatorBlockAckAgreement.h:57
virtual int getBufferSize() const
Definition: OriginatorBlockAckAgreement.h:56
AckPolicy inet::ieee80211::OriginatorQoSAckPolicy::computeAckPolicy ( Ieee80211DataFrame frame,
OriginatorBlockAckAgreement agreement 
) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

108 {
109  if (agreement == nullptr)
110  return AckPolicy::NORMAL_ACK;
111  if (agreement->getIsAddbaResponseReceived() && isBlockAckPolicyEligibleFrame(frame)) {
112  if (checkAgreementPolicy(frame, agreement))
113  return AckPolicy::BLOCK_ACK;
114  else
115  return AckPolicy::NORMAL_ACK;
116  }
117  else
118  return AckPolicy::NORMAL_ACK;
119 }
Definition: Ieee80211Frame_m.h:142
virtual bool getIsAddbaResponseReceived() const
Definition: OriginatorBlockAckAgreement.h:58
virtual bool checkAgreementPolicy(Ieee80211DataFrame *frame, OriginatorBlockAckAgreement *agreement) const
Definition: OriginatorQoSAckPolicy.cc:126
Definition: Ieee80211Frame_m.h:139
virtual bool isBlockAckPolicyEligibleFrame(Ieee80211DataFrame *frame) const override
Definition: OriginatorQoSAckPolicy.cc:121
std::tuple< MACAddress, SequenceNumber, Tid > inet::ieee80211::OriginatorQoSAckPolicy::computeBlockAckReqParameters ( InProgressFrames inProgressFrames,
TxopProcedure txopProcedure 
) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

89 {
90  auto outstandingFramesPerReceiver = getOutstandingFramesPerReceiver(inProgressFrames);
91  for (auto outstandingFrames : outstandingFramesPerReceiver) {
92  if ((int)outstandingFrames.second.size() >= blockAckReqTreshold) {
93  auto largestOutstandingFrames = outstandingFramesPerReceiver.begin();
94  for (auto it = outstandingFramesPerReceiver.begin(); it != outstandingFramesPerReceiver.end(); it++) {
95  if (it->second.size() > largestOutstandingFrames->second.size())
96  largestOutstandingFrames = it;
97  }
98  MACAddress receiverAddress = largestOutstandingFrames->first;
99  SequenceNumber startingSequenceNumber = computeStartingSequenceNumber(largestOutstandingFrames->second);
100  Tid tid = largestOutstandingFrames->second.at(0)->getTid();
101  return std::make_tuple(receiverAddress, startingSequenceNumber, tid);
102  }
103  }
104  return std::make_tuple(MACAddress::UNSPECIFIED_ADDRESS, -1, -1);
105 }
int8_t Tid
Definition: Ieee80211Defs.h:28
int blockAckReqTreshold
Definition: OriginatorQoSAckPolicy.h:34
virtual std::map< MACAddress, std::vector< Ieee80211DataFrame * > > getOutstandingFramesPerReceiver(InProgressFrames *inProgressFrames) const
Definition: OriginatorQoSAckPolicy.cc:43
virtual int computeStartingSequenceNumber(const std::vector< Ieee80211DataFrame * > &outstandingFrames) const
Definition: OriginatorQoSAckPolicy.cc:53
int16_t SequenceNumber
Definition: Ieee80211Defs.h:26
static const MACAddress UNSPECIFIED_ADDRESS
The unspecified MAC address, 00:00:00:00:00:00.
Definition: MACAddress.h:57
int inet::ieee80211::OriginatorQoSAckPolicy::computeStartingSequenceNumber ( const std::vector< Ieee80211DataFrame * > &  outstandingFrames) const
protectedvirtual

Referenced by computeBlockAckReqParameters().

54 {
55  ASSERT(outstandingFrames.size() > 0);
56  int startingSequenceNumber = outstandingFrames[0]->getSequenceNumber();
57  for (int i = 1; i < (int)outstandingFrames.size(); i++) {
58  int seqNum = outstandingFrames[i]->getSequenceNumber();
59  if (seqNum < startingSequenceNumber)
60  startingSequenceNumber = seqNum;
61  }
62  return startingSequenceNumber;
63 }
simtime_t inet::ieee80211::OriginatorQoSAckPolicy::getAckTimeout ( Ieee80211DataOrMgmtFrame dataOrMgmtFrame) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

142 {
144 }
simtime_t getSlotTime() const
Definition: Ieee80211ModeSet.h:78
IQoSRateSelection * rateSelection
Definition: OriginatorQoSAckPolicy.h:32
Ieee80211ModeSet * modeSet
Definition: ModeSetListener.h:31
virtual const IIeee80211Mode * computeResponseAckFrameMode(Ieee80211DataOrMgmtFrame *dataOrMgmtFrame)=0
simtime_t getSifsTime() const
Definition: Ieee80211ModeSet.h:77
virtual const simtime_t getPhyRxStartDelay() const =0
simtime_t ackTimeout
Definition: OriginatorQoSAckPolicy.h:37
simtime_t inet::ieee80211::OriginatorQoSAckPolicy::getBlockAckTimeout ( Ieee80211BlockAckReq blockAckReq) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

147 {
149 }
simtime_t getSlotTime() const
Definition: Ieee80211ModeSet.h:78
IQoSRateSelection * rateSelection
Definition: OriginatorQoSAckPolicy.h:32
Ieee80211ModeSet * modeSet
Definition: ModeSetListener.h:31
simtime_t getSifsTime() const
Definition: Ieee80211ModeSet.h:77
virtual const simtime_t getPhyRxStartDelay() const =0
simtime_t blockAckTimeout
Definition: OriginatorQoSAckPolicy.h:36
virtual const IIeee80211Mode * computeResponseBlockAckFrameMode(Ieee80211BlockAckReq *blockAckReq)=0
std::map< MACAddress, std::vector< Ieee80211DataFrame * > > inet::ieee80211::OriginatorQoSAckPolicy::getOutstandingFramesPerReceiver ( InProgressFrames inProgressFrames) const
protectedvirtual

Referenced by computeBlockAckReqParameters(), and isBlockAckReqNeeded().

44 {
45  auto outstandingFrames = inProgressFrames->getOutstandingFrames();
46  std::map<MACAddress, std::vector<Ieee80211DataFrame*>> outstandingFramesPerReceiver;
47  for (auto frame : outstandingFrames)
48  outstandingFramesPerReceiver[frame->getReceiverAddress()].push_back(frame);
49  return outstandingFramesPerReceiver;
50 }
virtual std::vector< Ieee80211DataFrame * > getOutstandingFrames()
Definition: InProgressFrames.cc:113
void inet::ieee80211::OriginatorQoSAckPolicy::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::ieee80211::ModeSetListener.

27 {
29  if (stage == INITSTAGE_LOCAL) {
30  rateSelection = check_and_cast<IQoSRateSelection*>(getModuleByPath(par("rateSelectionModule")));
31  maxBlockAckPolicyFrameLength = par("maxBlockAckPolicyFrameLength");
32  blockAckReqTreshold = par("blockAckReqTreshold");
33  blockAckTimeout = par("blockAckTimeout");
34  ackTimeout = par("ackTimeout");
35  }
36 }
int maxBlockAckPolicyFrameLength
Definition: OriginatorQoSAckPolicy.h:33
int blockAckReqTreshold
Definition: OriginatorQoSAckPolicy.h:34
IQoSRateSelection * rateSelection
Definition: OriginatorQoSAckPolicy.h:32
Abstract interface for rate selection.
Definition: IQoSRateSelection.h:36
Local initializations.
Definition: InitStages.h:35
virtual void initialize(int stage) override
Definition: ModeSetListener.cc:25
simtime_t blockAckTimeout
Definition: OriginatorQoSAckPolicy.h:36
simtime_t ackTimeout
Definition: OriginatorQoSAckPolicy.h:37
bool inet::ieee80211::OriginatorQoSAckPolicy::isAckNeeded ( Ieee80211ManagementFrame frame) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

39 {
40  return !frame->getReceiverAddress().isMulticast();
41 }
virtual MACAddress & getReceiverAddress()
bool isMulticast() const
Returns true if this is a multicast logical address (first byte&#39;s lsb is 1).
Definition: MACAddress.h:146
bool inet::ieee80211::OriginatorQoSAckPolicy::isBlockAckPolicyEligibleFrame ( Ieee80211DataFrame frame) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

Referenced by computeAckPolicy().

122 {
123  return frame->getType() == ST_DATA_WITH_QOS && frame->getByteLength() < maxBlockAckPolicyFrameLength;
124 }
int maxBlockAckPolicyFrameLength
Definition: OriginatorQoSAckPolicy.h:33
virtual short getType() const
Definition: Ieee80211Frame_m.h:117
bool inet::ieee80211::OriginatorQoSAckPolicy::isBlockAckReqNeeded ( InProgressFrames inProgressFrames,
TxopProcedure txopProcedure 
) const
overridevirtual

Implements inet::ieee80211::IOriginatorQoSAckPolicy.

78 {
79  auto outstandingFramesPerReceiver = getOutstandingFramesPerReceiver(inProgressFrames);
80  for (auto outstandingFrames : outstandingFramesPerReceiver) {
81  if ((int)outstandingFrames.second.size() >= blockAckReqTreshold)
82  return true;
83  }
84  return false;
85 }
int blockAckReqTreshold
Definition: OriginatorQoSAckPolicy.h:34
virtual std::map< MACAddress, std::vector< Ieee80211DataFrame * > > getOutstandingFramesPerReceiver(InProgressFrames *inProgressFrames) const
Definition: OriginatorQoSAckPolicy.cc:43
bool inet::ieee80211::OriginatorQoSAckPolicy::isCompressedBlockAckReq ( const std::vector< Ieee80211DataFrame * > &  outstandingFrames,
int  startingSequenceNumber 
) const
protectedvirtual
66 {
67  // The Compressed Bitmap subfield of the BA Control field or BAR Control field shall be set to 1 in all
68  // BlockAck and BlockAckReq frames sent from one HT STA to another HT STA and shall be set to 0 otherwise.
69  return false; // non-HT STA
70 // for (auto frame : outstandingFrames)
71 // if (frame->getSequenceNumber() >= startingSequenceNumber && frame->getFragmentNumber() > 0)
72 // return false;
73 // return true;
74 }
virtual int inet::ieee80211::OriginatorQoSAckPolicy::numInitStages ( ) const
inlineoverrideprotectedvirtual

Reimplemented from inet::ieee80211::ModeSetListener.

40 { return NUM_INIT_STAGES; }
The number of initialization stages.
Definition: InitStages.h:116

Member Data Documentation

simtime_t inet::ieee80211::OriginatorQoSAckPolicy::ackTimeout = -1
protected

Referenced by getAckTimeout(), and initialize().

int inet::ieee80211::OriginatorQoSAckPolicy::blockAckReqTreshold = -1
protected
simtime_t inet::ieee80211::OriginatorQoSAckPolicy::blockAckTimeout = -1
protected

Referenced by getBlockAckTimeout(), and initialize().

int inet::ieee80211::OriginatorQoSAckPolicy::maxBlockAckPolicyFrameLength = -1
protected
IQoSRateSelection* inet::ieee80211::OriginatorQoSAckPolicy::rateSelection = nullptr
protected

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