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

#include <MpduAggregation.h>

Inheritance diagram for inet::ieee80211::MpduAggregation:
inet::ieee80211::IMpduAggregation

Public Member Functions

virtual PacketaggregateFrames (std::vector< Packet * > *frames) override
 
- Public Member Functions inherited from inet::ieee80211::IMpduAggregation
virtual ~IMpduAggregation ()
 

Member Function Documentation

◆ aggregateFrames()

Packet * inet::ieee80211::MpduAggregation::aggregateFrames ( std::vector< Packet * > *  frames)
overridevirtual

Implements inet::ieee80211::IMpduAggregation.

18 {
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);
33  }
34  if (i != 0)
35  aggregatedName.append("+");
36  aggregatedName.append(frame->getName());
37  delete frame;
38  }
39  aggregatedFrame->setName(aggregatedName.c_str());
40  EV_TRACE << "Created A-MPDU " << *aggregatedFrame << ".\n";
41  return aggregatedFrame;
42 }

The documentation for this class was generated from the following files:
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168