Bug 2177 - Ipv6ExtensionHeader length - code cleanup and remove hardcoded values

This commit is contained in:
Tommaso Pecorella
2015-09-19 16:14:49 +02:00
parent 928d66f741
commit 7870451290
4 changed files with 24 additions and 19 deletions

View File

@@ -214,7 +214,6 @@ void Ping6::Send ()
{
Ipv6ExtensionLooseRoutingHeader routingHeader;
routingHeader.SetNextHeader (Ipv6Header::IPV6_ICMPV6);
routingHeader.SetLength (m_routers.size () * 16 + 8);
routingHeader.SetTypeRouting (0);
routingHeader.SetSegmentsLeft (m_routers.size ());
routingHeader.SetRoutersAddress (m_routers);

View File

@@ -46,8 +46,8 @@ TypeId Ipv6ExtensionHeader::GetInstanceTypeId () const
}
Ipv6ExtensionHeader::Ipv6ExtensionHeader ()
: m_nextHeader (0),
m_length (0),
: m_length (0),
m_nextHeader (0),
m_data (0)
{
}
@@ -254,7 +254,7 @@ uint32_t Ipv6ExtensionHopByHopHeader::Deserialize (Buffer::Iterator start)
Buffer::Iterator i = start;
SetNextHeader (i.ReadU8 ());
SetLength ((i.ReadU8 () + 1) << 3);
m_length = i.ReadU8 ();
OptionField::Deserialize (i, GetLength () - 2);
return GetSerializedSize ();
@@ -310,7 +310,7 @@ uint32_t Ipv6ExtensionDestinationHeader::Deserialize (Buffer::Iterator start)
Buffer::Iterator i = start;
SetNextHeader (i.ReadU8 ());
SetLength ((i.ReadU8 () + 1) << 3);
m_length = i.ReadU8 ();
OptionField::Deserialize (i, GetLength () - 2);
return GetSerializedSize ();
@@ -337,7 +337,7 @@ Ipv6ExtensionFragmentHeader::Ipv6ExtensionFragmentHeader ()
: m_offset (0),
m_identification (0)
{
SetLength (16);
m_length = 0;
}
Ipv6ExtensionFragmentHeader::~Ipv6ExtensionFragmentHeader ()
@@ -392,6 +392,7 @@ void Ipv6ExtensionFragmentHeader::Serialize (Buffer::Iterator start) const
Buffer::Iterator i = start;
i.WriteU8 (GetNextHeader ());
// Fragment header does not carry an extension length
i.WriteU8 (0);
i.WriteHtonU16 (m_offset);
i.WriteHtonU32 (m_identification);
@@ -402,7 +403,8 @@ uint32_t Ipv6ExtensionFragmentHeader::Deserialize (Buffer::Iterator start)
Buffer::Iterator i = start;
SetNextHeader (i.ReadU8 ());
SetLength ((i.ReadU8 () + 1) << 3);
// Fragment header does not carry an extension length
i.ReadU8 ();
m_offset = i.ReadNtohU16 ();
m_identification = i.ReadNtohU32 ();
@@ -472,7 +474,7 @@ void Ipv6ExtensionRoutingHeader::Serialize (Buffer::Iterator start) const
Buffer::Iterator i = start;
i.WriteU8 (GetNextHeader ());
i.WriteU8 ((GetLength () >> 3) - 1);
i.WriteU8 (m_length);
i.WriteU8 (m_typeRouting);
i.WriteU8 (m_segmentsLeft);
}
@@ -482,7 +484,7 @@ uint32_t Ipv6ExtensionRoutingHeader::Deserialize (Buffer::Iterator start)
Buffer::Iterator i = start;
SetNextHeader (i.ReadU8 ());
SetLength ((i.ReadU8 () + 1) << 3);
m_length = i.ReadU8 ();
m_typeRouting = i.ReadU8 ();
m_segmentsLeft = i.ReadU8 ();
@@ -564,8 +566,10 @@ void Ipv6ExtensionLooseRoutingHeader::Serialize (Buffer::Iterator start) const
Buffer::Iterator i = start;
uint8_t buff[16];
uint8_t addressNum = m_routersAddress.size ();
i.WriteU8 (GetNextHeader ());
i.WriteU8 ((GetLength () >> 3) - 1);
i.WriteU8 (addressNum*2);
i.WriteU8 (GetTypeRouting ());
i.WriteU8 (GetSegmentsLeft ());
i.WriteU32 (0);
@@ -583,15 +587,17 @@ uint32_t Ipv6ExtensionLooseRoutingHeader::Deserialize (Buffer::Iterator start)
uint8_t buff[16];
SetNextHeader (i.ReadU8 ());
SetLength ((i.ReadU8 () + 1) << 3);
m_length = i.ReadU8 ();
SetTypeRouting (i.ReadU8 ());
SetSegmentsLeft (i.ReadU8 ());
i.ReadU32 ();
for (std::vector<Ipv6Address>::iterator it = m_routersAddress.begin (); it != m_routersAddress.end (); it++)
uint8_t addressNum = m_length / 2;
SetNumberAddress (addressNum);
for (uint8_t index = 0; index < addressNum; index++)
{
i.Read (buff, 16);
it->Set (buff);
SetRouterAddress (index, Ipv6Address (buff));
}
return GetSerializedSize ();

View File

@@ -111,17 +111,18 @@ public:
*/
virtual uint32_t Deserialize (Buffer::Iterator start);
protected:
/**
* \brief The "length" field.
*/
uint8_t m_length;
private:
/**
* \brief The "next header" field.
*/
uint8_t m_nextHeader;
/**
* \brief The "length" field.
*/
uint8_t m_length;
/**
* \brief The data of the extension.
*/

View File

@@ -1020,7 +1020,6 @@ uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet,
return routingHeader.GetSerializedSize ();
}
routingHeader.SetLength (88);
ipv6header.SetHopLimit (hopLimit - 1);
p->AddHeader (routingHeader);