#include <MpduAggregation.h>
◆ aggregateFrames()
| Packet * inet::ieee80211::MpduAggregation::aggregateFrames |
( |
std::vector< Packet * > * |
frames | ) |
|
|
overridevirtual |
Implements inet::ieee80211::IMpduAggregation.
19 EV_DEBUG <<
"Aggregating " << frames->size() <<
" packets into A-MPDU.\n";
20 auto aggregatedFrame =
new Packet();
21 std::string aggregatedName;
22 for (
int i = 0; i < (int)frames->size(); i++) {
23 auto mpduSubframeHeader = makeShared<Ieee80211MpduSubframeHeader>();
24 auto frame = frames->at(i);
25 auto mpdu = frame->peekAll();
26 mpduSubframeHeader->setLength(
B(mpdu->getChunkLength()).get());
27 aggregatedFrame->insertAtBack(mpduSubframeHeader);
28 aggregatedFrame->insertAtBack(mpdu);
29 int paddingLength = 4 -
B(mpduSubframeHeader->getChunkLength() + mpdu->getChunkLength()).get() % 4;
30 if (i != (
int)frames->size() - 1 && paddingLength != 4) {
31 auto padding = makeShared<ByteCountChunk>(
B(paddingLength));
32 aggregatedFrame->insertAtBack(padding);
35 aggregatedName.append(
"+");
36 aggregatedName.append(frame->getName());
39 aggregatedFrame->setName(aggregatedName.c_str());
40 EV_TRACE <<
"Created A-MPDU " << *aggregatedFrame <<
".\n";
41 return aggregatedFrame;
The documentation for this class was generated from the following files: