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

#include <OriginatorQoSMacDataService.h>

Inheritance diagram for inet::ieee80211::OriginatorQoSMacDataService:
inet::ieee80211::IOriginatorMacDataService

Public Member Functions

virtual ~OriginatorQoSMacDataService ()
 
virtual FragmentsextractFramesToTransmit (PendingQueue *pendingQueue) override
 

Protected Member Functions

virtual void initialize () override
 
virtual Ieee80211DataOrMgmtFrameassignSequenceNumber (Ieee80211DataOrMgmtFrame *frame)
 
virtual FragmentsfragmentIfNeeded (Ieee80211DataOrMgmtFrame *frame)
 
virtual Ieee80211DataOrMgmtFrameaMsduAggregateIfNeeded (PendingQueue *pendingQueue)
 

Protected Attributes

ISequenceNumberAssignmentsequenceNumberAssigment = nullptr
 
IFragmentationPolicyfragmentationPolicy = nullptr
 
IFragmentationfragmentation = nullptr
 
IMsduAggregationPolicyaMsduAggregationPolicy = nullptr
 
IMsduAggregationaMsduAggregation = nullptr
 

Additional Inherited Members

- Public Types inherited from inet::ieee80211::IOriginatorMacDataService
typedef std::vector< Ieee80211DataOrMgmtFrame * > Fragments
 

Constructor & Destructor Documentation

inet::ieee80211::OriginatorQoSMacDataService::~OriginatorQoSMacDataService ( )
virtual
103 {
104  delete aMsduAggregation;
106  delete fragmentation;
107 }
IFragmentation * fragmentation
Definition: OriginatorQoSMacDataService.h:43
IMsduAggregation * aMsduAggregation
Definition: OriginatorQoSMacDataService.h:45
ISequenceNumberAssignment * sequenceNumberAssigment
Definition: OriginatorQoSMacDataService.h:38

Member Function Documentation

Ieee80211DataOrMgmtFrame * inet::ieee80211::OriginatorQoSMacDataService::aMsduAggregateIfNeeded ( PendingQueue pendingQueue)
protectedvirtual

Referenced by extractFramesToTransmit().

39 {
40  auto subframes = aMsduAggregationPolicy->computeAggregateFrames(pendingQueue);
41  if (subframes) {
42  for (auto f : *subframes)
43  pendingQueue->remove(f);
44  auto aggregatedFrame = aMsduAggregation->aggregateFrames(subframes);
45  delete subframes;
46  return aggregatedFrame;
47  }
48  return nullptr;
49 }
IMsduAggregation * aMsduAggregation
Definition: OriginatorQoSMacDataService.h:45
virtual std::vector< Ieee80211DataFrame * > * computeAggregateFrames(cQueue *queue)=0
IMsduAggregationPolicy * aMsduAggregationPolicy
Definition: OriginatorQoSMacDataService.h:44
virtual Ieee80211DataFrame * aggregateFrames(std::vector< Ieee80211DataFrame * > *frames)=0
Ieee80211DataOrMgmtFrame * inet::ieee80211::OriginatorQoSMacDataService::assignSequenceNumber ( Ieee80211DataOrMgmtFrame frame)
protectedvirtual

Referenced by extractFramesToTransmit().

52 {
54  return frame;
55 }
virtual void assignSequenceNumber(Ieee80211DataOrMgmtFrame *frame)=0
ISequenceNumberAssignment * sequenceNumberAssigment
Definition: OriginatorQoSMacDataService.h:38
OriginatorQoSMacDataService::Fragments * inet::ieee80211::OriginatorQoSMacDataService::extractFramesToTransmit ( PendingQueue pendingQueue)
overridevirtual

Implements inet::ieee80211::IOriginatorMacDataService.

68 {
69  if (pendingQueue->isEmpty())
70  return nullptr;
71  else {
72  // if (msduRateLimiting)
73  // txRateLimitingIfNeeded();
74  Ieee80211DataOrMgmtFrame *frame = nullptr;
76  frame = aMsduAggregateIfNeeded(pendingQueue);
77  if (!frame)
78  frame = pendingQueue->pop();
79  // PS Defer Queueing
81  frame = assignSequenceNumber(frame);
82  // if (msduIntegrityAndProtection)
83  // frame = protectMsduIfNeeded(frame);
84  Fragments *fragments = nullptr;
86  fragments = fragmentIfNeeded(frame);
87  if (!fragments)
88  fragments = new Fragments({frame});
89  // if (mpduEncryptionAndIntegrity)
90  // fragments = encryptMpduIfNeeded(fragments);
91  // if (mpduHeaderPlusCrc)
92  // fragments = mpduCrcFooBarIfNeeded(fragments);
93  // Ieee80211DataOrMgmtFrame *aMpdu = nullptr;
94  // if (aMpduAggregation)
95  // aMpdu = aMpduAggregateIfNeeded(fragments);
96  // if (aMpdu)
97  // fragments = new Fragments({aMpdu});
98  return fragments;
99  }
100 }
virtual Ieee80211DataOrMgmtFrame * assignSequenceNumber(Ieee80211DataOrMgmtFrame *frame)
Definition: OriginatorQoSMacDataService.cc:51
std::vector< Ieee80211DataOrMgmtFrame * > Fragments
Definition: IOriginatorMacDataService.h:29
IFragmentationPolicy * fragmentationPolicy
Definition: OriginatorQoSMacDataService.h:42
ISequenceNumberAssignment * sequenceNumberAssigment
Definition: OriginatorQoSMacDataService.h:38
IMsduAggregationPolicy * aMsduAggregationPolicy
Definition: OriginatorQoSMacDataService.h:44
virtual Ieee80211DataOrMgmtFrame * aMsduAggregateIfNeeded(PendingQueue *pendingQueue)
Definition: OriginatorQoSMacDataService.cc:38
virtual Fragments * fragmentIfNeeded(Ieee80211DataOrMgmtFrame *frame)
Definition: OriginatorQoSMacDataService.cc:57
OriginatorQoSMacDataService::Fragments * inet::ieee80211::OriginatorQoSMacDataService::fragmentIfNeeded ( Ieee80211DataOrMgmtFrame frame)
protectedvirtual

Referenced by extractFramesToTransmit().

58 {
59  auto fragmentSizes = fragmentationPolicy->computeFragmentSizes(frame);
60  if (fragmentSizes.size() != 0) {
61  auto fragmentFrames = fragmentation->fragmentFrame(frame, fragmentSizes);
62  return fragmentFrames;
63  }
64  return nullptr;
65 }
IFragmentation * fragmentation
Definition: OriginatorQoSMacDataService.h:43
IFragmentationPolicy * fragmentationPolicy
Definition: OriginatorQoSMacDataService.h:42
virtual std::vector< Ieee80211DataOrMgmtFrame * > * fragmentFrame(Ieee80211DataOrMgmtFrame *frame, const std::vector< int > &fragmentSizes)=0
virtual std::vector< int > computeFragmentSizes(Ieee80211DataOrMgmtFrame *frame)=0
void inet::ieee80211::OriginatorQoSMacDataService::initialize ( )
overrideprotectedvirtual
29 {
30  aMsduAggregationPolicy = dynamic_cast<IMsduAggregationPolicy*>(getSubmodule("msduAggregationPolicy"));
32  aMsduAggregation = new MsduAggregation();
33  sequenceNumberAssigment = new QoSSequenceNumberAssignment();
34  fragmentationPolicy = dynamic_cast<IFragmentationPolicy*>(getSubmodule("fragmentationPolicy"));
35  fragmentation = new Fragmentation();
36 }
IFragmentation * fragmentation
Definition: OriginatorQoSMacDataService.h:43
IFragmentationPolicy * fragmentationPolicy
Definition: OriginatorQoSMacDataService.h:42
IMsduAggregation * aMsduAggregation
Definition: OriginatorQoSMacDataService.h:45
ISequenceNumberAssignment * sequenceNumberAssigment
Definition: OriginatorQoSMacDataService.h:38
IMsduAggregationPolicy * aMsduAggregationPolicy
Definition: OriginatorQoSMacDataService.h:44

Member Data Documentation

IMsduAggregation* inet::ieee80211::OriginatorQoSMacDataService::aMsduAggregation = nullptr
protected
IMsduAggregationPolicy* inet::ieee80211::OriginatorQoSMacDataService::aMsduAggregationPolicy = nullptr
protected
IFragmentation* inet::ieee80211::OriginatorQoSMacDataService::fragmentation = nullptr
protected
IFragmentationPolicy* inet::ieee80211::OriginatorQoSMacDataService::fragmentationPolicy = nullptr
protected
ISequenceNumberAssignment* inet::ieee80211::OriginatorQoSMacDataService::sequenceNumberAssigment = nullptr
protected

The documentation for this class was generated from the following files: