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

#include <TxopProcedure.h>

Inheritance diagram for inet::ieee80211::TxopProcedure:
inet::ieee80211::ModeSetListener

Public Types

enum  ProtectionMechanism { SINGLE_PROTECTION, MULTIPLE_PROTECTION, UNDEFINED_PROTECTION }
 

Public Member Functions

virtual void startTxop (AccessCategory ac)
 
virtual void endTxop ()
 
virtual simtime_t getStart () const
 
virtual simtime_t getLimit () const
 
virtual simtime_t getRemaining () const
 
virtual simtime_t getDuration () const
 
virtual bool isFinalFragment (const Ptr< const Ieee80211MacHeader > &header) const
 
virtual bool isTxopInitiator (const Ptr< const Ieee80211MacHeader > &header) const
 
virtual bool isTxopTerminator (const Ptr< const Ieee80211MacHeader > &header) const
 
virtual ProtectionMechanism getProtectionMechanism () const
 

Static Public Attributes

static simsignal_t txopStartedSignal = cComponent::registerSignal("txopStarted")
 
static simsignal_t txopEndedSignal = cComponent::registerSignal("txopEnded")
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual s getTxopLimit (const physicallayer::IIeee80211Mode *mode, AccessCategory ac)
 
virtual ProtectionMechanism selectProtectionMechanism (AccessCategory ac) const
 
- Protected Member Functions inherited from inet::ieee80211::ModeSetListener
virtual void receiveSignal (cComponent *source, simsignal_t signalID, cObject *obj, cObject *details) override
 

Protected Attributes

simtime_t start = -1
 
simtime_t limit = -1
 
ProtectionMechanism protectionMechanism = ProtectionMechanism::UNDEFINED_PROTECTION
 
- Protected Attributes inherited from inet::ieee80211::ModeSetListener
physicallayer::Ieee80211ModeSetmodeSet = nullptr
 

Member Enumeration Documentation

◆ ProtectionMechanism

Enumerator
SINGLE_PROTECTION 
MULTIPLE_PROTECTION 
UNDEFINED_PROTECTION 

Member Function Documentation

◆ endTxop()

void inet::ieee80211::TxopProcedure::endTxop ( )
virtual
86 {
87  Enter_Method("endTxop");
88  emit(txopEndedSignal, this);
89  start = -1;
90  protectionMechanism = ProtectionMechanism::UNDEFINED_PROTECTION;
91  EV_INFO << "Txop ended.\n";
92 }

◆ getDuration()

simtime_t inet::ieee80211::TxopProcedure::getDuration ( ) const
virtual
103 {
104  if (start == -1)
105  throw cRuntimeError("Txop has not started yet");
106  return simTime() - start;
107 }

◆ getLimit()

simtime_t inet::ieee80211::TxopProcedure::getLimit ( ) const
virtual
64 {
65  return limit;
66 }

◆ getProtectionMechanism()

virtual ProtectionMechanism inet::ieee80211::TxopProcedure::getProtectionMechanism ( ) const
inlinevirtual
58 { return protectionMechanism; }

◆ getRemaining()

simtime_t inet::ieee80211::TxopProcedure::getRemaining ( ) const
virtual
95 {
96  if (start == -1)
97  throw cRuntimeError("Txop has not started yet");
98  auto now = simTime();
99  return now > start + limit ? 0 : now - start;
100 }

Referenced by inet::ieee80211::HcfFs::hasMoreTxOps().

◆ getStart()

simtime_t inet::ieee80211::TxopProcedure::getStart ( ) const
virtual
59 {
60  return start;
61 }

◆ getTxopLimit()

s inet::ieee80211::TxopProcedure::getTxopLimit ( const physicallayer::IIeee80211Mode mode,
AccessCategory  ac 
)
protectedvirtual
37 {
38  switch (ac) {
39  case AC_BK: return s(0);
40  case AC_BE: return s(0);
41  case AC_VI:
42  if (dynamic_cast<const Ieee80211DsssMode *>(mode) || dynamic_cast<const Ieee80211HrDsssMode *>(mode)) return ms(6.016);
43  else if (dynamic_cast<const Ieee80211HtMode *>(mode) || dynamic_cast<const Ieee80211OfdmMode *>(mode)) return ms(3.008);
44  else return s(0);
45  case AC_VO:
46  if (dynamic_cast<const Ieee80211DsssMode *>(mode) || dynamic_cast<const Ieee80211HrDsssMode *>(mode)) return ms(3.264);
47  else if (dynamic_cast<const Ieee80211HtMode *>(mode) || dynamic_cast<const Ieee80211OfdmMode *>(mode)) return ms(1.504);
48  else return s(0);
49  default: throw cRuntimeError("Unknown access category = %d", ac);
50  }
51 }

◆ initialize()

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

Reimplemented from inet::ieee80211::ModeSetListener.

27 {
29  if (stage == INITSTAGE_LOCAL) {
30  limit = par("txopLimit");
31  WATCH(start);
32  WATCH(protectionMechanism);
33  }
34 }

◆ isFinalFragment()

bool inet::ieee80211::TxopProcedure::isFinalFragment ( const Ptr< const Ieee80211MacHeader > &  header) const
virtual

◆ isTxopInitiator()

bool inet::ieee80211::TxopProcedure::isTxopInitiator ( const Ptr< const Ieee80211MacHeader > &  header) const
virtual

◆ isTxopTerminator()

bool inet::ieee80211::TxopProcedure::isTxopTerminator ( const Ptr< const Ieee80211MacHeader > &  header) const
virtual
123 {
124  return false;
125 }

Referenced by inet::ieee80211::QosRateSelection::computeControlFrameMode().

◆ numInitStages()

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

Reimplemented from inet::ieee80211::ModeSetListener.

39 { return NUM_INIT_STAGES; }

◆ selectProtectionMechanism()

TxopProcedure::ProtectionMechanism inet::ieee80211::TxopProcedure::selectProtectionMechanism ( AccessCategory  ac) const
protectedvirtual
54 {
55  return ProtectionMechanism::SINGLE_PROTECTION;
56 }

◆ startTxop()

void inet::ieee80211::TxopProcedure::startTxop ( AccessCategory  ac)
virtual
69 {
70  Enter_Method("startTxop");
71  if (start != -1)
72  throw cRuntimeError("Txop is already running");
73  if (limit == -1) {
74  auto referenceMode = modeSet->getSlowestMandatoryMode();
75  limit = getTxopLimit(referenceMode, ac).get();
76  }
77  // The STA selects between single and multiple protection when it transmits the first frame of a TXOP.
78  // All subsequent frames transmitted by the STA in the same TXOP use the same class of duration settings.
80  start = simTime();
81  emit(txopStartedSignal, this);
82  EV_INFO << "Txop started: limit = " << limit << ".\n";
83 }

Member Data Documentation

◆ limit

simtime_t inet::ieee80211::TxopProcedure::limit = -1
protected

◆ protectionMechanism

ProtectionMechanism inet::ieee80211::TxopProcedure::protectionMechanism = ProtectionMechanism::UNDEFINED_PROTECTION
protected

◆ start

simtime_t inet::ieee80211::TxopProcedure::start = -1
protected

◆ txopEndedSignal

simsignal_t inet::ieee80211::TxopProcedure::txopEndedSignal = cComponent::registerSignal("txopEnded")
static

◆ txopStartedSignal

simsignal_t inet::ieee80211::TxopProcedure::txopStartedSignal = cComponent::registerSignal("txopStarted")
static

The documentation for this class was generated from the following files:
inet::ieee80211::TxopProcedure::limit
simtime_t limit
Definition: TxopProcedure.h:35
inet::ieee80211::TxopProcedure::txopEndedSignal
static simsignal_t txopEndedSignal
Definition: TxopProcedure.h:22
inet::ieee80211::TxopProcedure::protectionMechanism
ProtectionMechanism protectionMechanism
Definition: TxopProcedure.h:36
inet::ieee80211::TxopProcedure::UNDEFINED_PROTECTION
@ UNDEFINED_PROTECTION
Definition: TxopProcedure.h:30
inet::ieee80211::ModeSetListener::initialize
virtual void initialize(int stage) override
Definition: ModeSetListener.cc:17
inet::ieee80211::TxopProcedure::start
simtime_t start
Definition: TxopProcedure.h:34
inet::ieee80211::AC_BK
@ AC_BK
Definition: AccessCategory.h:20
inet::physicallayer::Ieee80211ModeSet::getSlowestMandatoryMode
const IIeee80211Mode * getSlowestMandatoryMode() const
Definition: Ieee80211ModeSet.cc:565
inet::units::values::s
value< double, units::s > s
Definition: Units.h:1235
inet::ieee80211::AC_BE
@ AC_BE
Definition: AccessCategory.h:21
inet::physicallayer::Ieee80211OfdmMode
Definition: Ieee80211OfdmMode.h:130
inet::ieee80211::TxopProcedure::getTxopLimit
virtual s getTxopLimit(const physicallayer::IIeee80211Mode *mode, AccessCategory ac)
Definition: TxopProcedure.cc:36
inet::units::units::ms
milli< s >::type ms
Definition: Units.h:1076
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::physicallayer::Ieee80211DsssMode
Represents a Direct Sequence Spread Spectrum PHY mode as described in IEEE 802.11-2012 specification ...
Definition: Ieee80211DsssMode.h:80
inet::physicallayer::Ieee80211HtMode
Definition: Ieee80211HtMode.h:219
inet::ieee80211::TxopProcedure::txopStartedSignal
static simsignal_t txopStartedSignal
Definition: TxopProcedure.h:21
inet::ieee80211::TxopProcedure::selectProtectionMechanism
virtual ProtectionMechanism selectProtectionMechanism(AccessCategory ac) const
Definition: TxopProcedure.cc:53
inet::ieee80211::TxopProcedure::MULTIPLE_PROTECTION
@ MULTIPLE_PROTECTION
Definition: TxopProcedure.h:29
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::ieee80211::AC_VI
@ AC_VI
Definition: AccessCategory.h:22
inet::ieee80211::ModeSetListener::modeSet
physicallayer::Ieee80211ModeSet * modeSet
Definition: ModeSetListener.h:19
inet::ieee80211::TxopProcedure::SINGLE_PROTECTION
@ SINGLE_PROTECTION
Definition: TxopProcedure.h:28
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::units::value::get
const value_type & get() const
Definition: Units.h:108
inet::ieee80211::AC_VO
@ AC_VO
Definition: AccessCategory.h:23
inet::physicallayer::Ieee80211HrDsssMode
Represents a High Rate Direct Sequence Spread Spectrum PHY mode as described in the IEEE 802....
Definition: Ieee80211HrDsssMode.h:90