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

#include <OriginatorProtectionMechanism.h>

Inheritance diagram for inet::ieee80211::OriginatorProtectionMechanism:
inet::ieee80211::ModeSetListener

Public Member Functions

virtual ~OriginatorProtectionMechanism ()
 
virtual simtime_t computeDurationField (Packet *packet, const Ptr< const Ieee80211MacHeader > &header, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual simtime_t computeRtsDurationField (Packet *rtsPacket, const Ptr< const Ieee80211RtsFrame > &rtsFrame, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
 
virtual simtime_t computeDataFrameDurationField (Packet *dataPacket, const Ptr< const Ieee80211DataHeader > &dataHeader, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
 
virtual simtime_t computeMgmtFrameDurationField (Packet *mgmtPacket, const Ptr< const Ieee80211MgmtHeader > &mgmtHeader, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
 
- 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
 

Constructor & Destructor Documentation

◆ ~OriginatorProtectionMechanism()

virtual inet::ieee80211::OriginatorProtectionMechanism::~OriginatorProtectionMechanism ( )
inlinevirtual
32 {}

Member Function Documentation

◆ computeDataFrameDurationField()

simtime_t inet::ieee80211::OriginatorProtectionMechanism::computeDataFrameDurationField ( Packet dataPacket,
const Ptr< const Ieee80211DataHeader > &  dataHeader,
Packet pendingPacket,
const Ptr< const Ieee80211DataOrMgmtHeader > &  pendingHeader 
)
protectedvirtual
54 {
55  simtime_t ackToDataFrameDuration = rateSelection->computeResponseAckFrameMode(dataPacket, dataHeader)->getDuration(LENGTH_ACK);
56  if (dataHeader->getReceiverAddress().isMulticast())
57  return 0;
58  if (!dataHeader->getMoreFragments())
59  return ackToDataFrameDuration + modeSet->getSifsTime();
60  else {
61  simtime_t pendingFrameDuration = rateSelection->computeMode(pendingPacket, pendingHeader)->getDuration(pendingPacket->getDataLength());
62  auto pendingFrameMode = rateSelection->computeMode(pendingPacket, pendingHeader);
63  RateSelection::setFrameMode(pendingPacket, pendingHeader, pendingFrameMode);
64  simtime_t ackToPendingFrame = pendingFrameMode->getDuration(LENGTH_ACK);
65  return pendingFrameDuration + ackToDataFrameDuration + ackToPendingFrame + 3 * modeSet->getSifsTime();
66  }
67 }

Referenced by computeDurationField().

◆ computeDurationField()

simtime_t inet::ieee80211::OriginatorProtectionMechanism::computeDurationField ( Packet packet,
const Ptr< const Ieee80211MacHeader > &  header,
Packet pendingPacket,
const Ptr< const Ieee80211DataOrMgmtHeader > &  pendingHeader 
)
virtual
94 {
95  if (auto rtsFrame = dynamicPtrCast<const Ieee80211RtsFrame>(header))
96  return computeRtsDurationField(packet, rtsFrame, pendingPacket, pendingHeader);
97  else if (auto dataHeader = dynamicPtrCast<const Ieee80211DataHeader>(header))
98  return computeDataFrameDurationField(packet, dataHeader, pendingPacket, pendingHeader);
99  else if (auto mgmtHeader = dynamicPtrCast<const Ieee80211MgmtHeader>(header))
100  return computeMgmtFrameDurationField(packet, mgmtHeader, pendingPacket, pendingHeader);
101  else
102  throw cRuntimeError("Unknown frame");
103 }

◆ computeMgmtFrameDurationField()

simtime_t inet::ieee80211::OriginatorProtectionMechanism::computeMgmtFrameDurationField ( Packet mgmtPacket,
const Ptr< const Ieee80211MgmtHeader > &  mgmtHeader,
Packet pendingPacket,
const Ptr< const Ieee80211DataOrMgmtHeader > &  pendingHeader 
)
protectedvirtual
80 {
81  simtime_t ackFrameDuration = rateSelection->computeResponseAckFrameMode(mgmtPacket, mgmtHeader)->getDuration(LENGTH_ACK);
82  if (mgmtHeader->getReceiverAddress().isMulticast())
83  return 0;
84  if (!mgmtHeader->getMoreFragments()) {
85  return ackFrameDuration + modeSet->getSifsTime();
86  }
87  else {
88  simtime_t pendingFrameDuration = rateSelection->computeMode(pendingPacket, pendingHeader)->getDuration(pendingPacket->getDataLength());
89  return pendingFrameDuration + 2 * ackFrameDuration + 3 * modeSet->getSifsTime();
90  }
91 }

Referenced by computeDurationField().

◆ computeRtsDurationField()

simtime_t inet::ieee80211::OriginatorProtectionMechanism::computeRtsDurationField ( Packet rtsPacket,
const Ptr< const Ieee80211RtsFrame > &  rtsFrame,
Packet pendingPacket,
const Ptr< const Ieee80211DataOrMgmtHeader > &  pendingHeader 
)
protectedvirtual
33 {
34  auto pendingFrameMode = rateSelection->computeMode(pendingPacket, pendingHeader);
35  RateSelection::setFrameMode(pendingPacket, pendingHeader, pendingFrameMode); // KLUDGE
36  simtime_t pendingFrameDuration = pendingFrameMode->getDuration(pendingPacket->getDataLength());
37  simtime_t ctsFrameDuration = rateSelection->computeResponseCtsFrameMode(rtsPacket, rtsFrame)->getDuration(LENGTH_CTS);
38  simtime_t ackFrameDuration = rateSelection->computeResponseAckFrameMode(pendingPacket, pendingHeader)->getDuration(LENGTH_ACK);
39  simtime_t durationId = ctsFrameDuration + pendingFrameDuration + ackFrameDuration;
40  return durationId + 3 * modeSet->getSifsTime();
41 }

Referenced by computeDurationField().

◆ initialize()

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

Reimplemented from inet::ieee80211::ModeSetListener.

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

◆ numInitStages()

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

Reimplemented from inet::ieee80211::ModeSetListener.

24 { return NUM_INIT_STAGES; }

Member Data Documentation

◆ rateSelection

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

The documentation for this class was generated from the following files:
inet::ieee80211::IRateSelection::computeMode
virtual const physicallayer::IIeee80211Mode * computeMode(Packet *packet, const Ptr< const Ieee80211MacHeader > &header)=0
inet::ieee80211::OriginatorProtectionMechanism::rateSelection
IRateSelection * rateSelection
Definition: OriginatorProtectionMechanism.h:21
inet::ieee80211::RateSelection::setFrameMode
static void setFrameMode(Packet *packet, const Ptr< const Ieee80211MacHeader > &header, const physicallayer::IIeee80211Mode *mode)
Definition: RateSelection.cc:165
inet::ieee80211::ModeSetListener::initialize
virtual void initialize(int stage) override
Definition: ModeSetListener.cc:17
inet::ieee80211::OriginatorProtectionMechanism::computeRtsDurationField
virtual simtime_t computeRtsDurationField(Packet *rtsPacket, const Ptr< const Ieee80211RtsFrame > &rtsFrame, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
Definition: OriginatorProtectionMechanism.cc:32
inet::physicallayer::IIeee80211Mode::getDuration
virtual const simtime_t getDuration(b dataLength) const =0
inet::ieee80211::IRateSelection::computeResponseCtsFrameMode
virtual const physicallayer::IIeee80211Mode * computeResponseCtsFrameMode(Packet *packet, const Ptr< const Ieee80211RtsFrame > &rtsFrame)=0
inet::ieee80211::LENGTH_ACK
const b LENGTH_ACK
Definition: Ieee80211Frame_m.h:94
inet::ieee80211::LENGTH_CTS
const b LENGTH_CTS
Definition: Ieee80211Frame_m.h:93
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::ieee80211::OriginatorProtectionMechanism::computeDataFrameDurationField
virtual simtime_t computeDataFrameDurationField(Packet *dataPacket, const Ptr< const Ieee80211DataHeader > &dataHeader, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
Definition: OriginatorProtectionMechanism.cc:53
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::OriginatorProtectionMechanism::computeMgmtFrameDurationField
virtual simtime_t computeMgmtFrameDurationField(Packet *mgmtPacket, const Ptr< const Ieee80211MgmtHeader > &mgmtHeader, Packet *pendingPacket, const Ptr< const Ieee80211DataOrMgmtHeader > &pendingHeader)
Definition: OriginatorProtectionMechanism.cc:79
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