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

#include <RecipientBlockAckProcedure.h>

Inheritance diagram for inet::ieee80211::RecipientBlockAckProcedure:
inet::ieee80211::IRecipientBlockAckProcedure

Public Member Functions

virtual void processReceivedBlockAckReq (Packet *blockAckPacket, const Ptr< const Ieee80211BlockAckReq > &blockAckReq, IRecipientQosAckPolicy *ackPolicy, IRecipientBlockAckAgreementHandler *blockAckAgreementHandler, IProcedureCallback *callback) override
 
virtual void processTransmittedBlockAck (const Ptr< const Ieee80211BlockAck > &blockAck) override
 
- Public Member Functions inherited from inet::ieee80211::IRecipientBlockAckProcedure
virtual ~IRecipientBlockAckProcedure ()
 

Protected Member Functions

virtual const Ptr< Ieee80211BlockAckbuildBlockAck (const Ptr< const Ieee80211BlockAckReq > &blockAckReq, RecipientBlockAckAgreement *agreement)
 

Protected Attributes

int numReceivedBlockAckReq = 0
 
int numSentBlockAck = 0
 

Member Function Documentation

◆ buildBlockAck()

const Ptr< Ieee80211BlockAck > inet::ieee80211::RecipientBlockAckProcedure::buildBlockAck ( const Ptr< const Ieee80211BlockAckReq > &  blockAckReq,
RecipientBlockAckAgreement agreement 
)
protectedvirtual
50 {
51  if (auto basicBlockAckReq = dynamicPtrCast<const Ieee80211BasicBlockAckReq>(blockAckReq)) {
52  ASSERT(agreement != nullptr);
53  auto blockAck = makeShared<Ieee80211BasicBlockAck>();
54  auto startingSequenceNumber = basicBlockAckReq->getStartingSequenceNumber();
55  for (int i = 0; i < 64; i++) {
56  BitVector& bitmap = blockAck->getBlockAckBitmapForUpdate(i);
57  for (FragmentNumber fragNum = 0; fragNum < 16; fragNum++) {
58  bool ackState = agreement->getBlockAckRecord()->getAckState(startingSequenceNumber + i, fragNum);
59  bitmap.setBit(fragNum, ackState);
60  }
61  }
62  blockAck->setReceiverAddress(blockAckReq->getTransmitterAddress());
63  blockAck->setCompressedBitmap(false);
64  blockAck->setStartingSequenceNumber(basicBlockAckReq->getStartingSequenceNumber());
65  blockAck->setTidInfo(basicBlockAckReq->getTidInfo());
66  return blockAck;
67  }
68  else
69  throw cRuntimeError("Unsupported Block Ack Request");
70 }

Referenced by processReceivedBlockAckReq().

◆ processReceivedBlockAckReq()

void inet::ieee80211::RecipientBlockAckProcedure::processReceivedBlockAckReq ( Packet blockAckPacket,
const Ptr< const Ieee80211BlockAckReq > &  blockAckReq,
IRecipientQosAckPolicy ackPolicy,
IRecipientBlockAckAgreementHandler blockAckAgreementHandler,
IProcedureCallback callback 
)
overridevirtual

Implements inet::ieee80211::IRecipientBlockAckProcedure.

21 {
23  if (auto basicBlockAckReq = dynamicPtrCast<const Ieee80211BasicBlockAckReq>(blockAckReq)) {
24  auto agreement = blockAckAgreementHandler->getAgreement(basicBlockAckReq->getTidInfo(), basicBlockAckReq->getTransmitterAddress());
25  if (ackPolicy->isBlockAckNeeded(basicBlockAckReq, agreement)) {
26  auto blockAck = buildBlockAck(basicBlockAckReq, agreement);
27  auto duration = ackPolicy->computeBasicBlockAckDurationField(blockAckPacketReq, basicBlockAckReq);
28  blockAck->setDurationField(duration);
29  auto blockAckPacket = new Packet("BasicBlockAck", blockAck);
30  EV_DEBUG << "Duration for " << blockAckPacket->getName() << " is set to " << duration << " s.\n";
31  callback->transmitControlResponseFrame(blockAckPacket, blockAck, blockAckPacketReq, basicBlockAckReq);
32  }
33  }
34  else
35  throw cRuntimeError("Unsupported BlockAckReq");
36 }

◆ processTransmittedBlockAck()

void inet::ieee80211::RecipientBlockAckProcedure::processTransmittedBlockAck ( const Ptr< const Ieee80211BlockAck > &  blockAck)
overridevirtual

Member Data Documentation

◆ numReceivedBlockAckReq

int inet::ieee80211::RecipientBlockAckProcedure::numReceivedBlockAckReq = 0
protected

◆ numSentBlockAck

int inet::ieee80211::RecipientBlockAckProcedure::numSentBlockAck = 0
protected

The documentation for this class was generated from the following files:
inet::ieee80211::FragmentNumber
int8_t FragmentNumber
Definition: Ieee80211Defs.h:16
inet::ieee80211::RecipientBlockAckProcedure::numSentBlockAck
int numSentBlockAck
Definition: RecipientBlockAckProcedure.h:23
inet::ieee80211::RecipientBlockAckProcedure::buildBlockAck
virtual const Ptr< Ieee80211BlockAck > buildBlockAck(const Ptr< const Ieee80211BlockAckReq > &blockAckReq, RecipientBlockAckAgreement *agreement)
Definition: RecipientBlockAckProcedure.cc:49
inet::ieee80211::RecipientBlockAckProcedure::numReceivedBlockAckReq
int numReceivedBlockAckReq
Definition: RecipientBlockAckProcedure.h:22