Bug 1814 - IPv6 Packets with length not multiple of 8 bytes are fragmented incorrectly.
This commit is contained in:
@@ -55,6 +55,7 @@ Bugs fixed
|
||||
- Bug 1802 - FlowMon header deserialization problem with IPv4 fragments
|
||||
- Bug 1807 - Multiple bugs in Ipv4L3Protocol::LocalDeliver
|
||||
- Bug 1810 - IP packets can be sent on NetDevices not respecting the minimum MTU requirements
|
||||
- Bug 1814 - IPv6 Packet with length not multiple of 8 bytes are fragmented incorrectly.
|
||||
|
||||
Release 3.18.1
|
||||
==============
|
||||
|
||||
@@ -334,6 +334,7 @@ Ipv6ExtensionFragmentHeader::Ipv6ExtensionFragmentHeader ()
|
||||
: m_offset (0),
|
||||
m_identification (0)
|
||||
{
|
||||
SetLength (0);
|
||||
}
|
||||
|
||||
Ipv6ExtensionFragmentHeader::~Ipv6ExtensionFragmentHeader ()
|
||||
@@ -388,7 +389,7 @@ void Ipv6ExtensionFragmentHeader::Serialize (Buffer::Iterator start) const
|
||||
Buffer::Iterator i = start;
|
||||
|
||||
i.WriteU8 (GetNextHeader ());
|
||||
i.WriteU8 ((GetLength () >> 3) - 1);
|
||||
i.WriteU8 (0);
|
||||
i.WriteHtonU16 (m_offset);
|
||||
i.WriteHtonU32 (m_identification);
|
||||
}
|
||||
@@ -398,7 +399,8 @@ uint32_t Ipv6ExtensionFragmentHeader::Deserialize (Buffer::Iterator start)
|
||||
Buffer::Iterator i = start;
|
||||
|
||||
SetNextHeader (i.ReadU8 ());
|
||||
SetLength ((i.ReadU8 () + 1) << 3);
|
||||
i.ReadU8();
|
||||
SetLength (0);
|
||||
m_offset = i.ReadNtohU16 ();
|
||||
m_identification = i.ReadNtohU32 ();
|
||||
|
||||
|
||||
@@ -510,6 +510,7 @@ void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragme
|
||||
{
|
||||
moreFragment = true;
|
||||
currentFragmentablePartSize = maxFragmentablePartSize;
|
||||
currentFragmentablePartSize -= currentFragmentablePartSize % 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -517,10 +518,8 @@ void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragme
|
||||
currentFragmentablePartSize = p->GetSize () - offset;
|
||||
}
|
||||
|
||||
currentFragmentablePartSize -= currentFragmentablePartSize % 8;
|
||||
|
||||
fragmentHeader.SetNextHeader (nextHeader);
|
||||
fragmentHeader.SetLength (currentFragmentablePartSize);
|
||||
fragmentHeader.SetOffset (offset);
|
||||
fragmentHeader.SetMoreFragment (moreFragment);
|
||||
fragmentHeader.SetIdentification (identification);
|
||||
|
||||
@@ -295,7 +295,7 @@ Ipv6FragmentationTest::DoRun (void)
|
||||
{
|
||||
clientDev = CreateObject<SimpleNetDevice> ();
|
||||
clientDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
|
||||
clientDev->SetMtu (1000);
|
||||
clientDev->SetMtu (1500);
|
||||
clientDev->SetReceiveErrorModel (clientDevErrorModel);
|
||||
clientDevErrorModel->Disable ();
|
||||
clientNode->AddDevice (clientDev);
|
||||
@@ -315,7 +315,7 @@ Ipv6FragmentationTest::DoRun (void)
|
||||
|
||||
|
||||
// some small packets, some rather big ones
|
||||
uint32_t packetSizes[5] = {1000, 2000, 5000, 10000, 65000};
|
||||
uint32_t packetSizes[5] = {2000, 2500, 5000, 10000, 65000};
|
||||
|
||||
// using the alphabet
|
||||
uint8_t fillData[78];
|
||||
|
||||
Reference in New Issue
Block a user