internet: (fixes #2741) IPv4 fragmentation fails when re-fragmenting a previous last fragment.

This commit is contained in:
Tommaso Pecorella
2017-05-20 19:47:42 +02:00
parent e31ae85028
commit 70d2462a17
2 changed files with 4 additions and 9 deletions

View File

@@ -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
------------

View File

@@ -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 ();
}