#include <BasicFragmentationPolicy.h>
◆ computeFragmentSizes()
| std::vector< int > inet::ieee80211::BasicFragmentationPolicy::computeFragmentSizes |
( |
Packet * |
frame | ) |
|
|
overridevirtual |
Implements inet::ieee80211::IFragmentationPolicy.
25 if (fragmentationThreshold < frame->getByteLength()) {
26 EV_DEBUG <<
"Computing fragment sizes: fragmentationThreshold = " <<
fragmentationThreshold <<
", packet = " << *frame <<
".\n";
27 std::vector<int> sizes;
28 int payloadLength = 0;
31 const auto& header = frame->peekAtFront<Ieee80211MacHeader>();
32 const auto& trailer = frame->peekAtBack<Ieee80211MacTrailer>(
B(4));
33 int trailerLength =
B(trailer->getChunkLength()).get();
34 if (dynamicPtrCast<const Ieee80211DataHeader>(header)) {
35 headerLength =
B(header->getChunkLength()).get();
36 payloadLength = frame->getByteLength() - headerLength - trailerLength;
39 headerLength = frame->getByteLength();
42 throw cRuntimeError(
"Fragmentation: frame \"%s\" too large, won't fit into %d fragments", frame->getName(),
MAX_NUM_FRAGMENTS);
45 EV_TRACE <<
"Computed fragment: i = " << i <<
", size = " << size <<
".\n";
46 sizes.push_back(size);
47 payloadLength -= maxFragmentPayload;
49 if (payloadLength != 0) {
50 EV_TRACE <<
"Computed last fragment: size = " << payloadLength <<
".\n";
51 sizes.push_back(payloadLength);
53 EV_TRACE <<
"Fragmentation is suggested into " << sizes.size() <<
" packets.\n";
56 EV_DEBUG <<
"Packet is not large enough for fragmentation: fragmentationThreshold = " <<
fragmentationThreshold <<
".\n";
57 return std::vector<int>();
◆ initialize()
| void inet::ieee80211::BasicFragmentationPolicy::initialize |
( |
| ) |
|
|
overrideprotectedvirtual |
◆ fragmentationThreshold
| int inet::ieee80211::BasicFragmentationPolicy::fragmentationThreshold = -1 |
|
protected |
The documentation for this class was generated from the following files: