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

#include <RecipientAckPolicy.h>

Inheritance diagram for inet::ieee80211::RecipientAckPolicy:
inet::ieee80211::ModeSetListener inet::ieee80211::IRecipientAckPolicy

Public Member Functions

virtual bool isAckNeeded (const Ptr< const Ieee80211DataOrMgmtHeader > &header) const override
 
virtual simtime_t computeAckDurationField (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &header) const override
 
- Public Member Functions inherited from inet::ieee80211::IRecipientAckPolicy
virtual ~IRecipientAckPolicy ()
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
simtime_t computeAckDuration (Packet *dataOrMgmtPacket, 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

IRateSelectionrateSelection = nullptr
 
- Protected Attributes inherited from inet::ieee80211::ModeSetListener
physicallayer::Ieee80211ModeSetmodeSet = nullptr
 

Member Function Documentation

◆ computeAckDuration()

simtime_t inet::ieee80211::RecipientAckPolicy::computeAckDuration ( Packet dataOrMgmtPacket,
const Ptr< const Ieee80211DataOrMgmtHeader > &  dataOrMgmtHeader 
) const
protected
26 {
27  return rateSelection->computeResponseAckFrameMode(dataOrMgmtPacket, dataOrMgmtHeader)->getDuration(LENGTH_ACK);
28 }

Referenced by computeAckDurationField().

◆ computeAckDurationField()

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

Implements inet::ieee80211::IRecipientAckPolicy.

54 {
55  if (header->getMoreFragments()) {
56  auto duration = header->getDurationField() - modeSet->getSifsTime() - computeAckDuration(packet, header);
57  duration = ceil(duration, SimTime(1, SIMTIME_US));
58  if (duration < 0)
59  EV_WARN << "ACK duration field would be negative, returning 0 instead.\n";
60  return duration < 0 ? 0 : duration;
61  }
62  return 0;
63 }

◆ initialize()

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

Reimplemented from inet::ieee80211::ModeSetListener.

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

◆ isAckNeeded()

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

Implements inet::ieee80211::IRecipientAckPolicy.

36 {
37  // TODO add mgmt NoAck check
38  return !header->getReceiverAddress().isMulticast();
39 }

◆ numInitStages()

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

Reimplemented from inet::ieee80211::ModeSetListener.

24 { return NUM_INIT_STAGES; }

Member Data Documentation

◆ rateSelection

IRateSelection* inet::ieee80211::RecipientAckPolicy::rateSelection = nullptr
protected

Referenced by computeAckDuration(), and initialize().


The documentation for this class was generated from the following files:
inet::ieee80211::RecipientAckPolicy::rateSelection
IRateSelection * rateSelection
Definition: RecipientAckPolicy.h:21
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::LENGTH_ACK
const b LENGTH_ACK
Definition: Ieee80211Frame_m.h:94
inet::ieee80211::RecipientAckPolicy::computeAckDuration
simtime_t computeAckDuration(Packet *dataOrMgmtPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader) const
Definition: RecipientAckPolicy.cc:25
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::physicallayer::Ieee80211ModeSet::getSifsTime
simtime_t getSifsTime() const
Definition: Ieee80211ModeSet.h:67
inet::ieee80211::ModeSetListener::modeSet
physicallayer::Ieee80211ModeSet * modeSet
Definition: ModeSetListener.h:19
inet::ieee80211::IRateSelection::computeResponseAckFrameMode
virtual const physicallayer::IIeee80211Mode * computeResponseAckFrameMode(Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader)=0