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

#include <DcfFs.h>

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

Public Member Functions

 DcfFs ()
 
virtual int selectDcfSequence (AlternativesFs *frameSequence, FrameSequenceContext *context)
 
virtual int selectSelfCtsOrRtsCts (AlternativesFs *frameSequence, FrameSequenceContext *context)
 
virtual int selectMulticastDataOrMgmt (AlternativesFs *frameSequence, FrameSequenceContext *context)
 
virtual bool hasMoreFragments (RepeatingFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isSelfCtsNeeded (OptionalFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isRtsCtsNeeded (OptionalFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isCtsOrRtsCtsNeeded (OptionalFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isBroadcastManagementOrGroupDataSequenceNeeded (AlternativesFs *frameSequence, FrameSequenceContext *context)
 
virtual bool isFragFrameSequenceNeeded (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

◆ DcfFs()

inet::ieee80211::DcfFs::DcfFs ( )
15  :
16  // Excerpt from G.2 Basic sequences (p. 2309)
17  // frame-sequence =
18  // ( [ CTS ] ( Management + broadcast | Data + group ) ) |
19  // ( [ CTS | RTS CTS] {frag-frame ACK } last-frame ACK )
20  //
21  // frag-frame = ( Data | Management ) + individual + frag;
22  // last-frame = ( Data | Management ) + individual + last;
23  //
24  AlternativesFs({new SequentialFs({new OptionalFs(new SelfCtsFs(), OPTIONALFS_PREDICATE(isSelfCtsNeeded)),
25  new AlternativesFs({new ManagementFs(), new DataFs()}, ALTERNATIVESFS_SELECTOR(selectMulticastDataOrMgmt))}),
26  new SequentialFs({new OptionalFs(new AlternativesFs({new SelfCtsFs(), new SequentialFs({new RtsFs(), new CtsFs()})},
29  new RepeatingFs(new FragFrameAckFs(), REPEATINGFS_PREDICATE(hasMoreFragments)),
30  new LastFrameAckFs()})},
32 {
33 }

Member Function Documentation

◆ hasMoreFragments()

bool inet::ieee80211::DcfFs::hasMoreFragments ( RepeatingFs frameSequence,
FrameSequenceContext context 
)
virtual
54 {
55  return context->getInProgressFrames()->hasInProgressFrames() && context->getInProgressFrames()->getFrameToTransmit()->peekAtFront<Ieee80211MacHeader>()->getMoreFragments();
56 }

Referenced by DcfFs().

◆ isBroadcastManagementOrGroupDataSequenceNeeded()

bool inet::ieee80211::DcfFs::isBroadcastManagementOrGroupDataSequenceNeeded ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
77 {
78  if (context->getInProgressFrames()->hasInProgressFrames()) {
79  auto frameToTransmit = context->getInProgressFrames()->getFrameToTransmit();
80  return frameToTransmit->peekAtFront<Ieee80211MacHeader>()->getReceiverAddress().isMulticast();
81  }
82  else
83  return false;
84 }

Referenced by selectDcfSequence().

◆ isCtsOrRtsCtsNeeded()

bool inet::ieee80211::DcfFs::isCtsOrRtsCtsNeeded ( OptionalFs frameSequence,
FrameSequenceContext context 
)
virtual
70 {
71  bool selfCts = isSelfCtsNeeded(frameSequence, context);
72  bool rtsCts = isRtsCtsNeeded(frameSequence, context);
73  return selfCts || rtsCts;
74 }

Referenced by DcfFs().

◆ isFragFrameSequenceNeeded()

bool inet::ieee80211::DcfFs::isFragFrameSequenceNeeded ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
93 {
94  return context->getInProgressFrames()->hasInProgressFrames() && dynamicPtrCast<const Ieee80211DataOrMgmtHeader>(context->getInProgressFrames()->getFrameToTransmit()->peekAtFront<Ieee80211MacHeader>());
95 }

Referenced by selectDcfSequence().

◆ isRtsCtsNeeded()

bool inet::ieee80211::DcfFs::isRtsCtsNeeded ( OptionalFs frameSequence,
FrameSequenceContext context 
)
virtual
64 {
65  auto protectedFrame = context->getInProgressFrames()->getFrameToTransmit();
66  return context->getRtsPolicy()->isRtsNeeded(protectedFrame, protectedFrame->peekAtFront<Ieee80211MacHeader>());
67 }

Referenced by isCtsOrRtsCtsNeeded(), and selectSelfCtsOrRtsCts().

◆ isSelfCtsNeeded()

bool inet::ieee80211::DcfFs::isSelfCtsNeeded ( OptionalFs frameSequence,
FrameSequenceContext context 
)
virtual
59 {
60  return false; // TODO Implement
61 }

Referenced by DcfFs(), isCtsOrRtsCtsNeeded(), and selectSelfCtsOrRtsCts().

◆ selectDcfSequence()

int inet::ieee80211::DcfFs::selectDcfSequence ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
36 {
37  bool multicastMgmtOrDataSequence = isBroadcastManagementOrGroupDataSequenceNeeded(frameSequence, context);
38  bool fragFrameSequence = isFragFrameSequenceNeeded(frameSequence, context);
39  if (multicastMgmtOrDataSequence) return 0;
40  else if (fragFrameSequence) return 1;
41  else throw cRuntimeError("One alternative must be chosen");
42 }

◆ selectMulticastDataOrMgmt()

int inet::ieee80211::DcfFs::selectMulticastDataOrMgmt ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
87 {
88  auto frameToTransmit = context->getInProgressFrames()->getFrameToTransmit();
89  return dynamicPtrCast<const Ieee80211MgmtHeader>(frameToTransmit->peekAtFront<Ieee80211MacHeader>()) ? 0 : 1;
90 }

Referenced by DcfFs().

◆ selectSelfCtsOrRtsCts()

int inet::ieee80211::DcfFs::selectSelfCtsOrRtsCts ( AlternativesFs frameSequence,
FrameSequenceContext context 
)
virtual
45 {
46  bool selfCts = isSelfCtsNeeded(nullptr, context); // TODO
47  bool rtsCts = isRtsCtsNeeded(nullptr, context); // TODO
48  if (selfCts) return 0;
49  else if (rtsCts) return 1;
50  else throw cRuntimeError("One alternative must be chosen");
51 }

Referenced by DcfFs().


The documentation for this class was generated from the following files:
inet::ieee80211::DcfFs::isBroadcastManagementOrGroupDataSequenceNeeded
virtual bool isBroadcastManagementOrGroupDataSequenceNeeded(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:76
inet::ieee80211::DcfFs::selectMulticastDataOrMgmt
virtual int selectMulticastDataOrMgmt(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:86
inet::ieee80211::DcfFs::hasMoreFragments
virtual bool hasMoreFragments(RepeatingFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:53
inet::ieee80211::DcfFs::isRtsCtsNeeded
virtual bool isRtsCtsNeeded(OptionalFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:63
inet::ieee80211::DcfFs::selectSelfCtsOrRtsCts
virtual int selectSelfCtsOrRtsCts(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:44
ALTERNATIVESFS_SELECTOR
#define ALTERNATIVESFS_SELECTOR(selector)
Definition: GenericFrameSequences.h:23
REPEATINGFS_PREDICATE
#define REPEATINGFS_PREDICATE(predicate)
Definition: GenericFrameSequences.h:22
inet::ieee80211::DcfFs::isSelfCtsNeeded
virtual bool isSelfCtsNeeded(OptionalFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:58
inet::ieee80211::DcfFs::isCtsOrRtsCtsNeeded
virtual bool isCtsOrRtsCtsNeeded(OptionalFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:69
inet::ieee80211::DcfFs::isFragFrameSequenceNeeded
virtual bool isFragFrameSequenceNeeded(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:92
OPTIONALFS_PREDICATE
#define OPTIONALFS_PREDICATE(predicate)
Definition: GenericFrameSequences.h:21
inet::ieee80211::DcfFs::selectDcfSequence
virtual int selectDcfSequence(AlternativesFs *frameSequence, FrameSequenceContext *context)
Definition: DcfFs.cc:35
inet::ieee80211::AlternativesFs::AlternativesFs
AlternativesFs(std::vector< IFrameSequence * > elements, std::function< int(AlternativesFs *, FrameSequenceContext *)> selector)
Definition: GenericFrameSequences.cc:170