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

#include <Dcaf.h>

Inheritance diagram for inet::ieee80211::Dcaf:
inet::ieee80211::IChannelAccess inet::ieee80211::IContention::ICallback inet::ieee80211::IRecoveryProcedure::ICwCalculator inet::ieee80211::ModeSetListener

Public Member Functions

virtual queueing::IPacketQueuegetPendingQueue () const
 
virtual InProgressFramesgetInProgressFrames () const
 
virtual void requestChannel (IChannelAccess::ICallback *callback) override
 
virtual void releaseChannel (IChannelAccess::ICallback *callback) override
 
virtual void channelAccessGranted () override
 
virtual void expectedChannelAccess (simtime_t time) override
 
virtual void incrementCw () override
 
virtual void resetCw () override
 
virtual int getCw () override
 
- Public Member Functions inherited from inet::ieee80211::IChannelAccess
virtual ~IChannelAccess ()
 
- Public Member Functions inherited from inet::ieee80211::IContention::ICallback
 ~ICallback ()
 
- Public Member Functions inherited from inet::ieee80211::IRecoveryProcedure::ICwCalculator
virtual ~ICwCalculator ()
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual void refreshDisplay () const override
 
virtual void calculateTimingParameters ()
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, cObject *obj, cObject *details) override
 

Protected Attributes

physicallayer::Ieee80211ModeSetmodeSet = nullptr
 
IContentioncontention = nullptr
 
IChannelAccess::ICallbackcallback = nullptr
 
queueing::IPacketQueuependingQueue = nullptr
 
InProgressFramesinProgressFrames = nullptr
 
bool owning = false
 
simtime_t slotTime = -1
 
simtime_t sifs = -1
 
simtime_t ifs = -1
 
simtime_t eifs = -1
 
int cw = -1
 
int cwMin = -1
 
int cwMax = -1
 
- Protected Attributes inherited from inet::ieee80211::ModeSetListener
physicallayer::Ieee80211ModeSetmodeSet = nullptr
 

Additional Inherited Members

- Static Public Attributes inherited from inet::ieee80211::IChannelAccess
static simsignal_t channelOwnershipChangedSignal = cComponent::registerSignal("channelOwnershipChanged")
 

Member Function Documentation

◆ calculateTimingParameters()

void inet::ieee80211::Dcaf::calculateTimingParameters ( )
protectedvirtual
59 {
62  int difsNumber = par("difsn");
63  // The PIFS and DIFS are derived by the Equation (9-2) and Equation (9-3), as illustrated in Figure 9-14.
64  // PIFS = aSIFSTime + aSlotTime (9-2)
65  // DIFS = aSIFSTime + 2 × aSlotTime (9-3)
66  ifs = difsNumber == -1 ? sifs + 2 * slotTime : difsNumber * slotTime;
67  // The EIFS is derived from the SIFS and the DIFS and the length of time it takes to transmit an ACK frame at the
68  // lowest PHY mandatory rate by Equation (9-4).
69  // EIFS = aSIFSTime + DIFS + ACKTxTime
71  EV_DEBUG << "Timing parameters are initialized: slotTime = " << slotTime << ", sifs = " << sifs << ", ifs = " << ifs << ", eifs = " << eifs << std::endl;
72  ASSERT(ifs > sifs);
73  cwMin = par("cwMin");
74  cwMax = par("cwMax");
75  if (cwMin == -1)
76  cwMin = modeSet->getCwMin();
77  if (cwMax == -1)
78  cwMax = modeSet->getCwMax();
79  cw = cwMin;
80  EV_DEBUG << "Contention window parameters are initialized: cw = " << cw << ", cwMin = " << cwMin << ", cwMax = " << cwMax << std::endl;
81 }

◆ channelAccessGranted()

void inet::ieee80211::Dcaf::channelAccessGranted ( )
overridevirtual

Implements inet::ieee80211::IContention::ICallback.

102 {
103  Enter_Method("channelAccessGranted");
104  ASSERT(callback != nullptr);
105  owning = true;
107  callback->channelGranted(this);
108 }

◆ expectedChannelAccess()

void inet::ieee80211::Dcaf::expectedChannelAccess ( simtime_t  time)
overridevirtual

Implements inet::ieee80211::IContention::ICallback.

132 {
133  // don't care
134 }

◆ getCw()

virtual int inet::ieee80211::Dcaf::getCw ( )
inlineoverridevirtual

◆ getInProgressFrames()

virtual InProgressFrames* inet::ieee80211::Dcaf::getInProgressFrames ( ) const
inlinevirtual
51 { return inProgressFrames; }

◆ getPendingQueue()

virtual queueing::IPacketQueue* inet::ieee80211::Dcaf::getPendingQueue ( ) const
inlinevirtual
50 { return pendingQueue; }

◆ incrementCw()

void inet::ieee80211::Dcaf::incrementCw ( )
overridevirtual

Implements inet::ieee80211::IRecoveryProcedure::ICwCalculator.

84 {
85  Enter_Method("incrementCw");
86  int newCw = 2 * cw + 1;
87  if (newCw > cwMax)
88  cw = cwMax;
89  else
90  cw = newCw;
91  EV_DEBUG << "Contention window is incremented: cw = " << cw << std::endl;
92 }

◆ initialize()

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

Reimplemented from inet::ieee80211::ModeSetListener.

23 {
24  if (stage == INITSTAGE_LOCAL) {
25  getContainingNicModule(this)->subscribe(modesetChangedSignal, this);
26  }
27  else if (stage == INITSTAGE_LINK_LAYER) {
28  // TODO calculateTimingParameters()
29  pendingQueue = check_and_cast<queueing::IPacketQueue *>(getSubmodule("pendingQueue"));
30  inProgressFrames = check_and_cast<InProgressFrames *>(getSubmodule("inProgressFrames"));
31  contention = check_and_cast<IContention *>(getSubmodule("contention"));
32  auto rx = check_and_cast<IRx *>(getModuleByPath(par("rxModule")));
33  rx->registerContention(contention);
35  WATCH(owning);
36  WATCH(slotTime);
37  WATCH(sifs);
38  WATCH(ifs);
39  WATCH(eifs);
40  WATCH(cw);
41  WATCH(cwMin);
42  WATCH(cwMax);
43  }
44 }

◆ numInitStages()

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

Reimplemented from inet::ieee80211::ModeSetListener.

42 { return NUM_INIT_STAGES; }

◆ receiveSignal()

void inet::ieee80211::Dcaf::receiveSignal ( cComponent *  source,
simsignal_t  signalID,
cObject *  obj,
cObject *  details 
)
overrideprotectedvirtual

Reimplemented from inet::ieee80211::ModeSetListener.

137 {
138  Enter_Method("%s", cComponent::getSignalName(signalID));
139 
140  if (signalID == modesetChangedSignal) {
141  modeSet = check_and_cast<Ieee80211ModeSet *>(obj);
143  }
144 }

◆ refreshDisplay()

void inet::ieee80211::Dcaf::refreshDisplay ( ) const
overrideprotectedvirtual
47 {
48  std::string text;
49  if (owning)
50  text = "Owning";
51  else if (contention != nullptr && contention->isContentionInProgress())
52  text = "Contending";
53  else
54  text = "Idle";
55  getDisplayString().setTagArg("t", 0, text.c_str());
56 }

◆ releaseChannel()

void inet::ieee80211::Dcaf::releaseChannel ( IChannelAccess::ICallback callback)
overridevirtual

Implements inet::ieee80211::IChannelAccess.

111 {
112  Enter_Method("releaseChannel");
113  owning = false;
115  this->callback = nullptr;
116  EV_INFO << "Channel released.\n";
117 }

◆ requestChannel()

void inet::ieee80211::Dcaf::requestChannel ( IChannelAccess::ICallback callback)
overridevirtual

Implements inet::ieee80211::IChannelAccess.

120 {
121  Enter_Method("requestChannel");
122  this->callback = callback;
123  if (owning)
124  callback->channelGranted(this);
125  else if (!contention->isContentionInProgress())
127  else
128  EV_DEBUG << "Contention has been already started.\n";
129 }

◆ resetCw()

void inet::ieee80211::Dcaf::resetCw ( )
overridevirtual

Implements inet::ieee80211::IRecoveryProcedure::ICwCalculator.

95 {
96  Enter_Method("resetCw");
97  cw = cwMin;
98  EV_DEBUG << "Contention window is reset: cw = " << cw << std::endl;
99 }

Member Data Documentation

◆ callback

IChannelAccess::ICallback* inet::ieee80211::Dcaf::callback = nullptr
protected

◆ contention

IContention* inet::ieee80211::Dcaf::contention = nullptr
protected

◆ cw

int inet::ieee80211::Dcaf::cw = -1
protected

◆ cwMax

int inet::ieee80211::Dcaf::cwMax = -1
protected

◆ cwMin

int inet::ieee80211::Dcaf::cwMin = -1
protected

◆ eifs

simtime_t inet::ieee80211::Dcaf::eifs = -1
protected

◆ ifs

simtime_t inet::ieee80211::Dcaf::ifs = -1
protected

◆ inProgressFrames

InProgressFrames* inet::ieee80211::Dcaf::inProgressFrames = nullptr
protected

◆ modeSet

physicallayer::Ieee80211ModeSet* inet::ieee80211::Dcaf::modeSet = nullptr
protected

◆ owning

bool inet::ieee80211::Dcaf::owning = false
protected

◆ pendingQueue

queueing::IPacketQueue* inet::ieee80211::Dcaf::pendingQueue = nullptr
protected

◆ sifs

simtime_t inet::ieee80211::Dcaf::sifs = -1
protected

◆ slotTime

simtime_t inet::ieee80211::Dcaf::slotTime = -1
protected

The documentation for this class was generated from the following files:
inet::ieee80211::Dcaf::modeSet
physicallayer::Ieee80211ModeSet * modeSet
Definition: Dcaf.h:23
inet::ieee80211::Dcaf::owning
bool owning
Definition: Dcaf.h:30
inet::ieee80211::Dcaf::inProgressFrames
InProgressFrames * inProgressFrames
Definition: Dcaf.h:28
inet::ieee80211::Dcaf::contention
IContention * contention
Definition: Dcaf.h:24
inet::ieee80211::IContention::startContention
virtual void startContention(int cw, simtime_t ifs, simtime_t eifs, simtime_t slotTime, ICallback *callback)=0
inet::ieee80211::Dcaf::sifs
simtime_t sifs
Definition: Dcaf.h:33
inet::ieee80211::Dcaf::calculateTimingParameters
virtual void calculateTimingParameters()
Definition: Dcaf.cc:58
inet::ieee80211::IContention::isContentionInProgress
virtual bool isContentionInProgress()=0
inet::getContainingNicModule
NetworkInterface * getContainingNicModule(const cModule *from)
Find the nic module (inside the networkNode) containing the given module.
Definition: NetworkInterface.cc:691
inet::modesetChangedSignal
simsignal_t modesetChangedSignal
Definition: Simsignals.cc:24
inet::physicallayer::IIeee80211Mode::getDuration
virtual const simtime_t getDuration(b dataLength) const =0
inet::ieee80211::IChannelAccess::channelOwnershipChangedSignal
static simsignal_t channelOwnershipChangedSignal
Definition: IChannelAccess.h:19
inet::physicallayer::Ieee80211ModeSet::getSlowestMandatoryMode
const IIeee80211Mode * getSlowestMandatoryMode() const
Definition: Ieee80211ModeSet.cc:565
inet::ieee80211::Dcaf::pendingQueue
queueing::IPacketQueue * pendingQueue
Definition: Dcaf.h:27
inet::ieee80211::LENGTH_ACK
const b LENGTH_ACK
Definition: Ieee80211Frame_m.h:94
inet::ieee80211::Dcaf::slotTime
simtime_t slotTime
Definition: Dcaf.h:32
inet::ieee80211::IChannelAccess::ICallback::channelGranted
virtual void channelGranted(IChannelAccess *channelAccess)=0
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::ieee80211::Dcaf::cw
int cw
Definition: Dcaf.h:37
inet::physicallayer::Ieee80211ModeSet::getCwMin
int getCwMin() const
Definition: Ieee80211ModeSet.h:70
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::physicallayer::Ieee80211ModeSet::getSlotTime
simtime_t getSlotTime() const
Definition: Ieee80211ModeSet.h:68
inet::ieee80211::Dcaf::cwMax
int cwMax
Definition: Dcaf.h:39
inet::ieee80211::Dcaf::ifs
simtime_t ifs
Definition: Dcaf.h:34
inet::physicallayer::Ieee80211ModeSet::getSifsTime
simtime_t getSifsTime() const
Definition: Ieee80211ModeSet.h:67
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::ieee80211::Dcaf::cwMin
int cwMin
Definition: Dcaf.h:38
inet::ieee80211::Dcaf::callback
IChannelAccess::ICallback * callback
Definition: Dcaf.h:25
inet::ieee80211::Dcaf::eifs
simtime_t eifs
Definition: Dcaf.h:35
inet::physicallayer::Ieee80211ModeSet::getCwMax
int getCwMax() const
Definition: Ieee80211ModeSet.h:71
inet::INITSTAGE_LINK_LAYER
INET_API InitStage INITSTAGE_LINK_LAYER
Initialization of link-layer protocols.