|
INET Framework for OMNeT++/OMNEST
|
#include <RecipientQosMacDataService.h>
◆ ~RecipientQosMacDataService()
| inet::ieee80211::RecipientQosMacDataService::~RecipientQosMacDataService |
( |
| ) |
|
|
protectedvirtual |
◆ controlFrameReceived()
Implements inet::ieee80211::IRecipientQosMacDataService.
139 if (
auto blockAckReq = dynamicPtrCast<const Ieee80211BasicBlockAckReq>(controlHeader)) {
142 Tid tid = blockAckReq->getTidInfo();
143 MacAddress originatorAddr = blockAckReq->getTransmitterAddress();
144 RecipientBlockAckAgreement *agreement = blockAckAgreementHandler->getAgreement(tid, originatorAddr);
148 return std::vector<Packet *>();
150 std::vector<Packet *> defragmentedFrames;
152 for (
auto it : frames) {
153 auto fragments = it.second;
154 defragmentedFrames.push_back(
defragment(fragments));
158 for (
auto it : frames) {
159 auto fragments = it.second;
160 if (fragments.size() == 1) {
161 defragmentedFrames.push_back(fragments.at(0));
168 std::vector<Packet *> deaggregatedFrames;
170 for (
auto frame : defragmentedFrames) {
171 if (frame->peekAtFront<Ieee80211DataHeader>()->getAMsduPresent()) {
174 for (
auto subframe : *subframes)
175 deaggregatedFrames.push_back(subframe);
179 deaggregatedFrames.push_back(frame);
183 return deaggregatedFrames;
185 return std::vector<Packet *>();
◆ dataFrameReceived()
Implements inet::ieee80211::IRecipientQosMacDataService.
62 EV_WARN <<
"Dropping duplicate packet " << *dataPacket <<
".\n";
63 PacketDropDetails details;
67 return std::vector<Packet *>();
70 frames[dataHeader->getSequenceNumber().get()].push_back(dataPacket);
72 Tid tid = dataHeader->getTid();
73 MacAddress originatorAddr = dataHeader->getTransmitterAddress();
74 RecipientBlockAckAgreement *agreement = blockAckAgreementHandler->getAgreement(tid, originatorAddr);
78 std::vector<Packet *> defragmentedFrames;
80 for (
auto it : frames) {
81 auto fragments = it.second;
85 defragmentedFrames.push_back(frame);
89 for (
auto it : frames) {
90 auto fragments = it.second;
91 if (fragments.size() == 1)
92 defragmentedFrames.push_back(fragments.at(0));
96 std::vector<Packet *> deaggregatedFrames;
98 for (
auto defragmentedFrame : defragmentedFrames) {
99 auto defragmentedHeader = defragmentedFrame->peekAtFront<Ieee80211DataHeader>();
100 if (defragmentedHeader->getAMsduPresent()) {
103 for (
auto subframe : *subframes)
104 deaggregatedFrames.push_back(subframe);
108 deaggregatedFrames.push_back(defragmentedFrame);
112 return deaggregatedFrames;
◆ defragment() [1/2]
| Packet * inet::ieee80211::RecipientQosMacDataService::defragment |
( |
Packet * |
mgmtFragment | ) |
|
|
protectedvirtual |
48 if (packet && packet->hasAtFront<Ieee80211DataOrMgmtHeader>()) {
◆ defragment() [2/2]
| Packet * inet::ieee80211::RecipientQosMacDataService::defragment |
( |
std::vector< Packet * > |
completeFragments | ) |
|
|
protectedvirtual |
◆ initialize()
| void inet::ieee80211::RecipientQosMacDataService::initialize |
( |
| ) |
|
|
overrideprotectedvirtual |
◆ managementFrameReceived()
| std::vector< Packet * > inet::ieee80211::RecipientQosMacDataService::managementFrameReceived |
( |
Packet * |
mgmtPacket, |
|
|
const Ptr< const Ieee80211MgmtHeader > & |
mgmtHeader |
|
) |
| |
|
overridevirtual |
Implements inet::ieee80211::IRecipientQosMacDataService.
121 return std::vector<Packet *>();
125 if (
auto delba = dynamicPtrCast<const Ieee80211Delba>(mgmtHeader))
128 if (dynamicPtrCast<const Ieee80211ActionFrame>(mgmtHeader)) {
130 return std::vector<Packet *>();
133 return std::vector<Packet *>({ mgmtPacket });
◆ aMpduDeaggregation
| IMpduDeaggregation* inet::ieee80211::RecipientQosMacDataService::aMpduDeaggregation = nullptr |
|
protected |
◆ aMsduDeaggregation
| IMsduDeaggregation* inet::ieee80211::RecipientQosMacDataService::aMsduDeaggregation = nullptr |
|
protected |
◆ basicReassembly
| IReassembly* inet::ieee80211::RecipientQosMacDataService::basicReassembly = nullptr |
|
protected |
◆ blockAckReordering
| BlockAckReordering* inet::ieee80211::RecipientQosMacDataService::blockAckReordering = nullptr |
|
protected |
◆ defragmentation
| IDefragmentation* inet::ieee80211::RecipientQosMacDataService::defragmentation = nullptr |
|
protected |
◆ duplicateRemoval
| IDuplicateRemoval* inet::ieee80211::RecipientQosMacDataService::duplicateRemoval = nullptr |
|
protected |
The documentation for this class was generated from the following files:
std::map< SequenceNumber, Fragments > ReorderBuffer
Definition: BlockAckReordering.h:27
IMsduDeaggregation * aMsduDeaggregation
Definition: RecipientQosMacDataService.h:37
ReorderBuffer processReceivedQoSFrame(RecipientBlockAckAgreement *agreement, Packet *dataPacket, const Ptr< const Ieee80211DataHeader > &dataHeader)
Definition: BlockAckReordering.cc:18
IMpduDeaggregation * aMpduDeaggregation
Definition: RecipientQosMacDataService.h:30
@ DUPLICATE_DETECTED
Definition: Simsignals_m.h:83
ReorderBuffer processReceivedBlockAckReq(RecipientBlockAckAgreement *agreement, const Ptr< const Ieee80211BlockAckReq > &blockAckReq)
Definition: BlockAckReordering.cc:54
static simsignal_t packetDefragmentedSignal
Definition: IRecipientQosMacDataService.h:21
simsignal_t packetDroppedSignal
Definition: Simsignals.cc:85
IDuplicateRemoval * duplicateRemoval
Definition: RecipientQosMacDataService.h:33
virtual Packet * addFragment(Packet *frame)=0
Add a fragment to the reassembly buffer.
int8_t Tid
Definition: Ieee80211Defs.h:17
virtual Packet * defragment(std::vector< Packet * > completeFragments)
Definition: RecipientQosMacDataService.cc:33
virtual bool isDuplicate(const Ptr< const Ieee80211DataOrMgmtHeader > &header)=0
void processReceivedDelba(const Ptr< const Ieee80211Delba > &delba)
Definition: BlockAckReordering.cc:188
#define Enter_Method(...)
Definition: SelfDoc.h:71
static simsignal_t packetDeaggregatedSignal
Definition: IRecipientQosMacDataService.h:22
virtual std::vector< Packet * > * deaggregateFrame(Packet *frame)=0
BlockAckReordering * blockAckReordering
Definition: RecipientQosMacDataService.h:35
IReassembly * basicReassembly
Definition: RecipientQosMacDataService.h:28