Coding style.

This commit is contained in:
Sebastien Vincent
2009-11-18 10:17:36 +01:00
parent 6fbc6a1490
commit 03bf552480
9 changed files with 459 additions and 460 deletions

View File

@@ -45,26 +45,25 @@ NS_LOG_COMPONENT_DEFINE ("FragmentationIpv6Example");
*/
class StackHelper
{
public:
/**
* \brief Add an address to a IPv6 node.
* \param n node
* \param interface interface index
* \param address IPv6 address to add
*/
inline void AddAddress (Ptr<Node>& n, uint32_t interface, Ipv6Address address)
{
public:
/**
* \brief Add an address to a IPv6 node.
* \param n node
* \param interface interface index
* \param address IPv6 address to add
*/
inline void AddAddress (Ptr<Node>& n, uint32_t interface, Ipv6Address address)
{
Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
ipv6->AddAddress (interface, address);
}
/**
* \brief Print the routing table.
* \param n the node
*/
inline void PrintRoutingTable (Ptr<Node>& n)
{
/**
* \brief Print the routing table.
* \param n the node
*/
inline void PrintRoutingTable (Ptr<Node>& n)
{
Ptr<Ipv6StaticRouting> routing = 0;
Ipv6StaticRoutingHelper routingHelper;
Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
@@ -78,15 +77,15 @@ class StackHelper
nbRoutes = routing->GetNRoutes ();
for (uint32_t i = 0 ; i < nbRoutes ; i++)
{
route = routing->GetRoute (i);
std::cout << route.GetDest () << "\t"
<< route.GetGateway () << "\t"
<< route.GetInterface () << "\t"
<< route.GetPrefixToUse () << "\t"
<< std::endl;
}
}
{
route = routing->GetRoute (i);
std::cout << route.GetDest () << "\t"
<< route.GetGateway () << "\t"
<< route.GetInterface () << "\t"
<< route.GetPrefixToUse () << "\t"
<< std::endl;
}
}
};
int main (int argc, char** argv)

View File

@@ -35,9 +35,9 @@ TypeId Ipv6ExtensionDemux::GetTypeId ()
static TypeId tid = TypeId ("ns3::Ipv6ExtensionDemux")
.SetParent<Object> ()
.AddAttribute ("Extensions", "The set of IPv6 extensions registered with this demux.",
ObjectVectorValue (),
MakeObjectVectorAccessor (&Ipv6ExtensionDemux::m_extensions),
MakeObjectVectorChecker<Ipv6Extension> ())
ObjectVectorValue (),
MakeObjectVectorAccessor (&Ipv6ExtensionDemux::m_extensions),
MakeObjectVectorChecker<Ipv6Extension> ())
;
return tid;
}
@@ -53,10 +53,10 @@ Ipv6ExtensionDemux::~Ipv6ExtensionDemux ()
void Ipv6ExtensionDemux::DoDispose ()
{
for (Ipv6ExtensionList_t::iterator it = m_extensions.begin (); it != m_extensions.end (); it++)
{
(*it)->Dispose ();
*it = 0;
}
{
(*it)->Dispose ();
*it = 0;
}
m_extensions.clear ();
m_node = 0;
Object::DoDispose ();
@@ -75,12 +75,12 @@ void Ipv6ExtensionDemux::Insert (Ptr<Ipv6Extension> extension)
Ptr<Ipv6Extension> Ipv6ExtensionDemux::GetExtension (uint8_t extensionNumber)
{
for (Ipv6ExtensionList_t::iterator i = m_extensions.begin (); i != m_extensions.end (); ++i)
{
if ((*i)->GetExtensionNumber () == extensionNumber)
{
return *i;
if ((*i)->GetExtensionNumber () == extensionNumber)
{
return *i;
}
}
}
return 0;
}

View File

@@ -37,66 +37,66 @@ class Node;
*/
class Ipv6ExtensionDemux : public Object
{
public:
/**
* \brief The interface ID.
* \return type ID
*/
static TypeId GetTypeId (void);
public:
/**
* \brief The interface ID.
* \return type ID
*/
static TypeId GetTypeId (void);
/**
* \brief Constructor.
*/
Ipv6ExtensionDemux ();
/**
* \brief Constructor.
*/
Ipv6ExtensionDemux ();
/**
* \brief Destructor.
*/
virtual ~Ipv6ExtensionDemux ();
/**
* \brief Destructor.
*/
virtual ~Ipv6ExtensionDemux ();
/**
* \brief Set the node.
* \param node the node to set
*/
void SetNode (Ptr<Node> node);
/**
* \brief Set the node.
* \param node the node to set
*/
void SetNode (Ptr<Node> node);
/**
* \brief Insert a new IPv6 Extension.
* \param extension the extension to insert
*/
void Insert (Ptr<Ipv6Extension> extension);
/**
* \brief Insert a new IPv6 Extension.
* \param extension the extension to insert
*/
void Insert (Ptr<Ipv6Extension> extension);
/**
* \brief Get the extension corresponding to extensionNumber.
* \param extensionNumber extension number of the extension to retrieve
* \return a matching IPv6 extension
*/
Ptr<Ipv6Extension> GetExtension (uint8_t extensionNumber);
/**
* \brief Get the extension corresponding to extensionNumber.
* \param extensionNumber extension number of the extension to retrieve
* \return a matching IPv6 extension
*/
Ptr<Ipv6Extension> GetExtension (uint8_t extensionNumber);
/**
* \brief Remove an extension from this demux.
* \param extension pointer on the extension to remove
*/
void Remove (Ptr<Ipv6Extension> extension);
/**
* \brief Remove an extension from this demux.
* \param extension pointer on the extension to remove
*/
void Remove (Ptr<Ipv6Extension> extension);
protected:
/**
* \brief Dispose object.
*/
virtual void DoDispose ();
protected:
/**
* \brief Dispose object.
*/
virtual void DoDispose ();
private:
typedef std::list<Ptr<Ipv6Extension> > Ipv6ExtensionList_t;
private:
typedef std::list<Ptr<Ipv6Extension> > Ipv6ExtensionList_t;
/**
* \brief List of IPv6 Extensions supported.
*/
Ipv6ExtensionList_t m_extensions;
/**
* \brief List of IPv6 Extensions supported.
*/
Ipv6ExtensionList_t m_extensions;
/**
* \brief The node.
*/
Ptr<Node> m_node;
/**
* \brief The node.
*/
Ptr<Node> m_node;
};
} /* namespace ns3 */

View File

@@ -45,7 +45,7 @@ TypeId Ipv6ExtensionHeader::GetInstanceTypeId () const
}
Ipv6ExtensionHeader::Ipv6ExtensionHeader ()
: m_nextHeader (0),
: m_nextHeader (0),
m_length (0),
m_data (0)
{
@@ -106,13 +106,13 @@ uint32_t Ipv6ExtensionHeader::Deserialize (Buffer::Iterator start)
i.Read (data, dataLength);
if (dataLength > m_data.GetSize ())
{
m_data.AddAtEnd (dataLength - m_data.GetSize ());
}
{
m_data.AddAtEnd (dataLength - m_data.GetSize ());
}
else
{
m_data.RemoveAtEnd (m_data.GetSize () - dataLength);
}
{
m_data.RemoveAtEnd (m_data.GetSize () - dataLength);
}
i = m_data.Begin ();
i.Write (data, dataLength);
@@ -121,7 +121,7 @@ uint32_t Ipv6ExtensionHeader::Deserialize (Buffer::Iterator start)
}
OptionField::OptionField (uint32_t optionsOffset)
: m_optionData (0),
: m_optionData (0),
m_optionsOffset (optionsOffset)
{
}
@@ -141,13 +141,13 @@ void OptionField::Serialize (Buffer::Iterator start) const
uint32_t fill = CalculatePad ((Ipv6OptionHeader::Alignment) {8,0});
NS_LOG_LOGIC ("fill with " << fill << " bytes padding");
switch (fill)
{
{
case 0: return;
case 1: Ipv6OptionPad1Header ().Serialize (start);
return;
default: Ipv6OptionPadnHeader (fill).Serialize (start);
return;
}
}
}
uint32_t OptionField::Deserialize (Buffer::Iterator start, uint32_t length)
@@ -167,13 +167,13 @@ void OptionField::AddOption (Ipv6OptionHeader const& option)
uint32_t pad = CalculatePad (option.GetAlignment ());
NS_LOG_LOGIC ("need " << pad << " bytes padding");
switch (pad)
{
{
case 0: break; //no padding needed
case 1: AddOption (Ipv6OptionPad1Header ());
break;
break;
default: AddOption (Ipv6OptionPadnHeader (pad));
break;
}
break;
}
m_optionData.AddAtEnd (option.GetSerializedSize ());
Buffer::Iterator it = m_optionData.End ();
@@ -214,7 +214,7 @@ TypeId Ipv6ExtensionHopByHopHeader::GetInstanceTypeId () const
}
Ipv6ExtensionHopByHopHeader::Ipv6ExtensionHopByHopHeader ()
: OptionField (2)
: OptionField (2)
{
}
@@ -269,7 +269,7 @@ TypeId Ipv6ExtensionDestinationHeader::GetInstanceTypeId () const
}
Ipv6ExtensionDestinationHeader::Ipv6ExtensionDestinationHeader ()
: OptionField (2)
: OptionField (2)
{
}
@@ -325,7 +325,7 @@ TypeId Ipv6ExtensionFragmentHeader::GetInstanceTypeId () const
}
Ipv6ExtensionFragmentHeader::Ipv6ExtensionFragmentHeader ()
: m_offset (0),
: m_offset (0),
m_identification (0)
{
}
@@ -416,7 +416,7 @@ TypeId Ipv6ExtensionRoutingHeader::GetInstanceTypeId () const
}
Ipv6ExtensionRoutingHeader::Ipv6ExtensionRoutingHeader ()
: m_typeRouting (0),
: m_typeRouting (0),
m_segmentsLeft (0)
{
}
@@ -495,7 +495,7 @@ TypeId Ipv6ExtensionLooseRoutingHeader::GetInstanceTypeId () const
}
Ipv6ExtensionLooseRoutingHeader::Ipv6ExtensionLooseRoutingHeader ()
: m_routersAddress (0)
: m_routersAddress (0)
{
}
@@ -535,9 +535,9 @@ void Ipv6ExtensionLooseRoutingHeader::Print (std::ostream &os) const
<< " typeRouting = " << (uint32_t)GetTypeRouting () << " segmentsLeft = " << (uint32_t)GetSegmentsLeft () << " ";
for (std::vector<Ipv6Address>::const_iterator it = m_routersAddress.begin (); it != m_routersAddress.end (); it++)
{
os << *it << " ";
}
{
os << *it << " ";
}
os << " )";
}
@@ -559,10 +559,10 @@ void Ipv6ExtensionLooseRoutingHeader::Serialize (Buffer::Iterator start) const
i.WriteU32 (0);
for (VectorIpv6Address_t::const_iterator it = m_routersAddress.begin (); it != m_routersAddress.end () ; it++)
{
it->Serialize (buff);
i.Write (buff, 16);
}
{
it->Serialize (buff);
i.Write (buff, 16);
}
}
uint32_t Ipv6ExtensionLooseRoutingHeader::Deserialize (Buffer::Iterator start)
@@ -577,10 +577,10 @@ uint32_t Ipv6ExtensionLooseRoutingHeader::Deserialize (Buffer::Iterator start)
i.ReadU32 ();
for (std::vector<Ipv6Address>::iterator it = m_routersAddress.begin (); it != m_routersAddress.end (); it++)
{
i.Read (buff, 16);
it->Set (buff);
}
{
i.Read (buff, 16);
it->Set (buff);
}
return GetSerializedSize ();
}

View File

@@ -53,11 +53,11 @@ TypeId Ipv6Extension::GetTypeId ()
static TypeId tid = TypeId ("ns3::Ipv6Extension")
.SetParent<Object> ()
.AddAttribute ("ExtensionNumber", "The IPv6 extension number.",
UintegerValue (0),
MakeUintegerAccessor (&Ipv6Extension::GetExtensionNumber),
MakeUintegerChecker<uint8_t> ())
UintegerValue (0),
MakeUintegerAccessor (&Ipv6Extension::GetExtensionNumber),
MakeUintegerChecker<uint8_t> ())
.AddTraceSource ("Drop", "Drop ipv6 packet",
MakeTraceSourceAccessor (&Ipv6Extension::m_dropTrace))
MakeTraceSourceAccessor (&Ipv6Extension::m_dropTrace))
;
return tid;
}
@@ -102,64 +102,64 @@ uint8_t Ipv6Extension::ProcessOptions (Ptr<Packet>& packet, uint8_t offset, uint
uint8_t optionLength = 0;
while (length > processedSize && !isDropped)
{
optionType = *(data + processedSize);
ipv6Option = ipv6OptionDemux->GetOption (optionType);
if (ipv6Option == 0)
{
optionType >>= 6;
switch (optionType)
{
case 0:
optionLength = *(data + processedSize + 1);
break;
optionType = *(data + processedSize);
ipv6Option = ipv6OptionDemux->GetOption (optionType);
case 1:
NS_LOG_LOGIC ("Unknown Option. Drop!");
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
if (ipv6Option == 0)
{
optionType >>= 6;
switch (optionType)
{
case 0:
optionLength = *(data + processedSize + 1);
break;
case 2:
NS_LOG_LOGIC ("Unknown Option. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
case 1:
NS_LOG_LOGIC ("Unknown Option. Drop!");
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
case 3:
NS_LOG_LOGIC ("Unknown Option. Drop!");
case 2:
NS_LOG_LOGIC ("Unknown Option. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
if (!ipv6Header.GetDestinationAddress ().IsMulticast ())
{
icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
}
case 3:
NS_LOG_LOGIC ("Unknown Option. Drop!");
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
if (!ipv6Header.GetDestinationAddress ().IsMulticast ())
{
icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
}
default:
break;
}
m_dropTrace (packet);
optionLength = 0;
isDropped = true;
break;
default:
break;
}
}
else
{
optionLength = ipv6Option->Process (packet, offset + processedSize, ipv6Header, isDropped);
}
processedSize += optionLength;
p->RemoveAtStart (optionLength);
}
else
{
optionLength = ipv6Option->Process (packet, offset + processedSize, ipv6Header, isDropped);
}
processedSize += optionLength;
p->RemoveAtStart (optionLength);
}
return processedSize;
}
@@ -203,9 +203,9 @@ uint8_t Ipv6ExtensionHopByHop::Process (Ptr<Packet>& packet, uint8_t offset, Ipv
Ipv6ExtensionHopByHopHeader hopbyhopHeader;
p->RemoveHeader (hopbyhopHeader);
if (nextHeader)
{
*nextHeader = hopbyhopHeader.GetNextHeader ();
}
{
*nextHeader = hopbyhopHeader.GetNextHeader ();
}
uint8_t processedSize = hopbyhopHeader.GetOptionsOffset ();
offset += processedSize;
@@ -255,9 +255,9 @@ uint8_t Ipv6ExtensionDestination::Process (Ptr<Packet>& packet, uint8_t offset,
Ipv6ExtensionDestinationHeader destinationHeader;
p->RemoveHeader (destinationHeader);
if (nextHeader)
{
*nextHeader = destinationHeader.GetNextHeader ();
}
{
*nextHeader = destinationHeader.GetNextHeader ();
}
uint8_t processedSize = destinationHeader.GetOptionsOffset ();
offset += processedSize;
@@ -295,9 +295,9 @@ void Ipv6ExtensionFragment::DoDispose ()
NS_LOG_FUNCTION_NOARGS ();
for (MapFragments_t::iterator it = m_fragments.begin (); it != m_fragments.end (); it++)
{
it->second = 0;
}
{
it->second = 0;
}
m_fragments.clear ();
Ipv6Extension::DoDispose ();
@@ -321,9 +321,9 @@ uint8_t Ipv6ExtensionFragment::Process (Ptr<Packet>& packet, uint8_t offset, Ipv
p->RemoveHeader (fragmentHeader);
if (nextHeader)
{
*nextHeader = fragmentHeader.GetNextHeader ();
}
{
*nextHeader = fragmentHeader.GetNextHeader ();
}
bool moreFragment = fragmentHeader.GetMoreFragment ();
uint16_t fragmentOffset = fragmentHeader.GetOffset ();
@@ -335,35 +335,35 @@ uint8_t Ipv6ExtensionFragment::Process (Ptr<Packet>& packet, uint8_t offset, Ipv
MapFragments_t::iterator it = m_fragments.find (fragmentsId);
if (it == m_fragments.end ())
{
fragments = Create<Fragments> ();
m_fragments.insert (std::make_pair (fragmentsId, fragments));
}
{
fragments = Create<Fragments> ();
m_fragments.insert (std::make_pair (fragmentsId, fragments));
}
else
{
fragments = it->second;
}
{
fragments = it->second;
}
if (fragmentOffset == 0)
{
Ptr<Packet> unfragmentablePart = packet->Copy ();
unfragmentablePart->RemoveAtEnd (packet->GetSize () - offset);
fragments->SetUnfragmentablePart (unfragmentablePart);
}
{
Ptr<Packet> unfragmentablePart = packet->Copy ();
unfragmentablePart->RemoveAtEnd (packet->GetSize () - offset);
fragments->SetUnfragmentablePart (unfragmentablePart);
}
fragments->AddFragment (p, fragmentOffset, moreFragment);
if (fragments->IsEntire ())
{
packet = fragments->GetPacket ();
isDropped = false;
}
{
packet = fragments->GetPacket ();
isDropped = false;
}
else
{
NS_LOG_LOGIC ("Fragment. Drop!");
m_dropTrace (packet);
isDropped = true;
}
{
NS_LOG_LOGIC ("Fragment. Drop!");
m_dropTrace (packet);
isDropped = true;
}
return 0;
}
@@ -381,10 +381,10 @@ void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragme
bool moreHeader = true;
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
ipv6Header.SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
{
moreHeader = false;
ipv6Header.SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
std::list<std::pair<Ipv6ExtensionHeader *, uint8_t> > unfragmentablePart;
uint32_t unfragmentablePartSize = 0;
@@ -394,64 +394,64 @@ void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragme
uint8_t extensionHeaderLength;
while (moreHeader)
{
if (nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
{
Ipv6ExtensionHopByHopHeader *hopbyhopHeader = new Ipv6ExtensionHopByHopHeader ();
p->RemoveHeader (*hopbyhopHeader);
if (nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
{
Ipv6ExtensionHopByHopHeader *hopbyhopHeader = new Ipv6ExtensionHopByHopHeader ();
p->RemoveHeader (*hopbyhopHeader);
nextHeader = hopbyhopHeader->GetNextHeader ();
extensionHeaderLength = hopbyhopHeader->GetLength ();
nextHeader = hopbyhopHeader->GetNextHeader ();
extensionHeaderLength = hopbyhopHeader->GetLength ();
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
hopbyhopHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
hopbyhopHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (hopbyhopHeader, Ipv6Header::IPV6_EXT_HOP_BY_HOP));
unfragmentablePartSize += extensionHeaderLength;
unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (hopbyhopHeader, Ipv6Header::IPV6_EXT_HOP_BY_HOP));
unfragmentablePartSize += extensionHeaderLength;
}
else if (nextHeader == Ipv6Header::IPV6_EXT_ROUTING)
{
uint8_t numberAddress = (*(p->PeekData () + 1)) / 2;
Ipv6ExtensionLooseRoutingHeader *routingHeader = new Ipv6ExtensionLooseRoutingHeader ();
routingHeader->SetNumberAddress (numberAddress);
p->RemoveHeader (*routingHeader);
nextHeader = routingHeader->GetNextHeader ();
extensionHeaderLength = routingHeader->GetLength ();
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
routingHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (routingHeader, Ipv6Header::IPV6_EXT_ROUTING));
unfragmentablePartSize += extensionHeaderLength;
}
else if (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION)
{
Ipv6ExtensionDestinationHeader *destinationHeader = new Ipv6ExtensionDestinationHeader ();
p->RemoveHeader (*destinationHeader);
nextHeader = destinationHeader->GetNextHeader ();
extensionHeaderLength = destinationHeader->GetLength ();
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
destinationHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (destinationHeader, Ipv6Header::IPV6_EXT_DESTINATION));
unfragmentablePartSize += extensionHeaderLength;
}
}
else if (nextHeader == Ipv6Header::IPV6_EXT_ROUTING)
{
uint8_t numberAddress = (*(p->PeekData () + 1)) / 2;
Ipv6ExtensionLooseRoutingHeader *routingHeader = new Ipv6ExtensionLooseRoutingHeader ();
routingHeader->SetNumberAddress (numberAddress);
p->RemoveHeader (*routingHeader);
nextHeader = routingHeader->GetNextHeader ();
extensionHeaderLength = routingHeader->GetLength ();
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
routingHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (routingHeader, Ipv6Header::IPV6_EXT_ROUTING));
unfragmentablePartSize += extensionHeaderLength;
}
else if (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION)
{
Ipv6ExtensionDestinationHeader *destinationHeader = new Ipv6ExtensionDestinationHeader ();
p->RemoveHeader (*destinationHeader);
nextHeader = destinationHeader->GetNextHeader ();
extensionHeaderLength = destinationHeader->GetLength ();
if (!(nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP || nextHeader == Ipv6Header::IPV6_EXT_ROUTING
|| (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION && *p->PeekData () == Ipv6Header::IPV6_EXT_ROUTING)))
{
moreHeader = false;
destinationHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
}
unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (destinationHeader, Ipv6Header::IPV6_EXT_DESTINATION));
unfragmentablePartSize += extensionHeaderLength;
}
}
Ipv6ExtensionFragmentHeader fragmentHeader;
uint8_t fragmentHeaderSize = fragmentHeader.GetSerializedSize ();
@@ -465,65 +465,65 @@ void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragme
uint16_t offset = 0;
do
{
if (p->GetSize () > offset + maxFragmentablePartSize)
{
moreFragment = true;
currentFragmentablePartSize = maxFragmentablePartSize;
}
else
{
moreFragment = false;
currentFragmentablePartSize = p->GetSize () - offset;
}
if (p->GetSize () > offset + maxFragmentablePartSize)
{
moreFragment = true;
currentFragmentablePartSize = maxFragmentablePartSize;
}
else
{
moreFragment = false;
currentFragmentablePartSize = p->GetSize () - offset;
}
currentFragmentablePartSize -= currentFragmentablePartSize % 8;
currentFragmentablePartSize -= currentFragmentablePartSize % 8;
fragmentHeader.SetNextHeader (nextHeader);
fragmentHeader.SetLength (currentFragmentablePartSize);
fragmentHeader.SetOffset (offset);
fragmentHeader.SetMoreFragment (moreFragment);
fragmentHeader.SetIdentification (identification);
fragmentHeader.SetNextHeader (nextHeader);
fragmentHeader.SetLength (currentFragmentablePartSize);
fragmentHeader.SetOffset (offset);
fragmentHeader.SetMoreFragment (moreFragment);
fragmentHeader.SetIdentification (identification);
Ptr<Packet> fragment = p->CreateFragment (offset, currentFragmentablePartSize);
offset += currentFragmentablePartSize;
Ptr<Packet> fragment = p->CreateFragment (offset, currentFragmentablePartSize);
offset += currentFragmentablePartSize;
fragment->AddHeader (fragmentHeader);
fragment->AddHeader (fragmentHeader);
for (std::list<std::pair<Ipv6ExtensionHeader *, uint8_t> >::iterator it = unfragmentablePart.begin (); it != unfragmentablePart.end (); it++)
{
if (it->second == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
{
fragment->AddHeader (*dynamic_cast<Ipv6ExtensionHopByHopHeader *>(it->first));
}
else if (it->second == Ipv6Header::IPV6_EXT_ROUTING)
{
fragment->AddHeader (*dynamic_cast<Ipv6ExtensionLooseRoutingHeader *>(it->first));
}
else if (it->second == Ipv6Header::IPV6_EXT_DESTINATION)
{
fragment->AddHeader (*dynamic_cast<Ipv6ExtensionDestinationHeader *>(it->first));
}
}
for (std::list<std::pair<Ipv6ExtensionHeader *, uint8_t> >::iterator it = unfragmentablePart.begin (); it != unfragmentablePart.end (); it++)
{
if (it->second == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
{
fragment->AddHeader (*dynamic_cast<Ipv6ExtensionHopByHopHeader *>(it->first));
}
else if (it->second == Ipv6Header::IPV6_EXT_ROUTING)
{
fragment->AddHeader (*dynamic_cast<Ipv6ExtensionLooseRoutingHeader *>(it->first));
}
else if (it->second == Ipv6Header::IPV6_EXT_DESTINATION)
{
fragment->AddHeader (*dynamic_cast<Ipv6ExtensionDestinationHeader *>(it->first));
}
}
ipv6Header.SetPayloadLength (fragment->GetSize ());
fragment->AddHeader (ipv6Header);
ipv6Header.SetPayloadLength (fragment->GetSize ());
fragment->AddHeader (ipv6Header);
std::ostringstream oss;
fragment->Print (oss);
listFragments.push_back (fragment);
} while (moreFragment);
std::ostringstream oss;
fragment->Print (oss);
listFragments.push_back (fragment);
} while (moreFragment);
for (std::list<std::pair<Ipv6ExtensionHeader *, uint8_t> >::iterator it = unfragmentablePart.begin (); it != unfragmentablePart.end (); it++)
{
delete it->first;
}
{
delete it->first;
}
unfragmentablePart.clear ();
}
Ipv6ExtensionFragment::Fragments::Fragments ()
: m_moreFragment (0)
: m_moreFragment (0)
{
}
@@ -536,17 +536,17 @@ void Ipv6ExtensionFragment::Fragments::AddFragment (Ptr<Packet> fragment, uint16
std::list<std::pair<Ptr<Packet>, uint16_t> >::iterator it;
for (it = m_fragments.begin (); it != m_fragments.end (); it++)
{
if (it->second > fragmentOffset)
{
break;
if (it->second > fragmentOffset)
{
break;
}
}
}
if (it == m_fragments.end ())
{
m_moreFragment = moreFragment;
}
{
m_moreFragment = moreFragment;
}
m_fragments.insert (it, std::make_pair<Ptr<Packet>, uint16_t> (fragment, fragmentOffset));
}
@@ -561,20 +561,20 @@ bool Ipv6ExtensionFragment::Fragments::IsEntire () const
bool ret = !m_moreFragment && m_fragments.size () > 0;
if (ret)
{
uint16_t lastEndOffset = 0;
for (std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator it = m_fragments.begin (); it != m_fragments.end (); it++)
{
if (lastEndOffset != it->second)
{
ret = false;
break;
}
uint16_t lastEndOffset = 0;
lastEndOffset += it->first->GetSize ();
for (std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator it = m_fragments.begin (); it != m_fragments.end (); it++)
{
if (lastEndOffset != it->second)
{
ret = false;
break;
}
lastEndOffset += it->first->GetSize ();
}
}
}
return ret;
}
@@ -584,9 +584,9 @@ Ptr<Packet> Ipv6ExtensionFragment::Fragments::GetPacket () const
Ptr<Packet> p = m_unfragmentable->Copy ();
for (std::list<std::pair<Ptr<Packet>, uint16_t> >::const_iterator it = m_fragments.begin (); it != m_fragments.end (); it++)
{
p->AddAtEnd (it->first);
}
{
p->AddAtEnd (it->first);
}
return p;
}
@@ -645,9 +645,9 @@ uint8_t Ipv6ExtensionRouting::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6
uint8_t routingSegmentsLeft = *(buff+3);
if (nextHeader)
{
*nextHeader = routingNextHeader;
}
{
*nextHeader = routingNextHeader;
}
Ptr<Icmpv6L4Protocol> icmpv6 = GetNode ()->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
@@ -655,22 +655,22 @@ uint8_t Ipv6ExtensionRouting::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6
Ptr<Ipv6ExtensionRouting> ipv6ExtensionRouting = ipv6ExtensionRoutingDemux->GetExtensionRouting (routingTypeRouting);
if (ipv6ExtensionRouting == 0)
{
if (routingSegmentsLeft == 0)
{
isDropped = false;
}
else
{
NS_LOG_LOGIC ("Malformed header. Drop!");
if (routingSegmentsLeft == 0)
{
isDropped = false;
}
else
{
NS_LOG_LOGIC ("Malformed header. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
m_dropTrace (packet);
isDropped = true;
}
icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
m_dropTrace (packet);
isDropped = true;
}
return routingLength;
}
return routingLength;
}
return ipv6ExtensionRouting->Process (packet, offset, ipv6Header, dst, (uint8_t *)0, isDropped);
}
@@ -683,9 +683,9 @@ TypeId Ipv6ExtensionRoutingDemux::GetTypeId ()
static TypeId tid = TypeId ("ns3::Ipv6ExtensionRoutingDemux")
.SetParent<Object> ()
.AddAttribute ("Routing Extensions", "The set of IPv6 Routing extensions registered with this demux.",
ObjectVectorValue (),
MakeObjectVectorAccessor (&Ipv6ExtensionRoutingDemux::m_extensionsRouting),
MakeObjectVectorChecker<Ipv6ExtensionRouting> ())
ObjectVectorValue (),
MakeObjectVectorAccessor (&Ipv6ExtensionRoutingDemux::m_extensionsRouting),
MakeObjectVectorChecker<Ipv6ExtensionRouting> ())
;
return tid;
}
@@ -701,10 +701,10 @@ Ipv6ExtensionRoutingDemux::~Ipv6ExtensionRoutingDemux ()
void Ipv6ExtensionRoutingDemux::DoDispose ()
{
for (Ipv6ExtensionRoutingList_t::iterator it = m_extensionsRouting.begin (); it != m_extensionsRouting.end (); it++)
{
(*it)->Dispose ();
*it = 0;
}
{
(*it)->Dispose ();
*it = 0;
}
m_extensionsRouting.clear ();
m_node = 0;
Object::DoDispose ();
@@ -723,12 +723,12 @@ void Ipv6ExtensionRoutingDemux::Insert (Ptr<Ipv6ExtensionRouting> extensionRouti
Ptr<Ipv6ExtensionRouting> Ipv6ExtensionRoutingDemux::GetExtensionRouting (uint8_t typeRouting)
{
for (Ipv6ExtensionRoutingList_t::iterator i = m_extensionsRouting.begin (); i != m_extensionsRouting.end (); i++)
{
if ((*i)->GetTypeRouting () == typeRouting)
{
return *i;
if ((*i)->GetTypeRouting () == typeRouting)
{
return *i;
}
}
}
return 0;
}
@@ -792,9 +792,9 @@ uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet, uint8_t offset,
p->RemoveHeader (routingHeader);
if (nextHeader)
{
*nextHeader = routingHeader.GetNextHeader ();
}
{
*nextHeader = routingHeader.GetNextHeader ();
}
Ptr<Icmpv6L4Protocol> icmpv6 = GetNode ()->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
@@ -808,51 +808,51 @@ uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet, uint8_t offset,
Ipv6Address nextAddress;
if (segmentsLeft == 0)
{
isDropped = false;
return routingHeader.GetSerializedSize ();
}
{
isDropped = false;
return routingHeader.GetSerializedSize ();
}
if (length % 2 != 0)
{
NS_LOG_LOGIC ("Malformed header. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
{
NS_LOG_LOGIC ("Malformed header. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
if (segmentsLeft > nbAddress)
{
NS_LOG_LOGIC ("Malformed header. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 3);
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
{
NS_LOG_LOGIC ("Malformed header. Drop!");
icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 3);
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
routingHeader.SetSegmentsLeft (segmentsLeft - 1);
nextAddressIndex = nbAddress - segmentsLeft;
nextAddress = routingHeader.GetRouterAddress (nextAddressIndex);
if (nextAddress.IsMulticast () || destAddress.IsMulticast ())
{
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
{
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
routingHeader.SetRouterAddress (nextAddressIndex, destAddress);
ipv6header.SetDestinationAddress (nextAddress);
if (hopLimit <= 1)
{
NS_LOG_LOGIC ("Time Exceeded : Hop Limit <= 1. Drop!");
icmpv6->SendErrorTimeExceeded (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_HOPLIMIT);
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
{
NS_LOG_LOGIC ("Time Exceeded : Hop Limit <= 1. Drop!");
icmpv6->SendErrorTimeExceeded (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_HOPLIMIT);
m_dropTrace (packet);
isDropped = true;
return routingHeader.GetSerializedSize ();
}
routingHeader.SetLength (88);
ipv6header.SetHopLimit (hopLimit - 1);
@@ -873,14 +873,14 @@ uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet, uint8_t offset,
Ptr<Ipv6Route> rtentry = ipv6rp->RouteOutput (p, ipv6header, 0, err);
if (rtentry)
{
/* we know a route exists so send packet now */
ipv6->SendRealOut (rtentry, p, ipv6header);
}
{
/* we know a route exists so send packet now */
ipv6->SendRealOut (rtentry, p, ipv6header);
}
else
{
NS_LOG_INFO ("No route for next router");
}
{
NS_LOG_INFO ("No route for next router");
}
/* as we directly send packet, mark it as dropped */
isDropped = true;

View File

@@ -35,9 +35,9 @@ TypeId Ipv6OptionDemux::GetTypeId ()
static TypeId tid = TypeId ("ns3::Ipv6OptionDemux")
.SetParent<Object> ()
.AddAttribute ("Options", "The set of IPv6 options registered with this demux.",
ObjectVectorValue (),
MakeObjectVectorAccessor (&Ipv6OptionDemux::m_options),
MakeObjectVectorChecker<Ipv6Option> ())
ObjectVectorValue (),
MakeObjectVectorAccessor (&Ipv6OptionDemux::m_options),
MakeObjectVectorChecker<Ipv6Option> ())
;
return tid;
}
@@ -53,10 +53,10 @@ Ipv6OptionDemux::~Ipv6OptionDemux ()
void Ipv6OptionDemux::DoDispose ()
{
for (Ipv6OptionList_t::iterator it = m_options.begin (); it != m_options.end (); it++)
{
(*it)->Dispose ();
*it = 0;
}
{
(*it)->Dispose ();
*it = 0;
}
m_options.clear ();
m_node = 0;
Object::DoDispose ();
@@ -75,12 +75,12 @@ void Ipv6OptionDemux::Insert (Ptr<Ipv6Option> option)
Ptr<Ipv6Option> Ipv6OptionDemux::GetOption (int optionNumber)
{
for (Ipv6OptionList_t::iterator i = m_options.begin (); i != m_options.end (); ++i)
{
if ((*i)->GetOptionNumber () == optionNumber)
{
return *i;
if ((*i)->GetOptionNumber () == optionNumber)
{
return *i;
}
}
}
return 0;
}

View File

@@ -37,66 +37,66 @@ class Node;
*/
class Ipv6OptionDemux : public Object
{
public:
/**
* \brief The interface ID.
* \return type ID
*/
static TypeId GetTypeId (void);
public:
/**
* \brief The interface ID.
* \return type ID
*/
static TypeId GetTypeId (void);
/**
* \brief Constructor.
*/
Ipv6OptionDemux ();
/**
* \brief Constructor.
*/
Ipv6OptionDemux ();
/**
* \brief Destructor.
*/
virtual ~Ipv6OptionDemux ();
/**
* \brief Destructor.
*/
virtual ~Ipv6OptionDemux ();
/**
* \brief Set the node.
* \param node the node to set
*/
void SetNode (Ptr<Node> node);
/**
* \brief Set the node.
* \param node the node to set
*/
void SetNode (Ptr<Node> node);
/**
* \brief Insert a new IPv6 Option.
* \param option the option to insert
*/
void Insert (Ptr<Ipv6Option> option);
/**
* \brief Insert a new IPv6 Option.
* \param option the option to insert
*/
void Insert (Ptr<Ipv6Option> option);
/**
* \brief Get the option corresponding to optionNumber.
* \param optionNumber the option number of the option to retrieve
* \return a matching IPv6 option
*/
Ptr<Ipv6Option> GetOption (int optionNumber);
/**
* \brief Get the option corresponding to optionNumber.
* \param optionNumber the option number of the option to retrieve
* \return a matching IPv6 option
*/
Ptr<Ipv6Option> GetOption (int optionNumber);
/**
* \brief Remove an option from this demux.
* \param option pointer on the option to remove
*/
void Remove (Ptr<Ipv6Option> option);
/**
* \brief Remove an option from this demux.
* \param option pointer on the option to remove
*/
void Remove (Ptr<Ipv6Option> option);
protected:
/**
* \brief Dispose this object.
*/
virtual void DoDispose();
protected:
/**
* \brief Dispose this object.
*/
virtual void DoDispose();
private:
typedef std::list<Ptr<Ipv6Option> > Ipv6OptionList_t;
private:
typedef std::list<Ptr<Ipv6Option> > Ipv6OptionList_t;
/**
* \brief List of IPv6 Options supported.
*/
Ipv6OptionList_t m_options;
/**
* \brief List of IPv6 Options supported.
*/
Ipv6OptionList_t m_options;
/**
* \brief The node.
*/
Ptr<Node> m_node;
/**
* \brief The node.
*/
Ptr<Node> m_node;
};
} /* namespace ns3 */

View File

@@ -45,7 +45,7 @@ TypeId Ipv6OptionHeader::GetInstanceTypeId () const
}
Ipv6OptionHeader::Ipv6OptionHeader ()
: m_type (0),
: m_type (0),
m_length (0)
{
}
@@ -212,9 +212,9 @@ void Ipv6OptionPadnHeader::Serialize (Buffer::Iterator start) const
i.WriteU8 (GetLength ());
for (int padding = 0; padding < GetLength (); padding++)
{
i.WriteU8 (0);
}
{
i.WriteU8 (0);
}
}
uint32_t Ipv6OptionPadnHeader::Deserialize (Buffer::Iterator start)
@@ -315,7 +315,7 @@ TypeId Ipv6OptionRouterAlertHeader::GetInstanceTypeId () const
}
Ipv6OptionRouterAlertHeader::Ipv6OptionRouterAlertHeader ()
: m_value (0)
: m_value (0)
{
SetLength (2);
}

View File

@@ -36,9 +36,9 @@ TypeId Ipv6Option::GetTypeId ()
static TypeId tid = TypeId ("ns3::Ipv6Option")
.SetParent<Object> ()
.AddAttribute ("OptionNumber", "The IPv6 option number.",
UintegerValue (0),
MakeUintegerAccessor (&Ipv6Option::GetOptionNumber),
MakeUintegerChecker<uint8_t> ())
UintegerValue (0),
MakeUintegerAccessor (&Ipv6Option::GetOptionNumber),
MakeUintegerChecker<uint8_t> ())
;
return tid;
}