internet: (fixes #2741) IPv4 fragmentation fails when re-fragmenting a previous last fragment.
This commit is contained in:
@@ -103,6 +103,7 @@ Bugs fixed
|
||||
- Bug 2671 - ArpCache::Entry::SetMacAddress is misspelled
|
||||
- Bug 2717 - Fix mask generation for Ipv4RoutingTableEntry::CreateDefaultRoute
|
||||
- Bug 2722 - 802.11g sends DSSS spectrum signals using CreateOfdmTxPowerSpectralDensity
|
||||
- Bug 2741 - IPv4 fragmentation fails when last fragment have to be re-fragmented.
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
@@ -1422,16 +1422,10 @@ Ipv4L3Protocol::DoFragmentation (Ptr<Packet> packet, const Ipv4Header & ipv4Head
|
||||
|
||||
uint16_t offset = 0;
|
||||
bool moreFragment = true;
|
||||
uint16_t originalOffset = 0;
|
||||
bool alreadyFragmented = false;
|
||||
uint16_t originalOffset = ipv4Header.GetFragmentOffset();
|
||||
bool isLastFragment = ipv4Header.IsLastFragment();
|
||||
uint32_t currentFragmentablePartSize = 0;
|
||||
|
||||
if (!ipv4Header.IsLastFragment())
|
||||
{
|
||||
alreadyFragmented = true;
|
||||
originalOffset = ipv4Header.GetFragmentOffset();
|
||||
}
|
||||
|
||||
// IPv4 fragments are all 8 bytes aligned but the last.
|
||||
// The IP payload size is:
|
||||
// floor( ( outIfaceMtu - ipv4Header.GetSerializedSize() ) /8 ) *8
|
||||
@@ -1453,7 +1447,7 @@ Ipv4L3Protocol::DoFragmentation (Ptr<Packet> packet, const Ipv4Header & ipv4Head
|
||||
{
|
||||
moreFragment = false;
|
||||
currentFragmentablePartSize = p->GetSize () - offset;
|
||||
if (alreadyFragmented)
|
||||
if (!isLastFragment)
|
||||
{
|
||||
fragmentHeader.SetMoreFragments ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user