#include <Fragmentation.h>
◆ fragmentFrame()
| std::vector< Packet * > * inet::ieee80211::Fragmentation::fragmentFrame |
( |
Packet * |
frame, |
|
|
const std::vector< int > & |
fragmentSizes |
|
) |
| |
|
overridevirtual |
Implements inet::ieee80211::IFragmentation.
19 EV_DEBUG <<
"Fragmenting " << *frame <<
" into " << fragmentSizes.size() <<
" fragments.\n";
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));
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);
41 EV_TRACE <<
"Created " << fragments->size() <<
" fragments.\n";
The documentation for this class was generated from the following files: