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

#include <Fragmentation.h>

Inheritance diagram for inet::ieee80211::Fragmentation:
inet::ieee80211::IFragmentation

Public Member Functions

virtual std::vector< Packet * > * fragmentFrame (Packet *frame, const std::vector< int > &fragmentSizes) override
 
- Public Member Functions inherited from inet::ieee80211::IFragmentation
virtual ~IFragmentation ()
 

Member Function Documentation

◆ fragmentFrame()

std::vector< Packet * > * inet::ieee80211::Fragmentation::fragmentFrame ( Packet frame,
const std::vector< int > &  fragmentSizes 
)
overridevirtual

Implements inet::ieee80211::IFragmentation.

18 {
19  EV_DEBUG << "Fragmenting " << *frame << " into " << fragmentSizes.size() << " fragments.\n";
20  B offset = B(0);
21  std::vector<Packet *> *fragments = new std::vector<Packet *>();
22  const auto& frameHeader = frame->popAtFront<Ieee80211DataOrMgmtHeader>();
23  frame->popAtBack<Ieee80211MacTrailer>(B(4));
24  for (size_t i = 0; i < fragmentSizes.size(); i++) {
25  bool lastFragment = i == fragmentSizes.size() - 1;
26  std::string name = std::string(frame->getName()) + "-frag" + std::to_string(i);
27  auto fragment = new Packet(name.c_str());
28  B length = B(fragmentSizes.at(i));
29  fragment->insertAtBack(frame->peekDataAt(offset, length));
30  offset += length;
31  const auto& fragmentHeader = staticPtrCast<Ieee80211DataOrMgmtHeader>(frameHeader->dupShared());
32  fragmentHeader->setSequenceNumber(frameHeader->getSequenceNumber());
33  fragmentHeader->setFragmentNumber(i);
34  fragmentHeader->setMoreFragments(!lastFragment);
35  fragment->insertAtFront(fragmentHeader);
36  fragment->insertAtBack(makeShared<Ieee80211MacTrailer>());
37  EV_TRACE << "Created " << *fragment << " fragment.\n";
38  fragments->push_back(fragment);
39  }
40  delete frame;
41  EV_TRACE << "Created " << fragments->size() << " fragments.\n";
42  return fragments;
43 }

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