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

Implements IEEE 802.11 Enhanced Distributed Channel Access. More...

#include <Edca.h>

Inheritance diagram for inet::ieee80211::Edca:

Public Member Functions

virtual ~Edca ()
 
virtual AccessCategory classifyFrame (const Ptr< const Ieee80211DataHeader > &header)
 
virtual EdcafgetEdcaf (AccessCategory ac) const
 
virtual EdcafgetChannelOwner ()
 
virtual std::vector< Edcaf * > getInternallyCollidedEdcafs ()
 
virtual NonQosRecoveryProceduregetMgmtAndNonQoSRecoveryProcedure () const
 
virtual void requestChannelAccess (AccessCategory ac, IChannelAccess::ICallback *callback)
 
virtual void releaseChannelAccess (AccessCategory ac, IChannelAccess::ICallback *callback)
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual AccessCategory mapTidToAc (Tid tid)
 

Protected Attributes

int numEdcafs = -1
 
Edcaf ** edcafs = nullptr
 
EdcaTransmitLifetimeHandlerlifetimeHandler = nullptr
 
NonQosRecoveryProceduremgmtAndNonQoSRecoveryProcedure = nullptr
 

Detailed Description

Implements IEEE 802.11 Enhanced Distributed Channel Access.

Constructor & Destructor Documentation

◆ ~Edca()

inet::ieee80211::Edca::~Edca ( )
virtual
72 {
73  delete[] edcafs;
74 }

Member Function Documentation

◆ classifyFrame()

AccessCategory inet::ieee80211::Edca::classifyFrame ( const Ptr< const Ieee80211DataHeader > &  header)
virtual
28 {
29  return mapTidToAc(header->getTid());
30 }

◆ getChannelOwner()

Edcaf * inet::ieee80211::Edca::getChannelOwner ( )
virtual
45 {
46  for (int ac = 0; ac < numEdcafs; ac++)
47  if (edcafs[ac]->isOwning())
48  return edcafs[ac];
49  return nullptr;
50 }

◆ getEdcaf()

virtual Edcaf* inet::ieee80211::Edca::getEdcaf ( AccessCategory  ac) const
inlinevirtual
40 { return edcafs[ac]; }

◆ getInternallyCollidedEdcafs()

std::vector< Edcaf * > inet::ieee80211::Edca::getInternallyCollidedEdcafs ( )
virtual
53 {
54  std::vector<Edcaf *> collidedEdcafs;
55  for (int ac = 0; ac < numEdcafs; ac++)
56  if (edcafs[ac]->isInternalCollision())
57  collidedEdcafs.push_back(edcafs[ac]);
58  return collidedEdcafs;
59 }

◆ getMgmtAndNonQoSRecoveryProcedure()

virtual NonQosRecoveryProcedure* inet::ieee80211::Edca::getMgmtAndNonQoSRecoveryProcedure ( ) const
inlinevirtual

◆ initialize()

void inet::ieee80211::Edca::initialize ( int  stage)
overrideprotectedvirtual
16 {
17  if (stage == INITSTAGE_LINK_LAYER) {
18  numEdcafs = par("numEdcafs");
19  edcafs = new Edcaf *[numEdcafs];
20  for (int ac = 0; ac < numEdcafs; ac++) {
21  edcafs[ac] = check_and_cast<Edcaf *>(getSubmodule("edcaf", ac));
22  }
23  mgmtAndNonQoSRecoveryProcedure = check_and_cast<NonQosRecoveryProcedure *>(getSubmodule("mgmtAndNonQoSRecoveryProcedure"));
24  }
25 }

◆ mapTidToAc()

AccessCategory inet::ieee80211::Edca::mapTidToAc ( Tid  tid)
protectedvirtual
33 {
34  // standard static mapping (see "UP-to-AC mappings" table in the 802.11 spec.)
35  switch (tid) {
36  case 1: case 2: return AC_BK;
37  case 0: case 3: return AC_BE;
38  case 4: case 5: return AC_VI;
39  case 6: case 7: return AC_VO;
40  default: throw cRuntimeError("No mapping from TID=%d to AccessCategory (must be in the range 0..7)", tid);
41  }
42 }

Referenced by classifyFrame().

◆ numInitStages()

virtual int inet::ieee80211::Edca::numInitStages ( ) const
inlineoverrideprotectedvirtual
31 { return NUM_INIT_STAGES; }

◆ releaseChannelAccess()

void inet::ieee80211::Edca::releaseChannelAccess ( AccessCategory  ac,
IChannelAccess::ICallback callback 
)
virtual
67 {
68  edcafs[ac]->releaseChannel(callback);
69 }

◆ requestChannelAccess()

void inet::ieee80211::Edca::requestChannelAccess ( AccessCategory  ac,
IChannelAccess::ICallback callback 
)
virtual
62 {
63  edcafs[ac]->requestChannel(callback);
64 }

Member Data Documentation

◆ edcafs

Edcaf** inet::ieee80211::Edca::edcafs = nullptr
protected

◆ lifetimeHandler

EdcaTransmitLifetimeHandler* inet::ieee80211::Edca::lifetimeHandler = nullptr
protected

◆ mgmtAndNonQoSRecoveryProcedure

NonQosRecoveryProcedure* inet::ieee80211::Edca::mgmtAndNonQoSRecoveryProcedure = nullptr
protected

Referenced by initialize().

◆ numEdcafs

int inet::ieee80211::Edca::numEdcafs = -1
protected

The documentation for this class was generated from the following files:
inet::ieee80211::Edca::numEdcafs
int numEdcafs
Definition: Edca.h:25
inet::ieee80211::Edcaf::releaseChannel
virtual void releaseChannel(IChannelAccess::ICallback *callback) override
Definition: Edcaf.cc:146
inet::ieee80211::AC_BK
@ AC_BK
Definition: AccessCategory.h:20
inet::ieee80211::Edcaf::requestChannel
virtual void requestChannel(IChannelAccess::ICallback *callback) override
Definition: Edcaf.cc:156
inet::ieee80211::AC_BE
@ AC_BE
Definition: AccessCategory.h:21
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::ieee80211::AC_VI
@ AC_VI
Definition: AccessCategory.h:22
inet::ieee80211::AC_VO
@ AC_VO
Definition: AccessCategory.h:23
inet::ieee80211::Edca::edcafs
Edcaf ** edcafs
Definition: Edca.h:26
inet::ieee80211::Edca::mapTidToAc
virtual AccessCategory mapTidToAc(Tid tid)
Definition: Edca.cc:32
inet::ieee80211::Edca::mgmtAndNonQoSRecoveryProcedure
NonQosRecoveryProcedure * mgmtAndNonQoSRecoveryProcedure
Definition: Edca.h:28
inet::INITSTAGE_LINK_LAYER
INET_API InitStage INITSTAGE_LINK_LAYER
Initialization of link-layer protocols.