#include <MpduDeaggregation.h>
◆ deaggregateFrame()
| std::vector< Packet * > * inet::ieee80211::MpduDeaggregation::deaggregateFrame |
( |
Packet * |
frame | ) |
|
|
overridevirtual |
Implements inet::ieee80211::IMpduDeaggregation.
17 EV_DEBUG <<
"Deaggregating A-MPDU " << *aggregatedFrame <<
" into multiple packets.\n";
18 std::vector<Packet *> *frames =
new std::vector<Packet *>();
19 int paddingLength = 0;
20 cStringTokenizer tokenizer(aggregatedFrame->getName(),
"+");
21 while (aggregatedFrame->getDataLength() >
b(0)) {
22 aggregatedFrame->setFrontOffset(aggregatedFrame->getFrontOffset() +
B(paddingLength == 4 ? 0 : paddingLength));
23 const auto& mpduSubframeHeader = aggregatedFrame->popAtFront<Ieee80211MpduSubframeHeader>();
24 const auto& mpdu = aggregatedFrame->peekDataAt(
b(0),
B(mpduSubframeHeader->getLength()));
25 paddingLength = 4 -
B(mpduSubframeHeader->getChunkLength() + mpdu->getChunkLength()).get() % 4;
26 aggregatedFrame->setFrontOffset(aggregatedFrame->getFrontOffset() + mpdu->getChunkLength());
27 auto frame =
new Packet();
28 frame->setName(tokenizer.nextToken());
29 frame->insertAtBack(mpdu);
30 EV_TRACE <<
"Created " << *frame <<
" from A-MPDU.\n";
32 frames->push_back(frame);
34 delete aggregatedFrame;
35 EV_TRACE <<
"Created " << frames->size() <<
" packets from A-MPDU.\n";
The documentation for this class was generated from the following files: