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

#include <RecipientAckProcedure.h>

Inheritance diagram for inet::ieee80211::RecipientAckProcedure:
inet::ieee80211::IRecipientAckProcedure

Public Member Functions

virtual void processReceivedFrame (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader, IRecipientAckPolicy *ackPolicy, IProcedureCallback *callback) override
 
virtual void processTransmittedAck (const Ptr< const Ieee80211AckFrame > &ack) override
 
- Public Member Functions inherited from inet::ieee80211::IRecipientAckProcedure
virtual ~IRecipientAckProcedure ()
 

Protected Member Functions

virtual const Ptr< Ieee80211AckFramebuildAck (const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader) const
 

Protected Attributes

int numReceivedAckableFrame = 0
 
int numSentAck = 0
 

Member Function Documentation

◆ buildAck()

const Ptr< Ieee80211AckFrame > inet::ieee80211::RecipientAckProcedure::buildAck ( const Ptr< const Ieee80211DataOrMgmtHeader > &  dataOrMgmtHeader) const
protectedvirtual
34 {
35  auto ack = makeShared<Ieee80211AckFrame>();
36  ack->setReceiverAddress(dataOrMgmtHeader->getTransmitterAddress());
37  return ack;
38 }

Referenced by processReceivedFrame().

◆ processReceivedFrame()

void inet::ieee80211::RecipientAckProcedure::processReceivedFrame ( Packet packet,
const Ptr< const Ieee80211DataOrMgmtHeader > &  dataOrMgmtHeader,
IRecipientAckPolicy ackPolicy,
IProcedureCallback callback 
)
overridevirtual

Implements inet::ieee80211::IRecipientAckProcedure.

14 {
16  // After a successful reception of a frame requiring acknowledgment, transmission of the ACK frame
17  // shall commence after a SIFS period, without regard to the busy/idle state of the medium. (See Figure 9-9.)
18  if (ackPolicy->isAckNeeded(dataOrMgmtHeader)) {
19  auto ackFrame = buildAck(dataOrMgmtHeader);
20  auto duration = ackPolicy->computeAckDurationField(packet, dataOrMgmtHeader);
21  ackFrame->setDurationField(duration);
22  auto ackPacket = new Packet("WlanAck", ackFrame);
23  EV_DEBUG << "Duration for " << ackFrame->getName() << " is set to " << duration << " s.\n";
24  callback->transmitControlResponseFrame(ackPacket, ackFrame, packet, dataOrMgmtHeader);
25  }
26 }

◆ processTransmittedAck()

void inet::ieee80211::RecipientAckProcedure::processTransmittedAck ( const Ptr< const Ieee80211AckFrame > &  ack)
overridevirtual

Implements inet::ieee80211::IRecipientAckProcedure.

29 {
30  numSentAck++;
31 }

Member Data Documentation

◆ numReceivedAckableFrame

int inet::ieee80211::RecipientAckProcedure::numReceivedAckableFrame = 0
protected

Referenced by processReceivedFrame().

◆ numSentAck

int inet::ieee80211::RecipientAckProcedure::numSentAck = 0
protected

Referenced by processTransmittedAck().


The documentation for this class was generated from the following files:
inet::ieee80211::RecipientAckProcedure::buildAck
virtual const Ptr< Ieee80211AckFrame > buildAck(const Ptr< const Ieee80211DataOrMgmtHeader > &dataOrMgmtHeader) const
Definition: RecipientAckProcedure.cc:33
inet::ieee80211::RecipientAckProcedure::numSentAck
int numSentAck
Definition: RecipientAckProcedure.h:23
inet::ieee80211::RecipientAckProcedure::numReceivedAckableFrame
int numReceivedAckableFrame
Definition: RecipientAckProcedure.h:22