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

#include <TxOpFs.h>

Inheritance diagram for inet::ieee80211::TxOpFs:
inet::ieee80211::AlternativesFs inet::ieee80211::IFrameSequence

Public Member Functions

 TxOpFs ()
 
virtual ~TxOpFs ()
 
virtual int selectTxOpSequence (AlternativesFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isRtsCtsNeeded (OptionalFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isBlockAckReqRtsCtsNeeded (OptionalFs *frameSequence, FrameSequenceContext *context)
 
virtual int selectMgmtOrDataQap (AlternativesFs *frameSequence, FrameSequenceContext *context)
 
- Public Member Functions inherited from inet::ieee80211::AlternativesFs
virtual ~AlternativesFs ()
 
 AlternativesFs (std::vector< IFrameSequence * > elements, std::function< int(AlternativesFs *, FrameSequenceContext *)> selector)
 
virtual int getStep ()
 
virtual int selectSequence (FrameSequenceContext *context)
 
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 ()
 

Additional Inherited Members

- Protected Attributes inherited from inet::ieee80211::AlternativesFs
int firstStep = -1
 
int step = -1
 
int elementIndex = -1
 
std::vector< IFrameSequence * > elements
 
std::function< int(AlternativesFs *, FrameSequenceContext *)> selector
 

Constructor & Destructor Documentation

◆ TxOpFs()

inet::ieee80211::TxOpFs::TxOpFs ( )
18  :
19  // Excerpt from G.3 EDCA and HCCA sequences
20  // txop-sequence =
21  // ( ( ( RTS CTS ) | CTS + self ) Data + individual + QoS +( block-ack | no-ack ) ) |
22  // [ RTS CTS ] (txop-part-requiring-ack txop-part-providing-ack )|
23  // [ RTS CTS ] (Management | ( Data + QAP )) + individual ACK |
24  // [ RTS CTS ] (BlockAckReq BlockAck ) |
25  // ht-txop-sequence;
26  AlternativesFs({new SequentialFs({new OptionalFs(new RtsCtsFs(), OPTIONALFS_PREDICATE(isRtsCtsNeeded)),
27  new DataFs()}),
28  new SequentialFs({new OptionalFs(new RtsCtsFs(), OPTIONALFS_PREDICATE(isRtsCtsNeeded)),
29  new DataFs(),
30  new AckFs()}), // TODO should be in txop-part-requiring-ack
31  new SequentialFs({new OptionalFs(new RtsCtsFs(), OPTIONALFS_PREDICATE(isBlockAckReqRtsCtsNeeded)),
32  new BlockAckReqBlockAckFs()}),
33  new SequentialFs({new OptionalFs(new RtsCtsFs(), OPTIONALFS_PREDICATE(isRtsCtsNeeded)),
34  new AlternativesFs({new ManagementAckFs(),
35  /* TODO DATA + QAP*/},
38 {
39 }

◆ ~TxOpFs()

virtual inet::ieee80211::TxOpFs::~TxOpFs ( )
inlinevirtual
22 {}

Member Function Documentation

◆ isBlockAckReqRtsCtsNeeded()

bool inet::ieee80211::TxOpFs::isBlockAckReqRtsCtsNeeded ( OptionalFs frameSequence,
FrameSequenceContext context 
)
virtual
76 {
77  return false; // FIXME QosRtsPolicy should handle this case
78 }

Referenced by TxOpFs().

◆ isRtsCtsNeeded()

bool inet::ieee80211::TxOpFs::isRtsCtsNeeded ( OptionalFs frameSequence,
FrameSequenceContext context 
)
virtual
70 {
71  auto protectedFrame = context->getInProgressFrames()->getFrameToTransmit();
72  return context->getRtsPolicy()->isRtsNeeded(protectedFrame, protectedFrame->peekAtFront<Ieee80211MacHeader>());
73 }

Referenced by TxOpFs().

◆ selectMgmtOrDataQap()

int inet::ieee80211::TxOpFs::selectMgmtOrDataQap ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
42 {
43  return 0;
44 }

Referenced by TxOpFs().

◆ selectTxOpSequence()

int inet::ieee80211::TxOpFs::selectTxOpSequence ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
47 {
48  auto frameToTransmit = context->getInProgressFrames()->getFrameToTransmit();
49  const auto& macHeader = frameToTransmit->peekAtFront<Ieee80211MacHeader>();
50  if (context->getQoSContext()->ackPolicy->isBlockAckReqNeeded(context->getInProgressFrames(), context->getQoSContext()->txopProcedure))
51  return 2;
52  if (dynamicPtrCast<const Ieee80211MgmtHeader>(macHeader))
53  return 3;
54  else {
55  auto dataHeaderToTransmit = dynamicPtrCast<const Ieee80211DataHeader>(macHeader);
56  OriginatorBlockAckAgreement *agreement = nullptr;
57  if (context->getQoSContext()->blockAckAgreementHandler)
58  agreement = context->getQoSContext()->blockAckAgreementHandler->getAgreement(dataHeaderToTransmit->getReceiverAddress(), dataHeaderToTransmit->getTid());
59  auto ackPolicy = context->getQoSContext()->ackPolicy->computeAckPolicy(frameToTransmit, dataHeaderToTransmit, agreement);
60  if (ackPolicy == AckPolicy::BLOCK_ACK)
61  return 0;
62  else if (ackPolicy == AckPolicy::NORMAL_ACK)
63  return 1;
64  else
65  throw cRuntimeError("Unknown AckPolicy");
66  }
67 }

The documentation for this class was generated from the following files:
inet::ieee80211::BLOCK_ACK
@ BLOCK_ACK
Definition: Ieee80211Frame_m.h:196
inet::ieee80211::TxOpFs::isRtsCtsNeeded
virtual bool isRtsCtsNeeded(OptionalFs *frameSequence, FrameSequenceContext *context)
Definition: TxOpFs.cc:69
inet::ieee80211::TxOpFs::isBlockAckReqRtsCtsNeeded
virtual bool isBlockAckReqRtsCtsNeeded(OptionalFs *frameSequence, FrameSequenceContext *context)
Definition: TxOpFs.cc:75
ALTERNATIVESFS_SELECTOR
#define ALTERNATIVESFS_SELECTOR(selector)
Definition: GenericFrameSequences.h:23
inet::ieee80211::TxOpFs::selectTxOpSequence
virtual int selectTxOpSequence(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: TxOpFs.cc:46
OPTIONALFS_PREDICATE
#define OPTIONALFS_PREDICATE(predicate)
Definition: GenericFrameSequences.h:21
inet::ieee80211::TxOpFs::selectMgmtOrDataQap
virtual int selectMgmtOrDataQap(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: TxOpFs.cc:41
inet::ieee80211::AlternativesFs::AlternativesFs
AlternativesFs(std::vector< IFrameSequence * > elements, std::function< int(AlternativesFs *, FrameSequenceContext *)> selector)
Definition: GenericFrameSequences.cc:170
inet::ieee80211::NORMAL_ACK
@ NORMAL_ACK
Definition: Ieee80211Frame_m.h:193