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

#include <RecipientQosAckPolicy.h>

Inheritance diagram for inet::ieee80211::RecipientQosAckPolicy:
inet::ieee80211::ModeSetListener inet::ieee80211::IRecipientAckPolicy inet::ieee80211::IRecipientQosAckPolicy

Public Member Functions

virtual bool isAckNeeded (const Ptr< const Ieee80211DataOrMgmtHeader > &header) const override
 
virtual bool isBlockAckNeeded (const Ptr< const Ieee80211BlockAckReq > &blockAckReq, RecipientBlockAckAgreement *agreement) const override
 
virtual simtime_t computeAckDurationField (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &header) const override
 
virtual simtime_t computeBasicBlockAckDurationField (Packet *packet, const Ptr< const Ieee80211BasicBlockAckReq > &basicBlockAckReq) const override
 
- Public Member Functions inherited from inet::ieee80211::IRecipientAckPolicy
virtual ~IRecipientAckPolicy ()
 
- Public Member Functions inherited from inet::ieee80211::IRecipientQosAckPolicy
virtual ~IRecipientQosAckPolicy ()
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
simtime_t computeBasicBlockAckDuration (Packet *packet, const Ptr< const Ieee80211BlockAckReq > &blockAckReq) const
 
simtime_t computeAckDuration (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader) 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
 
- Protected Attributes inherited from inet::ieee80211::ModeSetListener
physicallayer::Ieee80211ModeSetmodeSet = nullptr
 

Member Function Documentation

◆ computeAckDuration()

simtime_t inet::ieee80211::RecipientQosAckPolicy::computeAckDuration ( Packet packet,
const Ptr< const Ieee80211DataOrMgmtHeader > &  dataOrMgmtHeader 
) const
protected
31 {
32  return rateSelection->computeResponseAckFrameMode(packet, dataOrMgmtHeader)->getDuration(LENGTH_ACK);
33 }

Referenced by computeAckDurationField().

◆ computeAckDurationField()

simtime_t inet::ieee80211::RecipientQosAckPolicy::computeAckDurationField ( Packet packet,
const Ptr< const Ieee80211DataOrMgmtHeader > &  header 
) const
overridevirtual

Implements inet::ieee80211::IRecipientAckPolicy.

80 {
81  simtime_t duration = header->getDurationField() - modeSet->getSifsTime() - computeAckDuration(packet, header);
82  return duration < 0 ? 0 : duration;
83 }

◆ computeBasicBlockAckDuration()

simtime_t inet::ieee80211::RecipientQosAckPolicy::computeBasicBlockAckDuration ( Packet packet,
const Ptr< const Ieee80211BlockAckReq > &  blockAckReq 
) const
protected

◆ computeBasicBlockAckDurationField()

simtime_t inet::ieee80211::RecipientQosAckPolicy::computeBasicBlockAckDurationField ( Packet packet,
const Ptr< const Ieee80211BasicBlockAckReq > &  basicBlockAckReq 
) const
overridevirtual

Implements inet::ieee80211::IRecipientQosAckPolicy.

93 {
94  return basicBlockAckReq->getDurationField() - modeSet->getSifsTime() - computeBasicBlockAckDuration(packet, basicBlockAckReq);
95 }

◆ initialize()

void inet::ieee80211::RecipientQosAckPolicy::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::ieee80211::ModeSetListener.

18 {
20  if (stage == INITSTAGE_LOCAL) {
21  rateSelection = check_and_cast<IQosRateSelection *>(getModuleByPath(par("rateSelectionModule")));
22  }
23 }

◆ isAckNeeded()

bool inet::ieee80211::RecipientQosAckPolicy::isAckNeeded ( const Ptr< const Ieee80211DataOrMgmtHeader > &  header) const
overridevirtual

Implements inet::ieee80211::IRecipientAckPolicy.

41 {
42  // TODO add mgmt frame NoAck check
43  if (auto dataHeader = dynamicPtrCast<const Ieee80211DataHeader>(header))
44  if (dataHeader->getAckPolicy() != NORMAL_ACK)
45  return false;
46  return !header->getReceiverAddress().isMulticast();
47 }

◆ isBlockAckNeeded()

bool inet::ieee80211::RecipientQosAckPolicy::isBlockAckNeeded ( const Ptr< const Ieee80211BlockAckReq > &  blockAckReq,
RecipientBlockAckAgreement agreement 
) const
overridevirtual

Implements inet::ieee80211::IRecipientQosAckPolicy.

63 {
64  if (dynamicPtrCast<const Ieee80211BasicBlockAckReq>(blockAckReq)) {
65  return agreement != nullptr;
66  // TODO The Basic BlockAckReq frame shall be discarded if all MSDUs referenced by this
67  // frame have been discarded from the transmit buffer due to expiry of their lifetime limit.
68  }
69  else
70  throw cRuntimeError("Unsupported BlockAckReq");
71 }

◆ numInitStages()

virtual int inet::ieee80211::RecipientQosAckPolicy::numInitStages ( ) const
inlineoverrideprotectedvirtual

Reimplemented from inet::ieee80211::ModeSetListener.

25 { return NUM_INIT_STAGES; }

Member Data Documentation

◆ rateSelection

IQosRateSelection* inet::ieee80211::RecipientQosAckPolicy::rateSelection = nullptr
protected

The documentation for this class was generated from the following files:
inet::ieee80211::RecipientQosAckPolicy::rateSelection
IQosRateSelection * rateSelection
Definition: RecipientQosAckPolicy.h:22
inet::ieee80211::ModeSetListener::initialize
virtual void initialize(int stage) override
Definition: ModeSetListener.cc:17
inet::physicallayer::IIeee80211Mode::getDuration
virtual const simtime_t getDuration(b dataLength) const =0
inet::ieee80211::IQosRateSelection::computeResponseAckFrameMode
virtual const physicallayer::IIeee80211Mode * computeResponseAckFrameMode(Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader)=0
inet::ieee80211::LENGTH_ACK
const b LENGTH_ACK
Definition: Ieee80211Frame_m.h:94
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::ieee80211::RecipientQosAckPolicy::computeBasicBlockAckDuration
simtime_t computeBasicBlockAckDuration(Packet *packet, const Ptr< const Ieee80211BlockAckReq > &blockAckReq) const
Definition: RecipientQosAckPolicy.cc:25
inet::ieee80211::IQosRateSelection::computeResponseBlockAckFrameMode
virtual const physicallayer::IIeee80211Mode * computeResponseBlockAckFrameMode(Packet *packet, const Ptr< const Ieee80211BlockAckReq > &blockAckReq)=0
inet::physicallayer::Ieee80211ModeSet::getSifsTime
simtime_t getSifsTime() const
Definition: Ieee80211ModeSet.h:67
inet::ieee80211::ModeSetListener::modeSet
physicallayer::Ieee80211ModeSet * modeSet
Definition: ModeSetListener.h:19
inet::ieee80211::LENGTH_BASIC_BLOCKACK
const b LENGTH_BASIC_BLOCKACK
Definition: Ieee80211Frame_m.h:99
inet::ieee80211::RecipientQosAckPolicy::computeAckDuration
simtime_t computeAckDuration(Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader) const
Definition: RecipientQosAckPolicy.cc:30
inet::ieee80211::NORMAL_ACK
@ NORMAL_ACK
Definition: Ieee80211Frame_m.h:193