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

#include <RateSelection.h>

Inheritance diagram for inet::ieee80211::RateSelection:
inet::ieee80211::IRateSelection

Public Member Functions

virtual const physicallayer::IIeee80211ModecomputeResponseCtsFrameMode (Packet *packet, const Ptr< const Ieee80211RtsFrame > &rtsFrame) override
 
virtual const physicallayer::IIeee80211ModecomputeResponseAckFrameMode (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader) override
 
virtual const physicallayer::IIeee80211ModecomputeMode (Packet *packet, const Ptr< const Ieee80211MacHeader > &header) override
 
virtual void frameTransmitted (Packet *packet, const Ptr< const Ieee80211MacHeader > &header)
 
- Public Member Functions inherited from inet::ieee80211::IRateSelection
virtual ~IRateSelection ()
 

Static Public Member Functions

static void setFrameMode (Packet *packet, const Ptr< const Ieee80211MacHeader > &header, const physicallayer::IIeee80211Mode *mode)
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, cObject *obj, cObject *details) override
 
virtual const physicallayer::IIeee80211ModegetMode (Packet *packet, const Ptr< const Ieee80211MacHeader > &header)
 
virtual const physicallayer::IIeee80211ModecomputeControlFrameMode (const Ptr< const Ieee80211MacHeader > &header)
 
virtual const physicallayer::IIeee80211ModecomputeDataOrMgmtFrameMode (const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader)
 

Protected Attributes

IRateControldataOrMgmtRateControl = nullptr
 
const physicallayer::IIeee80211ModefastestMandatoryMode = nullptr
 
const physicallayer::Ieee80211ModeSetmodeSet = nullptr
 
std::map< MacAddress, const physicallayer::IIeee80211Mode * > lastTransmittedFrameMode
 
const physicallayer::IIeee80211ModemulticastFrameMode = nullptr
 
const physicallayer::IIeee80211ModedataFrameMode = nullptr
 
const physicallayer::IIeee80211ModemgmtFrameMode = nullptr
 
const physicallayer::IIeee80211ModecontrolFrameMode = nullptr
 
const physicallayer::IIeee80211ModeresponseAckFrameMode = nullptr
 
const physicallayer::IIeee80211ModeresponseCtsFrameMode = nullptr
 

Additional Inherited Members

- Static Public Attributes inherited from inet::ieee80211::IRateSelection
static simsignal_t datarateSelectedSignal = cComponent::registerSignal("datarateSelected")
 

Member Function Documentation

◆ computeControlFrameMode()

const IIeee80211Mode * inet::ieee80211::RateSelection::computeControlFrameMode ( const Ptr< const Ieee80211MacHeader > &  header)
protectedvirtual
136 {
137  // TODO BSSBasicRateSet
138  return fastestMandatoryMode;
139 }

◆ computeDataOrMgmtFrameMode()

const IIeee80211Mode * inet::ieee80211::RateSelection::computeDataOrMgmtFrameMode ( const Ptr< const Ieee80211DataOrMgmtHeader > &  dataOrMgmtHeader)
protectedvirtual
116 {
117  if (dataOrMgmtHeader->getReceiverAddress().isMulticast() && multicastFrameMode)
118  return multicastFrameMode;
119  if (dynamicPtrCast<const Ieee80211DataHeader>(dataOrMgmtHeader) && dataFrameMode)
120  return dataFrameMode;
121  if (dynamicPtrCast<const Ieee80211MgmtHeader>(dataOrMgmtHeader) && mgmtFrameMode)
122  return mgmtFrameMode;
124  return dataOrMgmtRateControl->getRate();
125  else
126  return fastestMandatoryMode;
127 }

◆ computeMode()

const IIeee80211Mode * inet::ieee80211::RateSelection::computeMode ( Packet packet,
const Ptr< const Ieee80211MacHeader > &  header 
)
overridevirtual

Implements inet::ieee80211::IRateSelection.

142 {
143  if (auto dataOrMgmtHeader = dynamicPtrCast<const Ieee80211DataOrMgmtHeader>(header))
144  return computeDataOrMgmtFrameMode(dataOrMgmtHeader);
145  else
146  return computeControlFrameMode(header);
147 }

◆ computeResponseAckFrameMode()

const IIeee80211Mode * inet::ieee80211::RateSelection::computeResponseAckFrameMode ( Packet packet,
const Ptr< const Ieee80211DataOrMgmtHeader > &  dataOrMgmtHeader 
)
overridevirtual

Implements inet::ieee80211::IRateSelection.

81 {
83  return responseAckFrameMode;
84  else {
85  auto mode = getMode(packet, dataOrMgmtHeader);
86  ASSERT(modeSet->containsMode(mode));
87  return modeSet->getIsMandatory(mode) ? mode : modeSet->getSlowerMandatoryMode(mode); // TODO BSSBasicRateSet
88  }
89 }

◆ computeResponseCtsFrameMode()

const IIeee80211Mode * inet::ieee80211::RateSelection::computeResponseCtsFrameMode ( Packet packet,
const Ptr< const Ieee80211RtsFrame > &  rtsFrame 
)
overridevirtual

Implements inet::ieee80211::IRateSelection.

92 {
94  return responseCtsFrameMode;
95  else {
96  auto mode = getMode(packet, rtsFrame);
97  ASSERT(modeSet->containsMode(mode));
98  return modeSet->getIsMandatory(mode) ? mode : modeSet->getSlowerMandatoryMode(mode); // TODO BSSBasicRateSet
99  }
100 }

◆ frameTransmitted()

void inet::ieee80211::RateSelection::frameTransmitted ( Packet packet,
const Ptr< const Ieee80211MacHeader > &  header 
)
virtual
160 {
161  auto receiverAddr = header->getReceiverAddress();
162  lastTransmittedFrameMode[receiverAddr] = getMode(packet, header);
163 }

◆ getMode()

const IIeee80211Mode * inet::ieee80211::RateSelection::getMode ( Packet packet,
const Ptr< const Ieee80211MacHeader > &  header 
)
protectedvirtual
64 {
65  const auto& modeReqTag = packet->findTag<Ieee80211ModeReq>();
66  if (modeReqTag)
67  return modeReqTag->getMode();
68  const auto& modeIndTag = packet->findTag<Ieee80211ModeInd>();
69  if (modeIndTag)
70  return modeIndTag->getMode();
71  throw cRuntimeError("Missing mode");
72 }

◆ initialize()

void inet::ieee80211::RateSelection::initialize ( int  stage)
overrideprotectedvirtual
26 {
27  if (stage == INITSTAGE_LOCAL) {
28  getContainingNicModule(this)->subscribe(modesetChangedSignal, this);
29  }
30  else if (stage == INITSTAGE_LINK_LAYER) {
31  dataOrMgmtRateControl = dynamic_cast<IRateControl *>(findModuleByPath(par("rateControlModule")));
32  double multicastFrameBitrate = par("multicastFrameBitrate");
33  multicastFrameMode = (multicastFrameBitrate == -1) ? nullptr : modeSet->getMode(bps(multicastFrameBitrate));
34  double dataFrameBitrate = par("dataFrameBitrate");
35  dataFrameMode = (dataFrameBitrate == -1) ? nullptr : modeSet->getMode(bps(dataFrameBitrate), Hz(par("dataFrameBandwidth")), par("dataFrameNumSpatialStreams"));
36  double mgmtFrameBitrate = par("mgmtFrameBitrate");
37  mgmtFrameMode = (mgmtFrameBitrate == -1) ? nullptr : modeSet->getMode(bps(mgmtFrameBitrate));
38  double controlFrameBitrate = par("controlFrameBitrate");
39  controlFrameMode = (controlFrameBitrate == -1) ? nullptr : modeSet->getMode(bps(controlFrameBitrate));
40  double responseAckFrameBitrate = par("responseAckFrameBitrate");
41  responseAckFrameMode = (responseAckFrameBitrate == -1) ? nullptr : modeSet->getMode(bps(responseAckFrameBitrate));
42  double responseCtsFrameBitrate = par("responseCtsFrameBitrate");
43  responseCtsFrameMode = (responseCtsFrameBitrate == -1) ? nullptr : modeSet->getMode(bps(responseCtsFrameBitrate));
45 // WATCH_PTR(dataOrMgmtRateControl);
46 
47 // WATCH_PTR(*((cObject**)&fastestMandatoryMode));
48 // WATCH_PTR(*((cObject**)&modeSet));
49  WATCH_MAP(lastTransmittedFrameMode);
50 // WATCH_PTR(*((cObject**)&multicastFrameMode));
51 // WATCH_PTR(*((cObject**)&dataFrameMode));
52 // WATCH_PTR(*((cObject**)&mgmtFrameMode));
53 // WATCH_PTR(*((cObject**)&controlFrameMode));
54 // WATCH_PTR(*((cObject**)&responseAckFrameMode));
55 // WATCH_PTR(*((cObject**)&responseCtsFrameMode));
56 // WATCH_PTR();
57 // WATCH_PTR();
58 // WATCH_PTR();
59 // WATCH_PTR();
60  }
61 }

◆ numInitStages()

virtual int inet::ieee80211::RateSelection::numInitStages ( ) const
inlineoverrideprotectedvirtual
51 { return NUM_INIT_STAGES; }

◆ receiveSignal()

void inet::ieee80211::RateSelection::receiveSignal ( cComponent *  source,
simsignal_t  signalID,
cObject *  obj,
cObject *  details 
)
overrideprotectedvirtual
150 {
151  Enter_Method("%s", cComponent::getSignalName(signalID));
152 
153  if (signalID == modesetChangedSignal) {
154  modeSet = check_and_cast<Ieee80211ModeSet *>(obj);
156  }
157 }

◆ setFrameMode()

Member Data Documentation

◆ controlFrameMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::controlFrameMode = nullptr
protected

◆ dataFrameMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::dataFrameMode = nullptr
protected

◆ dataOrMgmtRateControl

IRateControl* inet::ieee80211::RateSelection::dataOrMgmtRateControl = nullptr
protected

◆ fastestMandatoryMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::fastestMandatoryMode = nullptr
protected

◆ lastTransmittedFrameMode

std::map<MacAddress, const physicallayer::IIeee80211Mode *> inet::ieee80211::RateSelection::lastTransmittedFrameMode
protected

◆ mgmtFrameMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::mgmtFrameMode = nullptr
protected

◆ modeSet

const physicallayer::Ieee80211ModeSet* inet::ieee80211::RateSelection::modeSet = nullptr
protected

◆ multicastFrameMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::multicastFrameMode = nullptr
protected

◆ responseAckFrameMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::responseAckFrameMode = nullptr
protected

◆ responseCtsFrameMode

const physicallayer::IIeee80211Mode* inet::ieee80211::RateSelection::responseCtsFrameMode = nullptr
protected

The documentation for this class was generated from the following files:
inet::ieee80211::RateSelection::dataOrMgmtRateControl
IRateControl * dataOrMgmtRateControl
Definition: RateSelection.h:34
inet::ieee80211::RateSelection::lastTransmittedFrameMode
std::map< MacAddress, const physicallayer::IIeee80211Mode * > lastTransmittedFrameMode
Definition: RateSelection.h:38
inet::ieee80211::RateSelection::controlFrameMode
const physicallayer::IIeee80211Mode * controlFrameMode
Definition: RateSelection.h:45
inet::units::units::Hz
pow< s, -1 > Hz
Definition: Units.h:935
inet::physicallayer::Ieee80211ModeSet::getIsMandatory
bool getIsMandatory(const IIeee80211Mode *mode) const
Definition: Ieee80211ModeSet.cc:493
inet::physicallayer::Ieee80211ModeTagBase::getMode
virtual const IIeee80211Mode * getMode() const
inet::ieee80211::RateSelection::mgmtFrameMode
const physicallayer::IIeee80211Mode * mgmtFrameMode
Definition: RateSelection.h:44
inet::ieee80211::RateSelection::computeDataOrMgmtFrameMode
virtual const physicallayer::IIeee80211Mode * computeDataOrMgmtFrameMode(const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader)
Definition: RateSelection.cc:115
inet::units::units::bps
compose< b, pow< s, -1 > > bps
Definition: Units.h:1169
inet::physicallayer::Ieee80211ModeSet::containsMode
bool containsMode(const IIeee80211Mode *mode) const
Definition: Ieee80211ModeSet.h:48
inet::ieee80211::RateSelection::modeSet
const physicallayer::Ieee80211ModeSet * modeSet
Definition: RateSelection.h:37
inet::getContainingNicModule
NetworkInterface * getContainingNicModule(const cModule *from)
Find the nic module (inside the networkNode) containing the given module.
Definition: NetworkInterface.cc:691
inet::ieee80211::RateSelection::multicastFrameMode
const physicallayer::IIeee80211Mode * multicastFrameMode
Definition: RateSelection.h:41
inet::modesetChangedSignal
simsignal_t modesetChangedSignal
Definition: Simsignals.cc:24
inet::physicallayer::Ieee80211ModeSet::getSlowerMandatoryMode
const IIeee80211Mode * getSlowerMandatoryMode(const IIeee80211Mode *mode) const
Definition: Ieee80211ModeSet.cc:581
inet::ieee80211::RateSelection::responseCtsFrameMode
const physicallayer::IIeee80211Mode * responseCtsFrameMode
Definition: RateSelection.h:48
inet::ieee80211::RateSelection::responseAckFrameMode
const physicallayer::IIeee80211Mode * responseAckFrameMode
Definition: RateSelection.h:47
inet::ieee80211::RateSelection::dataFrameMode
const physicallayer::IIeee80211Mode * dataFrameMode
Definition: RateSelection.h:43
inet::physicallayer::Ieee80211ModeReq
Class generated from inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Tag....
Definition: Ieee80211Tag_m.h:107
inet::ieee80211::IRateControl::getRate
virtual const physicallayer::IIeee80211Mode * getRate()=0
inet::ieee80211::RateSelection::getMode
virtual const physicallayer::IIeee80211Mode * getMode(Packet *packet, const Ptr< const Ieee80211MacHeader > &header)
Definition: RateSelection.cc:63
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::physicallayer::Ieee80211ModeSet::getFastestMandatoryMode
const IIeee80211Mode * getFastestMandatoryMode() const
Definition: Ieee80211ModeSet.cc:573
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::ieee80211::RateSelection::fastestMandatoryMode
const physicallayer::IIeee80211Mode * fastestMandatoryMode
Definition: RateSelection.h:35
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::physicallayer::Ieee80211ModeInd
Class generated from inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Tag....
Definition: Ieee80211Tag_m.h:142
inet::ieee80211::RateSelection::computeControlFrameMode
virtual const physicallayer::IIeee80211Mode * computeControlFrameMode(const Ptr< const Ieee80211MacHeader > &header)
Definition: RateSelection.cc:135
inet::physicallayer::Ieee80211ModeSet::getMode
const IIeee80211Mode * getMode(bps bitrate, Hz bandwidth=Hz(NaN), int numSpatialStreams=-1) const
Definition: Ieee80211ModeSet.cc:519
inet::INITSTAGE_LINK_LAYER
INET_API InitStage INITSTAGE_LINK_LAYER
Initialization of link-layer protocols.