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

#include <CtsProcedure.h>

Inheritance diagram for inet::ieee80211::CtsProcedure:
inet::ieee80211::ICtsProcedure

Public Member Functions

virtual void processReceivedRts (Packet *rtsPacket, const Ptr< const Ieee80211RtsFrame > &rtsFrame, ICtsPolicy *ctsPolicy, IProcedureCallback *callback) override
 
virtual void processTransmittedCts (const Ptr< const Ieee80211CtsFrame > &ctsFrame) override
 
- Public Member Functions inherited from inet::ieee80211::ICtsProcedure
virtual ~ICtsProcedure ()
 

Protected Member Functions

virtual const Ptr< Ieee80211CtsFramebuildCts (const Ptr< const Ieee80211RtsFrame > &rtsFrame) const
 

Protected Attributes

int numReceivedRts = 0
 
int numSentCts = 0
 

Member Function Documentation

◆ buildCts()

const Ptr< Ieee80211CtsFrame > inet::ieee80211::CtsProcedure::buildCts ( const Ptr< const Ieee80211RtsFrame > &  rtsFrame) const
protectedvirtual
33 {
34  const Ptr<Ieee80211CtsFrame>& cts = makeShared<Ieee80211CtsFrame>();
35  // The RA field of the CTS frame shall be the value
36  // obtained from the TA field of the to which this
37  // CTS frame is a response.
38  cts->setReceiverAddress(rtsFrame->getTransmitterAddress());
39  return cts;
40 }

Referenced by processReceivedRts().

◆ processReceivedRts()

void inet::ieee80211::CtsProcedure::processReceivedRts ( Packet rtsPacket,
const Ptr< const Ieee80211RtsFrame > &  rtsFrame,
ICtsPolicy ctsPolicy,
IProcedureCallback callback 
)
overridevirtual

Implements inet::ieee80211::ICtsProcedure.

14 {
16  // A STA that is addressed by an RTS frame shall transmit a CTS frame after a SIFS period
17  // if the NAV at the STA receiving the RTS frame indicates that the medium is idle.
18  if (ctsPolicy->isCtsNeeded(rtsFrame)) {
19  auto ctsFrame = buildCts(rtsFrame);
20  auto duration = ctsPolicy->computeCtsDurationField(rtsPacket, rtsFrame);
21  ctsFrame->setDurationField(duration);
22  auto ctsPacket = new Packet("CTS", ctsFrame);
23  EV_DEBUG << "Duration for " << ctsPacket->getName() << " is set to " << duration << " s.\n";
24  callback->transmitControlResponseFrame(ctsPacket, ctsFrame, rtsPacket, rtsFrame);
25  }
26  // If the NAV at the STA receiving the RTS indicates the medium is not idle,
27  // that STA shall not respond to the RTS frame.
28  else
29  EV_WARN << "Ignoring received RTS according to CTS policy (probably the medium is not free).\n";
30 }

◆ processTransmittedCts()

void inet::ieee80211::CtsProcedure::processTransmittedCts ( const Ptr< const Ieee80211CtsFrame > &  ctsFrame)
overridevirtual

Implements inet::ieee80211::ICtsProcedure.

43 {
44  numSentCts++;
45 }

Member Data Documentation

◆ numReceivedRts

int inet::ieee80211::CtsProcedure::numReceivedRts = 0
protected

Referenced by processReceivedRts().

◆ numSentCts

int inet::ieee80211::CtsProcedure::numSentCts = 0
protected

Referenced by processTransmittedCts().


The documentation for this class was generated from the following files:
inet::ieee80211::CtsProcedure::numReceivedRts
int numReceivedRts
Definition: CtsProcedure.h:22
inet::ieee80211::CtsProcedure::buildCts
virtual const Ptr< Ieee80211CtsFrame > buildCts(const Ptr< const Ieee80211RtsFrame > &rtsFrame) const
Definition: CtsProcedure.cc:32
inet::ieee80211::CtsProcedure::numSentCts
int numSentCts
Definition: CtsProcedure.h:23