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

#include <PrimitiveFrameSequences.h>

Inheritance diagram for inet::ieee80211::BlockAckReqBlockAckFs:
inet::ieee80211::IFrameSequence

Public Member Functions

virtual void startSequence (FrameSequenceContext *context, int firstStep) override
 
virtual IFrameSequenceStepprepareStep (FrameSequenceContext *context) override
 
virtual bool completeStep (FrameSequenceContext *context) override
 
virtual std::string getHistory () const override
 
- Public Member Functions inherited from inet::ieee80211::IFrameSequence
virtual ~IFrameSequence ()
 

Protected Attributes

int firstStep = -1
 
int step = -1
 

Member Function Documentation

◆ completeStep()

bool inet::ieee80211::BlockAckReqBlockAckFs::completeStep ( FrameSequenceContext context)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

418 {
419  switch (step) {
420  case 0:
421  step++;
422  return true;
423  case 1: {
424  auto receiveStep = check_and_cast<IReceiveStep *>(context->getStep(firstStep + step));
425  step++;
426  auto receivedPacket = receiveStep->getReceivedFrame();
427  const auto& receivedHeader = receivedPacket->peekAtFront<Ieee80211MacHeader>();
428  return context->isForUs(receivedHeader) && receivedHeader->getType() == ST_BLOCKACK;
429  }
430  default:
431  throw cRuntimeError("Unknown step");
432  }
433 }

◆ getHistory()

virtual std::string inet::ieee80211::BlockAckReqBlockAckFs::getHistory ( ) const
inlineoverridevirtual

Implements inet::ieee80211::IFrameSequence.

170 { return std::string("BLOCKACKREQ") + (step == 2 ? " BLOCKACK" : ""); } // TODO completeStep = true?

◆ prepareStep()

IFrameSequenceStep * inet::ieee80211::BlockAckReqBlockAckFs::prepareStep ( FrameSequenceContext context)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

392 {
393  switch (step) {
394  case 0: {
395  auto blockAckReqParams = context->getQoSContext()->ackPolicy->computeBlockAckReqParameters(context->getInProgressFrames(), context->getQoSContext()->txopProcedure);
396  auto receiverAddr = std::get<0>(blockAckReqParams);
397  auto startingSequenceNumber = std::get<1>(blockAckReqParams);
398  auto tid = std::get<2>(blockAckReqParams);
399  auto blockAckReq = context->getQoSContext()->blockAckProcedure->buildBasicBlockAckReqFrame(receiverAddr, tid, startingSequenceNumber);
400  auto blockAckPacket = new Packet("BasicBlockAckReq", blockAckReq);
401  blockAckPacket->insertAtBack(makeShared<Ieee80211MacTrailer>());
402  return new TransmitStep(blockAckPacket, context->getIfs(), true);
403  }
404  case 1: {
405  auto txStep = check_and_cast<ITransmitStep *>(context->getLastStep());
406  auto packet = txStep->getFrameToTransmit();
407  auto blockAckReq = packet->peekAtFront<Ieee80211BlockAckReq>();
408  return new ReceiveStep(context->getQoSContext()->ackPolicy->getBlockAckTimeout(packet, blockAckReq));
409  }
410  case 2:
411  return nullptr;
412  default:
413  throw cRuntimeError("Unknown step");
414  }
415 }

◆ startSequence()

void inet::ieee80211::BlockAckReqBlockAckFs::startSequence ( FrameSequenceContext context,
int  firstStep 
)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

386 {
387  this->firstStep = firstStep;
388  step = 0;
389 }

Member Data Documentation

◆ firstStep

int inet::ieee80211::BlockAckReqBlockAckFs::firstStep = -1
protected

Referenced by completeStep(), and startSequence().

◆ step

int inet::ieee80211::BlockAckReqBlockAckFs::step = -1
protected

The documentation for this class was generated from the following files:
inet::ieee80211::ST_BLOCKACK
@ ST_BLOCKACK
Definition: Ieee80211Frame_m.h:167
inet::ieee80211::BlockAckReqBlockAckFs::step
int step
Definition: PrimitiveFrameSequences.h:163
inet::ieee80211::BlockAckReqBlockAckFs::firstStep
int firstStep
Definition: PrimitiveFrameSequences.h:162